diff --git a/.circleci/README.md b/.circleci/README.md index ef83676e69181..b3d26d0b68f54 100644 --- a/.circleci/README.md +++ b/.circleci/README.md @@ -16,9 +16,9 @@ should have it). Example: ```bash cd .circleci/images/runner -docker build -t datadog/datadog-agent-runner-circle:go1147 . +docker build --platform=linux/amd64 -t datadog/datadog-agent-runner-circle:go1195 . docker login -docker push datadog/datadog-agent-runner-circle:go1147 +docker push datadog/datadog-agent-runner-circle:go1195 ``` Once your image is pushed, update this file: diff --git a/.circleci/config.yml b/.circleci/config.yml index 7d1e6c43baba9..8c851e828987c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,7 +15,7 @@ experimental: templates: job_template: &job_template docker: - - image: datadog/datadog-agent-runner-circle:go1189 + - image: datadog/datadog-agent-runner-circle:go1195 environment: USE_SYSTEM_LIBS: "1" working_directory: /go/src/github.com/DataDog/datadog-agent diff --git a/.circleci/images/builder/Dockerfile b/.circleci/images/builder/Dockerfile index 5ace1def9a514..13425836dd737 100644 --- a/.circleci/images/builder/Dockerfile +++ b/.circleci/images/builder/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.14.7 +FROM golang:1.19.5 RUN sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list \ && sed -i 's/^#\s*\(deb.*multiverse\)$/\1/g' /etc/apt/sources.list \ diff --git a/.circleci/images/runner/Dockerfile b/.circleci/images/runner/Dockerfile index 6431e17efd7b0..b9c079a99efb7 100644 --- a/.circleci/images/runner/Dockerfile +++ b/.circleci/images/runner/Dockerfile @@ -12,6 +12,7 @@ RUN set -ex \ && apt-get update && apt-get upgrade -y \ && apt-get install -y --no-install-recommends \ curl \ + default-jre \ doxygen \ file \ g++ \ @@ -37,7 +38,7 @@ RUN set -ex \ xz-utils # Golang -ENV GIMME_GO_VERSION 1.18.9 +ENV GIMME_GO_VERSION 1.19.5 ENV GOROOT /root/.gimme/versions/go$GIMME_GO_VERSION.linux.amd64 ENV GOPATH /go ENV PATH $GOROOT/bin:$GOPATH/bin:$PATH diff --git a/.copyright-overrides.yml b/.copyright-overrides.yml index 120b480b4d2c2..6b0e50b8fae35 100644 --- a/.copyright-overrides.yml +++ b/.copyright-overrides.yml @@ -16,8 +16,10 @@ # These whole classes of package names have fixed copyright cloud.google.com/*: Copyright 2019 Google LLC code.cloudfoundry.org/*: Copyright (c) 2016-Present CloudFoundry.org Foundation, Inc. All Rights Reserved. +github.com/GoogleCloudPlatform/docker-credential-gcr: Copyright 2016 Google, Inc. github.com/aws/aws-lambda-go: Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. github.com/aws/aws-sdk-go: ["Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.", "Copyright 2014-2015 Stripe, Inc."] +github.com/aws/aws-sdk-go-v2: ["Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.", "Copyright 2014-2015 Stripe, Inc."] github.com/containerd/*: Copyright 2012-2015 Docker, Inc. github.com/coreos/*: Copyright 2017 CoreOS, Inc github.com/docker/*: Copyright 2012-2017 Docker, Inc. @@ -70,22 +72,38 @@ github.com/openshift/api/quota: Copyright 2020 Red Hat, Inc. # https://datadoghq.atlassian.net/browse/AC-1296 github.com/DataDog/mmh3: Copyright (c) 2017 Datadog, Inc. +# https://github.com/briandowns/spinner/blob/master/NOTICE.txt +github.com/briandowns/spinner: Copyright (c) 2022 Brian J. Downs + +# https://github.com/shibumi/go-pathspec/blob/master/GO-LICENSE +github.com/shibumi/go-pathspec: Copyright (c) 2012 The Go Authors. All rights reserved. + +# https://github.com/acomagu/bufpipe/blob/master/LICENSE +github.com/acomagu/bufpipe: Copyright (c) 2019 acomagu + # For Apache projects, copyright is typically in individual source files and # not scanned automatically. github.com/tklauser/numcpus: Copyright 2018 Tobias Klauser github.com/Masterminds/goutils: "Copyright 2014 Alexander Okoli" -github.com/dgraph-io/ristretto: +github.com/outcaste-io/ristretto: - "Copyright 2019 Dgraph Labs, Inc. and Contributors" - "Copyright 2020 Dgraph Labs, Inc. and Contributors" + - "Copyright 2021 Dgraph Labs, Inc. and Contributors" - "Copyright 2020 The LevelDB-Go and Pebble Authors. All rights reserved." - "Copyright (c) 2014 Andreas Briese, eduToolbox@Bri-C GmbH, Sarstedt" - "Copyright (c) 2019 Ewan Chou" github.com/go-logr/logr: ["Copyright 2019 The logr Authors.", "Copyright 2020 The logr Authors."] github.com/go-logr/stdr: "Copyright 2019 The logr Authors." +github.com/go-openapi/analysis: Copyright 2015 go-swagger maintainers +github.com/go-openapi/errors: Copyright 2015 go-swagger maintainers github.com/go-openapi/jsonpointer: "Copyright 2013 sigu-399 ( https://github.com/sigu-399 )" github.com/go-openapi/jsonreference: "Copyright 2013 sigu-399 ( https://github.com/sigu-399 )" +github.com/go-openapi/loads: Copyright 2015 go-swagger maintainers +github.com/go-openapi/runtime: Copyright 2015 go-swagger maintainers github.com/go-openapi/spec: Copyright 2015 go-swagger maintainers +github.com/go-openapi/strfmt: Copyright 2015 go-swagger maintainers github.com/go-openapi/swag: Copyright 2015 go-swagger maintainers +github.com/go-openapi/validate: Copyright 2015 go-swagger maintainers github.com/google/gofuzz: Copyright 2014 Google Inc. All rights reserved. github.com/kubernetes-sigs/custom-metrics-apiserver: Copyright 2018 The Kubernetes Authors. github.com/mostynb/go-grpc-compression/snappy: Copyright 2017 gRPC authors. @@ -97,6 +115,16 @@ github.com/xeipuuv/gojsonreference: Copyright 2015 xeipuuv ( https://github.com/ github.com/xeipuuv/gojsonschema: Copyright 2015 xeipuuv github.com/open-policy-agent/opa: Copyright 2016 The OPA Authors. All rights reserved. github.com/containernetworking/*: Copyright 2019 CNI authors +github.com/xanzy/ssh-agent: ["Copyright (c) 2014 David Mzareulyan", "Copyright 2015, Sander van Harmelen"] +github.com/google/go-containerregistry: + - "Copyright 2018 Google LLC All Rights Reserved." + - "Copyright 2019 Google LLC All Rights Reserved." + - "Copyright 2020 Google LLC All Rights Reserved." + - "Copyright 2021 Google LLC All Rights Reserved." + - "Copyright 2022 Google LLC All Rights Reserved." +github.com/google/licenseclassifier/v2: + - "Copyright 2017 Google LLC All Rights Reserved." + - "Copyright 2020 Google LLC All Rights Reserved." # These have large AUTHORS/CONTRIBUTORS files but attribute copyright as a group github.com/aptly-dev/aptly: Copyright 2013-2015 aptly authors. All rights reserved. @@ -110,6 +138,7 @@ github.com/klauspost/compress/snappy: Copyright (c) 2011 The Snappy-Go Authors. github.com/golang/snappy: Copyright (c) 2011 The Snappy-Go Authors. All rights reserved. github.com/shirou/w32: Copyright (c) 2010-2012 The w32 Authors. All rights reserved. github.com/gogo/protobuf: ["Copyright (c) 2013, The GoGo Authors. All rights reserved.", "Copyright 2010 The Go Authors. All rights reserved."] + # These are just difficult to figure out, as they have no full copyright declaration. # The following rules are applied: # * Automatic "Copyright (c)" @@ -126,3 +155,14 @@ gomodules.xyz/jsonpatch: Copyright (c) 2015 The Authors github.com/bytecodealliance/wasmtime-go: Copyright (c) 2020 The Bytecode Alliance github.com/OneOfOne/xxhash: Copyright (c) 2014 Ahmed W. (OneOfOne) github.com/yashtewari/glob-intersection: Copyright (c) 2018 Yash Tewari (yashtewari) +go.mongodb.org/mongo-driver/*: Copyright © 2018 MongoDB, Inc. +github.com/masahiro331/go-ext4-filesystem: Copyright (c) 2021 masahiro331 +github.com/masahiro331/go-mvn-version: Copyright (c) 2020 masahiro331 +github.com/masahiro331/go-vmdk-parser: Copyright (c) 2020 masahiro331 +github.com/masahiro331/go-xfs-filesystem: Copyright (c) 2021 masahiro331 +github.com/knqyf263/go-apk-version: Copyright (c) 2020 Teppei Fukuda (knqyf263) +github.com/aquasecurity/go-gem-version: Copyright (c) 2020 Teppei Fukuda (knqyf263) +github.com/aquasecurity/go-npm-version: Copyright (c) 2020 Teppei Fukuda (knqyf263) +github.com/aquasecurity/go-pep440-version: Copyright (c) 2020 Teppei Fukuda (knqyf263) +github.com/aquasecurity/go-version: Copyright (c) 2020 Teppei Fukuda (knqyf263) +github.com/spdx/tools-golang: Copyright (c) 2018 The Authors diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index cf0bfd9343a43..687b44389b913 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -137,6 +137,7 @@ /cmd/system-probe/windows/ @DataDog/windows-kernel-integrations /cmd/system-probe/windows_resources/ @DataDog/windows-kernel-integrations /cmd/system-probe/main_windows*.go @DataDog/windows-kernel-integrations +/cmd/systray/ @DataDog/windows-agent /cmd/security-agent/ @DataDog/agent-security /dev/ @DataDog/agent-platform @@ -176,6 +177,9 @@ # BEGIN COMPONENTS /comp @DataDog/agent-shared-components /comp/core @DataDog/agent-shared-components +/comp/process @DataDog/processes +/comp/systray @DataDog/windows-agent +/comp/core/sysprobeconfig @DataDog/ebpf-platform # END COMPONENTS # pkg @@ -211,6 +215,7 @@ /pkg/collector/corechecks/cluster/ @DataDog/container-integrations /pkg/collector/corechecks/cluster/orchestrator @DataDog/container-app /pkg/collector/corechecks/containers/ @DataDog/container-integrations +/pkg/collector/corechecks/containerimage/ @DataDog/container-integrations /pkg/collector/corechecks/containerlifecycle/ @DataDog/container-integrations /pkg/collector/corechecks/ebpf/ @DataDog/container-integrations /pkg/collector/corechecks/embed/ @Datadog/agent-platform @@ -218,6 +223,7 @@ /pkg/collector/corechecks/embed/apm*.go @Datadog/agent-platform @DataDog/agent-apm /pkg/collector/corechecks/embed/process_agent*.go @Datadog/agent-platform @DataDog/processes /pkg/collector/corechecks/net/ @DataDog/agent-platform +/pkg/collector/corechecks/sbom/ @DataDog/container-integrations /pkg/collector/corechecks/snmp/ @DataDog/network-device-monitoring /pkg/collector/corechecks/system/ @DataDog/agent-platform /pkg/collector/corechecks/system/**/*_windows*.go @DataDog/agent-platform @DataDog/windows-agent @@ -249,6 +255,7 @@ /pkg/serializer/ @DataDog/agent-metrics-logs /pkg/tagger/ @DataDog/container-integrations /pkg/tagset/ @DataDog/agent-shared-components +/pkg/util/aggregatingqueue @DataDog/container-integrations /pkg/util/cloudproviders/cloudfoundry/ @DataDog/platform-integrations /pkg/util/clusteragent/ @DataDog/container-integrations /pkg/util/containerd/ @DataDog/container-integrations @@ -260,6 +267,7 @@ /pkg/util/kubernetes/ @DataDog/container-integrations @DataDog/container-app /pkg/util/orchestrator/ @DataDog/container-app /pkg/util/podman/ @DataDog/container-integrations +/pkg/util/trivy/ @DataDog/container-integrations /pkg/util/cgroups/ @DataDog/container-integrations /pkg/util/retry/ @DataDog/container-integrations /pkg/util/intern/ @DataDog/ebpf-platform @@ -280,6 +288,8 @@ /pkg/network/driver_*.go @DataDog/windows-kernel-integrations /pkg/network/dns/*_windows*.go @DataDog/windows-kernel-integrations /pkg/network/driver/ @DataDog/windows-kernel-integrations +/pkg/network/ebpf/c/prebuilt/usm* @DataDog/universal-service-monitoring +/pkg/network/ebpf/c/runtime/usm* @DataDog/universal-service-monitoring /pkg/network/ebpf/c/prebuilt/http* @DataDog/universal-service-monitoring /pkg/network/ebpf/c/runtime/http* @DataDog/universal-service-monitoring /pkg/network/ebpf/c/protocols/ @DataDog/universal-service-monitoring @@ -287,11 +297,14 @@ /pkg/network/encoding/*usm* @DataDog/universal-service-monitoring /pkg/network/etw/ @DataDog/windows-kernel-integrations /pkg/network/go/ @DataDog/universal-service-monitoring +/pkg/network/java/ @DataDog/universal-service-monitoring /pkg/network/protocols/ @DataDog/universal-service-monitoring /pkg/network/protocols/http/driver_*.go @DataDog/windows-kernel-integrations +/pkg/network/protocols/http/etw_*.go @DataDog/windows-kernel-integrations /pkg/network/protocols/http/*_windows*.go @DataDog/windows-kernel-integrations /pkg/network/tracer/*classification*.go @DataDog/universal-service-monitoring /pkg/network/tracer/testutil/gotls_client @DataDog/universal-service-monitoring +/pkg/network/tracer/testutil/postgres @DataDog/universal-service-monitoring /pkg/network/tracer/tracer_usm_linux_test.go @DataDog/universal-service-monitoring /pkg/network/tracer/*_windows*.go @DataDog/windows-kernel-integrations /pkg/ebpf/ @DataDog/ebpf-platform @@ -319,12 +332,14 @@ /rtloader/ @DataDog/agent-metrics-logs /tasks/ @DataDog/agent-platform +/tasks/msi.py @DataDog/windows-agent /tasks/agent.py @DataDog/agent-shared-components /tasks/cluster_agent_cloudfoundry.py @DataDog/platform-integrations /tasks/process_agent.py @DataDog/processes /tasks/system_probe.py @DataDog/ebpf-platform /tasks/trace_agent.py @DataDog/agent-apm /tasks/security_agent.py @DataDog/agent-security +/tasks/systray.py @DataDog/windows-agent /tasks/winbuildscripts/ @DataDog/windows-agent /test/ @DataDog/agent-platform /test/benchmarks/ @DataDog/agent-metrics-logs diff --git a/.gitignore b/.gitignore index 1c4ff7185e445..df5ba4c0e4830 100644 --- a/.gitignore +++ b/.gitignore @@ -45,6 +45,9 @@ Dockerfiles/cluster-agent/dist Dockerfiles/cluster-agent/security-agent-policies pkg/status/template.go +# gotestsum-generated files +module_test_output.json + # jetbrains IDE directory /.idea/ @@ -109,6 +112,12 @@ system-probe-msg.h **/.ninja_deps *.ninja pkg/ebpf/bytecode/build/**/*.d +pkg/ebpf/bytecode/runtime/conntrack.go +pkg/ebpf/bytecode/runtime/http.go +pkg/ebpf/bytecode/runtime/oom-kill.go +pkg/ebpf/bytecode/runtime/runtime-security.go +pkg/ebpf/bytecode/runtime/tcp-queue-length.go +pkg/ebpf/bytecode/runtime/tracer.go pkg/security/tests/syscall_tester/**/*.d # dsd artifacts @@ -179,3 +188,11 @@ cscope.out # Go workspace until we have proper support in the tooling go.work* + +tools/windows/DatadogAgentInstaller/.vs/ +tools/windows/DatadogAgentInstaller/packages/ +tools/windows/DatadogAgentInstaller/WixSetup/cabcache/ +*.wixobj +*obj* +*.g.wxs +*.DotSettings.user diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 344d9b0865700..dfd8acfae4412 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -137,17 +137,18 @@ variables: ## comment out the line below to disable integration wheels cache INTEGRATION_WHEELS_CACHE_BUCKET: dd-agent-omnibus S3_DD_AGENT_OMNIBUS_LLVM_URI: s3://dd-agent-omnibus/llvm + S3_DD_AGENT_OMNIBUS_BTFS_URI: s3://dd-agent-omnibus/btfs GENERAL_ARTIFACTS_CACHE_BUCKET_URL: https://dd-agent-omnibus.s3.amazonaws.com S3_DSD6_URI: s3://dsd6-staging RELEASE_VERSION_6: nightly RELEASE_VERSION_7: nightly-a7 - DATADOG_AGENT_BUILDIMAGES: v11651098-faf0544 + DATADOG_AGENT_BUILDIMAGES: v12592973-d8cab2e DATADOG_AGENT_BUILDERS: v9930706-ef9d493 - DATADOG_AGENT_WINBUILDIMAGES: v11651098-faf0544 - DATADOG_AGENT_ARMBUILDIMAGES: v11651098-faf0544 - DATADOG_AGENT_SYSPROBE_BUILDIMAGES: v11651098-faf0544 - DATADOG_AGENT_NIKOS_BUILDIMAGES: v11651098-faf0544 - DATADOG_AGENT_BTF_GEN_BUILDIMAGES: v10582792-c2b9fb7 + DATADOG_AGENT_WINBUILDIMAGES: v12592973-d8cab2e + DATADOG_AGENT_ARMBUILDIMAGES: v12592973-d8cab2e + DATADOG_AGENT_SYSPROBE_BUILDIMAGES: v13019318-b404755 + DATADOG_AGENT_NIKOS_BUILDIMAGES: v12592973-d8cab2e + DATADOG_AGENT_BTF_GEN_BUILDIMAGES: v11463399-6ff70af DATADOG_AGENT_EMBEDDED_PATH: /opt/datadog-agent/embedded NIKOS_INSTALL_DIR: /opt/datadog-agent/embedded/nikos NIKOS_EMBEDDED_PATH: /opt/datadog-agent/embedded/nikos/embedded diff --git a/.gitlab/JOBOWNERS b/.gitlab/JOBOWNERS index 8a242e475142c..e19bdf75c80c5 100644 --- a/.gitlab/JOBOWNERS +++ b/.gitlab/JOBOWNERS @@ -1,7 +1,10 @@ * @DataDog/agent-platform # Deps build -build_clang* @DataDog/ebpf-platform +build_clang_* @DataDog/ebpf-platform +build_omnibus-nikos_* @DataDog/ebpf-platform +build_processed_btfhub_archive @DataDog/ebpf-platform +build_vcpkg_deps @DataDog/windows-agent # Source test # Notifications are handled separately for more fine-grained control on go tests @@ -9,8 +12,8 @@ tests_* @DataDog/multiple tests_ebpf @DataDog/ebpf-platform security_go_generate_check @DataDog/agent-security -# Golang dependency list generation -golang_deps_generate @DataDog/agent-core +# Golang dependency list generation (currently disabled) +golang_deps_generate @DataDog/agent-shared-components # Binary build build_system-probe* @DataDog/ebpf-platform @@ -19,12 +22,15 @@ cluster_agent-build* @DataDog/container-integrations build_serverless* @DataDog/serverless check_serverless_* @DataDog/serverless +# Package deps build +generate_minimized_btfs_* @DataDog/ebpf-platform + # Image build docker_build* @DataDog/container-integrations # Image scan -scan_*_docker_hub* @DataDog/container-integrations -dca_scan_*_docker_hub* @DataDog/container-integrations +scan_* @DataDog/container-integrations +dca_scan_* @DataDog/container-integrations # Check deploy # Do not notify on these jobs, they're expected to fail on duplicate @@ -42,10 +48,10 @@ docker_trigger_internal* @DataDog/container-integrations docker_trigger_cluster_agent_internal* @DataDog/container-integrations # Internal kubernetes deploy -internal_kubernetes_deploy* @DataDog/container-integrations +internal_kubernetes_deploy* @DataDog/container-integrations # Deploy -deploy_containers* @DataDog/container-integrations +deploy_containers* @DataDog/container-integrations # Functional test kitchen_*_system_probe* @DataDog/ebpf-platform @@ -55,7 +61,6 @@ pull_test_dockers @DataDog/universal-service-monito cleanup_kitchen_functional_test @DataDog/ebpf-platform @DataDog/agent-security serverless_cold_start_performance-deb_x64 @DataDog/serverless - # E2E k8s-e2e-* @DataDog/container-integrations k8s-e2e-otlp-* @DataDog/opentelemetry diff --git a/.gitlab/benchmarks/benchmarks.yml b/.gitlab/benchmarks/benchmarks.yml index 62f6ae9abc662..7c3231a68d98f 100644 --- a/.gitlab/benchmarks/benchmarks.yml +++ b/.gitlab/benchmarks/benchmarks.yml @@ -4,7 +4,7 @@ benchmark: image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/relenv-microbenchmarking-platform:trace-agent timeout: 1h rules: - !reference [.on_trace_agent_changes_or_manual] + !reference [.manual] # TODO: run this benchmark automatically when the trace-agent changes interruptible: true # tags: ["runner:apm-k8s-tweaked-metal"] # TODO: Commented out until we have the metal runners available in this repo tags: ["runner:main"] diff --git a/.gitlab/binary_build/system_probe.yml b/.gitlab/binary_build/system_probe.yml index 7a55e673b22fc..d80d299696b93 100644 --- a/.gitlab/binary_build/system_probe.yml +++ b/.gitlab/binary_build/system_probe.yml @@ -29,6 +29,7 @@ - $S3_CP_CMD $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/runtime-security-syscall-wrapper.o $S3_ARTIFACTS_URI/runtime-security-syscall-wrapper.o.$ARCH - $S3_CP_CMD $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/runtime-security-offset-guesser.o $S3_ARTIFACTS_URI/runtime-security-offset-guesser.o.$ARCH - $S3_CP_CMD $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/co-re/oom-kill.o $S3_ARTIFACTS_URI/oom-kill-co-re.o.$ARCH + - $S3_CP_CMD $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/co-re/tcp-queue-length.o $S3_ARTIFACTS_URI/tcp-queue-length-co-re.o.$ARCH - $S3_CP_CMD $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/runtime/tracer.c $S3_ARTIFACTS_URI/tracer.c.$ARCH - $S3_CP_CMD $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/runtime/http.c $S3_ARTIFACTS_URI/http.c.$ARCH - $S3_CP_CMD $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/runtime/runtime-security.c $S3_ARTIFACTS_URI/runtime-security.c.$ARCH diff --git a/.gitlab/binary_build/windows.yml b/.gitlab/binary_build/windows.yml index 05491f9991abc..e56b0ab2af722 100644 --- a/.gitlab/binary_build/windows.yml +++ b/.gitlab/binary_build/windows.yml @@ -11,7 +11,16 @@ build_windows_container_entrypoint: - $ErrorActionPreference = "Stop" - '$_instance_id = (iwr -UseBasicParsing http://169.254.169.254/latest/meta-data/instance-id).content ; Write-Host "Running on instance $($_instance_id)"' - if (Test-Path build-out) { remove-item -recurse -force build-out } - - docker run --rm -m 4096M -v "$(Get-Location):c:\mnt" -e CI_JOB_ID=${CI_JOB_ID} -e WINDOWS_BUILDER=true -e AWS_NETWORKING=true -e TARGET_ARCH="$ARCH" 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} c:\mnt\Dockerfiles\agent\windows\entrypoint\build.bat + - > + docker run --rm + -m 4096M + -v "$(Get-Location):c:\mnt" + -e CI_JOB_ID=${CI_JOB_ID} + -e WINDOWS_BUILDER=true + -e AWS_NETWORKING=true + -e TARGET_ARCH="$ARCH" + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} + c:\mnt\Dockerfiles\agent\windows\entrypoint\build.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } - get-childitem build-out\${CI_JOB_ID} - copy build-out\${CI_JOB_ID}\*.exe ./entrypoint.exe diff --git a/.gitlab/choco_deploy.yml b/.gitlab/choco_deploy.yml index dcb8ee4a0a7a8..94e4c8600a9b7 100644 --- a/.gitlab/choco_deploy.yml +++ b/.gitlab/choco_deploy.yml @@ -20,5 +20,10 @@ publish_choco_7_x64: - mkdir nupkg - copy omnibus\pkg\*.nupkg nupkg\ - Get-ChildItem nupkg - - docker run --rm -v "$(Get-Location):c:\mnt" -e CHOCOLATEY_API_KEY=${chocolateyApiKey} 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES c:\mnt\tasks\winbuildscripts\chocopush.bat + - > + docker run --rm + -v "$(Get-Location):c:\mnt" + -e CHOCOLATEY_API_KEY=${chocolateyApiKey} + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES + c:\mnt\tasks\winbuildscripts\chocopush.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } diff --git a/.gitlab/container_build/docker_linux.yml b/.gitlab/container_build/docker_linux.yml index 13430f7366dd9..67c1b149f0dc1 100644 --- a/.gitlab/container_build/docker_linux.yml +++ b/.gitlab/container_build/docker_linux.yml @@ -127,50 +127,17 @@ docker_build_agent7: TEST_IMG: "true" BUILD_ARG: --target release --build-arg PYTHON_VERSION=3 --build-arg DD_AGENT_ARTIFACT=datadog-agent_7*_amd64.deb -# NOTE this is a temporary workaround and the method taken in #14438 is -# preferred in the long-term. -docker_build_agent7_single_machine_performance: +single_machine_performance-amd64-a7: + extends: .docker_publish_job_definition stage: container_build - image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/docker_x64:$DATADOG_AGENT_BUILDIMAGES - tags: ["runner:docker"] rules: !reference [.on_a7] needs: - - job: agent_deb-x64-a7 - artifacts: false + - docker_build_agent7 variables: - BUILD_CONTEXT: Dockerfiles/agent - TAG_SUFFIX: -7 - ARCH: amd64 - TEST_IMG: "true" - BUILD_ARG: --target release --build-arg PYTHON_VERSION=3 --build-arg DD_AGENT_ARTIFACT=datadog-agent_7*_amd64.deb - script: - - aws s3 sync --only-show-errors $S3_ARTIFACTS_URI Dockerfiles/agent - # Setup AWS credentials for single-machine-performance AWS account - - SMP_ACCOUNT_ID=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.single-machine-performance-account-id --with-decryption --query "Parameter.Value" --out text) - - SMP_ECR_URL=${SMP_ACCOUNT_ID}.dkr.ecr.us-west-2.amazonaws.com - - SMP_AGENT_TEAM_ID=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.single-machine-performance-agent-team-id --with-decryption --query "Parameter.Value" --out text) - - aws configure set aws_access_key_id $(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.single-machine-performance-bot-access-key-id --with-decryption --query "Parameter.Value" --out text) --profile single-machine-performance - - aws configure set aws_secret_access_key $(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.single-machine-performance-bot-access-key --with-decryption --query "Parameter.Value" --out text) --profile single-machine-performance - - aws configure set region us-west-2 --profile single-machine-performance - # Login to Single Machine Performance ECR - - aws ecr get-login-password --profile single-machine-performance | docker login --username "AWS" --password-stdin "$SMP_ECR_URL" - # Calculate SMP tag, note that it must be deterministic and able to be - # computed across pipeline executions. - - TARGET_TAG=${SMP_ECR_URL}/${SMP_AGENT_TEAM_ID}-agent:${CI_COMMIT_SHA}${TAG_SUFFIX}-${ARCH} - # DockerHub login for build to limit rate limit when pulling base images - - DOCKER_REGISTRY_LOGIN=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.$DOCKER_REGISTRY_LOGIN_SSM_KEY --with-decryption --query "Parameter.Value" --out text) - - aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.$DOCKER_REGISTRY_PWD_SSM_KEY --with-decryption --query "Parameter.Value" --out text | docker login --username "$DOCKER_REGISTRY_LOGIN" --password-stdin "$DOCKER_REGISTRY_URL" - # Pull base images - - inv -e docker.pull-base-images $BUILD_CONTEXT/$ARCH/Dockerfile - # Build image - - docker build --build-arg CIBUILD=true --build-arg GENERAL_ARTIFACTS_CACHE_BUCKET_URL=${GENERAL_ARTIFACTS_CACHE_BUCKET_URL} $BUILD_ARG --file $BUILD_CONTEXT/$ARCH/Dockerfile --tag ${TARGET_TAG}-unsquashed $BUILD_CONTEXT - # Squash image, test, and push to ECR - - docker-squash ${TARGET_TAG}-unsquashed -t ${TARGET_TAG} - - test "$TEST_IMG" && docker run -v `pwd`/$BUILD_CONTEXT:/tmp/build ${TARGET_TAG} python /tmp/build/test_image_contents.py - - docker push $TARGET_TAG - # Workaround for temporary network failures - retry: 2 + IMG_REGISTRIES: internal-aws-smp + IMG_SOURCES: ${SRC_AGENT}:v${CI_PIPELINE_ID}-${CI_COMMIT_SHORT_SHA}-7-amd64 + IMG_DESTINATIONS: 08450328-agent:${CI_COMMIT_SHA}-7-amd64 docker_build_agent7_arm64: extends: .docker_build_job_definition_arm64 diff --git a/.gitlab/container_build/docker_windows.yml b/.gitlab/container_build/docker_windows.yml index da2d0e654d755..23ebd16acb36d 100644 --- a/.gitlab/container_build/docker_windows.yml +++ b/.gitlab/container_build/docker_windows.yml @@ -37,7 +37,15 @@ - get-childitem ${BUILD_CONTEXT} # Docker setup - cat ci-scripts/docker-login.ps1 - - docker run --rm -w C:\mnt -e AWS_NETWORKING=true -e SIGN_WINDOWS=true -v "$(Get-Location):C:\mnt" -v \\.\pipe\docker_engine:\\.\pipe\docker_engine 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_${Env:VARIANT}_x64:${Env:DATADOG_AGENT_WINBUILDIMAGES} powershell -C C:\mnt\ci-scripts\docker-login.ps1 + - > + docker run --rm + -w C:\mnt + -e AWS_NETWORKING=true + -e SIGN_WINDOWS=true + -v "$(Get-Location):C:\mnt" + -v \\.\pipe\docker_engine:\\.\pipe\docker_engine 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_${Env:VARIANT}_x64:${Env:DATADOG_AGENT_WINBUILDIMAGES} + powershell + -C C:\mnt\ci-scripts\docker-login.ps1 - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } - powershell -Command "docker build --no-cache --build-arg GENERAL_ARTIFACTS_CACHE_BUCKET_URL=${GENERAL_ARTIFACTS_CACHE_BUCKET_URL} ${BUILD_ARG} --pull --file ${BUILD_CONTEXT}/windows/amd64/Dockerfile --tag ${TARGET_TAG} ${BUILD_CONTEXT}" - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } diff --git a/.gitlab/deploy_7/winget.yml b/.gitlab/deploy_7/winget.yml index 29c5ee52da163..ee08383a98183 100644 --- a/.gitlab/deploy_7/winget.yml +++ b/.gitlab/deploy_7/winget.yml @@ -15,5 +15,12 @@ publish_winget_7_x64: script: - '$_instance_id = (iwr -UseBasicParsing http://169.254.169.254/latest/meta-data/instance-id).content ; Write-Host "Running on instance $($_instance_id)"' - $ErrorActionPreference = "Stop" - - docker run --rm -v "$(Get-Location):c:\mnt" -e WINGET_GITHUB_ACCESS_TOKEN=${wingetPat} -e GENERAL_ARTIFACTS_CACHE_BUCKET_URL=${GENERAL_ARTIFACTS_CACHE_BUCKET_URL} 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES Powershell -C "C:\mnt\tasks\winbuildscripts\Update-Winget.ps1" + - > + docker run --rm + -v "$(Get-Location):c:\mnt" + -e WINGET_GITHUB_ACCESS_TOKEN=${wingetPat} + -e GENERAL_ARTIFACTS_CACHE_BUCKET_URL=${GENERAL_ARTIFACTS_CACHE_BUCKET_URL} + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES + Powershell + -C "C:\mnt\tasks\winbuildscripts\Update-Winget.ps1" - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } diff --git a/.gitlab/deps_build.yml b/.gitlab/deps_build.yml index 8bac5618b42b9..51d4623f90a27 100644 --- a/.gitlab/deps_build.yml +++ b/.gitlab/deps_build.yml @@ -125,7 +125,13 @@ build_vcpkg_deps: - $ErrorActionPreference = "Stop" - '$_instance_id = (iwr -UseBasicParsing http://169.254.169.254/latest/meta-data/instance-id).content ; Write-Host "Running on instance $($_instance_id)"' - if (Test-Path build-out) { remove-item -recurse -force build-out } - - docker run --rm -m 4096M -v "$(Get-Location):c:\mnt" -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl},readwrite" 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} C:\mnt\tasks\winbuildscripts\build_vcpkg_deps.bat + - > + docker run --rm + -m 4096M + -v "$(Get-Location):c:\mnt" + -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl},readwrite" + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} + C:\mnt\tasks\winbuildscripts\build_vcpkg_deps.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } build_processed_btfhub_archive: @@ -138,34 +144,40 @@ build_processed_btfhub_archive: - git clone https://github.com/aquasecurity/btfhub-archive.git - cd btfhub-archive # Flatten btfhub-archive directories & separate arm/x64 btfs into separate directories - - dirs=("amzn/2" "centos/7" "centos/8" "debian/9" "debian/10" "fedora/29" "fedora/30" "fedora/31" "oracle-linux/ol7") + - dirs=("amzn/2" "centos/7" "centos/8" "debian/9" "debian/10" "fedora/28" "fedora/29" "fedora/30" "fedora/31" "ol/7" "ol/8" "rhel/7" "rhel/8") - | - for dir in ${dirs[@]}; do \ - platform=${dir%%/*} &&\ - mkdir -p "btfs-amd64/${platform}" "btfs-arm64/${platform}" &&\ - eval "mv ${dir}/x86_64/*.btf.tar.xz btfs-amd64/${platform}/" &&\ - eval "mv ${dir}/arm64/*.btf.tar.xz btfs-arm64/${platform}/"; \ + for dir in ${dirs[@]}; do + platform=${dir%%/*} + mkdir -p "btfs-amd64/${platform}" "btfs-arm64/${platform}" + eval "mv ${dir}/x86_64/*.btf.tar.xz btfs-amd64/${platform}/" + eval "mv ${dir}/arm64/*.btf.tar.xz btfs-arm64/${platform}/" + done + # Handle the these directories separately because they don't have an arm64 version + - x64dirs=("amzn/2018" "fedora/24" "fedora/25" "fedora/26" "fedora/27") + - | + for xdir in ${x64dirs[@]}; do + platform=${xdir%%/*} + eval "mv ${xdir}/x86_64/*.btf.tar.xz btfs-amd64/${platform}" done - # Handle the amzn/1 directory separately because it doesn't have an arm64 version - - mv amzn/1/x86_64/* btfs-amd64/amzn/ # Handle ubuntu separately because we want to keep the btfs separated by ubuntu version - - mkdir -p btfs-amd64/ubuntu/18.04 btfs-amd64/ubuntu/20.04 btfs-arm64/ubuntu/18.04 btfs-arm64/ubuntu/20.04 - - mv ubuntu/18.04/x86_64/*.btf.tar.xz btfs-amd64/ubuntu/18.04/ - - mv ubuntu/20.04/x86_64/*.btf.tar.xz btfs-amd64/ubuntu/20.04/ - - mv ubuntu/18.04/arm64/*.btf.tar.xz btfs-arm64/ubuntu/18.04/ - - mv ubuntu/20.04/arm64/*.btf.tar.xz btfs-arm64/ubuntu/20.04/ + - ubuntu_dirs=("ubuntu/16.04" "ubuntu/18.04" "ubuntu/20.04") + - | + for udir in ${ubuntu_dirs[@]}; do + mkdir -p "btfs-amd64/${udir}" "btfs-arm64/${udir}" + eval "mv ${udir}/x86_64/*.btf.tar.xz btfs-amd64/${udir}/" + eval "mv ${udir}/arm64/*.btf.tar.xz btfs-arm64/${udir}/" + done # Clean up platform names to match the names we get at runtime from gopsutil - mv btfs-amd64/amzn btfs-amd64/amazon - mv btfs-arm64/amzn btfs-arm64/amazon - - mv btfs-amd64/oracle-linux btfs-amd64/oracle - - mv btfs-arm64/oracle-linux btfs-arm64/oracle + - mv btfs-amd64/ol btfs-amd64/oracle + - mv btfs-arm64/ol btfs-arm64/oracle + - mv btfs-amd64/rhel btfs-amd64/redhat + - mv btfs-arm64/rhel btfs-arm64/redhat # Store results in S3 - tar -czf btfs-arm64.tar.gz btfs-arm64 - tar -czf btfs-amd64.tar.gz btfs-amd64 - $S3_CP_CMD btfs-arm64.tar.gz $S3_PERMANENT_ARTIFACTS_URI/btfs-arm64.tar.gz - $S3_CP_CMD btfs-amd64.tar.gz $S3_PERMANENT_ARTIFACTS_URI/btfs-amd64.tar.gz - artifacts: - expire_in: 2 weeks - paths: - - btfhub-archive/btfs-arm64.tar.gz - - btfhub-archive/btfs-amd64.tar.gz + - $S3_CP_CMD btfs-arm64.tar.gz $S3_DD_AGENT_OMNIBUS_BTFS_URI/btfs-arm64.tar.gz --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers + - $S3_CP_CMD btfs-amd64.tar.gz $S3_DD_AGENT_OMNIBUS_BTFS_URI/btfs-amd64.tar.gz --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers diff --git a/.gitlab/e2e.yml b/.gitlab/e2e.yml index f5f4b5fd07e0f..32d40350ebcd0 100644 --- a/.gitlab/e2e.yml +++ b/.gitlab/e2e.yml @@ -68,6 +68,7 @@ k8s-e2e-tags-7: - export DATADOG_AGENT_SITE=datadoghq.com - export DATADOG_AGENT_API_KEY=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.e2e_tests_api_key --with-decryption --query "Parameter.Value" --out text) - export DATADOG_AGENT_APP_KEY=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.e2e_tests_app_key --with-decryption --query "Parameter.Value" --out text) + - export DATADOG_AGENT_RC_KEY=$(aws ssm get-parameter --region us-east-1 --name ci.datadog-agent.e2e_tests_rc_key --with-decryption --query "Parameter.Value" --out text) k8s-e2e-cws-dev: extends: .k8s_e2e_template diff --git a/.gitlab/functional_test/regression_detector.yml b/.gitlab/functional_test/regression_detector.yml index c541b04f7ebc7..1a9562ffc7919 100644 --- a/.gitlab/functional_test/regression_detector.yml +++ b/.gitlab/functional_test/regression_detector.yml @@ -3,7 +3,7 @@ single-machine-performance-regression_detector: image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/docker_x64:$DATADOG_AGENT_BUILDIMAGES tags: ["runner:docker"] needs: - - job: docker_build_agent7_single_machine_performance + - job: single_machine_performance-amd64-a7 artifacts: false artifacts: expire_in: 1 weeks diff --git a/.gitlab/functional_test/security_agent.yml b/.gitlab/functional_test/security_agent.yml index 0247eb730ad84..17a6bd48870fb 100644 --- a/.gitlab/functional_test/security_agent.yml +++ b/.gitlab/functional_test/security_agent.yml @@ -15,7 +15,7 @@ retry: 0 variables: AGENT_MAJOR_VERSION: 7 - DD_PIPELINE_ID: $CI_PIPELINE_ID-a7 + DD_PIPELINE_ID: $CI_PIPELINE_ID-fnct CHEF_VERSION: 14.15.6 script: - bash -l tasks/run-test-kitchen.sh security-agent-test $AGENT_MAJOR_VERSION @@ -113,7 +113,7 @@ kitchen_stress_security_agent: needs: ["tests_ebpf_x64"] variables: AGENT_MAJOR_VERSION: 7 - DD_PIPELINE_ID: $CI_PIPELINE_ID-a7 + DD_PIPELINE_ID: $CI_PIPELINE_ID-fnct before_script: - cd $DD_AGENT_TESTING_DIR - bash -l tasks/kitchen_setup.sh diff --git a/.gitlab/functional_test/system_probe.yml b/.gitlab/functional_test/system_probe.yml index 75ddbd16bf2bd..bc35ff25ee628 100644 --- a/.gitlab/functional_test/system_probe.yml +++ b/.gitlab/functional_test/system_probe.yml @@ -41,7 +41,7 @@ pull_test_dockers_arm64: stage: functional_test variables: AGENT_MAJOR_VERSION: 7 - DD_PIPELINE_ID: $CI_PIPELINE_ID-a7 + DD_PIPELINE_ID: $CI_PIPELINE_ID-fnct CHEF_VERSION: 14.15.6 script: - echo -n "--tags ci.job.name:${CI_JOB_NAME}" > $DD_AGENT_TESTING_DIR/site-cookbooks/dd-system-probe-check/files/tags.txt diff --git a/.gitlab/functional_test_cleanup.yml b/.gitlab/functional_test_cleanup.yml index d02fc25023889..ea946feb1052e 100644 --- a/.gitlab/functional_test_cleanup.yml +++ b/.gitlab/functional_test_cleanup.yml @@ -15,4 +15,4 @@ cleanup_kitchen_functional_test: stage: functional_test_cleanup needs: ["tests_ebpf_x64"] variables: - DD_PIPELINE_ID: $CI_PIPELINE_ID-a7 + DD_PIPELINE_ID: $CI_PIPELINE_ID-fnct diff --git a/.gitlab/kitchen_testing/amazonlinux.yml b/.gitlab/kitchen_testing/amazonlinux.yml index af9b4ee7446f0..8f99230142d55 100644 --- a/.gitlab/kitchen_testing/amazonlinux.yml +++ b/.gitlab/kitchen_testing/amazonlinux.yml @@ -22,6 +22,7 @@ .kitchen_scenario_amazonlinux_a6_x64: variables: KITCHEN_OSVERS: "amazonlinux2-5-10,amazonlinux2022-5-15" + KITCHEN_CWS_SUPPORTED_OSVERS: "amazonlinux2-5-10,amazonlinux2022-5-15" DEFAULT_KITCHEN_OSVERS: "amazonlinux2-5-10" extends: - .kitchen_agent_a6 @@ -32,6 +33,7 @@ .kitchen_scenario_amazonlinux_a7_x64: variables: KITCHEN_OSVERS: "amazonlinux2-5-10,amazonlinux2022-5-15" + KITCHEN_CWS_SUPPORTED_OSVERS: "amazonlinux2-5-10,amazonlinux2022-5-15" DEFAULT_KITCHEN_OSVERS: "amazonlinux2-5-10" extends: - .kitchen_agent_a7 @@ -42,6 +44,7 @@ .kitchen_scenario_amazonlinux_a6_arm64: variables: KITCHEN_OSVERS: "amazonlinux2-5-10,amazonlinux2022-5-15" + KITCHEN_CWS_SUPPORTED_OSVERS: "amazonlinux2-5-10,amazonlinux2022-5-15" DEFAULT_KITCHEN_OSVERS: "amazonlinux2-5-10" extends: - .kitchen_agent_a6 @@ -52,6 +55,7 @@ .kitchen_scenario_amazonlinux_a7_arm64: variables: KITCHEN_OSVERS: "amazonlinux2-5-10,amazonlinux2022-5-15" + KITCHEN_CWS_SUPPORTED_OSVERS: "amazonlinux2-5-10,amazonlinux2022-5-15" DEFAULT_KITCHEN_OSVERS: "amazonlinux2-5-10" extends: - .kitchen_agent_a7 @@ -64,11 +68,13 @@ kitchen_amazonlinux_install_script_agent-a6_x64: extends: + - .kitchen_os_with_cws - .kitchen_scenario_amazonlinux_a6_x64 - .kitchen_test_install_script_agent kitchen_amazonlinux_install_script_agent-a6_arm64: extends: + - .kitchen_os_with_cws - .kitchen_scenario_amazonlinux_a6_arm64 - .kitchen_test_install_script_agent @@ -77,6 +83,7 @@ kitchen_amazonlinux_install_script_agent-a7_x64: rules: !reference [.on_default_kitchen_tests_a7] extends: + - .kitchen_os_with_cws - .kitchen_scenario_amazonlinux_a7_x64 - .kitchen_test_install_script_agent @@ -84,5 +91,6 @@ kitchen_amazonlinux_install_script_agent-a7_arm64: rules: !reference [.on_all_kitchen_builds_a7] extends: + - .kitchen_os_with_cws - .kitchen_scenario_amazonlinux_a7_arm64 - .kitchen_test_install_script_agent \ No newline at end of file diff --git a/.gitlab/kitchen_testing/centos.yml b/.gitlab/kitchen_testing/centos.yml index db720765a57d0..1f62f245f06a5 100644 --- a/.gitlab/kitchen_testing/centos.yml +++ b/.gitlab/kitchen_testing/centos.yml @@ -15,6 +15,7 @@ variables: KITCHEN_PLATFORM: "centos" KITCHEN_OSVERS: "centos-610,centos-77,rhel-81" + KITCHEN_CWS_SUPPORTED_OSVERS: "centos-77,rhel-81" before_script: - cd $DD_AGENT_TESTING_DIR - bash -l tasks/kitchen_setup.sh @@ -23,6 +24,7 @@ variables: KITCHEN_PLATFORM: "centos" KITCHEN_OSVERS: "centos-610,centos-77" + KITCHEN_CWS_SUPPORTED_OSVERS: "centos-77" before_script: - cd $DD_AGENT_TESTING_DIR - bash -l tasks/kitchen_setup.sh @@ -33,12 +35,17 @@ KITCHEN_PLATFORM: "centos" # For now, we only test FIPS on 8.1 KITCHEN_OSVERS: "rhel-81" + KITCHEN_CWS_SUPPORTED_OSVERS: "rhel-81" DEFAULT_KITCHEN_OSVERS: "rhel-81" before_script: - export KITCHEN_PLATFORM_SUFFIX="${KITCHEN_PLATFORM_SUFFIX}fips" - cd $DD_AGENT_TESTING_DIR - bash -l tasks/kitchen_setup.sh +.kitchen_os_with_cws: + variables: + KITCHEN_CWS: "true" + # Kitchen: scenarios (os * agent * (cloud + arch)) # ------------------------------- @@ -75,6 +82,7 @@ - .kitchen_agent_a6 - .kitchen_os_centos_8_fips - .kitchen_azure_x64 + - .kitchen_os_with_cws needs: ["deploy_rpm_testing-a6_x64"] .kitchen_scenario_centos_8_fips_a7: @@ -82,6 +90,7 @@ - .kitchen_agent_a7 - .kitchen_os_centos_8_fips - .kitchen_azure_x64 + - .kitchen_os_with_cws needs: ["deploy_rpm_testing-a7_x64"] # Kitchen: final test matrix (tests * scenarios) @@ -92,16 +101,19 @@ # for CentOS/RHEL 6/7. kitchen_centos_install_script_agent-a6: extends: + - .kitchen_os_with_cws - .kitchen_scenario_centos_6_7_non_fips_a6 - .kitchen_test_install_script_agent kitchen_centos_install_script_agent-a7: extends: + - .kitchen_os_with_cws - .kitchen_scenario_centos_6_7_non_fips_a7 - .kitchen_test_install_script_agent kitchen_centos_fips_install_script_agent-a6: extends: + - .kitchen_os_with_cws - .kitchen_scenario_centos_8_fips_a6 - .kitchen_test_install_script_agent @@ -110,6 +122,7 @@ kitchen_centos_fips_install_script_agent-a7: rules: !reference [.on_default_kitchen_tests_a7] extends: + - .kitchen_os_with_cws - .kitchen_scenario_centos_8_fips_a7 - .kitchen_test_install_script_agent @@ -138,6 +151,7 @@ kitchen_centos_fips_install_script_dogstatsd-a7: kitchen_centos_step_by_step_agent-a6: extends: + - .kitchen_os_with_cws - .kitchen_scenario_centos_6_7_non_fips_a6 - .kitchen_test_step_by_step_agent rules: @@ -145,6 +159,7 @@ kitchen_centos_step_by_step_agent-a6: kitchen_centos_fips_step_by_step_agent-a6: extends: + - .kitchen_os_with_cws - .kitchen_scenario_centos_8_fips_a6 - .kitchen_test_step_by_step_agent rules: @@ -152,6 +167,7 @@ kitchen_centos_fips_step_by_step_agent-a6: kitchen_centos_step_by_step_agent-a7: extends: + - .kitchen_os_with_cws - .kitchen_scenario_centos_6_7_non_fips_a7 - .kitchen_test_step_by_step_agent rules: @@ -159,6 +175,7 @@ kitchen_centos_step_by_step_agent-a7: kitchen_centos_fips_step_by_step_agent-a7: extends: + - .kitchen_os_with_cws - .kitchen_scenario_centos_8_fips_a7 - .kitchen_test_step_by_step_agent rules: @@ -178,31 +195,37 @@ kitchen_centos_upgrade5_agent-a7: kitchen_centos_upgrade6_agent-a6: extends: + - .kitchen_os_with_cws - .kitchen_scenario_centos_6_7_non_fips_a6 - .kitchen_test_upgrade6_agent kitchen_centos_upgrade6_agent-a7: extends: + - .kitchen_os_with_cws - .kitchen_scenario_centos_6_7_non_fips_a7 - .kitchen_test_upgrade6_agent kitchen_centos_upgrade7_agent-a7: extends: + - .kitchen_os_with_cws - .kitchen_scenario_centos_6_7_non_fips_a7 - .kitchen_test_upgrade7_agent kitchen_centos_fips_upgrade6_agent-a6: extends: + - .kitchen_os_with_cws - .kitchen_scenario_centos_8_fips_a6 - .kitchen_test_upgrade6_agent kitchen_centos_fips_upgrade6_agent-a7: extends: + - .kitchen_os_with_cws - .kitchen_scenario_centos_8_fips_a7 - .kitchen_test_upgrade6_agent kitchen_centos_fips_upgrade7_agent-a7: extends: + - .kitchen_os_with_cws - .kitchen_scenario_centos_8_fips_a7 - .kitchen_test_upgrade7_agent diff --git a/.gitlab/kitchen_testing/debian.yml b/.gitlab/kitchen_testing/debian.yml index 668e102f96fc3..c12d9c0cd70b5 100644 --- a/.gitlab/kitchen_testing/debian.yml +++ b/.gitlab/kitchen_testing/debian.yml @@ -22,6 +22,7 @@ .kitchen_scenario_debian_a6_x64: variables: KITCHEN_OSVERS: "debian-8,debian-9,debian-10,debian-11" + KITCHEN_CWS_SUPPORTED_OSVERS: "debian-10,debian-11" DEFAULT_KITCHEN_OSVERS: "debian-11" extends: - .kitchen_agent_a6 @@ -32,6 +33,7 @@ .kitchen_scenario_debian_a7_x64: variables: KITCHEN_OSVERS: "debian-8,debian-9,debian-10,debian-11" + KITCHEN_CWS_SUPPORTED_OSVERS: "debian-10,debian-11" DEFAULT_KITCHEN_OSVERS: "debian-11" extends: - .kitchen_agent_a7 @@ -42,6 +44,7 @@ .kitchen_scenario_debian_a6_arm64: variables: KITCHEN_OSVERS: "debian-10" + KITCHEN_CWS_SUPPORTED_OSVERS: "debian-10" DEFAULT_KITCHEN_OSVERS: "debian-10" extends: - .kitchen_agent_a6 @@ -52,6 +55,7 @@ .kitchen_scenario_debian_a7_arm64: variables: KITCHEN_OSVERS: "debian-10" + KITCHEN_CWS_SUPPORTED_OSVERS: "debian-10" DEFAULT_KITCHEN_OSVERS: "debian-10" extends: - .kitchen_agent_a7 @@ -64,11 +68,13 @@ kitchen_debian_install_script_agent-a6_x64: extends: + - .kitchen_os_with_cws - .kitchen_scenario_debian_a6_x64 - .kitchen_test_install_script_agent kitchen_debian_install_script_agent-a6_arm64: extends: + - .kitchen_os_with_cws - .kitchen_scenario_debian_a6_arm64 - .kitchen_test_install_script_agent @@ -77,6 +83,7 @@ kitchen_debian_install_script_agent-a7_x64: rules: !reference [.on_default_kitchen_tests_a7] extends: + - .kitchen_os_with_cws - .kitchen_scenario_debian_a7_x64 - .kitchen_test_install_script_agent @@ -84,6 +91,7 @@ kitchen_debian_install_script_agent-a7_arm64: rules: !reference [.on_all_kitchen_builds_a7] extends: + - .kitchen_os_with_cws - .kitchen_scenario_debian_a7_arm64 - .kitchen_test_install_script_agent @@ -112,6 +120,7 @@ kitchen_debian_install_script_dogstatsd-a7: kitchen_debian_step_by_step_agent-a6: extends: + - .kitchen_os_with_cws - .kitchen_scenario_debian_a6_x64 - .kitchen_test_step_by_step_agent rules: @@ -119,6 +128,7 @@ kitchen_debian_step_by_step_agent-a6: kitchen_debian_step_by_step_agent-a7: extends: + - .kitchen_os_with_cws - .kitchen_scenario_debian_a7_x64 - .kitchen_test_step_by_step_agent rules: @@ -136,16 +146,19 @@ kitchen_debian_upgrade5_agent-a7: kitchen_debian_upgrade6_agent-a6: extends: + - .kitchen_os_with_cws - .kitchen_scenario_debian_a6_x64 - .kitchen_test_upgrade6_agent kitchen_debian_upgrade6_agent-a7: extends: + - .kitchen_os_with_cws - .kitchen_scenario_debian_a7_x64 - .kitchen_test_upgrade6_agent kitchen_debian_upgrade7_agent-a7: extends: + - .kitchen_os_with_cws - .kitchen_scenario_debian_a7_x64 - .kitchen_test_upgrade7_agent diff --git a/.gitlab/kitchen_testing/suse.yml b/.gitlab/kitchen_testing/suse.yml index 8ac5086179a29..4459898ce078e 100644 --- a/.gitlab/kitchen_testing/suse.yml +++ b/.gitlab/kitchen_testing/suse.yml @@ -13,6 +13,7 @@ variables: KITCHEN_PLATFORM: "suse" KITCHEN_OSVERS: "sles-12,sles-15" + KITCHEN_CWS_SUPPORTED_OSVERS: "sles-12,sles-15" DEFAULT_KITCHEN_OSVERS: "sles-15" before_script: - cd $DD_AGENT_TESTING_DIR @@ -40,6 +41,7 @@ kitchen_suse_install_script_agent-a6: extends: + - .kitchen_os_with_cws - .kitchen_scenario_suse_a6 - .kitchen_test_install_script_agent @@ -48,6 +50,7 @@ kitchen_suse_install_script_agent-a7: rules: !reference [.on_default_kitchen_tests_a7] extends: + - .kitchen_os_with_cws - .kitchen_scenario_suse_a7 - .kitchen_test_install_script_agent @@ -66,6 +69,7 @@ kitchen_suse_install_script_dogstatsd-a7: kitchen_suse_step_by_step_agent-a6: extends: + - .kitchen_os_with_cws - .kitchen_scenario_suse_a6 - .kitchen_test_step_by_step_agent rules: @@ -73,33 +77,41 @@ kitchen_suse_step_by_step_agent-a6: kitchen_suse_step_by_step_agent-a7: extends: + - .kitchen_os_with_cws - .kitchen_scenario_suse_a7 - .kitchen_test_step_by_step_agent rules: !reference [.on_deploy_a7] -kitchen_suse_upgrade5_agent-a6: - extends: - - .kitchen_scenario_suse_a6 - - .kitchen_test_upgrade5_agent - -kitchen_suse_upgrade5_agent-a7: - extends: - - .kitchen_scenario_suse_a7 - - .kitchen_test_upgrade5_agent +# The change https://github.com/DataDog/dd-agent/commit/d024c411c56595099761dc4ac4d0133e6fa152bf +# made the SUSE Agent 5 upgrade tests fail when there is no Agent 5 SUSE RPM signed with the new +# key. We disable them temporarily because of this. +# +# kitchen_suse_upgrade5_agent-a6: +# extends: +# - .kitchen_scenario_suse_a6 +# - .kitchen_test_upgrade5_agent +# +# kitchen_suse_upgrade5_agent-a7: +# extends: +# - .kitchen_scenario_suse_a7 +# - .kitchen_test_upgrade5_agent kitchen_suse_upgrade6_agent-a6: extends: + - .kitchen_os_with_cws - .kitchen_scenario_suse_a6 - .kitchen_test_upgrade6_agent kitchen_suse_upgrade6_agent-a7: extends: + - .kitchen_os_with_cws - .kitchen_scenario_suse_a7 - .kitchen_test_upgrade6_agent kitchen_suse_upgrade7_agent-a7: extends: + - .kitchen_os_with_cws - .kitchen_scenario_suse_a7 - .kitchen_test_upgrade7_agent diff --git a/.gitlab/kitchen_testing/ubuntu.yml b/.gitlab/kitchen_testing/ubuntu.yml index 58e709cf2e895..a478fd47373ed 100644 --- a/.gitlab/kitchen_testing/ubuntu.yml +++ b/.gitlab/kitchen_testing/ubuntu.yml @@ -21,6 +21,7 @@ .kitchen_scenario_ubuntu_a6_x64: variables: KITCHEN_OSVERS: "ubuntu-14-04,ubuntu-16-04,ubuntu-18-04,ubuntu-20-04,ubuntu-22-04" + KITCHEN_CWS_SUPPORTED_OSVERS: "ubuntu-18-04,ubuntu-20-04,ubuntu-22-04" DEFAULT_KITCHEN_OSVERS: "ubuntu-22-04" extends: - .kitchen_agent_a6 @@ -31,6 +32,7 @@ .kitchen_scenario_ubuntu_a7_x64: variables: KITCHEN_OSVERS: "ubuntu-14-04,ubuntu-16-04,ubuntu-18-04,ubuntu-20-04,ubuntu-22-04" + KITCHEN_CWS_SUPPORTED_OSVERS: "ubuntu-18-04,ubuntu-20-04,ubuntu-22-04" DEFAULT_KITCHEN_OSVERS: "ubuntu-22-04" extends: - .kitchen_agent_a7 @@ -41,6 +43,7 @@ .kitchen_scenario_ubuntu_a6_arm64: variables: KITCHEN_OSVERS: "ubuntu-18-04,ubuntu-20-04" + KITCHEN_CWS_SUPPORTED_OSVERS: "ubuntu-18-04,ubuntu-20-04" DEFAULT_KITCHEN_OSVERS: "ubuntu-20-04" extends: - .kitchen_agent_a6 @@ -51,6 +54,7 @@ .kitchen_scenario_ubuntu_a7_arm64: variables: KITCHEN_OSVERS: "ubuntu-18-04,ubuntu-20-04" + KITCHEN_CWS_SUPPORTED_OSVERS: "ubuntu-18-04,ubuntu-20-04" DEFAULT_KITCHEN_OSVERS: "ubuntu-20-04" extends: - .kitchen_agent_a7 @@ -63,11 +67,13 @@ kitchen_ubuntu_install_script_agent-a6_x64: extends: + - .kitchen_os_with_cws - .kitchen_scenario_ubuntu_a6_x64 - .kitchen_test_install_script_agent kitchen_ubuntu_install_script_agent-a6_arm64: extends: + - .kitchen_os_with_cws - .kitchen_scenario_ubuntu_a6_arm64 - .kitchen_test_install_script_agent @@ -76,6 +82,7 @@ kitchen_ubuntu_install_script_agent-a7_x64: rules: !reference [.on_default_kitchen_tests_a7] extends: + - .kitchen_os_with_cws - .kitchen_scenario_ubuntu_a7_x64 - .kitchen_test_install_script_agent @@ -83,6 +90,7 @@ kitchen_ubuntu_install_script_agent-a7_arm64: rules: !reference [.on_all_kitchen_builds_a7] extends: + - .kitchen_os_with_cws - .kitchen_scenario_ubuntu_a7_arm64 - .kitchen_test_install_script_agent @@ -101,6 +109,7 @@ kitchen_ubuntu_install_script_dogstatsd-a7: kitchen_ubuntu_step_by_step_agent-a6_x64: extends: + - .kitchen_os_with_cws - .kitchen_scenario_ubuntu_a6_x64 - .kitchen_test_step_by_step_agent rules: @@ -108,6 +117,7 @@ kitchen_ubuntu_step_by_step_agent-a6_x64: kitchen_ubuntu_step_by_step_agent-a6_arm64: extends: + - .kitchen_os_with_cws - .kitchen_scenario_ubuntu_a6_arm64 - .kitchen_test_step_by_step_agent rules: @@ -115,6 +125,7 @@ kitchen_ubuntu_step_by_step_agent-a6_arm64: kitchen_ubuntu_step_by_step_agent-a7_x64: extends: + - .kitchen_os_with_cws - .kitchen_scenario_ubuntu_a7_x64 - .kitchen_test_step_by_step_agent rules: @@ -122,6 +133,7 @@ kitchen_ubuntu_step_by_step_agent-a7_x64: kitchen_ubuntu_step_by_step_agent-a7_arm64: extends: + - .kitchen_os_with_cws - .kitchen_scenario_ubuntu_a7_arm64 - .kitchen_test_step_by_step_agent rules: @@ -139,16 +151,19 @@ kitchen_ubuntu_upgrade5_agent-a7: kitchen_ubuntu_upgrade6_agent-a6: extends: + - .kitchen_os_with_cws - .kitchen_scenario_ubuntu_a6_x64 - .kitchen_test_upgrade6_agent kitchen_ubuntu_upgrade6_agent-a7: extends: + - .kitchen_os_with_cws - .kitchen_scenario_ubuntu_a7_x64 - .kitchen_test_upgrade6_agent kitchen_ubuntu_upgrade7_agent-a7: extends: + - .kitchen_os_with_cws - .kitchen_scenario_ubuntu_a7_x64 - .kitchen_test_upgrade7_agent diff --git a/.gitlab/kitchen_testing/windows.yml b/.gitlab/kitchen_testing/windows.yml index 293940f3fc581..19f29be166301 100644 --- a/.gitlab/kitchen_testing/windows.yml +++ b/.gitlab/kitchen_testing/windows.yml @@ -41,6 +41,17 @@ - export LAST_STABLE_VERSION=$(cd ../.. && invoke release.get-release-json-value "last_stable::$AGENT_MAJOR_VERSION") - bash -l tasks/run-test-kitchen.sh windows-install-test $AGENT_MAJOR_VERSION +# Base test for Next Gen installer - only difference with the standard one +# is that we override the WINDOWS_AGENT_FILE name. +.kitchen_test_ng_windows_installer: + extends: + - .kitchen_test_windows_installer + script: + - export WINDOWS_AGENT_FILE=datadog-agent-$(cd ../.. && inv agent.version --url-safe --major-version $AGENT_MAJOR_VERSION)-2-x86_64 + - export LAST_STABLE_VERSION=$(cd ../.. && invoke release.get-release-json-value "last_stable::$AGENT_MAJOR_VERSION") + - echo $WINDOWS_AGENT_FILE + - bash -l tasks/run-test-kitchen.sh windows-install-test $AGENT_MAJOR_VERSION + .kitchen_test_windows_npm_driver: extends: - .kitchen_azure_x64 @@ -76,6 +87,12 @@ # Kitchen: Test types (test suite * agent flavor + azure location) # ------------------------------- +.kitchen_test_ng_windows_installer_agent: + extends: + - .kitchen_test_ng_windows_installer + - .kitchen_datadog_agent_flavor + - .kitchen_azure_location_north_central_us + .kitchen_test_windows_installer_agent: extends: - .kitchen_test_windows_installer @@ -129,12 +146,22 @@ kitchen_windows_installer_agent-a6: extends: - .kitchen_scenario_windows_a6 - .kitchen_test_windows_installer_agent + +kitchen_windows_ng_installer_agent-a6: + extends: + - .kitchen_scenario_windows_a6 + - .kitchen_test_ng_windows_installer_agent kitchen_windows_installer_agent-a7: extends: - .kitchen_scenario_windows_a7 - .kitchen_test_windows_installer_agent +kitchen_windows_ng_installer_agent-a7: + extends: + - .kitchen_scenario_windows_a7 + - .kitchen_test_ng_windows_installer_agent + kitchen_windows_chef_agent-a6: extends: - .kitchen_scenario_windows_a6 diff --git a/.gitlab/package_build/deb.yml b/.gitlab/package_build/deb.yml index aff1504ba0b7e..38b7d7516b9d9 100644 --- a/.gitlab/package_build/deb.yml +++ b/.gitlab/package_build/deb.yml @@ -31,6 +31,7 @@ - $S3_CP_CMD $S3_ARTIFACTS_URI/runtime-security-syscall-wrapper.o.${PACKAGE_ARCH} /tmp/system-probe/runtime-security-syscall-wrapper.o - $S3_CP_CMD $S3_ARTIFACTS_URI/runtime-security-offset-guesser.o.${PACKAGE_ARCH} /tmp/system-probe/runtime-security-offset-guesser.o - $S3_CP_CMD $S3_ARTIFACTS_URI/oom-kill-co-re.o.${PACKAGE_ARCH} /tmp/system-probe/oom-kill-co-re.o + - $S3_CP_CMD $S3_ARTIFACTS_URI/tcp-queue-length-co-re.o.${PACKAGE_ARCH} /tmp/system-probe/tcp-queue-length-co-re.o - $S3_CP_CMD $S3_ARTIFACTS_URI/tracer.c.${PACKAGE_ARCH} /tmp/system-probe/tracer.c - $S3_CP_CMD $S3_ARTIFACTS_URI/http.c.${PACKAGE_ARCH} /tmp/system-probe/http.c - $S3_CP_CMD $S3_ARTIFACTS_URI/runtime-security.c.${PACKAGE_ARCH} /tmp/system-probe/runtime-security.c diff --git a/.gitlab/package_build/rpm.yml b/.gitlab/package_build/rpm.yml index ebd9259c05087..c08db7b11bf69 100644 --- a/.gitlab/package_build/rpm.yml +++ b/.gitlab/package_build/rpm.yml @@ -29,6 +29,7 @@ - $S3_CP_CMD $S3_ARTIFACTS_URI/runtime-security-syscall-wrapper.o.${PACKAGE_ARCH} /tmp/system-probe/runtime-security-syscall-wrapper.o - $S3_CP_CMD $S3_ARTIFACTS_URI/runtime-security-offset-guesser.o.${PACKAGE_ARCH} /tmp/system-probe/runtime-security-offset-guesser.o - $S3_CP_CMD $S3_ARTIFACTS_URI/oom-kill-co-re.o.${PACKAGE_ARCH} /tmp/system-probe/oom-kill-co-re.o + - $S3_CP_CMD $S3_ARTIFACTS_URI/tcp-queue-length-co-re.o.${PACKAGE_ARCH} /tmp/system-probe/tcp-queue-length-co-re.o - $S3_CP_CMD $S3_ARTIFACTS_URI/tracer.c.${PACKAGE_ARCH} /tmp/system-probe/tracer.c - $S3_CP_CMD $S3_ARTIFACTS_URI/http.c.${PACKAGE_ARCH} /tmp/system-probe/http.c - $S3_CP_CMD $S3_ARTIFACTS_URI/runtime-security.c.${PACKAGE_ARCH} /tmp/system-probe/runtime-security.c diff --git a/.gitlab/package_build/suse_rpm.yml b/.gitlab/package_build/suse_rpm.yml index 012e09addba7d..ef075c33513d0 100644 --- a/.gitlab/package_build/suse_rpm.yml +++ b/.gitlab/package_build/suse_rpm.yml @@ -28,6 +28,7 @@ - $S3_CP_CMD $S3_ARTIFACTS_URI/runtime-security-syscall-wrapper.o.${PACKAGE_ARCH} /tmp/system-probe/runtime-security-syscall-wrapper.o - $S3_CP_CMD $S3_ARTIFACTS_URI/runtime-security-offset-guesser.o.${PACKAGE_ARCH} /tmp/system-probe/runtime-security-offset-guesser.o - $S3_CP_CMD $S3_ARTIFACTS_URI/oom-kill-co-re.o.${PACKAGE_ARCH} /tmp/system-probe/oom-kill-co-re.o + - $S3_CP_CMD $S3_ARTIFACTS_URI/tcp-queue-length-co-re.o.${PACKAGE_ARCH} /tmp/system-probe/tcp-queue-length-co-re.o - $S3_CP_CMD $S3_ARTIFACTS_URI/tracer.c.${PACKAGE_ARCH} /tmp/system-probe/tracer.c - $S3_CP_CMD $S3_ARTIFACTS_URI/http.c.${PACKAGE_ARCH} /tmp/system-probe/http.c - $S3_CP_CMD $S3_ARTIFACTS_URI/runtime-security.c.${PACKAGE_ARCH} /tmp/system-probe/runtime-security.c diff --git a/.gitlab/package_build/windows.yml b/.gitlab/package_build/windows.yml index 332f870ba0e11..939c21cc4a6c7 100644 --- a/.gitlab/package_build/windows.yml +++ b/.gitlab/package_build/windows.yml @@ -11,7 +11,34 @@ - $vcpkgBlobSaSUrl = (aws ssm get-parameter --region us-east-1 --name ci.datadog-agent-buildimages.vcpkg_blob_sas_url --with-decryption --query "Parameter.Value" --out text) - !reference [.setup_ruby_mirror_win] - !reference [.setup_python_mirror_win] - - docker run --rm -m 4096M -v "$(Get-Location):c:\mnt" -e CI_JOB_ID=${CI_JOB_ID} -e CI_PIPELINE_ID=${CI_PIPELINE_ID} -e CI_COMMIT_BRANCH=${CI_COMMIT_BRANCH} -e OMNIBUS_TARGET=${OMNIBUS_TARGET} -e WINDOWS_BUILDER=true -e RELEASE_VERSION="$RELEASE_VERSION" -e MAJOR_VERSION="$AGENT_MAJOR_VERSION" -e PY_RUNTIMES="$PYTHON_RUNTIMES" -e INTEGRATIONS_CORE_VERSION="$INTEGRATIONS_CORE_VERSION" -e GOMODCACHE="c:\modcache" -e AWS_NETWORKING=true -e SIGN_WINDOWS=true -e TARGET_ARCH="$ARCH" -e DEBUG_CUSTOMACTION="$DEBUG_CUSTOMACTION" -e BUCKET_BRANCH="$BUCKET_BRANCH" -e S3_OMNIBUS_CACHE_BUCKET="$S3_OMNIBUS_CACHE_BUCKET" -e USE_S3_CACHING="$USE_S3_CACHING" -e INTEGRATION_WHEELS_CACHE_BUCKET="$INTEGRATION_WHEELS_CACHE_BUCKET" -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl}" -e GO_VERSION_CHECK="true" -e BUNDLE_MIRROR__RUBYGEMS__ORG=${BUNDLE_MIRROR__RUBYGEMS__ORG} -e PIP_INDEX_URL=${PIP_INDEX_URL} 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} c:\mnt\tasks\winbuildscripts\buildwin.bat + - > + docker run --rm + -m 4096M + -v "$(Get-Location):c:\mnt" + -e CI_JOB_ID=${CI_JOB_ID} + -e CI_PIPELINE_ID=${CI_PIPELINE_ID} + -e CI_COMMIT_BRANCH=${CI_COMMIT_BRANCH} + -e OMNIBUS_TARGET=${OMNIBUS_TARGET} + -e WINDOWS_BUILDER=true + -e RELEASE_VERSION="$RELEASE_VERSION" + -e MAJOR_VERSION="$AGENT_MAJOR_VERSION" + -e PY_RUNTIMES="$PYTHON_RUNTIMES" + -e INTEGRATIONS_CORE_VERSION="$INTEGRATIONS_CORE_VERSION" + -e GOMODCACHE="c:\modcache" + -e AWS_NETWORKING=true + -e SIGN_WINDOWS=true + -e TARGET_ARCH="$ARCH" + -e DEBUG_CUSTOMACTION="$DEBUG_CUSTOMACTION" + -e BUCKET_BRANCH="$BUCKET_BRANCH" + -e S3_OMNIBUS_CACHE_BUCKET="$S3_OMNIBUS_CACHE_BUCKET" + -e USE_S3_CACHING="$USE_S3_CACHING" + -e INTEGRATION_WHEELS_CACHE_BUCKET="$INTEGRATION_WHEELS_CACHE_BUCKET" + -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl}" + -e GO_VERSION_CHECK="true" + -e BUNDLE_MIRROR__RUBYGEMS__ORG=${BUNDLE_MIRROR__RUBYGEMS__ORG} + -e PIP_INDEX_URL=${PIP_INDEX_URL} + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} + c:\mnt\tasks\winbuildscripts\buildwin.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } - get-childitem omnibus\pkg - !reference [.upload_sbom_artifacts_windows] @@ -70,7 +97,29 @@ windows_zip_agent_binaries_x64-a7: - mkdir omnibus\pkg - !reference [.setup_ruby_mirror_win] - !reference [.setup_python_mirror_win] - - docker run --rm -m 4096M -v "$(Get-Location):c:\mnt" -e CI_COMMIT_BRANCH=${CI_COMMIT_BRANCH} -e OMNIBUS_TARGET=${OMNIBUS_TARGET} -e WINDOWS_BUILDER=true -e RELEASE_VERSION="$RELEASE_VERSION" -e MAJOR_VERSION="$AGENT_MAJOR_VERSION" -e INTEGRATIONS_CORE_VERSION="$INTEGRATIONS_CORE_VERSION" -e PY_RUNTIMES="$PYTHON_RUNTIMES" -e GOMODCACHE="c:\modcache" -e AWS_NETWORKING=true -e SIGN_WINDOWS=true -e BUCKET_BRANCH="$BUCKET_BRANCH" -e INTEGRATION_WHEELS_CACHE_BUCKET="$INTEGRATION_WHEELS_CACHE_BUCKET" -e S3_OMNIBUS_CACHE_BUCKET="$S3_OMNIBUS_CACHE_BUCKET" -e USE_S3_CACHING="$USE_S3_CACHING" -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl}" -e BUNDLE_MIRROR__RUBYGEMS__ORG=${BUNDLE_MIRROR__RUBYGEMS__ORG} -e PIP_INDEX_URL=${PIP_INDEX_URL} 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} c:\mnt\tasks\winbuildscripts\buildwin.bat + - > + docker run --rm + -m 4096M + -v "$(Get-Location):c:\mnt" + -e CI_COMMIT_BRANCH=${CI_COMMIT_BRANCH} + -e OMNIBUS_TARGET=${OMNIBUS_TARGET} + -e WINDOWS_BUILDER=true + -e RELEASE_VERSION="$RELEASE_VERSION" + -e MAJOR_VERSION="$AGENT_MAJOR_VERSION" + -e INTEGRATIONS_CORE_VERSION="$INTEGRATIONS_CORE_VERSION" + -e PY_RUNTIMES="$PYTHON_RUNTIMES" + -e GOMODCACHE="c:\modcache" + -e AWS_NETWORKING=true + -e SIGN_WINDOWS=true + -e BUCKET_BRANCH="$BUCKET_BRANCH" + -e INTEGRATION_WHEELS_CACHE_BUCKET="$INTEGRATION_WHEELS_CACHE_BUCKET" + -e S3_OMNIBUS_CACHE_BUCKET="$S3_OMNIBUS_CACHE_BUCKET" + -e USE_S3_CACHING="$USE_S3_CACHING" + -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl}" + -e BUNDLE_MIRROR__RUBYGEMS__ORG=${BUNDLE_MIRROR__RUBYGEMS__ORG} + -e PIP_INDEX_URL=${PIP_INDEX_URL} + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:${Env:DATADOG_AGENT_WINBUILDIMAGES} + c:\mnt\tasks\winbuildscripts\buildwin.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } - get-childitem omnibus\pkg - !reference [.upload_sbom_artifacts_windows] diff --git a/.gitlab/package_deps_build.yml b/.gitlab/package_deps_build.yml index df6354a1bfcfa..b601c18d19e88 100644 --- a/.gitlab/package_deps_build.yml +++ b/.gitlab/package_deps_build.yml @@ -11,19 +11,18 @@ - $S3_CP_CMD $S3_PERMANENT_ARTIFACTS_URI/btfs-$ARCH.tar.gz . - tar -xf btfs-$ARCH.tar.gz - $S3_CP_CMD $S3_ARTIFACTS_URI/oom-kill-co-re.o.$ARCH oom-kill.o - - inv -e system-probe.generate-minimized-btfs --source-dir "$CI_PROJECT_DIR/btfs-$ARCH" --output-dir "$CI_PROJECT_DIR/minimized-btfs" --input-bpf-programs "$CI_PROJECT_DIR/oom-kill.o" + - $S3_CP_CMD $S3_ARTIFACTS_URI/tcp-queue-length-co-re.o.$ARCH tcp-queue-length.o + - inv -e system-probe.generate-minimized-btfs --source-dir "$CI_PROJECT_DIR/btfs-$ARCH" --output-dir "$CI_PROJECT_DIR/minimized-btfs" --input-bpf-programs "$CI_PROJECT_DIR/oom-kill.o $CI_PROJECT_DIR/tcp-queue-length.o" - cd minimized-btfs - tar -cJf minimized-btfs.tar.xz * - $S3_CP_CMD minimized-btfs.tar.xz $S3_ARTIFACTS_URI/minimized-btfs-$ARCH.tar.xz - generate_minimized_btfs_x64: needs: ["build_system-probe-x64"] extends: .generate_minimized_btfs_common variables: ARCH: amd64 - generate_minimized_btfs_arm64: needs: ["build_system-probe-arm64"] extends: .generate_minimized_btfs_common diff --git a/.gitlab/source_test/ebpf.yml b/.gitlab/source_test/ebpf.yml index ca280d648dd35..9c8c8a28a6648 100644 --- a/.gitlab/source_test/ebpf.yml +++ b/.gitlab/source_test/ebpf.yml @@ -11,7 +11,7 @@ .build_sysprobe_artifacts: # kitchen prepare also builds object files - - inv -e system-probe.kitchen-prepare + - inv -e system-probe.kitchen-prepare --ci - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/tracer.o $CI_PROJECT_DIR/.tmp/binary-ebpf/tracer.o - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/tracer-debug.o $CI_PROJECT_DIR/.tmp/binary-ebpf/tracer-debug.o - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/offset-guess.o $CI_PROJECT_DIR/.tmp/binary-ebpf/offset-guess.o @@ -21,6 +21,7 @@ - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/dns.o $CI_PROJECT_DIR/.tmp/binary-ebpf/dns.o - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/dns-debug.o $CI_PROJECT_DIR/.tmp/binary-ebpf/dns-debug.o - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/co-re/oom-kill.o $CI_PROJECT_DIR/.tmp/binary-ebpf/co-re/oom-kill.o + - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/co-re/tcp-queue-length.o $CI_PROJECT_DIR/.tmp/binary-ebpf/co-re/tcp-queue-length.o - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/runtime/tracer.c $CI_PROJECT_DIR/.tmp/binary-ebpf/tracer.c - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/runtime/http.c $CI_PROJECT_DIR/.tmp/binary-ebpf/http.c - cp $CI_PROJECT_DIR/pkg/ebpf/bytecode/build/runtime/runtime-security.c $CI_PROJECT_DIR/.tmp/binary-ebpf/runtime-security.c @@ -45,8 +46,10 @@ - !reference [.retrieve_sysprobe_deps] script: - inv -e install-tools + - inv -e system-probe.object-files - invoke -e golangci-lint --build system-probe ./pkg - !reference [.build_sysprobe_artifacts] + - invoke -e security-agent.run-ebpf-unit-tests --verbose - invoke -e security-agent.kitchen-prepare - cp /tmp/clang-bpf $DD_AGENT_TESTING_DIR/site-cookbooks/dd-system-probe-check/files/clang-bpf - cp /tmp/llc-bpf $DD_AGENT_TESTING_DIR/site-cookbooks/dd-system-probe-check/files/llc-bpf @@ -59,7 +62,17 @@ - $ErrorActionPreference = "Stop" - '$_instance_id = (iwr -UseBasicParsing http://169.254.169.254/latest/meta-data/instance-id).content ; Write-Host "Running on instance $($_instance_id)"' - !reference [.setup_python_mirror_win] - - docker run --rm -m 8192M -v "$(Get-Location):c:\mnt" -e AWS_NETWORKING=true -e SIGN_WINDOWS=true -e PY_RUNTIMES="$PYTHON_RUNTIMES" -e GOMODCACHE="c:\modcache" -e PIP_INDEX_URL=${PIP_INDEX_URL} 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES c:\mnt\tasks\winbuildscripts\sysprobe.bat + - > + docker run --rm + -m 8192M + -v "$(Get-Location):c:\mnt" + -e AWS_NETWORKING=true + -e SIGN_WINDOWS=true + -e PY_RUNTIMES="$PYTHON_RUNTIMES" + -e GOMODCACHE="c:\modcache" + -e PIP_INDEX_URL=${PIP_INDEX_URL} + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES + c:\mnt\tasks\winbuildscripts\sysprobe.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } artifacts: when: always diff --git a/.gitlab/source_test/linux.yml b/.gitlab/source_test/linux.yml index b09b2be22fe9b..6e49c19aec425 100644 --- a/.gitlab/source_test/linux.yml +++ b/.gitlab/source_test/linux.yml @@ -18,9 +18,9 @@ script: - !reference [.retrieve_linux_go_tools_deps] - inv -e install-tools - - inv -e test $FLAVORS --race --profile --rerun-fails=2 --python-runtimes "$PYTHON_RUNTIMES" --cpus 4 $EXTRA_OPTS --save-result-json test_output.json --junit-tar "junit-${CI_JOB_NAME}.tgz" - python3 -m tasks.release_tests - python3 -m tasks.libs.version_tests + - inv -e test $FLAVORS --race --profile --rerun-fails=2 --python-runtimes "$PYTHON_RUNTIMES" --cpus 4 $EXTRA_OPTS --save-result-json test_output.json --junit-tar "junit-${CI_JOB_NAME}.tgz" artifacts: expire_in: 2 weeks when: always @@ -81,7 +81,7 @@ tests_rpm-x64-py2: extends: .rtloader_tests rules: !reference [.on_a6] - image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/rpm_x64:$DATADOG_AGENT_BUILDIMAGES + image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/rpm_x64_testing:$DATADOG_AGENT_BUILDIMAGES tags: ["runner:main"] needs: ["go_deps"] variables: @@ -93,7 +93,7 @@ tests_rpm-x64-py3: extends: - .rtloader_tests - .linux_tests - image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/rpm_x64:$DATADOG_AGENT_BUILDIMAGES + image: 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/rpm_x64_testing:$DATADOG_AGENT_BUILDIMAGES tags: ["runner:main"] needs: ["go_deps", "go_tools_deps"] variables: diff --git a/.gitlab/source_test/windows.yml b/.gitlab/source_test/windows.yml index 3990efcb26b41..fc1bbc46498ba 100644 --- a/.gitlab/source_test/windows.yml +++ b/.gitlab/source_test/windows.yml @@ -11,7 +11,21 @@ # we pass in CI_JOB_URL and CI_JOB_NAME so that they can be added to additional tags # inside JUNIT_TAR and then later used by datadog-ci - !reference [.setup_python_mirror_win] - - docker run --rm -m 8192M -v "$(Get-Location):c:\mnt" -e CI_JOB_URL="${CI_JOB_URL}" -e CI_JOB_NAME="${CI_JOB_NAME}" -e AWS_NETWORKING=true -e SIGN_WINDOWS=true -e PY_RUNTIMES="$PYTHON_RUNTIMES" -e GOMODCACHE="c:\modcache" -e JUNIT_TAR="c:\mnt\junit-${CI_JOB_NAME}.tgz" -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl}" -e PIP_INDEX_URL=${PIP_INDEX_URL} 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES c:\mnt\tasks\winbuildscripts\unittests.bat + - > + docker run --rm + -m 8192M + -v "$(Get-Location):c:\mnt" + -e CI_JOB_URL="${CI_JOB_URL}" + -e CI_JOB_NAME="${CI_JOB_NAME}" + -e AWS_NETWORKING=true + -e SIGN_WINDOWS=true + -e PY_RUNTIMES="$PYTHON_RUNTIMES" + -e GOMODCACHE="c:\modcache" + -e JUNIT_TAR="c:\mnt\junit-${CI_JOB_NAME}.tgz" + -e VCPKG_BINARY_SOURCES="clear;x-azblob,${vcpkgBlobSaSUrl}" + -e PIP_INDEX_URL=${PIP_INDEX_URL} + 486234852809.dkr.ecr.us-east-1.amazonaws.com/ci/datadog-agent-buildimages/windows_1809_${ARCH}:$Env:DATADOG_AGENT_WINBUILDIMAGES + c:\mnt\tasks\winbuildscripts\unittests.bat - If ($lastExitCode -ne "0") { throw "Previous command returned $lastExitCode" } artifacts: expire_in: 2 weeks diff --git a/.go-version b/.go-version index cafc0b7add498..83d5e73f00e46 100644 --- a/.go-version +++ b/.go-version @@ -1 +1 @@ -1.18.9 +1.19.5 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 385f7da611e7e..ab5f095dadf73 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,7 +2,7 @@ default_language_version: python: python3 repos: -- repo: https://gitlab.com/pycqa/flake8 +- repo: https://github.com/pycqa/flake8 rev: 3.9.2 # should match major Python version hooks: - id: flake8 diff --git a/.wwhrd.yml b/.wwhrd.yml index 3af3c11a2c90a..90374e3877fa9 100644 --- a/.wwhrd.yml +++ b/.wwhrd.yml @@ -21,6 +21,8 @@ overrides: "github.com/bmizerany/pat": MIT # https://github.com/xi2/xz/blob/master/LICENSE "github.com/xi2/xz": Public Domain + # https://github.com/acomagu/bufpipe/blob/master/LICENSE + "github.com/acomagu/bufpipe": MIT exceptions: - "golang.org/x/mobile/..." diff --git a/CHANGELOG-DCA.rst b/CHANGELOG-DCA.rst index cd131c908a196..2953fe431e203 100644 --- a/CHANGELOG-DCA.rst +++ b/CHANGELOG-DCA.rst @@ -2,6 +2,27 @@ Release Notes ============= +.. _Release Notes_7.42.0: + +7.42.0 / 6.42.0 +====== + +.. _Release Notes_7.42.0_New Features: + +New Features +------------ + +- Supports the collection of custom resource definition and custom resource manifests for the orchestrator explorer. + + +.. _Release Notes_7.42.0_Enhancement Notes: + +Enhancement Notes +----------------- + +- Collects Unified Service Tags for the orchestrator explorer product. + + .. _Release Notes_7.41.0: 7.41.0 / 6.41.0 diff --git a/CHANGELOG.rst b/CHANGELOG.rst index ee42709278662..63d45854a2d4a 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -2,24 +2,197 @@ Release Notes ============= -.. _Release Notes_7.41.1: +.. _Release Notes_7.42.0: -7.41.1 / 6.41.1 +7.42.0 / 6.42.0 ====== -.. _Release Notes_7.41.1_Prelude: +.. _Release Notes_7.42.0_Prelude: Prelude ------- -Release on: 2022-12-21 +Release on: 2023-01-23 +- Please refer to the `7.42.0 tag on integrations-core `_ for the list of changes on the Core Checks -.. _Release Notes_7.41.1_Enhancement Notes: + +.. _Release Notes_7.42.0_Upgrade Notes: + +Upgrade Notes +------------- + +- Downloading and installing official checks with `agent integration install` + is no longer supported for Agent installations that do not include an embedded + python3. + + +.. _Release Notes_7.42.0_New Features: + +New Features +------------ + +- Adding the `kube_api_version` tag to all orchestrator resources. + +- Kubernetes Pod events generated by the `kubernetes_apiserver` can now + benefit from the new `cluster-tagger` component in the Cluster-Agent. + +- APM OTLP: Added compatibility for the OpenTelemetry Collector's datadogprocessor to the OTLP Ingest. + +- The CWS agent now supports rules on mount events. + +- Adding a configuration option, ``exclude_ec2_tags``, to exclude EC2 instance tags from being converted into host + tags. + +- Adds detection for a process being executed directly from memory without the binary present on disk. + +- Introducing agent sampling rates remote configuration. + +- Adds support for ``secret_backend_command_sha256`` SHA for the ``secret_backend_command`` executable. If ``secret_backend_command_sha256`` is used, + the following restrictions are in place: + - Value specified in the ``secret_backend_command`` setting must be an absolute path. + - Permissions for the ``datadog.yaml`` config file must disallow write access by users other than ``ddagentuser`` or ``Administrators`` on Windows or the user running the Agent on Linux and macOS. + The agent will refuse to start if the actual SHA256 of the ``secret_backend_command`` executable is different from the one specified by ``secret_backend_command_sha256``. + The ``secret_backend_command`` file is locked during verification of SHA256 and subsequent run of the secret backend executable. + +- Collect network devices topology metadata. + +- Add support for AWS Lambda Telemetry API + +- Adds three new metrics collected by the Lambda Extension + + `aws.lambda.enhanced.response_latency`: Measures the elapsed time in milliseconds from when the invocation request is received to when the first byte of response is sent to the client. + + `aws.lambda.enhanced.response_duration`: Measures the elapsed time in milliseconds between sending the first byte of the response to the client and sending the last byte of the response to the client. + + `aws.lambda.enhancdd.produced_bytes`: Measures the number of bytes returned by a function. + +- Create cold start span representing time and duration of initialization of an AWS Lambda function. + + +.. _Release Notes_7.42.0_Enhancement Notes: Enhancement Notes ----------------- +- Adds both the `StartTime` and `ScheduledTime` properties in the collector for Kubernetes pods. + +- Add an option (`hostname_trust_uts_namespace`) to force the Agent to trust the hostname value retrieved from non-root UTS namespaces (Linux only). + +- Metrics from Giant Swarm pause containers are now excluded by default. + +- Events emitted by the Helm check now have "Error" status when the release fails. + +- Add an ``annotations_as_tags`` parameter to the kubernetes_state_core check to allow attaching Kubernetes annotations as Datadog tags in a similar way that the ``labels_as_tags`` parameter does. + +- Adds the ``windows_counter_init_failure_limit`` option. + This option limits the number of times a check will attempt to initialize + a performance counter before ceasing attempts to initialize the counter. + +- [netflow] Expose collector metrics (from goflow) as Datadog metrics + +- [netflow] Add prometheus listener to expose goflow telemetry + +- OTLP ingest now uses the minimum and maximum fields from delta OTLP Histograms and OTLP ExponentialHistograms when available. + +- The OTLP ingest endpoint now reports the first cumulative monotonic sum value if the timeseries started after the Datadog Agent process started. + +- Added the `workload-list` command to the process agent. It lists the entities stored in workloadmeta. + +- Allows running secrets in the Process Agent on Windows by sandboxing + ``secret_backend_command`` execution to the ``ddagentuser`` account used by the Core Agent service. + +- Add `process_context` tag extraction based on a process's command line arguments for service monitoring. + This feature is configured in the `system-probe.yaml` with the following configuration: + `service_monitoring_config.process_service_inference.enabled`. + +- Reduce the overhead of using Windows Performance Counters / PDH in checks. + +- The OTLP ingest endpoint now supports the same settings and protocol as the OpenTelemetry Collector OTLP receiver v0.64.1 + +- The OTLP ingest endpoint now supports the same settings and protocols as the OpenTelemetry Collector OTLP receiver v0.66.0. + + +.. _Release Notes_7.42.0_Deprecation Notes: + +Deprecation Notes +----------------- + +- Removes the `install-service` Windows agent command. + +- Removes the `remove-service` Windows agent command. + + +.. _Release Notes_7.42.0_Security Notes: + +Security Notes +-------------- + +- Upgrade the wheel package to ``0.37.1`` for Python 2. + +- Upgrade the wheel package to ``0.38.4`` for Python 3. + + +.. _Release Notes_7.42.0_Bug Fixes: + +Bug Fixes +--------- + +- APM: Fix an issue where container tags weren't working because of overwriting an essential tag on spans. + +- APM OTLP: Fix an issue where a span's local "peer.service" attribute would not override a resource attribute-level service. + +- On Windows, fixes a bug in the NPM network driver which could cause + a system crash (BSOD). + +- Create only endpoints check from prometheus scrape configuration + when `prometheus_scrape.service.endpoint` option is enabled. + +- Fix how Kubernetes events forwarding detects the Node/Host. + * Previously Nodes' events were not always attached to the correct host. + * Pods' events from "custom" controllers might still be not attached to + a host if the controller doesn't set the host in the `source.host` event's field. + +- APM: Fix SQL parsing of negative numbers and improve error message. + +- Fix a potential panic when df outputs warnings or errors among its standard output. + +- Fix a bug where a misconfig error does not show when `hidepid=invisible` + +- The agent no longer wrongly resolves its hostname on ECS Fargate when + requests to the Fargate API timeout. + +- Metrics reported through OTLP ingest now have the interval property unset. + +- Fix a PDH query handle leak that occurred when a counter failed to add to a query. + +- Remove unused environment variables `DD_AGENT_PY` and `DD_AGENT_PY_ENV` from known environment variables in flare command. + +- APM: Fix SQL obfuscator parsing of identifiers containing dollar signs. + + +.. _Release Notes_7.42.0_Other Notes: + +Other Notes +----------- + +- JMXFetch upgraded to `0.47.2 `_ + +- Bump embedded Python3 to `3.8.16`. + + +.. _Release Notes_7.41.1: + +7.41.1 / 6.41.1 +====== + +.. _Release Notes_7.41.1_Prelude: + +Release on: 2022-12-21 + + +.. _Release Notes_7.41.1_Enhancement Notes: + - Agents are now built with Go ``1.18.9``. diff --git a/Dockerfiles/agent/datadog-kubernetes.yaml b/Dockerfiles/agent/datadog-kubernetes.yaml index 3746e5d46ee41..5532007364d02 100644 --- a/Dockerfiles/agent/datadog-kubernetes.yaml +++ b/Dockerfiles/agent/datadog-kubernetes.yaml @@ -3,8 +3,6 @@ apm_config: apm_non_local_traffic: true - max_memory: 0 - max_cpu_percent: 0 # Use java container support jmx_use_container_support: true diff --git a/Dockerfiles/agent/s6-services/process/run b/Dockerfiles/agent/s6-services/process/run index d082d35656ff2..9a442ba4908be 100755 --- a/Dockerfiles/agent/s6-services/process/run +++ b/Dockerfiles/agent/s6-services/process/run @@ -1,4 +1,4 @@ #!/usr/bin/execlineb -P foreground { /initlog.sh "starting process-agent" } -process-agent --config=/etc/datadog-agent/datadog.yaml +process-agent --cfgpath=/etc/datadog-agent/datadog.yaml diff --git a/LICENSE-3rdparty.csv b/LICENSE-3rdparty.csv index 537f238ee1342..58cd7647325c5 100644 --- a/LICENSE-3rdparty.csv +++ b/LICENSE-3rdparty.csv @@ -26,9 +26,27 @@ core,code.cloudfoundry.org/lager,Apache-2.0,"Copyright (c) 2016-Present CloudFou core,code.cloudfoundry.org/tlsconfig,Apache-2.0,"Copyright (c) 2016-Present CloudFoundry.org Foundation, Inc. All Rights Reserved." core,contrib.go.opencensus.io/exporter/prometheus,Apache-2.0,"Copyright 2020, OpenCensus Authors" core,github.com/AlekSi/pointer,MIT,Copyright (c) 2015 Alexey Palazhchenko +core,github.com/Azure/azure-sdk-for-go/profiles/preview/preview/containerregistry/runtime/containerregistry,MIT,Copyright (c) Microsoft Corporation +core,github.com/Azure/azure-sdk-for-go/services/preview/containerregistry/runtime/2019-08-15-preview/containerregistry,MIT,Copyright (c) Microsoft Corporation +core,github.com/Azure/azure-sdk-for-go/version,MIT,Copyright (c) Microsoft Corporation +core,github.com/Azure/go-autorest,Apache-2.0,Copyright 2015 Microsoft Corporation +core,github.com/Azure/go-autorest/autorest,Apache-2.0,Copyright 2015 Microsoft Corporation +core,github.com/Azure/go-autorest/autorest/adal,Apache-2.0,Copyright 2015 Microsoft Corporation +core,github.com/Azure/go-autorest/autorest/azure,Apache-2.0,Copyright 2015 Microsoft Corporation +core,github.com/Azure/go-autorest/autorest/azure/auth,Apache-2.0,Copyright 2015 Microsoft Corporation +core,github.com/Azure/go-autorest/autorest/azure/cli,Apache-2.0,Copyright 2015 Microsoft Corporation +core,github.com/Azure/go-autorest/autorest/date,Apache-2.0,Copyright 2015 Microsoft Corporation +core,github.com/Azure/go-autorest/logger,Apache-2.0,Copyright 2015 Microsoft Corporation +core,github.com/Azure/go-autorest/tracing,Apache-2.0,Copyright 2015 Microsoft Corporation +core,github.com/BurntSushi/toml,MIT,Copyright (c) 2013 TOML authors +core,github.com/BurntSushi/toml/internal,MIT,Copyright (c) 2013 TOML authors +core,github.com/CycloneDX/cyclonedx-go,Apache-2.0,Copyright & License | Copyright (c) OWASP Foundation | Copyright (c) OWASP Foundation. All Rights Reserved | Copyright OWASP Foundation +core,github.com/DataDog/agent-payload/v5/contimage,BSD-3-Clause,"Copyright (c) 2017, Datadog, Inc" core,github.com/DataDog/agent-payload/v5/contlcycle,BSD-3-Clause,"Copyright (c) 2017, Datadog, Inc" +core,github.com/DataDog/agent-payload/v5/cyclonedx_v1_4,BSD-3-Clause,"Copyright (c) 2017, Datadog, Inc" core,github.com/DataDog/agent-payload/v5/gogen,BSD-3-Clause,"Copyright (c) 2017, Datadog, Inc" core,github.com/DataDog/agent-payload/v5/process,BSD-3-Clause,"Copyright (c) 2017, Datadog, Inc" +core,github.com/DataDog/agent-payload/v5/sbom,BSD-3-Clause,"Copyright (c) 2017, Datadog, Inc" core,github.com/DataDog/aptly/aptly,MIT,"* Alexander Guy (https://github.com/alexanderguy) | * Andre Roth (https://github.com/neolynx) | * Andrea Bernardo Ciddio (https://github.com/bcandrea) | * Andrey Smirnov (https://github.com/smira) | * Artem Smirnov (https://github.com/urpylka) | * Benj Fassbind (https://github.com/randombenj) | * Benoit Foucher (https://github.com/bentoi) | * Charles Hsu (https://github.com/charz) | * Chris Read (https://github.com/cread) | * Chuan Liu (https://github.com/chuan) | * Clemens Rabe (https://github.com/seeraven) | * Dmitrii Kashin (https://github.com/freehck) | * Don Kuntz (https://github.com/dkuntz2) | * Geoffrey Thomas (https://github.com/geofft) | * Harald Sitter (https://github.com/apachelogger) | * Ivan Kurnosov (https://github.com/zerkms) | * Johannes Layher (https://github.com/jola5) | * Joshua Colson (https://github.com/freakinhippie) | * Lorenzo Bolla (https://github.com/lbolla) | * Ludovico Cavedon (https://github.com/cavedon) | * Markus Muellner (https://github.com/mmianl) | * Matt Martyn (https://github.com/MMartyn) | * Maximilian Stein (https://github.com/steinymity) | * Michael Koval (https://github.com/mkoval) | * Nabil Bendafi (https://github.com/nabilbendafi) | * Oliver Sauder (https://github.com/sliverc) | * Paul Krohn (https://github.com/paul-krohn) | * Petr Jediny (https://github.com/pjediny) | * Phil Frost (https://github.com/bitglue) | * Raphael Medaer (https://github.com/rmedaer) | * Raul Benencia (https://github.com/rul) | * Rohan Garg (https://github.com/shadeslayer) | * Russ Allbery (https://github.com/rra) | * Russell Greene (https://github.com/russelltg) | * Ryan Uber (https://github.com/ryanuber) | * Samuel Mutel (https://github.com/smutel) | * Sebastien Badia (https://github.com/sbadia) | * Sebastien Binet (https://github.com/sbinet) | * Shengjing Zhu (https://github.com/zhsj) | * Simon Aquino (https://github.com/queeno) | * Strajan Sebastian (https://github.com/strajansebastian) | * Sylvain Baubeau (https://github.com/lebauce) | * Szymon Sobik (https://github.com/sobczyk) | * TJ Merritt (https://github.com/tjmerritt) | * Vincent Batoufflet (https://github.com/vbatoufflet) | * Vincent Bernat (https://github.com/vincentbernat) | * William Manley (https://github.com/wmanley) | * x539 (https://github.com/x539) | Copyright 2013-2015 aptly authors. All rights reserved | List of contributors, in chronological order:" core,github.com/DataDog/aptly/database,MIT,"* Alexander Guy (https://github.com/alexanderguy) | * Andre Roth (https://github.com/neolynx) | * Andrea Bernardo Ciddio (https://github.com/bcandrea) | * Andrey Smirnov (https://github.com/smira) | * Artem Smirnov (https://github.com/urpylka) | * Benj Fassbind (https://github.com/randombenj) | * Benoit Foucher (https://github.com/bentoi) | * Charles Hsu (https://github.com/charz) | * Chris Read (https://github.com/cread) | * Chuan Liu (https://github.com/chuan) | * Clemens Rabe (https://github.com/seeraven) | * Dmitrii Kashin (https://github.com/freehck) | * Don Kuntz (https://github.com/dkuntz2) | * Geoffrey Thomas (https://github.com/geofft) | * Harald Sitter (https://github.com/apachelogger) | * Ivan Kurnosov (https://github.com/zerkms) | * Johannes Layher (https://github.com/jola5) | * Joshua Colson (https://github.com/freakinhippie) | * Lorenzo Bolla (https://github.com/lbolla) | * Ludovico Cavedon (https://github.com/cavedon) | * Markus Muellner (https://github.com/mmianl) | * Matt Martyn (https://github.com/MMartyn) | * Maximilian Stein (https://github.com/steinymity) | * Michael Koval (https://github.com/mkoval) | * Nabil Bendafi (https://github.com/nabilbendafi) | * Oliver Sauder (https://github.com/sliverc) | * Paul Krohn (https://github.com/paul-krohn) | * Petr Jediny (https://github.com/pjediny) | * Phil Frost (https://github.com/bitglue) | * Raphael Medaer (https://github.com/rmedaer) | * Raul Benencia (https://github.com/rul) | * Rohan Garg (https://github.com/shadeslayer) | * Russ Allbery (https://github.com/rra) | * Russell Greene (https://github.com/russelltg) | * Ryan Uber (https://github.com/ryanuber) | * Samuel Mutel (https://github.com/smutel) | * Sebastien Badia (https://github.com/sbadia) | * Sebastien Binet (https://github.com/sbinet) | * Shengjing Zhu (https://github.com/zhsj) | * Simon Aquino (https://github.com/queeno) | * Strajan Sebastian (https://github.com/strajansebastian) | * Sylvain Baubeau (https://github.com/lebauce) | * Szymon Sobik (https://github.com/sobczyk) | * TJ Merritt (https://github.com/tjmerritt) | * Vincent Batoufflet (https://github.com/vbatoufflet) | * Vincent Bernat (https://github.com/vincentbernat) | * William Manley (https://github.com/wmanley) | * x539 (https://github.com/x539) | Copyright 2013-2015 aptly authors. All rights reserved | List of contributors, in chronological order:" core,github.com/DataDog/aptly/database/goleveldb,MIT,"* Alexander Guy (https://github.com/alexanderguy) | * Andre Roth (https://github.com/neolynx) | * Andrea Bernardo Ciddio (https://github.com/bcandrea) | * Andrey Smirnov (https://github.com/smira) | * Artem Smirnov (https://github.com/urpylka) | * Benj Fassbind (https://github.com/randombenj) | * Benoit Foucher (https://github.com/bentoi) | * Charles Hsu (https://github.com/charz) | * Chris Read (https://github.com/cread) | * Chuan Liu (https://github.com/chuan) | * Clemens Rabe (https://github.com/seeraven) | * Dmitrii Kashin (https://github.com/freehck) | * Don Kuntz (https://github.com/dkuntz2) | * Geoffrey Thomas (https://github.com/geofft) | * Harald Sitter (https://github.com/apachelogger) | * Ivan Kurnosov (https://github.com/zerkms) | * Johannes Layher (https://github.com/jola5) | * Joshua Colson (https://github.com/freakinhippie) | * Lorenzo Bolla (https://github.com/lbolla) | * Ludovico Cavedon (https://github.com/cavedon) | * Markus Muellner (https://github.com/mmianl) | * Matt Martyn (https://github.com/MMartyn) | * Maximilian Stein (https://github.com/steinymity) | * Michael Koval (https://github.com/mkoval) | * Nabil Bendafi (https://github.com/nabilbendafi) | * Oliver Sauder (https://github.com/sliverc) | * Paul Krohn (https://github.com/paul-krohn) | * Petr Jediny (https://github.com/pjediny) | * Phil Frost (https://github.com/bitglue) | * Raphael Medaer (https://github.com/rmedaer) | * Raul Benencia (https://github.com/rul) | * Rohan Garg (https://github.com/shadeslayer) | * Russ Allbery (https://github.com/rra) | * Russell Greene (https://github.com/russelltg) | * Ryan Uber (https://github.com/ryanuber) | * Samuel Mutel (https://github.com/smutel) | * Sebastien Badia (https://github.com/sbadia) | * Sebastien Binet (https://github.com/sbinet) | * Shengjing Zhu (https://github.com/zhsj) | * Simon Aquino (https://github.com/queeno) | * Strajan Sebastian (https://github.com/strajansebastian) | * Sylvain Baubeau (https://github.com/lebauce) | * Szymon Sobik (https://github.com/sobczyk) | * TJ Merritt (https://github.com/tjmerritt) | * Vincent Batoufflet (https://github.com/vbatoufflet) | * Vincent Bernat (https://github.com/vincentbernat) | * William Manley (https://github.com/wmanley) | * x539 (https://github.com/x539) | Copyright 2013-2015 aptly authors. All rights reserved | List of contributors, in chronological order:" @@ -74,8 +92,6 @@ core,github.com/DataDog/gopsutil/internal/common,BSD-3-Clause,"Copyright (c) 200 core,github.com/DataDog/gopsutil/mem,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" core,github.com/DataDog/gopsutil/net,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" core,github.com/DataDog/gopsutil/process,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" -core,github.com/DataDog/gopsutil/process/filepath,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" -core,github.com/DataDog/gopsutil/process/so,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" core,github.com/DataDog/gostackparse,Apache-2.0,"Copyright (c) 2016-Present, Datadog | Copyright 2016 Datadog, Inc" core,github.com/DataDog/mmh3,MIT,"Copyright (c) 2017 Datadog, Inc." core,github.com/DataDog/nikos/apt,MIT,"Copyright (c) 2020-present Datadog, Inc" @@ -97,12 +113,18 @@ core,github.com/DataDog/watermarkpodautoscaler/api/v1alpha1,Apache-2.0,"Copyrigh core,github.com/DataDog/zstd,BSD-3-Clause,"Copyright (c) 2016, Datadog " core,github.com/DataDog/zstd_0,BSD-3-Clause,"Copyright (c) 2016, Datadog " core,github.com/DisposaBoy/JsonConfigReader,MIT,* Andreas Jaekle `https://github.com/ekle` | * DisposaBoy `https://github.com/DisposaBoy` | * Steven Osborn `https://github.com/steve918` | Copyright (c) 2012 The JsonConfigReader Authors | This is the official list of JsonConfigReader authors for copyright purposes. +core,github.com/GoogleCloudPlatform/docker-credential-gcr/config,Apache-2.0,"Copyright 2016 Google, Inc." +core,github.com/GoogleCloudPlatform/docker-credential-gcr/credhelper,Apache-2.0,"Copyright 2016 Google, Inc." +core,github.com/GoogleCloudPlatform/docker-credential-gcr/store,Apache-2.0,"Copyright 2016 Google, Inc." +core,github.com/GoogleCloudPlatform/docker-credential-gcr/util,Apache-2.0,"Copyright 2016 Google, Inc." +core,github.com/GoogleCloudPlatform/docker-credential-gcr/util/cmd,Apache-2.0,"Copyright 2016 Google, Inc." core,github.com/Masterminds/goutils,Apache-2.0,Copyright 2014 Alexander Okoli core,github.com/Masterminds/semver,MIT,"Copyright (C) 2014-2019, Matt Butcher and Matt Farina" core,github.com/Masterminds/semver/v3,MIT,"Copyright (C) 2014-2019, Matt Butcher and Matt Farina" core,github.com/Masterminds/sprig/v3,MIT,Copyright (C) 2013-2020 Masterminds core,github.com/Microsoft/go-winio,MIT,Copyright (c) 2015 Microsoft core,github.com/Microsoft/go-winio/backuptar,MIT,Copyright (c) 2015 Microsoft +core,github.com/Microsoft/go-winio/internal/socket,MIT,Copyright (c) 2015 Microsoft core,github.com/Microsoft/go-winio/pkg/guid,MIT,Copyright (c) 2015 Microsoft core,github.com/Microsoft/go-winio/pkg/security,MIT,Copyright (c) 2015 Microsoft core,github.com/Microsoft/go-winio/vhd,MIT,Copyright (c) 2015 Microsoft @@ -132,8 +154,27 @@ core,github.com/Microsoft/hcsshim/osversion,MIT,Copyright (c) 2015 Microsoft | C core,github.com/Microsoft/hcsshim/pkg/ociwclayer,MIT,Copyright (c) 2015 Microsoft | Copyright (c) 2018 Microsoft Corp. All rights reserved core,github.com/NYTimes/gziphandler,Apache-2.0,Copyright 2016-2017 The New York Times Company core,github.com/OneOfOne/xxhash,Apache-2.0,Copyright (c) 2014 Ahmed W. (OneOfOne) +core,github.com/ProtonMail/go-crypto/bitcurves,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,github.com/ProtonMail/go-crypto/brainpool,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,github.com/ProtonMail/go-crypto/eax,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,github.com/ProtonMail/go-crypto/internal/byteutil,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,github.com/ProtonMail/go-crypto/ocb,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,github.com/ProtonMail/go-crypto/openpgp,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,github.com/ProtonMail/go-crypto/openpgp/aes/keywrap,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,github.com/ProtonMail/go-crypto/openpgp/armor,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,github.com/ProtonMail/go-crypto/openpgp/ecdh,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,github.com/ProtonMail/go-crypto/openpgp/elgamal,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,github.com/ProtonMail/go-crypto/openpgp/errors,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,github.com/ProtonMail/go-crypto/openpgp/internal/algorithm,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,github.com/ProtonMail/go-crypto/openpgp/internal/ecc,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,github.com/ProtonMail/go-crypto/openpgp/internal/encoding,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,github.com/ProtonMail/go-crypto/openpgp/packet,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,github.com/ProtonMail/go-crypto/openpgp/s2k,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,github.com/StackExchange/wmi,MIT,Copyright (c) 2013 Stack Exchange +core,github.com/VividCortex/ewma,MIT,"Copyright (c) 2013 VividCortex | Copyright (c) 2013 VividCortex, Inc. All rights reserved" core,github.com/acobaugh/osrelease,BSD-3-Clause,Copyright 2017 Andrew Cobaugh +core,github.com/acomagu/bufpipe,MIT,Copyright (c) 2019 acomagu +core,github.com/agext/levenshtein,Apache-2.0,Copyright 2016 ALRUX Inc core,github.com/agnivade/levenshtein,MIT,Copyright (c) 2015 Agniva De Sarker core,github.com/alecthomas/participle,MIT,Copyright (C) 2017 Alec Thomas core,github.com/alecthomas/participle/lexer,MIT,Copyright (C) 2017 Alec Thomas @@ -142,8 +183,202 @@ core,github.com/alecthomas/participle/lexer/ebnf/internal,MIT,Copyright (C) 2017 core,github.com/alecthomas/repr,MIT,Copyright (c) 2016 Alec Thomas core,github.com/alecthomas/units,MIT,Copyright (C) 2014 Alec Thomas core,github.com/andybalholm/brotli,MIT,"Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors" +core,github.com/aquasecurity/go-dep-parser/pkg/c/conan,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/conda/meta,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/dart/pub,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/dotnet/core_deps,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/golang/binary,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/golang/mod,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/golang/sum,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/gradle/lockfile,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/hex/mix,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/io,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/java/jar,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/java/pom,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/log,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/nodejs/npm,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/nodejs/packagejson,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/nodejs/pnpm,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/nodejs/yarn,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/nuget/config,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/nuget/lock,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/php/composer,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/python/packaging,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/python/pip,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/python/pipenv,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/python/poetry,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/ruby/bundler,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/ruby/gemspec,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/rust/binary,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/rust/cargo,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/swift/cocoapods,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/types,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-dep-parser/pkg/utils,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/aquasecurity/go-gem-version,Apache-2.0,Copyright (c) 2020 Teppei Fukuda (knqyf263) +core,github.com/aquasecurity/go-npm-version/pkg,Apache-2.0,Copyright (c) 2020 Teppei Fukuda (knqyf263) +core,github.com/aquasecurity/go-pep440-version,Apache-2.0,Copyright (c) 2020 Teppei Fukuda (knqyf263) +core,github.com/aquasecurity/go-version/pkg/part,Apache-2.0,Copyright (c) 2020 Teppei Fukuda (knqyf263) +core,github.com/aquasecurity/go-version/pkg/prerelease,Apache-2.0,Copyright (c) 2020 Teppei Fukuda (knqyf263) +core,github.com/aquasecurity/go-version/pkg/semver,Apache-2.0,Copyright (c) 2020 Teppei Fukuda (knqyf263) +core,github.com/aquasecurity/go-version/pkg/version,Apache-2.0,Copyright (c) 2020 Teppei Fukuda (knqyf263) +core,github.com/aquasecurity/table,MIT,Copyright (c) 2022 Aqua Security +core,github.com/aquasecurity/tml,Unlicense,"copyright interest in the | copyright law | copyright laws, the author or authors" +core,github.com/aquasecurity/trivy-db/pkg/db,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/log,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/metadata,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/types,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/utils,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/utils/ints,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/utils/strings,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/vulnsrc/alma,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/vulnsrc/alpine,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/vulnsrc/amazon,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/vulnsrc/debian,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/vulnsrc/mariner,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/vulnsrc/mariner/oval,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/vulnsrc/oracle-oval,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/vulnsrc/photon,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/vulnsrc/redhat-oval,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/vulnsrc/rocky,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/vulnsrc/suse-cvrf,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/vulnsrc/ubuntu,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/vulnsrc/vulnerability,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy-db/pkg/vulnsrc/wolfi,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/attestation,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/attestation/sbom,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/clock,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/commands/operation,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/db,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/detector/library,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/detector/library/compare,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/detector/library/compare/maven,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/detector/library/compare/npm,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/detector/library/compare/pep440,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/detector/library/compare/rubygems,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/detector/ospkg,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/detector/ospkg/alma,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/detector/ospkg/alpine,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/detector/ospkg/amazon,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/detector/ospkg/debian,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/detector/ospkg/mariner,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/detector/ospkg/oracle,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/detector/ospkg/photon,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/detector/ospkg/redhat,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/detector/ospkg/rocky,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/detector/ospkg/suse,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/detector/ospkg/ubuntu,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/detector/ospkg/wolfi,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/downloader,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/all,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/buildinfo,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/command/apk,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/config,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/config/all,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/config/dockerfile,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/config/helm,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/config/json,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/config/terraform,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/config/yaml,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/executable,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/c/conan,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/conda/meta,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/dart/pub,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/dotnet/deps,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/dotnet/nuget,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/elixir/mix,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/golang/binary,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/golang/mod,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/java/gradle,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/java/jar,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/java/pom,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/nodejs/npm,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/nodejs/pkg,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/nodejs/pnpm,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/nodejs/yarn,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/php/composer,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/python/packaging,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/python/pip,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/python/pipenv,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/python/poetry,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/ruby/bundler,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/ruby/gemspec,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/rust/binary,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/rust/cargo,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/language/swift/cocoapods,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/os,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/os/alpine,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/os/amazonlinux,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/os/debian,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/os/mariner,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/os/redhatbase,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/os/release,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/os/ubuntu,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/pkg/apk,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/pkg/dpkg,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/pkg/rpm,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/analyzer/repo/apk,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/applier,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/artifact,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/artifact/image,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/artifact/local,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/artifact/remote,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/artifact/sbom,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/artifact/vm,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/cache,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/handler,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/handler/all,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/handler/dpkg,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/handler/gomod,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/handler/sysfile,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/handler/unpackaged,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/image,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/image/daemon,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/image/token,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/image/token/azure,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/image/token/ecr,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/image/token/google,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/log,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/types,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/utils,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/vm,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/vm/disk,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/vm/filesystem,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/fanal/walker,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/flag,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/licensing,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/log,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/oci,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/policy,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/purl,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/rekor,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/report,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/report/cyclonedx,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/report/github,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/report/predicate,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/report/spdx,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/report/table,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/result,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/rpc,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/rpc/client,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/sbom,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/sbom/cyclonedx,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/sbom/spdx,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/scanner,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/scanner/local,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/scanner/post,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/scanner/utils,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/semaphore,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/types,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/utils,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/pkg/vulnerability,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/rpc/cache,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/rpc/common,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd +core,github.com/aquasecurity/trivy/rpc/scanner,Apache-2.0,Copyright 2019-2020 Aqua Security Software Ltd core,github.com/arduino/go-apt-client,Apache-2.0,Copyright (C) 2017 Arduino AG (http://www.arduino.cc/) core,github.com/armon/go-metrics,MIT,Copyright (c) 2013 Armon Dadgar +core,github.com/asaskevich/govalidator,MIT,Copyright (c) 2014-2020 Alex Saskevich core,github.com/avast/retry-go/v4,MIT,Copyright (c) 2017 Avast core,github.com/awalterschulze/gographviz,Apache-2.0,Copyright (c) 2009 The Go Authors. All rights reserved | Copyright 2013 GoGraphviz Authors | Nathan Kitchen | Robin Eklind | Ruud Kamphuis | Vastech SA (PTY) LTD | Walter Schulze | Xavier Chassin | Xuanyi Chew core,github.com/awalterschulze/gographviz/ast,Apache-2.0,Copyright (c) 2009 The Go Authors. All rights reserved | Copyright 2013 GoGraphviz Authors | Nathan Kitchen | Robin Eklind | Ruud Kamphuis | Vastech SA (PTY) LTD | Walter Schulze | Xavier Chassin | Xuanyi Chew @@ -152,6 +387,54 @@ core,github.com/awalterschulze/gographviz/internal/lexer,Apache-2.0,Copyright (c core,github.com/awalterschulze/gographviz/internal/parser,Apache-2.0,Copyright (c) 2009 The Go Authors. All rights reserved | Copyright 2013 GoGraphviz Authors | Nathan Kitchen | Robin Eklind | Ruud Kamphuis | Vastech SA (PTY) LTD | Walter Schulze | Xavier Chassin | Xuanyi Chew core,github.com/awalterschulze/gographviz/internal/token,Apache-2.0,Copyright (c) 2009 The Go Authors. All rights reserved | Copyright 2013 GoGraphviz Authors | Nathan Kitchen | Robin Eklind | Ruud Kamphuis | Vastech SA (PTY) LTD | Walter Schulze | Xavier Chassin | Xuanyi Chew core,github.com/aws/aws-lambda-go/events,Apache-2.0,"Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/aws,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/aws/defaults,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/aws/middleware,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/aws/protocol/ec2query,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/aws/protocol/query,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/aws/protocol/restjson,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/aws/protocol/xml,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/aws/ratelimit,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/aws/retry,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/aws/signer/v4,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/aws/transport/http,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/config,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/credentials,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/credentials/endpointcreds,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/credentials/processcreds,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/credentials/ssocreds,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/credentials/stscreds,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/feature/ec2/imds,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/feature/ec2/imds/internal/config,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/internal/configsources,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/internal/endpoints/v2,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/internal/ini,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/internal/rand,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/internal/sdk,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/internal/sdkio,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/internal/strings,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/internal/sync/singleflight,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/internal/timeconv,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/service/ebs,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/service/ebs/internal/endpoints,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/service/ebs/types,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/service/ec2,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/service/ec2/internal/endpoints,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/service/ec2/types,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/service/internal/presigned-url,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/service/sso,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/service/sso/internal/endpoints,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/service/sso/types,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/service/ssooidc,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/service/ssooidc/internal/endpoints,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/service/ssooidc/types,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/service/sts,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/service/sts/internal/endpoints,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go-v2/service/sts/types,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/aws,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/aws/arn,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/aws/awserr,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." @@ -174,6 +457,9 @@ core,github.com/aws/aws-sdk-go/aws/session,Apache-2.0,"Copyright 2014-2015 Strip core,github.com/aws/aws-sdk-go/aws/signer/v4,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/internal/context,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/internal/ini,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go/internal/s3shared,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go/internal/s3shared/arn,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go/internal/s3shared/s3err,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/internal/sdkio,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/internal/sdkmath,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/internal/sdkrand,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." @@ -181,36 +467,68 @@ core,github.com/aws/aws-sdk-go/internal/sdkuri,Apache-2.0,"Copyright 2014-2015 S core,github.com/aws/aws-sdk-go/internal/shareddefaults,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/internal/strings,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/internal/sync/singleflight,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go/private/checksum,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/private/protocol,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/private/protocol/ec2query,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go/private/protocol/eventstream,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/private/protocol/json/jsonutil,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/private/protocol/jsonrpc,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/private/protocol/query,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/private/protocol/query/queryutil,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/private/protocol/rest,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/private/protocol/restjson,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go/private/protocol/restxml,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/service/ec2,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go/service/ecr,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go/service/ecr/ecriface,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/service/kms,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/service/kms/kmsiface,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go/service/s3,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go/service/s3/s3iface,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go/service/s3/s3manager,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/aws-sdk-go/service/s3/s3manager/s3manageriface,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/service/secretsmanager,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/service/sso,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/service/sso/ssoiface,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/service/sts,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." core,github.com/aws/aws-sdk-go/service/sts/stsiface,Apache-2.0,"Copyright 2014-2015 Stripe, Inc. | Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved." +core,github.com/aws/smithy-go,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" +core,github.com/aws/smithy-go/auth/bearer,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" +core,github.com/aws/smithy-go/context,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" +core,github.com/aws/smithy-go/document,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" +core,github.com/aws/smithy-go/encoding,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" +core,github.com/aws/smithy-go/encoding/httpbinding,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" +core,github.com/aws/smithy-go/encoding/json,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" +core,github.com/aws/smithy-go/encoding/xml,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" +core,github.com/aws/smithy-go/internal/sync/singleflight,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" +core,github.com/aws/smithy-go/io,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" +core,github.com/aws/smithy-go/logging,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" +core,github.com/aws/smithy-go/middleware,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" +core,github.com/aws/smithy-go/ptr,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" +core,github.com/aws/smithy-go/rand,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" +core,github.com/aws/smithy-go/time,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" +core,github.com/aws/smithy-go/transport/http,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" +core,github.com/aws/smithy-go/transport/http/internal/io,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" +core,github.com/aws/smithy-go/waiter,Apache-2.0,"Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved" core,github.com/beevik/ntp,BSD-2-Clause,Anton Tolchanov (knyar) | Ask Bjørn Hansen (abh) | Brett Vickers (beevik) | Christopher Batey (chbatey) | Copyright 2015-2017 Brett Vickers. All rights reserved | Leonid Evdokimov (darkk) | Meng Zhuo (mengzhuo) | Mikhail Salosin (AlphaB) core,github.com/benbjohnson/clock,MIT,Copyright (c) 2014 Ben Johnson -core,github.com/benesch/cgosymbolizer,BSD-3-Clause,Copyright 2018 Cockroach Labs. All rights reserved core,github.com/beorn7/perks/quantile,MIT,Copyright (C) 2013 Blake Mizerany +core,github.com/bgentry/go-netrc/netrc,MIT,Copyright © 2010 Fazlul Shahriar . Newer | Copyright © 2014 Blake Gentry core,github.com/bhmj/jsonslice,MIT,Copyright (c) 2018 bhmj core,github.com/blabber/go-freebsd-sysctl/sysctl,0BSD,Copyright (c) 2014-2020 by Tobias Rehbein core,github.com/blang/semver,MIT,Copyright (c) 2014 Benedikt Lang core,github.com/bmizerany/pat,MIT,"Copyright (C) 2012 by Keith Rarick, Blake Mizerany" +core,github.com/briandowns/spinner,Apache-2.0,Copyright (c) 2022 Brian J. Downs +core,github.com/caarlos0/env/v6,MIT,Copyright (c) 2015-2022 Carlos Alexandro Becker core,github.com/cavaliergopher/grab/v3,BSD-3-Clause,Copyright (c) 2017 Ryan Armstrong. All rights reserved core,github.com/cavaliergopher/grab/v3/pkg/bps,BSD-3-Clause,Copyright (c) 2017 Ryan Armstrong. All rights reserved core,github.com/cenkalti/backoff,MIT,Copyright (c) 2014 Cenk Altı core,github.com/cenkalti/backoff/v4,MIT,Copyright (c) 2014 Cenk Altı core,github.com/cespare/xxhash/v2,MIT,Copyright (c) 2016 Caleb Spare +core,github.com/cheggaaa/pb/v3,BSD-3-Clause,"Copyright (c) 2012-2015, Sergey Cherepanov" +core,github.com/cheggaaa/pb/v3/termutil,BSD-3-Clause,"Copyright (c) 2012-2015, Sergey Cherepanov" core,github.com/cihub/seelog,BSD-3-Clause,"Copyright (c) 2012, Cloud Instruments Co., Ltd. " core,github.com/cilium/ebpf,MIT,"Copyright (c) 2017 Nathan Sweet | Copyright (c) 2018, 2019 Cloudflare | Copyright (c) 2019 Authors of Cilium" core,github.com/cilium/ebpf/asm,MIT,"Copyright (c) 2017 Nathan Sweet | Copyright (c) 2018, 2019 Cloudflare | Copyright (c) 2019 Authors of Cilium" @@ -289,6 +607,8 @@ core,github.com/containerd/containerd/version,Apache-2.0,"Copyright 2012-2015 Do core,github.com/containerd/continuity/fs,Apache-2.0,"Copyright 2012-2015 Docker, Inc." core,github.com/containerd/continuity/sysx,Apache-2.0,"Copyright 2012-2015 Docker, Inc." core,github.com/containerd/fifo,Apache-2.0,"Copyright 2012-2015 Docker, Inc." +core,github.com/containerd/stargz-snapshotter/estargz,Apache-2.0,"Copyright 2012-2015 Docker, Inc." +core,github.com/containerd/stargz-snapshotter/estargz/errorutil,Apache-2.0,"Copyright 2012-2015 Docker, Inc." core,github.com/containerd/ttrpc,Apache-2.0,"Copyright 2012-2015 Docker, Inc." core,github.com/containerd/typeurl,Apache-2.0,"Copyright 2012-2015 Docker, Inc." core,github.com/containernetworking/cni/libcni,Apache-2.0,Copyright 2019 CNI authors @@ -312,13 +632,18 @@ core,github.com/coreos/pkg/dlopen,Apache-2.0,"Copyright 2017 CoreOS, Inc" core,github.com/cri-o/ocicni/pkg/ocicni,Apache-2.0,"Copyright 2016 Red Hat, Inc" core,github.com/cyphar/filepath-securejoin,BSD-3-Clause,Copyright (C) 2014-2015 Docker Inc & Go Authors. All rights reserved | Copyright (C) 2017 SUSE LLC. All rights reserved core,github.com/davecgh/go-spew/spew,ISC,Copyright (c) 2012-2016 Dave Collins -core,github.com/dgraph-io/ristretto,Apache-2.0,"Copyright (c) 2014 Andreas Briese, eduToolbox@Bri-C GmbH, Sarstedt | Copyright (c) 2019 Ewan Chou | Copyright 2019 Dgraph Labs, Inc. and Contributors | Copyright 2020 Dgraph Labs, Inc. and Contributors | Copyright 2020 The LevelDB-Go and Pebble Authors. All rights reserved." -core,github.com/dgraph-io/ristretto/z,MIT,"Copyright (c) 2014 Andreas Briese, eduToolbox@Bri-C GmbH, Sarstedt | Copyright (c) 2019 Ewan Chou | Copyright 2019 Dgraph Labs, Inc. and Contributors | Copyright 2020 Dgraph Labs, Inc. and Contributors | Copyright 2020 The LevelDB-Go and Pebble Authors. All rights reserved." -core,github.com/dgraph-io/ristretto/z/simd,MIT,"Copyright (c) 2014 Andreas Briese, eduToolbox@Bri-C GmbH, Sarstedt | Copyright (c) 2019 Ewan Chou | Copyright 2019 Dgraph Labs, Inc. and Contributors | Copyright 2020 Dgraph Labs, Inc. and Contributors | Copyright 2020 The LevelDB-Go and Pebble Authors. All rights reserved." core,github.com/dgryski/go-jump,MIT,Copyright (c) 2014 Damian Gryski core,github.com/dgryski/go-rendezvous,MIT,Copyright (c) 2017-2020 Damian Gryski +core,github.com/dimchansky/utfbom,Apache-2.0,"Copyright (c) 2018-2020, Dmitrij Koniajev (dimchansky@gmail.com)" +core,github.com/docker/cli/cli/config,Apache-2.0,"Copyright 2012-2017 Docker, Inc." +core,github.com/docker/cli/cli/config/configfile,Apache-2.0,"Copyright 2012-2017 Docker, Inc." +core,github.com/docker/cli/cli/config/credentials,Apache-2.0,"Copyright 2012-2017 Docker, Inc." +core,github.com/docker/cli/cli/config/types,Apache-2.0,"Copyright 2012-2017 Docker, Inc." core,github.com/docker/distribution/digestset,Apache-2.0,"Copyright 2012-2017 Docker, Inc." core,github.com/docker/distribution/reference,Apache-2.0,"Copyright 2012-2017 Docker, Inc." +core,github.com/docker/distribution/registry/client/auth/challenge,Apache-2.0,"Copyright 2012-2017 Docker, Inc." +core,github.com/docker/docker-credential-helpers/client,MIT,"Copyright 2012-2017 Docker, Inc." +core,github.com/docker/docker-credential-helpers/credentials,MIT,"Copyright 2012-2017 Docker, Inc." core,github.com/docker/docker/api,Apache-2.0,"Copyright 2012-2017 Docker, Inc." core,github.com/docker/docker/api/types,Apache-2.0,"Copyright 2012-2017 Docker, Inc." core,github.com/docker/docker/api/types/blkiodev,Apache-2.0,"Copyright 2012-2017 Docker, Inc." @@ -337,6 +662,7 @@ core,github.com/docker/docker/api/types/versions,Apache-2.0,"Copyright 2012-2017 core,github.com/docker/docker/api/types/volume,Apache-2.0,"Copyright 2012-2017 Docker, Inc." core,github.com/docker/docker/client,Apache-2.0,"Copyright 2012-2017 Docker, Inc." core,github.com/docker/docker/errdefs,Apache-2.0,"Copyright 2012-2017 Docker, Inc." +core,github.com/docker/docker/pkg/homedir,Apache-2.0,"Copyright 2012-2017 Docker, Inc." core,github.com/docker/go-connections/nat,Apache-2.0,"Copyright 2012-2017 Docker, Inc." core,github.com/docker/go-connections/sockets,Apache-2.0,"Copyright 2012-2017 Docker, Inc." core,github.com/docker/go-connections/tlsconfig,Apache-2.0,"Copyright 2012-2017 Docker, Inc." @@ -356,6 +682,12 @@ core,github.com/elastic/go-libaudit/rule/flags,Apache-2.0,Copyright 2017-2018 El core,github.com/emicklei/go-restful,MIT,"Copyright (c) 2012,2013 Ernest Micklei" core,github.com/emicklei/go-restful-swagger12,MIT,Copyright (c) 2017 Ernest Micklei core,github.com/emicklei/go-restful/log,MIT,"Copyright (c) 2012,2013 Ernest Micklei" +core,github.com/emirpasic/gods/containers,BSD-2-Clause,"Copyright (c) 2015, Emir Pasic | Copyright (c) 2017 Benjamin Scher Purcell " +core,github.com/emirpasic/gods/lists,BSD-2-Clause,"Copyright (c) 2015, Emir Pasic | Copyright (c) 2017 Benjamin Scher Purcell " +core,github.com/emirpasic/gods/lists/arraylist,BSD-2-Clause,"Copyright (c) 2015, Emir Pasic | Copyright (c) 2017 Benjamin Scher Purcell " +core,github.com/emirpasic/gods/trees,BSD-2-Clause,"Copyright (c) 2015, Emir Pasic | Copyright (c) 2017 Benjamin Scher Purcell " +core,github.com/emirpasic/gods/trees/binaryheap,BSD-2-Clause,"Copyright (c) 2015, Emir Pasic | Copyright (c) 2017 Benjamin Scher Purcell " +core,github.com/emirpasic/gods/utils,BSD-2-Clause,"Copyright (c) 2015, Emir Pasic | Copyright (c) 2017 Benjamin Scher Purcell " core,github.com/evanphx/json-patch,BSD-3-Clause,"Copyright (c) 2014, Evan Phoenix" core,github.com/fatih/color,MIT,Copyright (c) 2013 Fatih Arslan core,github.com/felixge/httpsnoop,MIT,Copyright (c) 2016 Felix Geisendörfer (felix@debuggable.com) @@ -368,6 +700,58 @@ core,github.com/go-delve/delve/pkg/dwarf/op,MIT,Copyright (c) 2014 Derek Parker core,github.com/go-delve/delve/pkg/dwarf/util,MIT,Copyright (c) 2014 Derek Parker core,github.com/go-delve/delve/pkg/goversion,MIT,Copyright (c) 2014 Derek Parker core,github.com/go-delve/delve/pkg/logflags,MIT,Copyright (c) 2014 Derek Parker +core,github.com/go-git/gcfg,BSD-3-Clause,Copyright (c) 2012 Péter Surányi. Portions Copyright (c) 2009 The Go +core,github.com/go-git/gcfg/scanner,BSD-3-Clause,Copyright (c) 2012 Péter Surányi. Portions Copyright (c) 2009 The Go +core,github.com/go-git/gcfg/token,BSD-3-Clause,Copyright (c) 2012 Péter Surányi. Portions Copyright (c) 2009 The Go +core,github.com/go-git/gcfg/types,BSD-3-Clause,Copyright (c) 2012 Péter Surányi. Portions Copyright (c) 2009 The Go +core,github.com/go-git/go-billy/v5,Apache-2.0,Copyright 2017 Sourced Technologies S.L +core,github.com/go-git/go-billy/v5/helper/chroot,Apache-2.0,Copyright 2017 Sourced Technologies S.L +core,github.com/go-git/go-billy/v5/helper/polyfill,Apache-2.0,Copyright 2017 Sourced Technologies S.L +core,github.com/go-git/go-billy/v5/memfs,Apache-2.0,Copyright 2017 Sourced Technologies S.L +core,github.com/go-git/go-billy/v5/osfs,Apache-2.0,Copyright 2017 Sourced Technologies S.L +core,github.com/go-git/go-billy/v5/util,Apache-2.0,Copyright 2017 Sourced Technologies S.L +core,github.com/go-git/go-git/v5,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/config,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/internal/revision,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/internal/url,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/cache,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/color,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/filemode,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/format/config,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/format/diff,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/format/gitignore,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/format/idxfile,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/format/index,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/format/objfile,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/format/packfile,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/format/pktline,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/object,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/protocol/packp,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/protocol/packp/capability,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/revlist,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/storer,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/transport,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/transport/client,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/transport/file,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/transport/git,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/transport/http,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/transport/internal/common,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/transport/server,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/plumbing/transport/ssh,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/storage,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/storage/filesystem,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/storage/filesystem/dotgit,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/storage/memory,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/utils/binary,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/utils/diff,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/utils/ioutil,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/utils/merkletrie,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/utils/merkletrie/filesystem,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/utils/merkletrie/index,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/utils/merkletrie/internal/frame,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" +core,github.com/go-git/go-git/v5/utils/merkletrie/noder,Apache-2.0,"Copyright 2018 Sourced Technologies, S.L" core,github.com/go-ini/ini,Apache-2.0,Copyright 2014 Unknwon core,github.com/go-kit/log,MIT,Copyright (c) 2021 Go kit core,github.com/go-kit/log/level,MIT,Copyright (c) 2021 Go kit @@ -377,10 +761,39 @@ core,github.com/go-logr/logr/funcr,Apache-2.0,Copyright 2019 The logr Authors. | core,github.com/go-logr/stdr,Apache-2.0,Copyright 2019 The logr Authors. core,github.com/go-ole/go-ole,MIT,"Copyright © 2013-2017 Yasuhiro Matsumoto, " core,github.com/go-ole/go-ole/oleutil,MIT,"Copyright © 2013-2017 Yasuhiro Matsumoto, " +core,github.com/go-openapi/analysis,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-openapi/analysis/internal/debug,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-openapi/analysis/internal/flatten/normalize,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-openapi/analysis/internal/flatten/operations,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-openapi/analysis/internal/flatten/replace,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-openapi/analysis/internal/flatten/schutils,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-openapi/analysis/internal/flatten/sortref,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-openapi/errors,Apache-2.0,Copyright 2015 go-swagger maintainers core,github.com/go-openapi/jsonpointer,Apache-2.0,Copyright 2013 sigu-399 ( https://github.com/sigu-399 ) core,github.com/go-openapi/jsonreference,Apache-2.0,Copyright 2013 sigu-399 ( https://github.com/sigu-399 ) core,github.com/go-openapi/jsonreference/internal,Apache-2.0,Copyright 2013 sigu-399 ( https://github.com/sigu-399 ) +core,github.com/go-openapi/loads,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-openapi/runtime,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-openapi/runtime/client,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-openapi/runtime/logger,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-openapi/runtime/middleware,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-openapi/runtime/middleware/denco,MIT,Copyright (c) 2014 Naoya Inada | Copyright 2015 go-swagger maintainers +core,github.com/go-openapi/runtime/middleware/header,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-openapi/runtime/middleware/untyped,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-openapi/runtime/security,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-openapi/runtime/yamlpc,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-openapi/spec,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-openapi/strfmt,Apache-2.0,Copyright 2015 go-swagger maintainers core,github.com/go-openapi/swag,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-openapi/validate,Apache-2.0,Copyright 2015 go-swagger maintainers +core,github.com/go-redis/redis/v8,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v8/internal,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v8/internal/hashtag,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v8/internal/hscan,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v8/internal/pool,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v8/internal/proto,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v8/internal/rand,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors +core,github.com/go-redis/redis/v8/internal/util,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors core,github.com/go-redis/redis/v9,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors core,github.com/go-redis/redis/v9/internal,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors core,github.com/go-redis/redis/v9/internal/hashtag,BSD-2-Clause,Copyright (c) 2013 The github.com/go-redis/redis Authors @@ -406,6 +819,7 @@ core,github.com/gogo/protobuf/proto,BSD-3-Clause,"Copyright (c) 2013, The GoGo A core,github.com/gogo/protobuf/protoc-gen-gogo/descriptor,BSD-3-Clause,"Copyright (c) 2013, The GoGo Authors. All rights reserved. | Copyright 2010 The Go Authors. All rights reserved." core,github.com/gogo/protobuf/sortkeys,BSD-3-Clause,"Copyright (c) 2013, The GoGo Authors. All rights reserved. | Copyright 2010 The Go Authors. All rights reserved." core,github.com/gogo/protobuf/types,BSD-3-Clause,"Copyright (c) 2013, The GoGo Authors. All rights reserved. | Copyright 2010 The Go Authors. All rights reserved." +core,github.com/golang-jwt/jwt/v4,MIT,Copyright (c) 2012 Dave Grijalva | Copyright (c) 2021 golang-jwt maintainers core,github.com/golang/glog,Apache-2.0,Copyright (c) 2009 The Go Authors. All rights reserved. core,github.com/golang/groupcache/lru,Apache-2.0,Copyright (c) 2009 The Go Authors. All rights reserved. core,github.com/golang/mock/gomock,Apache-2.0,Copyright (c) 2009 The Go Authors. All rights reserved. @@ -429,11 +843,34 @@ core,github.com/google/go-cmp/cmp/internal/diff,BSD-3-Clause,Copyright (c) 2017 core,github.com/google/go-cmp/cmp/internal/flags,BSD-3-Clause,Copyright (c) 2017 The Go Authors. All rights reserved. core,github.com/google/go-cmp/cmp/internal/function,BSD-3-Clause,Copyright (c) 2017 The Go Authors. All rights reserved. core,github.com/google/go-cmp/cmp/internal/value,BSD-3-Clause,Copyright (c) 2017 The Go Authors. All rights reserved. +core,github.com/google/go-containerregistry/internal/and,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/internal/estargz,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/internal/gzip,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/internal/redact,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/internal/retry,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/internal/retry/wait,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/internal/verify,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/pkg/authn,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/pkg/logs,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/pkg/name,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/pkg/v1,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/pkg/v1/empty,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/pkg/v1/layout,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/pkg/v1/match,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/pkg/v1/mutate,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/pkg/v1/partial,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/pkg/v1/remote,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/pkg/v1/remote/transport,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/pkg/v1/stream,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/pkg/v1/tarball,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. +core,github.com/google/go-containerregistry/pkg/v1/types,Apache-2.0,Copyright 2018 Google LLC All Rights Reserved. | Copyright 2019 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. | Copyright 2021 Google LLC All Rights Reserved. | Copyright 2022 Google LLC All Rights Reserved. core,github.com/google/gofuzz,Apache-2.0,Copyright 2014 Google Inc. All rights reserved. core,github.com/google/gofuzz/bytesource,Apache-2.0,Copyright 2014 Google Inc. All rights reserved. core,github.com/google/gopacket,BSD-3-Clause,"Copyright (c) 2009-2011 Andreas Krennmair. All rights reserved. | Copyright (c) 2012 Google, Inc. All rights reserved." core,github.com/google/gopacket/afpacket,BSD-3-Clause,"Copyright (c) 2009-2011 Andreas Krennmair. All rights reserved. | Copyright (c) 2012 Google, Inc. All rights reserved." core,github.com/google/gopacket/layers,BSD-3-Clause,"Copyright (c) 2009-2011 Andreas Krennmair. All rights reserved. | Copyright (c) 2012 Google, Inc. All rights reserved." +core,github.com/google/licenseclassifier/v2,Apache-2.0,Copyright 2017 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. +core,github.com/google/licenseclassifier/v2/assets,Apache-2.0,Copyright 2017 Google LLC All Rights Reserved. | Copyright 2020 Google LLC All Rights Reserved. core,github.com/google/pprof/driver,Apache-2.0,Andrew Hunter | Google Inc. | Hyoun Kyu Cho | Martin Spier | Raul Silvera | Taco de Wolff | Tipp Moseley core,github.com/google/pprof/internal/binutils,Apache-2.0,Andrew Hunter | Google Inc. | Hyoun Kyu Cho | Martin Spier | Raul Silvera | Taco de Wolff | Tipp Moseley core,github.com/google/pprof/internal/driver,Apache-2.0,Andrew Hunter | Google Inc. | Hyoun Kyu Cho | Martin Spier | Raul Silvera | Taco de Wolff | Tipp Moseley @@ -450,6 +887,7 @@ core,github.com/google/pprof/third_party/d3,BSD-3-Clause,Andrew Hunter | Google Inc. | Hyoun Kyu Cho | Martin Spier | Raul Silvera | Taco de Wolff | Tipp Moseley core,github.com/google/pprof/third_party/svgpan,BSD-3-Clause,Andrew Hunter | Copyright 2009-2017 Andrea Leofreddi . All rights reserved | Google Inc. | Hyoun Kyu Cho | Martin Spier | Raul Silvera | Taco de Wolff | Tipp Moseley core,github.com/google/uuid,BSD-3-Clause,"Copyright (c) 2009,2014 Google Inc. All rights reserved | Paul Borman | bmatsuo | cd1 | dansouza | dsymonds | jboverfelt | shawnps | theory | wallclockbuilder" +core,github.com/google/wire,Apache-2.0,Chris Lewis | Christina Austin <4240737+clausti@users.noreply.github.com> | Eno Compton | Google LLC | Issac Trotts | Kumbirai Tanekha | Oleg Kovalov | Robert van Gent | Ross Light | Tuo Shan | Yoichiro Shimizu | Zachary Romero | ktr core,github.com/googleapis/enterprise-certificate-proxy/client,Apache-2.0,Copyright 2017 Google Inc. core,github.com/googleapis/enterprise-certificate-proxy/client/util,Apache-2.0,Copyright 2017 Google Inc. core,github.com/googleapis/gax-go/v2,BSD-3-Clause,Copyright 2017 Google Inc. @@ -487,10 +925,15 @@ core,github.com/h2non/filetype/types,MIT,Copyright (c) Tomas Aparicio core,github.com/hashicorp/consul/api,MPL-2.0,"Copyright © 2014-2018 HashiCorp, Inc" core,github.com/hashicorp/errwrap,MPL-2.0,"Copyright © 2014-2018 HashiCorp, Inc" core,github.com/hashicorp/go-cleanhttp,MPL-2.0,"Copyright © 2014-2018 HashiCorp, Inc" +core,github.com/hashicorp/go-getter,MPL-2.0,"Copyright © 2014-2018 HashiCorp, Inc" +core,github.com/hashicorp/go-getter/helper/url,MPL-2.0,"Copyright © 2014-2018 HashiCorp, Inc" core,github.com/hashicorp/go-hclog,MIT,"Copyright © 2014-2018 HashiCorp, Inc" core,github.com/hashicorp/go-immutable-radix,MPL-2.0,"Copyright © 2014-2018 HashiCorp, Inc" core,github.com/hashicorp/go-multierror,MPL-2.0,"Copyright © 2014-2018 HashiCorp, Inc" +core,github.com/hashicorp/go-retryablehttp,MPL-2.0,"Copyright © 2014-2018 HashiCorp, Inc" core,github.com/hashicorp/go-rootcerts,MPL-2.0,"Copyright © 2014-2018 HashiCorp, Inc" +core,github.com/hashicorp/go-safetemp,MPL-2.0,"Copyright © 2014-2018 HashiCorp, Inc" +core,github.com/hashicorp/go-version,MPL-2.0,"Copyright © 2014-2018 HashiCorp, Inc" core,github.com/hashicorp/golang-lru,MPL-2.0,"Copyright © 2014-2018 HashiCorp, Inc" core,github.com/hashicorp/golang-lru/simplelru,MPL-2.0,"Copyright © 2014-2018 HashiCorp, Inc" core,github.com/hashicorp/golang-lru/v2,MPL-2.0,"Copyright © 2014-2018 HashiCorp, Inc" @@ -513,12 +956,18 @@ core,github.com/iancoleman/orderedmap,MIT,Copyright (c) 2017 Ian Coleman core,github.com/ianlancetaylor/cgosymbolizer,BSD-3-Clause,"Copyright (C) 2012-2015 Free Software Foundation, Inc | Copyright (c) 2015 The Go Authors. All rights reserved" core,github.com/ianlancetaylor/demangle,BSD-3-Clause,Copyright (c) 2015 The Go Authors. All rights reserved core,github.com/imdario/mergo,BSD-3-Clause,Copyright (c) 2012 The Go Authors. All rights reserved | Copyright (c) 2013 Dario Castañé. All rights reserved +core,github.com/in-toto/in-toto-golang/in_toto,Apache-2.0,Copyright 2018 New York University +core,github.com/in-toto/in-toto-golang/in_toto/slsa_provenance/common,Apache-2.0,Copyright 2018 New York University +core,github.com/in-toto/in-toto-golang/in_toto/slsa_provenance/v0.1,Apache-2.0,Copyright 2018 New York University +core,github.com/in-toto/in-toto-golang/in_toto/slsa_provenance/v0.2,Apache-2.0,Copyright 2018 New York University core,github.com/inconshreveable/mousetrap,Apache-2.0,Copyright 2022 Alan Shreve (@inconshreveable) core,github.com/invopop/jsonschema,MIT,Copyright (C) 2014 Alec Thomas core,github.com/iovisor/gobpf/pkg/cpupossible,Apache-2.0,Copyright 2016 Kinvolk | Copyright 2016 PLUMgrid core,github.com/iovisor/gobpf/pkg/cpurange,Apache-2.0,Copyright 2016 Kinvolk | Copyright 2016 PLUMgrid core,github.com/itchyny/gojq,MIT,Copyright (c) 2019-2022 itchyny core,github.com/itchyny/timefmt-go,MIT,Copyright (c) 2020-2022 itchyny +core,github.com/jbenet/go-context/io,MIT,Copyright (c) 2014 Juan Batiz-Benet +core,github.com/jinzhu/inflection,MIT,Copyright (c) 2015 - Jinzhu core,github.com/jlaffaye/ftp,ISC,"Copyright (c) 2011-2013, Julien Laffaye " core,github.com/jmespath/go-jmespath,Apache-2.0,Copyright 2015 James Saryerwinnie core,github.com/josharian/intern,MIT,Copyright (c) 2019 Josh Bleecher Snyder @@ -526,6 +975,8 @@ core,github.com/josharian/native,MIT,Copyright 2020 Josh Bleecher Snyder core,github.com/json-iterator/go,MIT,Copyright (c) 2016 json-iterator core,github.com/kardianos/osext,BSD-3-Clause,Copyright (c) 2012 The Go Authors. All rights reserved core,github.com/karrick/godirwalk,BSD-2-Clause,"Copyright (c) 2017, Karrick McDermott" +core,github.com/kballard/go-shellquote,MIT,Copyright (C) 2014 Kevin Ballard +core,github.com/kevinburke/ssh_config,MIT,"Copyright (c) 2013 - 2017 Thomas Pelletier, Eric Anderton | Copyright (c) 2017 Kevin Burke" core,github.com/kjk/lzma,BSD-3-Clause,"Copyright (c) 2010, Andrei Vieru. All rights reserved" core,github.com/klauspost/compress,BSD-3-Clause,Copyright (c) 2011 The Snappy-Go Authors. All rights reserved | Copyright (c) 2012 The Go Authors. All rights reserved | Copyright (c) 2015 Klaus Post | Copyright (c) 2019 Klaus Post. All rights reserved | Copyright 2016 The filepathx Authors | Copyright 2016-2017 The New York Times Company core,github.com/klauspost/compress/flate,BSD-3-Clause,Copyright (c) 2011 The Snappy-Go Authors. All rights reserved | Copyright (c) 2012 The Go Authors. All rights reserved | Copyright (c) 2015 Klaus Post | Copyright (c) 2019 Klaus Post. All rights reserved | Copyright 2016 The filepathx Authors | Copyright 2016-2017 The New York Times Company @@ -541,8 +992,19 @@ core,github.com/klauspost/pgzip,MIT,Copyright (c) 2014 Klaus Post core,github.com/knadh/koanf,MIT,"Copyright (c) 2019, Kailash Nadh. https://github.com/knadh" core,github.com/knadh/koanf/maps,MIT,"Copyright (c) 2019, Kailash Nadh. https://github.com/knadh" core,github.com/knadh/koanf/providers/confmap,MIT,"Copyright (c) 2019, Kailash Nadh. https://github.com/knadh" +core,github.com/knqyf263/go-apk-version,Apache-2.0,Copyright (c) 2020 Teppei Fukuda (knqyf263) +core,github.com/knqyf263/go-deb-version,MIT,Copyright (c) 2017 Teppei Fukuda +core,github.com/knqyf263/go-rpm-version,MIT,Copyright (c) 2017 Teppei Fukuda +core,github.com/knqyf263/go-rpmdb/pkg,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/knqyf263/go-rpmdb/pkg/bdb,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/knqyf263/go-rpmdb/pkg/db,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/knqyf263/go-rpmdb/pkg/ndb,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/knqyf263/go-rpmdb/pkg/sqlite3,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/knqyf263/nested,MIT,Copyright (c) 2019 Teppei Fukuda +core,github.com/liamg/jfather,MIT,Copyright (c) 2022 Liam Galvin core,github.com/libp2p/go-reuseport,ISC,Copyright (c) 2013 Conformal Systems LLC core,github.com/lufia/plan9stats,BSD-3-Clause,"Copyright (c) 2019, KADOTA, Kyohei" +core,github.com/lunixbochs/struc,MIT,Copyright (c) 2015 Ryan Hileman core,github.com/lxn/walk,BSD-3-Clause,Copyright (c) 2010 The Walk Authors. All rights reserved. core,github.com/lxn/win,BSD-3-Clause,Copyright (c) 2010 The win Authors. All rights reserved. core,github.com/magiconair/properties,BSD-2-Clause,"Copyright (c) 2013-2020, Frank Schroeder" @@ -554,6 +1016,17 @@ core,github.com/mailru/easyjson/gen,MIT,Copyright (c) 2016 Mail.Ru Group core,github.com/mailru/easyjson/jlexer,MIT,Copyright (c) 2016 Mail.Ru Group core,github.com/mailru/easyjson/jwriter,MIT,Copyright (c) 2016 Mail.Ru Group core,github.com/mailru/easyjson/parser,MIT,Copyright (c) 2016 Mail.Ru Group +core,github.com/masahiro331/go-disk,MIT,Copyright (c) 2022 Masahiro331 +core,github.com/masahiro331/go-disk/gpt,MIT,Copyright (c) 2022 Masahiro331 +core,github.com/masahiro331/go-disk/mbr,MIT,Copyright (c) 2022 Masahiro331 +core,github.com/masahiro331/go-disk/types,MIT,Copyright (c) 2022 Masahiro331 +core,github.com/masahiro331/go-ebs-file,MIT,Copyright (c) 2022 Masahiro331 +core,github.com/masahiro331/go-ext4-filesystem/ext4,Apache-2.0,Copyright (c) 2021 masahiro331 +core,github.com/masahiro331/go-mvn-version,Apache-2.0,Copyright (c) 2020 masahiro331 +core,github.com/masahiro331/go-vmdk-parser/pkg/virtualization/vmdk,Apache-2.0,Copyright (c) 2020 masahiro331 +core,github.com/masahiro331/go-xfs-filesystem/log,Apache-2.0,Copyright (c) 2021 masahiro331 +core,github.com/masahiro331/go-xfs-filesystem/xfs,Apache-2.0,Copyright (c) 2021 masahiro331 +core,github.com/masahiro331/go-xfs-filesystem/xfs/utils,Apache-2.0,Copyright (c) 2021 masahiro331 core,github.com/mattn/go-colorable,MIT,Copyright (c) 2016 Yasuhiro Matsumoto core,github.com/mattn/go-isatty,MIT,Copyright (c) Yasuhiro MATSUMOTO core,github.com/mattn/go-runewidth,MIT,Copyright (c) 2016 Yasuhiro Matsumoto @@ -562,17 +1035,27 @@ core,github.com/mdlayher/netlink,MIT,Copyright (C) 2016-2022 Matt Layher core,github.com/mdlayher/netlink/nlenc,MIT,Copyright (C) 2016-2022 Matt Layher core,github.com/mdlayher/socket,MIT,Copyright (C) 2021 Matt Layher core,github.com/mholt/archiver/v3,MIT,Copyright (c) 2016 Matthew Holt +core,github.com/microsoft/go-rustaudit,MIT,Copyright (c) Microsoft Corporation core,github.com/mitchellh/copystructure,MIT,Copyright (c) 2014 Mitchell Hashimoto core,github.com/mitchellh/go-homedir,MIT,Copyright (c) 2013 Mitchell Hashimoto +core,github.com/mitchellh/go-testing-interface,MIT,Copyright (c) 2016 Mitchell Hashimoto +core,github.com/mitchellh/hashstructure/v2,MIT,Copyright (c) 2016 Mitchell Hashimoto core,github.com/mitchellh/mapstructure,MIT,Copyright (c) 2013 Mitchell Hashimoto core,github.com/mitchellh/reflectwalk,MIT,Copyright (c) 2013 Mitchell Hashimoto core,github.com/mkrautz/goar,BSD-3-Clause,Copyright (c) 2011 Mikkel Krautz +core,github.com/moby/buildkit/frontend/dockerfile/command,Apache-2.0,Aaron L. Xu | Aaron Lehmann | Akihiro Suda | Alexander Morozov | Alice Frosi | Allen Sun | Anda Xu | Anthony Sottile | Arnaud Bailly | Bin Liu | Brian Goff | Daniel Nephin | Dave Chen | David Calavera | Dennis Chen | Derek McGowan | Doug Davis | Edgar Lee | Eli Uriegas | Fernando Miguel | Hao Hu | Helen Xie | Himanshu Pandey | Hiromu Nakamura | Ian Campbell | Iskander (Alex) Sharipov | Jean-Pierre Huynh | Jessica Frazelle | John Howard | Jonathan Stoppani | Justas Brazauskas | Justin Cormack | Kunal Kushwaha | Lajos Papp | Matt Rickard | Michael Crosby | Miyachi Katsuya | Nao YONASHIRO | Natasha Jarus | Noel Georgi <18496730+frezbo@users.noreply.github.com> | Ondrej Fabry | Patrick Van Stee | Ri Xu | Sebastiaan van Stijn | Shev Yan | Simon Ferquel | Stefan Weil | Thomas Leonard | Thomas Shaw | Tibor Vass | Tiffany Jernigan | Tino Rusch | Tobias Klauser | Tomas Tomecek | Tomohiro Kusumoto | Tõnis Tiigi | Vincent Demeester | Wei Fu | Yong Tang | Yuichiro Kaneko | Ziv Tsarfati | f0 | 郑泽宇 +core,github.com/moby/buildkit/frontend/dockerfile/instructions,Apache-2.0,Aaron L. Xu | Aaron Lehmann | Akihiro Suda | Alexander Morozov | Alice Frosi | Allen Sun | Anda Xu | Anthony Sottile | Arnaud Bailly | Bin Liu | Brian Goff | Daniel Nephin | Dave Chen | David Calavera | Dennis Chen | Derek McGowan | Doug Davis | Edgar Lee | Eli Uriegas | Fernando Miguel | Hao Hu | Helen Xie | Himanshu Pandey | Hiromu Nakamura | Ian Campbell | Iskander (Alex) Sharipov | Jean-Pierre Huynh | Jessica Frazelle | John Howard | Jonathan Stoppani | Justas Brazauskas | Justin Cormack | Kunal Kushwaha | Lajos Papp | Matt Rickard | Michael Crosby | Miyachi Katsuya | Nao YONASHIRO | Natasha Jarus | Noel Georgi <18496730+frezbo@users.noreply.github.com> | Ondrej Fabry | Patrick Van Stee | Ri Xu | Sebastiaan van Stijn | Shev Yan | Simon Ferquel | Stefan Weil | Thomas Leonard | Thomas Shaw | Tibor Vass | Tiffany Jernigan | Tino Rusch | Tobias Klauser | Tomas Tomecek | Tomohiro Kusumoto | Tõnis Tiigi | Vincent Demeester | Wei Fu | Yong Tang | Yuichiro Kaneko | Ziv Tsarfati | f0 | 郑泽宇 +core,github.com/moby/buildkit/frontend/dockerfile/parser,Apache-2.0,Aaron L. Xu | Aaron Lehmann | Akihiro Suda | Alexander Morozov | Alice Frosi | Allen Sun | Anda Xu | Anthony Sottile | Arnaud Bailly | Bin Liu | Brian Goff | Daniel Nephin | Dave Chen | David Calavera | Dennis Chen | Derek McGowan | Doug Davis | Edgar Lee | Eli Uriegas | Fernando Miguel | Hao Hu | Helen Xie | Himanshu Pandey | Hiromu Nakamura | Ian Campbell | Iskander (Alex) Sharipov | Jean-Pierre Huynh | Jessica Frazelle | John Howard | Jonathan Stoppani | Justas Brazauskas | Justin Cormack | Kunal Kushwaha | Lajos Papp | Matt Rickard | Michael Crosby | Miyachi Katsuya | Nao YONASHIRO | Natasha Jarus | Noel Georgi <18496730+frezbo@users.noreply.github.com> | Ondrej Fabry | Patrick Van Stee | Ri Xu | Sebastiaan van Stijn | Shev Yan | Simon Ferquel | Stefan Weil | Thomas Leonard | Thomas Shaw | Tibor Vass | Tiffany Jernigan | Tino Rusch | Tobias Klauser | Tomas Tomecek | Tomohiro Kusumoto | Tõnis Tiigi | Vincent Demeester | Wei Fu | Yong Tang | Yuichiro Kaneko | Ziv Tsarfati | f0 | 郑泽宇 +core,github.com/moby/buildkit/frontend/dockerfile/shell,Apache-2.0,Aaron L. Xu | Aaron Lehmann | Akihiro Suda | Alexander Morozov | Alice Frosi | Allen Sun | Anda Xu | Anthony Sottile | Arnaud Bailly | Bin Liu | Brian Goff | Daniel Nephin | Dave Chen | David Calavera | Dennis Chen | Derek McGowan | Doug Davis | Edgar Lee | Eli Uriegas | Fernando Miguel | Hao Hu | Helen Xie | Himanshu Pandey | Hiromu Nakamura | Ian Campbell | Iskander (Alex) Sharipov | Jean-Pierre Huynh | Jessica Frazelle | John Howard | Jonathan Stoppani | Justas Brazauskas | Justin Cormack | Kunal Kushwaha | Lajos Papp | Matt Rickard | Michael Crosby | Miyachi Katsuya | Nao YONASHIRO | Natasha Jarus | Noel Georgi <18496730+frezbo@users.noreply.github.com> | Ondrej Fabry | Patrick Van Stee | Ri Xu | Sebastiaan van Stijn | Shev Yan | Simon Ferquel | Stefan Weil | Thomas Leonard | Thomas Shaw | Tibor Vass | Tiffany Jernigan | Tino Rusch | Tobias Klauser | Tomas Tomecek | Tomohiro Kusumoto | Tõnis Tiigi | Vincent Demeester | Wei Fu | Yong Tang | Yuichiro Kaneko | Ziv Tsarfati | f0 | 郑泽宇 +core,github.com/moby/buildkit/util/stack,Apache-2.0,Aaron L. Xu | Aaron Lehmann | Akihiro Suda | Alexander Morozov | Alice Frosi | Allen Sun | Anda Xu | Anthony Sottile | Arnaud Bailly | Bin Liu | Brian Goff | Daniel Nephin | Dave Chen | David Calavera | Dennis Chen | Derek McGowan | Doug Davis | Edgar Lee | Eli Uriegas | Fernando Miguel | Hao Hu | Helen Xie | Himanshu Pandey | Hiromu Nakamura | Ian Campbell | Iskander (Alex) Sharipov | Jean-Pierre Huynh | Jessica Frazelle | John Howard | Jonathan Stoppani | Justas Brazauskas | Justin Cormack | Kunal Kushwaha | Lajos Papp | Matt Rickard | Michael Crosby | Miyachi Katsuya | Nao YONASHIRO | Natasha Jarus | Noel Georgi <18496730+frezbo@users.noreply.github.com> | Ondrej Fabry | Patrick Van Stee | Ri Xu | Sebastiaan van Stijn | Shev Yan | Simon Ferquel | Stefan Weil | Thomas Leonard | Thomas Shaw | Tibor Vass | Tiffany Jernigan | Tino Rusch | Tobias Klauser | Tomas Tomecek | Tomohiro Kusumoto | Tõnis Tiigi | Vincent Demeester | Wei Fu | Yong Tang | Yuichiro Kaneko | Ziv Tsarfati | f0 | 郑泽宇 +core,github.com/moby/buildkit/util/suggest,Apache-2.0,Aaron L. Xu | Aaron Lehmann | Akihiro Suda | Alexander Morozov | Alice Frosi | Allen Sun | Anda Xu | Anthony Sottile | Arnaud Bailly | Bin Liu | Brian Goff | Daniel Nephin | Dave Chen | David Calavera | Dennis Chen | Derek McGowan | Doug Davis | Edgar Lee | Eli Uriegas | Fernando Miguel | Hao Hu | Helen Xie | Himanshu Pandey | Hiromu Nakamura | Ian Campbell | Iskander (Alex) Sharipov | Jean-Pierre Huynh | Jessica Frazelle | John Howard | Jonathan Stoppani | Justas Brazauskas | Justin Cormack | Kunal Kushwaha | Lajos Papp | Matt Rickard | Michael Crosby | Miyachi Katsuya | Nao YONASHIRO | Natasha Jarus | Noel Georgi <18496730+frezbo@users.noreply.github.com> | Ondrej Fabry | Patrick Van Stee | Ri Xu | Sebastiaan van Stijn | Shev Yan | Simon Ferquel | Stefan Weil | Thomas Leonard | Thomas Shaw | Tibor Vass | Tiffany Jernigan | Tino Rusch | Tobias Klauser | Tomas Tomecek | Tomohiro Kusumoto | Tõnis Tiigi | Vincent Demeester | Wei Fu | Yong Tang | Yuichiro Kaneko | Ziv Tsarfati | f0 | 郑泽宇 core,github.com/moby/locker,Apache-2.0,"Copyright 2013-2018 Docker, Inc" core,github.com/moby/sys/mountinfo,Apache-2.0,Copyright (c) 2014-2018 The Docker & Go Authors. All rights reserved. core,github.com/moby/sys/signal,Apache-2.0,Copyright (c) 2014-2018 The Docker & Go Authors. All rights reserved. core,github.com/modern-go/concurrent,Apache-2.0,Copyright (c) 2018 Tao Wen core,github.com/modern-go/reflect2,Apache-2.0,Copyright (c) 2018 Tao Wen core,github.com/mohae/deepcopy,MIT,Copyright (c) 2014 Joel +core,github.com/montanaflynn/stats,MIT,Copyright (c) 2014-2015 Montana Flynn (https://anonfunction.com) | Copyright (c) 2014-2015 Montana Flynn core,github.com/mostynb/go-grpc-compression/snappy,Apache-2.0,Copyright 2017 gRPC authors. core,github.com/mostynb/go-grpc-compression/zstd,Apache-2.0,Copyright 2020 Mostyn Bramley-Moore. | Copyright 2020 Mostyn Bramley-Moore. core,github.com/munnerz/goautoneg,BSD-3-Clause,"Copyright (c) 2011, Open Knowledge Foundation Ltd" @@ -588,6 +1071,7 @@ core,github.com/netsampler/goflow2/producer,BSD-3-Clause,"Copyright (c) 2021, Ne core,github.com/netsampler/goflow2/transport,BSD-3-Clause,"Copyright (c) 2021, NetSampler" core,github.com/netsampler/goflow2/utils,BSD-3-Clause,"Copyright (c) 2021, NetSampler" core,github.com/nwaples/rardecode,BSD-2-Clause,"Copyright (c) 2015, Nicholas Waples" +core,github.com/oklog/ulid,Apache-2.0,- Peter Bourgon (@peterbourgon) | - Tomás Senart (@tsenart) core,github.com/olekukonko/tablewriter,MIT,Copyright (C) 2014 by Oleku Konko core,github.com/oliveagle/jsonpath,MIT,Copyright (c) 2015 oliver core,github.com/open-policy-agent/opa/ast,Apache-2.0,Copyright 2016 The OPA Authors. All rights reserved. @@ -624,6 +1108,9 @@ core,github.com/open-policy-agent/opa/internal/lcss,Apache-2.0,Copyright 2016 Th core,github.com/open-policy-agent/opa/internal/leb128,Apache-2.0,Copyright 2016 The OPA Authors. All rights reserved. core,github.com/open-policy-agent/opa/internal/merge,Apache-2.0,Copyright 2016 The OPA Authors. All rights reserved. core,github.com/open-policy-agent/opa/internal/planner,Apache-2.0,Copyright 2016 The OPA Authors. All rights reserved. +core,github.com/open-policy-agent/opa/internal/providers/aws,Apache-2.0,Copyright 2016 The OPA Authors. All rights reserved. +core,github.com/open-policy-agent/opa/internal/providers/aws/crypto,Apache-2.0,Copyright 2016 The OPA Authors. All rights reserved. +core,github.com/open-policy-agent/opa/internal/providers/aws/v4,Apache-2.0,Copyright 2016 The OPA Authors. All rights reserved. core,github.com/open-policy-agent/opa/internal/ref,Apache-2.0,Copyright 2016 The OPA Authors. All rights reserved. core,github.com/open-policy-agent/opa/internal/rego/opa,Apache-2.0,Copyright 2016 The OPA Authors. All rights reserved. core,github.com/open-policy-agent/opa/internal/semver,Apache-2.0,Copyright 2016 The OPA Authors. All rights reserved. @@ -671,10 +1158,22 @@ core,github.com/opencontainers/selinux/go-selinux/label,Apache-2.0,Copyright (c) core,github.com/opencontainers/selinux/pkg/pwalk,Apache-2.0,Copyright (c) 2017 The Authors core,github.com/opencontainers/selinux/pkg/pwalkdir,Apache-2.0,Copyright (c) 2017 The Authors core,github.com/openshift/api/quota/v1,Apache-2.0,"Copyright 2020 Red Hat, Inc." +core,github.com/opentracing/opentracing-go,Apache-2.0,Copyright 2016 The OpenTracing Authors +core,github.com/opentracing/opentracing-go/ext,Apache-2.0,Copyright 2016 The OpenTracing Authors +core,github.com/opentracing/opentracing-go/log,Apache-2.0,Copyright 2016 The OpenTracing Authors +core,github.com/outcaste-io/ristretto,Apache-2.0,"Copyright (c) 2014 Andreas Briese, eduToolbox@Bri-C GmbH, Sarstedt | Copyright (c) 2019 Ewan Chou | Copyright 2019 Dgraph Labs, Inc. and Contributors | Copyright 2020 Dgraph Labs, Inc. and Contributors | Copyright 2020 The LevelDB-Go and Pebble Authors. All rights reserved. | Copyright 2021 Dgraph Labs, Inc. and Contributors" +core,github.com/outcaste-io/ristretto/z,MIT,"Copyright (c) 2014 Andreas Briese, eduToolbox@Bri-C GmbH, Sarstedt | Copyright (c) 2019 Ewan Chou | Copyright 2019 Dgraph Labs, Inc. and Contributors | Copyright 2020 Dgraph Labs, Inc. and Contributors | Copyright 2020 The LevelDB-Go and Pebble Authors. All rights reserved. | Copyright 2021 Dgraph Labs, Inc. and Contributors" +core,github.com/outcaste-io/ristretto/z/simd,MIT,"Copyright (c) 2014 Andreas Briese, eduToolbox@Bri-C GmbH, Sarstedt | Copyright (c) 2019 Ewan Chou | Copyright 2019 Dgraph Labs, Inc. and Contributors | Copyright 2020 Dgraph Labs, Inc. and Contributors | Copyright 2020 The LevelDB-Go and Pebble Authors. All rights reserved. | Copyright 2021 Dgraph Labs, Inc. and Contributors" +core,github.com/owenrumney/go-sarif/v2/sarif,Unlicense,"copyright interest in the | copyright law | copyright laws, the author or authors" +core,github.com/package-url/packageurl-go,MIT,Copyright (c) the purl authors core,github.com/pahanini/go-grpc-bidirectional-streaming-example/src/proto,MIT,Copyright (c) 2017 Pavel Tetyaev core,github.com/patrickmn/go-cache,MIT,Alex Edwards | Copyright (c) 2012-2017 Patrick Mylund Nielsen and the go-cache contributors | Dustin Sallings | Jason Mooberry | Sergey Shepelev core,github.com/pborman/uuid,BSD-3-Clause,"Copyright (c) 2009,2014 Google Inc. All rights reserved | Paul Borman " core,github.com/pelletier/go-toml,MIT,"Copyright (c) 2013 - 2021 Thomas Pelletier, Eric Anderton" +core,github.com/pelletier/go-toml/v2,MIT,"Copyright (c) 2013 - 2021 Thomas Pelletier, Eric Anderton | Copyright (c) 2013 - 2022 Thomas Pelletier, Eric Anderton" +core,github.com/pelletier/go-toml/v2/internal/ast,MIT,"Copyright (c) 2013 - 2021 Thomas Pelletier, Eric Anderton | Copyright (c) 2013 - 2022 Thomas Pelletier, Eric Anderton" +core,github.com/pelletier/go-toml/v2/internal/danger,MIT,"Copyright (c) 2013 - 2021 Thomas Pelletier, Eric Anderton | Copyright (c) 2013 - 2022 Thomas Pelletier, Eric Anderton" +core,github.com/pelletier/go-toml/v2/internal/tracker,MIT,"Copyright (c) 2013 - 2021 Thomas Pelletier, Eric Anderton | Copyright (c) 2013 - 2022 Thomas Pelletier, Eric Anderton" core,github.com/philhofer/fwd,MIT,"Copyright (c) 2014-2015, Philip Hofer" core,github.com/pierrec/lz4/v4,BSD-3-Clause,"Copyright (c) 2015, Pierre Curto" core,github.com/pierrec/lz4/v4/internal/lz4block,BSD-3-Clause,"Copyright (c) 2015, Pierre Curto" @@ -702,17 +1201,23 @@ core,github.com/prometheus/statsd_exporter/pkg/level,Apache-2.0,Copyright 2012-2 core,github.com/prometheus/statsd_exporter/pkg/mapper,Apache-2.0,Copyright 2012-2015 The Prometheus Authors core,github.com/prometheus/statsd_exporter/pkg/mapper/fsm,Apache-2.0,Copyright 2012-2015 The Prometheus Authors core,github.com/rcrowley/go-metrics,BSD-2-Clause-Views,Copyright 2012 Richard Crowley. All rights reserved +core,github.com/remyoudompheng/bigfft,BSD-3-Clause,Copyright (c) 2012 The Go Authors. All rights reserved core,github.com/richardartoul/molecule,MIT,Copyright (c) 2020 Richard Artoul core,github.com/richardartoul/molecule/src/codec,Apache-2.0,Copyright (c) 2020 Richard Artoul core,github.com/richardartoul/molecule/src/protowire,BSD-3-Clause,Copyright (c) 2018 The Go Authors. All rights reserved | Copyright (c) 2020 Richard Artoul core,github.com/rivo/uniseg,MIT,Copyright (c) 2019 Oliver Kuederle core,github.com/robfig/cron/v3,MIT,Copyright (C) 2012 Rob Figueiredo core,github.com/rs/cors,MIT,Copyright (c) 2014 Olivier Poitrey +core,github.com/samber/lo,MIT,Copyright (c) 2022 Samuel Berthe | Copyright © 2022 [Samuel Berthe](https://github.com/samber) core,github.com/samuel/go-zookeeper/zk,BSD-3-Clause,"Copyright (c) 2013, Samuel Stauffer " +core,github.com/saracen/walker,MIT,Copyright (c) 2019 Arran Walker core,github.com/sassoftware/go-rpmutils,Apache-2.0,Copyright (c) SAS Institute Inc. core,github.com/sassoftware/go-rpmutils/cpio,Apache-2.0,Copyright (c) SAS Institute Inc. core,github.com/sassoftware/go-rpmutils/fileutil,Apache-2.0,Copyright (c) SAS Institute Inc. core,github.com/secure-systems-lab/go-securesystemslib/cjson,MIT,Copyright (c) 2021 NYU Secure Systems Lab +core,github.com/secure-systems-lab/go-securesystemslib/dsse,MIT,Copyright (c) 2021 NYU Secure Systems Lab +core,github.com/sergi/go-diff/diffmatchpatch,MIT,Copyright (c) 2012-2016 The go-diff Authors. All rights reserved | Danny Yoo | James Kolb | Jonathan Amsterdam | Markus Zimmermann | Matt Kovars | Osman Masood | Robert Carlsen | Rory Flynn | Sergi Mansilla | Shatrugna Sadhu | Shawn Smith | Stas Maksimov | Tor Arvid Lund | Zac Bergquist | Örjan Persson +core,github.com/shibumi/go-pathspec,Apache-2.0,Copyright (c) 2012 The Go Authors. All rights reserved. core,github.com/shirou/gopsutil/v3/cpu,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" core,github.com/shirou/gopsutil/v3/disk,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" core,github.com/shirou/gopsutil/v3/host,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" @@ -723,10 +1228,29 @@ core,github.com/shirou/gopsutil/v3/net,BSD-3-Clause,"Copyright (c) 2009 The Go A core,github.com/shirou/gopsutil/v3/process,BSD-3-Clause,"Copyright (c) 2009 The Go Authors. All rights reserved | Copyright (c) 2014, WAKAYAMA Shirou" core,github.com/shirou/w32,BSD-3-Clause,Copyright (c) 2010-2012 The w32 Authors. All rights reserved. core,github.com/shopspring/decimal,MIT,"Copyright (c) 2013 Oguz Bilgic | Copyright (c) 2015 Spring, Inc" +core,github.com/sigstore/rekor/pkg/generated/client,Apache-2.0,Copyright 2021 The Sigstore Authors +core,github.com/sigstore/rekor/pkg/generated/client/entries,Apache-2.0,Copyright 2021 The Sigstore Authors +core,github.com/sigstore/rekor/pkg/generated/client/index,Apache-2.0,Copyright 2021 The Sigstore Authors +core,github.com/sigstore/rekor/pkg/generated/client/pubkey,Apache-2.0,Copyright 2021 The Sigstore Authors +core,github.com/sigstore/rekor/pkg/generated/client/tlog,Apache-2.0,Copyright 2021 The Sigstore Authors +core,github.com/sigstore/rekor/pkg/generated/models,Apache-2.0,Copyright 2021 The Sigstore Authors core,github.com/sirupsen/logrus,MIT,Copyright (c) 2014 Simon Eskildsen core,github.com/skydive-project/go-debouncer,Apache-2.0,"Copyright (C) 2018 Red Hat, Inc." core,github.com/smira/go-ftp-protocol/protocol,MIT,Copyright (c) 2014 Andrey Smirnov core,github.com/smira/go-xz,MIT,Copyright (c) 2015 Andrey Smirnov +core,github.com/spdx/tools-golang/jsonloader,Apache-2.0,Copyright (c) 2018 The Authors +core,github.com/spdx/tools-golang/jsonloader/parser2v2,Apache-2.0,Copyright (c) 2018 The Authors +core,github.com/spdx/tools-golang/jsonsaver,Apache-2.0,Copyright (c) 2018 The Authors +core,github.com/spdx/tools-golang/jsonsaver/saver2v2,Apache-2.0,Copyright (c) 2018 The Authors +core,github.com/spdx/tools-golang/spdx,Apache-2.0,Copyright (c) 2018 The Authors +core,github.com/spdx/tools-golang/spdxlib,Apache-2.0,Copyright (c) 2018 The Authors +core,github.com/spdx/tools-golang/tvloader,Apache-2.0,Copyright (c) 2018 The Authors +core,github.com/spdx/tools-golang/tvloader/parser2v1,Apache-2.0,Copyright (c) 2018 The Authors +core,github.com/spdx/tools-golang/tvloader/parser2v2,Apache-2.0,Copyright (c) 2018 The Authors +core,github.com/spdx/tools-golang/tvloader/reader,Apache-2.0,Copyright (c) 2018 The Authors +core,github.com/spdx/tools-golang/tvsaver,Apache-2.0,Copyright (c) 2018 The Authors +core,github.com/spdx/tools-golang/tvsaver/saver2v1,Apache-2.0,Copyright (c) 2018 The Authors +core,github.com/spdx/tools-golang/tvsaver/saver2v2,Apache-2.0,Copyright (c) 2018 The Authors core,github.com/spf13/afero,Apache-2.0,Copyright 2013 tsuru authors. All rights reserved. | Copyright © 2014 Steve Francia . core,github.com/spf13/afero/internal/common,Apache-2.0,Copyright 2013 tsuru authors. All rights reserved. | Copyright © 2014 Steve Francia . core,github.com/spf13/afero/mem,Apache-2.0,Copyright 2013 tsuru authors. All rights reserved. | Copyright © 2014 Steve Francia . @@ -734,11 +1258,21 @@ core,github.com/spf13/cast,MIT,Copyright (c) 2014 Steve Francia core,github.com/spf13/cobra,Apache-2.0,Copyright © 2013 Steve Francia . core,github.com/spf13/jwalterweatherman,MIT,Copyright (c) 2014 Steve Francia core,github.com/spf13/pflag,BSD-3-Clause,Copyright (c) 2012 Alex Ogier. All rights reserved | Copyright (c) 2012 The Go Authors. All rights reserved +core,github.com/spf13/viper,MIT,Copyright (c) 2014 Steve Francia +core,github.com/spf13/viper/internal/encoding,MIT,Copyright (c) 2014 Steve Francia +core,github.com/spf13/viper/internal/encoding/dotenv,MIT,Copyright (c) 2014 Steve Francia +core,github.com/spf13/viper/internal/encoding/hcl,MIT,Copyright (c) 2014 Steve Francia +core,github.com/spf13/viper/internal/encoding/ini,MIT,Copyright (c) 2014 Steve Francia +core,github.com/spf13/viper/internal/encoding/javaproperties,MIT,Copyright (c) 2014 Steve Francia +core,github.com/spf13/viper/internal/encoding/json,MIT,Copyright (c) 2014 Steve Francia +core,github.com/spf13/viper/internal/encoding/toml,MIT,Copyright (c) 2014 Steve Francia +core,github.com/spf13/viper/internal/encoding/yaml,MIT,Copyright (c) 2014 Steve Francia core,github.com/streadway/amqp,BSD-2-Clause,"Copyright (c) 2012-2019, Sean Treadway, SoundCloud Ltd" core,github.com/stretchr/objx,MIT,"Copyright (c) 2014 Stretchr, Inc | Copyright (c) 2017-2018 objx contributors" core,github.com/stretchr/testify/assert,MIT,"Copyright (c) 2012-2020 Mat Ryer, Tyler Bunnell and contributors" core,github.com/stretchr/testify/mock,MIT,"Copyright (c) 2012-2020 Mat Ryer, Tyler Bunnell and contributors" core,github.com/stretchr/testify/require,MIT,"Copyright (c) 2012-2020 Mat Ryer, Tyler Bunnell and contributors" +core,github.com/subosito/gotenv,MIT,Copyright (c) 2013 Alif Rachmawadi core,github.com/syndtr/gocapability/capability,BSD-2-Clause,Copyright 2013 Suryandaru Triandana core,github.com/syndtr/goleveldb/leveldb,BSD-2-Clause,Copyright 2012 Suryandaru Triandana core,github.com/syndtr/goleveldb/leveldb/cache,BSD-2-Clause,Copyright 2012 Suryandaru Triandana @@ -764,24 +1298,51 @@ core,github.com/tinylib/msgp/parse,MIT,Copyright (c) 2009 The Go Authors (licens core,github.com/tinylib/msgp/printer,MIT,Copyright (c) 2009 The Go Authors (license at http://golang.org) where indicated | Copyright (c) 2014 Philip Hofer core,github.com/tklauser/go-sysconf,BSD-3-Clause,"Copyright (c) 2018-2022, Tobias Klauser" core,github.com/tklauser/numcpus,Apache-2.0,Copyright 2018 Tobias Klauser +core,github.com/tmthrgd/go-hex,BSD-3-Clause,"Copyright (c) 2005-2016, Wojciech Muła | Copyright (c) 2012 The Go Authors. All rights reserved | Copyright (c) 2016, Tom Thorogood" +core,github.com/twitchtv/twirp,Apache-2.0,"Copyright 2018 Twitch Interactive, Inc. All Rights Reserved" +core,github.com/twitchtv/twirp/ctxsetters,Apache-2.0,"Copyright 2018 Twitch Interactive, Inc. All Rights Reserved" +core,github.com/twitchtv/twirp/internal/contextkeys,Apache-2.0,"Copyright 2018 Twitch Interactive, Inc. All Rights Reserved" core,github.com/twmb/murmur3,BSD-3-Clause,"Copyright 2013, Sébastien Paolacci | Copyright 2018, Travis Bischel" core,github.com/ugorji/go/codec,MIT,Copyright (c) 2012-2020 Ugorji Nwoke core,github.com/ulikunitz/xz,BSD-3-Clause,Copyright (c) 2014-2021 Ulrich Kunitz core,github.com/ulikunitz/xz/internal/hash,BSD-3-Clause,Copyright (c) 2014-2021 Ulrich Kunitz core,github.com/ulikunitz/xz/internal/xlog,BSD-3-Clause,Copyright (c) 2014-2021 Ulrich Kunitz core,github.com/ulikunitz/xz/lzma,BSD-3-Clause,Copyright (c) 2014-2021 Ulrich Kunitz +core,github.com/uptrace/bun,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/dialect,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/dialect/feature,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/dialect/pgdialect,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/dialect/sqltype,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/driver/pgdriver,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/extra/bunjson,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/internal,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/internal/parser,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/internal/tagparser,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved +core,github.com/uptrace/bun/schema,BSD-2-Clause,Copyright (c) 2021 Vladimir Mihailenco. All rights reserved core,github.com/urfave/negroni,MIT,Copyright (c) 2014 Jeremy Saenz +core,github.com/vbatts/tar-split/archive/tar,BSD-3-Clause,"Copyright (c) 2015 Vincent Batts, Raleigh, NC, USA" core,github.com/vishvananda/netlink,Apache-2.0,"Copyright 2014 Docker, Inc | Copyright 2014 Vishvananda Ishaya" core,github.com/vishvananda/netlink/nl,Apache-2.0,"Copyright 2014 Docker, Inc | Copyright 2014 Vishvananda Ishaya" core,github.com/vishvananda/netns,Apache-2.0,"Copyright 2014 Docker, Inc | Copyright 2014 Vishvananda Ishaya" core,github.com/vito/go-sse/sse,Apache-2.0,Copyright (c) 2014 Alex Suraci +core,github.com/vmihailenco/msgpack/v5,BSD-2-Clause,Copyright (c) 2013 The github.com/vmihailenco/msgpack Authors +core,github.com/vmihailenco/msgpack/v5/msgpcode,BSD-2-Clause,Copyright (c) 2013 The github.com/vmihailenco/msgpack Authors +core,github.com/vmihailenco/tagparser/v2,BSD-2-Clause,Copyright (c) 2019 The github.com/vmihailenco/tagparser Authors +core,github.com/vmihailenco/tagparser/v2/internal,BSD-2-Clause,Copyright (c) 2019 The github.com/vmihailenco/tagparser Authors +core,github.com/vmihailenco/tagparser/v2/internal/parser,BSD-2-Clause,Copyright (c) 2019 The github.com/vmihailenco/tagparser Authors core,github.com/wI2L/jsondiff,MIT,Copyright (c) 2020-2022 William Poussier +core,github.com/xanzy/ssh-agent,Apache-2.0,"Copyright (c) 2014 David Mzareulyan | Copyright 2015, Sander van Harmelen" +core,github.com/xdg-go/pbkdf2,Apache-2.0,Copyright 2021 by David A. Golden. All rights reserved +core,github.com/xdg-go/scram,Apache-2.0,Copyright 2018 by David A. Golden. All rights reserved +core,github.com/xdg-go/stringprep,Apache-2.0,Copyright 2018 by David A. Golden. All rights reserved core,github.com/xeipuuv/gojsonpointer,Apache-2.0,Copyright 2015 xeipuuv ( https://github.com/xeipuuv ) core,github.com/xeipuuv/gojsonreference,Apache-2.0,Copyright 2015 xeipuuv ( https://github.com/xeipuuv ) core,github.com/xeipuuv/gojsonschema,Apache-2.0,Copyright 2015 xeipuuv core,github.com/xi2/xz,Public Domain,Igor Pavlov | Lasse Collin | Michael Cross +core,github.com/xlab/treeprint,MIT,Copyright © 2016 Maxim Kupriianov core,github.com/xor-gate/ar,MIT,Copyright (c) 2013 Blake Smith core,github.com/yashtewari/glob-intersection,Apache-2.0,Copyright (c) 2018 Yash Tewari (yashtewari) +core,github.com/youmark/pkcs8,MIT,Copyright (c) 2014 youmark core,github.com/yusufpapurcu/wmi,MIT,Copyright (c) 2013 Stack Exchange core,go.etcd.io/bbolt,MIT,Copyright 2016 The etcd Authors core,go.etcd.io/etcd/api/v3/authpb,Apache-2.0,Copyright 2016 The etcd Authors @@ -804,6 +1365,41 @@ core,go.etcd.io/etcd/client/v3,Apache-2.0,Copyright 2016 The etcd Authors core,go.etcd.io/etcd/client/v3/credentials,Apache-2.0,Copyright 2016 The etcd Authors core,go.etcd.io/etcd/client/v3/internal/endpoint,Apache-2.0,Copyright 2016 The etcd Authors core,go.etcd.io/etcd/client/v3/internal/resolver,Apache-2.0,Copyright 2016 The etcd Authors +core,go.mongodb.org/mongo-driver/bson,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/bson/bsoncodec,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/bson/bsonoptions,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/bson/bsonrw,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/bson/bsontype,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/bson/primitive,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/event,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/internal,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/internal/randutil,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/internal/randutil/rand,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/internal/uuid,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo/address,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo/description,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo/options,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo/readconcern,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo/readpref,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/mongo/writeconcern,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/tag,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/version,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/bsonx,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/bsonx/bsoncore,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/auth,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/auth/internal/awsv4,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/auth/internal/gssapi,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/connstring,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/dns,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/mongocrypt,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/mongocrypt/options,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/ocsp,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/operation,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/session,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/topology,Apache-2.0,"Copyright © 2018 MongoDB, Inc." +core,go.mongodb.org/mongo-driver/x/mongo/driver/wiremessage,Apache-2.0,"Copyright © 2018 MongoDB, Inc." core,go.opencensus.io,Apache-2.0,"Copyright 2018, OpenCensus Authors" core,go.opencensus.io/internal,Apache-2.0,"Copyright 2018, OpenCensus Authors" core,go.opencensus.io/internal/tagencoding,Apache-2.0,"Copyright 2018, OpenCensus Authors" @@ -825,12 +1421,14 @@ core,go.opencensus.io/trace/propagation,Apache-2.0,"Copyright 2018, OpenCensus A core,go.opencensus.io/trace/tracestate,Apache-2.0,"Copyright 2018, OpenCensus Authors" core,go.opentelemetry.io/collector/client,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/component,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/component/componenttest,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/configauth,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/configcompression,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/configgrpc,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/confighttp,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/confignet,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/config/configopaque,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/configtelemetry,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/configtls,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/config/internal,Apache-2.0,Copyright The OpenTelemetry Authors @@ -842,21 +1440,27 @@ core,go.opentelemetry.io/collector/confmap/provider/fileprovider,Apache-2.0,Copy core,go.opentelemetry.io/collector/confmap/provider/httpprovider,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/confmap/provider/internal,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/confmap/provider/yamlprovider,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/connector,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/consumer,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/consumer/consumererror,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/consumer/consumertest,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/exporter,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/exporter/exporterhelper,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/exporter/exporterhelper/internal,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/exporter/loggingexporter,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/exporter/loggingexporter/internal/otlptext,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/exporter/otlpexporter,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/extension,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/extension/auth,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/extension/experimental/storage,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/featuregate,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/internal/obsreportconfig,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/internal/obsreportconfig/obsmetrics,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/internal/sharedcomponent,Apache-2.0,Copyright The OpenTelemetry Authors -core,go.opentelemetry.io/collector/internal/testdata,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/obsreport,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/otelcol,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/otelcol/internal/configunmarshaler,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/otelcol/internal/grpclog,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/internal,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/internal/data,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/internal/data/protogen/collector/logs/v1,Apache-2.0,Copyright The OpenTelemetry Authors @@ -879,7 +1483,9 @@ core,go.opentelemetry.io/collector/pdata/pmetric/pmetricotlp,Apache-2.0,Copyrigh core,go.opentelemetry.io/collector/pdata/ptrace,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/ptrace/internal/ptracejson,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/pdata/ptrace/ptraceotlp,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/processor,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/processor/batchprocessor,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/receiver,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/receiver/otlpreceiver,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/receiver/otlpreceiver/internal/logs,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/receiver/otlpreceiver/internal/metrics,Apache-2.0,Copyright The OpenTelemetry Authors @@ -889,11 +1495,9 @@ core,go.opentelemetry.io/collector/semconv/v1.5.0,Apache-2.0,Copyright The OpenT core,go.opentelemetry.io/collector/semconv/v1.6.1,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service/extensions,Apache-2.0,Copyright The OpenTelemetry Authors +core,go.opentelemetry.io/collector/service/internal/capabilityconsumer,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service/internal/components,Apache-2.0,Copyright The OpenTelemetry Authors -core,go.opentelemetry.io/collector/service/internal/configunmarshaler,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service/internal/fanoutconsumer,Apache-2.0,Copyright The OpenTelemetry Authors -core,go.opentelemetry.io/collector/service/internal/grpclog,Apache-2.0,Copyright The OpenTelemetry Authors -core,go.opentelemetry.io/collector/service/internal/pipelines,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service/internal/proctelemetry,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service/internal/runtimeinfo,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/collector/service/internal/zpages,Apache-2.0,Copyright The OpenTelemetry Authors @@ -928,7 +1532,6 @@ core,go.opentelemetry.io/otel/sdk/metric,Apache-2.0,Copyright The OpenTelemetry core,go.opentelemetry.io/otel/sdk/metric/aggregation,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/otel/sdk/metric/internal,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/otel/sdk/metric/metricdata,Apache-2.0,Copyright The OpenTelemetry Authors -core,go.opentelemetry.io/otel/sdk/metric/view,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/otel/sdk/resource,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/otel/sdk/trace,Apache-2.0,Copyright The OpenTelemetry Authors core,go.opentelemetry.io/otel/semconv/internal,Apache-2.0,Copyright The OpenTelemetry Authors @@ -966,11 +1569,16 @@ core,golang.org/x/arch/x86/x86asm,BSD-3-Clause,Copyright (c) 2015 The Go Authors core,golang.org/x/crypto/bcrypt,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/blowfish,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/cast5,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/crypto/chacha20,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/cryptobyte,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/cryptobyte/asn1,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/crypto/curve25519,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/crypto/curve25519/internal/field,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/crypto/ed25519,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/internal/alias,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/internal/poly1305,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/nacl/secretbox,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/crypto/ocsp,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/openpgp,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/openpgp/armor,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/openpgp/clearsign,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved @@ -979,15 +1587,24 @@ core,golang.org/x/crypto/openpgp/errors,BSD-3-Clause,Copyright (c) 2009 The Go A core,golang.org/x/crypto/openpgp/packet,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/openpgp/s2k,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/pbkdf2,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/crypto/pkcs12,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/crypto/pkcs12/internal/rc2,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/salsa20/salsa,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/scrypt,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/crypto/ssh,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/crypto/ssh/agent,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/crypto/ssh/internal/bcrypt_pbkdf,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/crypto/ssh/knownhosts,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/crypto/ssh/terminal,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/exp/constraints,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/exp/maps,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/exp/slices,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/net/bpf,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/net/context,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/net/context/ctxhttp,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/net/html,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/net/html/atom,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/net/html/charset,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/net/http/httpguts,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/net/http/httpproxy,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/net/http2,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved @@ -1024,12 +1641,23 @@ core,golang.org/x/sys/windows/svc/debug,BSD-3-Clause,Copyright (c) 2009 The Go A core,golang.org/x/sys/windows/svc/eventlog,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/sys/windows/svc/mgr,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/term,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/text/cases,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/text/encoding,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/text/encoding/charmap,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/text/encoding/htmlindex,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/text/encoding/internal,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/text/encoding/internal/identifier,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/text/encoding/japanese,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/text/encoding/korean,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/text/encoding/simplifiedchinese,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/text/encoding/traditionalchinese,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/text/encoding/unicode,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/text/internal,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/text/internal/language,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/text/internal/language/compact,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/text/internal/tag,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/text/internal/utf8internal,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved +core,golang.org/x/text/language,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/text/runes,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/text/secure/bidirule,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang.org/x/text/transform,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved @@ -1038,6 +1666,7 @@ core,golang.org/x/text/unicode/norm,BSD-3-Clause,Copyright (c) 2009 The Go Autho core,golang.org/x/time/rate,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,golang/go,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved. core,gomodules.xyz/jsonpatch/v2,Apache-2.0,Copyright (c) 2015 The Authors +core,gonum.org/v1/gonum/graph,BSD-3-Clause,Alexander Egurnov | Andrei Blinnikov | Andrew Brampton | Bill Gray | Bill Noon | Brendan Tracey | Brent Pedersen | Chad Kunde | Chih-Wei Chang | Chris Tessum | Christophe Meessen | Christopher Waldon | Clayton Northey | Copyright ©2013 The Gonum Authors. All rights reserved | Dan Kortschak | Dan Lorenc | Daniel Fireman | Dario Heinisch | David Kleiven | David Samborski | Davor Kapsa | DeepMind Technologies | Delaney Gillilan | Dezmond Goff | Dong-hee Na | Dustin Spicuzza | Egon Elbre | Ekaterina Efimova | Ethan Burns | Evert Lammerts | Evgeny Savinov | Fabian Wickborn | Facundo Gaich | Fazlul Shahriar | Francesc Campoy | Google Inc | Gustaf Johansson | Hossein Zolfi | Iakov Davydov | Igor Mikushkin | Iskander Sharipov | Jalem Raj Rohit | James Bell | James Bowman | James Holmes <32bitkid@gmail.com> | Janne Snabb | Jeremy Atkinson | Jinesi Yelizati | Jon Richards | Jonas Kahler | Jonas Schulze | Jonathan J Lawlor | Jonathan Reiter | Jonathan Schroeder | Joost van Amersfoort | Joseph Watson | Josh Wilson | Julien Roland | Kai Trukenmüller | Kent English | Kevin C. Zimmerman | Kirill Motkov | Konstantin Shaposhnikov | Leonid Kneller | Lyron Winderbaum | Marco Leogrande | Mark Canning | Mark Skilbeck | Martin Diz | Matthew Connelly | Matthieu Di Mercurio | Max Halford | Maxim Sergeev | Microsoft Corporation | MinJae Kwon | Nathan Edwards | Nick Potts | Nils Wogatzky | Olivier Wulveryck | Or Rikon | Patricio Whittingslow | Patrick DeVivo | Pontus Melke | Renee French | Rishi Desai | Robin Eklind | Roger Welin | Roman Werpachowski | Rondall Jones | Sam Zaydel | Samuel Kelemen | Saran Ahluwalia | Scott Holden | Scott Kiesel | Sebastien Binet | Shawn Smith | Sintela Ltd | Spencer Lyon | Steve McCoy | Taesu Pyo | Takeshi Yoneda | Tamir Hyman | The University of Adelaide | The University of Minnesota | The University of Washington | Thomas Berg | Tobin Harding | Valentin Deleplace | Vincent Thiery | Vladimír Chalupecký | Will Tekulve | Yasuhiro Matsumoto | Yevgeniy Vahlis | Yucheng Zhu | Zoe Juozapaitis | source{d} core,google.golang.org/api/googleapi,BSD-3-Clause,Copyright (c) 2011 Google Inc. All rights reserved. core,google.golang.org/api/googleapi/transport,BSD-3-Clause,Copyright (c) 2011 Google Inc. All rights reserved. core,google.golang.org/api/iamcredentials/v1,BSD-3-Clause,Copyright (c) 2011 Google Inc. All rights reserved. @@ -1069,6 +1698,7 @@ core,google.golang.org/appengine/internal/socket,Apache-2.0,Copyright 2011 Googl core,google.golang.org/appengine/internal/urlfetch,Apache-2.0,Copyright 2011 Google Inc. All rights reserved. core,google.golang.org/appengine/socket,Apache-2.0,Copyright 2011 Google Inc. All rights reserved. core,google.golang.org/appengine/urlfetch,Apache-2.0,Copyright 2011 Google Inc. All rights reserved. +core,google.golang.org/genproto/googleapis/api,Apache-2.0,Copyright 2015 Google LLC core,google.golang.org/genproto/googleapis/api/annotations,Apache-2.0,Copyright 2015 Google LLC core,google.golang.org/genproto/googleapis/api/httpbody,Apache-2.0,Copyright 2015 Google LLC core,google.golang.org/genproto/googleapis/iam/v1,Apache-2.0,Copyright 2015 Google LLC @@ -1085,7 +1715,7 @@ core,google.golang.org/grpc/balancer,Apache-2.0,Copyright 2014 gRPC authors. core,google.golang.org/grpc/balancer/base,Apache-2.0,Copyright 2014 gRPC authors. core,google.golang.org/grpc/balancer/grpclb,Apache-2.0,Copyright 2014 gRPC authors. core,google.golang.org/grpc/balancer/grpclb/grpc_lb_v1,Apache-2.0,Copyright 2014 gRPC authors. -core,google.golang.org/grpc/balancer/grpclb/state,Apache-2.0,Copyright 2014 gRPC authors. +core,google.golang.org/grpc/balancer/grpclb/grpclbstate,Apache-2.0,Copyright 2014 gRPC authors. core,google.golang.org/grpc/balancer/roundrobin,Apache-2.0,Copyright 2014 gRPC authors. core,google.golang.org/grpc/binarylog/grpc_binarylog_v1,Apache-2.0,Copyright 2014 gRPC authors. core,google.golang.org/grpc/channelz,Apache-2.0,Copyright 2014 gRPC authors. @@ -1190,8 +1820,11 @@ core,gopkg.in/DataDog/dd-trace-go.v1/internal/version,Apache-2.0,"Copyright 2016 core,gopkg.in/DataDog/dd-trace-go.v1/profiler,Apache-2.0,"Copyright 2016-Present Datadog, Inc." core,gopkg.in/DataDog/dd-trace-go.v1/profiler/internal/pprofutils,Apache-2.0,"Copyright 2016-Present Datadog, Inc." core,gopkg.in/Knetic/govaluate.v3,MIT,"Copyright (c) 2014-2016 George Lester | abrander (panic-finding testing tool) | benpaxton (fix for missing type checks during literal elide process) | bgaifullin (lifting restriction on complex/struct types) | dpaolella (exposure of variables used in an expression) | iasci (ternary operator) | oxtoacart (parameter structures, deferred parameter retrieval) | prashantv (optimization of bools) | vjeantet (regex support) | wmiller848 (bitwise operators) | xfennec (fix for dates being parsed in the current Location)" +core,gopkg.in/cheggaaa/pb.v1,BSD-3-Clause,"Copyright (c) 2012-2015, Sergey Cherepanov" core,gopkg.in/inf.v0,BSD-3-Clause,Copyright (c) 2012 Péter Surányi. Portions Copyright (c) 2009 The Go Authors. All rights reserved. +core,gopkg.in/ini.v1,Apache-2.0,Copyright 2014 Unknwon core,gopkg.in/natefinch/lumberjack.v2,MIT,Copyright (c) 2014 Nate Finch +core,gopkg.in/warnings.v0,BSD-2-Clause,Copyright (c) 2016 Péter Surányi core,gopkg.in/yaml.v2,Apache-2.0,Copyright 2011-2016 Canonical Ltd core,gopkg.in/yaml.v3,MIT,Copyright (c) 2006-2010 Kirill Simonov | Copyright 2011-2016 Canonical Ltd core,gopkg.in/zorkian/go-datadog-api.v2,BSD-3-Clause,Copyright (c) 2013 by authors and contributors | Copyright 2013-2019 by authors and contributors @@ -1445,6 +2078,18 @@ core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/clientset/versioned/ty core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/clientset/versioned/typed/autoscaling.k8s.io/v1beta1,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/clientset/versioned/typed/autoscaling.k8s.io/v1beta2,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/clientset/versioned/typed/poc.autoscaling.k8s.io/v1alpha1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/autoscaling.k8s.io,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/autoscaling.k8s.io/v1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/autoscaling.k8s.io/v1beta1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/autoscaling.k8s.io/v1beta2,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/internalinterfaces,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/poc.autoscaling.k8s.io,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/poc.autoscaling.k8s.io/v1alpha1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/listers/autoscaling.k8s.io/v1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/listers/autoscaling.k8s.io/v1beta1,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/listers/autoscaling.k8s.io/v1beta2,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/listers/poc.autoscaling.k8s.io/v1alpha1,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/client-go/applyconfigurations/admissionregistration/v1,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/client-go/applyconfigurations/admissionregistration/v1beta1,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/client-go/applyconfigurations/apiserverinternal/v1alpha1,Apache-2.0,Copyright 2014 The Kubernetes Authors. @@ -1748,6 +2393,7 @@ core,k8s.io/klog,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/klog/v2,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/klog/v2/internal/buffer,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/klog/v2/internal/clock,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,k8s.io/klog/v2/internal/dbg,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/klog/v2/internal/serialize,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/klog/v2/internal/severity,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/kube-openapi/cmd/openapi-gen,Apache-2.0,Copyright 2014 The Kubernetes Authors. @@ -1755,12 +2401,10 @@ core,k8s.io/kube-openapi/cmd/openapi-gen/args,Apache-2.0,Copyright 2014 The Kube core,k8s.io/kube-openapi/pkg/builder,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/kube-openapi/pkg/builder3,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/kube-openapi/pkg/common,Apache-2.0,Copyright 2014 The Kubernetes Authors. -core,k8s.io/kube-openapi/pkg/common/restfuladapter,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/kube-openapi/pkg/generators,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/kube-openapi/pkg/generators/rules,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/kube-openapi/pkg/handler,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/kube-openapi/pkg/handler3,Apache-2.0,Copyright 2014 The Kubernetes Authors. -core,k8s.io/kube-openapi/pkg/internal/handler,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/kube-openapi/pkg/schemaconv,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/kube-openapi/pkg/schemamutation,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/kube-openapi/pkg/spec3,Apache-2.0,Copyright 2014 The Kubernetes Authors. @@ -1800,6 +2444,43 @@ core,k8s.io/utils/net,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/utils/path,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/utils/pointer,Apache-2.0,Copyright 2014 The Kubernetes Authors. core,k8s.io/utils/trace,Apache-2.0,Copyright 2014 The Kubernetes Authors. +core,lukechampine.com/uint128,MIT,Copyright (c) 2019 Luke Champine +core,mellium.im/sasl,BSD-2-Clause,Copyright © 2014 The Mellium Contributors +core,modernc.org/cc/v3,BSD-3-Clause,Copyright (c) 2017 The CC Authors. All rights reserved | Dan Kortschak | Dan Peterson | Denys Smirnov | Jan Mercl <0xjnml@gmail.com> | Maxim Kupriianov | Peter Waller | Steffen Butzer | Tommi Virtanen | Yasuhiro Matsumoto | Zvi Effron +core,modernc.org/ccgo/v3/lib,BSD-3-Clause,Copyright (c) 2017 The CCGO Authors. All rights reserved +core,modernc.org/libc,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/errno,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/fcntl,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/fts,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/grp,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/honnef.co/go/netdb,MIT,Copyright (c) 2012 Dominik Honnef | Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/langinfo,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/limits,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/netdb,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/netinet/in,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/poll,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/pthread,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/pwd,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/signal,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/stdio,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/stdlib,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/sys/socket,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/sys/stat,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/sys/types,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/termios,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/time,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/unistd,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/utime,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/uuid,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/uuid/uuid,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/libc/wctype,BSD-3-Clause,Copyright (c) 2017 The Libc Authors. All rights reserved | Dan Kortschak | Dan Peterson | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Jason DeBettencourt | Koichi Shiraishi | Marius Orcsik | Steffen Butzer | ZHU Zijia +core,modernc.org/mathutil,BSD-3-Clause,Bodecker DellaMaria | CZ.NIC z.s.p.o. | Copyright (c) 2014 The mathutil Authors. All rights reserved | Edward Betts | Faiz Abbasi | Gary Burd | Jan Mercl <0xjnml@gmail.com> | Muhammad Surya | Santiago De la Cruz +core,modernc.org/memory,BSD-3-Clause,Anup Kodlekere | Copyright (c) 2017 The Memory Authors. All rights reserved | Gleb Sakhnov | Jan Mercl <0xjnml@gmail.com> | Steffen Butzer | ZHU Zijia +core,modernc.org/opt,BSD-3-Clause,Copyright (c) 2019 The Opt Authors. All rights reserved | Jan Mercl <0xjnml@gmail.com> +core,modernc.org/sqlite,BSD-3-Clause,Alexander Menzhinsky | Artyom Pervukhin | Copyright (c) 2017 The Sqlite Authors. All rights reserved | Dan Peterson | David Skinner | Davsk Ltd Co | Gleb Sakhnov | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Logan Snow | Matthew Gabeler-Lee | Michael Hoffmann | Ross Light | Saed SayedAhmed | Steffen Butzer | Yaacov Akiba Slama +core,modernc.org/sqlite/lib,BSD-3-Clause,Alexander Menzhinsky | Artyom Pervukhin | Copyright (c) 2017 The Sqlite Authors. All rights reserved | Dan Peterson | David Skinner | Davsk Ltd Co | Gleb Sakhnov | Jaap Aarts | Jan Mercl <0xjnml@gmail.com> | Logan Snow | Matthew Gabeler-Lee | Michael Hoffmann | Ross Light | Saed SayedAhmed | Steffen Butzer | Yaacov Akiba Slama +core,modernc.org/strutil,BSD-3-Clause,CZ.NIC z.s.p.o. | Copyright (c) 2014 The strutil Authors. All rights reserved | Jan Mercl <0xjnml@gmail.com> +core,modernc.org/token,BSD-3-Clause,Copyright (c) 2009 The Go Authors. All rights reserved core,sigs.k8s.io/apiserver-network-proxy/konnectivity-client/pkg/client,Apache-2.0,Copyright 2017 The Kubernetes Authors. core,sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client,Apache-2.0,Copyright 2017 The Kubernetes Authors. core,sigs.k8s.io/controller-runtime,Apache-2.0,Copyright 2017 The Kubernetes Authors. diff --git a/cmd/agent/api/internal/agent/agent.go b/cmd/agent/api/internal/agent/agent.go index 2e5bd92cf8859..14bb97ab1cad1 100644 --- a/cmd/agent/api/internal/agent/agent.go +++ b/cmd/agent/api/internal/agent/agent.go @@ -61,13 +61,12 @@ func SetupHandlers(r *mux.Router, flare flare.Component) *mux.Router { r.HandleFunc("/{component}/configs", componentConfigHandler).Methods("GET") r.HandleFunc("/gui/csrf-token", getCSRFToken).Methods("GET") r.HandleFunc("/config-check", getConfigCheck).Methods("GET") - r.HandleFunc("/config", settingshttp.Server.GetFull("")).Methods("GET") + r.HandleFunc("/config", settingshttp.Server.GetFullDatadogConfig("")).Methods("GET") r.HandleFunc("/config/list-runtime", settingshttp.Server.ListConfigurable).Methods("GET") r.HandleFunc("/config/{setting}", settingshttp.Server.GetValue).Methods("GET") r.HandleFunc("/config/{setting}", settingshttp.Server.SetValue).Methods("POST") r.HandleFunc("/tagger-list", getTaggerList).Methods("GET") - r.HandleFunc("/workload-list/short", getShortWorkloadList).Methods("GET") - r.HandleFunc("/workload-list/verbose", getVerboseWorkloadList).Methods("GET") + r.HandleFunc("/workload-list", getWorkloadList).Methods("GET") r.HandleFunc("/secrets", secretInfo).Methods("GET") r.HandleFunc("/metadata/{payload}", metadataPayload).Methods("GET") @@ -381,15 +380,15 @@ func getTaggerList(w http.ResponseWriter, r *http.Request) { w.Write(jsonTags) } -func getVerboseWorkloadList(w http.ResponseWriter, r *http.Request) { - workloadList(w, true) -} - -func getShortWorkloadList(w http.ResponseWriter, r *http.Request) { - workloadList(w, false) -} +func getWorkloadList(w http.ResponseWriter, r *http.Request) { + verbose := false + params := r.URL.Query() + if v, ok := params["verbose"]; ok { + if len(v) >= 1 && v[0] == "true" { + verbose = true + } + } -func workloadList(w http.ResponseWriter, verbose bool) { response := workloadmeta.GetGlobalStore().Dump(verbose) jsonDump, err := json.Marshal(response) if err != nil { diff --git a/cmd/agent/common/autodiscovery.go b/cmd/agent/common/autodiscovery.go index f7f8f66c7f907..7dcc9c925cdcf 100644 --- a/cmd/agent/common/autodiscovery.go +++ b/cmd/agent/common/autodiscovery.go @@ -7,9 +7,12 @@ package common import ( "context" + "errors" + "fmt" "time" "go.uber.org/atomic" + utilserror "k8s.io/apimachinery/pkg/util/errors" "github.com/DataDog/datadog-agent/pkg/autodiscovery" "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" @@ -19,6 +22,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/config" confad "github.com/DataDog/datadog-agent/pkg/config/autodiscovery" "github.com/DataDog/datadog-agent/pkg/util" + "github.com/DataDog/datadog-agent/pkg/util/jsonquery" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -224,14 +228,14 @@ func (sf schedulerFunc) Stop() { // // If the context is cancelled, then any accumulated, matching changes are // returned, even if that is fewer than discoveryMinInstances. -func WaitForConfigsFromAD(ctx context.Context, checkNames []string, discoveryMinInstances int) (configs []integration.Config) { - return waitForConfigsFromAD(ctx, false, checkNames, discoveryMinInstances) +func WaitForConfigsFromAD(ctx context.Context, checkNames []string, discoveryMinInstances int, instanceFilter string) (configs []integration.Config, lastError error) { + return waitForConfigsFromAD(ctx, false, checkNames, discoveryMinInstances, instanceFilter) } // WaitForAllConfigsFromAD waits until its context expires, and then returns // the full set of checks scheduled by AD. -func WaitForAllConfigsFromAD(ctx context.Context) (configs []integration.Config) { - return waitForConfigsFromAD(ctx, true, []string{}, 0) +func WaitForAllConfigsFromAD(ctx context.Context) (configs []integration.Config, lastError error) { + return waitForConfigsFromAD(ctx, true, []string{}, 0, "") } // waitForConfigsFromAD waits for configs from the AD scheduler and returns them. @@ -247,7 +251,7 @@ func WaitForAllConfigsFromAD(ctx context.Context) (configs []integration.Config) // If wildcard is true, this gathers all configs scheduled before the context // is cancelled, and then returns. It will not return before the context is // cancelled. -func waitForConfigsFromAD(ctx context.Context, wildcard bool, checkNames []string, discoveryMinInstances int) (configs []integration.Config) { +func waitForConfigsFromAD(ctx context.Context, wildcard bool, checkNames []string, discoveryMinInstances int, instanceFilter string) (configs []integration.Config, returnErr error) { configChan := make(chan integration.Config) // signal to the scheduler when we are no longer waiting, so we do not continue @@ -278,23 +282,59 @@ func waitForConfigsFromAD(ctx context.Context, wildcard bool, checkNames []strin } } + stopChan := make(chan struct{}) // add the scheduler in a goroutine, since it will schedule any "catch-up" immediately, // placing items in configChan go AC.AddScheduler("check-cmd", schedulerFunc(func(configs []integration.Config) { + var errorList []error for _, cfg := range configs { + if instanceFilter != "" { + instances, filterErrors := filterInstances(cfg.Instances, instanceFilter) + if len(filterErrors) > 0 { + errorList = append(errorList, filterErrors...) + continue + } + if len(instances) == 0 { + continue + } + cfg.Instances = instances + } + if match(cfg) && waiting.Load() { configChan <- cfg } } + if len(errorList) > 0 { + returnErr = errors.New(utilserror.NewAggregate(errorList).Error()) + stopChan <- struct{}{} + } }), true) for wildcard || len(configs) < discoveryMinInstances { select { case cfg := <-configChan: configs = append(configs, cfg) + case <-stopChan: + return case <-ctx.Done(): return } } return } + +func filterInstances(instances []integration.Data, instanceFilter string) ([]integration.Data, []error) { + var newInstances []integration.Data + var errors []error + for _, instance := range instances { + exist, err := jsonquery.YAMLCheckExist(instance, instanceFilter) + if err != nil { + errors = append(errors, fmt.Errorf("instance filter error: %v", err)) + continue + } + if exist { + newInstances = append(newInstances, instance) + } + } + return newInstances, errors +} diff --git a/cmd/agent/common/helpers.go b/cmd/agent/common/helpers.go index 38b6082a0dcf1..324e262549fb3 100644 --- a/cmd/agent/common/helpers.go +++ b/cmd/agent/common/helpers.go @@ -28,47 +28,32 @@ func SetupConfig(confFilePath string) error { // SetupConfigWithWarnings fires up the configuration system and returns warnings if any. func SetupConfigWithWarnings(confFilePath, configName string) (*config.Warnings, error) { - return setupConfig(confFilePath, configName, false, true) + return setupConfig(config.Datadog, "datadog.yaml", confFilePath, configName, false, true) } // SetupConfigWithoutSecrets fires up the configuration system without secrets support func SetupConfigWithoutSecrets(confFilePath string, configName string) error { - _, err := setupConfig(confFilePath, configName, true, true) + _, err := setupConfig(config.Datadog, "datadog.yaml", confFilePath, configName, true, true) return err } -// SetupConfigIfExist fires up the configuration system but -// doesn't raise an error if the configuration file is the default one -// and it doesn't exist. -func SetupConfigIfExist(confFilePath string) error { - _, err := setupConfig(confFilePath, "", false, false) - return err -} - -func setupConfig(confFilePath string, configName string, withoutSecrets bool, failOnMissingFile bool) (*config.Warnings, error) { +func setupConfig(cfg config.Config, origin string, confFilePath string, configName string, withoutSecrets bool, failOnMissingFile bool) (*config.Warnings, error) { if configName != "" { - config.Datadog.SetConfigName(configName) + cfg.SetConfigName(configName) } // set the paths where a config file is expected if len(confFilePath) != 0 { // if the configuration file path was supplied on the command line, // add that first so it's first in line - config.Datadog.AddConfigPath(confFilePath) + cfg.AddConfigPath(confFilePath) // If they set a config file directly, let's try to honor that if strings.HasSuffix(confFilePath, ".yaml") { - config.Datadog.SetConfigFile(confFilePath) + cfg.SetConfigFile(confFilePath) } } - config.Datadog.AddConfigPath(DefaultConfPath) + cfg.AddConfigPath(DefaultConfPath) // load the configuration - var err error - var warnings *config.Warnings - - if withoutSecrets { - warnings, err = config.LoadWithoutSecret() - } else { - warnings, err = config.Load() - } + warnings, err := config.LoadDatadogCustom(cfg, origin, !withoutSecrets) // If `!failOnMissingFile`, do not issue an error if we cannot find the default config file. var e viper.ConfigFileNotFoundError if err != nil && (failOnMissingFile || !errors.As(err, &e) || confFilePath != "") { @@ -104,20 +89,20 @@ func SelectedCheckMatcherBuilder(checkNames []string, minInstances uint) func(co } // SetupInternalProfiling is a common helper to configure runtime settings for internal profiling. -func SetupInternalProfiling() { - if v := config.Datadog.GetInt("internal_profiling.block_profile_rate"); v > 0 { +func SetupInternalProfiling(cfg config.ConfigReader, configPrefix string) { + if v := cfg.GetInt(configPrefix + "internal_profiling.block_profile_rate"); v > 0 { if err := settings.SetRuntimeSetting("runtime_block_profile_rate", v); err != nil { log.Errorf("Error setting block profile rate: %v", err) } } - if v := config.Datadog.GetInt("internal_profiling.mutex_profile_fraction"); v > 0 { + if v := cfg.GetInt(configPrefix + "internal_profiling.mutex_profile_fraction"); v > 0 { if err := settings.SetRuntimeSetting("runtime_mutex_profile_fraction", v); err != nil { log.Errorf("Error mutex profile fraction: %v", err) } } - if config.Datadog.GetBool("internal_profiling.enabled") { + if cfg.GetBool(configPrefix + "internal_profiling.enabled") { err := settings.SetRuntimeSetting("internal_profiling", true) if err != nil { log.Errorf("Error starting profiler: %v", err) diff --git a/cmd/agent/dist/conf.d/ntp.d/conf.yaml.default b/cmd/agent/dist/conf.d/ntp.d/conf.yaml.default index 35be64ef55627..aafdb72b65d58 100644 --- a/cmd/agent/dist/conf.d/ntp.d/conf.yaml.default +++ b/cmd/agent/dist/conf.d/ntp.d/conf.yaml.default @@ -18,7 +18,7 @@ instances: # # host: .datadog.pool.ntp.org - ## @param port - string - optional - default: 123 + ## @param port - integer - optional - default: 123 ## Port to use when reaching the NTP server. # # port: 123 diff --git a/cmd/agent/doc.go b/cmd/agent/doc.go index 8046bd6881f4a..1a709d22cf041 100644 --- a/cmd/agent/doc.go +++ b/cmd/agent/doc.go @@ -4,7 +4,6 @@ // Copyright 2016-present Datadog, Inc. /* - The Datadog Agent faithfully collects events and metrics and brings them to Datadog on your behalf. @@ -13,6 +12,5 @@ To install the agent, please refer the official documentation at https://docs.da If you want to build the agent by yourself or contribute to the project, please refer to the Agent Developer Guide at https://github.com/DataDog/datadog-agent/tree/main/docs/dev for more details. - */ package main diff --git a/cmd/agent/gui/views/templates/generalStatus.tmpl b/cmd/agent/gui/views/templates/generalStatus.tmpl index 2e699568ae20b..0cba8c1f862e6 100644 --- a/cmd/agent/gui/views/templates/generalStatus.tmpl +++ b/cmd/agent/gui/views/templates/generalStatus.tmpl @@ -387,10 +387,6 @@ {{- end }} {{- end }} - Average Latency (ms): {{ .all_time_avg_latency }}
- 24h Average Latency (ms): {{ .recent_avg_latency }}
- Peak Latency (ms): {{ .all_time_peak_latency }}
- 24h Peak Latency (ms): {{ .recent_peak_latency }}
{{- if .info }} {{- range $key, $value := .info }} {{ $len := len $value }} {{ if eq $len 1 }} {{$key}}: {{index $value 0}}
{{ else }} diff --git a/cmd/agent/install_script.sh b/cmd/agent/install_script.sh index beb8c0575b14c..c807e01b40581 100755 --- a/cmd/agent/install_script.sh +++ b/cmd/agent/install_script.sh @@ -14,7 +14,7 @@ echo -e "\033[33m * https://s3.amazonaws.com/dd-agent/scripts/install_script_agent7.sh to install Agent 7 \033[0m" -install_script_version=1.11.0.deprecated +install_script_version=1.13.0.deprecated logfile="ddagent-install.log" support_email=support@datadoghq.com @@ -33,9 +33,9 @@ APT_GPG_KEYS=("DATADOG_APT_KEY_CURRENT.public" "DATADOG_APT_KEY_F14F620E.public" # DATADOG_RPM_KEY_FD4BF915.public expires in 2024 RPM_GPG_KEYS=("DATADOG_RPM_KEY_CURRENT.public" "DATADOG_RPM_KEY_E09422B3.public" "DATADOG_RPM_KEY_FD4BF915.public") -# RPM_GPG_KEYS_A6 contains keys we only install for the A6 repo. -# DATADOG_RPM_KEY.public is only useful to install old (< 6.14) Agent packages. -RPM_GPG_KEYS_A6=("DATADOG_RPM_KEY.public") +# DATADOG_RPM_KEY.public (4172A230) was only useful to install old (< 6.14) Agent packages. +# We no longer add it and we explicitly remove it. +RPM_GPG_KEYS_TO_REMOVE=("gpg-pubkey-4172a230-55dd14f6") # Set up a named pipe for logging npipe=/tmp/$$.tmp @@ -143,6 +143,18 @@ function verify_agent_version(){ fi } +function remove_rpm_gpg_keys() { + local sudo_cmd="$1" + shift + local old_keys=("$@") + for key in "${old_keys[@]}"; do + if $sudo_cmd rpm -q "$key" 1>/dev/null 2>/dev/null; then + echo -e "\033[34m\nRemoving old RPM key $key from the RPM database\n\033[0m" + $sudo_cmd rpm --erase "$key" + fi + done +} + echo -e "\033[34m\n* Datadog Agent install script v${install_script_version}\n\033[0m" hostname= @@ -227,6 +239,7 @@ flavor_to_readable=( ["datadog-agent"]="Datadog Agent" ["datadog-iot-agent"]="Datadog IoT Agent" ["datadog-dogstatsd"]="Datadog Dogstatsd" + ["datadog-fips-proxy"]="Datadog FIPS Proxy" ["datadog-heroku-agent"]="Datadog Heroku Agent" ) nice_flavor=${flavor_to_readable[$agent_flavor]} @@ -243,17 +256,25 @@ flavor_to_system_service=( ) system_service=${flavor_to_system_service[$agent_flavor]:-datadog-agent} +declare -a services +services=("$system_service") +if [ -n "$fips_mode" ]; then + services+=("datadog-fips-proxy") +fi + declare -A flavor_to_etcdir flavor_to_etcdir=( ["datadog-dogstatsd"]="/etc/datadog-dogstatsd" ) etcdir=${flavor_to_etcdir[$agent_flavor]:-/etc/datadog-agent} +etcdirfips=/etc/datadog-fips-proxy declare -A flavor_to_config flavor_to_config=( ["datadog-dogstatsd"]="$etcdir/dogstatsd.yaml" ) config_file=${flavor_to_config[$agent_flavor]:-$etcdir/datadog.yaml} +config_file_fips=$etcdirfips/datadog-fips-proxy.cfg agent_major_version=6 if [ -n "$DD_AGENT_MAJOR_VERSION" ]; then @@ -374,6 +395,7 @@ fi # Install the necessary package sources if [ "$OS" = "RedHat" ]; then + remove_rpm_gpg_keys "$sudo_cmd" "${RPM_GPG_KEYS_TO_REMOVE[@]}" if { [ "$DISTRIBUTION" == "Rocky" ] || [ "$DISTRIBUTION" == "AlmaLinux" ]; } && { [ -n "$agent_minor_version" ] && [ "$agent_minor_version" -lt 33 ]; } && ! echo "$agent_flavor" | grep '[0-9]' > /dev/null; then echo -e "\033[33mA future version of $nice_flavor will support $DISTRIBUTION\n\033[0m" exit; @@ -410,11 +432,6 @@ if [ "$OS" = "RedHat" ]; then for key_path in "${RPM_GPG_KEYS[@]}"; do gpgkeys="${gpgkeys:+"${gpgkeys}${separator}"}https://${keys_url}/${key_path}" done - if [ "$agent_major_version" -eq 6 ]; then - for key_path in "${RPM_GPG_KEYS_A6[@]}"; do - gpgkeys="${gpgkeys:+"${gpgkeys}${separator}"}https://${keys_url}/${key_path}" - done - fi $sudo_cmd sh -c "echo -e '[datadog]\nname = Datadog, Inc.\nbaseurl = https://${yum_url}/${yum_version_path}/${ARCHI}/\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=${rpm_repo_gpgcheck}\npriority=1\ngpgkey=${gpgkeys}' > /etc/yum.repos.d/datadog.repo" @@ -435,7 +452,6 @@ if [ "$OS" = "RedHat" ]; then agent_version_custom="$(yum -y --disablerepo=* --enablerepo=datadog list --showduplicates datadog-agent | sort -r | grep -E "$pkg_pattern" -om1)" || true verify_agent_version "-" fi - echo -e " \033[33mInstalling package: $agent_flavor\n\033[0m" declare -a packages packages=("$agent_flavor") @@ -443,6 +459,8 @@ if [ "$OS" = "RedHat" ]; then packages+=("datadog-fips-proxy") fi + echo -e " \033[33mInstalling package(s): ${packages[*]}\n\033[0m" + $sudo_cmd yum -y --disablerepo='*' --enablerepo='datadog' install $dnf_flag "${packages[@]}" || $sudo_cmd yum -y install $dnf_flag "${packages[@]}" elif [ "$OS" = "Debian" ]; then @@ -520,7 +538,6 @@ If the cause is unclear, please contact Datadog support. agent_version_custom="$(apt-cache madison datadog-agent | grep -E "$pkg_pattern" -om1)" || true verify_agent_version "=" fi - echo -e " \033[33mInstalling package: $agent_flavor\n\033[0m" declare -a packages packages=("$agent_flavor" "datadog-signing-keys") @@ -528,9 +545,13 @@ If the cause is unclear, please contact Datadog support. packages+=("datadog-fips-proxy") fi + echo -e " \033[33mInstalling package(s): ${packages[*]}\n\033[0m" + $sudo_cmd apt-get install -y --force-yes "${packages[@]}" + ERROR_MESSAGE="" elif [ "$OS" = "SUSE" ]; then + remove_rpm_gpg_keys "$sudo_cmd" "${RPM_GPG_KEYS_TO_REMOVE[@]}" UNAME_M=$(uname -m) if [ "$UNAME_M" == "i686" ] || [ "$UNAME_M" == "i386" ] || [ "$UNAME_M" == "x86" ]; then printf "\033[31mThe Datadog Agent installer is only available for 64 bit SUSE Enterprise machines.\033[0m\n" @@ -575,21 +596,10 @@ elif [ "$OS" = "SUSE" ]; then $sudo_cmd curl -o "/tmp/${key_path}" "https://${keys_url}/${key_path}" $sudo_cmd rpm --import "/tmp/${key_path}" done - if [ "$agent_major_version" -eq 6 ]; then - for key_path in "${RPM_GPG_KEYS_A6[@]}"; do - $sudo_cmd curl -o "/tmp/${key_path}" "https://${keys_url}/${key_path}" - $sudo_cmd rpm --import "/tmp/${key_path}" - done - fi else for key_path in "${RPM_GPG_KEYS[@]}"; do $sudo_cmd rpm --import "https://${keys_url}/${key_path}" done - if [ "$agent_major_version" -eq 6 ]; then - for key_path in "${RPM_GPG_KEYS_A6[@]}"; do - $sudo_cmd rpm --import "https://${keys_url}/${key_path}" - done - fi fi # Parse the major version number out of the distro release info file. xargs is used to trim whitespace. @@ -604,11 +614,6 @@ elif [ "$OS" = "SUSE" ]; then for key_path in "${RPM_GPG_KEYS[@]}"; do gpgkeys="${gpgkeys:+"${gpgkeys}${separator}"}https://${keys_url}/${key_path}" done - if [ "$agent_major_version" -eq 6 ]; then - for key_path in "${RPM_GPG_KEYS_A6[@]}"; do - gpgkeys="${gpgkeys:+"${gpgkeys}${separator}"}https://${keys_url}/${key_path}" - done - fi fi echo -e "\033[34m\n* Installing YUM Repository for Datadog\n\033[0m" @@ -654,7 +659,6 @@ elif [ "$OS" = "SUSE" ]; then agent_version_custom="$(zypper search -s datadog-agent | grep -E "$pkg_pattern" -om1)" || true verify_agent_version "-" fi - echo -e " \033[33mInstalling package: $agent_flavor\n\033[0m" declare -a packages packages=("$agent_flavor") @@ -662,6 +666,9 @@ elif [ "$OS" = "SUSE" ]; then packages+=("datadog-fips-proxy") fi + + echo -e " \033[33mInstalling package(s): ${packages[*]}\n\033[0m" + if [ -z "$sudo_cmd" ]; then ZYPP_RPM_DEBUG="${ZYPP_RPM_DEBUG:-0}" zypper --non-interactive install "${packages[@]}" ||: else @@ -778,6 +785,23 @@ fi $sudo_cmd chown dd-agent:dd-agent "$config_file" $sudo_cmd chmod 640 "$config_file" +# set the FIPS configuration +if [ -n "$fips_mode" ]; then + if [ -e "$config_file_fips" ] && [ -z "$upgrade" ]; then + printf "\033[34m\n* Keeping old $config_file_fips configuration file\n\033[0m\n" + else + if [ ! -e "$config_file_fips" ]; then + $sudo_cmd cp "$config_file_fips.example" "$config_file_fips" + + # TODO: set port range in file, or environment variable + fi + + $sudo_cmd chown dd-agent:dd-agent "$config_file_fips" + $sudo_cmd chmod 640 "$config_file_fips" + + fi +fi + # Creating or overriding the install information install_info_content="--- install_method: @@ -787,6 +811,11 @@ install_method: " $sudo_cmd sh -c "echo '$install_info_content' > $etcdir/install_info" +if [ -n "$fips_mode" ]; then + # Creating or overriding the install information + $sudo_cmd sh -c "echo '$install_info_content' > $etcdirfips/install_info" +fi + # On SUSE 11, sudo service datadog-agent start fails (because /sbin is not in a base user's path) # However, sudo /sbin/service datadog-agent does work. # Use which (from root user) to find the absolute path to service @@ -796,52 +825,59 @@ if [ "$SUSE11" == "yes" ]; then service_cmd=`$sudo_cmd which service` fi -# Use /usr/sbin/service by default. -# Some distros usually include compatibility scripts with Upstart or Systemd. Check with: `command -v service | xargs grep -E "(upstart|systemd)"` -restart_cmd="$sudo_cmd $service_cmd $system_service restart" -stop_instructions="$sudo_cmd $service_cmd $system_service stop" -start_instructions="$sudo_cmd $service_cmd $system_service start" - -if [[ `$sudo_cmd ps --no-headers -o comm 1 2>&1` == "systemd" ]] && command -v systemctl 2>&1; then - # Use systemd if systemctl binary exists and systemd is the init process - restart_cmd="$sudo_cmd systemctl restart ${system_service}.service" - stop_instructions="$sudo_cmd systemctl stop $system_service" - start_instructions="$sudo_cmd systemctl start $system_service" -elif /sbin/init --version 2>&1 | grep -q upstart; then - # Try to detect Upstart, this works most of the times but still a best effort - restart_cmd="$sudo_cmd stop $system_service || true ; sleep 2s ; $sudo_cmd start $system_service" - stop_instructions="$sudo_cmd stop $system_service" - start_instructions="$sudo_cmd start $system_service" -fi +declare -a monitoring_services +monitoring_services=( "datadog-agent" ) if [ $no_start ]; then - printf "\033[34m -* DD_INSTALL_ONLY environment variable set: the newly installed version of the -$nice_flavor will not be started. You will have to do it manually using the -following command: + printf "\033[34m\n * DD_INSTALL_ONLY environment variable set.\033[0m\n" +fi + +for current_service in "${services[@]}"; do + nice_current_flavor=${flavor_to_readable[$current_service]} + + # Use /usr/sbin/service by default. + # Some distros usually include compatibility scripts with Upstart or Systemd. Check with: `command -v service | xargs grep -E "(upstart|systemd)"` + restart_cmd="$sudo_cmd $service_cmd $current_service restart" + stop_instructions="$sudo_cmd $service_cmd $current_service stop" + start_instructions="$sudo_cmd $service_cmd $current_service start" + + if [[ `$sudo_cmd ps --no-headers -o comm 1 2>&1` == "systemd" ]] && command -v systemctl 2>&1; then + # Use systemd if systemctl binary exists and systemd is the init process + restart_cmd="$sudo_cmd systemctl restart ${current_service}.service" + stop_instructions="$sudo_cmd systemctl stop $current_service" + start_instructions="$sudo_cmd systemctl start $current_service" + elif /sbin/init --version 2>&1 | grep -q upstart; then + # Try to detect Upstart, this works most of the times but still a best effort + restart_cmd="$sudo_cmd stop $current_service || true ; sleep 2s ; $sudo_cmd start $current_service" + stop_instructions="$sudo_cmd stop $current_service" + start_instructions="$sudo_cmd start $current_service" + fi - $start_instructions + if [ $no_start ]; then + printf "\033[34m\n The newly installed version of the ${nice_current_flavor} will not be started. + You will have to do it manually using the following command: -\033[0m\n" - exit -fi + $start_instructions\033[0m\n\n" -printf "\033[34m* Starting the $nice_flavor...\n\033[0m\n" -eval "$restart_cmd" + continue + fi + printf "\033[34m* Starting the ${nice_current_flavor}...\n\033[0m\n" + eval "$restart_cmd" -# Metrics are submitted, echo some instructions and exit -printf "\033[32m -Your $nice_flavor is running and functioning properly. It will continue -to run in the background and submit metrics to Datadog. + # Metrics are submitted, echo some instructions and exit + printf "\033[32m Your ${nice_current_flavor} is running and functioning properly.\n\033[0m" -If you ever want to stop the $nice_flavor, run: + if [[ "${monitoring_services[*]}" =~ ${current_service} ]]; then + printf "\033[32m It will continue to run in the background and submit metrics to Datadog.\n\033[0m" + fi - $stop_instructions + printf "\033[32m If you ever want to stop the ${nice_current_flavor}, run: -And to run it again run: + $stop_instructions - $start_instructions + And to run it again run: -\033[0m" + $start_instructions\033[0m\n\n" +done diff --git a/cmd/agent/subcommands/check/command.go b/cmd/agent/subcommands/check/command.go index 557670cf06497..d65f29f20b4b0 100644 --- a/cmd/agent/subcommands/check/command.go +++ b/cmd/agent/subcommands/check/command.go @@ -17,9 +17,10 @@ import ( func Commands(globalParams *command.GlobalParams) []*cobra.Command { cmd := check.MakeCommand(func() check.GlobalParams { return check.GlobalParams{ - ConfFilePath: globalParams.ConfFilePath, - ConfigName: "datadog", - LoggerName: "CORE", + ConfFilePath: globalParams.ConfFilePath, + SysProbeConfFilePath: globalParams.SysProbeConfFilePath, + ConfigName: "datadog", + LoggerName: "CORE", } }) diff --git a/cmd/agent/subcommands/flare/command.go b/cmd/agent/subcommands/flare/command.go index 2fe63ab36b60b..b552389581b38 100644 --- a/cmd/agent/subcommands/flare/command.go +++ b/cmd/agent/subcommands/flare/command.go @@ -24,6 +24,7 @@ import ( "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/flare" "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/comp/core/sysprobeconfig" "github.com/DataDog/datadog-agent/pkg/api/util" pkgconfig "github.com/DataDog/datadog-agent/pkg/config" pkgflare "github.com/DataDog/datadog-agent/pkg/flare" @@ -66,15 +67,14 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { config.WithSecurityAgentConfigFilePaths([]string{ path.Join(common.DefaultConfPath, "security-agent.yaml"), }), - config.WithConfigLoadSecurityAgent(true), - config.WithSysProbeConfFilePath(globalParams.SysProbeConfFilePath), - config.WithConfigLoadSysProbe(true)) + config.WithConfigLoadSecurityAgent(true)) return fxutil.OneShot(makeFlare, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - ConfigParams: config, - LogParams: log.LogForOneShot("CORE", "off", false), + ConfigParams: config, + SysprobeConfigParams: sysprobeconfig.NewParams(sysprobeconfig.WithSysProbeConfFilePath(globalParams.SysProbeConfFilePath)), + LogParams: log.LogForOneShot("CORE", "off", false), }), core.Bundle, ) @@ -171,7 +171,7 @@ func serviceProfileCollector(service string, portConfig string, seconds int) age } } -func makeFlare(flare flare.Component, log log.Component, config config.Component, cliParams *cliParams) error { +func makeFlare(flare flare.Component, log log.Component, config config.Component, sysprobeconfig sysprobeconfig.Component, cliParams *cliParams) error { var ( profile pkgflare.ProfileData err error diff --git a/cmd/agent/subcommands/jmx/command.go b/cmd/agent/subcommands/jmx/command.go index 7db96d2964307..1720a08e874da 100644 --- a/cmd/agent/subcommands/jmx/command.go +++ b/cmd/agent/subcommands/jmx/command.go @@ -45,6 +45,7 @@ type cliParams struct { saveFlare bool discoveryTimeout uint discoveryMinInstances uint + instanceFilter string } // Commands returns a slice of subcommands for the 'agent' command. @@ -63,6 +64,7 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { jmxCmd.PersistentFlags().UintVarP(&cliParams.discoveryTimeout, "discovery-timeout", "", 5, "max retry duration until Autodiscovery resolves the check template (in seconds)") jmxCmd.PersistentFlags().UintVarP(&discoveryRetryInterval, "discovery-retry-interval", "", 1, "(unused)") jmxCmd.PersistentFlags().UintVarP(&cliParams.discoveryMinInstances, "discovery-min-instances", "", 1, "minimum number of config instances to be discovered before running the check(s)") + jmxCmd.PersistentFlags().StringVarP(&cliParams.instanceFilter, "instance-filter", "", "", "filter instances using jq style syntax, example: --instance-filter '.ip_address == \"127.0.0.51\"'") // All subcommands use the same provided components, with a different // oneShot callback, and with some complex derivation of the @@ -241,11 +243,14 @@ func runJmxCommandConsole(log log.Component, config config.Component, cliParams context.Background(), time.Duration(cliParams.discoveryTimeout)*time.Second) var allConfigs []integration.Config if len(cliParams.cliSelectedChecks) == 0 { - allConfigs = common.WaitForAllConfigsFromAD(waitCtx) + allConfigs, err = common.WaitForAllConfigsFromAD(waitCtx) } else { - allConfigs = common.WaitForConfigsFromAD(waitCtx, cliParams.cliSelectedChecks, int(cliParams.discoveryMinInstances)) + allConfigs, err = common.WaitForConfigsFromAD(waitCtx, cliParams.cliSelectedChecks, int(cliParams.discoveryMinInstances), cliParams.instanceFilter) } cancelTimeout() + if err != nil { + return err + } err = standalone.ExecJMXCommandConsole(cliParams.command, cliParams.cliSelectedChecks, cliParams.jmxLogLevel, allConfigs) diff --git a/cmd/agent/subcommands/run/command.go b/cmd/agent/subcommands/run/command.go index 07a6399a871a6..5e18377fe6b3a 100644 --- a/cmd/agent/subcommands/run/command.go +++ b/cmd/agent/subcommands/run/command.go @@ -9,17 +9,15 @@ package run import ( "context" "errors" + _ "expvar" // Blank import used because this isn't directly used in this file "fmt" "net/http" + _ "net/http/pprof" // Blank import used because this isn't directly used in this file "os" "os/signal" "runtime" "syscall" - _ "expvar" // Blank import used because this isn't directly used in this file - - _ "net/http/pprof" // Blank import used because this isn't directly used in this file - "github.com/spf13/cobra" "go.uber.org/fx" "gopkg.in/DataDog/dd-trace-go.v1/profiler" @@ -32,10 +30,12 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/gui" "github.com/DataDog/datadog-agent/cmd/agent/subcommands/run/internal/clcrunnerapi" "github.com/DataDog/datadog-agent/cmd/manager" + sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/flare" "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/comp/core/sysprobeconfig" "github.com/DataDog/datadog-agent/pkg/aggregator" "github.com/DataDog/datadog-agent/pkg/api/healthprobe" "github.com/DataDog/datadog-agent/pkg/cloudfoundry/containertagger" @@ -71,6 +71,7 @@ import ( _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/ksm" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/kubernetesapiserver" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator" + _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/containerimage" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/containerlifecycle" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/containers/containerd" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/containers/cri" @@ -80,6 +81,8 @@ import ( _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/embed" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/net" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/nvidia/jetson" + _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/oracle" + _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/sbom" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/system/cpu" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/system/disk" @@ -116,8 +119,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { return fxutil.OneShot(run, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - ConfigParams: config.NewAgentParamsWithSecrets(globalParams.ConfFilePath), - LogParams: log.LogForDaemon("CORE", "log_file", common.DefaultLogFile)}), + ConfigParams: config.NewAgentParamsWithSecrets(globalParams.ConfFilePath), + SysprobeConfigParams: sysprobeconfig.NewParams(sysprobeconfig.WithSysProbeConfFilePath(globalParams.SysProbeConfFilePath)), + LogParams: log.LogForDaemon("CORE", "log_file", common.DefaultLogFile)}), core.Bundle, ) } @@ -143,7 +147,7 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { // run starts the main loop. // // This is exported because it also used from the deprecated `agent start` command. -func run(log log.Component, config config.Component, flare flare.Component, cliParams *cliParams) error { +func run(log log.Component, config config.Component, flare flare.Component, sysprobeconfig sysprobeconfig.Component, cliParams *cliParams) error { defer func() { stopAgent(cliParams) }() @@ -246,7 +250,7 @@ func startAgent(cliParams *cliParams, flare flare.Component) error { pkglog.Infof("Starting Datadog Agent v%v", version.AgentVersion) } - if err := util.SetupCoreDump(); err != nil { + if err := util.SetupCoreDump(pkgconfig.Datadog); err != nil { pkglog.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) } @@ -261,7 +265,7 @@ func startAgent(cliParams *cliParams, flare flare.Component) error { } // Setup Internal Profiling - common.SetupInternalProfiling() + common.SetupInternalProfiling(pkgconfig.Datadog, "") // Setup expvar server telemetryHandler := telemetry.Handler() @@ -297,7 +301,7 @@ func startAgent(cliParams *cliParams, flare flare.Component) error { pkglog.Infof("pid '%d' written to pid file '%s'", os.Getpid(), cliParams.pidfilePath) } - err = manager.ConfigureAutoExit(common.MainCtx) + err = manager.ConfigureAutoExit(common.MainCtx, pkgconfig.Datadog) if err != nil { return pkglog.Errorf("Unable to configure auto-exit, err: %v", err) } @@ -374,6 +378,8 @@ func startAgent(cliParams *cliParams, flare flare.Component) error { opts := aggregator.DefaultAgentDemultiplexerOptions(forwarderOpts) opts.EnableNoAggregationPipeline = pkgconfig.Datadog.GetBool("dogstatsd_no_aggregation_pipeline") opts.UseContainerLifecycleForwarder = pkgconfig.Datadog.GetBool("container_lifecycle.enabled") + opts.UseContainerImageForwarder = pkgconfig.Datadog.GetBool("container_image.enabled") + opts.UseSBOMForwarder = pkgconfig.Datadog.GetBool("sbom.enabled") demux = aggregator.InitAndStartAgentDemultiplexer(opts, hostnameDetected) // Setup stats telemetry handler @@ -402,7 +408,11 @@ func startAgent(cliParams *cliParams, flare flare.Component) error { } } - if err = common.SetupSystemProbeConfig(cliParams.GlobalParams.SysProbeConfFilePath); err != nil { + // FIXME: this is necessary to fix windows agent starting as a service, since it is bypassing fx providing + // sysprobeconfig via the cobra run command. If this is removed, the system-probe config is not initialized + // correctly, and the agent does not correctly determine if system-probe is enabled. Ultimately causing the + // system-probe service to not start. + if _, err := sysconfig.New(cliParams.SysProbeConfFilePath); err != nil { pkglog.Infof("System probe config not found, disabling pulling system probe info in the status page: %v", err) } diff --git a/cmd/agent/subcommands/run/dependent_services.go b/cmd/agent/subcommands/run/dependent_services.go index e36f317e82870..75a255afa3151 100644 --- a/cmd/agent/subcommands/run/dependent_services.go +++ b/cmd/agent/subcommands/run/dependent_services.go @@ -6,7 +6,6 @@ package run import ( - "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -14,8 +13,8 @@ import ( // IsEnabled checks to see if a given service should be started func (s *Servicedef) IsEnabled() bool { - for _, configKey := range s.configKeys { - if config.Datadog.GetBool(configKey) { + for configKey, cfg := range s.configKeys { + if cfg.GetBool(configKey) { return true } } diff --git a/cmd/agent/subcommands/run/dependent_services_nix.go b/cmd/agent/subcommands/run/dependent_services_nix.go index c3c8a5821eceb..6f165ccb693f5 100644 --- a/cmd/agent/subcommands/run/dependent_services_nix.go +++ b/cmd/agent/subcommands/run/dependent_services_nix.go @@ -7,13 +7,15 @@ package run +import "github.com/DataDog/datadog-agent/pkg/config" + // Servicedef defines a service type Servicedef struct { name string - configKeys []string + configKeys map[string]config.Config } -var subservices = []Servicedef{} +var subservices []Servicedef // Start starts the service func (s *Servicedef) Start() error { diff --git a/cmd/agent/subcommands/run/dependent_services_windows.go b/cmd/agent/subcommands/run/dependent_services_windows.go index 97a83dde6d093..6682fa42f551b 100644 --- a/cmd/agent/subcommands/run/dependent_services_windows.go +++ b/cmd/agent/subcommands/run/dependent_services_windows.go @@ -14,6 +14,7 @@ import ( "golang.org/x/sys/windows" "golang.org/x/sys/windows/svc/mgr" + "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -22,7 +23,7 @@ type serviceInitFunc func() (err error) // Servicedef defines a service type Servicedef struct { name string - configKeys []string + configKeys map[string]config.Config serviceName string serviceInit serviceInitFunc @@ -30,35 +31,39 @@ type Servicedef struct { var subservices = []Servicedef{ { - name: "apm", - configKeys: []string{"apm_config.enabled"}, + name: "apm", + configKeys: map[string]config.Config{ + "apm_config.enabled": config.Datadog, + }, serviceName: "datadog-trace-agent", serviceInit: apmInit, }, { name: "process", - configKeys: []string{ - "process_config.enabled", - "process_config.process_collection.enabled", - "process_config.container_collection.enabled", - "process_config.process_discovery.enabled", - "network_config.enabled", - "system_probe_config.enabled", + configKeys: map[string]config.Config{ + "process_config.enabled": config.Datadog, + "process_config.process_collection.enabled": config.Datadog, + "process_config.container_collection.enabled": config.Datadog, + "process_config.process_discovery.enabled": config.Datadog, + "network_config.enabled": config.SystemProbe, + "system_probe_config.enabled": config.SystemProbe, }, serviceName: "datadog-process-agent", serviceInit: processInit, }, { - name: "sysprobe", - configKeys: []string{"system_probe_config.enabled", "network_config.enabled"}, + name: "sysprobe", + configKeys: map[string]config.Config{ + "network_config.enabled": config.SystemProbe, + "system_probe_config.enabled": config.SystemProbe, + }, serviceName: "datadog-system-probe", serviceInit: sysprobeInit, - }} + }, +} func apmInit() error { - return nil - } func processInit() error { @@ -80,7 +85,7 @@ func (s *Servicedef) Start() error { } /* - * default go impolementations of mgr.Connect and mgr.OpenService use way too + * default go implementations of mgr.Connect and mgr.OpenService use way too * open permissions by default. Use those structures so the other methods * work properly, but initialize them here using restrictive enough permissions * that we can actually open/start the service when running as non-root. @@ -93,7 +98,13 @@ func (s *Servicedef) Start() error { m := &mgr.Mgr{Handle: h} defer m.Disconnect() - hSvc, err := windows.OpenService(m.Handle, syscall.StringToUTF16Ptr(s.serviceName), + snptr, err := syscall.UTF16PtrFromString(s.serviceName) + if err != nil { + log.Warnf("Failed to get service name %v", err) + return fmt.Errorf("could not create service name pointer: %s", err) + } + + hSvc, err := windows.OpenService(m.Handle, snptr, windows.SERVICE_START|windows.SERVICE_STOP) if err != nil { log.Warnf("Failed to open service %v", err) diff --git a/cmd/agent/subcommands/run/settings.go b/cmd/agent/subcommands/run/settings.go index 6a869ea3fcbcd..4c36c81011ba0 100644 --- a/cmd/agent/subcommands/run/settings.go +++ b/cmd/agent/subcommands/run/settings.go @@ -34,5 +34,5 @@ func initRuntimeSettings() error { if err := commonsettings.RegisterRuntimeSetting(commonsettings.ProfilingGoroutines("internal_profiling_goroutines")); err != nil { return err } - return commonsettings.RegisterRuntimeSetting(commonsettings.ProfilingRuntimeSetting("internal_profiling")) + return commonsettings.RegisterRuntimeSetting(commonsettings.ProfilingRuntimeSetting{SettingName: "internal_profiling", Service: "datadog-agent"}) } diff --git a/cmd/agent/subcommands/status/command.go b/cmd/agent/subcommands/status/command.go index 2c24f72178a3b..e319cd80aec23 100644 --- a/cmd/agent/subcommands/status/command.go +++ b/cmd/agent/subcommands/status/command.go @@ -21,6 +21,7 @@ import ( "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/comp/core/sysprobeconfig" "github.com/DataDog/datadog-agent/pkg/api/util" pkgconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/status" @@ -63,8 +64,9 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { return fxutil.OneShot(statusCmd, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath, config.WithConfigLoadSysProbe(true)), - LogParams: log.LogForOneShot("CORE", "off", true)}), + ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), + SysprobeConfigParams: sysprobeconfig.NewParams(sysprobeconfig.WithSysProbeConfFilePath(globalParams.SysProbeConfFilePath)), + LogParams: log.LogForOneShot("CORE", "off", true)}), core.Bundle, ) }, @@ -127,7 +129,7 @@ func redactError(unscrubbedError error) error { return scrubbedError } -func statusCmd(log log.Component, config config.Component, cliParams *cliParams) error { +func statusCmd(log log.Component, config config.Component, sysprobeconfig sysprobeconfig.Component, cliParams *cliParams) error { return redactError(requestStatus(config, cliParams)) } diff --git a/cmd/agent/subcommands/status/command_test.go b/cmd/agent/subcommands/status/command_test.go index aaa88530731c2..5ff9db627a261 100644 --- a/cmd/agent/subcommands/status/command_test.go +++ b/cmd/agent/subcommands/status/command_test.go @@ -26,7 +26,6 @@ func TestStatusCommand(t *testing.T) { require.Equal(t, []string{}, cliParams.args) require.Equal(t, true, cliParams.jsonStatus) require.Equal(t, false, coreParams.ConfigLoadSecrets()) - require.Equal(t, true, coreParams.ConfigLoadSysProbe()) }) } @@ -40,6 +39,5 @@ func TestComponentStatusCommand(t *testing.T) { require.Equal(t, []string{"abc"}, cliParams.args) require.Equal(t, false, cliParams.jsonStatus) require.Equal(t, false, coreParams.ConfigLoadSecrets()) - require.Equal(t, false, coreParams.ConfigLoadSysProbe()) }) } diff --git a/cmd/agent/subcommands/taggerlist/command.go b/cmd/agent/subcommands/taggerlist/command.go index 275ae1594f181..41d8dcbff3950 100644 --- a/cmd/agent/subcommands/taggerlist/command.go +++ b/cmd/agent/subcommands/taggerlist/command.go @@ -7,70 +7,21 @@ package taggerlist import ( - "fmt" - - "go.uber.org/fx" - "github.com/DataDog/datadog-agent/cmd/agent/command" - "github.com/DataDog/datadog-agent/comp/core" - "github.com/DataDog/datadog-agent/comp/core/config" - "github.com/DataDog/datadog-agent/comp/core/log" - "github.com/DataDog/datadog-agent/pkg/api/util" - pkgconfig "github.com/DataDog/datadog-agent/pkg/config" - tagger_api "github.com/DataDog/datadog-agent/pkg/tagger/api" - "github.com/DataDog/datadog-agent/pkg/util/fxutil" + taggerlistcmd "github.com/DataDog/datadog-agent/pkg/cli/subcommands/taggerlist" - "github.com/fatih/color" "github.com/spf13/cobra" ) -// cliParams are the command-line arguments for this subcommand -type cliParams struct { - *command.GlobalParams -} - // Commands returns a slice of subcommands for the 'agent' command. func Commands(globalParams *command.GlobalParams) []*cobra.Command { - cliParams := &cliParams{ - GlobalParams: globalParams, - } - taggerListCommand := &cobra.Command{ - Use: "tagger-list", - Short: "Print the tagger content of a running agent", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { - return fxutil.OneShot(taggerList, - fx.Supply(cliParams), - fx.Supply(core.BundleParams{ - ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), - LogParams: log.LogForOneShot("CORE", "off", true)}), - core.Bundle, - ) - }, - } - - return []*cobra.Command{taggerListCommand} -} - -func taggerList(log log.Component, config config.Component, cliParams *cliParams) error { - // Set session token - if err := util.SetAuthToken(); err != nil { - return err - } - - url, err := getTaggerURL(config) - if err != nil { - return err - } - - return tagger_api.GetTaggerList(color.Output, url) -} - -func getTaggerURL(config config.Component) (string, error) { - ipcAddress, err := pkgconfig.GetIPCAddress() - if err != nil { - return "", err - } - - return fmt.Sprintf("https://%v:%v/agent/tagger-list", ipcAddress, config.GetInt("cmd_port")), nil + cmd := taggerlistcmd.MakeCommand(func() taggerlistcmd.GlobalParams { + return taggerlistcmd.GlobalParams{ + ConfFilePath: globalParams.ConfFilePath, + ConfigName: "datadog", + LoggerName: "CORE", + } + }) + + return []*cobra.Command{cmd} } diff --git a/cmd/agent/subcommands/workloadlist/command.go b/cmd/agent/subcommands/workloadlist/command.go index 58f7639d76439..311de45659ce2 100644 --- a/cmd/agent/subcommands/workloadlist/command.go +++ b/cmd/agent/subcommands/workloadlist/command.go @@ -7,92 +7,21 @@ package workloadlist import ( - "encoding/json" - "fmt" - - "go.uber.org/fx" - "github.com/DataDog/datadog-agent/cmd/agent/command" - "github.com/DataDog/datadog-agent/comp/core" - "github.com/DataDog/datadog-agent/comp/core/config" - "github.com/DataDog/datadog-agent/comp/core/log" - "github.com/DataDog/datadog-agent/pkg/api/util" - pkgconfig "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/util/fxutil" - "github.com/DataDog/datadog-agent/pkg/workloadmeta" + workloadlistcmd "github.com/DataDog/datadog-agent/pkg/cli/subcommands/workloadlist" - "github.com/fatih/color" "github.com/spf13/cobra" ) -// cliParams are the command-line arguments for this subcommand -type cliParams struct { - *command.GlobalParams - - verboseList bool -} - // Commands returns a slice of subcommands for the 'agent' command. func Commands(globalParams *command.GlobalParams) []*cobra.Command { - cliParams := &cliParams{ - GlobalParams: globalParams, - } - workloadListCommand := &cobra.Command{ - Use: "workload-list", - Short: "Print the workload content of a running agent", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { - return fxutil.OneShot(workloadList, - fx.Supply(cliParams), - fx.Supply(core.BundleParams{ - ConfigParams: config.NewAgentParamsWithoutSecrets(globalParams.ConfFilePath), - LogParams: log.LogForOneShot("CORE", "off", true)}), - core.Bundle, - ) - }, - } - workloadListCommand.Flags().BoolVarP(&cliParams.verboseList, "verbose", "v", false, "print out a full dump of the workload store") - - return []*cobra.Command{workloadListCommand} -} - -func workloadList(log log.Component, config config.Component, cliParams *cliParams) error { - c := util.GetClient(false) // FIX: get certificates right then make this true - - // Set session token - err := util.SetAuthToken() - if err != nil { - return err - } - ipcAddress, err := pkgconfig.GetIPCAddress() - if err != nil { - return err - } - - r, err := util.DoGet(c, workloadURL(cliParams.verboseList, ipcAddress, config.GetInt("cmd_port")), util.LeaveConnectionOpen) - if err != nil { - if r != nil && string(r) != "" { - fmt.Fprintf(color.Output, "The agent ran into an error while getting the workload store information: %s\n", string(r)) - } else { - fmt.Fprintf(color.Output, "Failed to query the agent (running?): %s\n", err) + cmd := workloadlistcmd.MakeCommand(func() workloadlistcmd.GlobalParams { + return workloadlistcmd.GlobalParams{ + ConfFilePath: globalParams.ConfFilePath, + ConfigName: "datadog", + LoggerName: "CORE", } - } - - workload := workloadmeta.WorkloadDumpResponse{} - err = json.Unmarshal(r, &workload) - if err != nil { - return err - } - - workload.Write(color.Output) - - return nil -} - -func workloadURL(verbose bool, address string, port int) string { - if verbose { - return fmt.Sprintf("https://%v:%v/agent/workload-list/verbose", address, port) - } + }) - return fmt.Sprintf("https://%v:%v/agent/workload-list/short", address, port) + return []*cobra.Command{cmd} } diff --git a/cmd/agent/windows/controlsvc/controlsvc.go b/cmd/agent/windows/controlsvc/controlsvc.go index 689ab1484addb..9d18eb1564235 100644 --- a/cmd/agent/windows/controlsvc/controlsvc.go +++ b/cmd/agent/windows/controlsvc/controlsvc.go @@ -10,215 +10,21 @@ package controlsvc import ( - "bytes" - "encoding/binary" - "fmt" - "time" - "unsafe" - - "golang.org/x/sys/windows" - "golang.org/x/sys/windows/svc" - "golang.org/x/sys/windows/svc/mgr" - "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/winutil" - - "github.com/DataDog/datadog-agent/pkg/util/log" -) - -var ( - modadvapi32 = windows.NewLazyDLL("advapi32.dll") - - procEnumDependentServices = modadvapi32.NewProc("EnumDependentServicesW") -) - -type enumServiceState uint32 - -//nolint:deadcode,unused -const ( - enumServiceActive = enumServiceState(0x1) // START_PENDING, STOP_PENDING, RUNNING - // continue_pending, pause_pending, paused - enumServiceInactive = enumServiceState(0x02) // STOPPED - enumServiceAll = enumServiceState(0x03) // all of the above ) // StartService starts the agent service via the Service Control Manager func StartService() error { - /* - * default go implementations of mgr.Connect and mgr.OpenService use way too - * open permissions by default. Use those structures so the other methods - * work properly, but initialize them here using restrictive enough permissions - * that we can actually open/start the service when running as non-root. - */ - h, err := windows.OpenSCManager(nil, nil, windows.SC_MANAGER_CONNECT) - if err != nil { - log.Warnf("Failed to connect to scm %v", err) - return err - } - m := &mgr.Mgr{Handle: h} - defer m.Disconnect() - - hSvc, err := windows.OpenService(m.Handle, windows.StringToUTF16Ptr(config.ServiceName), - windows.SERVICE_START|windows.SERVICE_STOP) - if err != nil { - log.Warnf("Failed to open service %v", err) - return fmt.Errorf("could not access service: %v", err) - } - scm := &mgr.Service{Name: config.ServiceName, Handle: hSvc} - defer scm.Close() - err = scm.Start("is", "manual-started") - if err != nil { - log.Warnf("Failed to start service %v", err) - return fmt.Errorf("could not start service: %v", err) - } - return nil + return winutil.StartService(config.ServiceName) } -// RestartService restarts the agent service by calling StopService and StartService. +// RestartService restarts the agent service by calling StopService and StartService func RestartService() error { - var err error - if err = StopService(); err == nil { - err = StartService() - } - return err + return winutil.RestartService(config.ServiceName) } // StopService stops the agent service via the Service Control Manager func StopService() error { - return stopService(config.ServiceName, true) -} - -// stopService stops the named service. -// -// If withDeps is true, then dependents of this service are stopped as well. -func stopService(serviceName string, withDeps bool) error { - /* - * default go impolementations of mgr.Connect and mgr.OpenService use way too - * open permissions by default. Use those structures so the other methods - * work properly, but initialize them here using restrictive enough permissions - * that we can actually open/start the service when running as non-root. - */ - h, err := windows.OpenSCManager(nil, nil, windows.SC_MANAGER_CONNECT) - if err != nil { - log.Warnf("Failed to connect to scm %v", err) - return err - } - m := &mgr.Mgr{Handle: h} - defer m.Disconnect() - - hSvc, err := windows.OpenService(m.Handle, windows.StringToUTF16Ptr(serviceName), - windows.SERVICE_START|windows.SERVICE_STOP|windows.SERVICE_QUERY_STATUS|windows.SERVICE_ENUMERATE_DEPENDENTS) - if err != nil { - log.Warnf("Failed to open service %v", err) - return fmt.Errorf("could not access service: %v", err) - } - s := &mgr.Service{Name: serviceName, Handle: hSvc} - defer s.Close() - if withDeps { - deps, err := enumDependentServices(s.Handle, enumServiceActive) - if err != nil { - log.Warnf("Failed to enumerate dependencies; skipping %v", err) - } else { - for _, dep := range deps { - log.Debugf("Stopping service %s", dep.serviceName) - // recurse to this service, but only once - err = stopService(dep.serviceName, false) - if err != nil { - log.Warnf("Failed to stop service %v: %v", dep.serviceName, err) - return fmt.Errorf("could not stop service %v: %v", dep.serviceName, err) - } - } - } - } - status, err := s.Control(svc.Stop) - if err != nil { - return fmt.Errorf("could not send control=%d: %v", svc.Stop, err) - } - timeout := time.Now().Add(10 * time.Second) - for status.State != svc.Stopped { - if timeout.Before(time.Now()) { - return fmt.Errorf("timeout waiting for service to go to state=%d", svc.Stopped) - } - time.Sleep(300 * time.Millisecond) - status, err = s.Query() - if err != nil { - return fmt.Errorf("could not retrieve service status: %v", err) - } - } - return nil -} - -// ServiceStatus reports information pertaining to enumerated services -// only exported so binary.Read works -type ServiceStatus struct { - DwServiceType uint32 - DwCurrentState uint32 - DwControlsAccepted uint32 - DwWin32ExitCode uint32 - DwServiceSpecificExitCode uint32 - DwCheckPoint uint32 - DwWaitHint uint32 -} - -// EnumServiceStatus complete enumerated service information -// only exported so binary.Read works -type EnumServiceStatus struct { - serviceName string - displayName string - status ServiceStatus -} - -type internalEnumServiceStatus struct { - ServiceName uint64 // offset from beginning of buffer - DisplayName uint64 // offset from beginning of buffer. - Status ServiceStatus - Padding uint32 // structure is qword aligned. - -} - -func enumDependentServices(h windows.Handle, state enumServiceState) (services []EnumServiceStatus, err error) { - services = make([]EnumServiceStatus, 0) - var bufsz uint32 - var count uint32 - _, _, err = procEnumDependentServices.Call(uintptr(h), - uintptr(state), - uintptr(0), - uintptr(0), // current buffer size is zero - uintptr(unsafe.Pointer(&bufsz)), - uintptr(unsafe.Pointer(&count))) - - if err != error(windows.ERROR_MORE_DATA) { - log.Warnf("Error getting buffer %v", err) - return - } - servicearray := make([]uint8, bufsz) - ret, _, err := procEnumDependentServices.Call(uintptr(h), - uintptr(state), - uintptr(unsafe.Pointer(&servicearray[0])), - uintptr(bufsz), - uintptr(unsafe.Pointer(&bufsz)), - uintptr(unsafe.Pointer(&count))) - if ret == 0 { - log.Warnf("Error getting deps %d %v", int(ret), err) - return - } - // now get to parse out the C structure into go. - var ess internalEnumServiceStatus - baseptr := uintptr(unsafe.Pointer(&servicearray[0])) - buf := bytes.NewReader(servicearray) - for i := uint32(0); i < count; i++ { - - err = binary.Read(buf, binary.LittleEndian, &ess) - if err != nil { - break - } - - ess.ServiceName = ess.ServiceName - uint64(baseptr) - ess.DisplayName = ess.DisplayName - uint64(baseptr) - ss := EnumServiceStatus{serviceName: winutil.ConvertWindowsString(servicearray[ess.ServiceName:]), - displayName: winutil.ConvertWindowsString(servicearray[ess.DisplayName:]), - status: ess.Status} - services = append(services, ss) - } - return + return winutil.StopService(config.ServiceName) } diff --git a/cmd/cluster-agent-cloudfoundry/app/app.go b/cmd/cluster-agent-cloudfoundry/app/app.go index a1c5d2865d858..f9204d34d0cef 100644 --- a/cmd/cluster-agent-cloudfoundry/app/app.go +++ b/cmd/cluster-agent-cloudfoundry/app/app.go @@ -24,9 +24,10 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/common" "github.com/DataDog/datadog-agent/cmd/cluster-agent/api" dcav1 "github.com/DataDog/datadog-agent/cmd/cluster-agent/api/v1" - "github.com/DataDog/datadog-agent/cmd/cluster-agent/commands" "github.com/DataDog/datadog-agent/pkg/aggregator" "github.com/DataDog/datadog-agent/pkg/api/healthprobe" + clustercheckscmd "github.com/DataDog/datadog-agent/pkg/cli/subcommands/clusterchecks" + "github.com/DataDog/datadog-agent/pkg/cli/subcommands/dcaconfigcheck" "github.com/DataDog/datadog-agent/pkg/clusteragent" "github.com/DataDog/datadog-agent/pkg/clusteragent/clusterchecks" "github.com/DataDog/datadog-agent/pkg/collector" @@ -98,8 +99,18 @@ func init() { // attach the commands to the root ClusterAgentCmd.AddCommand(runCmd) ClusterAgentCmd.AddCommand(versionCmd) - ClusterAgentCmd.AddCommand(commands.GetClusterChecksCobraCmd(&flagNoColor, &confPath, loggerName)) - ClusterAgentCmd.AddCommand(commands.GetConfigCheckCobraCmd(&flagNoColor, &confPath, loggerName)) + + ClusterAgentCmd.AddCommand(clustercheckscmd.MakeCommand(func() clustercheckscmd.GlobalParams { + return clustercheckscmd.GlobalParams{ + ConfFilePath: confPath, + } + })) + + ClusterAgentCmd.AddCommand(dcaconfigcheck.MakeCommand(func() dcaconfigcheck.GlobalParams { + return dcaconfigcheck.GlobalParams{ + ConfFilePath: confPath, + } + })) ClusterAgentCmd.PersistentFlags().StringVarP(&confPath, "cfgpath", "c", "", "path to directory containing datadog.yaml") ClusterAgentCmd.PersistentFlags().BoolVarP(&flagNoColor, "no-color", "n", false, "disable color output") diff --git a/cmd/cluster-agent/api/agent/agent.go b/cmd/cluster-agent/api/agent/agent.go index c96b9cf0f1ee8..e9eade30588a3 100644 --- a/cmd/cluster-agent/api/agent/agent.go +++ b/cmd/cluster-agent/api/agent/agent.go @@ -10,7 +10,7 @@ package agent import ( "encoding/json" - "fmt" + "errors" "net/http" "sort" @@ -25,9 +25,12 @@ import ( "github.com/DataDog/datadog-agent/pkg/flare" "github.com/DataDog/datadog-agent/pkg/status" "github.com/DataDog/datadog-agent/pkg/status/health" + "github.com/DataDog/datadog-agent/pkg/tagger" + "github.com/DataDog/datadog-agent/pkg/tagger/collectors" "github.com/DataDog/datadog-agent/pkg/util/hostname" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/version" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" ) // SetupHandlers adds the specific handlers for cluster agent endpoints @@ -39,10 +42,12 @@ func SetupHandlers(r *mux.Router) { r.HandleFunc("/status", getStatus).Methods("GET") r.HandleFunc("/status/health", getHealth).Methods("GET") r.HandleFunc("/config-check", getConfigCheck).Methods("GET") - r.HandleFunc("/config", settingshttp.Server.GetFull("")).Methods("GET") + r.HandleFunc("/config", settingshttp.Server.GetFullDatadogConfig("")).Methods("GET") r.HandleFunc("/config/list-runtime", settingshttp.Server.ListConfigurable).Methods("GET") r.HandleFunc("/config/{setting}", settingshttp.Server.GetValue).Methods("GET") r.HandleFunc("/config/{setting}", settingshttp.Server.SetValue).Methods("POST") + r.HandleFunc("/tagger-list", getTaggerList).Methods("GET") + r.HandleFunc("/workload-list", getWorkloadList).Methods("GET") } func getStatus(w http.ResponseWriter, r *http.Request) { @@ -51,13 +56,13 @@ func getStatus(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") if err != nil { log.Errorf("Error getting status. Error: %v, Status: %v", err, s) - http.Error(w, fmt.Sprintf(`{"error":%q}`, err.Error()), 500) + setJSONError(w, err, 500) return } jsonStats, err := json.Marshal(s) if err != nil { log.Errorf("Error marshalling status. Error: %v, Status: %v", err, s) - http.Error(w, fmt.Sprintf(`{"error":%q}`, err.Error()), 500) + setJSONError(w, err, 500) return } w.Write(jsonStats) @@ -73,8 +78,7 @@ func getHealth(w http.ResponseWriter, r *http.Request) { jsonHealth, err := json.Marshal(h) if err != nil { log.Errorf("Error marshalling status. Error: %v, Status: %v", err, h) - body, _ := json.Marshal(map[string]string{"error": err.Error()}) - http.Error(w, string(body), 500) + setJSONError(w, err, 500) return } @@ -92,12 +96,12 @@ func getVersion(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") av, err := version.Agent() if err != nil { - http.Error(w, fmt.Sprintf(`{"error":%q}`, err.Error()), 500) + setJSONError(w, err, 500) return } j, err := json.Marshal(av) if err != nil { - http.Error(w, fmt.Sprintf(`{"error":%q}`, err.Error()), 500) + setJSONError(w, err, 500) return } w.Write(j) @@ -112,7 +116,7 @@ func getHostname(w http.ResponseWriter, r *http.Request) { } j, err := json.Marshal(hname) if err != nil { - http.Error(w, fmt.Sprintf(`{"error":%q}`, err.Error()), 500) + setJSONError(w, err, 500) return } w.Write(j) @@ -132,7 +136,8 @@ func makeFlare(w http.ResponseWriter, r *http.Request) { } else { log.Warnf("The flare failed to be created") } - http.Error(w, err.Error(), 500) + setJSONError(w, err, 500) + return } w.Write([]byte(filePath)) } @@ -142,8 +147,7 @@ func getConfigCheck(w http.ResponseWriter, r *http.Request) { if common.AC == nil { log.Errorf("Trying to use /config-check before the agent has been initialized.") - body, _ := json.Marshal(map[string]string{"error": "agent not initialized"}) - http.Error(w, string(body), 503) + setJSONError(w, errors.New("agent not initialized"), 503) return } @@ -159,10 +163,45 @@ func getConfigCheck(w http.ResponseWriter, r *http.Request) { jsonConfig, err := json.Marshal(response) if err != nil { log.Errorf("Unable to marshal config check response: %s", err) - body, _ := json.Marshal(map[string]string{"error": err.Error()}) - http.Error(w, string(body), 500) + setJSONError(w, err, 500) return } w.Write(jsonConfig) } + +func getTaggerList(w http.ResponseWriter, r *http.Request) { + response := tagger.List(collectors.HighCardinality) + + jsonTags, err := json.Marshal(response) + if err != nil { + setJSONError(w, log.Errorf("Unable to marshal tagger list response: %s", err), 500) + return + } + w.Write(jsonTags) +} + +func getWorkloadList(w http.ResponseWriter, r *http.Request) { + verbose := false + params := r.URL.Query() + if v, ok := params["verbose"]; ok { + if len(v) >= 1 && v[0] == "true" { + verbose = true + } + } + + response := workloadmeta.GetGlobalStore().Dump(verbose) + jsonDump, err := json.Marshal(response) + if err != nil { + setJSONError(w, log.Errorf("Unable to marshal workload list response: %v", err), 500) + return + } + + w.Write(jsonDump) +} + +func setJSONError(w http.ResponseWriter, err error, errorCode int) { + w.Header().Set("Content-Type", "application/json") + body, _ := json.Marshal(map[string]string{"error": err.Error()}) + http.Error(w, string(body), errorCode) +} diff --git a/cmd/cluster-agent/app/check.go b/cmd/cluster-agent/app/check.go deleted file mode 100644 index 5a19319bad99c..0000000000000 --- a/cmd/cluster-agent/app/check.go +++ /dev/null @@ -1,17 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver -// +build kubeapiserver - -package app - -import ( - "github.com/DataDog/datadog-agent/cmd/cluster-agent/commands/check" -) - -func init() { - ClusterAgentCmd.AddCommand(check.Check(loggerName, &confPath, &flagNoColor)) -} diff --git a/cmd/cluster-agent/app/clusterchecks.go b/cmd/cluster-agent/app/clusterchecks.go deleted file mode 100644 index 00e52ece4297d..0000000000000 --- a/cmd/cluster-agent/app/clusterchecks.go +++ /dev/null @@ -1,18 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver && clusterchecks -// +build kubeapiserver,clusterchecks - -package app - -import "github.com/DataDog/datadog-agent/cmd/cluster-agent/commands" - -func init() { - clusterChecksCmd := commands.GetClusterChecksCobraCmd(&flagNoColor, &confPath, loggerName) - clusterChecksCmd.AddCommand(commands.RebalanceClusterChecksCobraCmd(&flagNoColor, &confPath, loggerName)) - - ClusterAgentCmd.AddCommand(clusterChecksCmd) -} diff --git a/cmd/cluster-agent/app/compliance_cmd.go b/cmd/cluster-agent/app/compliance_cmd.go deleted file mode 100644 index 397abf7abbf73..0000000000000 --- a/cmd/cluster-agent/app/compliance_cmd.go +++ /dev/null @@ -1,39 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !windows && kubeapiserver -// +build !windows,kubeapiserver - -package app - -import ( - "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/check" - "github.com/DataDog/datadog-agent/comp/core" - "github.com/DataDog/datadog-agent/comp/core/config" - "github.com/DataDog/datadog-agent/comp/core/log" -) - -var ( - complianceCmd = &cobra.Command{ - Use: "compliance", - Short: "Compliance utility commands", - } -) - -func init() { - bundleParams := core.BundleParams{ - ConfigParams: config.NewParams( - "", - config.WithConfFilePath(confPath), - config.WithConfigName("datadog-cluster"), - ), - LogParams: log.LogForOneShot(string(loggerName), "off", true), - } - - complianceCmd.AddCommand(check.Commands(bundleParams)...) - ClusterAgentCmd.AddCommand(complianceCmd) -} diff --git a/cmd/cluster-agent/app/config.go b/cmd/cluster-agent/app/config.go deleted file mode 100644 index c8f91ce2d61a3..0000000000000 --- a/cmd/cluster-agent/app/config.go +++ /dev/null @@ -1,81 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver -// +build kubeapiserver - -package app - -import ( - "fmt" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - cmdconfig "github.com/DataDog/datadog-agent/cmd/cluster-agent/commands/config" - "github.com/DataDog/datadog-agent/pkg/api/util" - "github.com/DataDog/datadog-agent/pkg/config" - commonsettings "github.com/DataDog/datadog-agent/pkg/config/settings" - settingshttp "github.com/DataDog/datadog-agent/pkg/config/settings/http" - - "github.com/fatih/color" - "github.com/spf13/cobra" -) - -func init() { - ClusterAgentCmd.AddCommand(cmdconfig.Config(getSettingsClient)) -} - -func setupConfig() error { - if flagNoColor { - color.NoColor = true - } - - // we'll search for a config file named `datadog-cluster.yaml` - config.Datadog.SetConfigName("datadog-cluster") - err := common.SetupConfig(confPath) - if err != nil { - return fmt.Errorf("unable to set up global cluster agent configuration: %v", err) - } - - err = config.SetupLogger(loggerName, config.GetEnvDefault("DD_LOG_LEVEL", "off"), "", "", false, true, false) - if err != nil { - fmt.Printf("Cannot setup logger, exiting: %v\n", err) - return err - } - - return util.SetAuthToken() -} - -func getSettingsClient(_ *cobra.Command, _ []string) (commonsettings.Client, error) { - err := setupConfig() - if err != nil { - return nil, err - } - - c := util.GetClient(false) - apiConfigURL := fmt.Sprintf("https://localhost:%v/config", config.Datadog.GetInt("cluster_agent.cmd_port")) - - return settingshttp.NewClient(c, apiConfigURL, "datadog-cluster-agent"), nil -} - -// initRuntimeSettings builds the map of runtime Cluster Agent settings configurable at runtime. -func initRuntimeSettings() error { - if err := commonsettings.RegisterRuntimeSetting(commonsettings.LogLevelRuntimeSetting{}); err != nil { - return err - } - - if err := commonsettings.RegisterRuntimeSetting(commonsettings.RuntimeMutexProfileFraction("runtime_mutex_profile_fraction")); err != nil { - return err - } - - if err := commonsettings.RegisterRuntimeSetting(commonsettings.RuntimeBlockProfileRate("runtime_block_profile_rate")); err != nil { - return err - } - - if err := commonsettings.RegisterRuntimeSetting(commonsettings.ProfilingGoroutines("internal_profiling_goroutines")); err != nil { - return err - } - - return commonsettings.RegisterRuntimeSetting(commonsettings.ProfilingRuntimeSetting("internal_profiling")) -} diff --git a/cmd/cluster-agent/app/config_check.go b/cmd/cluster-agent/app/config_check.go deleted file mode 100644 index e966d275804ab..0000000000000 --- a/cmd/cluster-agent/app/config_check.go +++ /dev/null @@ -1,15 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver -// +build kubeapiserver - -package app - -import "github.com/DataDog/datadog-agent/cmd/cluster-agent/commands" - -func init() { - ClusterAgentCmd.AddCommand(commands.GetConfigCheckCobraCmd(&flagNoColor, &confPath, loggerName)) -} diff --git a/cmd/cluster-agent/app/diagnose.go b/cmd/cluster-agent/app/diagnose.go deleted file mode 100644 index cf72e3cbea0d4..0000000000000 --- a/cmd/cluster-agent/app/diagnose.go +++ /dev/null @@ -1,58 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver -// +build kubeapiserver - -package app - -import ( - "fmt" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/diagnose" - - "github.com/fatih/color" - "github.com/spf13/cobra" -) - -func init() { - ClusterAgentCmd.AddCommand(diagnoseCommand) -} - -var diagnoseCommand = &cobra.Command{ - Use: "diagnose", - Short: "Execute some connectivity diagnosis on your system", - Long: ``, - RunE: doDiagnose, -} - -func doDiagnose(cmd *cobra.Command, args []string) error { - // Global config setup - err := common.SetupConfig(confPath) - if err != nil { - return fmt.Errorf("unable to set up global agent configuration: %v", err) - } - - if flagNoColor { - color.NoColor = true - } - - err = config.SetupLogger( - loggerName, - config.Datadog.GetString("log_level"), - common.DefaultLogFile, - config.GetSyslogURI(), - config.Datadog.GetBool("syslog_rfc"), - config.Datadog.GetBool("log_to_console"), - config.Datadog.GetBool("log_format_json"), - ) - if err != nil { - return fmt.Errorf("Error while setting up logging, exiting: %v", err) - } - - return diagnose.RunAll(color.Output) -} diff --git a/cmd/cluster-agent/app/dummy.go b/cmd/cluster-agent/app/dummy.go deleted file mode 100644 index 125c4446fa14c..0000000000000 --- a/cmd/cluster-agent/app/dummy.go +++ /dev/null @@ -1,15 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !kubeapiserver -// +build !kubeapiserver - -package app - -// this file is to allow go vet to look at something in this directory, as everything -// else currently is excluded (on windows) by build flags -func init() { - -} diff --git a/cmd/cluster-agent/app/flare.go b/cmd/cluster-agent/app/flare.go deleted file mode 100644 index cc1447d6cabcb..0000000000000 --- a/cmd/cluster-agent/app/flare.go +++ /dev/null @@ -1,130 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver -// +build kubeapiserver - -package app - -import ( - "bytes" - "fmt" - - "github.com/fatih/color" - "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/api/util" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/flare" - "github.com/DataDog/datadog-agent/pkg/util/input" -) - -var ( - customerEmail string - autoconfirm bool -) - -func init() { - ClusterAgentCmd.AddCommand(flareCmd) - - flareCmd.Flags().StringVarP(&customerEmail, "email", "e", "", "Your email") - flareCmd.Flags().BoolVarP(&autoconfirm, "send", "s", false, "Automatically send flare (don't prompt for confirmation)") - flareCmd.SetArgs([]string{"caseID"}) -} - -var flareCmd = &cobra.Command{ - Use: "flare [caseID]", - Short: "Collect a flare and send it to Datadog", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { - - if flagNoColor { - color.NoColor = true - } - - // we'll search for a config file named `datadog-cluster.yaml` - config.Datadog.SetConfigName("datadog-cluster") - err := common.SetupConfig(confPath) - if err != nil { - return fmt.Errorf("unable to set up global cluster agent configuration: %v", err) - } - - // The flare command should not log anything, all errors should be reported directly to the console without the log format - err = config.SetupLogger(loggerName, "off", "", "", false, true, false) - if err != nil { - fmt.Printf("Cannot setup logger, exiting: %v\n", err) - return err - } - - caseID := "" - if len(args) > 0 { - caseID = args[0] - } - - if customerEmail == "" { - var err error - customerEmail, err = input.AskForEmail() - if err != nil { - fmt.Println("Error reading email, please retry or contact support") - return err - } - } - - return requestFlare(caseID) - }, -} - -func requestFlare(caseID string) error { - fmt.Fprintln(color.Output, color.BlueString("Asking the Cluster Agent to build the flare archive.")) - var e error - c := util.GetClient(false) // FIX: get certificates right then make this true - urlstr := fmt.Sprintf("https://localhost:%v/flare", config.Datadog.GetInt("cluster_agent.cmd_port")) - - logFile := config.Datadog.GetString("log_file") - if logFile == "" { - logFile = common.DefaultDCALogFile - } - - // Set session token - e = util.SetAuthToken() - if e != nil { - return e - } - - r, e := util.DoPost(c, urlstr, "application/json", bytes.NewBuffer([]byte{})) - var filePath string - if e != nil { - if r != nil && string(r) != "" { - fmt.Fprintln(color.Output, fmt.Sprintf("The agent ran into an error while making the flare: %s", color.RedString(string(r)))) - } else { - fmt.Fprintln(color.Output, color.RedString("The agent was unable to make a full flare: %s.", e.Error())) - } - fmt.Fprintln(color.Output, color.YellowString("Initiating flare locally, some logs will be missing.")) - filePath, e = flare.CreateDCAArchive(true, common.GetDistPath(), logFile) - if e != nil { - fmt.Printf("The flare zipfile failed to be created: %s\n", e) - return e - } - } else { - filePath = string(r) - } - - fmt.Fprintln(color.Output, fmt.Sprintf("%s is going to be uploaded to Datadog", color.YellowString(filePath))) - if !autoconfirm { - confirmation := input.AskForConfirmation("Are you sure you want to upload a flare? [Y/N]") - if !confirmation { - fmt.Fprintln(color.Output, fmt.Sprintf("Aborting. (You can still use %s)", color.YellowString(filePath))) - return nil - } - } - - response, e := flare.SendFlare(filePath, caseID, customerEmail) - fmt.Println(response) - if e != nil { - return e - } - return nil -} diff --git a/cmd/cluster-agent/app/metadata_mapper_digest.go b/cmd/cluster-agent/app/metadata_mapper_digest.go deleted file mode 100644 index 28628d9acf031..0000000000000 --- a/cmd/cluster-agent/app/metadata_mapper_digest.go +++ /dev/null @@ -1,111 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver -// +build kubeapiserver - -package app - -import ( - "bytes" - "encoding/json" - "fmt" - "os" - - "github.com/fatih/color" - "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/api/util" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/status" -) - -func init() { - ClusterAgentCmd.AddCommand(metaMapperCmd) -} - -var metaMapperCmd = &cobra.Command{ - Use: "metamap [nodeName]", - Short: "Print the map between the metadata and the pods associated", - Long: `The metamap command is mostly designed for troubleshooting purposes. -One can easily identify which pods are running on which nodes, -as well as which services are serving the pods. Or the deployment name for the pod`, - Example: "datadog-cluster-agent metamap ip-10-0-115-123", - RunE: func(cmd *cobra.Command, args []string) error { - - if flagNoColor { - color.NoColor = true - } - - // we'll search for a config file named `datadog-cluster.yaml` - config.Datadog.SetConfigName("datadog-cluster") - err := common.SetupConfig(confPath) - if err != nil { - return fmt.Errorf("unable to set up global cluster agent configuration: %v", err) - } - - err = config.SetupLogger(loggerName, config.GetEnvDefault("DD_LOG_LEVEL", "off"), "", "", false, true, false) - if err != nil { - fmt.Printf("Cannot setup logger, exiting: %v\n", err) - return err - } - - nodeName := "" - if len(args) > 0 { - nodeName = args[0] - } - return getMetadataMap(nodeName) // if nodeName == "", call all. - }, -} - -func getMetadataMap(nodeName string) error { - var e error - var s string - c := util.GetClient(false) // FIX: get certificates right then make this true - var urlstr string - if nodeName == "" { - urlstr = fmt.Sprintf("https://localhost:%v/api/v1/tags/pod", config.Datadog.GetInt("cluster_agent.cmd_port")) - } else { - urlstr = fmt.Sprintf("https://localhost:%v/api/v1/tags/pod/%s", config.Datadog.GetInt("cluster_agent.cmd_port"), nodeName) - } - - // Set session token - e = util.SetAuthToken() - if e != nil { - return e - } - - r, e := util.DoGet(c, urlstr, util.LeaveConnectionOpen) - if e != nil { - fmt.Printf(` - Could not reach agent: %v - Make sure the agent is properly running before requesting the map of services to pods. - Contact support if you continue having issues.`, e) - return e - } - - // The rendering is done in the client so that the agent has less work to do - if prettyPrintJSON { - var prettyJSON bytes.Buffer - json.Indent(&prettyJSON, r, "", " ") //nolint:errcheck - s = prettyJSON.String() - } else if jsonStatus { - s = string(r) - } else { - formattedMetadataMap, err := status.FormatMetadataMapCLI(r) - if err != nil { - return err - } - s = formattedMetadataMap - } - - if statusFilePath != "" { - os.WriteFile(statusFilePath, []byte(s), 0644) //nolint:errcheck - } else { - fmt.Println(s) - } - return nil -} diff --git a/cmd/cluster-agent/app/secret_helper.go b/cmd/cluster-agent/app/secret_helper.go deleted file mode 100644 index 16be17ce4e1e1..0000000000000 --- a/cmd/cluster-agent/app/secret_helper.go +++ /dev/null @@ -1,19 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver && secrets -// +build kubeapiserver,secrets - -package app - -import ( - "github.com/DataDog/datadog-agent/cmd/secrethelper" -) - -func init() { - for _, cmd := range secrethelper.Commands() { - ClusterAgentCmd.AddCommand(cmd) - } -} diff --git a/cmd/cluster-agent/app/status.go b/cmd/cluster-agent/app/status.go deleted file mode 100644 index 547ca9d5ff8a2..0000000000000 --- a/cmd/cluster-agent/app/status.go +++ /dev/null @@ -1,122 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver -// +build kubeapiserver - -package app - -import ( - "bytes" - "encoding/json" - "fmt" - "os" - - "github.com/fatih/color" - "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/api/util" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/status" -) - -var ( - jsonStatus bool - prettyPrintJSON bool - statusFilePath string -) - -func init() { - ClusterAgentCmd.AddCommand(statusCmd) - statusCmd.Flags().BoolVarP(&jsonStatus, "json", "j", false, "print out raw json") - statusCmd.Flags().BoolVarP(&prettyPrintJSON, "pretty-json", "p", false, "pretty print JSON") - statusCmd.Flags().StringVarP(&statusFilePath, "file", "o", "", "Output the status command to a file") -} - -var statusCmd = &cobra.Command{ - Use: "status", - Short: "Print the current status", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { - - if flagNoColor { - color.NoColor = true - } - - // we'll search for a config file named `datadog-cluster.yaml` - config.Datadog.SetConfigName("datadog-cluster") - err := common.SetupConfig(confPath) - if err != nil { - return fmt.Errorf("unable to set up global cluster agent configuration: %v", err) - } - - err = config.SetupLogger(loggerName, config.GetEnvDefault("DD_LOG_LEVEL", "off"), "", "", false, true, false) - if err != nil { - fmt.Printf("Cannot setup logger, exiting: %v\n", err) - return err - } - - err = requestStatus() - if err != nil { - return err - } - return nil - }, -} - -func requestStatus() error { - fmt.Printf("Getting the status from the agent.\n") - var e error - var s string - c := util.GetClient(false) // FIX: get certificates right then make this true - // TODO use https - urlstr := fmt.Sprintf("https://localhost:%v/status", config.Datadog.GetInt("cluster_agent.cmd_port")) - - // Set session token - e = util.SetAuthToken() - if e != nil { - return e - } - - r, e := util.DoGet(c, urlstr, util.LeaveConnectionOpen) - if e != nil { - var errMap = make(map[string]string) - json.Unmarshal(r, &errMap) //nolint:errcheck - // If the error has been marshalled into a json object, check it and return it properly - if err, found := errMap["error"]; found { - e = fmt.Errorf(err) - } - - fmt.Printf(` - Could not reach agent: %v - Make sure the agent is running before requesting the status. - Contact support if you continue having issues.`, e) - return e - } - - // The rendering is done in the client so that the agent has less work to do - if prettyPrintJSON { - var prettyJSON bytes.Buffer - json.Indent(&prettyJSON, r, "", " ") //nolint:errcheck - s = prettyJSON.String() - } else if jsonStatus { - s = string(r) - } else { - formattedStatus, err := status.FormatDCAStatus(r) - if err != nil { - return err - } - s = formattedStatus - } - - if statusFilePath != "" { - os.WriteFile(statusFilePath, []byte(s), 0644) //nolint:errcheck - } else { - fmt.Println(s) - } - - return nil -} diff --git a/cmd/cluster-agent/app/telemetry.go b/cmd/cluster-agent/app/telemetry.go deleted file mode 100644 index d1e0f02fe8fbc..0000000000000 --- a/cmd/cluster-agent/app/telemetry.go +++ /dev/null @@ -1,35 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver -// +build kubeapiserver - -package app - -import ( - "fmt" - - "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/pkg/flare" -) - -func init() { - ClusterAgentCmd.AddCommand(telemetryCmd) -} - -var telemetryCmd = &cobra.Command{ - Use: "telemetry", - Short: "Print the telemetry metrics exposed by the cluster agent", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { - payload, err := flare.QueryDCAMetrics() - if err != nil { - return err - } - fmt.Print(string(payload)) - return nil - }, -} diff --git a/cmd/cluster-agent/command/command.go b/cmd/cluster-agent/command/command.go new file mode 100644 index 0000000000000..5a4f0535728e4 --- /dev/null +++ b/cmd/cluster-agent/command/command.go @@ -0,0 +1,75 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package command implements the top-level `cluster-agent` binary, including its subcommands. +package command + +import ( + "fmt" + "os" + + "github.com/fatih/color" + "github.com/spf13/cobra" +) + +const ( + ConfigName = "datadog-cluster" + LoggerName = "CLUSTER" + DefaultLogLevel = "off" +) + +// GlobalParams contains the values of agent-global Cobra flags. +// +// A pointer to this type is passed to SubcommandFactory's, but its contents +// are not valid until Cobra calls the subcommand's Run or RunE function. +type GlobalParams struct { + // ConfFilePath holds the path to the folder containing the configuration + // file, to allow overrides from the command line + ConfFilePath string +} + +// SubcommandFactory is a callable that will return a slice of subcommands. +type SubcommandFactory func(globalParams *GlobalParams) []*cobra.Command + +// MakeCommand makes the top-level Cobra command for this app. +func MakeCommand(subcommandFactories []SubcommandFactory) *cobra.Command { + globalParams := GlobalParams{} + + // AgentCmd is the root command + agentCmd := &cobra.Command{ + Use: fmt.Sprintf("%s [command]", os.Args[0]), + Short: "Datadog Cluster Agent at your service.", + Long: ` +Datadog Cluster Agent takes care of running checks that need run only once per cluster. +It also exposes an API for other Datadog agents that provides them with cluster-level +metadata for their metrics.`, + SilenceUsage: true, + } + + agentCmd.PersistentFlags().StringVarP(&globalParams.ConfFilePath, "cfgpath", "c", "", "path to directory containing datadog-agent.yaml") + + // github.com/fatih/color sets its global color.NoColor to a default value based on + // whether the process is running in a tty. So, we only want to override that when + // the value is true. + var noColorFlag bool + agentCmd.PersistentFlags().BoolVarP(&noColorFlag, "no-color", "n", false, "disable color output") + agentCmd.PersistentPreRun = func(*cobra.Command, []string) { + if noColorFlag { + color.NoColor = true + } + } + + for _, sf := range subcommandFactories { + subcommands := sf(&globalParams) + for _, cmd := range subcommands { + agentCmd.AddCommand(cmd) + } + } + + return agentCmd +} diff --git a/cmd/cluster-agent/commands/check/check.go b/cmd/cluster-agent/commands/check/check.go deleted file mode 100644 index 166cfced98778..0000000000000 --- a/cmd/cluster-agent/commands/check/check.go +++ /dev/null @@ -1,598 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package check - -import ( - "bytes" - "context" - "encoding/json" - "errors" - "fmt" - "os" - "path/filepath" - "runtime" - "strconv" - "strings" - "time" - - "github.com/fatih/color" - "github.com/spf13/cobra" - "gopkg.in/yaml.v2" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/aggregator" - "github.com/DataDog/datadog-agent/pkg/autodiscovery" - "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" - "github.com/DataDog/datadog-agent/pkg/cli/standalone" - "github.com/DataDog/datadog-agent/pkg/collector" - "github.com/DataDog/datadog-agent/pkg/collector/check" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/metadata/inventories" - "github.com/DataDog/datadog-agent/pkg/status" - "github.com/DataDog/datadog-agent/pkg/util/flavor" - "github.com/DataDog/datadog-agent/pkg/util/hostname" - "github.com/DataDog/datadog-agent/pkg/util/scrubber" -) - -var ( - checkRate bool - checkTimes int - checkPause int - checkName string - checkDelay int - logLevel string - formatJSON bool - formatTable bool - breakPoint string - fullSketches bool - saveFlare bool - profileMemory bool - profileMemoryDir string - profileMemoryFrames string - profileMemoryGC string - profileMemoryCombine string - profileMemorySort string - profileMemoryLimit string - profileMemoryDiff string - profileMemoryFilters string - profileMemoryUnit string - profileMemoryVerbose string - discoveryTimeout uint - discoveryRetryInterval uint - discoveryMinInstances uint - generateIntegrationTraces bool -) - -func setupCmd(cmd *cobra.Command) { - cmd.Flags().BoolVarP(&checkRate, "check-rate", "r", false, "check rates by running the check twice with a 1sec-pause between the 2 runs") - cmd.Flags().IntVarP(&checkTimes, "check-times", "t", 1, "number of times to run the check") - cmd.Flags().IntVar(&checkPause, "pause", 0, "pause between multiple runs of the check, in milliseconds") - cmd.Flags().StringVarP(&logLevel, "log-level", "l", "", "set the log level (default 'off') (deprecated, use the env var DD_LOG_LEVEL instead)") - cmd.Flags().IntVarP(&checkDelay, "delay", "d", 100, "delay between running the check and grabbing the metrics in milliseconds") - cmd.Flags().BoolVarP(&formatJSON, "json", "", false, "format aggregator and check runner output as json") - cmd.Flags().BoolVarP(&formatTable, "table", "", false, "format aggregator and check runner output as an ascii table") - cmd.Flags().StringVarP(&breakPoint, "breakpoint", "b", "", "set a breakpoint at a particular line number (Python checks only)") - cmd.Flags().BoolVarP(&profileMemory, "profile-memory", "m", false, "run the memory profiler (Python checks only)") - cmd.Flags().BoolVar(&fullSketches, "full-sketches", false, "output sketches with bins information") - cmd.Flags().BoolVarP(&saveFlare, "flare", "", false, "save check results to the log dir so it may be reported in a flare") - cmd.Flags().UintVarP(&discoveryTimeout, "discovery-timeout", "", 5, "max retry duration until Autodiscovery resolves the check template (in seconds)") - cmd.Flags().UintVarP(&discoveryRetryInterval, "discovery-retry-interval", "", 1, "(unused)") - cmd.Flags().UintVarP(&discoveryMinInstances, "discovery-min-instances", "", 1, "minimum number of config instances to be discovered before running the check(s)") - config.Datadog.BindPFlag("cmd.check.fullsketches", cmd.Flags().Lookup("full-sketches")) //nolint:errcheck - - // Power user flags - mark as hidden - createHiddenStringFlag(cmd, &profileMemoryDir, "m-dir", "", "an existing directory in which to store memory profiling data, ignoring clean-up") - createHiddenStringFlag(cmd, &profileMemoryFrames, "m-frames", "", "the number of stack frames to consider") - createHiddenStringFlag(cmd, &profileMemoryGC, "m-gc", "", "whether or not to run the garbage collector to remove noise") - createHiddenStringFlag(cmd, &profileMemoryCombine, "m-combine", "", "whether or not to aggregate over all traceback frames") - createHiddenStringFlag(cmd, &profileMemorySort, "m-sort", "", "what to sort by between: lineno | filename | traceback") - createHiddenStringFlag(cmd, &profileMemoryLimit, "m-limit", "", "the maximum number of sorted results to show") - createHiddenStringFlag(cmd, &profileMemoryDiff, "m-diff", "", "how to order diff results between: absolute | positive") - createHiddenStringFlag(cmd, &profileMemoryFilters, "m-filters", "", "comma-separated list of file path glob patterns to filter by") - createHiddenStringFlag(cmd, &profileMemoryUnit, "m-unit", "", "the binary unit to represent memory usage (kib, mb, etc.). the default is dynamic") - createHiddenStringFlag(cmd, &profileMemoryVerbose, "m-verbose", "", "whether or not to include potentially noisy sources") - createHiddenBooleanFlag(cmd, &generateIntegrationTraces, "m-trace", false, "send the integration traces") - - cmd.SetArgs([]string{"checkName"}) -} - -// Check returns a cobra command to run checks -func Check(loggerName config.LoggerName, confFilePath *string, flagNoColor *bool) *cobra.Command { - cmd := &cobra.Command{ - Use: "check ", - Short: "Run the specified check", - Long: `Use this to run a specific check with a specific rate`, - RunE: func(cmd *cobra.Command, args []string) error { - configName := "" - if flavor.GetFlavor() == flavor.ClusterAgent { - // we'll search for a config file named `datadog-cluster.yaml` - configName = "datadog-cluster" - } - resolvedLogLevel, warnings, err := setupCLI(loggerName, *confFilePath, configName, "", logLevel, "off") - if err != nil { - fmt.Printf("Cannot initialize command: %v\n", err) - return err - } - - if *flagNoColor { - color.NoColor = true - } - - previousIntegrationTracing := false - previousIntegrationTracingExhaustive := false - if generateIntegrationTraces { - if config.Datadog.IsSet("integration_tracing") { - previousIntegrationTracing = config.Datadog.GetBool("integration_tracing") - } - if config.Datadog.IsSet("integration_tracing_exhaustive") { - previousIntegrationTracingExhaustive = config.Datadog.GetBool("integration_tracing_exhaustive") - } - config.Datadog.Set("integration_tracing", true) - config.Datadog.Set("integration_tracing_exhaustive", true) - } - - if len(args) != 0 { - checkName = args[0] - } else { - cmd.Help() //nolint:errcheck - return nil - } - - hostnameDetected, err := hostname.Get(context.TODO()) - if err != nil { - fmt.Printf("Cannot get hostname, exiting: %v\n", err) - return err - } - - // Initializing the aggregator with a flush interval of 0 (to disable the flush goroutines) - opts := aggregator.DefaultAgentDemultiplexerOptions(nil) - opts.FlushInterval = 0 - opts.UseNoopForwarder = true - opts.UseNoopEventPlatformForwarder = true - opts.UseNoopOrchestratorForwarder = true - demux := aggregator.InitAndStartAgentDemultiplexer(opts, hostnameDetected) - - common.LoadComponents(context.Background(), config.Datadog.GetString("confd_path")) - common.AC.LoadAndRun(context.Background()) - - // Create the CheckScheduler, but do not attach it to - // AutoDiscovery. NOTE: we do not start common.Coll, either. - collector.InitCheckScheduler(common.Coll) - - waitCtx, cancelTimeout := context.WithTimeout( - context.Background(), time.Duration(discoveryTimeout)*time.Second) - allConfigs := common.WaitForConfigsFromAD(waitCtx, []string{checkName}, int(discoveryMinInstances)) - cancelTimeout() - - // make sure the checks in cs are not JMX checks - for idx := range allConfigs { - conf := &allConfigs[idx] - if conf.Name != checkName { - continue - } - - if check.IsJMXConfig(*conf) { - // we'll mimic the check command behavior with JMXFetch by running - // it with the JSON reporter and the list_with_metrics command. - fmt.Println("Please consider using the 'jmx' command instead of 'check jmx'") - selectedChecks := []string{checkName} - if checkRate { - if err := standalone.ExecJmxListWithRateMetricsJSON(selectedChecks, resolvedLogLevel, allConfigs); err != nil { - return fmt.Errorf("while running the jmx check: %v", err) - } - } else { - if err := standalone.ExecJmxListWithMetricsJSON(selectedChecks, resolvedLogLevel, allConfigs); err != nil { - return fmt.Errorf("while running the jmx check: %v", err) - } - } - - instances := []integration.Data{} - - // Retain only non-JMX instances for later - for _, instance := range conf.Instances { - if check.IsJMXInstance(conf.Name, instance, conf.InitConfig) { - continue - } - instances = append(instances, instance) - } - - if len(instances) == 0 { - fmt.Printf("All instances of '%s' are JMXFetch instances, and have completed running\n", checkName) - return nil - } - - conf.Instances = instances - } - } - - if profileMemory { - // If no directory is specified, make a temporary one - if profileMemoryDir == "" { - profileMemoryDir, err = os.MkdirTemp("", "datadog-agent-memory-profiler") - if err != nil { - return err - } - - defer func() { - cleanupErr := os.RemoveAll(profileMemoryDir) - if cleanupErr != nil { - fmt.Printf("%s\n", cleanupErr) - } - }() - } - - for idx := range allConfigs { - conf := &allConfigs[idx] - if conf.Name != checkName { - continue - } - - var data map[string]interface{} - - err = yaml.Unmarshal(conf.InitConfig, &data) - if err != nil { - return err - } - - if data == nil { - data = make(map[string]interface{}) - } - - data["profile_memory"] = profileMemoryDir - err = populateMemoryProfileConfig(data) - if err != nil { - return err - } - - y, _ := yaml.Marshal(data) - conf.InitConfig = y - - break - } - } else if breakPoint != "" { - breakPointLine, err := strconv.Atoi(breakPoint) - if err != nil { - fmt.Printf("breakpoint must be an integer\n") - return err - } - - for idx := range allConfigs { - conf := &allConfigs[idx] - if conf.Name != checkName { - continue - } - - var data map[string]interface{} - - err = yaml.Unmarshal(conf.InitConfig, &data) - if err != nil { - return err - } - - if data == nil { - data = make(map[string]interface{}) - } - - data["set_breakpoint"] = breakPointLine - - y, _ := yaml.Marshal(data) - conf.InitConfig = y - - break - } - } - - cs := collector.GetChecksByNameForConfigs(checkName, allConfigs) - - // something happened while getting the check(s), display some info. - if len(cs) == 0 { - for check, error := range autodiscovery.GetConfigErrors() { - if checkName == check { - fmt.Fprintln(color.Output, fmt.Sprintf("\n%s: invalid config for %s: %s", color.RedString("Error"), color.YellowString(check), error)) - } - } - for check, errors := range collector.GetLoaderErrors() { - if checkName == check { - fmt.Fprintln(color.Output, fmt.Sprintf("\n%s: could not load %s:", color.RedString("Error"), color.YellowString(checkName))) - for loader, error := range errors { - fmt.Fprintln(color.Output, fmt.Sprintf("* %s: %s", color.YellowString(loader), error)) - } - } - } - for check, warnings := range autodiscovery.GetResolveWarnings() { - if checkName == check { - fmt.Fprintln(color.Output, fmt.Sprintf("\n%s: could not resolve %s config:", color.YellowString("Warning"), color.YellowString(check))) - for _, warning := range warnings { - fmt.Fprintln(color.Output, fmt.Sprintf("* %s", warning)) - } - } - } - return fmt.Errorf("no valid check found") - } - - if len(cs) > 1 { - fmt.Println("Multiple check instances found, running each of them") - } - - var checkFileOutput bytes.Buffer - var instancesData []interface{} - printer := aggregator.AgentDemultiplexerPrinter{AgentDemultiplexer: demux} - for _, c := range cs { - s := runCheck(c, printer) - - // Sleep for a while to allow the aggregator to finish ingesting all the metrics/events/sc - time.Sleep(time.Duration(checkDelay) * time.Millisecond) - - if formatJSON { - aggregatorData := printer.GetMetricsDataForPrint() - var collectorData map[string]interface{} - - collectorJSON, _ := status.GetCheckStatusJSON(c, s) - err = json.Unmarshal(collectorJSON, &collectorData) - if err != nil { - return err - } - - checkRuns := collectorData["runnerStats"].(map[string]interface{})["Checks"].(map[string]interface{})[checkName].(map[string]interface{}) - - // There is only one checkID per run so we'll just access that - var runnerData map[string]interface{} - for _, checkIDData := range checkRuns { - runnerData = checkIDData.(map[string]interface{}) - break - } - - instanceData := map[string]interface{}{ - "aggregator": aggregatorData, - "runner": runnerData, - "inventories": collectorData["inventories"], - } - instancesData = append(instancesData, instanceData) - } else if profileMemory { - // Every instance will create its own directory - instanceID := strings.SplitN(string(c.ID()), ":", 2)[1] - // Colons can't be part of Windows file paths - instanceID = strings.Replace(instanceID, ":", "_", -1) - profileDataDir := filepath.Join(profileMemoryDir, checkName, instanceID) - - snapshotDir := filepath.Join(profileDataDir, "snapshots") - if _, err := os.Stat(snapshotDir); !os.IsNotExist(err) { - snapshots, err := os.ReadDir(snapshotDir) - if err != nil { - return err - } - - numSnapshots := len(snapshots) - if numSnapshots > 0 { - lastSnapshot := snapshots[numSnapshots-1] - snapshotContents, err := os.ReadFile(filepath.Join(snapshotDir, lastSnapshot.Name())) - if err != nil { - return err - } - - color.HiWhite(string(snapshotContents)) - } else { - return fmt.Errorf("no snapshots found in %s", snapshotDir) - } - } else { - return fmt.Errorf("no snapshot data found in %s", profileDataDir) - } - - diffDir := filepath.Join(profileDataDir, "diffs") - if _, err := os.Stat(diffDir); !os.IsNotExist(err) { - diffs, err := os.ReadDir(diffDir) - if err != nil { - return err - } - - numDiffs := len(diffs) - if numDiffs > 0 { - lastDiff := diffs[numDiffs-1] - diffContents, err := os.ReadFile(filepath.Join(diffDir, lastDiff.Name())) - if err != nil { - return err - } - - color.HiCyan(fmt.Sprintf("\n%s\n\n", strings.Repeat("=", 50))) - color.HiWhite(string(diffContents)) - } else { - return fmt.Errorf("no diffs found in %s", diffDir) - } - } else if !singleCheckRun() { - return fmt.Errorf("no diff data found in %s", profileDataDir) - } - } else { - printer.PrintMetrics(&checkFileOutput, formatTable) - - p := func(data string) { - fmt.Println(data) - checkFileOutput.WriteString(data + "\n") - } - - checkStatus, _ := status.GetCheckStatus(c, s) - p(string(checkStatus)) - - metadata := inventories.GetCheckMetadata(c) - if metadata != nil { - p(" Metadata\n ========") - for k, v := range *metadata { - p(fmt.Sprintf(" %s: %v", k, v)) - } - } - } - } - - if runtime.GOOS == "windows" { - standalone.PrintWindowsUserWarning("check") - } - - if formatJSON { - instancesJSON, _ := json.MarshalIndent(instancesData, "", " ") - instanceJSONString := string(instancesJSON) - - fmt.Println(instanceJSONString) - checkFileOutput.WriteString(instanceJSONString + "\n") - } else if singleCheckRun() { - if profileMemory { - color.Yellow("Check has run only once, to collect diff data run the check multiple times with the -t/--check-times flag.") - } else { - color.Yellow("Check has run only once, if some metrics are missing you can try again with --check-rate to see any other metric if available.") - } - } - - if warnings != nil && warnings.TraceMallocEnabledWithPy2 { - return errors.New("tracemalloc is enabled but unavailable with python version 2") - } - - if saveFlare { - writeCheckToFile(checkName, &checkFileOutput) - } - - if generateIntegrationTraces { - config.Datadog.Set("integration_tracing", previousIntegrationTracing) - config.Datadog.Set("integration_tracing_exhaustive", previousIntegrationTracingExhaustive) - } - - return nil - }, - } - setupCmd(cmd) - return cmd -} - -func runCheck(c check.Check, demux aggregator.Demultiplexer) *check.Stats { - s := check.NewStats(c) - times := checkTimes - pause := checkPause - if checkRate { - if checkTimes > 2 { - color.Yellow("The check-rate option is overriding check-times to 2") - } - if pause > 0 { - color.Yellow("The check-rate option is overriding pause to 1000ms") - } - times = 2 - pause = 1000 - } - for i := 0; i < times; i++ { - t0 := time.Now() - err := c.Run() - warnings := c.GetWarnings() - sStats, _ := c.GetSenderStats() - s.Add(time.Since(t0), err, warnings, sStats) - if pause > 0 && i < times-1 { - time.Sleep(time.Duration(pause) * time.Millisecond) - } - } - - return s -} - -func writeCheckToFile(checkName string, checkFileOutput *bytes.Buffer) { - _ = os.Mkdir(common.DefaultCheckFlareDirectory, os.ModeDir) - - // Windows cannot accept ":" in file names - filenameSafeTimeStamp := strings.ReplaceAll(time.Now().UTC().Format(time.RFC3339), ":", "-") - flarePath := filepath.Join(common.DefaultCheckFlareDirectory, "check_"+checkName+"_"+filenameSafeTimeStamp+".log") - - scrubbed, err := scrubber.ScrubBytes(checkFileOutput.Bytes()) - if err != nil { - fmt.Println("Error while scrubbing the check file:", err) - } - err = os.WriteFile(flarePath, scrubbed, os.ModePerm) - - if err != nil { - fmt.Println("Error while writing the check file (is the location writable by the dd-agent user?):", err) - } else { - fmt.Println("check written to:", flarePath) - } -} - -func singleCheckRun() bool { - return checkRate == false && checkTimes < 2 -} - -func createHiddenStringFlag(cmd *cobra.Command, p *string, name string, value string, usage string) { - cmd.Flags().StringVar(p, name, value, usage) - cmd.Flags().MarkHidden(name) //nolint:errcheck -} - -func createHiddenBooleanFlag(cmd *cobra.Command, p *bool, name string, value bool, usage string) { - cmd.Flags().BoolVar(p, name, value, usage) - cmd.Flags().MarkHidden(name) //nolint:errcheck -} - -func populateMemoryProfileConfig(initConfig map[string]interface{}) error { - if profileMemoryFrames != "" { - profileMemoryFrames, err := strconv.Atoi(profileMemoryFrames) - if err != nil { - return fmt.Errorf("--m-frames must be an integer") - } - initConfig["profile_memory_frames"] = profileMemoryFrames - } - - if profileMemoryGC != "" { - profileMemoryGC, err := strconv.Atoi(profileMemoryGC) - if err != nil { - return fmt.Errorf("--m-gc must be an integer") - } - - initConfig["profile_memory_gc"] = profileMemoryGC - } - - if profileMemoryCombine != "" { - profileMemoryCombine, err := strconv.Atoi(profileMemoryCombine) - if err != nil { - return fmt.Errorf("--m-combine must be an integer") - } - - if profileMemoryCombine != 0 && profileMemorySort == "traceback" { - return fmt.Errorf("--m-combine cannot be sorted (--m-sort) by traceback") - } - - initConfig["profile_memory_combine"] = profileMemoryCombine - } - - if profileMemorySort != "" { - if profileMemorySort != "lineno" && profileMemorySort != "filename" && profileMemorySort != "traceback" { - return fmt.Errorf("--m-sort must one of: lineno | filename | traceback") - } - initConfig["profile_memory_sort"] = profileMemorySort - } - - if profileMemoryLimit != "" { - profileMemoryLimit, err := strconv.Atoi(profileMemoryLimit) - if err != nil { - return fmt.Errorf("--m-limit must be an integer") - } - initConfig["profile_memory_limit"] = profileMemoryLimit - } - - if profileMemoryDiff != "" { - if profileMemoryDiff != "absolute" && profileMemoryDiff != "positive" { - return fmt.Errorf("--m-diff must one of: absolute | positive") - } - initConfig["profile_memory_diff"] = profileMemoryDiff - } - - if profileMemoryFilters != "" { - initConfig["profile_memory_filters"] = profileMemoryFilters - } - - if profileMemoryUnit != "" { - initConfig["profile_memory_unit"] = profileMemoryUnit - } - - if profileMemoryVerbose != "" { - profileMemoryVerbose, err := strconv.Atoi(profileMemoryVerbose) - if err != nil { - return fmt.Errorf("--m-verbose must be an integer") - } - initConfig["profile_memory_verbose"] = profileMemoryVerbose - } - - return nil -} diff --git a/cmd/cluster-agent/commands/check/setup.go b/cmd/cluster-agent/commands/check/setup.go deleted file mode 100644 index dcf1288823dfa..0000000000000 --- a/cmd/cluster-agent/commands/check/setup.go +++ /dev/null @@ -1,47 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package check - -import ( - "fmt" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/config" -) - -// setupCLI sets up the shared utilities for a standalone CLI command: -// - config, with defaults to avoid conflicting with an agent process running in parallel -// - logger -// and returns the log level resolved from cliLogLevel and defaultLogLevel -func setupCLI(loggerName config.LoggerName, confFilePath, configName string, cliLogFile string, cliLogLevel string, defaultLogLevel string) (string, *config.Warnings, error) { - var resolvedLogLevel string - - if cliLogLevel != "" { - // Honour the deprecated --log-level argument - overrides := make(map[string]interface{}) - overrides["log_level"] = cliLogLevel - config.AddOverrides(overrides) - resolvedLogLevel = cliLogLevel - } else { - resolvedLogLevel = config.GetEnvDefault("DD_LOG_LEVEL", defaultLogLevel) - } - - overrides := make(map[string]interface{}) - overrides["cmd_port"] = 0 // let the OS assign an available port for the HTTP server - config.AddOverrides(overrides) - - warnings, err := common.SetupConfigWithWarnings(confFilePath, configName) - if err != nil { - return resolvedLogLevel, warnings, fmt.Errorf("unable to set up global agent configuration: %v", err) - } - - err = config.SetupLogger(loggerName, resolvedLogLevel, cliLogFile, "", false, true, false) - if err != nil { - return resolvedLogLevel, warnings, fmt.Errorf("unable to set up logger: %v", err) - } - - return resolvedLogLevel, warnings, nil -} diff --git a/cmd/cluster-agent/commands/clusterchecks.go b/cmd/cluster-agent/commands/clusterchecks.go deleted file mode 100644 index 3d5baad7897e5..0000000000000 --- a/cmd/cluster-agent/commands/clusterchecks.go +++ /dev/null @@ -1,135 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver || clusterchecks -// +build kubeapiserver clusterchecks - -package commands - -import ( - "bytes" - "encoding/json" - "fmt" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/api/util" - "github.com/DataDog/datadog-agent/pkg/clusteragent/clusterchecks/types" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/flare" - - "github.com/fatih/color" - "github.com/spf13/cobra" -) - -var ( - checkName string -) - -// GetClusterChecksCobraCmd TODO -func GetClusterChecksCobraCmd(flagNoColor *bool, confPath *string, loggerName config.LoggerName) *cobra.Command { - clusterChecksCmd := &cobra.Command{ - Use: "clusterchecks", - Short: "Prints the active cluster check configurations", - RunE: func(cmd *cobra.Command, args []string) error { - if *flagNoColor { - color.NoColor = true - } - - // we'll search for a config file named `datadog-cluster.yaml` - config.Datadog.SetConfigName("datadog-cluster") - err := common.SetupConfig(*confPath) - if err != nil { - return fmt.Errorf("unable to set up global cluster agent configuration: %v", err) - } - - err = config.SetupLogger(loggerName, config.GetEnvDefault("DD_LOG_LEVEL", "off"), "", "", false, true, false) - if err != nil { - fmt.Printf("Cannot setup logger, exiting: %v\n", err) - return err - } - - if err = flare.GetClusterChecks(color.Output, checkName); err != nil { - return err - } - - return flare.GetEndpointsChecks(color.Output, checkName) - }, - } - clusterChecksCmd.PersistentFlags().StringVarP(&checkName, "check", "", "", "the check name to filter for") - - return clusterChecksCmd -} - -// RebalanceClusterChecksCobraCmd TODO -func RebalanceClusterChecksCobraCmd(flagNoColor *bool, confPath *string, loggerName config.LoggerName) *cobra.Command { - clusterChecksCmd := &cobra.Command{ - Use: "rebalance", - Short: "Rebalances cluster checks", - RunE: func(cmd *cobra.Command, args []string) error { - - if *flagNoColor { - color.NoColor = true - } - - // we'll search for a config file named `datadog-cluster.yaml` - config.Datadog.SetConfigName("datadog-cluster") - err := common.SetupConfig(*confPath) - if err != nil { - return fmt.Errorf("unable to set up global cluster agent configuration: %v", err) - } - - err = config.SetupLogger(loggerName, config.GetEnvDefault("DD_LOG_LEVEL", "off"), "", "", false, true, false) - if err != nil { - fmt.Printf("Cannot setup logger, exiting: %v\n", err) - return err - } - - return rebalanceChecks() - }, - } - - return clusterChecksCmd -} - -func rebalanceChecks() error { - fmt.Println("Requesting a cluster check rebalance...") - c := util.GetClient(false) // FIX: get certificates right then make this true - urlstr := fmt.Sprintf("https://localhost:%v/api/v1/clusterchecks/rebalance", config.Datadog.GetInt("cluster_agent.cmd_port")) - - // Set session token - err := util.SetAuthToken() - if err != nil { - return err - } - - r, err := util.DoPost(c, urlstr, "application/json", bytes.NewBuffer([]byte{})) - if err != nil { - var errMap = make(map[string]string) - json.Unmarshal(r, &errMap) //nolint:errcheck - // If the error has been marshalled into a json object, check it and return it properly - if e, found := errMap["error"]; found { - err = fmt.Errorf(e) - } - - fmt.Printf(` - Could not reach agent: %v - Make sure the agent is running before requesting the cluster checks rebalancing. - Contact support if you continue having issues.`, err) - - return err - } - - checksMoved := make([]types.RebalanceResponse, 0) - json.Unmarshal(r, &checksMoved) //nolint:errcheck - - fmt.Printf("%d cluster checks rebalanced successfully\n", len(checksMoved)) - - for _, check := range checksMoved { - fmt.Printf("Check %s with weight %d moved from node %s to %s. source diff: %d, dest diff: %d\n", - check.CheckID, check.CheckWeight, check.SourceNodeName, check.DestNodeName, check.SourceDiff, check.DestDiff) - } - - return nil -} diff --git a/cmd/cluster-agent/commands/config/config.go b/cmd/cluster-agent/commands/config/config.go deleted file mode 100644 index 3bc6dc10d66ee..0000000000000 --- a/cmd/cluster-agent/commands/config/config.go +++ /dev/null @@ -1,143 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package config - -import ( - "fmt" - - "github.com/DataDog/datadog-agent/pkg/config/settings" - - "github.com/spf13/cobra" -) - -// Config returns the main cobra config command. -func Config(getClient settings.ClientBuilder) *cobra.Command { - cmd := &cobra.Command{ - Use: "config", - Short: "Print the runtime configuration of a running agent", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { return showRuntimeConfiguration(getClient, cmd, args) }, - } - - cmd.AddCommand(listRuntime(getClient)) - cmd.AddCommand(set(getClient)) - cmd.AddCommand(get(getClient)) - - return cmd -} - -// listRuntime returns a cobra command to list the settings that can be changed at runtime. -func listRuntime(getClient settings.ClientBuilder) *cobra.Command { - return &cobra.Command{ - Use: "list-runtime", - Short: "List settings that can be changed at runtime", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { - return listRuntimeConfigurableValue(getClient, cmd, args) - }, - } -} - -// set returns a cobra command to set a config value at runtime. -func set(getClient settings.ClientBuilder) *cobra.Command { - return &cobra.Command{ - Use: "set [setting] [value]", - Short: "Set, for the current runtime, the value of a given configuration setting", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { return setConfigValue(getClient, cmd, args) }, - } -} - -// get returns a cobra command to get a runtime config value. -func get(getClient settings.ClientBuilder) *cobra.Command { - return &cobra.Command{ - Use: "get [setting]", - Short: "Get, for the current runtime, the value of a given configuration setting", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { return getConfigValue(getClient, cmd, args) }, - } -} - -func showRuntimeConfiguration(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { - c, err := getClient(cmd, args) - if err != nil { - return err - } - - runtimeConfig, err := c.FullConfig() - if err != nil { - return err - } - - fmt.Println(runtimeConfig) - - return nil -} - -func listRuntimeConfigurableValue(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { - c, err := getClient(cmd, args) - if err != nil { - return err - } - - settingsList, err := c.List() - if err != nil { - return err - } - - fmt.Println("=== Settings that can be changed at runtime ===") - for setting, details := range settingsList { - if !details.Hidden { - fmt.Printf("%-30s %s\n", setting, details.Description) - } - } - - return nil -} - -func setConfigValue(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { - if len(args) != 2 { - return fmt.Errorf("exactly two parameters are required: the setting name and its value") - } - - c, err := getClient(cmd, args) - if err != nil { - return err - } - - hidden, err := c.Set(args[0], args[1]) - if err != nil { - return err - } - - if hidden { - fmt.Printf("IMPORTANT: you have modified a hidden option, this may incur billing charges or have other unexpected side-effects.\n") - } - - fmt.Printf("Configuration setting %s is now set to: %s\n", args[0], args[1]) - - return nil -} - -func getConfigValue(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { - if len(args) != 1 { - return fmt.Errorf("a single setting name must be specified") - } - - c, err := getClient(cmd, args) - if err != nil { - return err - } - - value, err := c.Get(args[0]) - if err != nil { - return err - } - - fmt.Printf("%s is set to: %v\n", args[0], value) - - return nil -} diff --git a/cmd/cluster-agent/commands/configcheck.go b/cmd/cluster-agent/commands/configcheck.go deleted file mode 100644 index b3ca87dd4f56f..0000000000000 --- a/cmd/cluster-agent/commands/configcheck.go +++ /dev/null @@ -1,58 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver || clusterchecks -// +build kubeapiserver clusterchecks - -package commands - -import ( - "fmt" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/flare" - - "github.com/fatih/color" - "github.com/spf13/cobra" -) - -// GetConfigCheckCobraCmd TODO -func GetConfigCheckCobraCmd(flagNoColor *bool, confPath *string, loggerName config.LoggerName) *cobra.Command { - var withDebug bool - configCheckCommand := &cobra.Command{ - Use: "configcheck", - Aliases: []string{"checkconfig"}, - Short: "Print all configurations loaded & resolved of a running cluster agent", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { - - if *flagNoColor { - color.NoColor = true - } - - // we'll search for a config file named `datadog-cluster.yaml` - config.Datadog.SetConfigName("datadog-cluster") - err := common.SetupConfig(*confPath) - if err != nil { - return fmt.Errorf("unable to set up global cluster agent configuration: %v", err) - } - - err = config.SetupLogger(loggerName, config.GetEnvDefault("DD_LOG_LEVEL", "off"), "", "", false, true, false) - if err != nil { - fmt.Printf("Cannot setup logger, exiting: %v\n", err) - return err - } - - err = flare.GetClusterAgentConfigCheck(color.Output, withDebug) - if err != nil { - return err - } - return nil - }, - } - configCheckCommand.Flags().BoolVarP(&withDebug, "verbose", "v", false, "print additional debug info") - return configCheckCommand -} diff --git a/cmd/cluster-agent/commands/health.go b/cmd/cluster-agent/commands/health.go deleted file mode 100644 index 321c112e6d4fc..0000000000000 --- a/cmd/cluster-agent/commands/health.go +++ /dev/null @@ -1,118 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package commands - -import ( - "encoding/json" - "fmt" - "sort" - "strconv" - "strings" - - "github.com/fatih/color" - "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/agent/common" - "github.com/DataDog/datadog-agent/pkg/api/util" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/status/health" - "github.com/DataDog/datadog-agent/pkg/util/flavor" -) - -// Health returns a cobra command to report on the agent's health -func Health(loggerName config.LoggerName, confPath *string, flagNoColor *bool) *cobra.Command { - return &cobra.Command{ - Use: "health", - Short: "Print the current agent health", - Long: ``, - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - - if *flagNoColor { - color.NoColor = true - } - - if flavor.GetFlavor() == flavor.ClusterAgent { - config.Datadog.SetConfigName("datadog-cluster") - } - - // Set up config without secrets so that running the health command (e.g. from container - // liveness probe script) does not trigger a secret backend command call. - err := common.SetupConfigWithoutSecrets(*confPath, "") - if err != nil { - return fmt.Errorf("unable to set up global agent configuration: %v", err) - } - - err = config.SetupLogger(loggerName, config.GetEnvDefault("DD_LOG_LEVEL", "off"), "", "", false, true, false) - if err != nil { - fmt.Printf("Cannot setup logger, exiting: %v\n", err) - return err - } - - return requestHealth() - }, - } -} -func requestHealth() error { - c := util.GetClient(false) // FIX: get certificates right then make this true - - ipcAddress, err := config.GetIPCAddress() - if err != nil { - return err - } - - var urlstr string - if flavor.GetFlavor() == flavor.ClusterAgent { - urlstr = fmt.Sprintf("https://%v:%v/status/health", ipcAddress, config.Datadog.GetInt("cluster_agent.cmd_port")) - } else { - urlstr = fmt.Sprintf("https://%v:%v/agent/status/health", ipcAddress, config.Datadog.GetInt("cmd_port")) - } - - // Set session token - err = util.SetAuthToken() - if err != nil { - return err - } - - r, err := util.DoGet(c, urlstr, util.LeaveConnectionOpen) - if err != nil { - var errMap = make(map[string]string) - json.Unmarshal(r, &errMap) //nolint:errcheck - // If the error has been marshalled into a json object, check it and return it properly - if e, found := errMap["error"]; found { - err = fmt.Errorf(e) - } - - fmt.Printf("Could not reach agent: %v \nMake sure the agent is running before requesting the status and contact support if you continue having issues. \n", err) - return err - } - - s := new(health.Status) - if err = json.Unmarshal(r, s); err != nil { - return fmt.Errorf("Error unmarshalling json: %s", err) - } - - sort.Strings(s.Unhealthy) - sort.Strings(s.Healthy) - - statusString := color.GreenString("PASS") - if len(s.Unhealthy) > 0 { - statusString = color.RedString("FAIL") - } - fmt.Fprintln(color.Output, fmt.Sprintf("Agent health: %s", statusString)) - - if len(s.Healthy) > 0 { - fmt.Fprintln(color.Output, fmt.Sprintf("=== %s healthy components ===", color.GreenString(strconv.Itoa(len(s.Healthy))))) - fmt.Fprintln(color.Output, strings.Join(s.Healthy, ", ")) - } - if len(s.Unhealthy) > 0 { - fmt.Fprintln(color.Output, fmt.Sprintf("=== %s unhealthy components ===", color.RedString(strconv.Itoa(len(s.Unhealthy))))) - fmt.Fprintln(color.Output, strings.Join(s.Unhealthy, ", ")) - return fmt.Errorf("found %d unhealthy components", len(s.Unhealthy)) - } - - return nil -} diff --git a/cmd/cluster-agent/main.go b/cmd/cluster-agent/main.go index cc049926d3dc3..1a6c6b3afe43c 100644 --- a/cmd/cluster-agent/main.go +++ b/cmd/cluster-agent/main.go @@ -16,6 +16,8 @@ import ( _ "expvar" // Blank import used because this isn't directly used in this file _ "net/http/pprof" // Blank import used because this isn't directly used in this file + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/helm" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/ksm" _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/kubernetesapiserver" @@ -29,14 +31,15 @@ import ( _ "github.com/DataDog/datadog-agent/pkg/collector/corechecks/system/winproc" "github.com/DataDog/datadog-agent/pkg/util/flavor" "github.com/DataDog/datadog-agent/pkg/util/log" - - "github.com/DataDog/datadog-agent/cmd/cluster-agent/app" ) func main() { // set the Agent flavor flavor.SetFlavor(flavor.ClusterAgent) - if err := app.ClusterAgentCmd.Execute(); err != nil { + + ClusterAgentCmd := command.MakeCommand(subcommands.ClusterAgentSubcommands()) + + if err := ClusterAgentCmd.Execute(); err != nil { log.Error(err) os.Exit(-1) } diff --git a/cmd/cluster-agent/subcommands/check/command.go b/cmd/cluster-agent/subcommands/check/command.go new file mode 100644 index 0000000000000..b9879c60e95fd --- /dev/null +++ b/cmd/cluster-agent/subcommands/check/command.go @@ -0,0 +1,30 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package check implements 'cluster-agent check'. +package check + +import ( + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/pkg/cli/subcommands/check" + + "github.com/spf13/cobra" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cmd := check.MakeCommand(func() check.GlobalParams { + return check.GlobalParams{ + ConfFilePath: globalParams.ConfFilePath, + ConfigName: command.ConfigName, + LoggerName: command.LoggerName, + } + }) + + return []*cobra.Command{cmd} +} diff --git a/cmd/cluster-agent/subcommands/clusterchecks/command.go b/cmd/cluster-agent/subcommands/clusterchecks/command.go new file mode 100644 index 0000000000000..9bc2c18b31596 --- /dev/null +++ b/cmd/cluster-agent/subcommands/clusterchecks/command.go @@ -0,0 +1,28 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package clusterchecks implements 'cluster-agent clusterchecks'. +package clusterchecks + +import ( + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/pkg/cli/subcommands/clusterchecks" + + "github.com/spf13/cobra" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cmd := clusterchecks.MakeCommand(func() clusterchecks.GlobalParams { + return clusterchecks.GlobalParams{ + ConfFilePath: globalParams.ConfFilePath, + } + }) + + return []*cobra.Command{cmd} +} diff --git a/cmd/cluster-agent/subcommands/compliance/command.go b/cmd/cluster-agent/subcommands/compliance/command.go new file mode 100644 index 0000000000000..e130ef6a21602 --- /dev/null +++ b/cmd/cluster-agent/subcommands/compliance/command.go @@ -0,0 +1,37 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package compliance implements 'cluster-agent compliance'. +package compliance + +import ( + "github.com/spf13/cobra" + + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/check" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + complianceCmd := &cobra.Command{ + Use: "compliance", + Short: "compliance utility commands", + } + + bundleParams := core.BundleParams{ + ConfigParams: config.NewClusterAgentParams(""), + LogParams: log.LogForOneShot(command.LoggerName, command.DefaultLogLevel, true), + } + + complianceCmd.AddCommand(check.ClusterAgentCommands(bundleParams)...) + + return []*cobra.Command{complianceCmd} +} diff --git a/cmd/cluster-agent/subcommands/config/command.go b/cmd/cluster-agent/subcommands/config/command.go new file mode 100644 index 0000000000000..1b881884d65b5 --- /dev/null +++ b/cmd/cluster-agent/subcommands/config/command.go @@ -0,0 +1,48 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package config implements 'cluster-agent config'. +package config + +import ( + "fmt" + + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/pkg/api/util" + "github.com/DataDog/datadog-agent/pkg/cli/subcommands/config" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/config/settings" + settingshttp "github.com/DataDog/datadog-agent/pkg/config/settings/http" + + "github.com/spf13/cobra" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cmd := config.MakeCommand(func() config.GlobalParams { + return config.GlobalParams{ + ConfFilePath: globalParams.ConfFilePath, + ConfigName: command.ConfigName, + LoggerName: command.LoggerName, + SettingsClient: newSettingsClient, + } + }) + + return []*cobra.Command{cmd} +} + +func newSettingsClient() (settings.Client, error) { + c := util.GetClient(false) + + apiConfigURL := fmt.Sprintf( + "https://localhost:%v/config", + pkgconfig.Datadog.GetInt("cluster_agent.cmd_port"), + ) + + return settingshttp.NewClient(c, apiConfigURL, "datadog-cluster-agent"), nil +} diff --git a/cmd/cluster-agent/subcommands/configcheck/command.go b/cmd/cluster-agent/subcommands/configcheck/command.go new file mode 100644 index 0000000000000..0d0035e54434c --- /dev/null +++ b/cmd/cluster-agent/subcommands/configcheck/command.go @@ -0,0 +1,28 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package configcheck implements 'cluster-agent configcheck'. +package configcheck + +import ( + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/pkg/cli/subcommands/dcaconfigcheck" + + "github.com/spf13/cobra" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cmd := dcaconfigcheck.MakeCommand(func() dcaconfigcheck.GlobalParams { + return dcaconfigcheck.GlobalParams{ + ConfFilePath: globalParams.ConfFilePath, + } + }) + + return []*cobra.Command{cmd} +} diff --git a/cmd/cluster-agent/subcommands/diagnose/command.go b/cmd/cluster-agent/subcommands/diagnose/command.go new file mode 100644 index 0000000000000..c62d20dfd818c --- /dev/null +++ b/cmd/cluster-agent/subcommands/diagnose/command.go @@ -0,0 +1,46 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package diagnose implements 'cluster-agent diagnose'. +package diagnose + +import ( + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/pkg/diagnose" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/fatih/color" + "github.com/spf13/cobra" + "go.uber.org/fx" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cmd := &cobra.Command{ + Use: "diagnose", + Short: "Execute some connectivity diagnosis on your system", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + return fxutil.OneShot(run, + fx.Supply(core.BundleParams{ + ConfigParams: config.NewClusterAgentParams(globalParams.ConfFilePath, config.WithConfigLoadSecrets(true)), + LogParams: log.LogForOneShot(command.LoggerName, command.DefaultLogLevel, true), + }), + core.Bundle, + ) + }, + } + + return []*cobra.Command{cmd} +} + +func run(log log.Component, config config.Component) error { + return diagnose.RunAll(color.Output) +} diff --git a/cmd/cluster-agent/subcommands/flare/command.go b/cmd/cluster-agent/subcommands/flare/command.go new file mode 100644 index 0000000000000..1ff2c2346bc0f --- /dev/null +++ b/cmd/cluster-agent/subcommands/flare/command.go @@ -0,0 +1,127 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package flare implements 'cluster-agent flare'. +package flare + +import ( + "bytes" + "fmt" + + "github.com/DataDog/datadog-agent/cmd/agent/common" + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/pkg/api/util" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/flare" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/DataDog/datadog-agent/pkg/util/input" + "github.com/fatih/color" + "github.com/spf13/cobra" + "go.uber.org/fx" +) + +type cliParams struct { + caseID string + email string + send bool +} + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cliParams := &cliParams{} + + cmd := &cobra.Command{ + Use: "flare [caseID]", + Short: "Collect a flare and send it to Datadog", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) > 0 { + cliParams.caseID = args[0] + } + + if cliParams.email == "" { + var err error + cliParams.email, err = input.AskForEmail() + if err != nil { + fmt.Println("Error reading email, please retry or contact support") + return err + } + } + + return fxutil.OneShot(run, + fx.Supply(cliParams), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewClusterAgentParams(globalParams.ConfFilePath, config.WithConfigLoadSecrets(true)), + LogParams: log.LogForOneShot(command.LoggerName, command.DefaultLogLevel, true), + }), + core.Bundle, + ) + }, + } + + cmd.Flags().StringVarP(&cliParams.email, "email", "e", "", "Your email") + cmd.Flags().BoolVarP(&cliParams.send, "send", "s", false, "Automatically send flare (don't prompt for confirmation)") + cmd.SetArgs([]string{"caseID"}) + + return []*cobra.Command{cmd} +} + +func run(log log.Component, config config.Component, cliParams *cliParams) error { + fmt.Fprintln(color.Output, color.BlueString("Asking the Cluster Agent to build the flare archive.")) + var e error + c := util.GetClient(false) // FIX: get certificates right then make this true + urlstr := fmt.Sprintf("https://localhost:%v/flare", pkgconfig.Datadog.GetInt("cluster_agent.cmd_port")) + + logFile := pkgconfig.Datadog.GetString("log_file") + if logFile == "" { + logFile = common.DefaultDCALogFile + } + + // Set session token + e = util.SetAuthToken() + if e != nil { + return e + } + + r, e := util.DoPost(c, urlstr, "application/json", bytes.NewBuffer([]byte{})) + var filePath string + if e != nil { + if r != nil && string(r) != "" { + fmt.Fprintln(color.Output, fmt.Sprintf("The agent ran into an error while making the flare: %s", color.RedString(string(r)))) + } else { + fmt.Fprintln(color.Output, color.RedString("The agent was unable to make a full flare: %s.", e.Error())) + } + fmt.Fprintln(color.Output, color.YellowString("Initiating flare locally, some logs will be missing.")) + filePath, e = flare.CreateDCAArchive(true, common.GetDistPath(), logFile) + if e != nil { + fmt.Printf("The flare zipfile failed to be created: %s\n", e) + return e + } + } else { + filePath = string(r) + } + + fmt.Fprintln(color.Output, fmt.Sprintf("%s is going to be uploaded to Datadog", color.YellowString(filePath))) + if !cliParams.send { + confirmation := input.AskForConfirmation("Are you sure you want to upload a flare? [Y/N]") + if !confirmation { + fmt.Fprintln(color.Output, fmt.Sprintf("Aborting. (You can still use %s)", color.YellowString(filePath))) + return nil + } + } + + response, e := flare.SendFlare(filePath, cliParams.caseID, cliParams.email) + fmt.Println(response) + if e != nil { + return e + } + return nil +} diff --git a/cmd/cluster-agent/subcommands/health/command.go b/cmd/cluster-agent/subcommands/health/command.go new file mode 100644 index 0000000000000..fc15c905f402b --- /dev/null +++ b/cmd/cluster-agent/subcommands/health/command.go @@ -0,0 +1,30 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package health implements 'cluster-agent health'. +package health + +import ( + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/pkg/cli/subcommands/health" + + "github.com/spf13/cobra" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cmd := health.MakeCommand(func() health.GlobalParams { + return health.GlobalParams{ + ConfFilePath: globalParams.ConfFilePath, + ConfigName: command.ConfigName, + LoggerName: command.LoggerName, + } + }) + + return []*cobra.Command{cmd} +} diff --git a/cmd/cluster-agent/subcommands/metamap/command.go b/cmd/cluster-agent/subcommands/metamap/command.go new file mode 100644 index 0000000000000..355630ddbfe22 --- /dev/null +++ b/cmd/cluster-agent/subcommands/metamap/command.go @@ -0,0 +1,99 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package metamap implements 'cluster-agent metamap'. +package metamap + +import ( + "fmt" + + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/pkg/api/util" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/status" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/spf13/cobra" + "go.uber.org/fx" +) + +type cliParams struct { + args []string +} + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cliParams := &cliParams{} + + cmd := &cobra.Command{ + Use: "metamap [nodeName]", + Short: "Print the map between the metadata and the pods associated", + Long: `The metamap command is mostly designed for troubleshooting purposes. +One can easily identify which pods are running on which nodes, +as well as which services are serving the pods. Or the deployment name for the pod`, + Example: "datadog-cluster-agent metamap ip-10-0-115-123", + RunE: func(cmd *cobra.Command, args []string) error { + cliParams.args = args + return fxutil.OneShot(run, + fx.Supply(cliParams), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewClusterAgentParams(globalParams.ConfFilePath, config.WithConfigLoadSecrets(true)), + LogParams: log.LogForOneShot(command.LoggerName, command.DefaultLogLevel, true), + }), + core.Bundle, + ) + }, + } + + return []*cobra.Command{cmd} +} + +func run(log log.Component, config config.Component, cliParams *cliParams) error { + nodeName := "" + if len(cliParams.args) > 0 { + nodeName = cliParams.args[0] + } + return getMetadataMap(nodeName) // if nodeName == "", call all. +} + +func getMetadataMap(nodeName string) error { + var e error + c := util.GetClient(false) // FIX: get certificates right then make this true + var urlstr string + if nodeName == "" { + urlstr = fmt.Sprintf("https://localhost:%v/api/v1/tags/pod", pkgconfig.Datadog.GetInt("cluster_agent.cmd_port")) + } else { + urlstr = fmt.Sprintf("https://localhost:%v/api/v1/tags/pod/%s", pkgconfig.Datadog.GetInt("cluster_agent.cmd_port"), nodeName) + } + + // Set session token + e = util.SetAuthToken() + if e != nil { + return e + } + + r, e := util.DoGet(c, urlstr, util.LeaveConnectionOpen) + if e != nil { + fmt.Printf(` + Could not reach agent: %v + Make sure the agent is properly running before requesting the map of services to pods. + Contact support if you continue having issues.`, e) + return e + } + + formattedMetadataMap, err := status.FormatMetadataMapCLI(r) + if err != nil { + return err + } + + fmt.Println(formattedMetadataMap) + + return nil +} diff --git a/cmd/cluster-agent/subcommands/secrethelper/command.go b/cmd/cluster-agent/subcommands/secrethelper/command.go new file mode 100644 index 0000000000000..12b93800e285b --- /dev/null +++ b/cmd/cluster-agent/subcommands/secrethelper/command.go @@ -0,0 +1,21 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package secrethelper implements 'cluster-agent secret-helper'. +package diagnose + +import ( + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/cmd/secrethelper" + "github.com/spf13/cobra" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + return secrethelper.Commands() +} diff --git a/cmd/cluster-agent/app/app.go b/cmd/cluster-agent/subcommands/start/command.go similarity index 58% rename from cmd/cluster-agent/app/app.go rename to cmd/cluster-agent/subcommands/start/command.go index b9e2dccc63b04..f856ef9c93382 100644 --- a/cmd/cluster-agent/app/app.go +++ b/cmd/cluster-agent/subcommands/start/command.go @@ -3,10 +3,11 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build kubeapiserver -// +build kubeapiserver +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver -package app +// Package start implements 'cluster-agent start'. +package start import ( "context" @@ -18,20 +19,15 @@ import ( "syscall" "time" - "github.com/fatih/color" - "github.com/gorilla/mux" - "github.com/spf13/cobra" - - v1 "k8s.io/api/core/v1" - "k8s.io/client-go/kubernetes/scheme" - corev1 "k8s.io/client-go/kubernetes/typed/core/v1" - "k8s.io/client-go/tools/record" - "github.com/DataDog/datadog-agent/cmd/agent/common" admissioncmd "github.com/DataDog/datadog-agent/cmd/cluster-agent/admission" "github.com/DataDog/datadog-agent/cmd/cluster-agent/api" dcav1 "github.com/DataDog/datadog-agent/cmd/cluster-agent/api/v1" + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" "github.com/DataDog/datadog-agent/cmd/cluster-agent/custommetrics" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/aggregator" "github.com/DataDog/datadog-agent/pkg/api/healthprobe" "github.com/DataDog/datadog-agent/pkg/clusteragent" @@ -40,168 +36,117 @@ import ( admissionpatch "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/patch" "github.com/DataDog/datadog-agent/pkg/clusteragent/clusterchecks" "github.com/DataDog/datadog-agent/pkg/collector" - "github.com/DataDog/datadog-agent/pkg/config" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/config/remote" "github.com/DataDog/datadog-agent/pkg/config/remote/data" remoteconfig "github.com/DataDog/datadog-agent/pkg/config/remote/service" "github.com/DataDog/datadog-agent/pkg/config/resolver" + commonsettings "github.com/DataDog/datadog-agent/pkg/config/settings" "github.com/DataDog/datadog-agent/pkg/forwarder" - "github.com/DataDog/datadog-agent/pkg/serializer" "github.com/DataDog/datadog-agent/pkg/status/health" "github.com/DataDog/datadog-agent/pkg/telemetry" "github.com/DataDog/datadog-agent/pkg/util" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/hostname" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/apiserver" apicommon "github.com/DataDog/datadog-agent/pkg/util/kubernetes/apiserver/common" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/apiserver/leaderelection" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/clustername" - "github.com/DataDog/datadog-agent/pkg/util/log" + pkglog "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/version" -) -// loggerName is the name of the cluster agent logger -const loggerName config.LoggerName = "CLUSTER" - -// FIXME: move LoadComponents and AC.LoadAndRun in their own package so we don't import cmd/agent -var ( - ClusterAgentCmd = &cobra.Command{ - Use: "datadog-cluster-agent [command]", - Short: "Datadog Cluster Agent at your service.", - Long: ` -Datadog Cluster Agent takes care of running checks that need run only once per cluster. -It also exposes an API for other Datadog agents that provides them with cluster-level -metadata for their metrics.`, - } + "github.com/gorilla/mux" + "github.com/spf13/cobra" + "go.uber.org/fx" + v1 "k8s.io/api/core/v1" + "k8s.io/client-go/kubernetes/scheme" + corev1 "k8s.io/client-go/kubernetes/typed/core/v1" + "k8s.io/client-go/tools/record" +) - startCmd = &cobra.Command{ +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + startCmd := &cobra.Command{ Use: "start", Short: "Start the Cluster Agent", Long: `Runs Datadog Cluster agent in the foreground`, - RunE: start, - } - - versionCmd = &cobra.Command{ - Use: "version", - Short: "Print the version info", - Long: ``, - Run: func(cmd *cobra.Command, args []string) { - if flagNoColor { - color.NoColor = true - } - av, _ := version.Agent() - meta := "" - if av.Meta != "" { - meta = fmt.Sprintf("- Meta: %s ", color.YellowString(av.Meta)) - } - fmt.Fprintln( - color.Output, - fmt.Sprintf("Cluster agent %s %s- Commit: '%s' - Serialization version: %s", - color.BlueString(av.GetNumberAndPre()), - meta, - color.GreenString(version.Commit), - color.MagentaString(serializer.AgentPayloadVersion), - ), + RunE: func(cmd *cobra.Command, args []string) error { + // TODO: once the cluster-agent is represented as a component, and + // not a function (start), this will use `fxutil.Run` instead of + // `fxutil.OneShot`. + return fxutil.OneShot(start, + fx.Supply(globalParams), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewClusterAgentParams(globalParams.ConfFilePath, config.WithConfigLoadSecrets(true)), + LogParams: log.LogForDaemon(command.LoggerName, "log_file", common.DefaultDCALogFile), + }), + core.Bundle, ) }, } - confPath string - flagNoColor bool - stopCh chan struct{} -) - -func init() { - // attach the command to the root - ClusterAgentCmd.AddCommand(startCmd) - ClusterAgentCmd.AddCommand(versionCmd) - - ClusterAgentCmd.PersistentFlags().StringVarP(&confPath, "cfgpath", "c", "", "path to directory containing datadog.yaml") - ClusterAgentCmd.PersistentFlags().BoolVarP(&flagNoColor, "no-color", "n", false, "disable color output") + return []*cobra.Command{startCmd} } -func start(cmd *cobra.Command, args []string) error { - // Starting Cluster Agent sequence - // Initialization order is important for multiple reasons, see comments +func start(log log.Component, config config.Component, cliParams *command.GlobalParams) error { + stopCh := make(chan struct{}) - // Reading configuration as mostly everything can depend on config variables - config.Datadog.SetConfigName("datadog-cluster") - err := common.SetupConfig(confPath) - if err != nil { - return fmt.Errorf("unable to set up global agent configuration: %v", err) - } + mainCtx, mainCtxCancel := context.WithCancel(context.Background()) + defer mainCtxCancel() - // Setup logger - syslogURI := config.GetSyslogURI() - logFile := config.Datadog.GetString("log_file") - if logFile == "" { - logFile = common.DefaultDCALogFile - } - if config.Datadog.GetBool("disable_file_logging") { - // this will prevent any logging on file - logFile = "" - } + signalCh := make(chan os.Signal, 1) + signal.Notify(signalCh, os.Interrupt, syscall.SIGTERM) - err = config.SetupLogger( - loggerName, - config.Datadog.GetString("log_level"), - logFile, - syslogURI, - config.Datadog.GetBool("syslog_rfc"), - config.Datadog.GetBool("log_to_console"), - config.Datadog.GetBool("log_format_json"), - ) - if err != nil { - log.Criticalf("Unable to setup logger: %s", err) - return nil - } + // Starting Cluster Agent sequence + // Initialization order is important for multiple reasons, see comments - if err := util.SetupCoreDump(); err != nil { - log.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) + if err := util.SetupCoreDump(config); err != nil { + pkglog.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) } // Init settings that can be changed at runtime if err := initRuntimeSettings(); err != nil { - log.Warnf("Can't initiliaze the runtime settings: %v", err) + pkglog.Warnf("Can't initiliaze the runtime settings: %v", err) } // Setup Internal Profiling - common.SetupInternalProfiling() + common.SetupInternalProfiling(pkgconfig.Datadog, "") - if !config.Datadog.IsSet("api_key") { - log.Critical("no API key configured, exiting") - return nil + if !pkgconfig.Datadog.IsSet("api_key") { + return fmt.Errorf("no API key configured, exiting") } - mainCtx, mainCtxCancel := context.WithCancel(context.Background()) - defer mainCtxCancel() // Calling cancel twice is safe - // Expose the registered metrics via HTTP. http.Handle("/metrics", telemetry.Handler()) - metricsPort := config.Datadog.GetInt("metrics_port") + metricsPort := pkgconfig.Datadog.GetInt("metrics_port") metricsServer := &http.Server{ Addr: fmt.Sprintf("0.0.0.0:%d", metricsPort), Handler: http.DefaultServeMux, } + go func() { err := metricsServer.ListenAndServe() if err != nil && err != http.ErrServerClosed { - log.Errorf("Error creating expvar server on port %v: %v", metricsPort, err) + pkglog.Errorf("Error creating expvar server on port %v: %v", metricsPort, err) } }() // Setup healthcheck port - var healthPort = config.Datadog.GetInt("health_port") + var healthPort = pkgconfig.Datadog.GetInt("health_port") if healthPort > 0 { err := healthprobe.Serve(mainCtx, healthPort) if err != nil { - return log.Errorf("Error starting health port, exiting: %v", err) + return fmt.Errorf("Error starting health port, exiting: %v", err) } - log.Debugf("Health check listening on port %d", healthPort) + + pkglog.Debugf("Health check listening on port %d", healthPort) } // Initialize remote configuration - if config.Datadog.GetBool("remote_configuration.enabled") { - rcClient, err := initializeRemoteConfig(mainCtx) + var rcClient *remote.Client + if pkgconfig.Datadog.GetBool("remote_configuration.enabled") { + var err error + rcClient, err = initializeRemoteConfig(mainCtx) if err != nil { log.Errorf("Failed to start remote-configuration: %v", err) } else { @@ -211,30 +156,31 @@ func start(cmd *cobra.Command, args []string) error { } // Starting server early to ease investigations - if err = api.StartServer(); err != nil { - return log.Errorf("Error while starting agent API, exiting: %v", err) + if err := api.StartServer(); err != nil { + return fmt.Errorf("Error while starting agent API, exiting: %v", err) } // Getting connection to APIServer, it's done before Hostname resolution // as hostname resolution may call APIServer - log.Info("Waiting to obtain APIClient connection") + pkglog.Info("Waiting to obtain APIClient connection") apiCl, err := apiserver.WaitForAPIClient(context.Background()) // make sure we can connect to the apiserver if err != nil { - return log.Errorf("Fatal error: Cannot connect to the apiserver: %v", err) + return fmt.Errorf("Fatal error: Cannot connect to the apiserver: %v", err) } - log.Infof("Got APIClient connection") + pkglog.Infof("Got APIClient connection") // Get hostname as aggregator requires hostname - hname, err := hostname.Get(context.TODO()) + hname, err := hostname.Get(mainCtx) if err != nil { - return log.Errorf("Error while getting hostname, exiting: %v", err) + return fmt.Errorf("Error while getting hostname, exiting: %v", err) } - log.Infof("Hostname is: %s", hname) + + pkglog.Infof("Hostname is: %s", hname) // setup the forwarder - keysPerDomain, err := config.GetMultipleEndpoints() + keysPerDomain, err := pkgconfig.GetMultipleEndpoints() if err != nil { - log.Error("Misconfiguration of agent endpoints: ", err) + pkglog.Error("Misconfiguration of agent endpoints: ", err) } // If a cluster-agent looses the connectivity to DataDog, we still want it to remain ready so that its endpoint remains in the service because: @@ -256,7 +202,7 @@ func start(cmd *cobra.Command, args []string) error { // Create event recorder eventBroadcaster := record.NewBroadcaster() - eventBroadcaster.StartLogging(log.Infof) + eventBroadcaster.StartLogging(pkglog.Infof) eventBroadcaster.StartRecordingToSink(&corev1.EventSinkImpl{Interface: apiCl.Cl.CoreV1().Events("")}) eventRecorder := eventBroadcaster.NewRecorder(scheme.Scheme, v1.EventSource{Component: "datadog-cluster-agent"}) @@ -274,33 +220,33 @@ func start(cmd *cobra.Command, args []string) error { if aggErr := apiserver.StartControllers(ctx); aggErr != nil { for _, err := range aggErr.Errors() { - log.Warnf("Error while starting controller: %v", err) + pkglog.Warnf("Error while starting controller: %v", err) } } - clusterName := clustername.GetClusterName(context.TODO(), hname) - if config.Datadog.GetBool("orchestrator_explorer.enabled") { + clusterName := clustername.GetRFC1123CompliantClusterName(context.TODO(), hname) + if pkgconfig.Datadog.GetBool("orchestrator_explorer.enabled") { // Generate and persist a cluster ID // this must be a UUID, and ideally be stable for the lifetime of a cluster, // so we store it in a configmap that we try and read before generating a new one. coreClient := apiCl.Cl.CoreV1().(*corev1.CoreV1Client) _, err = apicommon.GetOrCreateClusterID(coreClient) if err != nil { - log.Errorf("Failed to generate or retrieve the cluster ID") + pkglog.Errorf("Failed to generate or retrieve the cluster ID") } if clusterName == "" { - log.Warn("Failed to auto-detect a Kubernetes cluster name. We recommend you set it manually via the cluster_name config option") + pkglog.Warn("Failed to auto-detect a Kubernetes cluster name. We recommend you set it manually via the cluster_name config option") } } else { - log.Info("Orchestrator explorer is disabled") + pkglog.Info("Orchestrator explorer is disabled") } - // Setup a channel to catch OS signals - signalCh := make(chan os.Signal, 1) - signal.Notify(signalCh, os.Interrupt, syscall.SIGTERM) + // FIXME: move LoadComponents and AC.LoadAndRun in their own package so we + // don't import cmd/agent + // create and setup the Autoconfig instance - common.LoadComponents(mainCtx, config.Datadog.GetString("confd_path")) + common.LoadComponents(mainCtx, pkgconfig.Datadog.GetString("confd_path")) // Set up check collector common.AC.AddScheduler("check", collector.InitCheckScheduler(common.Coll), true) @@ -309,7 +255,7 @@ func start(cmd *cobra.Command, args []string) error { // start the autoconfig, this will immediately run any configured check common.AC.LoadAndRun(mainCtx) - if config.Datadog.GetBool("cluster_checks.enabled") { + if pkgconfig.Datadog.GetBool("cluster_checks.enabled") { // Start the cluster check Autodiscovery clusterCheckHandler, err := setupClusterCheck(mainCtx) if err == nil { @@ -317,15 +263,15 @@ func start(cmd *cobra.Command, args []string) error { dcav1.InstallChecksEndpoints(r, clusteragent.ServerContext{ClusterCheckHandler: clusterCheckHandler}) }) } else { - log.Errorf("Error while setting up cluster check Autodiscovery, CLC API endpoints won't be available, err: %v", err) + pkglog.Errorf("Error while setting up cluster check Autodiscovery, CLC API endpoints won't be available, err: %v", err) } } else { - log.Debug("Cluster check Autodiscovery disabled") + pkglog.Debug("Cluster check Autodiscovery disabled") } wg := sync.WaitGroup{} // Autoscaler Controller Goroutine - if config.Datadog.GetBool("external_metrics_provider.enabled") { + if pkgconfig.Datadog.GetBool("external_metrics_provider.enabled") { // Start the k8s custom metrics server. This is a blocking call wg.Add(1) go func() { @@ -333,31 +279,36 @@ func start(cmd *cobra.Command, args []string) error { errServ := custommetrics.RunServer(mainCtx, apiCl) if errServ != nil { - log.Errorf("Error in the External Metrics API Server: %v", errServ) + pkglog.Errorf("Error in the External Metrics API Server: %v", errServ) } }() } // Compliance - if config.Datadog.GetBool("compliance_config.enabled") { + if pkgconfig.Datadog.GetBool("compliance_config.enabled") { wg.Add(1) go func() { defer wg.Done() if err := runCompliance(mainCtx, apiCl, le.IsLeader); err != nil { - log.Errorf("Error while running compliance agent: %v", err) + pkglog.Errorf("Error while running compliance agent: %v", err) } }() } - if config.Datadog.GetBool("admission_controller.enabled") { - if config.Datadog.GetBool("admission_controller.auto_instrumentation.patcher.enabled") { + if pkgconfig.Datadog.GetBool("admission_controller.enabled") { + if pkgconfig.Datadog.GetBool("admission_controller.auto_instrumentation.patcher.enabled") { patchCtx := admissionpatch.ControllerContext{ - IsLeaderFunc: le.IsLeader, - Client: apiCl.Cl, - StopCh: stopCh, + IsLeaderFunc: le.IsLeader, + LeaderSubscribeFunc: le.Subscribe, + K8sClient: apiCl.Cl, + RcClient: rcClient, + ClusterName: clusterName, + StopCh: stopCh, + } + if err := admissionpatch.StartControllers(patchCtx); err != nil { + log.Errorf("Cannot start auto instrumentation patcher: %v", err) } - admissionpatch.StartControllers(patchCtx, clusterName) } else { log.Info("Auto instrumentation patcher is disabled") } @@ -374,14 +325,14 @@ func start(cmd *cobra.Command, args []string) error { err = admissionpkg.StartControllers(admissionCtx) if err != nil { - log.Errorf("Could not start admission controller: %v", err) + pkglog.Errorf("Could not start admission controller: %v", err) } else { // Webhook and secret controllers are started successfully // Setup the the k8s admission webhook server server := admissioncmd.NewServer() - server.Register(config.Datadog.GetString("admission_controller.inject_config.endpoint"), mutate.InjectConfig, apiCl.DynamicCl) - server.Register(config.Datadog.GetString("admission_controller.inject_tags.endpoint"), mutate.InjectTags, apiCl.DynamicCl) - server.Register(config.Datadog.GetString("admission_controller.auto_instrumentation.endpoint"), mutate.InjectAutoInstrumentation, apiCl.DynamicCl) + server.Register(pkgconfig.Datadog.GetString("admission_controller.inject_config.endpoint"), mutate.InjectConfig, apiCl.DynamicCl) + server.Register(pkgconfig.Datadog.GetString("admission_controller.inject_tags.endpoint"), mutate.InjectTags, apiCl.DynamicCl) + server.Register(pkgconfig.Datadog.GetString("admission_controller.auto_instrumentation.endpoint"), mutate.InjectAutoInstrumentation, apiCl.DynamicCl) // Start the k8s admission webhook server wg.Add(1) @@ -390,15 +341,15 @@ func start(cmd *cobra.Command, args []string) error { errServ := server.Run(mainCtx, apiCl.Cl) if errServ != nil { - log.Errorf("Error in the Admission Controller Webhook Server: %v", errServ) + pkglog.Errorf("Error in the Admission Controller Webhook Server: %v", errServ) } }() } } else { - log.Info("Admission controller is disabled") + pkglog.Info("Admission controller is disabled") } - log.Infof("All components started. Cluster Agent now running.") + pkglog.Infof("All components started. Cluster Agent now running.") // Block here until we receive the interrupt signal <-signalCh @@ -407,32 +358,52 @@ func start(cmd *cobra.Command, args []string) error { // GetReadyNonBlocking has a 100ms timeout to avoid blocking health, err := health.GetReadyNonBlocking() if err != nil { - log.Warnf("Cluster Agent health unknown: %s", err) + pkglog.Warnf("Cluster Agent health unknown: %s", err) } else if len(health.Unhealthy) > 0 { - log.Warnf("Some components were unhealthy: %v", health.Unhealthy) + pkglog.Warnf("Some components were unhealthy: %v", health.Unhealthy) } // Cancel the main context to stop components mainCtxCancel() - // wait for the External Metrics Server and - // the Admission Webhook Server to stop properly + // wait for the External Metrics Server and the Admission Webhook Server to + // stop properly wg.Wait() - if stopCh != nil { - close(stopCh) - } + close(stopCh) demux.Stop(true) if err := metricsServer.Shutdown(context.Background()); err != nil { - log.Errorf("Error shutdowning metrics server on port %d: %v", metricsPort, err) + pkglog.Errorf("Error shutdowning metrics server on port %d: %v", metricsPort, err) } - log.Info("See ya!") - log.Flush() + pkglog.Info("See ya!") + pkglog.Flush() + return nil } +// initRuntimeSettings builds the map of runtime Cluster Agent settings configurable at runtime. +func initRuntimeSettings() error { + if err := commonsettings.RegisterRuntimeSetting(commonsettings.LogLevelRuntimeSetting{}); err != nil { + return err + } + + if err := commonsettings.RegisterRuntimeSetting(commonsettings.RuntimeMutexProfileFraction("runtime_mutex_profile_fraction")); err != nil { + return err + } + + if err := commonsettings.RegisterRuntimeSetting(commonsettings.RuntimeBlockProfileRate("runtime_block_profile_rate")); err != nil { + return err + } + + if err := commonsettings.RegisterRuntimeSetting(commonsettings.ProfilingGoroutines("internal_profiling_goroutines")); err != nil { + return err + } + + return commonsettings.RegisterRuntimeSetting(commonsettings.ProfilingRuntimeSetting{SettingName: "internal_profiling", Service: "datadog-cluster-agent"}) +} + func setupClusterCheck(ctx context.Context) (*clusterchecks.Handler, error) { handler, err := clusterchecks.NewHandler(common.AC) if err != nil { @@ -440,7 +411,7 @@ func setupClusterCheck(ctx context.Context) (*clusterchecks.Handler, error) { } go handler.Run(ctx) - log.Info("Started cluster check Autodiscovery") + pkglog.Info("Started cluster check Autodiscovery") return handler, nil } @@ -454,7 +425,7 @@ func initializeRemoteConfig(ctx context.Context) (*remote.Client, error) { return nil, fmt.Errorf("unable to start remote-config service: %w", err) } - rcClient, err := remote.NewClient("cluster-agent", configService, version.AgentVersion, []data.Product{}, time.Second*5) + rcClient, err := remote.NewClient("cluster-agent", configService, version.AgentVersion, []data.Product{data.ProductAPMTracing}, time.Second*5) if err != nil { return nil, fmt.Errorf("unable to create local remote-config client: %w", err) } diff --git a/cmd/cluster-agent/subcommands/start/command_test.go b/cmd/cluster-agent/subcommands/start/command_test.go new file mode 100644 index 0000000000000..09da8ef3b1527 --- /dev/null +++ b/cmd/cluster-agent/subcommands/start/command_test.go @@ -0,0 +1,24 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +package start + +import ( + "testing" + + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +func TestCommand(t *testing.T) { + fxutil.TestOneShotSubcommand(t, + Commands(&command.GlobalParams{}), + []string{"start"}, + start, + func() {}) +} diff --git a/cmd/cluster-agent/app/compliance.go b/cmd/cluster-agent/subcommands/start/compliance.go similarity index 98% rename from cmd/cluster-agent/app/compliance.go rename to cmd/cluster-agent/subcommands/start/compliance.go index d47f1dec362a4..9a08aff29cb21 100644 --- a/cmd/cluster-agent/app/compliance.go +++ b/cmd/cluster-agent/subcommands/start/compliance.go @@ -3,10 +3,10 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build kubeapiserver -// +build kubeapiserver +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver -package app +package start import ( "context" diff --git a/cmd/cluster-agent/subcommands/status/command.go b/cmd/cluster-agent/subcommands/status/command.go new file mode 100644 index 0000000000000..38219abee6bde --- /dev/null +++ b/cmd/cluster-agent/subcommands/status/command.go @@ -0,0 +1,114 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package status implements 'cluster-agent status'. +package status + +import ( + "bytes" + "encoding/json" + "fmt" + "os" + + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/pkg/api/util" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/status" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/spf13/cobra" + "go.uber.org/fx" +) + +type cliParams struct { + jsonStatus bool + prettyPrintJSON bool + statusFilePath string +} + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cliParams := &cliParams{} + cmd := &cobra.Command{ + Use: "status", + Short: "Print the current status", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + return fxutil.OneShot(run, + fx.Supply(cliParams), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewClusterAgentParams(globalParams.ConfFilePath, config.WithConfigLoadSecrets(true)), + LogParams: log.LogForOneShot(command.LoggerName, command.DefaultLogLevel, true), + }), + core.Bundle, + ) + }, + } + + cmd.Flags().BoolVarP(&cliParams.jsonStatus, "json", "j", false, "print out raw json") + cmd.Flags().BoolVarP(&cliParams.prettyPrintJSON, "pretty-json", "p", false, "pretty print JSON") + cmd.Flags().StringVarP(&cliParams.statusFilePath, "file", "o", "", "Output the status command to a file") + + return []*cobra.Command{cmd} +} + +func run(log log.Component, config config.Component, cliParams *cliParams) error { + fmt.Printf("Getting the status from the agent.\n") + var e error + var s string + c := util.GetClient(false) // FIX: get certificates right then make this true + // TODO use https + urlstr := fmt.Sprintf("https://localhost:%v/status", pkgconfig.Datadog.GetInt("cluster_agent.cmd_port")) + + // Set session token + e = util.SetAuthToken() + if e != nil { + return e + } + + r, e := util.DoGet(c, urlstr, util.LeaveConnectionOpen) + if e != nil { + var errMap = make(map[string]string) + json.Unmarshal(r, &errMap) //nolint:errcheck + // If the error has been marshalled into a json object, check it and return it properly + if err, found := errMap["error"]; found { + e = fmt.Errorf(err) + } + + fmt.Printf(` + Could not reach agent: %v + Make sure the agent is running before requesting the status. + Contact support if you continue having issues.`, e) + return e + } + + // The rendering is done in the client so that the agent has less work to do + if cliParams.prettyPrintJSON { + var prettyJSON bytes.Buffer + json.Indent(&prettyJSON, r, "", " ") //nolint:errcheck + s = prettyJSON.String() + } else if cliParams.jsonStatus { + s = string(r) + } else { + formattedStatus, err := status.FormatDCAStatus(r) + if err != nil { + return err + } + s = formattedStatus + } + + if cliParams.statusFilePath != "" { + os.WriteFile(cliParams.statusFilePath, []byte(s), 0644) //nolint:errcheck + } else { + fmt.Println(s) + } + + return nil +} diff --git a/cmd/cluster-agent/subcommands/subcommands.go b/cmd/cluster-agent/subcommands/subcommands.go new file mode 100644 index 0000000000000..7c8b5392fe32e --- /dev/null +++ b/cmd/cluster-agent/subcommands/subcommands.go @@ -0,0 +1,52 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +package subcommands + +import ( + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + cmdcheck "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/check" + cmdclusterchecks "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/clusterchecks" + cmdcompliance "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/compliance" + cmdconfig "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/config" + cmdconfigcheck "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/configcheck" + cmddiagnose "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/diagnose" + cmdflare "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/flare" + cmdhealth "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/health" + cmdmetamap "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/metamap" + cmdsecrethelper "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/secrethelper" + cmdstart "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/start" + cmdstatus "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/status" + cmdtaggerlist "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/taggerlist" + cmdtelemetry "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/telemetry" + cmdversion "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/version" + cmdworkloadlist "github.com/DataDog/datadog-agent/cmd/cluster-agent/subcommands/workloadlist" +) + +// ClusterAgentSubcommands returns SubcommandFactories for the subcommands +// supported with the current build flags. +func ClusterAgentSubcommands() []command.SubcommandFactory { + return []command.SubcommandFactory{ + cmdstart.Commands, + cmdversion.Commands, + cmdcheck.Commands, + cmdconfig.Commands, + cmdhealth.Commands, + cmdconfigcheck.Commands, + cmdclusterchecks.Commands, + cmdcompliance.Commands, + cmdflare.Commands, + cmddiagnose.Commands, + cmdmetamap.Commands, + cmdsecrethelper.Commands, + cmdtelemetry.Commands, + cmdstatus.Commands, + cmdworkloadlist.Commands, + cmdtaggerlist.Commands, + } +} diff --git a/cmd/cluster-agent/subcommands/taggerlist/command.go b/cmd/cluster-agent/subcommands/taggerlist/command.go new file mode 100644 index 0000000000000..da90b71266971 --- /dev/null +++ b/cmd/cluster-agent/subcommands/taggerlist/command.go @@ -0,0 +1,30 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package taggerlist implements 'cluster-agent taggerlist'. +package taggerlist + +import ( + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/pkg/cli/subcommands/taggerlist" + + "github.com/spf13/cobra" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cmd := taggerlist.MakeCommand(func() taggerlist.GlobalParams { + return taggerlist.GlobalParams{ + ConfFilePath: globalParams.ConfFilePath, + ConfigName: command.ConfigName, + LoggerName: command.LoggerName, + } + }) + + return []*cobra.Command{cmd} +} diff --git a/cmd/cluster-agent/subcommands/telemetry/command.go b/cmd/cluster-agent/subcommands/telemetry/command.go new file mode 100644 index 0000000000000..fbf27e285b4a5 --- /dev/null +++ b/cmd/cluster-agent/subcommands/telemetry/command.go @@ -0,0 +1,37 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package telemetry implements 'cluster-agent telemetry'. +package telemetry + +import ( + "fmt" + + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/pkg/flare" + "github.com/spf13/cobra" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cmd := &cobra.Command{ + Use: "telemetry", + Short: "Print the telemetry metrics exposed by the cluster agent", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + payload, err := flare.QueryDCAMetrics() + if err != nil { + return err + } + fmt.Print(string(payload)) + return nil + }, + } + + return []*cobra.Command{cmd} +} diff --git a/cmd/cluster-agent/subcommands/version/command.go b/cmd/cluster-agent/subcommands/version/command.go new file mode 100644 index 0000000000000..10fb87995956a --- /dev/null +++ b/cmd/cluster-agent/subcommands/version/command.go @@ -0,0 +1,22 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package version implements 'cluster-agent version'. +package version + +import ( + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/pkg/cli/subcommands/version" + + "github.com/spf13/cobra" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + return []*cobra.Command{version.MakeCommand("Cluster Agent")} +} diff --git a/cmd/cluster-agent/subcommands/workloadlist/command.go b/cmd/cluster-agent/subcommands/workloadlist/command.go new file mode 100644 index 0000000000000..9a186a9b05961 --- /dev/null +++ b/cmd/cluster-agent/subcommands/workloadlist/command.go @@ -0,0 +1,30 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +// Package workloadlist implements 'cluster-agent workloadlist'. +package workloadlist + +import ( + "github.com/DataDog/datadog-agent/cmd/cluster-agent/command" + "github.com/DataDog/datadog-agent/pkg/cli/subcommands/workloadlist" + + "github.com/spf13/cobra" +) + +// Commands returns a slice of subcommands for the 'cluster-agent' command. +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cmd := workloadlist.MakeCommand(func() workloadlist.GlobalParams { + return workloadlist.GlobalParams{ + ConfFilePath: globalParams.ConfFilePath, + ConfigName: command.ConfigName, + LoggerName: command.LoggerName, + } + }) + + return []*cobra.Command{cmd} +} diff --git a/cmd/dogstatsd/subcommands/start/command.go b/cmd/dogstatsd/subcommands/start/command.go index 3e638c7305c85..07866ae744e79 100644 --- a/cmd/dogstatsd/subcommands/start/command.go +++ b/cmd/dogstatsd/subcommands/start/command.go @@ -13,6 +13,9 @@ import ( "os/signal" "syscall" + "github.com/spf13/cobra" + "go.uber.org/fx" + "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/pkg/aggregator" "github.com/DataDog/datadog-agent/pkg/api/healthprobe" @@ -29,8 +32,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/version" "github.com/DataDog/datadog-agent/pkg/workloadmeta" - "github.com/spf13/cobra" - "go.uber.org/fx" ) var ( @@ -154,7 +155,7 @@ func RunAgent(ctx context.Context, cliParams *CLIParams, config config.Component return } - if err := util.SetupCoreDump(); err != nil { + if err := util.SetupCoreDump(config); err != nil { log.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) } diff --git a/cmd/manager/auto_exit.go b/cmd/manager/auto_exit.go index d255a5f16176e..577843abce47c 100644 --- a/cmd/manager/auto_exit.go +++ b/cmd/manager/auto_exit.go @@ -6,14 +6,13 @@ package manager import ( + "context" "fmt" "os" "time" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/log" - - "golang.org/x/net/context" ) const ( @@ -26,12 +25,12 @@ type ExitDetector interface { } // ConfigureAutoExit starts automatic shutdown mechanism if necessary -func ConfigureAutoExit(ctx context.Context) error { +func ConfigureAutoExit(ctx context.Context, cfg config.ConfigReader) error { var sd ExitDetector var err error - if config.Datadog.GetBool("auto_exit.noprocess.enabled") { - sd, err = DefaultNoProcessExit() + if cfg.GetBool("auto_exit.noprocess.enabled") { + sd, err = DefaultNoProcessExit(cfg) } if err != nil { @@ -42,7 +41,7 @@ func ConfigureAutoExit(ctx context.Context) error { return nil } - validationPeriod := time.Duration(config.Datadog.GetInt("auto_exit.validation_period")) * time.Second + validationPeriod := time.Duration(cfg.GetInt("auto_exit.validation_period")) * time.Second return startAutoExit(ctx, sd, defaultExitTicker, validationPeriod) } diff --git a/cmd/manager/auto_exit_noprocess.go b/cmd/manager/auto_exit_noprocess.go index e23a63f3ae06e..47e74ada2a960 100644 --- a/cmd/manager/auto_exit_noprocess.go +++ b/cmd/manager/auto_exit_noprocess.go @@ -38,11 +38,11 @@ func NoProcessExit(r []*regexp.Regexp) ExitDetector { } // DefaultNoProcessExit creates the default NoProcess shutdown detector -func DefaultNoProcessExit() (ExitDetector, error) { +func DefaultNoProcessExit(cfg config.ConfigReader) (ExitDetector, error) { mergedRegexps := make([]*regexp.Regexp, len(defaultRegexps)) copy(mergedRegexps, defaultRegexps) - extraRegexps := config.Datadog.GetStringSlice("auto_exit.noprocess.excluded_processes") + extraRegexps := cfg.GetStringSlice("auto_exit.noprocess.excluded_processes") for _, strRegexp := range extraRegexps { r, err := regexp.Compile(strRegexp) if err != nil { diff --git a/cmd/process-agent/api/server.go b/cmd/process-agent/api/server.go index 69e92bb00bb6f..37d1816f36bb6 100644 --- a/cmd/process-agent/api/server.go +++ b/cmd/process-agent/api/server.go @@ -17,8 +17,8 @@ import ( ) func setupHandlers(r *mux.Router) { - r.HandleFunc("/config", settingshttp.Server.GetFull("process_config")).Methods("GET") // Get only settings in the process_config namespace - r.HandleFunc("/config/all", settingshttp.Server.GetFull("")).Methods("GET") // Get all fields from process-agent Config object + r.HandleFunc("/config", settingshttp.Server.GetFullDatadogConfig("process_config")).Methods("GET") // Get only settings in the process_config namespace + r.HandleFunc("/config/all", settingshttp.Server.GetFullDatadogConfig("")).Methods("GET") // Get all fields from process-agent Config object r.HandleFunc("/config/list-runtime", settingshttp.Server.ListConfigurable).Methods("GET") r.HandleFunc("/config/{setting}", settingshttp.Server.GetValue).Methods("GET") r.HandleFunc("/config/{setting}", settingshttp.Server.SetValue).Methods("POST") diff --git a/cmd/process-agent/collector.go b/cmd/process-agent/collector.go index d0524485fbe18..2c2c1e0c7b5ea 100644 --- a/cmd/process-agent/collector.go +++ b/cmd/process-agent/collector.go @@ -7,32 +7,20 @@ package main import ( "fmt" - "hash/fnv" "math/rand" "net/http" - "os" - "strconv" "sync" "time" model "github.com/DataDog/agent-payload/v5/process" + sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" ddconfig "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/config/resolver" "github.com/DataDog/datadog-agent/pkg/forwarder" - "github.com/DataDog/datadog-agent/pkg/forwarder/transaction" - "github.com/DataDog/datadog-agent/pkg/orchestrator" oconfig "github.com/DataDog/datadog-agent/pkg/orchestrator/config" "github.com/DataDog/datadog-agent/pkg/process/checks" - "github.com/DataDog/datadog-agent/pkg/process/config" - "github.com/DataDog/datadog-agent/pkg/process/statsd" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/process/util/api" - apicfg "github.com/DataDog/datadog-agent/pkg/process/util/api/config" - "github.com/DataDog/datadog-agent/pkg/process/util/api/headers" - "github.com/DataDog/datadog-agent/pkg/util/kubernetes/clustername" "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/DataDog/datadog-agent/pkg/version" - "go.uber.org/atomic" ) @@ -66,7 +54,6 @@ type Collector struct { groupID *atomic.Int32 rtIntervalCh chan time.Duration - cfg *config.AgentConfig orchestrator *oconfig.OrchestratorConfig @@ -77,94 +64,44 @@ type Collector struct { // Controls the real-time interval, can change live. realTimeInterval time.Duration - processResults *api.WeightedQueue - rtProcessResults *api.WeightedQueue - eventResults *api.WeightedQueue - - connectionsResults *api.WeightedQueue - - podResults *api.WeightedQueue - - forwarderRetryQueueMaxBytes int - // Enables running realtime checks runRealTime bool - // Drop payloads from specified checks - dropCheckPayloads []string - - // Used to cache the hash result of the host name and the pid of the process agent. Being used as part of - // getRequestID method. Must use pointer, to distinguish between uninitialized value and the theoretical but yet - // possible 0 value for the hash result. - requestIDCachedHash *uint64 + // Submits check payloads to datadog + submitter Submitter } // NewCollector creates a new Collector -func NewCollector(cfg *config.AgentConfig, enabledChecks []checks.Check) (*Collector, error) { - sysInfo, err := checks.CollectSystemInfo(cfg) - if err != nil { - return nil, err +func NewCollector(syscfg *sysconfig.Config, hostInfo *checks.HostInfo, enabledChecks []checks.Check) (*Collector, error) { + runRealTime := !ddconfig.Datadog.GetBool("process_config.disable_realtime_checks") + + cfg := &checks.SysProbeConfig{} + if syscfg != nil && syscfg.Enabled { + // If the sysprobe module is enabled, the process check can call out to the sysprobe for privileged stats + _, processModuleEnabled := syscfg.EnabledModules[sysconfig.ProcessModule] + cfg.ProcessModuleEnabled = processModuleEnabled + cfg.MaxConnsPerMessage = syscfg.MaxConnsPerMessage + cfg.SystemProbeAddress = syscfg.SocketAddress } - runRealTime := !ddconfig.Datadog.GetBool("process_config.disable_realtime_checks") for _, c := range enabledChecks { - if err := c.Init(cfg, sysInfo); err != nil { + if err := c.Init(cfg, hostInfo); err != nil { return nil, err } } - return NewCollectorWithChecks(cfg, enabledChecks, runRealTime) + return NewCollectorWithChecks(enabledChecks, runRealTime) } // NewCollectorWithChecks creates a new Collector -func NewCollectorWithChecks(cfg *config.AgentConfig, checks []checks.Check, runRealTime bool) (*Collector, error) { - queueSize := ddconfig.Datadog.GetInt("process_config.queue_size") - if queueSize <= 0 { - log.Warnf("Invalid check queue size: %d. Using default value: %d", queueSize, ddconfig.DefaultProcessQueueSize) - queueSize = ddconfig.DefaultProcessQueueSize - } - - rtQueueSize := ddconfig.Datadog.GetInt("process_config.rt_queue_size") - if rtQueueSize <= 0 { - log.Warnf("Invalid rt check queue size: %d. Using default value: %d", rtQueueSize, ddconfig.DefaultProcessRTQueueSize) - rtQueueSize = ddconfig.DefaultProcessRTQueueSize - } - - queueBytes := ddconfig.Datadog.GetInt("process_config.process_queue_bytes") - if queueBytes <= 0 { - log.Warnf("Invalid queue bytes size: %d. Using default value: %d", queueBytes, ddconfig.DefaultProcessQueueBytes) - queueBytes = ddconfig.DefaultProcessQueueBytes - } - +func NewCollectorWithChecks(checks []checks.Check, runRealTime bool) (*Collector, error) { orchestrator := oconfig.NewDefaultOrchestratorConfig() if err := orchestrator.Load(); err != nil { return nil, err } - processResults := api.NewWeightedQueue(queueSize, int64(queueBytes)) - log.Debugf("Creating process check queue with max_size=%d and max_weight=%d", processResults.MaxSize(), processResults.MaxWeight()) - - // reuse main queue's ProcessQueueBytes because it's unlikely that it'll reach to that size in bytes, so we don't need a separate config for it - rtProcessResults := api.NewWeightedQueue(rtQueueSize, int64(queueBytes)) - log.Debugf("Creating rt process check queue with max_size=%d and max_weight=%d", rtProcessResults.MaxSize(), rtProcessResults.MaxWeight()) - - connectionsResults := api.NewWeightedQueue(queueSize, int64(queueBytes)) - log.Debugf("Creating connections queue with max_size=%d and max_weight=%d", connectionsResults.MaxSize(), connectionsResults.MaxWeight()) - - podResults := api.NewWeightedQueue(queueSize, int64(orchestrator.PodQueueBytes)) - log.Debugf("Creating pod check queue with max_size=%d and max_weight=%d", podResults.MaxSize(), podResults.MaxWeight()) - - eventResults := api.NewWeightedQueue(queueSize, int64(queueBytes)) - log.Debugf("Creating event check queue with max_size=%d and max_weight=%d", eventResults.MaxSize(), eventResults.MaxWeight()) - - dropCheckPayloads := ddconfig.Datadog.GetStringSlice("process_config.drop_check_payloads") - if len(dropCheckPayloads) > 0 { - log.Debugf("Dropping payloads from checks: %v", dropCheckPayloads) - } - return &Collector{ rtIntervalCh: make(chan time.Duration), - cfg: cfg, orchestrator: orchestrator, groupID: atomic.NewInt32(rand.Int31()), enabledChecks: checks, @@ -173,71 +110,72 @@ func NewCollectorWithChecks(cfg *config.AgentConfig, checks []checks.Check, runR realTimeInterval: 2 * time.Second, realTimeEnabled: atomic.NewBool(false), - processResults: processResults, - rtProcessResults: rtProcessResults, - connectionsResults: connectionsResults, - podResults: podResults, - eventResults: eventResults, - - forwarderRetryQueueMaxBytes: queueBytes, - runRealTime: runRealTime, - - dropCheckPayloads: dropCheckPayloads, }, nil } -func (l *Collector) runCheck(c checks.Check, results *api.WeightedQueue) { +func (l *Collector) runCheck(c checks.Check) { runCounter := l.nextRunCounter(c.Name()) start := time.Now() // update the last collected timestamp for info updateLastCollectTime(start) - messages, err := c.Run(l.cfg, l.nextGroupID()) + result, err := c.Run(l.nextGroupID, nil) if err != nil { log.Errorf("Unable to run check '%s': %s", c.Name(), err) return } + + if result == nil { + // Check returned nothing + return + } + if c.ShouldSaveLastRun() { - checks.StoreCheckOutput(c.Name(), messages) + checks.StoreCheckOutput(c.Name(), result.Payloads()) } else { checks.StoreCheckOutput(c.Name(), nil) } - if c.Name() == checks.PodCheckName { - handlePodChecks(l, start, messages, results) - } else { - l.messagesToResultsQueue(start, c.Name(), messages, results) - } + l.submitter.Submit(start, c.Name(), result.Payloads()) - if !c.RealTime() { + if !c.Realtime() { logCheckDuration(c.Name(), start, runCounter) } } -func (l *Collector) runCheckWithRealTime(c checks.CheckWithRealTime, results, rtResults *api.WeightedQueue, options checks.RunOptions) { +func (l *Collector) runCheckWithRealTime(c checks.Check, options *checks.RunOptions) { start := time.Now() // update the last collected timestamp for info updateLastCollectTime(start) - run, err := c.RunWithOptions(l.cfg, l.nextGroupID, options) + result, err := c.Run(l.nextGroupID, options) if err != nil { log.Errorf("Unable to run check '%s': %s", c.Name(), err) return } - l.messagesToResultsQueue(start, c.Name(), run.Standard, results) + + if result == nil { + // Check returned nothing + return + } + + l.submitter.Submit(start, c.Name(), result.Payloads()) if options.RunStandard { // We are only updating the run counter for the standard check // since RT checks are too frequent and we only log standard check // durations runCounter := l.nextRunCounter(c.Name()) - checks.StoreCheckOutput(c.Name(), run.Standard) + checks.StoreCheckOutput(c.Name(), result.Payloads()) logCheckDuration(c.Name(), start, runCounter) } - l.messagesToResultsQueue(start, c.RealTimeName(), run.RealTime, rtResults) - if options.RunRealTime { - checks.StoreCheckOutput(c.RealTimeName(), run.RealTime) + rtName := checks.RTName(c.Name()) + rtPayloads := result.RealtimePayloads() + + l.submitter.Submit(start, rtName, rtPayloads) + if options.RunRealtime { + checks.StoreCheckOutput(rtName, rtPayloads) } } @@ -266,16 +204,6 @@ func (l *Collector) nextGroupID() int32 { return l.groupID.Inc() } -func (l *Collector) messagesToResultsQueue(start time.Time, name string, messages []model.MessageBody, queue *api.WeightedQueue) { - result := l.messagesToCheckResult(start, name, messages) - if result == nil { - return - } - queue.Add(result) - // update proc and container count for info - updateProcContainerCount(messages) -} - const ( secondsNumberOfBits = 22 hashNumberOfBits = 28 @@ -285,113 +213,12 @@ const ( chunkMask = 1< 0 { - if updateRTStatus { - l.updateRTStatus(statuses) - } - } - } +func (l *Collector) UpdateRTStatus(statuses []*model.CollectorStatus) { + // If realtime mode is disabled in the config, do not change the real time status. + if !l.runRealTime { + return } -} -func (l *Collector) updateRTStatus(statuses []*model.CollectorStatus) { curEnabled := l.realTimeEnabled.Load() // If any of the endpoints wants real-time we'll do that. @@ -775,34 +394,6 @@ func (l *Collector) updateRTStatus(statuses []*model.CollectorStatus) { } } -func (l *Collector) logQueuesSize() { - var ( - processSize = l.processResults.Len() - rtProcessSize = l.rtProcessResults.Len() - connectionsSize = l.connectionsResults.Len() - eventsSize = l.eventResults.Len() - podSize = l.podResults.Len() - ) - - if processSize == 0 && - rtProcessSize == 0 && - connectionsSize == 0 && - eventsSize == 0 && - podSize == 0 { - return - } - - log.Infof( - "Delivery queues: process[size=%d, weight=%d], rtprocess[size=%d, weight=%d], connections[size=%d, weight=%d], event[size=%d, weight=%d], pod[size=%d, weight=%d]", - processSize, l.processResults.Weight(), - rtProcessSize, l.rtProcessResults.Weight(), - connectionsSize, l.connectionsResults.Weight(), - eventsSize, l.eventResults.Weight(), - podSize, l.podResults.Weight(), - ) - -} - // getContainerCount returns the number of containers in the message body func getContainerCount(mb model.MessageBody) int { switch v := mb.(type) { @@ -863,19 +454,9 @@ func readResponseStatuses(checkName string, responses <-chan forwarder.Response) func ignoreResponseBody(checkName string) bool { switch checkName { - case checks.Pod.Name(), checks.PodCheckManifestName, checks.ProcessEvents.Name(): + case checks.PodCheckName, checks.PodCheckManifestName, checks.ProcessEventsCheckName: return true default: return false } } - -// Pod check returns a list of messages can be divided into two parts : pod payloads and manifest payloads -// By default we only send pod payloads containing pod metadata and pod manifests (yaml) -// Manifest payloads is a copy of pod manifests, we only send manifest payloads when feature flag is true -func handlePodChecks(l *Collector, start time.Time, messages []model.MessageBody, results *api.WeightedQueue) { - l.messagesToResultsQueue(start, checks.PodCheckName, messages[:len(messages)/2], results) - if l.orchestrator.IsManifestCollectionEnabled { - l.messagesToResultsQueue(start, checks.PodCheckManifestName, messages[len(messages)/2:], results) - } -} diff --git a/cmd/process-agent/collector_api_test.go b/cmd/process-agent/collector_api_test.go index a3c88e0d5a8eb..11daa359ff8a6 100644 --- a/cmd/process-agent/collector_api_test.go +++ b/cmd/process-agent/collector_api_test.go @@ -18,7 +18,6 @@ import ( "github.com/DataDog/agent-payload/v5/process" ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/process/checks" - "github.com/DataDog/datadog-agent/pkg/process/config" apicfg "github.com/DataDog/datadog-agent/pkg/process/util/api/config" "github.com/DataDog/datadog-agent/pkg/process/util/api/headers" "github.com/DataDog/datadog-agent/pkg/version" @@ -56,6 +55,19 @@ func setProcessEventsEndpointsForTest(config ddconfig.Config, eps ...apicfg.Endp config.Set("process_config.events_additional_endpoints", additionalEps) } +func setOrchestratorEndpointsForTest(config ddconfig.Config, eps ...apicfg.Endpoint) { + additionalEps := make(map[string][]string) + for i, ep := range eps { + if i == 0 { + config.Set("api_key", ep.APIKey) + config.Set("orchestrator_explorer.orchestrator_dd_url", ep.Endpoint) + } else { + additionalEps[ep.Endpoint.String()] = append(additionalEps[ep.Endpoint.String()], ep.APIKey) + } + } + config.Set("orchestrator_explorer.orchestrator_additional_endpoints", additionalEps) +} + func TestSendConnectionsMessage(t *testing.T) { m := &process.CollectorConnections{ HostName: testHostName, @@ -63,16 +75,16 @@ func TestSendConnectionsMessage(t *testing.T) { } check := &testCheck{ - name: checks.Connections.Name(), + name: checks.ConnectionsCheckName, data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{}, ddconfig.Mock(t), nil, func(c *Collector, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v1/connections", req.uri) - assert.Equal(t, c.cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) apiEps, err := getAPIEndpoints() assert.NoError(t, err) assert.Equal(t, apiEps[0].APIKey, req.headers.Get("DD-Api-Key")) @@ -87,7 +99,7 @@ func TestSendConnectionsMessage(t *testing.T) { cc, ok := reqBody.Body.(*process.CollectorConnections) require.True(t, ok) - assert.Equal(t, c.cfg.HostName, cc.HostName) + assert.Equal(t, testHostName, cc.HostName) assert.Equal(t, int32(1), cc.GroupId) }) } @@ -102,16 +114,16 @@ func TestSendContainerMessage(t *testing.T) { } check := &testCheck{ - name: checks.Container.Name(), + name: checks.ContainerCheckName, data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{}, ddconfig.Mock(t), nil, func(c *Collector, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v1/container", req.uri) - assert.Equal(t, c.cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) eps, err := getAPIEndpoints() assert.NoError(t, err) assert.Equal(t, eps[0].APIKey, req.headers.Get("DD-Api-Key")) @@ -139,16 +151,16 @@ func TestSendProcMessage(t *testing.T) { } check := &testCheck{ - name: checks.Process.Name(), + name: checks.ProcessCheckName, data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{}, ddconfig.Mock(t), nil, func(c *Collector, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v1/collector", req.uri) - assert.Equal(t, c.cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) eps, err := getAPIEndpoints() assert.NoError(t, err) assert.Equal(t, eps[0].APIKey, req.headers.Get("DD-Api-Key")) @@ -179,16 +191,16 @@ func TestSendProcessDiscoveryMessage(t *testing.T) { } check := &testCheck{ - name: checks.ProcessDiscovery.Name(), + name: checks.DiscoveryCheckName, data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{}, ddconfig.Mock(t), nil, func(c *Collector, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v1/discovery", req.uri) - assert.Equal(t, c.cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) eps, err := getAPIEndpoints() assert.NoError(t, err) assert.Equal(t, eps[0].APIKey, req.headers.Get("DD-Api-Key")) @@ -228,16 +240,16 @@ func TestSendProcessEventMessage(t *testing.T) { } check := &testCheck{ - name: checks.ProcessEvents.Name(), + name: checks.ProcessEventsCheckName, data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{}, ddconfig.Mock(t), nil, func(c *Collector, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v2/proclcycle", req.uri) - assert.Equal(t, c.cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) eps, err := getEventsAPIEndpoints() assert.NoError(t, err) assert.Equal(t, eps[0].APIKey, req.headers.Get("DD-Api-Key")) @@ -272,11 +284,11 @@ func TestSendProcMessageWithRetry(t *testing.T) { } check := &testCheck{ - name: checks.Process.Name(), + name: checks.ProcessCheckName, data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{ErrorCount: 1}, ddconfig.Mock(t), nil, func(c *Collector, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{ErrorCount: 1}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { requests := []request{ <-ep.Requests, <-ep.Requests, @@ -284,7 +296,7 @@ func TestSendProcMessageWithRetry(t *testing.T) { timestamps := make(map[string]struct{}) for _, req := range requests { - assert.Equal(t, c.cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) eps, err := getAPIEndpoints() assert.NoError(t, err) assert.Equal(t, eps[0].APIKey, req.headers.Get("DD-Api-Key")) @@ -311,11 +323,11 @@ func TestRTProcMessageNotRetried(t *testing.T) { } check := &testCheck{ - name: checks.Process.RealTimeName(), + name: checks.RTProcessCheckName, data: [][]process.MessageBody{{m}}, } - runCollectorTest(t, check, config.NewDefaultAgentConfig(), &endpointConfig{ErrorCount: 1}, ddconfig.Mock(t), nil, func(c *Collector, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{ErrorCount: 1}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { req := <-ep.Requests reqBody, err := process.DecodeMessage(req.body) @@ -336,26 +348,32 @@ func TestRTProcMessageNotRetried(t *testing.T) { } func TestSendPodMessageSendManifestPayload(t *testing.T) { - clusterID, cfg, check := getPodCheckMessage(t) + clusterID, check := getPodCheckMessage(t) - init := func(c *Collector) { - c.orchestrator.OrchestrationCollectionEnabled = true - c.orchestrator.IsManifestCollectionEnabled = true - } - runCollectorTest(t, check, cfg, &endpointConfig{}, ddconfig.Mock(t), init, func(c *Collector, ep *mockEndpoint) { + ddconfig.SetDetectedFeatures(ddconfig.FeatureMap{ddconfig.Kubernetes: {}}) + defer ddconfig.SetDetectedFeatures(nil) + + ddcfg := ddconfig.Mock(t) + ddcfg.Set("orchestrator_explorer.enabled", true) + ddcfg.Set("orchestrator_explorer.manifest_collection.enabled", true) + + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { testPodMessageMetadata(t, clusterID, c, ep) testPodMessageManifest(t, clusterID, c, ep) }) } func TestSendPodMessageNotSendManifestPayload(t *testing.T) { - clusterID, cfg, check := getPodCheckMessage(t) + clusterID, check := getPodCheckMessage(t) - init := func(c *Collector) { - c.orchestrator.OrchestrationCollectionEnabled = true - } + ddconfig.SetDetectedFeatures(ddconfig.FeatureMap{ddconfig.Kubernetes: {}}) + defer ddconfig.SetDetectedFeatures(nil) - runCollectorTest(t, check, cfg, &endpointConfig{}, ddconfig.Mock(t), init, func(c *Collector, ep *mockEndpoint) { + ddcfg := ddconfig.Mock(t) + ddcfg.Set("orchestrator_explorer.enabled", true) + ddcfg.Set("orchestrator_explorer.manifest_collection.enabled", false) + + runCollectorTest(t, check, &endpointConfig{}, ddconfig.Mock(t), func(c *Collector, ep *mockEndpoint) { testPodMessageMetadata(t, clusterID, c, ep) select { @@ -367,12 +385,10 @@ func TestSendPodMessageNotSendManifestPayload(t *testing.T) { }) } -func getPodCheckMessage(t *testing.T) (string, *config.AgentConfig, checks.Check) { +func getPodCheckMessage(t *testing.T) (string, checks.Check) { clusterID := "d801b2b1-4811-11ea-8618-121d4d0938a3" - cfg := config.NewDefaultAgentConfig() - t.Setenv("DD_ORCHESTRATOR_CLUSTER_ID", clusterID) pd := make([]process.MessageBody, 0, 2) @@ -386,10 +402,10 @@ func getPodCheckMessage(t *testing.T) (string, *config.AgentConfig, checks.Check pd = append(pd, m, mm) check := &testCheck{ - name: checks.Pod.Name(), + name: checks.PodCheckName, data: [][]process.MessageBody{pd}, } - return clusterID, cfg, check + return clusterID, check } func testPodMessageMetadata(t *testing.T, clusterID string, c *Collector, ep *mockEndpoint) { @@ -397,7 +413,7 @@ func testPodMessageMetadata(t *testing.T, clusterID string, c *Collector, ep *mo assert.Equal(t, "/api/v2/orch", req.uri) - assert.Equal(t, c.cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) assert.Equal(t, c.orchestrator.OrchestratorEndpoints[0].APIKey, req.headers.Get("DD-Api-Key")) assert.Equal(t, "0", req.headers.Get(headers.ContainerCountHeader)) assert.Equal(t, "1", req.headers.Get("X-DD-Agent-Attempts")) @@ -410,14 +426,14 @@ func testPodMessageMetadata(t *testing.T, clusterID string, c *Collector, ep *mo require.True(t, ok) assert.Equal(t, clusterID, req.headers.Get(headers.ClusterIDHeader)) - assert.Equal(t, c.cfg.HostName, cp.HostName) + assert.Equal(t, testHostName, cp.HostName) } func testPodMessageManifest(t *testing.T, clusterID string, c *Collector, ep *mockEndpoint) { req := <-ep.Requests assert.Equal(t, "/api/v2/orchmanif", req.uri) - assert.Equal(t, c.cfg.HostName, req.headers.Get(headers.HostHeader)) + assert.Equal(t, testHostName, req.headers.Get(headers.HostHeader)) assert.Equal(t, c.orchestrator.OrchestratorEndpoints[0].APIKey, req.headers.Get("DD-Api-Key")) assert.Equal(t, "0", req.headers.Get(headers.ContainerCountHeader)) assert.Equal(t, "1", req.headers.Get("X-DD-Agent-Attempts")) @@ -439,15 +455,14 @@ func TestQueueSpaceNotAvailable(t *testing.T) { } check := &testCheck{ - name: checks.Process.RealTimeName(), + name: checks.RTProcessCheckName, data: [][]process.MessageBody{{m}}, } mockConfig := ddconfig.Mock(t) mockConfig.Set("process_config.process_queue_bytes", 1) - cfg := config.NewDefaultAgentConfig() - runCollectorTest(t, check, cfg, &endpointConfig{ErrorCount: 1}, mockConfig, nil, func(_ *Collector, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{ErrorCount: 1}, mockConfig, func(_ *Collector, ep *mockEndpoint) { select { case r := <-ep.Requests: t.Fatalf("should not have received a request: %+v", r) @@ -470,15 +485,14 @@ func TestQueueSpaceReleased(t *testing.T) { } check := &testCheck{ - name: checks.Process.RealTimeName(), + name: checks.RTProcessCheckName, data: [][]process.MessageBody{{m1}, {m2}}, } mockConfig := ddconfig.Mock(t) mockConfig.Set("process_config.process_queue_bytes", 50) // This should be enough for one message, but not both if the space isn't released - cfg := config.NewDefaultAgentConfig() - runCollectorTest(t, check, cfg, &endpointConfig{ErrorCount: 1}, ddconfig.Mock(t), nil, func(_ *Collector, ep *mockEndpoint) { + runCollectorTest(t, check, &endpointConfig{ErrorCount: 1}, ddconfig.Mock(t), func(_ *Collector, ep *mockEndpoint) { req := <-ep.Requests reqBody, err := process.DecodeMessage(req.body) @@ -508,15 +522,13 @@ func TestMultipleAPIKeys(t *testing.T) { } check := &testCheck{ - name: checks.Connections.Name(), + name: checks.ConnectionsCheckName, data: [][]process.MessageBody{{m}}, } - cfg := config.NewDefaultAgentConfig() apiKeys := []string{"apiKeyI", "apiKeyII", "apiKeyIII"} - orchKeys := []string{"orchKey"} - runCollectorTestWithAPIKeys(t, check, cfg, &endpointConfig{}, apiKeys, orchKeys, ddconfig.Mock(t), nil, func(_ *Collector, ep *mockEndpoint) { + runCollectorTestWithAPIKeys(t, check, &endpointConfig{}, apiKeys, nil, ddconfig.Mock(t), func(_ *Collector, ep *mockEndpoint) { for _, expectedAPIKey := range apiKeys { request := <-ep.Requests assert.Equal(t, expectedAPIKey, request.headers.Get("DD-Api-Key")) @@ -524,11 +536,11 @@ func TestMultipleAPIKeys(t *testing.T) { }) } -func runCollectorTest(t *testing.T, check checks.Check, cfg *config.AgentConfig, epConfig *endpointConfig, mockConfig ddconfig.Config, init func(c *Collector), tc func(c *Collector, ep *mockEndpoint)) { - runCollectorTestWithAPIKeys(t, check, cfg, epConfig, []string{"apiKey"}, []string{"orchestratorApiKey"}, mockConfig, init, tc) +func runCollectorTest(t *testing.T, check checks.Check, epConfig *endpointConfig, mockConfig ddconfig.Config, tc func(c *Collector, ep *mockEndpoint)) { + runCollectorTestWithAPIKeys(t, check, epConfig, []string{"apiKey"}, []string{"orchestratorApiKey"}, mockConfig, tc) } -func runCollectorTestWithAPIKeys(t *testing.T, check checks.Check, cfg *config.AgentConfig, epConfig *endpointConfig, apiKeys, orchAPIKeys []string, mockConfig ddconfig.Config, init func(c *Collector), tc func(c *Collector, ep *mockEndpoint)) { +func runCollectorTestWithAPIKeys(t *testing.T, check checks.Check, epConfig *endpointConfig, apiKeys, orchAPIKeys []string, mockConfig ddconfig.Config, tc func(c *Collector, ep *mockEndpoint)) { ep := newMockEndpoint(t, epConfig) collectorAddr, eventsAddr, orchestratorAddr := ep.start() defer ep.stop() @@ -545,20 +557,24 @@ func runCollectorTestWithAPIKeys(t *testing.T, check checks.Check, cfg *config.A } setProcessEventsEndpointsForTest(mockConfig, eventsEps...) - cfg.HostName = testHostName + orchestratorEndpoints := make([]apicfg.Endpoint, 0, len(orchAPIKeys)) + for _, key := range orchAPIKeys { + orchestratorEndpoints = append(orchestratorEndpoints, apicfg.Endpoint{APIKey: key, Endpoint: orchestratorAddr}) + } + setOrchestratorEndpointsForTest(mockConfig, orchestratorEndpoints...) exit := make(chan struct{}) - c, err := NewCollectorWithChecks(cfg, []checks.Check{check}, true) - assert.NoError(t, err) - if init != nil { - init(c) + hostInfo := &checks.HostInfo{ + HostName: testHostName, } + c, err := NewCollectorWithChecks([]checks.Check{check}, true) + check.Init(nil, hostInfo) - c.orchestrator.OrchestratorEndpoints = make([]apicfg.Endpoint, len(orchAPIKeys)) - for index, key := range orchAPIKeys { - c.orchestrator.OrchestratorEndpoints[index] = apicfg.Endpoint{APIKey: key, Endpoint: orchestratorAddr} - } + assert.NoError(t, err) + s, err := NewSubmitter(hostInfo.HostName, c.UpdateRTStatus) + require.NoError(t, err) + c.submitter = s var wg sync.WaitGroup wg.Add(1) @@ -579,7 +595,7 @@ type testCheck struct { data [][]process.MessageBody } -func (t *testCheck) Init(_ *config.AgentConfig, _ *process.SystemInfo) error { +func (t *testCheck) Init(_ *checks.SysProbeConfig, _ *checks.HostInfo) error { return nil } @@ -587,7 +603,15 @@ func (t *testCheck) Name() string { return t.name } -func (t *testCheck) RealTime() bool { +func (t *testCheck) IsEnabled() bool { + return true +} + +func (t *testCheck) SupportsRunOptions() bool { + return false +} + +func (t *testCheck) Realtime() bool { return false } @@ -595,13 +619,13 @@ func (t *testCheck) ShouldSaveLastRun() bool { return false } -func (t *testCheck) Run(_ *config.AgentConfig, _ int32) ([]process.MessageBody, error) { +func (t *testCheck) Run(_ func() int32, _ *checks.RunOptions) (checks.RunResult, error) { if len(t.data) > 0 { - result := t.data[0] + result := checks.StandardRunResult(t.data[0]) t.data = t.data[1:] return result, nil } - return nil, nil + return checks.StandardRunResult{}, nil } func (t *testCheck) Cleanup() {} diff --git a/cmd/process-agent/collector_test.go b/cmd/process-agent/collector_test.go index b45369c3e5ec7..1e1aa522b69b9 100644 --- a/cmd/process-agent/collector_test.go +++ b/cmd/process-agent/collector_test.go @@ -6,29 +6,25 @@ package main import ( - "strconv" "testing" "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" model "github.com/DataDog/agent-payload/v5/process" + processmocks "github.com/DataDog/datadog-agent/cmd/process-agent/mocks" sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/process/checks" - "github.com/DataDog/datadog-agent/pkg/process/checks/mocks" - "github.com/DataDog/datadog-agent/pkg/process/config" - "github.com/DataDog/datadog-agent/pkg/process/util/api" - "github.com/DataDog/datadog-agent/pkg/process/util/api/headers" - "github.com/DataDog/datadog-agent/pkg/version" + checkmocks "github.com/DataDog/datadog-agent/pkg/process/checks/mocks" ) func TestUpdateRTStatus(t *testing.T) { assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() - c, err := NewCollector(cfg, []checks.Check{checks.Process}) + c, err := NewCollector(nil, &checks.HostInfo{}, []checks.Check{checks.NewProcessCheck()}) assert.NoError(err) // XXX: Give the collector a big channel so it never blocks. c.rtIntervalCh = make(chan time.Duration, 1000) @@ -39,7 +35,7 @@ func TestUpdateRTStatus(t *testing.T) { {ActiveClients: 3, Interval: 2}, {ActiveClients: 0, Interval: 2}, } - c.updateRTStatus(statuses) + c.UpdateRTStatus(statuses) assert.True(c.realTimeEnabled.Load()) // Validate that we stay that way @@ -48,7 +44,7 @@ func TestUpdateRTStatus(t *testing.T) { {ActiveClients: 3, Interval: 2}, {ActiveClients: 0, Interval: 2}, } - c.updateRTStatus(statuses) + c.UpdateRTStatus(statuses) assert.True(c.realTimeEnabled.Load()) // And that it can turn back off @@ -57,14 +53,13 @@ func TestUpdateRTStatus(t *testing.T) { {ActiveClients: 0, Interval: 2}, {ActiveClients: 0, Interval: 2}, } - c.updateRTStatus(statuses) + c.UpdateRTStatus(statuses) assert.False(c.realTimeEnabled.Load()) } func TestUpdateRTInterval(t *testing.T) { assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() - c, err := NewCollector(cfg, []checks.Check{checks.Process}) + c, err := NewCollector(nil, &checks.HostInfo{}, []checks.Check{checks.NewProcessCheck()}) assert.NoError(err) // XXX: Give the collector a big channel so it never blocks. c.rtIntervalCh = make(chan time.Duration, 1000) @@ -75,7 +70,7 @@ func TestUpdateRTInterval(t *testing.T) { {ActiveClients: 3, Interval: 2}, {ActiveClients: 0, Interval: 10}, } - c.updateRTStatus(statuses) + c.UpdateRTStatus(statuses) assert.True(c.realTimeEnabled.Load()) assert.Equal(10*time.Second, c.realTimeInterval) } @@ -113,22 +108,21 @@ func TestDisableRealTime(t *testing.T) { tests := []struct { name string disableRealtime bool - expectedChecks []checks.Check + expectedChecks []string }{ { name: "true", disableRealtime: true, - expectedChecks: []checks.Check{checks.Container}, + expectedChecks: []string{checks.ContainerCheckName}, }, { name: "false", disableRealtime: false, - expectedChecks: []checks.Check{checks.Container, checks.RTContainer}, + expectedChecks: []string{checks.ContainerCheckName, checks.RTContainerCheckName}, }, } assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { @@ -137,12 +131,12 @@ func TestDisableRealTime(t *testing.T) { mockConfig.Set("process_config.process_discovery.enabled", false) // Not an RT check so we don't care enabledChecks := getChecks(&sysconfig.Config{}, true) - assert.EqualValues(tc.expectedChecks, enabledChecks) + assert.EqualValues(tc.expectedChecks, getCheckNames(enabledChecks)) - c, err := NewCollector(cfg, enabledChecks) + c, err := NewCollector(nil, &checks.HostInfo{}, enabledChecks) assert.NoError(err) assert.Equal(!tc.disableRealtime, c.runRealTime) - assert.ElementsMatch(tc.expectedChecks, c.enabledChecks) + assert.ElementsMatch(tc.expectedChecks, getCheckNames(c.enabledChecks)) }) } } @@ -162,16 +156,15 @@ func TestDisableRealTimeProcessCheck(t *testing.T) { }, } - assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() - expectedChecks := []checks.Check{checks.Process} - for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { mockConfig := ddconfig.Mock(t) mockConfig.Set("process_config.disable_realtime_checks", tc.disableRealtime) - c, err := NewCollector(cfg, expectedChecks) + assert := assert.New(t) + expectedChecks := []checks.Check{checks.NewProcessCheck()} + + c, err := NewCollector(nil, &checks.HostInfo{}, expectedChecks) assert.NoError(err) assert.Equal(!tc.disableRealtime, c.runRealTime) assert.EqualValues(expectedChecks, c.enabledChecks) @@ -179,173 +172,20 @@ func TestDisableRealTimeProcessCheck(t *testing.T) { } } -func TestNewCollectorQueueSize(t *testing.T) { - tests := []struct { - name string - override bool - queueSize int - expectedQueueSize int - }{ - { - name: "default queue size", - override: false, - queueSize: 42, - expectedQueueSize: ddconfig.DefaultProcessQueueSize, - }, - { - name: "valid queue size override", - override: true, - queueSize: 42, - expectedQueueSize: 42, - }, - { - name: "invalid negative queue size override", - override: true, - queueSize: -10, - expectedQueueSize: ddconfig.DefaultProcessQueueSize, - }, - { - name: "invalid 0 queue size override", - override: true, - queueSize: 0, - expectedQueueSize: ddconfig.DefaultProcessQueueSize, - }, - } - - assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() - - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - mockConfig := ddconfig.Mock(t) - if tc.override { - mockConfig.Set("process_config.queue_size", tc.queueSize) - } - - c, err := NewCollector(cfg, []checks.Check{checks.Process, checks.Pod}) - assert.NoError(err) - assert.Equal(tc.expectedQueueSize, c.processResults.MaxSize()) - assert.Equal(tc.expectedQueueSize, c.podResults.MaxSize()) - }) - } -} - -func TestNewCollectorRTQueueSize(t *testing.T) { - tests := []struct { - name string - override bool - queueSize int - expectedQueueSize int - }{ - { - name: "default queue size", - override: false, - queueSize: 2, - expectedQueueSize: ddconfig.DefaultProcessRTQueueSize, - }, - { - name: "valid queue size override", - override: true, - queueSize: 2, - expectedQueueSize: 2, - }, - { - name: "invalid negative size override", - override: true, - queueSize: -2, - expectedQueueSize: ddconfig.DefaultProcessRTQueueSize, - }, - { - name: "invalid 0 queue size override", - override: true, - queueSize: 0, - expectedQueueSize: ddconfig.DefaultProcessRTQueueSize, - }, - } - - assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() - - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - mockConfig := ddconfig.Mock(t) - if tc.override { - mockConfig.Set("process_config.rt_queue_size", tc.queueSize) - } - - c, err := NewCollector(cfg, []checks.Check{checks.Process}) - assert.NoError(err) - assert.Equal(tc.expectedQueueSize, c.rtProcessResults.MaxSize()) - }) - } -} - -func TestNewCollectorProcessQueueBytes(t *testing.T) { - tests := []struct { - name string - override bool - queueBytes int - expectedQueueSize int - }{ - { - name: "default queue size", - override: false, - queueBytes: 42000, - expectedQueueSize: ddconfig.DefaultProcessQueueBytes, - }, - { - name: "valid queue size override", - override: true, - queueBytes: 42000, - expectedQueueSize: 42000, - }, - { - name: "invalid negative queue size override", - override: true, - queueBytes: -2, - expectedQueueSize: ddconfig.DefaultProcessQueueBytes, - }, - { - name: "invalid 0 queue size override", - override: true, - queueBytes: 0, - expectedQueueSize: ddconfig.DefaultProcessQueueBytes, - }, - } - - assert := assert.New(t) - cfg := config.NewDefaultAgentConfig() - - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - mockConfig := ddconfig.Mock(t) - if tc.override { - mockConfig.Set("process_config.process_queue_bytes", tc.queueBytes) - } - - c, err := NewCollector(cfg, []checks.Check{checks.Process}) - assert.NoError(err) - assert.Equal(int64(tc.expectedQueueSize), c.processResults.MaxWeight()) - assert.Equal(int64(tc.expectedQueueSize), c.rtProcessResults.MaxWeight()) - assert.Equal(tc.expectedQueueSize, c.forwarderRetryQueueMaxBytes) - }) - } -} - func TestIgnoreResponseBody(t *testing.T) { for _, tc := range []struct { checkName string ignore bool }{ - {checkName: checks.Process.Name(), ignore: false}, - {checkName: checks.Process.RealTimeName(), ignore: false}, - {checkName: checks.ProcessDiscovery.Name(), ignore: false}, - {checkName: checks.Container.Name(), ignore: false}, - {checkName: checks.RTContainer.Name(), ignore: false}, - {checkName: checks.Pod.Name(), ignore: true}, + {checkName: checks.ProcessCheckName, ignore: false}, + {checkName: checks.RTProcessCheckName, ignore: false}, + {checkName: checks.DiscoveryCheckName, ignore: false}, + {checkName: checks.ContainerCheckName, ignore: false}, + {checkName: checks.RTContainerCheckName, ignore: false}, + {checkName: checks.PodCheckName, ignore: true}, {checkName: checks.PodCheckManifestName, ignore: true}, - {checkName: checks.Connections.Name(), ignore: false}, - {checkName: checks.ProcessEvents.Name(), ignore: true}, + {checkName: checks.ConnectionsCheckName, ignore: false}, + {checkName: checks.ProcessEventsCheckName, ignore: true}, } { t.Run(tc.checkName, func(t *testing.T) { assert.Equal(t, tc.ignore, ignoreResponseBody(tc.checkName)) @@ -354,247 +194,65 @@ func TestIgnoreResponseBody(t *testing.T) { } func TestCollectorRunCheckWithRealTime(t *testing.T) { - cfg := config.NewDefaultAgentConfig() - check := mocks.NewCheckWithRealTime(t) + check := checkmocks.NewCheck(t) - c, err := NewCollector(cfg, []checks.Check{}) + c, err := NewCollector(nil, &checks.HostInfo{}, []checks.Check{}) assert.NoError(t, err) + submitter := processmocks.NewSubmitter(t) + c.submitter = submitter - results := api.NewWeightedQueue(1, 1024) - rtResults := api.NewWeightedQueue(1, 1024) - - standardOption := checks.RunOptions{ + standardOption := &checks.RunOptions{ RunStandard: true, } - result := &checks.RunResult{ - Standard: []model.MessageBody{ + result := checks.StandardRunResult( + []model.MessageBody{ &model.CollectorProc{}, }, - } + ) - check.On("RunWithOptions", mock.Anything, mock.Anything, standardOption).Once().Return(result, nil) + check.On("Run", mock.Anything, standardOption).Once().Return(result, nil) check.On("Name").Return("foo") - check.On("RealTimeName").Return("bar") - c.runCheckWithRealTime( - check, - results, - rtResults, - standardOption, - ) + submitStandard := submitter.On("Submit", mock.Anything, check.Name(), mock.Anything).Return(nil) + submitter.On("Submit", mock.Anything, checks.RTName(check.Name()), mock.Anything).Return(nil).NotBefore(submitStandard) - assert.Equal(t, results.Len(), 1) - item, ok := results.Poll() - assert.True(t, ok) - assert.Equal(t, item.Type(), "foo") + c.runCheckWithRealTime(check, standardOption) - assert.Equal(t, rtResults.Len(), 0) - - rtResult := &checks.RunResult{ - RealTime: []model.MessageBody{ + rtResult := checks.CombinedRunResult{ + Realtime: []model.MessageBody{ &model.CollectorProc{}, }, } - rtOption := checks.RunOptions{ - RunRealTime: true, + rtOption := &checks.RunOptions{ + RunRealtime: true, } - check.On("RunWithOptions", mock.Anything, mock.Anything, rtOption).Once().Return(rtResult, nil) - - c.runCheckWithRealTime( - check, - results, - rtResults, - rtOption, - ) + check.On("Run", mock.Anything, rtOption).Once().Return(rtResult, nil) - assert.Equal(t, results.Len(), 0) - assert.Equal(t, rtResults.Len(), 1) - item, ok = rtResults.Poll() - assert.True(t, ok) - assert.Equal(t, item.Type(), "bar") + c.runCheckWithRealTime(check, rtOption) } func TestCollectorRunCheck(t *testing.T) { - cfg := config.NewDefaultAgentConfig() - check := mocks.NewCheck(t) + check := checkmocks.NewCheck(t) - c, err := NewCollector(cfg, []checks.Check{}) - assert.NoError(t, err) + hostInfo := &checks.HostInfo{HostName: testHostName} - results := api.NewWeightedQueue(1, 1024) + c, err := NewCollector(nil, hostInfo, []checks.Check{}) + require.NoError(t, err) + submitter := processmocks.NewSubmitter(t) + require.NoError(t, err) + c.submitter = submitter - result := []model.MessageBody{ + result := checks.StandardRunResult([]model.MessageBody{ &model.CollectorProc{}, - } - + }) check.On("Run", mock.Anything, mock.Anything).Return(result, nil) check.On("Name").Return("foo") - check.On("RealTime").Return(false) + check.On("Realtime").Return(false) check.On("ShouldSaveLastRun").Return(true) + submitter.On("Submit", mock.Anything, check.Name(), mock.Anything).Return(nil) - c.runCheck( - check, - results, - ) - - assert.Equal(t, results.Len(), 1) - item, ok := results.Poll() - assert.True(t, ok) - assert.Equal(t, item.Type(), "foo") -} - -func TestCollectorMessagesToCheckResult(t *testing.T) { - cfg := config.NewDefaultAgentConfig() - cfg.HostName = "host" - - c, err := NewCollector(cfg, []checks.Check{}) - assert.NoError(t, err) - - now := time.Now() - agentVersion, _ := version.Agent() - - requestID := c.getRequestID(now, 0) - - tests := []struct { - name string - message model.MessageBody - expectHeaders map[string]string - }{ - { - name: "process", - message: &model.CollectorProc{ - Containers: []*model.Container{ - {}, {}, {}, - }, - }, - expectHeaders: map[string]string{ - headers.TimestampHeader: strconv.Itoa(int(now.Unix())), - headers.HostHeader: "host", - headers.ProcessVersionHeader: agentVersion.GetNumber(), - headers.ContainerCountHeader: "3", - headers.ContentTypeHeader: headers.ProtobufContentType, - headers.RequestIDHeader: requestID, - }, - }, - { - name: "rt_process", - message: &model.CollectorRealTime{ - ContainerStats: []*model.ContainerStat{ - {}, {}, {}, - }, - }, - expectHeaders: map[string]string{ - headers.TimestampHeader: strconv.Itoa(int(now.Unix())), - headers.HostHeader: "host", - headers.ProcessVersionHeader: agentVersion.GetNumber(), - headers.ContainerCountHeader: "3", - headers.ContentTypeHeader: headers.ProtobufContentType, - }, - }, - { - name: "container", - message: &model.CollectorContainer{ - Containers: []*model.Container{ - {}, {}, - }, - }, - expectHeaders: map[string]string{ - headers.TimestampHeader: strconv.Itoa(int(now.Unix())), - headers.HostHeader: "host", - headers.ProcessVersionHeader: agentVersion.GetNumber(), - headers.ContainerCountHeader: "2", - headers.ContentTypeHeader: headers.ProtobufContentType, - }, - }, - { - name: "rt_container", - message: &model.CollectorContainerRealTime{ - Stats: []*model.ContainerStat{ - {}, {}, {}, {}, {}, - }, - }, - expectHeaders: map[string]string{ - headers.TimestampHeader: strconv.Itoa(int(now.Unix())), - headers.HostHeader: "host", - headers.ProcessVersionHeader: agentVersion.GetNumber(), - headers.ContainerCountHeader: "5", - headers.ContentTypeHeader: headers.ProtobufContentType, - }, - }, - { - name: "process_discovery", - message: &model.CollectorProcDiscovery{}, - expectHeaders: map[string]string{ - headers.TimestampHeader: strconv.Itoa(int(now.Unix())), - headers.HostHeader: "host", - headers.ProcessVersionHeader: agentVersion.GetNumber(), - headers.ContainerCountHeader: "0", - headers.ContentTypeHeader: headers.ProtobufContentType, - }, - }, - { - name: "process_events", - message: &model.CollectorProcEvent{}, - expectHeaders: map[string]string{ - headers.TimestampHeader: strconv.Itoa(int(now.Unix())), - headers.HostHeader: "host", - headers.ProcessVersionHeader: agentVersion.GetNumber(), - headers.ContainerCountHeader: "0", - headers.ContentTypeHeader: headers.ProtobufContentType, - headers.EVPOriginHeader: "process-agent", - headers.EVPOriginVersionHeader: version.AgentVersion, - }, - }, - } - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - messages := []model.MessageBody{ - test.message, - } - result := c.messagesToCheckResult(now, test.name, messages) - assert.Equal(t, test.name, result.name) - assert.Len(t, result.payloads, 1) - payload := result.payloads[0] - assert.Len(t, payload.headers, len(test.expectHeaders)) - for k, v := range test.expectHeaders { - assert.Equal(t, v, payload.headers.Get(k)) - } - }) - } -} - -func Test_getRequestID(t *testing.T) { - cfg := config.NewDefaultAgentConfig() - cfg.HostName = "host" - - c, err := NewCollector(cfg, []checks.Check{}) - assert.NoError(t, err) - - fixedDate1 := time.Date(2022, 9, 1, 0, 0, 1, 0, time.Local) - id1 := c.getRequestID(fixedDate1, 1) - id2 := c.getRequestID(fixedDate1, 1) - // The calculation should be deterministic, so making sure the parameters generates the same id. - assert.Equal(t, id1, id2) - fixedDate2 := time.Date(2022, 9, 1, 0, 0, 2, 0, time.Local) - id3 := c.getRequestID(fixedDate2, 1) - - // The request id is based on time, so if the difference it only the time, then the new ID should be greater. - id1Num, _ := strconv.ParseUint(id1, 10, 64) - id3Num, _ := strconv.ParseUint(id3, 10, 64) - assert.Greater(t, id3Num, id1Num) - - // Increasing the chunk index should increase the id. - id4 := c.getRequestID(fixedDate2, 3) - id4Num, _ := strconv.ParseUint(id4, 10, 64) - assert.Equal(t, id3Num+2, id4Num) - - // Changing the host -> changing the hash. - cfg.HostName = "host2" - c.requestIDCachedHash = nil - id5 := c.getRequestID(fixedDate1, 1) - assert.NotEqual(t, id1, id5) + c.runCheck(check) } diff --git a/cmd/process-agent/command/command.go b/cmd/process-agent/command/command.go index b71ed8d6e90e2..4ea48ca9d053a 100644 --- a/cmd/process-agent/command/command.go +++ b/cmd/process-agent/command/command.go @@ -7,12 +7,17 @@ package command import ( + "os" + "path/filepath" + "strings" + "github.com/fatih/color" "github.com/spf13/cobra" "github.com/DataDog/datadog-agent/cmd/process-agent/flags" "github.com/DataDog/datadog-agent/pkg/config" - pconfig "github.com/DataDog/datadog-agent/pkg/process/config" + "github.com/DataDog/datadog-agent/pkg/process/util" + "github.com/DataDog/datadog-agent/pkg/util/log" ) const LoggerName config.LoggerName = "PROCESS" @@ -106,18 +111,82 @@ func MakeCommand(subcommandFactories []SubcommandFactory, winParams bool, rootCm } // BootstrapConfig is a helper for process-agent config initialization (until we further refactor to use components) -func BootstrapConfig(globalParams *GlobalParams) error { - if err := pconfig.LoadConfigIfExists(globalParams.ConfFilePath); err != nil { +func BootstrapConfig(path string, oneshotCommand bool) error { + setHostMountEnv() + + if err := loadConfigIfExists(path); err != nil { return err } + // Resolve any secrets + if err := config.ResolveSecrets(config.Datadog, filepath.Base(path)); err != nil { + return err + } + + var ( + logFile string + syslogURI string + syslogRFC = false + logToConsole = true + logAsJSON = false + ) + + if !oneshotCommand { + syslogURI = config.GetSyslogURI() + syslogRFC = config.Datadog.GetBool("syslog_rfc") + logToConsole = config.Datadog.GetBool("log_to_console") + logAsJSON = config.Datadog.GetBool("log_format_json") + + if !config.Datadog.GetBool("disable_file_logging") { + logFile = config.Datadog.GetString("process_config.log_file") + } + } + return config.SetupLogger( LoggerName, config.Datadog.GetString("log_level"), - "", - "", - false, - true, - false, + logFile, + syslogURI, + syslogRFC, + logToConsole, + logAsJSON, ) } + +// setHostMountEnv sets HOST_PROC and HOST_SYS mounts if applicable in containerized environments +func setHostMountEnv() { + // Set default values for proc/sys paths if unset. + // Don't set this is /host is not mounted to use context within container. + // Generally only applicable for container-only cases like Fargate. + if !config.IsContainerized() || !util.PathExists("/host") { + return + } + + if v := os.Getenv("HOST_PROC"); v == "" { + os.Setenv("HOST_PROC", "/host/proc") + } + if v := os.Getenv("HOST_SYS"); v == "" { + os.Setenv("HOST_SYS", "/host/sys") + } +} + +// loadConfigIfExists takes a path to either a directory containing datadog.yaml or a direct path to a datadog.yaml file +// and loads it into ddconfig.Datadog. It does this silently, and does not produce any logs. +func loadConfigIfExists(path string) error { + if path == "" { + return nil + } + + if !util.PathExists(path) { + log.Infof("No config exists at %s, ignoring...", path) + return nil + } + + config.Datadog.AddConfigPath(path) + if strings.HasSuffix(path, ".yaml") { // If they set a config file directly, let's try to honor that + config.Datadog.SetConfigFile(path) + } + + _, err := config.LoadWithoutSecret() + return err +} diff --git a/cmd/process-agent/config.go b/cmd/process-agent/config.go index a4214bb8a1d44..646d565445ada 100644 --- a/cmd/process-agent/config.go +++ b/cmd/process-agent/config.go @@ -20,12 +20,12 @@ import ( func getChecks(sysCfg *sysconfig.Config, canAccessContainers bool) (checkCfg []checks.Check) { rtChecksEnabled := !ddconfig.Datadog.GetBool("process_config.disable_realtime_checks") if ddconfig.Datadog.GetBool("process_config.process_collection.enabled") { - checkCfg = append(checkCfg, checks.Process) + checkCfg = append(checkCfg, checks.NewProcessCheck()) } else { if ddconfig.Datadog.GetBool("process_config.container_collection.enabled") && canAccessContainers { - checkCfg = append(checkCfg, checks.Container) + checkCfg = append(checkCfg, checks.NewContainerCheck()) if rtChecksEnabled { - checkCfg = append(checkCfg, checks.RTContainer) + checkCfg = append(checkCfg, checks.NewRTContainerCheck()) } } else if !canAccessContainers { _ = log.Warn("Disabled container check because no container environment detected (see list of detected features in `agent status`)") @@ -35,25 +35,22 @@ func getChecks(sysCfg *sysconfig.Config, canAccessContainers bool) (checkCfg []c if ddconfig.IsECSFargate() { log.Debug("Process discovery is not supported on ECS Fargate") } else { - checkCfg = append(checkCfg, checks.ProcessDiscovery) + checkCfg = append(checkCfg, checks.NewProcessDiscoveryCheck()) } } } if ddconfig.Datadog.GetBool("process_config.event_collection.enabled") { - checkCfg = append(checkCfg, checks.ProcessEvents) + checkCfg = append(checkCfg, checks.NewProcessEventsCheck()) } if isOrchestratorCheckEnabled() { - checkCfg = append(checkCfg, checks.Pod) + checkCfg = append(checkCfg, checks.NewPodCheck()) } if sysCfg.Enabled { - // If the sysprobe module is enabled, the process check can call out to the sysprobe for privileged stats - _, checks.Process.SysprobeProcessModuleEnabled = sysCfg.EnabledModules[sysconfig.ProcessModule] - if _, ok := sysCfg.EnabledModules[sysconfig.NetworkTracerModule]; ok { - checkCfg = append(checkCfg, checks.Connections) + checkCfg = append(checkCfg, checks.NewConnectionsCheck()) } } diff --git a/cmd/process-agent/config_test.go b/cmd/process-agent/config_test.go index b25effe2636bd..a9bf61dba79fd 100644 --- a/cmd/process-agent/config_test.go +++ b/cmd/process-agent/config_test.go @@ -15,6 +15,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/process/checks" apicfg "github.com/DataDog/datadog-agent/pkg/process/util/api/config" + "github.com/DataDog/datadog-agent/pkg/util/kubernetes/clustername" ) func mkurl(rawurl string) *url.URL { @@ -25,6 +26,24 @@ func mkurl(rawurl string) *url.URL { return urlResult } +func getCheckNames(checks []checks.Check) []string { + names := make([]string, len(checks)) + for idx, ch := range checks { + names[idx] = ch.Name() + } + return names +} + +func assertContainsCheck(t *testing.T, checks []checks.Check, name string) { + t.Helper() + assert.Contains(t, getCheckNames(checks), name) +} + +func assertNotContainsCheck(t *testing.T, checks []checks.Check, name string) { + t.Helper() + assert.NotContains(t, getCheckNames(checks), name) +} + func TestProcessDiscovery(t *testing.T) { scfg := &sysconfig.Config{} cfg := config.Mock(t) @@ -33,14 +52,14 @@ func TestProcessDiscovery(t *testing.T) { t.Run("enabled", func(t *testing.T) { cfg.Set("process_config.process_discovery.enabled", true) enabledChecks := getChecks(scfg, false) - assert.Contains(t, enabledChecks, checks.ProcessDiscovery) + assertContainsCheck(t, enabledChecks, checks.DiscoveryCheckName) }) // Make sure the process_discovery check can be disabled t.Run("disabled", func(t *testing.T) { cfg.Set("process_config.process_discovery.enabled", false) enabledChecks := getChecks(scfg, true) - assert.NotContains(t, enabledChecks, checks.ProcessDiscovery) + assertNotContainsCheck(t, enabledChecks, checks.DiscoveryCheckName) }) // Make sure the process and process_discovery checks are mutually exclusive @@ -48,7 +67,7 @@ func TestProcessDiscovery(t *testing.T) { cfg.Set("process_config.process_discovery.enabled", true) cfg.Set("process_config.process_collection.enabled", true) enabledChecks := getChecks(scfg, true) - assert.NotContains(t, enabledChecks, checks.ProcessDiscovery) + assertNotContainsCheck(t, enabledChecks, checks.DiscoveryCheckName) }) } @@ -63,9 +82,9 @@ func TestContainerCheck(t *testing.T) { cfg.Set("process_config.disable_realtime_checks", false) enabledChecks := getChecks(scfg, true) - assert.Contains(t, enabledChecks, checks.Container) - assert.Contains(t, enabledChecks, checks.RTContainer) - assert.NotContains(t, enabledChecks, checks.Process) + assertContainsCheck(t, enabledChecks, checks.ContainerCheckName) + assertContainsCheck(t, enabledChecks, checks.RTContainerCheckName) + assertNotContainsCheck(t, enabledChecks, checks.ProcessCheckName) }) // Make sure that disabling RT disables the rt container check @@ -75,8 +94,8 @@ func TestContainerCheck(t *testing.T) { cfg.Set("process_config.disable_realtime_checks", true) enabledChecks := getChecks(scfg, true) - assert.Contains(t, enabledChecks, checks.Container) - assert.NotContains(t, enabledChecks, checks.RTContainer) + assertContainsCheck(t, enabledChecks, checks.ContainerCheckName) + assertNotContainsCheck(t, enabledChecks, checks.RTContainerCheckName) }) // Make sure the container check cannot be enabled if we cannot access containers @@ -85,8 +104,8 @@ func TestContainerCheck(t *testing.T) { cfg.Set("process_config.container_collection.enabled", true) enabledChecks := getChecks(scfg, false) - assert.NotContains(t, enabledChecks, checks.Container) - assert.NotContains(t, enabledChecks, checks.RTContainer) + assertNotContainsCheck(t, enabledChecks, checks.ContainerCheckName) + assertNotContainsCheck(t, enabledChecks, checks.RTContainerCheckName) }) // Make sure the container and process check are mutually exclusive @@ -95,9 +114,9 @@ func TestContainerCheck(t *testing.T) { cfg.Set("process_config.container_collection.enabled", true) enabledChecks := getChecks(scfg, true) - assert.Contains(t, enabledChecks, checks.Process) - assert.NotContains(t, enabledChecks, checks.Container) - assert.NotContains(t, enabledChecks, checks.RTContainer) + assertContainsCheck(t, enabledChecks, checks.ProcessCheckName) + assertNotContainsCheck(t, enabledChecks, checks.ContainerCheckName) + assertNotContainsCheck(t, enabledChecks, checks.RTContainerCheckName) }) } @@ -110,80 +129,66 @@ func TestProcessCheck(t *testing.T) { t.Run("disabled", func(t *testing.T) { cfg.Set("process_config.process_collection.enabled", false) enabledChecks := getChecks(scfg, true) - assert.NotContains(t, enabledChecks, checks.Process) + assertNotContainsCheck(t, enabledChecks, checks.ProcessCheckName) }) // Make sure the process check can be enabled t.Run("enabled", func(t *testing.T) { cfg.Set("process_config.process_collection.enabled", true) enabledChecks := getChecks(scfg, true) - assert.Contains(t, enabledChecks, checks.Process) - }) -} - -func TestSysprobeProcessModule(t *testing.T) { - cfg := config.Mock(t) - cfg.Set("process_config.process_collection.enabled", true) - cfg.Set("system_probe_config.enabled", true) - - t.Run("enabled", func(t *testing.T) { - cfg.Set("system_probe_config.process_config.enabled", true) - scfg, err := sysconfig.New("") - assert.NoError(t, err) - - _ = getChecks(scfg, true) - assert.True(t, checks.Process.SysprobeProcessModuleEnabled) - }) - - t.Run("disabled", func(t *testing.T) { - cfg.Set("system_probe_config.process_config.enabled", false) - scfg, err := sysconfig.New("") - assert.NoError(t, err) - - _ = getChecks(scfg, false) - assert.False(t, checks.Process.SysprobeProcessModuleEnabled) + assertContainsCheck(t, enabledChecks, checks.ProcessCheckName) }) } func TestConnectionsCheck(t *testing.T) { - cfg := config.Mock(t) - cfg.Set("system_probe_config.enabled", true) + syscfg := config.MockSystemProbe(t) + syscfg.Set("system_probe_config.enabled", true) t.Run("enabled", func(t *testing.T) { - cfg.Set("network_config.enabled", true) + syscfg.Set("network_config.enabled", true) scfg, err := sysconfig.New("") assert.NoError(t, err) enabledChecks := getChecks(scfg, true) - assert.Contains(t, enabledChecks, checks.Connections) + assertContainsCheck(t, enabledChecks, checks.ConnectionsCheckName) }) t.Run("disabled", func(t *testing.T) { - cfg.Set("network_config.enabled", false) + syscfg.Set("network_config.enabled", false) scfg, err := sysconfig.New("") assert.NoError(t, err) enabledChecks := getChecks(scfg, true) - assert.NotContains(t, enabledChecks, checks.Connections) + assertNotContainsCheck(t, enabledChecks, checks.ConnectionsCheckName) }) } func TestPodCheck(t *testing.T) { - cfg := config.Mock(t) + config.SetDetectedFeatures(config.FeatureMap{config.Kubernetes: {}}) + defer config.SetDetectedFeatures(nil) t.Run("enabled", func(t *testing.T) { + // Resets the cluster name so that it isn't cached during the call to `getChecks()` + clustername.ResetClusterName() + defer clustername.ResetClusterName() + + cfg := config.Mock(t) cfg.Set("orchestrator_explorer.enabled", true) cfg.Set("cluster_name", "test") enabledChecks := getChecks(&sysconfig.Config{}, true) - assert.Contains(t, enabledChecks, checks.Pod) + assertContainsCheck(t, enabledChecks, checks.PodCheckName) }) t.Run("disabled", func(t *testing.T) { + clustername.ResetClusterName() + defer clustername.ResetClusterName() + + cfg := config.Mock(t) cfg.Set("orchestrator_explorer.enabled", false) enabledChecks := getChecks(&sysconfig.Config{}, true) - assert.NotContains(t, enabledChecks, checks.Pod) + assertNotContainsCheck(t, enabledChecks, checks.PodCheckName) }) } @@ -193,19 +198,19 @@ func TestProcessEventsCheck(t *testing.T) { t.Run("default", func(t *testing.T) { enabledChecks := getChecks(scfg, false) - assert.NotContains(t, enabledChecks, checks.ProcessEvents) + assertNotContainsCheck(t, enabledChecks, checks.ProcessEventsCheckName) }) t.Run("enabled", func(t *testing.T) { cfg.Set("process_config.event_collection.enabled", true) enabledChecks := getChecks(scfg, false) - assert.Contains(t, enabledChecks, checks.ProcessEvents) + assertContainsCheck(t, enabledChecks, checks.ProcessEventsCheckName) }) t.Run("disabled", func(t *testing.T) { cfg.Set("process_config.event_collection.enabled", false) enabledChecks := getChecks(scfg, false) - assert.NotContains(t, enabledChecks, checks.ProcessEvents) + assertNotContainsCheck(t, enabledChecks, checks.ProcessEventsCheckName) }) } diff --git a/cmd/process-agent/info.go b/cmd/process-agent/info.go index a23770133702c..d24b1dff08613 100644 --- a/cmd/process-agent/info.go +++ b/cmd/process-agent/info.go @@ -23,8 +23,6 @@ import ( model "github.com/DataDog/agent-payload/v5/process" ddconfig "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/process/checks" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/version" ) @@ -60,7 +58,7 @@ const ( {{.Banner}} Pid: {{.Status.Pid}} - Hostname: {{.Status.Config.HostName}} + Hostname: {{.Status.HostName}} Uptime: {{.Status.Uptime}} seconds Mem alloc: {{.Status.MemStats.Alloc}} bytes {{- if .Status.SystemProbeProcessModuleEnabled }} @@ -106,10 +104,6 @@ const ( ` ) -func publishSystemProbeProcessModuleEnabled() interface{} { - return checks.Process.SysprobeProcessModuleEnabled -} - func publishUptime() interface{} { return int(time.Since(infoStart) / time.Second) } @@ -153,6 +147,12 @@ func publishInt(i *atomic.Int64) expvar.Func { } } +func publishBool(v bool) expvar.Func { + return func() any { + return v + } +} + func updateProcContainerCount(msgs []model.MessageBody) { var procCount, containerCount int for _, m := range msgs { @@ -283,10 +283,10 @@ func getProgramBanner(version string) (string, string) { // StatusInfo is a structure to get information from expvar and feed to template type StatusInfo struct { Pid int `json:"pid"` + HostName string `json:"host"` Uptime int `json:"uptime"` MemStats struct{ Alloc uint64 } `json:"memstats"` Version version.Version `json:"version"` - Config config.AgentConfig `json:"config"` DockerSocket string `json:"docker_socket"` LastCollectTime string `json:"last_collect_time"` ProcessCount int `json:"process_count"` @@ -308,7 +308,7 @@ type StatusInfo struct { SystemProbeProcessModuleEnabled bool `json:"system_probe_process_module_enabled"` } -func initInfo(_ *config.AgentConfig) error { +func initInfo(hostname string, processModuleEnabled bool) error { var err error funcMap := template.FuncMap{ @@ -320,6 +320,7 @@ func initInfo(_ *config.AgentConfig) error { }, } infoOnce.Do(func() { + expvar.NewString("host").Set(hostname) expvar.NewInt("pid").Set(int64(os.Getpid())) expvar.Publish("uptime", expvar.Func(publishUptime)) expvar.Publish("uptime_nano", expvar.Func(publishUptimeNano)) @@ -342,7 +343,7 @@ func initInfo(_ *config.AgentConfig) error { expvar.Publish("enabled_checks", expvar.Func(publishEnabledChecks)) expvar.Publish("endpoints", expvar.Func(publishEndpoints)) expvar.Publish("drop_check_payloads", expvar.Func(publishDropCheckPayloads)) - expvar.Publish("system_probe_process_module_enabled", expvar.Func(publishSystemProbeProcessModuleEnabled)) + expvar.Publish("system_probe_process_module_enabled", expvar.Func(publishBool(processModuleEnabled))) infoTmpl, err = template.New("info").Funcs(funcMap).Parse(infoTmplSrc) if err != nil { @@ -362,7 +363,7 @@ func initInfo(_ *config.AgentConfig) error { } // Info is called when --info flag is enabled when executing the agent binary -func Info(w io.Writer, _ *config.AgentConfig, expvarURL string) error { +func Info(w io.Writer, expvarURL string) error { agentVersion, _ := version.Agent() var err error client := http.Client{Timeout: 2 * time.Second} diff --git a/cmd/process-agent/info_test.go b/cmd/process-agent/info_test.go index 5cb6f5ae21a69..7cdb12d2bb731 100644 --- a/cmd/process-agent/info_test.go +++ b/cmd/process-agent/info_test.go @@ -16,7 +16,6 @@ import ( "github.com/stretchr/testify/assert" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/version" ) @@ -67,7 +66,7 @@ Processes and Containers Agent (v 0.99.0) expVarPath = "/debug/vars" sysProbeProcessModuleEnabledExpVarPath = "/debug/vars/sysprobeprocessmoduleon" expVarResponse = `{ - "cmdline":["/opt/datadog-agent/bin/process-agent"],"config":{"APIEndpoint":{"ForceQuery":false,"Fragment":"","Host":"localhost:3000","Opaque":"","Path":"","RawPath":"","RawQuery":"","Scheme":"http","User":null},"APIKey":"apikey_2","AllowRealTime":true,"Blacklist":[],"CheckIntervals":{"connections":10800000000000,"container":10000000000,"process":10000000000,"rtcontainer":2000000000,"rtprocess":2000000000},"CollectDockerNetwork":true,"CollectKubernetesMetadata":true,"ContainerBlacklist":null,"ContainerCacheDuration":30000000000,"ContainerWhitelist":null,"DDAgentPy":"/opt/datadog-agent/embedded/bin/python","DDAgentPyEnv":["PYTHONPATH=/opt/datadog-agent/agent"],"Enabled":true,"EnabledChecks":["process","rtprocess"],"HostName":"ubuntu-1404.vagrantup.com","KubernetesHTTPKubeletPort":10255,"KubernetesHTTPSKubeletPort":10250,"KubernetesKubeletHost":"","LogLevel":"info","Logger":null,"MaxProcFDs":200,"ProcLimit":100,"Proxy":null,"QueueSize":20,"StatsdHost":"localhost","StatsdPort":8125},"container_count":0,"container_id":"", + "cmdline":["/opt/datadog-agent/bin/process-agent"], "host":"ubuntu-1404.vagrantup.com", "container_count":0,"container_id":"", "system_probe_process_module_enabled":false, "docker_socket":"/var/run/docker.sock","forwarder":{"APIKeyStatus":{},"TransactionsCreated":{"RetryQueueSize":0}},"last_collect_time":"2017-09-28 07:10:16","memstats":{"Alloc":2096792,"BuckHashSys":1482366,"BySize":[{"Frees":0,"Mallocs":0,"Size":0},{"Frees":412497,"Mallocs":412634,"Size":8},{"Frees":2158061,"Mallocs":2161254,"Size":16},{"Frees":6301195,"Mallocs":6310794,"Size":32},{"Frees":1025554,"Mallocs":1026617,"Size":48},{"Frees":290415,"Mallocs":291445,"Size":64},{"Frees":67074,"Mallocs":67581,"Size":80},{"Frees":40953,"Mallocs":41171,"Size":96},{"Frees":171019,"Mallocs":171274,"Size":112},{"Frees":174757,"Mallocs":174840,"Size":128},{"Frees":1291,"Mallocs":1324,"Size":144},{"Frees":114113,"Mallocs":114205,"Size":160},{"Frees":45454,"Mallocs":45580,"Size":176},{"Frees":13201,"Mallocs":13208,"Size":192},{"Frees":311938,"Mallocs":311985,"Size":208},{"Frees":3497,"Mallocs":3503,"Size":224},{"Frees":1053,"Mallocs":1058,"Size":240},{"Frees":9967,"Mallocs":10007,"Size":256},{"Frees":937,"Mallocs":987,"Size":288},{"Frees":76158,"Mallocs":76606,"Size":320},{"Frees":1429,"Mallocs":1449,"Size":352},{"Frees":15,"Mallocs":17,"Size":384},{"Frees":48,"Mallocs":183,"Size":416},{"Frees":363,"Mallocs":365,"Size":448},{"Frees":45748,"Mallocs":45751,"Size":480},{"Frees":311959,"Mallocs":311981,"Size":512},{"Frees":46935,"Mallocs":47209,"Size":576},{"Frees":124,"Mallocs":136,"Size":640},{"Frees":31699,"Mallocs":31713,"Size":704},{"Frees":754,"Mallocs":755,"Size":768},{"Frees":106874,"Mallocs":107064,"Size":896},{"Frees":6997,"Mallocs":7045,"Size":1024},{"Frees":60,"Mallocs":68,"Size":1152},{"Frees":69,"Mallocs":83,"Size":1280},{"Frees":1127,"Mallocs":1133,"Size":1408},{"Frees":257413,"Mallocs":257413,"Size":1536},{"Frees":3235,"Mallocs":3245,"Size":1792},{"Frees":3155,"Mallocs":3201,"Size":2048},{"Frees":1069,"Mallocs":1078,"Size":2304},{"Frees":1757,"Mallocs":1774,"Size":2688},{"Frees":692,"Mallocs":692,"Size":3072},{"Frees":350,"Mallocs":352,"Size":3200},{"Frees":0,"Mallocs":5,"Size":3456},{"Frees":6847,"Mallocs":6861,"Size":4096},{"Frees":11,"Mallocs":22,"Size":4864},{"Frees":11,"Mallocs":12,"Size":5376},{"Frees":8,"Mallocs":11,"Size":6144},{"Frees":349,"Mallocs":349,"Size":6528},{"Frees":0,"Mallocs":1,"Size":6784},{"Frees":0,"Mallocs":0,"Size":6912},{"Frees":889,"Mallocs":891,"Size":8192},{"Frees":175,"Mallocs":176,"Size":9472},{"Frees":0,"Mallocs":0,"Size":9728},{"Frees":16,"Mallocs":16,"Size":10240},{"Frees":9,"Mallocs":11,"Size":10880},{"Frees":0,"Mallocs":0,"Size":12288},{"Frees":0,"Mallocs":0,"Size":13568},{"Frees":0,"Mallocs":0,"Size":14336},{"Frees":2,"Mallocs":2,"Size":16384},{"Frees":8,"Mallocs":11,"Size":18432},{"Frees":0,"Mallocs":0,"Size":19072}],"DebugGC":false,"EnableGC":true,"Frees":12980452,"GCCPUFraction":0.00027660329858230417,"GCSys":671744,"HeapAlloc":2096792,"HeapIdle":2113536,"HeapInuse":4243456,"HeapObjects":17826,"HeapReleased":0,"HeapSys":6356992,"LastGC":1506582616117567500,"Lookups":787843,"MCacheInuse":9600,"MCacheSys":16384,"MSpanInuse":85728,"MSpanSys":114688,"Mallocs":12998278,"NextGC":4194304,"NumForcedGC":0,"NumGC":580,"OtherSys":1489530,"PauseEnd":[1506582226101035000,1506582226112501200,1506582236177119200,1506582246109827600,1506582246161165300,1506582256157039800,1506582256196451300,1506582266100831200,1506582266112478200,1506582276101476900,1506582286106396000,1506582286126687500,1506582296099503000,1506582296110266000,1506582306106153200,1506582316097177900,1506582316110753300,1506582326106338000,1506582326122362000,1506582336109635800,1506582346098246400,1506582346111455200,1506582356100117800,1506582356113638400,1506582366106036500,1506582376103559700,1506582376118026000,1506582386103282000,1506582386114026000,1506582396105205200,1506582406101939000,1506582406127845400,1506582416100454100,1506582416111487000,1506582426104607200,1506582436106598000,1506582436121981400,1506582446105687600,1506582446132311000,1506582456104680000,1506582466133406200,1506582466197264000,1506582476123873800,1506582476188246800,1506582486101491500,1506582486113159400,1506582496106409500,1506582506099725000,1506582506115678200,1506582516101830400,1506582516120312600,1506582526133332700,1506582536133508400,1506582536174795500,1506582546101393700,1506582546112282000,1506582556102495500,1506582566097362700,1506582566107364400,1506582576102698000,1506582576113667000,1506582586111737900,1506582596134309400,1506582596154338300,1506582606109634600,1506582606140238800,1506582616100704800,1506582616117567500,1506581106098407200,1506581106109227000,1506581116101760500,1506581116109269000,1506581126107651600,1506581126135905000,1506581136113266200,1506581146101469000,1506581146110897700,1506581156101606000,1506581156112118500,1506581166103714600,1506581176102541300,1506581176115352800,1506581186101816600,1506581186113160200,1506581196102513400,1506581206098444800,1506581206108308700,1506581216099007200,1506581216108940300,1506581226105730800,1506581226126397200,1506581236105284000,1506581246100745200,1506581246109144600,1506581256099923700,1506581256112433700,1506581266104015600,1506581276097864700,1506581276114086700,1506581286143012600,1506581286191402800,1506581296157393200,1506581296262120200,1506581306195998500,1506581316173913000,1506581316257029000,1506581326100242000,1506581326110632400,1506581336106426600,1506581346098762500,1506581346122147800,1506581356171365600,1506581356205906700,1506581366199512300,1506581366274589700,1506581376106299100,1506581376117759500,1506581386104804900,1506581396102094000,1506581396117333000,1506581406101776000,1506581416097738800,1506581416107423000,1506581426099014100,1506581426109568500,1506581436110609700,1506581446098193400,1506581446109034500,1506581456107947800,1506581456122633200,1506581466103874000,1506581476133261300,1506581476160198100,1506581486115513600,1506581486138224400,1506581496116856600,1506581496198111000,1506581506115676000,1506581516100093700,1506581516117489200,1506581526110691000,1506581526122211300,1506581536117504500,1506581546103023600,1506581546122240500,1506581556106510000,1506581566101397200,1506581566117625000,1506581576108421400,1506581576122919200,1506581586113834000,1506581596155364000,1506581596216066600,1506581606105134300,1506581606115653000,1506581616114833700,1506581626101752800,1506581626109803300,1506581636101229300,1506581636117020200,1506581646104537000,1506581656102321400,1506581656110860500,1506581666101982500,1506581676102100700,1506581676111583500,1506581686107026200,1506581686123608300,1506581696107647500,1506581706101321700,1506581706108631300,1506581716100399400,1506581716112764200,1506581726108076500,1506581736103447000,1506581736117864000,1506581746102340600,1506581756099405600,1506581756110430700,1506581766098815200,1506581766108658200,1506581776105958700,1506581786100751000,1506581786109499600,1506581796106018300,1506581796116269600,1506581806111348000,1506581816098433500,1506581816107445500,1506581826102063800,1506581826113313300,1506581836106883800,1506581846098780700,1506581846109101800,1506581856104110600,1506581856115759800,1506581866107832000,1506581876098012200,1506581876107959000,1506581886101321200,1506581886112426200,1506581896105218000,1506581906112097800,1506581906149966600,1506581916147979300,1506581916269657300,1506581926117701000,1506581936101587200,1506581936110430700,1506581946101771000,1506581946111723800,1506581956103544000,1506581966101098800,1506581966110184400,1506581976105113900,1506581976114027300,1506581986155667200,1506581996107511600,1506581996126415400,1506582006102447400,1506582006111234300,1506582016100840200,1506582016111904300,1506582026109052200,1506582036099488300,1506582036109610200,1506582046104646400,1506582056101391000,1506582056109750800,1506582066099548700,1506582066109651700,1506582076157450500,1506582086140934400,1506582086166320000,1506582096106871300,1506582096143585000,1506582106106380800,1506582106134424800,1506582116104113400,1506582126099607600,1506582126110588700,1506582136102966500,1506582146101210400,1506582146142070500,1506582156155882500,1506582156246712600,1506582166157606400,1506582166199486500,1506582176105659400,1506582186097889000,1506582186107386600,1506582196102539300,1506582196111375400,1506582206103425500,1506582216098815700,1506582216122575000],"PauseNs":[202108,111195,21103433,4734207,15843043,17352156,20656960,325707,120873,145645,1259619,165623,206534,201725,678258,94953,164909,278077,411994,4234278,324415,113182,118542,181238,2308665,531144,225488,1524394,203164,1016146,172322,9750220,150765,113357,123909,7350338,129862,1782936,6970455,280722,3123825,8507248,1213709,390248,792984,264343,182112,167632,304755,294682,241455,4768157,11009560,17620970,73196,139842,109420,148579,259885,833279,165886,6578634,2389416,2169273,4134418,1347554,780562,531306,137560,147447,163720,152183,667379,3140549,630481,82678,122852,117171,87366,285812,887783,201820,146584,130057,151639,236975,110644,177687,164236,1106801,4601777,270537,54591,490993,161521,252501,110987,254652,1085837,24134635,5505333,19258429,16958700,25820682,37778785,15691409,337939,211482,178633,144971,2766195,12353022,6834896,44842527,22457655,172082,686213,200130,112915,232162,138353,80799,117007,97286,108548,1937426,280192,156610,99514,430100,155465,687228,2882711,6731693,65804,1624821,159652,285577,60549,157904,5916134,412288,132597,908879,272218,180757,732263,169132,745769,306887,7252246,4394707,951611,82203,213042,117441,112781,112222,300525,1211909,145623,113760,164115,225506,96600,953395,1874155,204582,115017,187433,130060,156279,312904,97728,2302220,232036,124466,632575,121143,149310,200161,248362,153779,119662,494180,534981,316531,185806,152670,211013,132662,2033315,253769,850340,299891,140935,120561,170304,87502,712511,758267,102834,472697,1307030,24962796,254714,2628369,266971,1318833,108503,131614,120129,222602,1789785,129309,746252,19088113,823822,253070,163050,183856,123350,126196,226394,97382,152971,1404152,196053,1299475,136466,185384,20561432,12951037,1264979,5630592,2187745,254259,1811039,164578,144580,244778,207351,2194256,12554634,16700526,5939874,18788363,9003636,379686,92515,771011,1034056,795588,842805,313889,553591],"PauseTotalNs":833945600,"StackInuse":983040,"StackSys":983040,"Sys":11114744,"TotalAlloc":1301199968},"pid":485,"process_count":84,"queue_size":0,"splitter":{},"uptime":3464,"version":{"Major": 0,"Minor": 99,"Patch": 0},"log_file":"/var/log/datadog/process-agent.log" }` @@ -119,15 +118,14 @@ func TestInfo(t *testing.T) { defer reset() assert := assert.New(t) - conf := config.NewDefaultAgentConfig() server := testServer(t) assert.NotNil(server) defer server.Close() - err := initInfo(conf) + err := initInfo("ubuntu-1404.vagrantup.com", true) assert.NoError(err) var buf bytes.Buffer - err = Info(&buf, conf, server.URL+expVarPath) + err = Info(&buf, server.URL+expVarPath) assert.NoError(err) info := buf.String() assert.Equal(expectedInfo, info) @@ -135,7 +133,7 @@ func TestInfo(t *testing.T) { // check that if system probe process module config flag is disabled, // it is displayed correctly in info command output buf.Reset() // empty the buffer before reusing - err = Info(&buf, conf, server.URL+sysProbeProcessModuleEnabledExpVarPath) + err = Info(&buf, server.URL+sysProbeProcessModuleEnabledExpVarPath) assert.NoError(err) info = buf.String() sysProbeProcessModuleEnabledExpectedInfo := strings.ReplaceAll(expectedInfo, @@ -149,12 +147,11 @@ func TestNotRunning(t *testing.T) { defer reset() assert := assert.New(t) - conf := config.NewDefaultAgentConfig() server := testServer(t) assert.NotNil(server) defer server.Close() - err := initInfo(conf) + err := initInfo("host", false) assert.NoError(err) var buf bytes.Buffer // we are going to use a different port so we got @@ -167,7 +164,7 @@ func TestNotRunning(t *testing.T) { assert.NoError(err) newURL := "http://" + hostPort[0] + ":" + strconv.Itoa(port+1) - err = Info(&buf, conf, newURL) + err = Info(&buf, newURL) assert.Error(err) info := buf.String() assert.Equal(notRunningInfo, info) @@ -178,16 +175,15 @@ func TestError(t *testing.T) { defer reset() assert := assert.New(t) - conf := config.NewDefaultAgentConfig() server := testServer(t) assert.NotNil(server) defer server.Close() - err := initInfo(conf) + err := initInfo("host", false) assert.NoError(err) var buf bytes.Buffer // same port but a 404 response - err = Info(&buf, conf, server.URL+"/haha") + err = Info(&buf, server.URL+"/haha") assert.Error(err) info := buf.String() diff --git a/cmd/process-agent/main_common.go b/cmd/process-agent/main_common.go index 9d7d85b9ebed1..23997a29864dd 100644 --- a/cmd/process-agent/main_common.go +++ b/cmd/process-agent/main_common.go @@ -21,9 +21,10 @@ import ( "github.com/DataDog/datadog-agent/cmd/process-agent/subcommands" sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" ddconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/config/settings" "github.com/DataDog/datadog-agent/pkg/metadata/host" "github.com/DataDog/datadog-agent/pkg/pidfile" - "github.com/DataDog/datadog-agent/pkg/process/config" + "github.com/DataDog/datadog-agent/pkg/process/checks" "github.com/DataDog/datadog-agent/pkg/process/statsd" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/tagger" @@ -40,8 +41,6 @@ import ( _ "github.com/DataDog/datadog-agent/pkg/workloadmeta/collectors" ) -const loggerName ddconfig.LoggerName = "PROCESS" - const ( agent6DisabledMessage = `process-agent not enabled. Set env var DD_PROCESS_CONFIG_PROCESS_COLLECTION_ENABLED=true or add @@ -61,7 +60,7 @@ func main() { } func runAgent(globalParams *command.GlobalParams, exit chan struct{}) { - if err := ddutil.SetupCoreDump(); err != nil { + if err := ddutil.SetupCoreDump(ddconfig.Datadog); err != nil { log.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) } @@ -81,41 +80,34 @@ func runAgent(globalParams *command.GlobalParams, exit chan struct{}) { }() } - // We need to load in the system probe environment variables before we load the config, otherwise an - // "Unknown environment variable" warning will show up whenever valid system probe environment variables are defined. - ddconfig.InitSystemProbeConfig(ddconfig.Datadog) - - if err := config.LoadConfigIfExists(globalParams.ConfFilePath); err != nil { - _ = log.Criticalf("Error parsing config: %s", err) + if err := command.BootstrapConfig(globalParams.ConfFilePath, false); err != nil { + _ = log.Critical(err) cleanupAndExit(1) } // For system probe, there is an additional config file that is shared with the system-probe - syscfg, err := sysconfig.Merge(globalParams.SysProbeConfFilePath) + syscfg, err := sysconfig.New(globalParams.SysProbeConfFilePath) if err != nil { _ = log.Critical(err) cleanupAndExit(1) } - config.InitRuntimeSettings() + // If the sysprobe module is enabled, the process check can call out to the sysprobe for privileged stats + _, processModuleEnabled := syscfg.EnabledModules[sysconfig.ProcessModule] - cfg, err := config.NewAgentConfig(loggerName, globalParams.ConfFilePath, syscfg) - if err != nil { - log.Criticalf("Error parsing config: %s", err) - cleanupAndExit(1) - } + initRuntimeSettings() mainCtx, mainCancel := context.WithCancel(context.Background()) defer mainCancel() - err = manager.ConfigureAutoExit(mainCtx) + err = manager.ConfigureAutoExit(mainCtx, ddconfig.Datadog) if err != nil { log.Criticalf("Unable to configure auto-exit, err: %w", err) cleanupAndExit(1) } // Now that the logger is configured log host info - hostInfo := host.GetStatusInformation() - log.Infof("running on platform: %s", hostInfo.Platform) + hostStatus := host.GetStatusInformation() + log.Infof("running on platform: %s", hostStatus.Platform) agentVersion, _ := version.Agent() log.Infof("running version: %s", agentVersion.GetNumberAndPre()) @@ -152,12 +144,6 @@ func runAgent(globalParams *command.GlobalParams, exit chan struct{}) { } defer tagger.Stop() //nolint:errcheck - err = initInfo(cfg) - if err != nil { - log.Criticalf("Error initializing info: %s", err) - cleanupAndExit(1) - } - if err := statsd.Configure(ddconfig.GetBindHost(), ddconfig.Datadog.GetInt("dogstatsd_port")); err != nil { log.Criticalf("Error configuring statsd: %s", err) cleanupAndExit(1) @@ -227,10 +213,23 @@ func runAgent(globalParams *command.GlobalParams, exit chan struct{}) { expVarPort = ddconfig.DefaultProcessExpVarPort } + hostInfo, err := checks.CollectHostInfo() + if err != nil { + log.Criticalf("Error collecting host details: %s", err) + cleanupAndExit(1) + return + } + + err = initInfo(hostInfo.HostName, processModuleEnabled) + if err != nil { + log.Criticalf("Error initializing info: %s", err) + cleanupAndExit(1) + } + if globalParams.Info { // using the debug port to get info to work url := fmt.Sprintf("http://localhost:%d/debug/vars", expVarPort) - if err := Info(os.Stdout, cfg, url); err != nil { + if err := Info(os.Stdout, url); err != nil { cleanupAndExit(1) } return @@ -253,12 +252,19 @@ func runAgent(globalParams *command.GlobalParams, exit chan struct{}) { _ = log.Error(err) } - cl, err := NewCollector(cfg, enabledChecks) + cl, err := NewCollector(syscfg, hostInfo, enabledChecks) if err != nil { log.Criticalf("Error creating collector: %s", err) cleanupAndExit(1) return } + cl.submitter, err = NewSubmitter(hostInfo.HostName, cl.UpdateRTStatus) + if err != nil { + log.Criticalf("Error creating checkSubmitter: %s", err) + cleanupAndExit(1) + return + } + if err := cl.run(exit); err != nil { log.Criticalf("Error starting collector: %s", err) os.Exit(1) @@ -286,3 +292,23 @@ func cleanupAndExitHandler(globalParams *command.GlobalParams) func(int) { os.Exit(status) } } + +// initRuntimeSettings registers settings to be added to the runtime config. +func initRuntimeSettings() { + // NOTE: Any settings you want to register should simply be added here + processRuntimeSettings := []settings.RuntimeSetting{ + settings.LogLevelRuntimeSetting{}, + settings.RuntimeMutexProfileFraction("runtime_mutex_profile_fraction"), + settings.RuntimeBlockProfileRate("runtime_block_profile_rate"), + settings.ProfilingGoroutines("internal_profiling_goroutines"), + settings.ProfilingRuntimeSetting{SettingName: "internal_profiling", Service: "process-agent"}, + } + + // Before we begin listening, register runtime settings + for _, setting := range processRuntimeSettings { + err := settings.RegisterRuntimeSetting(setting) + if err != nil { + _ = log.Warnf("Cannot initialize the runtime setting %s: %v", setting.Name(), err) + } + } +} diff --git a/cmd/process-agent/mocks/submitter.go b/cmd/process-agent/mocks/submitter.go new file mode 100644 index 0000000000000..e6782315e2bca --- /dev/null +++ b/cmd/process-agent/mocks/submitter.go @@ -0,0 +1,54 @@ +// Code generated by mockery v2.16.0. DO NOT EDIT. + +package mocks + +import ( + process "github.com/DataDog/agent-payload/v5/process" + mock "github.com/stretchr/testify/mock" + + time "time" +) + +// Submitter is an autogenerated mock type for the Submitter type +type Submitter struct { + mock.Mock +} + +// Start provides a mock function with given fields: +func (_m *Submitter) Start() error { + ret := _m.Called() + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// Stop provides a mock function with given fields: +func (_m *Submitter) Stop() { + _m.Called() +} + +// Submit provides a mock function with given fields: start, name, messages +func (_m *Submitter) Submit(start time.Time, name string, messages []process.MessageBody) { + _m.Called(start, name, messages) +} + +type mockConstructorTestingTNewSubmitter interface { + mock.TestingT + Cleanup(func()) +} + +// NewSubmitter creates a new instance of Submitter. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +func NewSubmitter(t mockConstructorTestingTNewSubmitter) *Submitter { + mock := &Submitter{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/cmd/process-agent/subcommands/check/check.go b/cmd/process-agent/subcommands/check/check.go index a9d6e74ae46e9..c22908e1c721c 100644 --- a/cmd/process-agent/subcommands/check/check.go +++ b/cmd/process-agent/subcommands/check/check.go @@ -23,7 +23,6 @@ import ( ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/metadata/host" "github.com/DataDog/datadog-agent/pkg/process/checks" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/net" "github.com/DataDog/datadog-agent/pkg/tagger" "github.com/DataDog/datadog-agent/pkg/tagger/local" @@ -43,6 +42,14 @@ type cliParams struct { waitInterval time.Duration } +func nextGroupID() func() int32 { + var groupID int32 + return func() int32 { + groupID++ + return groupID + } +} + // Commands returns a slice of subcommands for the `check` command in the Process Agent func Commands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &cliParams{ @@ -78,31 +85,22 @@ func runCheckCmd(cliParams *cliParams) error { // Override the disable_file_logging setting so that the check command doesn't dump so much noise into the log file. ddconfig.Datadog.Set("disable_file_logging", true) - // We need to load in the system probe environment variables before we load the config, otherwise an - // "Unknown environment variable" warning will show up whenever valid system probe environment variables are defined. - ddconfig.InitSystemProbeConfig(ddconfig.Datadog) - - if err := config.LoadConfigIfExists(cliParams.ConfFilePath); err != nil { + if err := command.BootstrapConfig(cliParams.GlobalParams.ConfFilePath, true); err != nil { return log.Criticalf("Error parsing config: %s", err) } // For system probe, there is an additional config file that is shared with the system-probe - syscfg, err := sysconfig.Merge(cliParams.SysProbeConfFilePath) + syscfg, err := sysconfig.New(cliParams.SysProbeConfFilePath) if err != nil { return log.Critical(err) } - cfg, err := config.NewAgentConfig(command.LoggerName, cliParams.ConfFilePath, syscfg) - if err != nil { - return log.Criticalf("Error parsing config: %s", err) - } - ctx, cancel := context.WithCancel(context.Background()) defer cancel() // Now that the logger is configured log host info - hostInfo := host.GetStatusInformation() - log.Infof("running on platform: %s", hostInfo.Platform) + hostStatus := host.GetStatusInformation() + log.Infof("running on platform: %s", hostStatus.Platform) agentVersion, _ := version.Agent() log.Infof("running version: %s", agentVersion.GetNumberAndPre()) @@ -136,7 +134,7 @@ func runCheckCmd(cliParams *cliParams) error { } defer tagger.Stop() //nolint:errcheck - sysInfo, err := checks.CollectSystemInfo(cfg) + hostInfo, err := checks.CollectHostInfo() if err != nil { log.Errorf("failed to collect system info: %s", err) } @@ -149,84 +147,60 @@ func runCheckCmd(cliParams *cliParams) error { }() // If the sysprobe module is enabled, the process check can call out to the sysprobe for privileged stats - _, checks.Process.SysprobeProcessModuleEnabled = syscfg.EnabledModules[sysconfig.ProcessModule] + _, processModuleEnabled := syscfg.EnabledModules[sysconfig.ProcessModule] - if checks.Process.SysprobeProcessModuleEnabled { - net.SetSystemProbePath(cfg.SystemProbeAddress) + if processModuleEnabled { + net.SetSystemProbePath(syscfg.SocketAddress) } - // Connections check requires process-check to have occurred first (for process creation ts), - if cliParams.checkName == checks.Connections.Name() { - // use a different client ID to prevent destructive querying of connections data - checks.ProcessAgentClientID = "process-agent-cli-check-id" - if err := checks.Process.Init(cfg, sysInfo); err != nil { - return err - } - checks.Process.Run(cfg, 0) //nolint:errcheck - // Clean up the process check state only after the connections check is executed - cleanups = append(cleanups, checks.Process.Cleanup) - } - - names := make([]string, 0, len(checks.All)) - for _, ch := range checks.All { + all := checks.All() + names := make([]string, 0, len(all)) + for _, ch := range all { names = append(names, ch.Name()) - if ch.Name() == cliParams.checkName { - if err = ch.Init(cfg, sysInfo); err != nil { - return err - } - cleanups = append(cleanups, ch.Cleanup) - return runCheck(cliParams, cfg, ch) + cfg := &checks.SysProbeConfig{ + MaxConnsPerMessage: syscfg.MaxConnsPerMessage, + SystemProbeAddress: syscfg.SocketAddress, + ProcessModuleEnabled: processModuleEnabled, } - withRealTime, ok := ch.(checks.CheckWithRealTime) - if ok && withRealTime.RealTimeName() == cliParams.checkName { - if err = withRealTime.Init(cfg, sysInfo); err != nil { - return err - } - cleanups = append(cleanups, withRealTime.Cleanup) - return runCheckAsRealTime(cliParams, cfg, withRealTime) + if !matchingCheck(cliParams.checkName, ch) { + continue } + + if err = ch.Init(cfg, hostInfo); err != nil { + return err + } + cleanups = append(cleanups, ch.Cleanup) + return runCheck(cliParams, ch) } return log.Errorf("invalid check '%s', choose from: %v", cliParams.checkName, names) } -func runCheck(cliParams *cliParams, cfg *config.AgentConfig, ch checks.Check) error { - // Run the check once to prime the cache. - if _, err := ch.Run(cfg, 0); err != nil { - return fmt.Errorf("collection error: %s", err) +func matchingCheck(checkName string, ch checks.Check) bool { + if ch.SupportsRunOptions() { + if checks.RTName(ch.Name()) == checkName { + return true + } } - log.Infof("Waiting %s before running the check", cliParams.waitInterval.String()) - time.Sleep(cliParams.waitInterval) + return ch.Name() == checkName +} - if !cliParams.checkOutputJSON { - printResultsBanner(ch.Name()) - } +func runCheck(cliParams *cliParams, ch checks.Check) error { + nextGroupID := nextGroupID() - msgs, err := ch.Run(cfg, 1) - if err != nil { - return fmt.Errorf("collection error: %s", err) + options := &checks.RunOptions{ + RunStandard: true, } - return printResults(ch.Name(), msgs, cliParams.checkOutputJSON) -} -func runCheckAsRealTime(cliParams *cliParams, cfg *config.AgentConfig, ch checks.CheckWithRealTime) error { - options := checks.RunOptions{ - RunStandard: true, - RunRealTime: true, + if cliParams.checkName == checks.RTName(ch.Name()) { + options.RunRealtime = true } - var ( - groupID int32 - nextGroupID = func() int32 { - groupID++ - return groupID - } - ) // We need to run the check twice in order to initialize the stats // Rate calculations rely on having two datapoints - if _, err := ch.RunWithOptions(cfg, nextGroupID, options); err != nil { + if _, err := ch.Run(nextGroupID, options); err != nil { return fmt.Errorf("collection error: %s", err) } @@ -234,15 +208,26 @@ func runCheckAsRealTime(cliParams *cliParams, cfg *config.AgentConfig, ch checks time.Sleep(cliParams.waitInterval) if !cliParams.checkOutputJSON { - printResultsBanner(ch.RealTimeName()) + printResultsBanner(cliParams.checkName) } - run, err := ch.RunWithOptions(cfg, nextGroupID, options) + result, err := ch.Run(nextGroupID, options) if err != nil { return fmt.Errorf("collection error: %s", err) } - return printResults(ch.RealTimeName(), run.RealTime, cliParams.checkOutputJSON) + var msgs []process.MessageBody + + switch { + case result == nil: + break + case options != nil && options.RunRealtime: + msgs = result.RealtimePayloads() + default: + msgs = result.Payloads() + } + + return printResults(cliParams.checkName, msgs, cliParams.checkOutputJSON) } func printResultsBanner(name string) { diff --git a/cmd/process-agent/subcommands/config/config.go b/cmd/process-agent/subcommands/config/config.go index 27380c4eef06c..c3533070d33d1 100644 --- a/cmd/process-agent/subcommands/config/config.go +++ b/cmd/process-agent/subcommands/config/config.go @@ -15,7 +15,7 @@ import ( ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/config/settings" settingshttp "github.com/DataDog/datadog-agent/pkg/config/settings/http" - "github.com/DataDog/datadog-agent/pkg/process/config" + "github.com/DataDog/datadog-agent/pkg/util/log" ) // Commands returns a slice of subcommands for the `config` command in the Process Agent @@ -146,17 +146,8 @@ func getConfigValue(globalParams *command.GlobalParams, args []string) error { } func getClient(globalParams *command.GlobalParams) (settings.Client, error) { - // Set up the config so we can get the port later - // We set this up differently from the main process-agent because this way is quieter - cfg := config.NewDefaultAgentConfig() - if globalParams.ConfFilePath != "" { - if err := config.LoadConfigIfExists(globalParams.ConfFilePath); err != nil { - return nil, err - } - } - err := cfg.LoadAgentConfig(globalParams.ConfFilePath) - if err != nil { - return nil, err + if err := command.BootstrapConfig(globalParams.ConfFilePath, true); err != nil { + return nil, log.Criticalf("Error parsing config: %s", err) } httpClient := apiutil.GetClient(false) diff --git a/cmd/process-agent/subcommands/events/events.go b/cmd/process-agent/subcommands/events/events.go index 549ee1d003ece..a68da020e20cd 100644 --- a/cmd/process-agent/subcommands/events/events.go +++ b/cmd/process-agent/subcommands/events/events.go @@ -19,9 +19,7 @@ import ( "github.com/DataDog/datadog-agent/cmd/process-agent/command" sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" - ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/process/checks" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/events" "github.com/DataDog/datadog-agent/pkg/process/events/model" "github.com/DataDog/datadog-agent/pkg/process/util" @@ -87,24 +85,16 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { } func bootstrapEventsCmd(cliParams *cliParams) error { - ddconfig.InitSystemProbeConfig(ddconfig.Datadog) - - if err := config.LoadConfigIfExists(cliParams.ConfFilePath); err != nil { + if err := command.BootstrapConfig(cliParams.GlobalParams.ConfFilePath, true); err != nil { return log.Criticalf("Error parsing config: %s", err) } // Load system-probe.yaml file and merge it to the global Datadog config - sysCfg, err := sysconfig.Merge(cliParams.SysProbeConfFilePath) + _, err := sysconfig.New(cliParams.SysProbeConfFilePath) if err != nil { return log.Critical(err) } - // Set up logger - _, err = config.NewAgentConfig(command.LoggerName, cliParams.ConfFilePath, sysCfg) - if err != nil { - return log.Criticalf("Error parsing config: %s", err) - } - return nil } diff --git a/cmd/process-agent/subcommands/status/status.go b/cmd/process-agent/subcommands/status/status.go index a57bade135b91..187941df730dd 100644 --- a/cmd/process-agent/subcommands/status/status.go +++ b/cmd/process-agent/subcommands/status/status.go @@ -153,8 +153,8 @@ func getStatusURL() (string, error) { } func runStatus(cliParams *cliParams) error { - if err := command.BootstrapConfig(cliParams.GlobalParams); err != nil { - return err + if err := command.BootstrapConfig(cliParams.GlobalParams.ConfFilePath, true); err != nil { + return log.Criticalf("Error parsing config: %s", err) } statusURL, err := getStatusURL() diff --git a/cmd/process-agent/subcommands/taggerlist/tagger_list.go b/cmd/process-agent/subcommands/taggerlist/tagger_list.go index 4c3a2cbacb179..23b90772871b7 100644 --- a/cmd/process-agent/subcommands/taggerlist/tagger_list.go +++ b/cmd/process-agent/subcommands/taggerlist/tagger_list.go @@ -49,8 +49,8 @@ func Commands(globalParams *command.GlobalParams) []*cobra.Command { func taggerList(cliParams *cliParams) error { log.Info("Got a request for the tagger-list. Calling tagger.") - if err := command.BootstrapConfig(cliParams.GlobalParams); err != nil { - return err + if err := command.BootstrapConfig(cliParams.GlobalParams.ConfFilePath, true); err != nil { + return log.Criticalf("Error parsing config: %s", err) } taggerURL, err := getTaggerURL() diff --git a/cmd/process-agent/submitter.go b/cmd/process-agent/submitter.go new file mode 100644 index 0000000000000..42d329558b599 --- /dev/null +++ b/cmd/process-agent/submitter.go @@ -0,0 +1,527 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package main + +import ( + "fmt" + "hash/fnv" + "net/http" + "os" + "strconv" + "sync" + "time" + + model "github.com/DataDog/agent-payload/v5/process" + ddconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/config/resolver" + "github.com/DataDog/datadog-agent/pkg/forwarder" + "github.com/DataDog/datadog-agent/pkg/forwarder/transaction" + "github.com/DataDog/datadog-agent/pkg/orchestrator" + oconfig "github.com/DataDog/datadog-agent/pkg/orchestrator/config" + "github.com/DataDog/datadog-agent/pkg/process/checks" + "github.com/DataDog/datadog-agent/pkg/process/statsd" + "github.com/DataDog/datadog-agent/pkg/process/util/api" + apicfg "github.com/DataDog/datadog-agent/pkg/process/util/api/config" + "github.com/DataDog/datadog-agent/pkg/process/util/api/headers" + "github.com/DataDog/datadog-agent/pkg/util/kubernetes/clustername" + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/version" +) + +type Submitter interface { + Submit(start time.Time, name string, messages []model.MessageBody) + Start() error + Stop() +} + +var _ Submitter = &checkSubmitter{} + +type checkSubmitter struct { + // Per-check Weighted Queues + processResults *api.WeightedQueue + rtProcessResults *api.WeightedQueue + eventResults *api.WeightedQueue + connectionsResults *api.WeightedQueue + podResults *api.WeightedQueue + + // Forwarders + processForwarder *forwarder.DefaultForwarder + rtProcessForwarder *forwarder.DefaultForwarder + connectionsForwarder *forwarder.DefaultForwarder + podForwarder *forwarder.DefaultForwarder + eventForwarder *forwarder.DefaultForwarder + + orchestrator *oconfig.OrchestratorConfig + hostname string + + exit chan struct{} + wg *sync.WaitGroup + + // Used to cache the hash result of the host name and the pid of the process agent. Being used as part of + // getRequestID method. Must use pointer, to distinguish between uninitialized value and the theoretical but yet + // possible 0 value for the hash result. + requestIDCachedHash *uint64 + dropCheckPayloads []string + + forwarderRetryMaxQueueBytes int + + // Callback for setting realtime mode. If this is nil realtime mode is never toggled. + updateRTStatusCallback func([]*model.CollectorStatus) +} + +func NewSubmitter(hostname string, enableRealtimeCallback func([]*model.CollectorStatus)) (*checkSubmitter, error) { + queueBytes := ddconfig.Datadog.GetInt("process_config.process_queue_bytes") + if queueBytes <= 0 { + log.Warnf("Invalid queue bytes size: %d. Using default value: %d", queueBytes, ddconfig.DefaultProcessQueueBytes) + queueBytes = ddconfig.DefaultProcessQueueBytes + } + + queueSize := ddconfig.Datadog.GetInt("process_config.queue_size") + if queueSize <= 0 { + log.Warnf("Invalid check queue size: %d. Using default value: %d", queueSize, ddconfig.DefaultProcessQueueSize) + queueSize = ddconfig.DefaultProcessQueueSize + } + processResults := api.NewWeightedQueue(queueSize, int64(queueBytes)) + log.Debugf("Creating process check queue with max_size=%d and max_weight=%d", processResults.MaxSize(), processResults.MaxWeight()) + + rtQueueSize := ddconfig.Datadog.GetInt("process_config.rt_queue_size") + if rtQueueSize <= 0 { + log.Warnf("Invalid rt check queue size: %d. Using default value: %d", rtQueueSize, ddconfig.DefaultProcessRTQueueSize) + rtQueueSize = ddconfig.DefaultProcessRTQueueSize + } + // reuse main queue's ProcessQueueBytes because it's unlikely that it'll reach to that size in bytes, so we don't need a separate config for it + rtProcessResults := api.NewWeightedQueue(rtQueueSize, int64(queueBytes)) + log.Debugf("Creating rt process check queue with max_size=%d and max_weight=%d", rtProcessResults.MaxSize(), rtProcessResults.MaxWeight()) + + connectionsResults := api.NewWeightedQueue(queueSize, int64(queueBytes)) + log.Debugf("Creating connections queue with max_size=%d and max_weight=%d", connectionsResults.MaxSize(), connectionsResults.MaxWeight()) + + orchestrator := oconfig.NewDefaultOrchestratorConfig() + if err := orchestrator.Load(); err != nil { + return nil, err + } + podResults := api.NewWeightedQueue(queueSize, int64(orchestrator.PodQueueBytes)) + log.Debugf("Creating pod check queue with max_size=%d and max_weight=%d", podResults.MaxSize(), podResults.MaxWeight()) + + eventResults := api.NewWeightedQueue(queueSize, int64(queueBytes)) + log.Debugf("Creating event check queue with max_size=%d and max_weight=%d", eventResults.MaxSize(), eventResults.MaxWeight()) + + dropCheckPayloads := ddconfig.Datadog.GetStringSlice("process_config.drop_check_payloads") + if len(dropCheckPayloads) > 0 { + log.Debugf("Dropping payloads from checks: %v", dropCheckPayloads) + } + updateDropCheckPayloads(dropCheckPayloads) + + // Forwarder initialization + processAPIEndpoints, err := getAPIEndpoints() + if err != nil { + return nil, err + } + processForwarderOpts := forwarder.NewOptionsWithResolvers(resolver.NewSingleDomainResolvers(apicfg.KeysPerDomains(processAPIEndpoints))) + processForwarderOpts.DisableAPIKeyChecking = true + processForwarderOpts.RetryQueuePayloadsTotalMaxSize = queueBytes // Allow more in-flight requests than the default + processForwarder := forwarder.NewDefaultForwarder(processForwarderOpts) + + // rt forwarder reuses processForwarder's config + rtProcessForwarder := forwarder.NewDefaultForwarder(processForwarderOpts) + + // connections forwarder reuses processForwarder's config + connectionsForwarder := forwarder.NewDefaultForwarder(processForwarderOpts) + + podForwarderOpts := forwarder.NewOptionsWithResolvers(resolver.NewSingleDomainResolvers(apicfg.KeysPerDomains(orchestrator.OrchestratorEndpoints))) + podForwarderOpts.DisableAPIKeyChecking = true + podForwarderOpts.RetryQueuePayloadsTotalMaxSize = queueBytes // Allow more in-flight requests than the default + podForwarder := forwarder.NewDefaultForwarder(podForwarderOpts) + + processEventsAPIEndpoints, err := getEventsAPIEndpoints() + if err != nil { + return nil, err + } + eventForwarderOpts := forwarder.NewOptionsWithResolvers(resolver.NewSingleDomainResolvers(apicfg.KeysPerDomains(processEventsAPIEndpoints))) + eventForwarderOpts.DisableAPIKeyChecking = true + eventForwarderOpts.RetryQueuePayloadsTotalMaxSize = queueBytes // Allow more in-flight requests than the default + eventForwarder := forwarder.NewDefaultForwarder(eventForwarderOpts) + + printStartMessage(hostname, processAPIEndpoints, processEventsAPIEndpoints, orchestrator.OrchestratorEndpoints) + return &checkSubmitter{ + processResults: processResults, + rtProcessResults: rtProcessResults, + eventResults: eventResults, + connectionsResults: connectionsResults, + podResults: podResults, + + processForwarder: processForwarder, + rtProcessForwarder: rtProcessForwarder, + connectionsForwarder: connectionsForwarder, + podForwarder: podForwarder, + eventForwarder: eventForwarder, + + orchestrator: orchestrator, + hostname: hostname, + + dropCheckPayloads: dropCheckPayloads, + + forwarderRetryMaxQueueBytes: queueBytes, + + updateRTStatusCallback: enableRealtimeCallback, + + wg: &sync.WaitGroup{}, + exit: make(chan struct{}), + }, nil +} + +func printStartMessage(hostname string, processAPIEndpoints, processEventsAPIEndpoints, orchestratorEndpoints []apicfg.Endpoint) { + eps := make([]string, 0, len(processAPIEndpoints)) + for _, e := range processAPIEndpoints { + eps = append(eps, e.Endpoint.String()) + } + orchestratorEps := make([]string, 0, len(orchestratorEndpoints)) + for _, e := range orchestratorEndpoints { + orchestratorEps = append(orchestratorEps, e.Endpoint.String()) + } + eventsEps := make([]string, 0, len(processEventsAPIEndpoints)) + for _, e := range processEventsAPIEndpoints { + eventsEps = append(eventsEps, e.Endpoint.String()) + } + + log.Infof("Starting checkSubmitter for host=%s, endpoints=%s, events endpoints=%s orchestrator endpoints=%s", hostname, eps, eventsEps, orchestratorEps) +} + +func (s *checkSubmitter) Submit(start time.Time, name string, messages []model.MessageBody) { + results := s.resultsQueueForCheck(name) + if name == checks.PodCheckName { + s.messagesToResultsQueue(start, checks.PodCheckName, messages[:len(messages)/2], results) + if s.orchestrator.IsManifestCollectionEnabled { + s.messagesToResultsQueue(start, checks.PodCheckManifestName, messages[len(messages)/2:], results) + } + return + } + + s.messagesToResultsQueue(start, name, messages, results) +} + +func (s *checkSubmitter) Start() error { + if err := s.processForwarder.Start(); err != nil { + return fmt.Errorf("error starting forwarder: %s", err) + } + + if err := s.rtProcessForwarder.Start(); err != nil { + return fmt.Errorf("error starting RT forwarder: %s", err) + } + + if err := s.connectionsForwarder.Start(); err != nil { + return fmt.Errorf("error starting connections forwarder: %s", err) + } + + if err := s.podForwarder.Start(); err != nil { + return fmt.Errorf("error starting pod forwarder: %s", err) + } + + if err := s.eventForwarder.Start(); err != nil { + return fmt.Errorf("error starting event forwarder: %s", err) + } + + s.wg.Add(1) + go func() { + defer s.wg.Done() + s.consumePayloads(s.processResults, s.processForwarder) + }() + + s.wg.Add(1) + go func() { + defer s.wg.Done() + s.consumePayloads(s.rtProcessResults, s.rtProcessForwarder) + }() + + s.wg.Add(1) + go func() { + defer s.wg.Done() + s.consumePayloads(s.connectionsResults, s.connectionsForwarder) + }() + + s.wg.Add(1) + go func() { + defer s.wg.Done() + s.consumePayloads(s.podResults, s.podForwarder) + }() + + s.wg.Add(1) + go func() { + defer s.wg.Done() + s.consumePayloads(s.eventResults, s.eventForwarder) + }() + + s.wg.Add(1) + go func() { + defer s.wg.Done() + + heartbeat := time.NewTicker(15 * time.Second) + defer heartbeat.Stop() + + queueSizeTicker := time.NewTicker(10 * time.Second) + defer queueSizeTicker.Stop() + + queueLogTicker := time.NewTicker(time.Minute) + defer queueLogTicker.Stop() + + agentVersion, _ := version.Agent() + tags := []string{ + fmt.Sprintf("version:%s", agentVersion.GetNumberAndPre()), + fmt.Sprintf("revision:%s", agentVersion.Commit), + } + for { + select { + case <-heartbeat.C: + statsd.Client.Gauge("datadog.process.agent", 1, tags, 1) //nolint:errcheck + case <-queueSizeTicker.C: + updateQueueStats(&queueStats{ + processQueueSize: s.processResults.Len(), + rtProcessQueueSize: s.rtProcessResults.Len(), + connectionsQueueSize: s.connectionsResults.Len(), + eventQueueSize: s.eventResults.Len(), + podQueueSize: s.podResults.Len(), + processQueueBytes: s.processResults.Weight(), + rtProcessQueueBytes: s.rtProcessResults.Weight(), + connectionsQueueBytes: s.connectionsResults.Weight(), + eventQueueBytes: s.eventResults.Weight(), + podQueueBytes: s.podResults.Weight(), + }) + case <-queueLogTicker.C: + s.logQueuesSize() + case <-s.exit: + return + } + } + }() + + return nil +} + +func (s *checkSubmitter) Stop() { + s.processResults.Stop() + s.rtProcessResults.Stop() + s.connectionsResults.Stop() + s.podResults.Stop() + s.eventResults.Stop() + + s.processForwarder.Stop() + s.rtProcessForwarder.Stop() + s.connectionsForwarder.Stop() + s.podForwarder.Stop() + s.eventForwarder.Stop() + + close(s.exit) + s.wg.Wait() +} + +func (s *checkSubmitter) consumePayloads(results *api.WeightedQueue, fwd forwarder.Forwarder) { + for { + // results.Poll() will return ok=false when stopped + item, ok := results.Poll() + if !ok { + return + } + result := item.(*checkResult) + for _, payload := range result.payloads { + var ( + forwarderPayload = transaction.NewBytesPayloadsWithoutMetaData([]*[]byte{&payload.body}) + responses chan forwarder.Response + err error + updateRTStatus bool + ) + + if s.shouldDropPayload(result.name) { + continue + } + + switch result.name { + case checks.ProcessCheckName: + updateRTStatus = true + responses, err = fwd.SubmitProcessChecks(forwarderPayload, payload.headers) + case checks.RTProcessCheckName: + updateRTStatus = true + responses, err = fwd.SubmitRTProcessChecks(forwarderPayload, payload.headers) + case checks.ContainerCheckName: + updateRTStatus = true + responses, err = fwd.SubmitContainerChecks(forwarderPayload, payload.headers) + case checks.RTContainerCheckName: + updateRTStatus = true + responses, err = fwd.SubmitRTContainerChecks(forwarderPayload, payload.headers) + case checks.ConnectionsCheckName: + updateRTStatus = true + responses, err = fwd.SubmitConnectionChecks(forwarderPayload, payload.headers) + // Pod check metadata + case checks.PodCheckName: + responses, err = fwd.SubmitOrchestratorChecks(forwarderPayload, payload.headers, int(orchestrator.K8sPod)) + // Pod check manifest data + case checks.PodCheckManifestName: + responses, err = fwd.SubmitOrchestratorManifests(forwarderPayload, payload.headers) + case checks.DiscoveryCheckName: + // A Process Discovery check does not change the RT mode + responses, err = fwd.SubmitProcessDiscoveryChecks(forwarderPayload, payload.headers) + case checks.ProcessEventsCheckName: + responses, err = fwd.SubmitProcessEventChecks(forwarderPayload, payload.headers) + default: + err = fmt.Errorf("unsupported payload type: %s", result.name) + } + + if err != nil { + log.Errorf("Unable to submit payload: %s", err) + continue + } + + if statuses := readResponseStatuses(result.name, responses); len(statuses) > 0 { + if updateRTStatus && s.updateRTStatusCallback != nil { + s.updateRTStatusCallback(statuses) + } + } + } + } +} + +func (s *checkSubmitter) resultsQueueForCheck(name string) *api.WeightedQueue { + switch name { + case checks.PodCheckName: + return s.podResults + case checks.RTProcessCheckName, checks.RTContainerCheckName: + return s.rtProcessResults + case checks.ConnectionsCheckName: + return s.connectionsResults + case checks.ProcessEventsCheckName: + return s.eventResults + } + return s.processResults +} + +func (s *checkSubmitter) logQueuesSize() { + var ( + processSize = s.processResults.Len() + rtProcessSize = s.rtProcessResults.Len() + connectionsSize = s.connectionsResults.Len() + eventsSize = s.eventResults.Len() + podSize = s.podResults.Len() + ) + + if processSize == 0 && + rtProcessSize == 0 && + connectionsSize == 0 && + eventsSize == 0 && + podSize == 0 { + return + } + + log.Infof( + "Delivery queues: process[size=%d, weight=%d], rtprocess[size=%d, weight=%d], connections[size=%d, weight=%d], event[size=%d, weight=%d], pod[size=%d, weight=%d]", + processSize, s.processResults.Weight(), + rtProcessSize, s.rtProcessResults.Weight(), + connectionsSize, s.connectionsResults.Weight(), + eventsSize, s.eventResults.Weight(), + podSize, s.podResults.Weight(), + ) +} + +func (s *checkSubmitter) messagesToResultsQueue(start time.Time, name string, messages []model.MessageBody, queue *api.WeightedQueue) { + result := s.messagesToCheckResult(start, name, messages) + if result == nil { + return + } + queue.Add(result) + // update proc and container count for info + updateProcContainerCount(messages) +} + +func (s *checkSubmitter) messagesToCheckResult(start time.Time, name string, messages []model.MessageBody) *checkResult { + if len(messages) == 0 { + return nil + } + + payloads := make([]checkPayload, 0, len(messages)) + sizeInBytes := 0 + + for messageIndex, m := range messages { + body, err := api.EncodePayload(m) + if err != nil { + log.Errorf("Unable to encode message: %s", err) + continue + } + + agentVersion, _ := version.Agent() + extraHeaders := make(http.Header) + extraHeaders.Set(headers.TimestampHeader, strconv.Itoa(int(start.Unix()))) + extraHeaders.Set(headers.HostHeader, s.hostname) + extraHeaders.Set(headers.ProcessVersionHeader, agentVersion.GetNumber()) + extraHeaders.Set(headers.ContainerCountHeader, strconv.Itoa(getContainerCount(m))) + extraHeaders.Set(headers.ContentTypeHeader, headers.ProtobufContentType) + + if s.orchestrator.OrchestrationCollectionEnabled { + if cid, err := clustername.GetClusterID(); err == nil && cid != "" { + extraHeaders.Set(headers.ClusterIDHeader, cid) + } + extraHeaders.Set(headers.EVPOriginHeader, "process-agent") + extraHeaders.Set(headers.EVPOriginVersionHeader, version.AgentVersion) + } + + switch name { + case checks.ProcessEventsCheckName: + extraHeaders.Set(headers.EVPOriginHeader, "process-agent") + extraHeaders.Set(headers.EVPOriginVersionHeader, version.AgentVersion) + case checks.ConnectionsCheckName, checks.ProcessCheckName: + requestID := s.getRequestID(start, messageIndex) + log.Debugf("the request id of the current message: %s", requestID) + extraHeaders.Set(headers.RequestIDHeader, requestID) + } + + payloads = append(payloads, checkPayload{ + body: body, + headers: extraHeaders, + }) + + sizeInBytes += len(body) + } + + return &checkResult{ + name: name, + payloads: payloads, + sizeInBytes: int64(sizeInBytes), + } +} + +// getRequestID generates a unique identifier (string representation of 64 bits integer) that is composed as follows: +// 1. 22 bits of the seconds in the current month. +// 2. 28 bits of hash of the hostname and process agent pid. +// 3. 14 bits of the current message in the batch being sent to the server. +func (s *checkSubmitter) getRequestID(start time.Time, chunkIndex int) string { + // The epoch is the beginning of the month of the `start` variable. + epoch := time.Date(start.Year(), start.Month(), 1, 0, 0, 0, 0, start.Location()) + // We are taking the seconds in the current month, and representing them under 22 bits. + // In a month we have 60 seconds per minute * 60 minutes per hour * 24 hours per day * maximum 31 days a month + // which is 2678400, and it can be represented with log2(2678400) = 21.35 bits. + seconds := (uint64(start.Sub(epoch).Seconds()) & secondsMask) << (hashNumberOfBits + chunkNumberOfBits) + + //// Next, we want 28 bits of hashed hostname & process agent pid. + if s.requestIDCachedHash == nil { + hash := fnv.New32() + hash.Write([]byte(s.hostname)) + hash.Write([]byte(strconv.Itoa(os.Getpid()))) + hostNamePIDHash := (uint64(hash.Sum32()) & hashMask) << chunkNumberOfBits + s.requestIDCachedHash = &hostNamePIDHash + } + + // Next, we take up to 14 bits to represent the message index in the batch. + // It means that we support up to 16384 (2 ^ 14) different messages being sent on the same batch. + chunk := uint64(chunkIndex & chunkMask) + return fmt.Sprintf("%d", seconds+*s.requestIDCachedHash+chunk) +} + +func (s *checkSubmitter) shouldDropPayload(check string) bool { + for _, d := range s.dropCheckPayloads { + if d == check { + return true + } + } + + return false +} diff --git a/cmd/process-agent/submitter_test.go b/cmd/process-agent/submitter_test.go new file mode 100644 index 0000000000000..1a4faa452743e --- /dev/null +++ b/cmd/process-agent/submitter_test.go @@ -0,0 +1,310 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package main + +import ( + "strconv" + "testing" + "time" + + "github.com/stretchr/testify/assert" + + model "github.com/DataDog/agent-payload/v5/process" + ddconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/process/util/api/headers" + "github.com/DataDog/datadog-agent/pkg/version" +) + +func TestNewCollectorQueueSize(t *testing.T) { + tests := []struct { + name string + override bool + queueSize int + expectedQueueSize int + }{ + { + name: "default queue size", + override: false, + queueSize: 42, + expectedQueueSize: ddconfig.DefaultProcessQueueSize, + }, + { + name: "valid queue size override", + override: true, + queueSize: 42, + expectedQueueSize: 42, + }, + { + name: "invalid negative queue size override", + override: true, + queueSize: -10, + expectedQueueSize: ddconfig.DefaultProcessQueueSize, + }, + { + name: "invalid 0 queue size override", + override: true, + queueSize: 0, + expectedQueueSize: ddconfig.DefaultProcessQueueSize, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + mockConfig := ddconfig.Mock(t) + if tc.override { + mockConfig.Set("process_config.queue_size", tc.queueSize) + } + + c, err := NewSubmitter(testHostName, nil) + assert.NoError(t, err) + assert.Equal(t, tc.expectedQueueSize, c.processResults.MaxSize()) + assert.Equal(t, tc.expectedQueueSize, c.podResults.MaxSize()) + }) + } +} + +func TestNewCollectorRTQueueSize(t *testing.T) { + tests := []struct { + name string + override bool + queueSize int + expectedQueueSize int + }{ + { + name: "default queue size", + override: false, + queueSize: 2, + expectedQueueSize: ddconfig.DefaultProcessRTQueueSize, + }, + { + name: "valid queue size override", + override: true, + queueSize: 2, + expectedQueueSize: 2, + }, + { + name: "invalid negative size override", + override: true, + queueSize: -2, + expectedQueueSize: ddconfig.DefaultProcessRTQueueSize, + }, + { + name: "invalid 0 queue size override", + override: true, + queueSize: 0, + expectedQueueSize: ddconfig.DefaultProcessRTQueueSize, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + mockConfig := ddconfig.Mock(t) + if tc.override { + mockConfig.Set("process_config.rt_queue_size", tc.queueSize) + } + + c, err := NewSubmitter(testHostName, nil) + assert.NoError(t, err) + assert.Equal(t, tc.expectedQueueSize, c.rtProcessResults.MaxSize()) + }) + } +} + +func TestNewCollectorProcessQueueBytes(t *testing.T) { + tests := []struct { + name string + override bool + queueBytes int + expectedQueueSize int + }{ + { + name: "default queue size", + override: false, + queueBytes: 42000, + expectedQueueSize: ddconfig.DefaultProcessQueueBytes, + }, + { + name: "valid queue size override", + override: true, + queueBytes: 42000, + expectedQueueSize: 42000, + }, + { + name: "invalid negative queue size override", + override: true, + queueBytes: -2, + expectedQueueSize: ddconfig.DefaultProcessQueueBytes, + }, + { + name: "invalid 0 queue size override", + override: true, + queueBytes: 0, + expectedQueueSize: ddconfig.DefaultProcessQueueBytes, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + mockConfig := ddconfig.Mock(t) + if tc.override { + mockConfig.Set("process_config.process_queue_bytes", tc.queueBytes) + } + + s, err := NewSubmitter(testHostName, nil) + assert.NoError(t, err) + assert.Equal(t, int64(tc.expectedQueueSize), s.processResults.MaxWeight()) + assert.Equal(t, int64(tc.expectedQueueSize), s.rtProcessResults.MaxWeight()) + assert.Equal(t, tc.expectedQueueSize, s.forwarderRetryMaxQueueBytes) + }) + } +} + +func TestCollectorMessagesToCheckResult(t *testing.T) { + submitter, err := NewSubmitter(testHostName, nil) + assert.NoError(t, err) + + now := time.Now() + agentVersion, _ := version.Agent() + + requestID := submitter.getRequestID(now, 0) + + tests := []struct { + name string + message model.MessageBody + expectHeaders map[string]string + }{ + { + name: "process", + message: &model.CollectorProc{ + Containers: []*model.Container{ + {}, {}, {}, + }, + }, + expectHeaders: map[string]string{ + headers.TimestampHeader: strconv.Itoa(int(now.Unix())), + headers.HostHeader: testHostName, + headers.ProcessVersionHeader: agentVersion.GetNumber(), + headers.ContainerCountHeader: "3", + headers.ContentTypeHeader: headers.ProtobufContentType, + headers.RequestIDHeader: requestID, + }, + }, + { + name: "rt_process", + message: &model.CollectorRealTime{ + ContainerStats: []*model.ContainerStat{ + {}, {}, {}, + }, + }, + expectHeaders: map[string]string{ + headers.TimestampHeader: strconv.Itoa(int(now.Unix())), + headers.HostHeader: testHostName, + headers.ProcessVersionHeader: agentVersion.GetNumber(), + headers.ContainerCountHeader: "3", + headers.ContentTypeHeader: headers.ProtobufContentType, + }, + }, + { + name: "container", + message: &model.CollectorContainer{ + Containers: []*model.Container{ + {}, {}, + }, + }, + expectHeaders: map[string]string{ + headers.TimestampHeader: strconv.Itoa(int(now.Unix())), + headers.HostHeader: testHostName, + headers.ProcessVersionHeader: agentVersion.GetNumber(), + headers.ContainerCountHeader: "2", + headers.ContentTypeHeader: headers.ProtobufContentType, + }, + }, + { + name: "rt_container", + message: &model.CollectorContainerRealTime{ + Stats: []*model.ContainerStat{ + {}, {}, {}, {}, {}, + }, + }, + expectHeaders: map[string]string{ + headers.TimestampHeader: strconv.Itoa(int(now.Unix())), + headers.HostHeader: testHostName, + headers.ProcessVersionHeader: agentVersion.GetNumber(), + headers.ContainerCountHeader: "5", + headers.ContentTypeHeader: headers.ProtobufContentType, + }, + }, + { + name: "process_discovery", + message: &model.CollectorProcDiscovery{}, + expectHeaders: map[string]string{ + headers.TimestampHeader: strconv.Itoa(int(now.Unix())), + headers.HostHeader: testHostName, + headers.ProcessVersionHeader: agentVersion.GetNumber(), + headers.ContainerCountHeader: "0", + headers.ContentTypeHeader: headers.ProtobufContentType, + }, + }, + { + name: "process_events", + message: &model.CollectorProcEvent{}, + expectHeaders: map[string]string{ + headers.TimestampHeader: strconv.Itoa(int(now.Unix())), + headers.HostHeader: testHostName, + headers.ProcessVersionHeader: agentVersion.GetNumber(), + headers.ContainerCountHeader: "0", + headers.ContentTypeHeader: headers.ProtobufContentType, + headers.EVPOriginHeader: "process-agent", + headers.EVPOriginVersionHeader: version.AgentVersion, + }, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + messages := []model.MessageBody{ + test.message, + } + result := submitter.messagesToCheckResult(now, test.name, messages) + assert.Equal(t, test.name, result.name) + assert.Len(t, result.payloads, 1) + payload := result.payloads[0] + assert.Len(t, payload.headers, len(test.expectHeaders)) + for k, v := range test.expectHeaders { + assert.Equal(t, v, payload.headers.Get(k)) + } + }) + } +} + +func Test_getRequestID(t *testing.T) { + s, err := NewSubmitter(testHostName, nil) + assert.NoError(t, err) + + fixedDate1 := time.Date(2022, 9, 1, 0, 0, 1, 0, time.Local) + id1 := s.getRequestID(fixedDate1, 1) + id2 := s.getRequestID(fixedDate1, 1) + // The calculation should be deterministic, so making sure the parameters generates the same id. + assert.Equal(t, id1, id2) + fixedDate2 := time.Date(2022, 9, 1, 0, 0, 2, 0, time.Local) + id3 := s.getRequestID(fixedDate2, 1) + + // The request id is based on time, so if the difference it only the time, then the new ID should be greater. + id1Num, _ := strconv.ParseUint(id1, 10, 64) + id3Num, _ := strconv.ParseUint(id3, 10, 64) + assert.Greater(t, id3Num, id1Num) + + // Increasing the chunk index should increase the id. + id4 := s.getRequestID(fixedDate2, 3) + id4Num, _ := strconv.ParseUint(id4, 10, 64) + assert.Equal(t, id3Num+2, id4Num) + + // Changing the host -> changing the hash. + s.hostname = "host2" + s.requestIDCachedHash = nil + id5 := s.getRequestID(fixedDate1, 1) + assert.NotEqual(t, id1, id5) +} diff --git a/cmd/security-agent/api/agent/agent.go b/cmd/security-agent/api/agent/agent.go index 8aebe3668c295..e8603c6d74236 100644 --- a/cmd/security-agent/api/agent/agent.go +++ b/cmd/security-agent/api/agent/agent.go @@ -49,7 +49,7 @@ func (a *Agent) SetupHandlers(r *mux.Router) { r.HandleFunc("/stop", a.stopAgent).Methods("POST") r.HandleFunc("/status", a.getStatus).Methods("GET") r.HandleFunc("/status/health", a.getHealth).Methods("GET") - r.HandleFunc("/config", settingshttp.Server.GetFull("")).Methods("GET") + r.HandleFunc("/config", settingshttp.Server.GetFullDatadogConfig("")).Methods("GET") r.HandleFunc("/config/list-runtime", settingshttp.Server.ListConfigurable).Methods("GET") r.HandleFunc("/config/{setting}", settingshttp.Server.GetValue).Methods("GET") r.HandleFunc("/config/{setting}", settingshttp.Server.SetValue).Methods("POST") diff --git a/cmd/security-agent/app/common/logs_context.go b/cmd/security-agent/app/common/logs_context.go deleted file mode 100644 index d30f21f2c7a20..0000000000000 --- a/cmd/security-agent/app/common/logs_context.go +++ /dev/null @@ -1,44 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package common - -import ( - coreconfig "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/logs" - "github.com/DataDog/datadog-agent/pkg/logs/client" - logshttp "github.com/DataDog/datadog-agent/pkg/logs/client/http" - "github.com/DataDog/datadog-agent/pkg/logs/config" - "github.com/DataDog/datadog-agent/pkg/util/log" -) - -func NewLogContextCompliance() (*config.Endpoints, *client.DestinationsContext, error) { - logsConfigComplianceKeys := config.NewLogsConfigKeys("compliance_config.endpoints.", coreconfig.Datadog) - return NewLogContext(logsConfigComplianceKeys, "cspm-intake.", "compliance", config.DefaultIntakeOrigin, logs.AgentJSONIntakeProtocol) -} - -func NewLogContext(logsConfig *config.LogsConfigKeys, endpointPrefix string, intakeTrackType config.IntakeTrackType, intakeOrigin config.IntakeOrigin, intakeProtocol config.IntakeProtocol) (*config.Endpoints, *client.DestinationsContext, error) { - endpoints, err := config.BuildHTTPEndpointsWithConfig(logsConfig, endpointPrefix, intakeTrackType, intakeProtocol, intakeOrigin) - if err != nil { - endpoints, err = config.BuildHTTPEndpoints(intakeTrackType, intakeProtocol, intakeOrigin) - if err == nil { - httpConnectivity := logshttp.CheckConnectivity(endpoints.Main) - endpoints, err = config.BuildEndpoints(httpConnectivity, intakeTrackType, intakeProtocol, intakeOrigin) - } - } - - if err != nil { - return nil, nil, log.Errorf("Invalid endpoints: %v", err) - } - - for _, status := range endpoints.GetStatus() { - log.Info(status) - } - - destinationsCtx := client.NewDestinationsContext() - destinationsCtx.Start() - - return endpoints, destinationsCtx, nil -} diff --git a/cmd/security-agent/app/start.go b/cmd/security-agent/app/start.go deleted file mode 100644 index 66411cc18814c..0000000000000 --- a/cmd/security-agent/app/start.go +++ /dev/null @@ -1,92 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package app - -import ( - "context" - "errors" - "os" - "os/signal" - "syscall" - - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" - "github.com/DataDog/datadog-agent/pkg/tagger" - "github.com/DataDog/datadog-agent/pkg/util/log" - "github.com/spf13/cobra" -) - -type startCliParams struct { - *common.GlobalParams - - pidfilePath string -} - -func StartCommands(globalParams *common.GlobalParams) []*cobra.Command { - cliParams := startCliParams{ - GlobalParams: globalParams, - } - - startCmd := &cobra.Command{ - Use: "start", - Short: "Start the Security Agent", - Long: `Runs Datadog Security agent in the foreground`, - RunE: func(cmd *cobra.Command, args []string) error { - return start(&cliParams) - }, - } - - startCmd.Flags().StringVarP(&cliParams.pidfilePath, "pidfile", "p", "", "path to the pidfile") - - return []*cobra.Command{startCmd} -} - -func start(cliParams *startCliParams) error { - // Main context passed to components - ctx, cancel := context.WithCancel(context.Background()) - defer StopAgent(cancel) - - err := RunAgent(ctx, cliParams.pidfilePath) - if errors.Is(err, errAllComponentsDisabled) { - return nil - } - if err != nil { - return err - } - - stopCh := make(chan struct{}) - defer close(stopCh) - go handleSignals(stopCh) - - // Block here until we receive a stop signal - <-stopCh - - return nil -} - -// handleSignals handles OS signals, and sends a message on stopCh when an interrupt -// signal is received. -func handleSignals(stopCh chan struct{}) { - // Setup a channel to catch OS signals - signalCh := make(chan os.Signal, 1) - signal.Notify(signalCh, os.Interrupt, syscall.SIGTERM, syscall.SIGPIPE) - - // Block here until we receive the interrupt signal - for signo := range signalCh { - switch signo { - case syscall.SIGPIPE: - // By default systemd redirects the stdout to journald. When journald is stopped or crashes we receive a SIGPIPE signal. - // Go ignores SIGPIPE signals unless it is when stdout or stdout is closed, in this case the agent is stopped. - // We never want dogstatsd to stop upon receiving SIGPIPE, so we intercept the SIGPIPE signals and just discard them. - default: - log.Infof("Received signal '%s', shutting down...", signo) - - _ = tagger.Stop() - - stopCh <- struct{}{} - return - } - } -} diff --git a/cmd/security-agent/app/subcommands/config/config.go b/cmd/security-agent/app/subcommands/config/config.go deleted file mode 100644 index 8be053de769e3..0000000000000 --- a/cmd/security-agent/app/subcommands/config/config.go +++ /dev/null @@ -1,49 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build kubeapiserver -// +build kubeapiserver - -package config - -import ( - "fmt" - - "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" - cmdconfig "github.com/DataDog/datadog-agent/cmd/security-agent/commands/config" - "github.com/DataDog/datadog-agent/pkg/api/util" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/config/settings" - settingshttp "github.com/DataDog/datadog-agent/pkg/config/settings/http" -) - -func Commands(globalParams *common.GlobalParams) []*cobra.Command { - cmd := cmdconfig.Config(getSettingsClient) - return []*cobra.Command{cmd} -} - -func setupConfig(cmd *cobra.Command) error { - err := config.SetupLogger(common.LoggerName, config.GetEnvDefault("DD_LOG_LEVEL", "off"), "", "", false, true, false) - if err != nil { - fmt.Printf("Cannot setup logger, exiting: %v\n", err) - return err - } - - return util.SetAuthToken() -} - -func getSettingsClient(cmd *cobra.Command, _ []string) (settings.Client, error) { - err := setupConfig(cmd) - if err != nil { - return nil, err - } - - c := util.GetClient(false) - apiConfigURL := fmt.Sprintf("https://localhost:%v/agent/config", config.Datadog.GetInt("security_agent.cmd_port")) - - return settingshttp.NewClient(c, apiConfigURL, "security-agent"), nil -} diff --git a/cmd/security-agent/command/command.go b/cmd/security-agent/command/command.go new file mode 100644 index 0000000000000..11f3e92c15746 --- /dev/null +++ b/cmd/security-agent/command/command.go @@ -0,0 +1,64 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package command + +import ( + "fmt" + "github.com/fatih/color" + "github.com/spf13/cobra" + "path" + + "github.com/DataDog/datadog-agent/cmd/agent/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" +) + +type GlobalParams struct { + ConfigFilePaths []string +} + +type SubcommandFactory func(globalParams *GlobalParams) []*cobra.Command + +const LoggerName = "SECURITY" + +var defaultSecurityAgentConfigFilePaths = []string{ + path.Join(common.DefaultConfPath, "datadog.yaml"), + path.Join(common.DefaultConfPath, "security-agent.yaml"), +} + +// MakeCommand makes the top-level Cobra command for this command. +func MakeCommand(subcommandFactories []SubcommandFactory) *cobra.Command { + var globalParams GlobalParams + var flagNoColor bool + + SecurityAgentCmd := &cobra.Command{ + Use: "datadog-security-agent [command]", + Short: "Datadog Security Agent at your service.", + Long: ` +Datadog Security Agent takes care of running compliance and security checks.`, + SilenceUsage: true, // don't print usage on errors + PersistentPreRunE: func(cmd *cobra.Command, args []string) error { + if flagNoColor { + color.NoColor = true + } + + if len(globalParams.ConfigFilePaths) == 1 && globalParams.ConfigFilePaths[0] == "" { + return fmt.Errorf("no Security Agent config files to load, exiting.") + } + return nil + }, + } + + SecurityAgentCmd.PersistentFlags().StringArrayVarP(&globalParams.ConfigFilePaths, flags.CfgPath, "c", defaultSecurityAgentConfigFilePaths, "paths to yaml configuration files") + SecurityAgentCmd.PersistentFlags().BoolVarP(&flagNoColor, flags.NoColor, "n", false, "disable color output") + + for _, factory := range subcommandFactories { + for _, subcmd := range factory(&globalParams) { + SecurityAgentCmd.AddCommand(subcmd) + } + } + + return SecurityAgentCmd +} diff --git a/cmd/security-agent/command/command_test.go b/cmd/security-agent/command/command_test.go new file mode 100644 index 0000000000000..8e86931c714ad --- /dev/null +++ b/cmd/security-agent/command/command_test.go @@ -0,0 +1,25 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package command + +import ( + "fmt" + "github.com/stretchr/testify/require" + "strings" + "testing" + + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" +) + +func TestMakeCommand(t *testing.T) { + var subcommandFactories []SubcommandFactory + cmd := MakeCommand(subcommandFactories) + + // The pflags package stringifies string arrays as CSVs, then adds back the square brackets + require.Equal(t, strings.ReplaceAll(fmt.Sprint(defaultSecurityAgentConfigFilePaths), " ", ","), cmd.Flag(flags.CfgPath).Value.String(), "cfgpath values not matching") + + //TODO: add test to ensure setting of no-color +} diff --git a/cmd/security-agent/command/logs_context.go b/cmd/security-agent/command/logs_context.go new file mode 100644 index 0000000000000..8ef83f275f33d --- /dev/null +++ b/cmd/security-agent/command/logs_context.go @@ -0,0 +1,54 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package command + +import ( + "github.com/DataDog/datadog-agent/comp/core/log" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/logs" + "github.com/DataDog/datadog-agent/pkg/logs/client" + logshttp "github.com/DataDog/datadog-agent/pkg/logs/client/http" + logsconfig "github.com/DataDog/datadog-agent/pkg/logs/config" +) + +const ( + cwsIntakeOrigin logsconfig.IntakeOrigin = "cloud-workload-security" +) + +func NewLogContextCompliance(log log.Component) (*logsconfig.Endpoints, *client.DestinationsContext, error) { + logsConfigComplianceKeys := logsconfig.NewLogsConfigKeys("compliance_config.endpoints.", pkgconfig.Datadog) + return NewLogContext(log, logsConfigComplianceKeys, "cspm-intake.", "compliance", logsconfig.DefaultIntakeOrigin, logs.AgentJSONIntakeProtocol) +} + +// This function will only be used on Linux. The only platforms where the runtime agent runs +func NewLogContextRuntime(log log.Component) (*logsconfig.Endpoints, *client.DestinationsContext, error) { + logsRuntimeConfigKeys := logsconfig.NewLogsConfigKeys("runtime_security_config.endpoints.", pkgconfig.Datadog) + return NewLogContext(log, logsRuntimeConfigKeys, "runtime-security-http-intake.logs.", "logs", cwsIntakeOrigin, logsconfig.DefaultIntakeProtocol) +} + +func NewLogContext(log log.Component, logsConfig *logsconfig.LogsConfigKeys, endpointPrefix string, intakeTrackType logsconfig.IntakeTrackType, intakeOrigin logsconfig.IntakeOrigin, intakeProtocol logsconfig.IntakeProtocol) (*logsconfig.Endpoints, *client.DestinationsContext, error) { + endpoints, err := logsconfig.BuildHTTPEndpointsWithConfig(logsConfig, endpointPrefix, intakeTrackType, intakeProtocol, intakeOrigin) + if err != nil { + endpoints, err = logsconfig.BuildHTTPEndpoints(intakeTrackType, intakeProtocol, intakeOrigin) + if err == nil { + httpConnectivity := logshttp.CheckConnectivity(endpoints.Main) + endpoints, err = logsconfig.BuildEndpoints(httpConnectivity, intakeTrackType, intakeProtocol, intakeOrigin) + } + } + + if err != nil { + return nil, nil, log.Errorf("Invalid endpoints: %v", err) + } + + for _, status := range endpoints.GetStatus() { + log.Info(status) + } + + destinationsCtx := client.NewDestinationsContext() + destinationsCtx.Start() + + return endpoints, destinationsCtx, nil +} diff --git a/cmd/security-agent/commands/config/config.go b/cmd/security-agent/commands/config/config.go deleted file mode 100644 index 3bc6dc10d66ee..0000000000000 --- a/cmd/security-agent/commands/config/config.go +++ /dev/null @@ -1,143 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package config - -import ( - "fmt" - - "github.com/DataDog/datadog-agent/pkg/config/settings" - - "github.com/spf13/cobra" -) - -// Config returns the main cobra config command. -func Config(getClient settings.ClientBuilder) *cobra.Command { - cmd := &cobra.Command{ - Use: "config", - Short: "Print the runtime configuration of a running agent", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { return showRuntimeConfiguration(getClient, cmd, args) }, - } - - cmd.AddCommand(listRuntime(getClient)) - cmd.AddCommand(set(getClient)) - cmd.AddCommand(get(getClient)) - - return cmd -} - -// listRuntime returns a cobra command to list the settings that can be changed at runtime. -func listRuntime(getClient settings.ClientBuilder) *cobra.Command { - return &cobra.Command{ - Use: "list-runtime", - Short: "List settings that can be changed at runtime", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { - return listRuntimeConfigurableValue(getClient, cmd, args) - }, - } -} - -// set returns a cobra command to set a config value at runtime. -func set(getClient settings.ClientBuilder) *cobra.Command { - return &cobra.Command{ - Use: "set [setting] [value]", - Short: "Set, for the current runtime, the value of a given configuration setting", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { return setConfigValue(getClient, cmd, args) }, - } -} - -// get returns a cobra command to get a runtime config value. -func get(getClient settings.ClientBuilder) *cobra.Command { - return &cobra.Command{ - Use: "get [setting]", - Short: "Get, for the current runtime, the value of a given configuration setting", - Long: ``, - RunE: func(cmd *cobra.Command, args []string) error { return getConfigValue(getClient, cmd, args) }, - } -} - -func showRuntimeConfiguration(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { - c, err := getClient(cmd, args) - if err != nil { - return err - } - - runtimeConfig, err := c.FullConfig() - if err != nil { - return err - } - - fmt.Println(runtimeConfig) - - return nil -} - -func listRuntimeConfigurableValue(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { - c, err := getClient(cmd, args) - if err != nil { - return err - } - - settingsList, err := c.List() - if err != nil { - return err - } - - fmt.Println("=== Settings that can be changed at runtime ===") - for setting, details := range settingsList { - if !details.Hidden { - fmt.Printf("%-30s %s\n", setting, details.Description) - } - } - - return nil -} - -func setConfigValue(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { - if len(args) != 2 { - return fmt.Errorf("exactly two parameters are required: the setting name and its value") - } - - c, err := getClient(cmd, args) - if err != nil { - return err - } - - hidden, err := c.Set(args[0], args[1]) - if err != nil { - return err - } - - if hidden { - fmt.Printf("IMPORTANT: you have modified a hidden option, this may incur billing charges or have other unexpected side-effects.\n") - } - - fmt.Printf("Configuration setting %s is now set to: %s\n", args[0], args[1]) - - return nil -} - -func getConfigValue(getClient settings.ClientBuilder, cmd *cobra.Command, args []string) error { - if len(args) != 1 { - return fmt.Errorf("a single setting name must be specified") - } - - c, err := getClient(cmd, args) - if err != nil { - return err - } - - value, err := c.Get(args[0]) - if err != nil { - return err - } - - fmt.Printf("%s is set to: %v\n", args[0], value) - - return nil -} diff --git a/cmd/security-agent/config/config.go b/cmd/security-agent/config/config.go index 1f037dca6f2e6..5734352de7ff8 100644 --- a/cmd/security-agent/config/config.go +++ b/cmd/security-agent/config/config.go @@ -9,21 +9,21 @@ import ( "fmt" "os" - aconfig "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/util/log" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" + pkglog "github.com/DataDog/datadog-agent/pkg/util/log" ) -// Merge will merge the security-agent configuration into the existing datadog configuration +// Merge will merge additional configuration into an existing configuration. The default is merging security-agent.yaml into datadog.yaml. func Merge(configPaths []string) error { for _, configPath := range configPaths { if f, err := os.Open(configPath); err == nil { - err = aconfig.Datadog.MergeConfig(f) + err = pkgconfig.Datadog.MergeConfig(f) _ = f.Close() if err != nil { return fmt.Errorf("error merging %s config file: %w", configPath, err) } } else { - log.Infof("no config exists at %s, ignoring...", configPath) + pkglog.Infof("no config exists at %s, ignoring...", configPath) } } diff --git a/cmd/security-agent/flags/flags_common.go b/cmd/security-agent/flags/flags_common.go new file mode 100644 index 0000000000000..4d580bfd97d75 --- /dev/null +++ b/cmd/security-agent/flags/flags_common.go @@ -0,0 +1,64 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package flags + +const ( + // Start Subcommand + // CfgPath defines the cfgpath flag + CfgPath = "cfgpath" + NoColor = "no-color" + PidFile = "pidfile" + + // Status Subcommand + JSON = "json" + PrettyJSON = "pretty-json" + File = "file" // Also for check subcommand + + // Flare Subcommand + Email = "email" + Send = "send" + + // Runtime Subcommand + PoliciesDir = "policies-dir" + EventFile = "event-file" + Debug = "debug" + Check = "check" + OutputPath = "output-path" + WithArgs = "with-args" + SnapshotInterfaces = "snapshot-interfaces" + RuleID = "rule-id" // Also for compliance subcommand + + // Runtime Activity Dump Subcommand + Name = "name" + ContainerID = "containerID" + Comm = "comm" + Timeout = "timeout" + DifferentiateArgs = "differentiate-args" + Output = "output" // TODO: unify with OutputPath + Compression = "compression" + Format = "format" + RemoteCompression = "remote-compression" + RemoteFormat = "remote-format" + Input = "input" + Remote = "remote" + + // Compliance Subcommand + SourceType = "source-type" + SourceName = "source-name" + ResourceID = "resource-id" + ResourceType = "resource-type" + Tags = "tags" + Data = "data" + + // Check Subcommand + Framework = "framework" + Verbose = "verbose" + Report = "report" + OverrideRegoInput = "override-rego-input" + DumpRegoInput = "dump-rego-input" + DumpReports = "dump-reports" // TODO: Unify with OutputPath + SkipRegoEval = "skip-rego-eval" +) diff --git a/cmd/security-agent/main_nix.go b/cmd/security-agent/main_nix.go index e65d03cb820ce..e981bc5606767 100644 --- a/cmd/security-agent/main_nix.go +++ b/cmd/security-agent/main_nix.go @@ -14,16 +14,15 @@ import ( _ "expvar" // Blank import used because this isn't directly used in this file _ "net/http/pprof" // Blank import used because this isn't directly used in this file + "github.com/DataDog/datadog-agent/cmd/internal/runcmd" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands" "github.com/DataDog/datadog-agent/pkg/util/flavor" - - "github.com/DataDog/datadog-agent/cmd/security-agent/app" ) func main() { // set the Agent flavor flavor.SetFlavor(flavor.SecurityAgent) - if err := app.CreateSecurityAgentCmd().Execute(); err != nil { - os.Exit(-1) - } + os.Exit(runcmd.Run(command.MakeCommand(subcommands.SecurityAgentSubcommands()))) } diff --git a/cmd/security-agent/app/subcommands/check/command.go b/cmd/security-agent/subcommands/check/command.go similarity index 65% rename from cmd/security-agent/app/subcommands/check/command.go rename to cmd/security-agent/subcommands/check/command.go index 4b018ff62776b..52c9451e72d6c 100644 --- a/cmd/security-agent/app/subcommands/check/command.go +++ b/cmd/security-agent/subcommands/check/command.go @@ -17,13 +17,13 @@ import ( "github.com/spf13/cobra" "go.uber.org/fx" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/compliance/agent" "github.com/DataDog/datadog-agent/pkg/compliance/checks" - pkgconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/flavor" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/hostname" @@ -31,7 +31,10 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/startstop" ) -type checkCliParams struct { +// CliParams needs to be exported because the compliance subcommand is tightly coupled to this subcommand and tests need to be able to access this type. +type CliParams struct { + *command.GlobalParams + args []string framework string @@ -44,16 +47,23 @@ type checkCliParams struct { skipRegoEval bool } -func SecAgentCommands(globalParams *common.GlobalParams) []*cobra.Command { - bp := core.BundleParams{ - ConfigParams: config.NewSecurityAgentParams(globalParams.ConfPathArray), - LogParams: log.LogForOneShot(common.LoggerName, "info", true)} - return Commands(bp) +func SecurityAgentCommands(globalParams *command.GlobalParams) []*cobra.Command { + return commandsWrapped(func() core.BundleParams { + return core.BundleParams{ + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "info", true), + } + }) +} + +func ClusterAgentCommands(bundleParams core.BundleParams) []*cobra.Command { + return commandsWrapped(func() core.BundleParams { + return bundleParams + }) } -// Commands returns a cobra command to run security agent checks -func Commands(bundleParams core.BundleParams) []*cobra.Command { - checkArgs := &checkCliParams{} +func commandsWrapped(bundleParamsFactory func() core.BundleParams) []*cobra.Command { + checkArgs := &CliParams{} cmd := &cobra.Command{ Use: "check", @@ -61,11 +71,13 @@ func Commands(bundleParams core.BundleParams) []*cobra.Command { Long: ``, RunE: func(cmd *cobra.Command, args []string) error { checkArgs.args = args + + bundleParams := bundleParamsFactory() if checkArgs.verbose { bundleParams.LogParams = log.LogForOneShot(bundleParams.LogParams.LoggerName(), "trace", true) } - return fxutil.OneShot(runCheck, + return fxutil.OneShot(RunCheck, fx.Supply(checkArgs), fx.Supply(bundleParams), core.Bundle, @@ -73,19 +85,19 @@ func Commands(bundleParams core.BundleParams) []*cobra.Command { }, } - cmd.Flags().StringVarP(&checkArgs.framework, "framework", "", "", "Framework to run the checks from") - cmd.Flags().StringVarP(&checkArgs.file, "file", "f", "", "Compliance suite file to read rules from") - cmd.Flags().BoolVarP(&checkArgs.verbose, "verbose", "v", false, "Include verbose details") - cmd.Flags().BoolVarP(&checkArgs.report, "report", "r", false, "Send report") - cmd.Flags().StringVarP(&checkArgs.overrideRegoInput, "override-rego-input", "", "", "Rego input to use when running rego checks") - cmd.Flags().StringVarP(&checkArgs.dumpRegoInput, "dump-rego-input", "", "", "Path to file where to dump the Rego input JSON") - cmd.Flags().StringVarP(&checkArgs.dumpReports, "dump-reports", "", "", "Path to file where to dump reports") - cmd.Flags().BoolVarP(&checkArgs.skipRegoEval, "skip-rego-eval", "", false, "Skip rego evaluation") + cmd.Flags().StringVarP(&checkArgs.framework, flags.Framework, "", "", "Framework to run the checks from") + cmd.Flags().StringVarP(&checkArgs.file, flags.File, "f", "", "Compliance suite file to read rules from") + cmd.Flags().BoolVarP(&checkArgs.verbose, flags.Verbose, "v", false, "Include verbose details") + cmd.Flags().BoolVarP(&checkArgs.report, flags.Report, "r", false, "Send report") + cmd.Flags().StringVarP(&checkArgs.overrideRegoInput, flags.OverrideRegoInput, "", "", "Rego input to use when running rego checks") + cmd.Flags().StringVarP(&checkArgs.dumpRegoInput, flags.DumpRegoInput, "", "", "Path to file where to dump the Rego input JSON") + cmd.Flags().StringVarP(&checkArgs.dumpReports, flags.DumpReports, "", "", "Path to file where to dump reports") + cmd.Flags().BoolVarP(&checkArgs.skipRegoEval, flags.SkipRegoEval, "", false, "Skip rego evaluation") return []*cobra.Command{cmd} } -func runCheck(log log.Component, config config.Component, checkArgs *checkCliParams) error { +func RunCheck(log log.Component, config config.Component, checkArgs *CliParams) error { if checkArgs.skipRegoEval && checkArgs.dumpReports != "" { return errors.New("skipping the rego evaluation does not allow the generation of reports") } @@ -108,15 +120,6 @@ func runCheck(log log.Component, config config.Component, checkArgs *checkCliPar checks.MayFail(checks.WithDocker()), checks.MayFail(checks.WithAudit()), }...) - - if pkgconfig.IsKubernetes() { - nodeLabels, err := agent.WaitGetNodeLabels() - if err != nil { - log.Error(err) - } else { - options = append(options, checks.WithNodeLabels(nodeLabels)) - } - } } var ruleID string @@ -134,7 +137,7 @@ func runCheck(log log.Component, config config.Component, checkArgs *checkCliPar stopper := startstop.NewSerialStopper() defer stopper.Stop() - reporter, err := NewCheckReporter(stopper, checkArgs.report, checkArgs.dumpReports) + reporter, err := NewCheckReporter(log, config, stopper, checkArgs.report, checkArgs.dumpReports) if err != nil { return err } diff --git a/cmd/security-agent/subcommands/check/command_test.go b/cmd/security-agent/subcommands/check/command_test.go new file mode 100644 index 0000000000000..17cb7cdd0f70d --- /dev/null +++ b/cmd/security-agent/subcommands/check/command_test.go @@ -0,0 +1,61 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +package check + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +func TestCommands(t *testing.T) { + tests := []struct { + name string + cliInput []string + check func(cliParams *CliParams, params core.BundleParams) + }{ + { + name: "check", + cliInput: []string{"check"}, + check: func(cliParams *CliParams, params core.BundleParams) { + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "info", params.LogLevelFn(nil), "params.LogLevelFn not matching") + }, + }, + { + name: "verbose", + cliInput: []string{"check", "--verbose"}, + check: func(cliParams *CliParams, params core.BundleParams) { + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "trace", params.LogLevelFn(nil), "params.LogLevelFn not matching") + }, + }, + } + + for _, test := range tests { + fxutil.TestOneShotSubcommand(t, + SecurityAgentCommands(&command.GlobalParams{}), + test.cliInput, + RunCheck, + test.check, + ) + + // TODO: + //fxutil.TestOneShotSubcommand(t, + // ClusterAgentCommands(&core.BundleParams{}), + // test.cliInput, + // RunCheck, + // test.check, + //) + } +} diff --git a/cmd/security-agent/app/subcommands/check/command_unsupported.go b/cmd/security-agent/subcommands/check/command_unsupported.go similarity index 55% rename from cmd/security-agent/app/subcommands/check/command_unsupported.go rename to cmd/security-agent/subcommands/check/command_unsupported.go index 79a85fa25d747..4eb255a4f26a8 100644 --- a/cmd/security-agent/app/subcommands/check/command_unsupported.go +++ b/cmd/security-agent/subcommands/check/command_unsupported.go @@ -10,9 +10,14 @@ package check import ( "github.com/spf13/cobra" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core" ) -func SecAgentCommands(globalParams *common.GlobalParams) []*cobra.Command { +func SecurityAgentCommands(globalParams *command.GlobalParams) []*cobra.Command { + return nil +} + +func ClusterAgentCommands(bundleParams core.BundleParams) []*cobra.Command { return nil } diff --git a/cmd/security-agent/app/subcommands/check/reporter.go b/cmd/security-agent/subcommands/check/reporter.go similarity index 77% rename from cmd/security-agent/app/subcommands/check/reporter.go rename to cmd/security-agent/subcommands/check/reporter.go index 6bd6d18d596bf..0a35edd955bf4 100644 --- a/cmd/security-agent/app/subcommands/check/reporter.go +++ b/cmd/security-agent/subcommands/check/reporter.go @@ -12,11 +12,12 @@ import ( "fmt" "os" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/compliance/event" "github.com/DataDog/datadog-agent/pkg/compliance/utils" - coreconfig "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/util/log" + pkglog "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/startstop" ) @@ -28,16 +29,16 @@ type RunCheckReporter struct { } // NewCheckReporter creates a new RunCheckReporter -func NewCheckReporter(stopper startstop.Stopper, report bool, dumpReportsPath string) (*RunCheckReporter, error) { +func NewCheckReporter(log log.Component, config config.Component, stopper startstop.Stopper, report bool, dumpReportsPath string) (*RunCheckReporter, error) { r := &RunCheckReporter{} if report { - endpoints, dstContext, err := common.NewLogContextCompliance() + endpoints, dstContext, err := command.NewLogContextCompliance(log) if err != nil { return nil, err } - runPath := coreconfig.Datadog.GetString("compliance_config.run_path") + runPath := config.GetString("compliance_config.run_path") reporter, err := event.NewLogReporter(stopper, "compliance-agent", "compliance", runPath, endpoints, dstContext) if err != nil { return nil, fmt.Errorf("failed to set up compliance log reporter: %w", err) @@ -58,7 +59,7 @@ func (r *RunCheckReporter) Report(event *event.Event) { eventJSON, err := utils.PrettyPrintJSON(event, " ") if err != nil { - log.Errorf("Failed to marshal rule event: %v", err) + pkglog.Errorf("Failed to marshal rule event: %v", err) return } diff --git a/cmd/security-agent/app/subcommands/compliance/command.go b/cmd/security-agent/subcommands/compliance/command.go similarity index 54% rename from cmd/security-agent/app/subcommands/compliance/command.go rename to cmd/security-agent/subcommands/compliance/command.go index 03c11fc9b5f73..a3e0e6c7c3411 100644 --- a/cmd/security-agent/app/subcommands/compliance/command.go +++ b/cmd/security-agent/subcommands/compliance/command.go @@ -7,38 +7,35 @@ package compliance import ( "fmt" - "strings" - "github.com/spf13/cobra" "go.uber.org/fx" + "strings" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/check" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" + "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/check" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" - compconfig "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/log" - complog "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/compliance/event" - coreconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/startstop" ) -func Commands(globalParams *common.GlobalParams) []*cobra.Command { +func Commands(globalParams *command.GlobalParams) []*cobra.Command { complianceCmd := &cobra.Command{ Use: "compliance", Short: "Compliance Agent utility commands", } complianceCmd.AddCommand(complianceEventCommand(globalParams)) - complianceCmd.AddCommand(check.SecAgentCommands(globalParams)...) + complianceCmd.AddCommand(check.SecurityAgentCommands(globalParams)...) return []*cobra.Command{complianceCmd} } -type eventCliParams struct { - *common.GlobalParams +type cliParams struct { + *command.GlobalParams sourceName string sourceType string @@ -46,8 +43,8 @@ type eventCliParams struct { data []string } -func complianceEventCommand(globalParams *common.GlobalParams) *cobra.Command { - eventArgs := &eventCliParams{ +func complianceEventCommand(globalParams *command.GlobalParams) *cobra.Command { + eventArgs := &cliParams{ GlobalParams: globalParams, } @@ -58,35 +55,36 @@ func complianceEventCommand(globalParams *common.GlobalParams) *cobra.Command { return fxutil.OneShot(eventRun, fx.Supply(eventArgs), fx.Supply(core.BundleParams{ - ConfigParams: config.NewSecurityAgentParams(globalParams.ConfPathArray), - LogParams: log.LogForOneShot(common.LoggerName, "info", true)}), + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "info", true), + }), core.Bundle, ) }, Hidden: true, } - eventCmd.Flags().StringVarP(&eventArgs.sourceType, "source-type", "", "compliance", "Log source name") - eventCmd.Flags().StringVarP(&eventArgs.sourceName, "source-name", "", "compliance-agent", "Log source name") - eventCmd.Flags().StringVarP(&eventArgs.event.AgentRuleID, "rule-id", "", "", "Rule ID") - eventCmd.Flags().StringVarP(&eventArgs.event.ResourceID, "resource-id", "", "", "Resource ID") - eventCmd.Flags().StringVarP(&eventArgs.event.ResourceType, "resource-type", "", "", "Resource type") - eventCmd.Flags().StringSliceVarP(&eventArgs.event.Tags, "tags", "t", []string{"security:compliance"}, "Tags") - eventCmd.Flags().StringSliceVarP(&eventArgs.data, "data", "d", []string{}, "Data KV fields") + eventCmd.Flags().StringVarP(&eventArgs.sourceType, flags.SourceType, "", "compliance", "Log source name") + eventCmd.Flags().StringVarP(&eventArgs.sourceName, flags.SourceName, "", "compliance-agent", "Log source name") + eventCmd.Flags().StringVarP(&eventArgs.event.AgentRuleID, flags.RuleID, "", "", "Rule ID") + eventCmd.Flags().StringVarP(&eventArgs.event.ResourceID, flags.ResourceID, "", "", "Resource ID") + eventCmd.Flags().StringVarP(&eventArgs.event.ResourceType, flags.ResourceType, "", "", "Resource type") + eventCmd.Flags().StringSliceVarP(&eventArgs.event.Tags, flags.Tags, "t", []string{"security:compliance"}, "Tags") + eventCmd.Flags().StringSliceVarP(&eventArgs.data, flags.Data, "d", []string{}, "Data KV fields") return eventCmd } -func eventRun(log complog.Component, config compconfig.Component, eventArgs *eventCliParams) error { +func eventRun(log log.Component, config config.Component, eventArgs *cliParams) error { stopper := startstop.NewSerialStopper() defer stopper.Stop() - endpoints, dstContext, err := common.NewLogContextCompliance() + endpoints, dstContext, err := command.NewLogContextCompliance(log) if err != nil { return err } - runPath := coreconfig.Datadog.GetString("compliance_config.run_path") + runPath := config.GetString("compliance_config.run_path") reporter, err := event.NewLogReporter(stopper, eventArgs.sourceName, eventArgs.sourceType, runPath, endpoints, dstContext) if err != nil { return fmt.Errorf("failed to set up compliance log reporter: %w", err) diff --git a/cmd/security-agent/subcommands/compliance/command_kubeapiserver_test.go b/cmd/security-agent/subcommands/compliance/command_kubeapiserver_test.go new file mode 100644 index 0000000000000..2c643fef45bdd --- /dev/null +++ b/cmd/security-agent/subcommands/compliance/command_kubeapiserver_test.go @@ -0,0 +1,93 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +package compliance + +import ( + "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/check" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core" +) + +// This test suite requires build flags because the check child command requires them. +// go test ./cmd/security-agent/subcommands/compliance --tags=\!windows,kubeapiserver + +// TestCheckSubcommand ultimately uses the check package, so its dependencies are different from the event subcommand +func TestCheckSubcommand(t *testing.T) { + tests := []struct { + name string + cliInput []string + check func(cliParams *check.CliParams, params core.BundleParams) + }{ + { + name: "compliance check", + cliInput: []string{"compliance", "check"}, + check: func(cliParams *check.CliParams, params core.BundleParams) { + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "info", params.LogLevelFn(nil), "params.LogLevelFn not matching") + }, + }, + { + name: "compliance check verbose", + cliInput: []string{"compliance", "check", "--verbose"}, + check: func(cliParams *check.CliParams, params core.BundleParams) { + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "trace", params.LogLevelFn(nil), "params.LogLevelFn not matching") + }, + }, + } + + for _, test := range tests { + fxutil.TestOneShotSubcommand(t, + Commands(&command.GlobalParams{}), + test.cliInput, + check.RunCheck, + test.check, + ) + } +} + +func TestCommand_kubeapiserver(t *testing.T) { + tests := []struct { + name string + cliInput []string + check func(cliParams *cliParams, params core.BundleParams) + }{ + { + name: "compliance event tags", + cliInput: []string{"compliance", "event", "--tags", "test:tag"}, + check: func(cliParams *cliParams, params core.BundleParams) { + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "info", params.LogLevelFn(nil), "params.LogLevelFn not matching") + require.Equal(t, []string{"test:tag"}, cliParams.event.Tags, "tags arg input not matching") + }, + }, + } + + for _, test := range tests { + rootCommand := Commands(&command.GlobalParams{})[0] + + var subcommandNames []string + for _, subcommand := range rootCommand.Commands() { + subcommandNames = append(subcommandNames, subcommand.Use) + } + require.Equal(t, []string{"check", "event"}, subcommandNames, "subcommand missing") + + fxutil.TestOneShotSubcommand(t, + Commands(&command.GlobalParams{}), + test.cliInput, + eventRun, + test.check, + ) + } +} diff --git a/cmd/security-agent/subcommands/compliance/command_test.go b/cmd/security-agent/subcommands/compliance/command_test.go new file mode 100644 index 0000000000000..c853a30e96df1 --- /dev/null +++ b/cmd/security-agent/subcommands/compliance/command_test.go @@ -0,0 +1,57 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build windows || !kubeapiserver + +package compliance + +import ( + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core" +) + +// This test suite requires the opposite build flags of the check package +// in order to test the compliance command in environments that cannot have the check subcommand. + +func TestCommands(t *testing.T) { + tests := []struct { + name string + cliInput []string + check func(cliParams *cliParams, params core.BundleParams) + }{ + { + name: "compliance event tags", + cliInput: []string{"compliance", "event", "--tags", "test:tag"}, + check: func(cliParams *cliParams, params core.BundleParams) { + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "info", params.LogLevelFn(nil), "log level not matching") + require.Equal(t, []string{"test:tag"}, cliParams.event.Tags, "tags arg input not matching") + }, + }, + } + + for _, test := range tests { + rootCommand := Commands(&command.GlobalParams{})[0] + + var subcommandNames []string + for _, subcommand := range rootCommand.Commands() { + subcommandNames = append(subcommandNames, subcommand.Use) + } + + require.Equal(t, []string{"event"}, subcommandNames, "subcommand missing") + + fxutil.TestOneShotSubcommand(t, + Commands(&command.GlobalParams{}), + test.cliInput, + eventRun, + test.check, + ) + } +} diff --git a/cmd/security-agent/app/subcommands/compliance/compliance.go b/cmd/security-agent/subcommands/compliance/compliance.go similarity index 71% rename from cmd/security-agent/app/subcommands/compliance/compliance.go rename to cmd/security-agent/subcommands/compliance/compliance.go index cdea0851b2c60..d9ba17fdea9cb 100644 --- a/cmd/security-agent/app/subcommands/compliance/compliance.go +++ b/cmd/security-agent/subcommands/compliance/compliance.go @@ -10,33 +10,32 @@ import ( "os" "time" - ddgostatsd "github.com/DataDog/datadog-go/v5/statsd" - - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/collector/runner" "github.com/DataDog/datadog-agent/pkg/collector/scheduler" "github.com/DataDog/datadog-agent/pkg/compliance/agent" "github.com/DataDog/datadog-agent/pkg/compliance/checks" "github.com/DataDog/datadog-agent/pkg/compliance/event" - coreconfig "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/startstop" "github.com/DataDog/datadog-agent/pkg/version" + ddgostatsd "github.com/DataDog/datadog-go/v5/statsd" ) -func StartCompliance(hostname string, stopper startstop.Stopper, statsdClient *ddgostatsd.Client) (*agent.Agent, error) { - enabled := coreconfig.Datadog.GetBool("compliance_config.enabled") +func StartCompliance(log log.Component, config config.Component, hostname string, stopper startstop.Stopper, statsdClient *ddgostatsd.Client) (*agent.Agent, error) { + enabled := config.GetBool("compliance_config.enabled") if !enabled { return nil, nil } - endpoints, context, err := common.NewLogContextCompliance() + endpoints, context, err := command.NewLogContextCompliance(log) if err != nil { log.Error(err) } stopper.Add(context) - runPath := coreconfig.Datadog.GetString("compliance_config.run_path") + runPath := config.GetString("compliance_config.run_path") reporter, err := event.NewLogReporter(stopper, "compliance-agent", "compliance", runPath, endpoints, context) if err != nil { return nil, err @@ -48,9 +47,9 @@ func StartCompliance(hostname string, stopper startstop.Stopper, statsdClient *d scheduler := scheduler.NewScheduler(runner.GetChan()) runner.SetScheduler(scheduler) - checkInterval := coreconfig.Datadog.GetDuration("compliance_config.check_interval") - checkMaxEvents := coreconfig.Datadog.GetInt("compliance_config.check_max_events_per_run") - configDir := coreconfig.Datadog.GetString("compliance_config.dir") + checkInterval := config.GetDuration("compliance_config.check_interval") + checkMaxEvents := config.GetInt("compliance_config.check_max_events_per_run") + configDir := config.GetString("compliance_config.dir") options := []checks.BuilderOption{ checks.WithInterval(checkInterval), @@ -62,15 +61,6 @@ func StartCompliance(hostname string, stopper startstop.Stopper, statsdClient *d checks.WithStatsd(statsdClient), } - if coreconfig.IsKubernetes() { - nodeLabels, err := agent.WaitGetNodeLabels() - if err != nil { - log.Error(err) - } else { - options = append(options, checks.WithNodeLabels(nodeLabels)) - } - } - agent, err := agent.New( reporter, scheduler, @@ -89,7 +79,7 @@ func StartCompliance(hostname string, stopper startstop.Stopper, statsdClient *d } stopper.Add(agent) - log.Infof("Running compliance checks every %s", checkInterval.String()) + log.Infof("Running compliance checks every %s", checkInterval) // Send the compliance 'running' metrics periodically ticker := sendRunningMetrics(statsdClient, "compliance") diff --git a/cmd/security-agent/subcommands/config/config.go b/cmd/security-agent/subcommands/config/config.go new file mode 100644 index 0000000000000..d308ba46041db --- /dev/null +++ b/cmd/security-agent/subcommands/config/config.go @@ -0,0 +1,213 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package config + +import ( + "fmt" + "github.com/spf13/cobra" + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/pkg/api/util" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/config/settings" + settingshttp "github.com/DataDog/datadog-agent/pkg/config/settings/http" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +type cliParams struct { + *command.GlobalParams + + command *cobra.Command + args []string + getClient settings.ClientBuilder +} + +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cliParams := &cliParams{ + GlobalParams: globalParams, + } + + cmd := &cobra.Command{ + Use: "config", + Short: "Print the runtime configuration of a running agent", + Long: ``, + PersistentPreRun: func(cmd *cobra.Command, args []string) { + cliParams.command = cmd + cliParams.args = args + cliParams.getClient = func(cmd *cobra.Command, args []string) (settings.Client, error) { + return getSettingsClient(cmd, args) + } + }, + RunE: func(cmd *cobra.Command, args []string) error { + return fxutil.OneShot( + showRuntimeConfiguration, + fx.Supply(cliParams), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "off", true)}), + core.Bundle, + ) + }, + } + + // listRuntime returns a cobra command to list the settings that can be changed at runtime. + cmd.AddCommand( + &cobra.Command{ + Use: "list-runtime", + Short: "List settings that can be changed at runtime", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + return fxutil.OneShot( + listRuntimeConfigurableValue, + fx.Supply(cliParams), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "off", true)}), + core.Bundle, + ) + }, + }, + ) + + // set returns a cobra command to set a config value at runtime. + cmd.AddCommand( + &cobra.Command{ + Use: "set [setting] [value]", + Short: "Set, for the current runtime, the value of a given configuration setting", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + return fxutil.OneShot( + setConfigValue, + fx.Supply(cliParams), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "off", true)}), + core.Bundle, + ) + }, + }, + ) + + // get returns a cobra command to get a runtime config value. + cmd.AddCommand( + &cobra.Command{ + Use: "get [setting]", + Short: "Get, for the current runtime, the value of a given configuration setting", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + return fxutil.OneShot( + getConfigValue, + fx.Supply(cliParams), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "off", true)}), + core.Bundle, + ) + }, + }, + ) + + return []*cobra.Command{cmd} +} +func getSettingsClient(_ *cobra.Command, _ []string) (settings.Client, error) { + err := util.SetAuthToken() + if err != nil { + return nil, err + } + + c := util.GetClient(false) + apiConfigURL := fmt.Sprintf("https://localhost:%v/agent/config", pkgconfig.Datadog.GetInt("security_agent.cmd_port")) + + return settingshttp.NewClient(c, apiConfigURL, "security-agent"), nil +} + +func showRuntimeConfiguration(log log.Component, config config.Component, params *cliParams) error { + c, err := params.getClient(params.command, params.args) + if err != nil { + return err + } + + runtimeConfig, err := c.FullConfig() + if err != nil { + return err + } + + fmt.Println(runtimeConfig) + + return nil +} + +func setConfigValue(log log.Component, config config.Component, params *cliParams) error { + if len(params.args) != 2 { + return fmt.Errorf("exactly two parameters are required: the setting name and its value") + } + + c, err := params.getClient(params.command, params.args) + if err != nil { + return err + } + + hidden, err := c.Set(params.args[0], params.args[1]) + if err != nil { + return err + } + + if hidden { + fmt.Printf("IMPORTANT: you have modified a hidden option, this may incur billing charges or have other unexpected side-effects.\n") + } + + fmt.Printf("Configuration setting %s is now set to: %s\n", params.args[0], params.args[1]) + + return nil +} + +func getConfigValue(log log.Component, config config.Component, params *cliParams) error { + if len(params.args) != 1 { + return fmt.Errorf("a single setting name must be specified") + } + + c, err := params.getClient(params.command, params.args) + if err != nil { + return err + } + + value, err := c.Get(params.args[0]) + if err != nil { + return err + } + + fmt.Printf("%s is set to: %v\n", params.args[0], value) + + return nil +} + +func listRuntimeConfigurableValue(log log.Component, config config.Component, params *cliParams) error { + c, err := params.getClient(params.command, params.args) + if err != nil { + return err + } + + settingsList, err := c.List() + if err != nil { + return err + } + + fmt.Println("=== Settings that can be changed at runtime ===") + for setting, details := range settingsList { + if !details.Hidden { + fmt.Printf("%-30s %s\n", setting, details.Description) + } + } + + return nil +} diff --git a/cmd/security-agent/app/subcommands/config/config_unsupported.go b/cmd/security-agent/subcommands/config/config_unsupported.go similarity index 73% rename from cmd/security-agent/app/subcommands/config/config_unsupported.go rename to cmd/security-agent/subcommands/config/config_unsupported.go index 45280794d6158..2275667db5d7f 100644 --- a/cmd/security-agent/app/subcommands/config/config_unsupported.go +++ b/cmd/security-agent/subcommands/config/config_unsupported.go @@ -9,11 +9,10 @@ package config import ( + "github.com/DataDog/datadog-agent/cmd/security-agent/command" "github.com/spf13/cobra" - - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" ) -func Commands(globalParams *common.GlobalParams) []*cobra.Command { +func Commands(*command.GlobalParams) []*cobra.Command { return nil } diff --git a/cmd/security-agent/app/subcommands/flare/command.go b/cmd/security-agent/subcommands/flare/command.go similarity index 81% rename from cmd/security-agent/app/subcommands/flare/command.go rename to cmd/security-agent/subcommands/flare/command.go index 16337d2888c07..1cb09114610e2 100644 --- a/cmd/security-agent/app/subcommands/flare/command.go +++ b/cmd/security-agent/subcommands/flare/command.go @@ -13,7 +13,8 @@ import ( "github.com/spf13/cobra" "go.uber.org/fx" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/log" @@ -23,16 +24,16 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/input" ) -type flareCliParams struct { - *common.GlobalParams +type cliParams struct { + *command.GlobalParams customerEmail string autoconfirm bool caseID string } -func Commands(globalParams *common.GlobalParams) []*cobra.Command { - cliParams := &flareCliParams{ +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cliParams := &cliParams{ GlobalParams: globalParams, } @@ -49,21 +50,21 @@ func Commands(globalParams *common.GlobalParams) []*cobra.Command { return fxutil.OneShot(requestFlare, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - ConfigParams: config.NewParams("", config.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), config.WithConfigLoadSecurityAgent(true)), - LogParams: log.LogForOneShot(common.LoggerName, "off", true)}), + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "off", true)}), core.Bundle, ) }, } - flareCmd.Flags().StringVarP(&cliParams.customerEmail, "email", "e", "", "Your email") - flareCmd.Flags().BoolVarP(&cliParams.autoconfirm, "send", "s", false, "Automatically send flare (don't prompt for confirmation)") + flareCmd.Flags().StringVarP(&cliParams.customerEmail, flags.Email, "e", "", "Your email") + flareCmd.Flags().BoolVarP(&cliParams.autoconfirm, flags.Send, "s", false, "Automatically send flare (don't prompt for confirmation)") flareCmd.SetArgs([]string{"caseID"}) return []*cobra.Command{flareCmd} } -func requestFlare(log config.Component, config config.Component, params *flareCliParams) error { +func requestFlare(log log.Component, config config.Component, params *cliParams) error { if params.customerEmail == "" { var err error params.customerEmail, err = input.AskForEmail() diff --git a/cmd/security-agent/subcommands/flare/command_test.go b/cmd/security-agent/subcommands/flare/command_test.go new file mode 100644 index 0000000000000..d67e405449885 --- /dev/null +++ b/cmd/security-agent/subcommands/flare/command_test.go @@ -0,0 +1,51 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package flare + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +func TestCommands(t *testing.T) { + tests := []struct { + name string + cliInput []string + check func(cliParams *cliParams, params core.BundleParams) + }{ + { + name: "flare", + cliInput: []string{"flare"}, + check: func(cliParams *cliParams, params core.BundleParams) { + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "off", params.LogLevelFn(nil), "log level not matching") + }, + }, + { + name: "flare 001", + cliInput: []string{"flare", "001"}, + check: func(cliParams *cliParams, params core.BundleParams) { + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "off", params.LogLevelFn(nil), "log level not matching") + require.Equal(t, "001", cliParams.caseID, "case ID not matching") + }, + }, + } + + for _, test := range tests { + fxutil.TestOneShotSubcommand(t, + Commands(&command.GlobalParams{}), + test.cliInput, + requestFlare, + test.check, + ) + } +} diff --git a/cmd/security-agent/app/subcommands/runtime/activity_dump.go b/cmd/security-agent/subcommands/runtime/activity_dump.go similarity index 81% rename from cmd/security-agent/app/subcommands/runtime/activity_dump.go rename to cmd/security-agent/subcommands/runtime/activity_dump.go index f43182ba5b23b..0818fa3e6cfed 100644 --- a/cmd/security-agent/app/subcommands/runtime/activity_dump.go +++ b/cmd/security-agent/subcommands/runtime/activity_dump.go @@ -10,23 +10,23 @@ package runtime import ( "fmt" + "github.com/spf13/cobra" + "go.uber.org/fx" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" "github.com/DataDog/datadog-agent/comp/core" - compconfig "github.com/DataDog/datadog-agent/comp/core/config" - complog "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" secagent "github.com/DataDog/datadog-agent/pkg/security/agent" "github.com/DataDog/datadog-agent/pkg/security/api" - "github.com/DataDog/datadog-agent/pkg/security/config" secconfig "github.com/DataDog/datadog-agent/pkg/security/config" sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/util/fxutil" - "github.com/spf13/cobra" - "go.uber.org/fx" ) type activityDumpCliParams struct { - *common.GlobalParams + *command.GlobalParams name string containerID string @@ -42,7 +42,7 @@ type activityDumpCliParams struct { remoteRequest bool } -func activityDumpCommands(globalParams *common.GlobalParams) []*cobra.Command { +func activityDumpCommands(globalParams *command.GlobalParams) []*cobra.Command { activityDumpCmd := &cobra.Command{ Use: "activity-dump", Short: "activity dump command", @@ -55,15 +55,15 @@ func activityDumpCommands(globalParams *common.GlobalParams) []*cobra.Command { return []*cobra.Command{activityDumpCmd} } -func listCommands(globalParams *common.GlobalParams) []*cobra.Command { +func listCommands(globalParams *command.GlobalParams) []*cobra.Command { activityDumpListCmd := &cobra.Command{ Use: "list", Short: "get the list of running activity dumps", RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(listActivityDumps, fx.Supply(core.BundleParams{ - ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfPathArray), - LogParams: complog.LogForOneShot(common.LoggerName, "info", true)}), + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -72,7 +72,7 @@ func listCommands(globalParams *common.GlobalParams) []*cobra.Command { return []*cobra.Command{activityDumpListCmd} } -func stopCommands(globalParams *common.GlobalParams) []*cobra.Command { +func stopCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &activityDumpCliParams{ GlobalParams: globalParams, } @@ -84,8 +84,8 @@ func stopCommands(globalParams *common.GlobalParams) []*cobra.Command { return fxutil.OneShot(stopActivityDump, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfPathArray), - LogParams: complog.LogForOneShot(common.LoggerName, "info", true)}), + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -93,19 +93,19 @@ func stopCommands(globalParams *common.GlobalParams) []*cobra.Command { activityDumpStopCmd.Flags().StringVar( &cliParams.name, - "name", + flags.Name, "", "an activity dump name can be used to filter the activity dump.", ) activityDumpStopCmd.Flags().StringVar( &cliParams.containerID, - "containerID", + flags.ContainerID, "", "an containerID can be used to filter the activity dump.", ) activityDumpStopCmd.Flags().StringVar( &cliParams.comm, - "comm", + flags.Comm, "", "a process command can be used to filter the activity dump from a specific process.", ) @@ -113,7 +113,7 @@ func stopCommands(globalParams *common.GlobalParams) []*cobra.Command { return []*cobra.Command{activityDumpStopCmd} } -func generateCommands(globalParams *common.GlobalParams) []*cobra.Command { +func generateCommands(globalParams *command.GlobalParams) []*cobra.Command { activityDumpGenerateCmd := &cobra.Command{ Use: "generate", Short: "generate command for activity dumps", @@ -125,7 +125,7 @@ func generateCommands(globalParams *common.GlobalParams) []*cobra.Command { return []*cobra.Command{activityDumpGenerateCmd} } -func generateDumpCommands(globalParams *common.GlobalParams) []*cobra.Command { +func generateDumpCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &activityDumpCliParams{ GlobalParams: globalParams, } @@ -137,8 +137,8 @@ func generateDumpCommands(globalParams *common.GlobalParams) []*cobra.Command { return fxutil.OneShot(generateActivityDump, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfPathArray), - LogParams: complog.LogForOneShot(common.LoggerName, "info", true)}), + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -146,57 +146,57 @@ func generateDumpCommands(globalParams *common.GlobalParams) []*cobra.Command { activityDumpGenerateDumpCmd.Flags().StringVar( &cliParams.comm, - "comm", + flags.Comm, "", "a process command can be used to filter the activity dump from a specific process.", ) activityDumpGenerateDumpCmd.Flags().IntVar( &cliParams.timeout, - "timeout", + flags.Timeout, 60, "timeout for the activity dump in minutes", ) activityDumpGenerateDumpCmd.Flags().BoolVar( &cliParams.differentiateArgs, - "differentiate-args", + flags.DifferentiateArgs, true, "add the arguments in the process node merge algorithm", ) activityDumpGenerateDumpCmd.Flags().StringVar( &cliParams.localStorageDirectory, - "output", + flags.Output, "/tmp/activity_dumps/", "local storage output directory", ) activityDumpGenerateDumpCmd.Flags().BoolVar( &cliParams.localStorageCompression, - "compression", + flags.Compression, false, "defines if the local storage output should be compressed before persisting the data to disk", ) activityDumpGenerateDumpCmd.Flags().StringArrayVar( &cliParams.localStorageFormats, - "format", + flags.Format, []string{}, - fmt.Sprintf("local storage output formats. Available options are %v.", config.AllStorageFormats()), + fmt.Sprintf("local storage output formats. Available options are %v.", secconfig.AllStorageFormats()), ) activityDumpGenerateDumpCmd.Flags().BoolVar( &cliParams.remoteStorageCompression, - "remote-compression", + flags.RemoteCompression, true, "defines if the remote storage output should be compressed before sending the data", ) activityDumpGenerateDumpCmd.Flags().StringArrayVar( &cliParams.remoteStorageFormats, - "remote-format", + flags.RemoteFormat, []string{}, - fmt.Sprintf("remote storage output formats. Available options are %v.", config.AllStorageFormats()), + fmt.Sprintf("remote storage output formats. Available options are %v.", secconfig.AllStorageFormats()), ) return []*cobra.Command{activityDumpGenerateDumpCmd} } -func generateEncodingCommands(globalParams *common.GlobalParams) []*cobra.Command { +func generateEncodingCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &activityDumpCliParams{ GlobalParams: globalParams, } @@ -208,8 +208,8 @@ func generateEncodingCommands(globalParams *common.GlobalParams) []*cobra.Comman return fxutil.OneShot(generateEncodingFromActivityDump, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfPathArray), - LogParams: complog.LogForOneShot(common.LoggerName, "info", true)}), + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -217,44 +217,44 @@ func generateEncodingCommands(globalParams *common.GlobalParams) []*cobra.Comman activityDumpGenerateEncodingCmd.Flags().StringVar( &cliParams.file, - "input", + flags.Input, "", "path to the activity dump file", ) - _ = activityDumpGenerateEncodingCmd.MarkFlagRequired("input") + _ = activityDumpGenerateEncodingCmd.MarkFlagRequired(flags.Input) activityDumpGenerateEncodingCmd.Flags().StringVar( &cliParams.localStorageDirectory, - "output", + flags.Output, "/tmp/activity_dumps/", "local storage output directory", ) activityDumpGenerateEncodingCmd.Flags().BoolVar( &cliParams.localStorageCompression, - "compression", + flags.Compression, false, "defines if the local storage output should be compressed before persisting the data to disk", ) activityDumpGenerateEncodingCmd.Flags().StringArrayVar( &cliParams.localStorageFormats, - "format", + flags.Format, []string{}, - fmt.Sprintf("local storage output formats. Available options are %v.", config.AllStorageFormats()), + fmt.Sprintf("local storage output formats. Available options are %v.", secconfig.AllStorageFormats()), ) activityDumpGenerateEncodingCmd.Flags().BoolVar( &cliParams.remoteStorageCompression, - "remote-compression", + flags.RemoteCompression, true, "defines if the remote storage output should be compressed before sending the data", ) activityDumpGenerateEncodingCmd.Flags().StringArrayVar( &cliParams.remoteStorageFormats, - "remote-format", + flags.RemoteFormat, []string{}, - fmt.Sprintf("remote storage output formats. Available options are %v.", config.AllStorageFormats()), + fmt.Sprintf("remote storage output formats. Available options are %v.", secconfig.AllStorageFormats()), ) activityDumpGenerateEncodingCmd.Flags().BoolVar( &cliParams.remoteRequest, - "remote", + flags.Remote, false, "when set, the transcoding will be done by system-probe instead of the current security-agent instance", ) @@ -262,7 +262,7 @@ func generateEncodingCommands(globalParams *common.GlobalParams) []*cobra.Comman return []*cobra.Command{activityDumpGenerateEncodingCmd} } -func generateActivityDump(log complog.Component, config compconfig.Component, activityDumpArgs *activityDumpCliParams) error { +func generateActivityDump(log log.Component, config config.Component, activityDumpArgs *activityDumpCliParams) error { client, err := secagent.NewRuntimeSecurityClient() if err != nil { return fmt.Errorf("unable to create a runtime security client instance: %w", err) @@ -291,7 +291,7 @@ func generateActivityDump(log complog.Component, config compconfig.Component, ac return nil } -func generateEncodingFromActivityDump(log complog.Component, config compconfig.Component, activityDumpArgs *activityDumpCliParams) error { +func generateEncodingFromActivityDump(log log.Component, config config.Component, activityDumpArgs *activityDumpCliParams) error { var output *api.TranscodingRequestMessage if activityDumpArgs.remoteRequest { @@ -364,7 +364,7 @@ func generateEncodingFromActivityDump(log complog.Component, config compconfig.C return nil } -func listActivityDumps(log complog.Component, config compconfig.Component) error { +func listActivityDumps(log log.Component, config config.Component) error { client, err := secagent.NewRuntimeSecurityClient() if err != nil { return fmt.Errorf("unable to create a runtime security client instance: %w", err) @@ -393,13 +393,13 @@ func listActivityDumps(log complog.Component, config compconfig.Component) error func parseStorageRequest(activityDumpArgs *activityDumpCliParams) (*api.StorageRequestParams, error) { // parse local storage formats - _, err := config.ParseStorageFormats(activityDumpArgs.localStorageFormats) + _, err := secconfig.ParseStorageFormats(activityDumpArgs.localStorageFormats) if err != nil { return nil, fmt.Errorf("couldn't parse local storage formats %v: %v", activityDumpArgs.localStorageFormats, err) } // parse remote storage formats - _, err = config.ParseStorageFormats(activityDumpArgs.remoteStorageFormats) + _, err = secconfig.ParseStorageFormats(activityDumpArgs.remoteStorageFormats) if err != nil { return nil, fmt.Errorf("couldn't parse remote storage formats %v: %v", activityDumpArgs.remoteStorageFormats, err) } @@ -412,7 +412,7 @@ func parseStorageRequest(activityDumpArgs *activityDumpCliParams) (*api.StorageR }, nil } -func stopActivityDump(log complog.Component, config compconfig.Component, activityDumpArgs *activityDumpCliParams) error { +func stopActivityDump(log log.Component, config config.Component, activityDumpArgs *activityDumpCliParams) error { client, err := secagent.NewRuntimeSecurityClient() if err != nil { return fmt.Errorf("unable to create a runtime security client instance: %w", err) diff --git a/cmd/security-agent/app/subcommands/runtime/command.go b/cmd/security-agent/subcommands/runtime/command.go similarity index 69% rename from cmd/security-agent/app/subcommands/runtime/command.go rename to cmd/security-agent/subcommands/runtime/command.go index 26b7ee2af5142..573eff8eebaa7 100644 --- a/cmd/security-agent/app/subcommands/runtime/command.go +++ b/cmd/security-agent/subcommands/runtime/command.go @@ -13,31 +13,30 @@ import ( "encoding/json" "errors" "fmt" + "github.com/spf13/cobra" + "go.uber.org/fx" "io" "os" "path" "strings" "time" - "unsafe" - - ddgostatsd "github.com/DataDog/datadog-go/v5/statsd" - "github.com/spf13/cobra" - "go.uber.org/fx" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/compliance/event" - coreconfig "github.com/DataDog/datadog-agent/pkg/config" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/logs/auditor" "github.com/DataDog/datadog-agent/pkg/logs/client" - "github.com/DataDog/datadog-agent/pkg/logs/config" + logsconfig "github.com/DataDog/datadog-agent/pkg/logs/config" "github.com/DataDog/datadog-agent/pkg/logs/diagnostic" "github.com/DataDog/datadog-agent/pkg/logs/pipeline" "github.com/DataDog/datadog-agent/pkg/logs/sources" secagent "github.com/DataDog/datadog-agent/pkg/security/agent" "github.com/DataDog/datadog-agent/pkg/security/api" secconfig "github.com/DataDog/datadog-agent/pkg/security/config" - "github.com/DataDog/datadog-agent/pkg/security/events" sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/model" @@ -47,26 +46,17 @@ import ( "github.com/DataDog/datadog-agent/pkg/status/health" "github.com/DataDog/datadog-agent/pkg/util/fxutil" httputils "github.com/DataDog/datadog-agent/pkg/util/http" - "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/startstop" "github.com/DataDog/datadog-agent/pkg/version" - - compconfig "github.com/DataDog/datadog-agent/comp/core/config" - complog "github.com/DataDog/datadog-agent/comp/core/log" -) - -const ( - cwsIntakeOrigin config.IntakeOrigin = "cloud-workload-security" + ddgostatsd "github.com/DataDog/datadog-go/v5/statsd" ) -func Commands(globalParams *common.GlobalParams) []*cobra.Command { +func Commands(globalParams *command.GlobalParams) []*cobra.Command { runtimeCmd := &cobra.Command{ Use: "runtime", Short: "runtime Agent utility commands", } - runtimeCmd.AddCommand(checkPoliciesCommands(globalParams)...) - runtimeCmd.AddCommand(reloadPoliciesCommands(globalParams)...) runtimeCmd.AddCommand(commonPolicyCommands(globalParams)...) runtimeCmd.AddCommand(selfTestCommands(globalParams)...) runtimeCmd.AddCommand(activityDumpCommands(globalParams)...) @@ -74,16 +64,21 @@ func Commands(globalParams *common.GlobalParams) []*cobra.Command { runtimeCmd.AddCommand(networkNamespaceCommands(globalParams)...) runtimeCmd.AddCommand(discardersCommands(globalParams)...) + // Deprecated + runtimeCmd.AddCommand(checkPoliciesCommands(globalParams)...) + runtimeCmd.AddCommand(reloadPoliciesCommands(globalParams)...) + return []*cobra.Command{runtimeCmd} } type checkPoliciesCliParams struct { - *common.GlobalParams + *command.GlobalParams dir string } -func checkPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Command { +// checkPoliciesCommands is deprecated +func checkPoliciesCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &checkPoliciesCliParams{ GlobalParams: globalParams, } @@ -95,28 +90,29 @@ func checkPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Command { return fxutil.OneShot(checkPolicies, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfPathArray), - LogParams: complog.LogForOneShot(common.LoggerName, "off", false)}), + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "off", false)}), core.Bundle, ) }, Deprecated: "please use `security-agent runtime policy check` instead", } - checkPoliciesCmd.Flags().StringVar(&cliParams.dir, "policies-dir", coreconfig.DefaultRuntimePoliciesDir, "Path to policies directory") + checkPoliciesCmd.Flags().StringVar(&cliParams.dir, flags.PoliciesDir, pkgconfig.DefaultRuntimePoliciesDir, "Path to policies directory") return []*cobra.Command{checkPoliciesCmd} } -func reloadPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Command { +// reloadPoliciesCommands is deprecated +func reloadPoliciesCommands(globalParams *command.GlobalParams) []*cobra.Command { reloadPoliciesCmd := &cobra.Command{ Use: "reload", Short: "Reload policies", RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(reloadRuntimePolicies, fx.Supply(core.BundleParams{ - ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfPathArray), - LogParams: complog.LogForOneShot(common.LoggerName, "info", true)}), + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -125,7 +121,7 @@ func reloadPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Command return []*cobra.Command{reloadPoliciesCmd} } -func commonPolicyCommands(globalParams *common.GlobalParams) []*cobra.Command { +func commonPolicyCommands(globalParams *command.GlobalParams) []*cobra.Command { commonPolicyCmd := &cobra.Command{ Use: "policy", Short: "Policy related commands", @@ -140,7 +136,7 @@ func commonPolicyCommands(globalParams *common.GlobalParams) []*cobra.Command { } type evalCliParams struct { - *common.GlobalParams + *command.GlobalParams dir string ruleID string @@ -148,7 +144,7 @@ type evalCliParams struct { debug bool } -func evalCommands(globalParams *common.GlobalParams) []*cobra.Command { +func evalCommands(globalParams *command.GlobalParams) []*cobra.Command { evalArgs := &evalCliParams{ GlobalParams: globalParams, } @@ -160,24 +156,24 @@ func evalCommands(globalParams *common.GlobalParams) []*cobra.Command { return fxutil.OneShot(evalRule, fx.Supply(evalArgs), fx.Supply(core.BundleParams{ - ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfPathArray), - LogParams: complog.LogForOneShot(common.LoggerName, "off", false)}), + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "off", false)}), core.Bundle, ) }, } - evalCmd.Flags().StringVar(&evalArgs.dir, "policies-dir", coreconfig.DefaultRuntimePoliciesDir, "Path to policies directory") - evalCmd.Flags().StringVar(&evalArgs.ruleID, "rule-id", "", "Rule ID to evaluate") - _ = evalCmd.MarkFlagRequired("rule-id") - evalCmd.Flags().StringVar(&evalArgs.eventFile, "event-file", "", "File of the event data") - _ = evalCmd.MarkFlagRequired("event-file") - evalCmd.Flags().BoolVar(&evalArgs.debug, "debug", false, "Display an event dump if the evaluation fail") + evalCmd.Flags().StringVar(&evalArgs.dir, flags.PoliciesDir, pkgconfig.DefaultRuntimePoliciesDir, "Path to policies directory") + evalCmd.Flags().StringVar(&evalArgs.ruleID, flags.RuleID, "", "Rule ID to evaluate") + _ = evalCmd.MarkFlagRequired(flags.RuleID) + evalCmd.Flags().StringVar(&evalArgs.eventFile, flags.EventFile, "", "File of the event data") + _ = evalCmd.MarkFlagRequired(flags.EventFile) + evalCmd.Flags().BoolVar(&evalArgs.debug, flags.Debug, false, "Display an event dump if the evaluation fail") return []*cobra.Command{evalCmd} } -func commonCheckPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Command { +func commonCheckPoliciesCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &checkPoliciesCliParams{ GlobalParams: globalParams, } @@ -189,27 +185,27 @@ func commonCheckPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Com return fxutil.OneShot(checkPolicies, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfPathArray), - LogParams: complog.LogForOneShot(common.LoggerName, "off", false)}), + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "off", false)}), core.Bundle, ) }, } - commonCheckPoliciesCmd.Flags().StringVar(&cliParams.dir, "policies-dir", coreconfig.DefaultRuntimePoliciesDir, "Path to policies directory") + commonCheckPoliciesCmd.Flags().StringVar(&cliParams.dir, flags.PoliciesDir, pkgconfig.DefaultRuntimePoliciesDir, "Path to policies directory") return []*cobra.Command{commonCheckPoliciesCmd} } -func commonReloadPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Command { +func commonReloadPoliciesCommands(globalParams *command.GlobalParams) []*cobra.Command { commonReloadPoliciesCmd := &cobra.Command{ Use: "reload", Short: "Reload policies", RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(reloadRuntimePolicies, fx.Supply(core.BundleParams{ - ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfPathArray), - LogParams: complog.LogForOneShot(common.LoggerName, "info", true)}), + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -217,15 +213,15 @@ func commonReloadPoliciesCommands(globalParams *common.GlobalParams) []*cobra.Co return []*cobra.Command{commonReloadPoliciesCmd} } -func selfTestCommands(globalParams *common.GlobalParams) []*cobra.Command { +func selfTestCommands(globalParams *command.GlobalParams) []*cobra.Command { selfTestCmd := &cobra.Command{ Use: "self-test", Short: "Run runtime self test", RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(runRuntimeSelfTest, fx.Supply(core.BundleParams{ - ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfPathArray), - LogParams: complog.LogForOneShot(common.LoggerName, "info", true)}), + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -235,13 +231,13 @@ func selfTestCommands(globalParams *common.GlobalParams) []*cobra.Command { } type downloadPolicyCliParams struct { - *common.GlobalParams + *command.GlobalParams check bool outputPath string } -func downloadPolicyCommands(globalParams *common.GlobalParams) []*cobra.Command { +func downloadPolicyCommands(globalParams *command.GlobalParams) []*cobra.Command { downloadPolicyArgs := &downloadPolicyCliParams{ GlobalParams: globalParams, } @@ -253,26 +249,26 @@ func downloadPolicyCommands(globalParams *common.GlobalParams) []*cobra.Command return fxutil.OneShot(downloadPolicy, fx.Supply(downloadPolicyArgs), fx.Supply(core.BundleParams{ - ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfPathArray), - LogParams: complog.LogForOneShot(common.LoggerName, "off", false)}), + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "off", false)}), core.Bundle, ) }, } - downloadPolicyCmd.Flags().BoolVar(&downloadPolicyArgs.check, "check", false, "Check policies after downloading") - downloadPolicyCmd.Flags().StringVar(&downloadPolicyArgs.outputPath, "output-path", "", "Output path for downloaded policies") + downloadPolicyCmd.Flags().BoolVar(&downloadPolicyArgs.check, flags.Check, false, "Check policies after downloading") + downloadPolicyCmd.Flags().StringVar(&downloadPolicyArgs.outputPath, flags.OutputPath, "", "Output path for downloaded policies") return []*cobra.Command{downloadPolicyCmd} } type processCacheDumpCliParams struct { - *common.GlobalParams + *command.GlobalParams withArgs bool } -func processCacheCommands(globalParams *common.GlobalParams) []*cobra.Command { +func processCacheCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &processCacheDumpCliParams{ GlobalParams: globalParams, } @@ -284,13 +280,13 @@ func processCacheCommands(globalParams *common.GlobalParams) []*cobra.Command { return fxutil.OneShot(dumpProcessCache, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfPathArray), - LogParams: complog.LogForOneShot(common.LoggerName, "info", true)}), + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, } - processCacheDumpCmd.Flags().BoolVar(&cliParams.withArgs, "with-args", false, "add process arguments to the dump") + processCacheDumpCmd.Flags().BoolVar(&cliParams.withArgs, flags.WithArgs, false, "add process arguments to the dump") processCacheCmd := &cobra.Command{ Use: "process-cache", @@ -302,12 +298,12 @@ func processCacheCommands(globalParams *common.GlobalParams) []*cobra.Command { } type dumpNetworkNamespaceCliParams struct { - *common.GlobalParams + *command.GlobalParams snapshotInterfaces bool } -func networkNamespaceCommands(globalParams *common.GlobalParams) []*cobra.Command { +func networkNamespaceCommands(globalParams *command.GlobalParams) []*cobra.Command { cliParams := &dumpNetworkNamespaceCliParams{ GlobalParams: globalParams, } @@ -319,13 +315,13 @@ func networkNamespaceCommands(globalParams *common.GlobalParams) []*cobra.Comman return fxutil.OneShot(dumpNetworkNamespace, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfPathArray), - LogParams: complog.LogForOneShot(common.LoggerName, "info", true)}), + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, } - dumpNetworkNamespaceCmd.Flags().BoolVar(&cliParams.snapshotInterfaces, "snapshot-interfaces", true, "snapshot the interfaces of each network namespace during the dump") + dumpNetworkNamespaceCmd.Flags().BoolVar(&cliParams.snapshotInterfaces, flags.SnapshotInterfaces, true, "snapshot the interfaces of each network namespace during the dump") networkNamespaceCmd := &cobra.Command{ Use: "network-namespace", @@ -336,7 +332,7 @@ func networkNamespaceCommands(globalParams *common.GlobalParams) []*cobra.Comman return []*cobra.Command{networkNamespaceCmd} } -func discardersCommands(globalParams *common.GlobalParams) []*cobra.Command { +func discardersCommands(globalParams *command.GlobalParams) []*cobra.Command { dumpDiscardersCmd := &cobra.Command{ Use: "dump", @@ -344,8 +340,8 @@ func discardersCommands(globalParams *common.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(dumpDiscarders, fx.Supply(core.BundleParams{ - ConfigParams: compconfig.NewSecurityAgentParams(globalParams.ConfPathArray), - LogParams: complog.LogForOneShot(common.LoggerName, "info", true)}), + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "info", true)}), core.Bundle, ) }, @@ -360,7 +356,7 @@ func discardersCommands(globalParams *common.GlobalParams) []*cobra.Command { return []*cobra.Command{discardersCmd} } -func dumpProcessCache(log complog.Component, config compconfig.Component, processCacheDumpArgs *processCacheDumpCliParams) error { +func dumpProcessCache(log log.Component, config config.Component, processCacheDumpArgs *processCacheDumpCliParams) error { client, err := secagent.NewRuntimeSecurityClient() if err != nil { return fmt.Errorf("unable to create a runtime security client instance: %w", err) @@ -377,7 +373,7 @@ func dumpProcessCache(log complog.Component, config compconfig.Component, proces return nil } -func dumpNetworkNamespace(log complog.Component, config compconfig.Component, dumpNetworkNamespaceArgs *dumpNetworkNamespaceCliParams) error { +func dumpNetworkNamespace(log log.Component, config config.Component, dumpNetworkNamespaceArgs *dumpNetworkNamespaceCliParams) error { client, err := secagent.NewRuntimeSecurityClient() if err != nil { return fmt.Errorf("unable to create a runtime security client instance: %w", err) @@ -448,28 +444,11 @@ func checkPoliciesInner(dir string) error { // enabled all the rules enabled := map[eval.EventType]bool{"*": true} - var evalOpts eval.Opts - evalOpts. - WithConstants(model.SECLConstants). - WithVariables(model.SECLVariables). - WithLegacyFields(model.SECLLegacyFields) - - var opts rules.Opts - opts. - WithSupportedDiscarders(sprobe.SupportedDiscarders). - WithEventTypeEnabled(enabled). - WithReservedRuleIDs(events.AllCustomRuleIDs()). - WithStateScopes(map[rules.Scope]rules.VariableProviderFactory{ - "process": func() rules.VariableProvider { - return eval.NewScopedVariables(func(ctx *eval.Context) unsafe.Pointer { - return unsafe.Pointer(&(*model.Event)(ctx.Object).ProcessContext) - }, nil) - }, - }). - WithLogger(seclog.DefaultLogger) + ruleOpts, evalOpts := rules.NewEvalOpts(enabled) + + ruleOpts.WithLogger(seclog.DefaultLogger) - model := &model.Model{} - ruleSet := rules.NewRuleSet(model, model.NewEvent, &opts, &evalOpts) + ruleSet := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, ruleOpts, evalOpts) agentVersionFilter, err := newAgentVersionFilter() if err != nil { @@ -514,7 +493,7 @@ func checkPoliciesInner(dir string) error { return nil } -func checkPolicies(log complog.Component, config compconfig.Component, args *checkPoliciesCliParams) error { +func checkPolicies(log log.Component, config config.Component, args *checkPoliciesCliParams) error { return checkPoliciesInner(args.dir) } @@ -553,7 +532,7 @@ func eventDataFromJSON(file string) (eval.Event, error) { } m := &model.Model{} - event := m.NewEventWithType(kind) + event := m.NewDefaultEventWithType(kind) event.Init() for k, v := range eventData.Values { @@ -576,7 +555,7 @@ func eventDataFromJSON(file string) (eval.Event, error) { return event, nil } -func evalRule(log complog.Component, config compconfig.Component, evalArgs *evalCliParams) error { +func evalRule(log log.Component, config config.Component, evalArgs *evalCliParams) error { cfg := &secconfig.Config{ PoliciesDir: evalArgs.dir, EnableKernelFilters: true, @@ -588,21 +567,10 @@ func evalRule(log complog.Component, config compconfig.Component, evalArgs *eval // enabled all the rules enabled := map[eval.EventType]bool{"*": true} - var evalOpts eval.Opts - evalOpts. - WithConstants(model.SECLConstants). - WithVariables(model.SECLVariables). - WithLegacyFields(model.SECLLegacyFields) - - var opts rules.Opts - opts. - WithSupportedDiscarders(sprobe.SupportedDiscarders). - WithEventTypeEnabled(enabled). - WithReservedRuleIDs(events.AllCustomRuleIDs()). - WithLogger(seclog.DefaultLogger) + ruleOpts, evalOpts := rules.NewEvalOpts(enabled) + ruleOpts.WithLogger(seclog.DefaultLogger) - model := &model.Model{} - ruleSet := rules.NewRuleSet(model, model.NewEvent, &opts, &evalOpts) + ruleSet := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, ruleOpts, evalOpts) agentVersionFilter, err := newAgentVersionFilter() if err != nil { @@ -661,7 +629,7 @@ func evalRule(log complog.Component, config compconfig.Component, evalArgs *eval return nil } -func runRuntimeSelfTest(log complog.Component, config compconfig.Component) error { +func runRuntimeSelfTest(log log.Component, config config.Component) error { client, err := secagent.NewRuntimeSecurityClient() if err != nil { return fmt.Errorf("unable to create a runtime security client instance: %w", err) @@ -681,7 +649,7 @@ func runRuntimeSelfTest(log complog.Component, config compconfig.Component) erro return nil } -func reloadRuntimePolicies(log complog.Component, config compconfig.Component) error { +func reloadRuntimePolicies(log log.Component, config config.Component) error { client, err := secagent.NewRuntimeSecurityClient() if err != nil { return fmt.Errorf("unable to create a runtime security client instance: %w", err) @@ -696,22 +664,22 @@ func reloadRuntimePolicies(log complog.Component, config compconfig.Component) e return nil } -func newRuntimeReporter(stopper startstop.Stopper, sourceName, sourceType string, endpoints *config.Endpoints, context *client.DestinationsContext) (event.Reporter, error) { +func newRuntimeReporter(log log.Component, config config.Component, stopper startstop.Stopper, sourceName, sourceType string, endpoints *logsconfig.Endpoints, context *client.DestinationsContext) (event.Reporter, error) { health := health.RegisterLiveness("runtime-security") // setup the auditor - auditor := auditor.New(coreconfig.Datadog.GetString("runtime_security_config.run_path"), "runtime-security-registry.json", coreconfig.DefaultAuditorTTL, health) + auditor := auditor.New(config.GetString("runtime_security_config.run_path"), "runtime-security-registry.json", pkgconfig.DefaultAuditorTTL, health) auditor.Start() stopper.Add(auditor) // setup the pipeline provider that provides pairs of processor and sender - pipelineProvider := pipeline.NewProvider(config.NumberOfPipelines, auditor, &diagnostic.NoopMessageReceiver{}, nil, endpoints, context) + pipelineProvider := pipeline.NewProvider(logsconfig.NumberOfPipelines, auditor, &diagnostic.NoopMessageReceiver{}, nil, endpoints, context) pipelineProvider.Start() stopper.Add(pipelineProvider) logSource := sources.NewLogSource( sourceName, - &config.LogsConfig{ + &logsconfig.LogsConfig{ Type: sourceType, Source: sourceName, }, @@ -719,14 +687,8 @@ func newRuntimeReporter(stopper startstop.Stopper, sourceName, sourceType string return event.NewReporter(logSource, pipelineProvider.NextPipelineChan()), nil } -// This function will only be used on Linux. The only platforms where the runtime agent runs -func newLogContextRuntime() (*config.Endpoints, *client.DestinationsContext, error) { // nolint: deadcode, unused - logsConfigComplianceKeys := config.NewLogsConfigKeys("runtime_security_config.endpoints.", coreconfig.Datadog) - return common.NewLogContext(logsConfigComplianceKeys, "runtime-security-http-intake.logs.", "logs", cwsIntakeOrigin, config.DefaultIntakeProtocol) -} - -func StartRuntimeSecurity(hostname string, stopper startstop.Stopper, statsdClient *ddgostatsd.Client) (*secagent.RuntimeSecurityAgent, error) { - enabled := coreconfig.Datadog.GetBool("runtime_security_config.enabled") +func StartRuntimeSecurity(log log.Component, config config.Component, hostname string, stopper startstop.Stopper, statsdClient *ddgostatsd.Client) (*secagent.RuntimeSecurityAgent, error) { + enabled := config.GetBool("runtime_security_config.enabled") if !enabled { log.Info("Datadog runtime security agent disabled by config") return nil, nil @@ -740,13 +702,13 @@ func StartRuntimeSecurity(hostname string, stopper startstop.Stopper, statsdClie } stopper.Add(agent) - endpoints, context, err := newLogContextRuntime() + endpoints, ctx, err := command.NewLogContextRuntime(log) if err != nil { - log.Error(err) + _ = log.Error(err) } - stopper.Add(context) + stopper.Add(ctx) - reporter, err := newRuntimeReporter(stopper, "runtime-security-agent", "runtime-security", endpoints, context) + reporter, err := newRuntimeReporter(log, config, stopper, "runtime-security-agent", "runtime-security", endpoints, ctx) if err != nil { return nil, err } @@ -758,7 +720,7 @@ func StartRuntimeSecurity(hostname string, stopper startstop.Stopper, statsdClie return agent, nil } -func downloadPolicy(log complog.Component, config compconfig.Component, downloadPolicyArgs *downloadPolicyCliParams) error { +func downloadPolicy(log log.Component, config config.Component, downloadPolicyArgs *downloadPolicyCliParams) error { apiKey := config.GetString("api_key") appKey := config.GetString("app_key") @@ -828,7 +790,7 @@ func downloadPolicy(log complog.Component, config compconfig.Component, download return err } -func dumpDiscarders(log complog.Component, config compconfig.Component) error { +func dumpDiscarders(log log.Component, config config.Component) error { runtimeSecurityClient, err := secagent.NewRuntimeSecurityClient() if err != nil { return fmt.Errorf("unable to create a runtime security client instance: %w", err) diff --git a/cmd/security-agent/subcommands/runtime/command_test.go b/cmd/security-agent/subcommands/runtime/command_test.go new file mode 100644 index 0000000000000..7fcbfd9ef5507 --- /dev/null +++ b/cmd/security-agent/subcommands/runtime/command_test.go @@ -0,0 +1,45 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux +// +build linux + +package runtime + +import ( + "github.com/stretchr/testify/require" + "testing" + + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +func TestDownloadCommand(t *testing.T) { + tests := []struct { + name string + cliInput []string + check func(cliParams *downloadPolicyCliParams, params core.BundleParams) + }{ + { + name: "runtime download", + cliInput: []string{"download"}, + check: func(cliParams *downloadPolicyCliParams, params core.BundleParams) { + // Verify logger defaults + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "off", params.LogLevelFn(nil), "log level not matching") + }, + }, + } + + for _, test := range tests { + fxutil.TestOneShotSubcommand(t, + downloadPolicyCommands(&command.GlobalParams{}), + test.cliInput, + downloadPolicy, + test.check, + ) + } +} diff --git a/cmd/security-agent/app/subcommands/runtime/command_unsupported.go b/cmd/security-agent/subcommands/runtime/command_unsupported.go similarity index 50% rename from cmd/security-agent/app/subcommands/runtime/command_unsupported.go rename to cmd/security-agent/subcommands/runtime/command_unsupported.go index 2efc1f9c61a2a..0d2b4b3b06640 100644 --- a/cmd/security-agent/app/subcommands/runtime/command_unsupported.go +++ b/cmd/security-agent/subcommands/runtime/command_unsupported.go @@ -6,11 +6,6 @@ //go:build !linux // +build !linux -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - package runtime import ( @@ -18,21 +13,20 @@ import ( "github.com/spf13/cobra" - ddgostatsd "github.com/DataDog/datadog-go/v5/statsd" - - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" - coreconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" secagent "github.com/DataDog/datadog-agent/pkg/security/agent" - "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/startstop" + ddgostatsd "github.com/DataDog/datadog-go/v5/statsd" ) -func Commands(globalParams *common.GlobalParams) []*cobra.Command { +func Commands(globalParams *command.GlobalParams) []*cobra.Command { return nil } -func StartRuntimeSecurity(hostname string, stopper startstop.Stopper, statsdClient *ddgostatsd.Client) (*secagent.RuntimeSecurityAgent, error) { - enabled := coreconfig.Datadog.GetBool("runtime_security_config.enabled") +func StartRuntimeSecurity(log log.Component, config config.Component, hostname string, stopper startstop.Stopper, statsdClient *ddgostatsd.Client) (*secagent.RuntimeSecurityAgent, error) { + enabled := config.GetBool("runtime_security_config.enabled") if !enabled { log.Info("Datadog runtime security agent disabled by config") return nil, nil diff --git a/cmd/security-agent/app/app.go b/cmd/security-agent/subcommands/start/command.go similarity index 57% rename from cmd/security-agent/app/app.go rename to cmd/security-agent/subcommands/start/command.go index 8dafcff7dd581..0f2d8c3ef8353 100644 --- a/cmd/security-agent/app/app.go +++ b/cmd/security-agent/subcommands/start/command.go @@ -3,38 +3,36 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package app +package start import ( "context" "errors" + _ "expvar" // Blank import used because this isn't directly used in this file "fmt" "net/http" + _ "net/http/pprof" // Blank import used because this isn't directly used in this file "os" - "path" + "os/signal" + "syscall" "time" - _ "expvar" // Blank import used because this isn't directly used in this file - - _ "net/http/pprof" // Blank import used because this isn't directly used in this file - - "github.com/fatih/color" "github.com/spf13/cobra" + "go.uber.org/fx" ddgostatsd "github.com/DataDog/datadog-go/v5/statsd" - commonagent "github.com/DataDog/datadog-agent/cmd/agent/common" "github.com/DataDog/datadog-agent/cmd/manager" "github.com/DataDog/datadog-agent/cmd/security-agent/api" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/compliance" - subconfig "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/config" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/flare" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/runtime" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/status" - subversion "github.com/DataDog/datadog-agent/cmd/security-agent/app/subcommands/version" - compconfig "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" + "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/compliance" + "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/runtime" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/aggregator" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/config/resolver" "github.com/DataDog/datadog-agent/pkg/config/settings" "github.com/DataDog/datadog-agent/pkg/forwarder" @@ -44,104 +42,107 @@ import ( "github.com/DataDog/datadog-agent/pkg/tagger/remote" "github.com/DataDog/datadog-agent/pkg/telemetry" "github.com/DataDog/datadog-agent/pkg/util" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" "github.com/DataDog/datadog-agent/pkg/util/hostname" - "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/profiling" "github.com/DataDog/datadog-agent/pkg/util/startstop" "github.com/DataDog/datadog-agent/pkg/version" "github.com/DataDog/datadog-agent/pkg/workloadmeta" - - coreconfig "github.com/DataDog/datadog-agent/pkg/config" ) -const ( - // loggerName is the name of the security agent logger - loggerName coreconfig.LoggerName = common.LoggerName -) +type cliParams struct { + *command.GlobalParams -var ( - srv *api.Server - expvarServer *http.Server - stopper startstop.Stopper -) + pidfilePath string +} -func CreateSecurityAgentCmd() *cobra.Command { - globalParams := common.GlobalParams{} - var flagNoColor bool - - SecurityAgentCmd := &cobra.Command{ - Use: "datadog-security-agent [command]", - Short: "Datadog Security Agent at your service.", - Long: ` -Datadog Security Agent takes care of running compliance and security checks.`, - SilenceUsage: true, // don't print usage on errors - PersistentPreRunE: func(cmd *cobra.Command, args []string) error { - if flagNoColor { - color.NoColor = true - } +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + params := &cliParams{ + GlobalParams: globalParams, + } - // TODO(paulcacheux): remove this once all subcommands have been converted to use config component - _, err := compconfig.MergeConfigurationFiles("datadog", globalParams.ConfPathArray, cmd.Flags().Lookup("cfgpath").Changed) - return err - }, - PersistentPostRun: func(cmd *cobra.Command, args []string) { - log.Flush() + startCmd := &cobra.Command{ + Use: "start", + Short: "Start the Security Agent", + Long: `Runs Datadog Security agent in the foreground`, + RunE: func(cmd *cobra.Command, args []string) error { + // TODO: Similar to the agent itself, once the security agent is represented as a component, and not a function (start), + // this will use `fxutil.Run` instead of `fxutil.OneShot`. + return fxutil.OneShot(start, + fx.Supply(params), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewSecurityAgentParams(params.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "info", true)}), + core.Bundle, + ) }, } - defaultConfPathArray := []string{ - path.Join(commonagent.DefaultConfPath, "datadog.yaml"), - path.Join(commonagent.DefaultConfPath, "security-agent.yaml"), + startCmd.Flags().StringVarP(¶ms.pidfilePath, flags.PidFile, "p", "", "path to the pidfile") + + return []*cobra.Command{startCmd} +} + +func start(log log.Component, config config.Component, params *cliParams) error { + // Main context passed to components + ctx, cancel := context.WithCancel(context.Background()) + defer StopAgent(cancel, log) + + err := RunAgent(ctx, log, config, params.pidfilePath) + if errors.Is(err, errAllComponentsDisabled) || errors.Is(err, errNoAPIKeyConfigured) { + return nil } - SecurityAgentCmd.PersistentFlags().StringArrayVarP(&globalParams.ConfPathArray, "cfgpath", "c", defaultConfPathArray, "path to a yaml configuration file") - SecurityAgentCmd.PersistentFlags().BoolVarP(&flagNoColor, "no-color", "n", false, "disable color output") - - factories := []common.SubcommandFactory{ - status.Commands, - flare.Commands, - subconfig.Commands, - compliance.Commands, - runtime.Commands, - subversion.Commands, - StartCommands, + if err != nil { + return err } - for _, factory := range factories { - for _, subcmd := range factory(&globalParams) { - SecurityAgentCmd.AddCommand(subcmd) + stopCh := make(chan struct{}) + defer close(stopCh) + go handleSignals(log, stopCh) + + // Block here until we receive a stop signal + <-stopCh + + return nil +} + +// handleSignals handles OS signals, and sends a message on stopCh when an interrupt +// signal is received. +func handleSignals(log log.Component, stopCh chan struct{}) { + // Setup a channel to catch OS signals + signalCh := make(chan os.Signal, 1) + signal.Notify(signalCh, os.Interrupt, syscall.SIGTERM, syscall.SIGPIPE) + + // Block here until we receive the interrupt signal + for signo := range signalCh { + switch signo { + case syscall.SIGPIPE: + // By default, systemd redirects the stdout to journald. When journald is stopped or crashes we receive a SIGPIPE signal. + // Go ignores SIGPIPE signals unless it is when stdout or stdout is closed, in this case the agent is stopped. + // We never want dogstatsd to stop upon receiving SIGPIPE, so we intercept the SIGPIPE signals and just discard them. + default: + log.Infof("Received signal '%s', shutting down...", signo) + + _ = tagger.Stop() + + stopCh <- struct{}{} + return } } - - return SecurityAgentCmd } +var ( + stopper startstop.Stopper + srv *api.Server + expvarServer *http.Server +) + var errAllComponentsDisabled = errors.New("all security-agent component are disabled") +var errNoAPIKeyConfigured = errors.New("no API key configured") // RunAgent initialized resources and starts API server -func RunAgent(ctx context.Context, pidfilePath string) (err error) { - // Setup logger - syslogURI := coreconfig.GetSyslogURI() - logFile := coreconfig.Datadog.GetString("security_agent.log_file") - if coreconfig.Datadog.GetBool("disable_file_logging") { - // this will prevent any logging on file - logFile = "" - } - - err = coreconfig.SetupLogger( - loggerName, - coreconfig.Datadog.GetString("log_level"), - logFile, - syslogURI, - coreconfig.Datadog.GetBool("syslog_rfc"), - coreconfig.Datadog.GetBool("log_to_console"), - coreconfig.Datadog.GetBool("log_format_json"), - ) - if err != nil { - log.Criticalf("Unable to setup logger: %s", err) - return nil - } - - if err := util.SetupCoreDump(); err != nil { +func RunAgent(ctx context.Context, log log.Component, config config.Component, pidfilePath string) (err error) { + if err := util.SetupCoreDump(config); err != nil { log.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) } @@ -155,7 +156,7 @@ func RunAgent(ctx context.Context, pidfilePath string) (err error) { } // Check if we have at least one component to start based on config - if !coreconfig.Datadog.GetBool("compliance_config.enabled") && !coreconfig.Datadog.GetBool("runtime_security_config.enabled") { + if !config.GetBool("compliance_config.enabled") && !config.GetBool("runtime_security_config.enabled") { log.Infof("All security-agent components are deactivated, exiting") // A sleep is necessary so that sysV doesn't think the agent has failed @@ -165,26 +166,26 @@ func RunAgent(ctx context.Context, pidfilePath string) (err error) { return errAllComponentsDisabled } - if !coreconfig.Datadog.IsSet("api_key") { - log.Critical("no API key configured, exiting") + if !config.IsSet("api_key") { + log.Critical("No API key configured, exiting") // A sleep is necessary so that sysV doesn't think the agent has failed // to startup because of an error. Only applies on Debian 7. time.Sleep(5 * time.Second) - return errAllComponentsDisabled + return errNoAPIKeyConfigured } - err = manager.ConfigureAutoExit(ctx) + err = manager.ConfigureAutoExit(ctx, config) if err != nil { log.Criticalf("Unable to configure auto-exit, err: %w", err) return nil } // Setup expvar server - port := coreconfig.Datadog.GetString("security_agent.expvar_port") - coreconfig.Datadog.Set("expvar_port", port) - if coreconfig.Datadog.GetBool("telemetry.enabled") { + port := config.GetString("security_agent.expvar_port") + pkgconfig.Datadog.Set("expvar_port", port) + if config.GetBool("telemetry.enabled") { http.Handle("/telemetry", telemetry.Handler()) } expvarServer := &http.Server{ @@ -207,7 +208,7 @@ func RunAgent(ctx context.Context, pidfilePath string) (err error) { log.Infof("Hostname is: %s", hostnameDetected) // setup the forwarder - keysPerDomain, err := coreconfig.GetMultipleEndpoints() + keysPerDomain, err := pkgconfig.GetMultipleEndpoints() if err != nil { log.Error("Misconfiguration of agent endpoints: ", err) } @@ -226,8 +227,8 @@ func RunAgent(ctx context.Context, pidfilePath string) (err error) { statsdAddr := os.Getenv("STATSD_URL") if statsdAddr == "" { // Retrieve statsd host and port from the datadog agent configuration file - statsdHost := coreconfig.GetBindHost() - statsdPort := coreconfig.Datadog.GetInt("dogstatsd_port") + statsdHost := pkgconfig.GetBindHost() + statsdPort := config.GetInt("dogstatsd_port") statsdAddr = fmt.Sprintf("%s:%d", statsdHost, statsdPort) } @@ -238,7 +239,7 @@ func RunAgent(ctx context.Context, pidfilePath string) (err error) { } workloadmetaCollectors := workloadmeta.NodeAgentCatalog - if coreconfig.Datadog.GetBool("security_agent.remote_workloadmeta") { + if config.GetBool("security_agent.remote_workloadmeta") { workloadmetaCollectors = workloadmeta.RemoteCatalog } @@ -247,7 +248,7 @@ func RunAgent(ctx context.Context, pidfilePath string) (err error) { store.Start(ctx) // Initialize the remote tagger - if coreconfig.Datadog.GetBool("security_agent.remote_tagger") { + if config.GetBool("security_agent.remote_tagger") { options, err := remote.NodeAgentOptions() if err != nil { log.Errorf("unable to configure the remote tagger: %s", err) @@ -260,7 +261,7 @@ func RunAgent(ctx context.Context, pidfilePath string) (err error) { } } - complianceAgent, err := compliance.StartCompliance(hostnameDetected, stopper, statsdClient) + complianceAgent, err := compliance.StartCompliance(log, config, hostnameDetected, stopper, statsdClient) if err != nil { return err } @@ -270,7 +271,7 @@ func RunAgent(ctx context.Context, pidfilePath string) (err error) { } // start runtime security agent - runtimeAgent, err := runtime.StartRuntimeSecurity(hostnameDetected, stopper, statsdClient) + runtimeAgent, err := runtime.StartRuntimeSecurity(log, config, hostnameDetected, stopper, statsdClient) if err != nil { return err } @@ -284,7 +285,7 @@ func RunAgent(ctx context.Context, pidfilePath string) (err error) { return log.Errorf("Error while starting api server, exiting: %v", err) } - if err := setupInternalProfiling(); err != nil { + if err := setupInternalProfiling(config); err != nil { return log.Errorf("Error while setuping internal profiling, exiting: %v", err) } @@ -298,14 +299,14 @@ func initRuntimeSettings() error { } // StopAgent stops the API server and clean up resources -func StopAgent(cancel context.CancelFunc) { +func StopAgent(cancel context.CancelFunc, log log.Component) { // retrieve the agent health before stopping the components // GetReadyNonBlocking has a 100ms timeout to avoid blocking - health, err := health.GetReadyNonBlocking() + healthStatus, err := health.GetReadyNonBlocking() if err != nil { log.Warnf("Security Agent health unknown: %s", err) - } else if len(health.Unhealthy) > 0 { - log.Warnf("Some components were unhealthy: %v", health.Unhealthy) + } else if len(healthStatus.Unhealthy) > 0 { + log.Warnf("Some components were unhealthy: %v", healthStatus.Unhealthy) } // gracefully shut down any component @@ -326,16 +327,14 @@ func StopAgent(cancel context.CancelFunc) { } log.Info("See ya!") - log.Flush() } -func setupInternalProfiling() error { - cfg := coreconfig.Datadog - if cfg.GetBool(secAgentKey("internal_profiling.enabled")) { +func setupInternalProfiling(config config.Component) error { + if config.GetBool(secAgentKey("internal_profiling.enabled")) { v, _ := version.Agent() - cfgSite := cfg.GetString(secAgentKey("internal_profiling.site")) - cfgURL := cfg.GetString(secAgentKey("security_agent.internal_profiling.profile_dd_url")) + cfgSite := config.GetString(secAgentKey("internal_profiling.site")) + cfgURL := config.GetString(secAgentKey("security_agent.internal_profiling.profile_dd_url")) // check if TRACE_AGENT_URL is set, in which case, forward the profiles to the trace agent var site string @@ -350,13 +349,13 @@ func setupInternalProfiling() error { profSettings := profiling.Settings{ ProfilingURL: site, - Env: cfg.GetString(secAgentKey("internal_profiling.env")), + Env: config.GetString(secAgentKey("internal_profiling.env")), Service: "security-agent", - Period: cfg.GetDuration(secAgentKey("internal_profiling.period")), - CPUDuration: cfg.GetDuration("internal_profiling.cpu_duration"), - MutexProfileFraction: cfg.GetInt(secAgentKey("internal_profiling.mutex_profile_fraction")), - BlockProfileRate: cfg.GetInt(secAgentKey("internal_profiling.block_profile_rate")), - WithGoroutineProfile: cfg.GetBool(secAgentKey("internal_profiling.enable_goroutine_stacktraces")), + Period: config.GetDuration(secAgentKey("internal_profiling.period")), + CPUDuration: config.GetDuration("internal_profiling.cpu_duration"), + MutexProfileFraction: config.GetInt(secAgentKey("internal_profiling.mutex_profile_fraction")), + BlockProfileRate: config.GetInt(secAgentKey("internal_profiling.block_profile_rate")), + WithGoroutineProfile: config.GetBool(secAgentKey("internal_profiling.enable_goroutine_stacktraces")), Tags: []string{fmt.Sprintf("version:%v", v)}, } diff --git a/cmd/security-agent/subcommands/start/command_test.go b/cmd/security-agent/subcommands/start/command_test.go new file mode 100644 index 0000000000000..499be1c6db2d4 --- /dev/null +++ b/cmd/security-agent/subcommands/start/command_test.go @@ -0,0 +1,53 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package start + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +func TestCommand(t *testing.T) { + tests := []struct { + name string + cliInput []string + check func(cliParams *cliParams, params core.BundleParams) + }{ + { + name: "start", + cliInput: []string{"start"}, + check: func(cliParams *cliParams, params core.BundleParams) { + // Verify logger defaults + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "info", params.LogLevelFn(nil), "log level not matching") + }, + }, + { + name: "pidfile", + cliInput: []string{"start", "--pidfile", "/pid/file"}, + check: func(cliParams *cliParams, params core.BundleParams) { + // Verify logger defaults + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "info", params.LogLevelFn(nil), "log level not matching") + require.Equal(t, "/pid/file", cliParams.pidfilePath, "PID file path not matching") + }, + }, + } + + for _, test := range tests { + fxutil.TestOneShotSubcommand(t, + Commands(&command.GlobalParams{}), + test.cliInput, + start, + test.check, + ) + } +} diff --git a/cmd/security-agent/app/subcommands/status/command.go b/cmd/security-agent/subcommands/status/command.go similarity index 76% rename from cmd/security-agent/app/subcommands/status/command.go rename to cmd/security-agent/subcommands/status/command.go index b07b0fb144001..33792811b515f 100644 --- a/cmd/security-agent/app/subcommands/status/command.go +++ b/cmd/security-agent/subcommands/status/command.go @@ -9,12 +9,12 @@ import ( "bytes" "encoding/json" "fmt" - "os" - "github.com/spf13/cobra" "go.uber.org/fx" + "os" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/cmd/security-agent/flags" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/log" @@ -23,16 +23,16 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/fxutil" ) -type statusCliParams struct { - *common.GlobalParams +type cliParams struct { + *command.GlobalParams json bool prettyPrintJSON bool file string } -func Commands(globalParams *common.GlobalParams) []*cobra.Command { - cliParams := &statusCliParams{ +func Commands(globalParams *command.GlobalParams) []*cobra.Command { + cliParams := &cliParams{ GlobalParams: globalParams, } @@ -44,21 +44,21 @@ func Commands(globalParams *common.GlobalParams) []*cobra.Command { return fxutil.OneShot(runStatus, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - ConfigParams: config.NewParams("", config.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), config.WithConfigLoadSecurityAgent(true)), - LogParams: log.LogForOneShot(common.LoggerName, "off", true)}), + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "off", true)}), core.Bundle, ) }, } - statusCmd.Flags().BoolVarP(&cliParams.json, "json", "j", false, "print out raw json") - statusCmd.Flags().BoolVarP(&cliParams.prettyPrintJSON, "pretty-json", "p", false, "pretty print JSON") - statusCmd.Flags().StringVarP(&cliParams.file, "file", "o", "", "Output the status command to a file") + statusCmd.Flags().BoolVarP(&cliParams.json, flags.JSON, "j", false, "print out raw json") + statusCmd.Flags().BoolVarP(&cliParams.prettyPrintJSON, flags.PrettyJSON, "p", false, "pretty print JSON") + statusCmd.Flags().StringVarP(&cliParams.file, flags.File, "o", "", "Output the status command to a file") return []*cobra.Command{statusCmd} } -func runStatus(log log.Component, config config.Component, params *statusCliParams) error { +func runStatus(log log.Component, config config.Component, params *cliParams) error { fmt.Printf("Getting the status from the agent.\n") var e error var s string diff --git a/cmd/security-agent/subcommands/status/command_test.go b/cmd/security-agent/subcommands/status/command_test.go new file mode 100644 index 0000000000000..4909ec73a8084 --- /dev/null +++ b/cmd/security-agent/subcommands/status/command_test.go @@ -0,0 +1,43 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package status + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +func TestCommand(t *testing.T) { + tests := []struct { + name string + cliInput []string + check func(cliParams *cliParams, params core.BundleParams) + }{ + { + name: "status", + cliInput: []string{"status"}, + check: func(cliParams *cliParams, params core.BundleParams) { + // Verify logger defaults + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "off", params.LogLevelFn(nil), "log level not matching") + }, + }, + } + + for _, test := range tests { + fxutil.TestOneShotSubcommand(t, + Commands(&command.GlobalParams{}), + test.cliInput, + runStatus, + test.check, + ) + } +} diff --git a/cmd/security-agent/subcommands/subcommands.go b/cmd/security-agent/subcommands/subcommands.go new file mode 100644 index 0000000000000..df312d12e34c7 --- /dev/null +++ b/cmd/security-agent/subcommands/subcommands.go @@ -0,0 +1,36 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package subcommands + +import ( + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + cmdcheck "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/check" + cmdcompliance "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/compliance" + cmdconfig "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/config" + cmdflare "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/flare" + cmdruntime "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/runtime" + cmdstart "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/start" + cmdstatus "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/status" + cmdversion "github.com/DataDog/datadog-agent/cmd/security-agent/subcommands/version" +) + +// SecurityAgentSubcommands returns SubcommandFactories for the subcommands supported +// with the current build flags. The build tags in use right now are +// !windows && kubeapiserver (check, and any parent command that uses check), +// kubeapiserver (config), +// and linux (runtime). +func SecurityAgentSubcommands() []command.SubcommandFactory { + return []command.SubcommandFactory{ + cmdcheck.SecurityAgentCommands, + cmdcompliance.Commands, + cmdconfig.Commands, + cmdflare.Commands, + cmdruntime.Commands, + cmdstart.Commands, + cmdstatus.Commands, + cmdversion.Commands, + } +} diff --git a/cmd/security-agent/app/subcommands/version/command.go b/cmd/security-agent/subcommands/version/command.go similarity index 64% rename from cmd/security-agent/app/subcommands/version/command.go rename to cmd/security-agent/subcommands/version/command.go index ac63d1cbfe075..a76fee57de158 100644 --- a/cmd/security-agent/app/subcommands/version/command.go +++ b/cmd/security-agent/subcommands/version/command.go @@ -7,22 +7,20 @@ package version import ( "fmt" + "github.com/fatih/color" + "github.com/spf13/cobra" + "go.uber.org/fx" - "github.com/DataDog/datadog-agent/cmd/security-agent/app/common" + "github.com/DataDog/datadog-agent/cmd/security-agent/command" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" - compconfig "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/log" - complog "github.com/DataDog/datadog-agent/comp/core/log" "github.com/DataDog/datadog-agent/pkg/serializer" "github.com/DataDog/datadog-agent/pkg/util/fxutil" - "github.com/DataDog/datadog-agent/pkg/version" - "github.com/fatih/color" - "github.com/spf13/cobra" - "go.uber.org/fx" + pkgversion "github.com/DataDog/datadog-agent/pkg/version" ) -func Commands(globalParams *common.GlobalParams) []*cobra.Command { +func Commands(globalParams *command.GlobalParams) []*cobra.Command { versionCmd := &cobra.Command{ Use: "version", Short: "Print the version info", @@ -30,8 +28,8 @@ func Commands(globalParams *common.GlobalParams) []*cobra.Command { RunE: func(cmd *cobra.Command, args []string) error { return fxutil.OneShot(displayVersion, fx.Supply(core.BundleParams{ - ConfigParams: config.NewParams("", config.WithSecurityAgentConfigFilePaths(globalParams.ConfPathArray), config.WithConfigLoadSecurityAgent(true)), - LogParams: log.LogForOneShot(common.LoggerName, "off", true)}), + ConfigParams: config.NewSecurityAgentParams(globalParams.ConfigFilePaths), + LogParams: log.LogForOneShot(command.LoggerName, "off", true)}), core.Bundle, ) }, @@ -40,8 +38,8 @@ func Commands(globalParams *common.GlobalParams) []*cobra.Command { return []*cobra.Command{versionCmd} } -func displayVersion(log complog.Component, config compconfig.Component) { - av, _ := version.Agent() +func displayVersion(log log.Component, config config.Component) { + av, _ := pkgversion.Agent() meta := "" if av.Meta != "" { meta = fmt.Sprintf("- Meta: %s ", color.YellowString(av.Meta)) @@ -50,7 +48,7 @@ func displayVersion(log complog.Component, config compconfig.Component) { fmt.Fprintf(color.Output, "Security agent %s %s- Commit: '%s' - Serialization version: %s\n", color.BlueString(av.GetNumberAndPre()), meta, - color.GreenString(version.Commit), + color.GreenString(pkgversion.Commit), color.MagentaString(serializer.AgentPayloadVersion), ) } diff --git a/cmd/security-agent/subcommands/version/command_test.go b/cmd/security-agent/subcommands/version/command_test.go new file mode 100644 index 0000000000000..605607153e295 --- /dev/null +++ b/cmd/security-agent/subcommands/version/command_test.go @@ -0,0 +1,43 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package version + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/cmd/security-agent/command" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +func TestCommand(t *testing.T) { + tests := []struct { + name string + cliInput []string + check func(params core.BundleParams) + }{ + { + name: "version", + cliInput: []string{"version"}, + check: func(params core.BundleParams) { + // Verify logger defaults + require.Equal(t, command.LoggerName, params.LoggerName(), "logger name not matching") + require.Equal(t, "off", params.LogLevelFn(nil), "log level not matching") + }, + }, + } + + for _, test := range tests { + fxutil.TestOneShotSubcommand(t, + Commands(&command.GlobalParams{}), + test.cliInput, + displayVersion, + test.check, + ) + } +} diff --git a/cmd/serverless-init/cloudservice/cloudrun.go b/cmd/serverless-init/cloudservice/cloudrun.go index 828385f44df29..da9a4cf952a3b 100644 --- a/cmd/serverless-init/cloudservice/cloudrun.go +++ b/cmd/serverless-init/cloudservice/cloudrun.go @@ -37,6 +37,7 @@ func (c *CloudRun) GetTags() map[string]string { } tags["origin"] = c.GetOrigin() + tags["_dd.origin"] = c.GetOrigin() return tags } diff --git a/cmd/serverless-init/cloudservice/cloudrun_test.go b/cmd/serverless-init/cloudservice/cloudrun_test.go index da30a0af422db..4832b30f48478 100644 --- a/cmd/serverless-init/cloudservice/cloudrun_test.go +++ b/cmd/serverless-init/cloudservice/cloudrun_test.go @@ -39,6 +39,7 @@ func TestGetCloudRunTags(t *testing.T) { "region": "test_region", "origin": "cloudrun", "project_id": "test_project", + "_dd.origin": "cloudrun", }, tags) } @@ -74,5 +75,6 @@ func TestGetCloudRunTagsWithEnvironmentVariables(t *testing.T) { "project_id": "test_project", "service_name": "test_service", "revision_name": "test_revision", + "_dd.origin": "cloudrun", }, tags) } diff --git a/cmd/serverless-init/cloudservice/containerapp.go b/cmd/serverless-init/cloudservice/containerapp.go index 1d171fe971705..ca33df1bf495d 100644 --- a/cmd/serverless-init/cloudservice/containerapp.go +++ b/cmd/serverless-init/cloudservice/containerapp.go @@ -30,10 +30,11 @@ func (c *ContainerApp) GetTags() map[string]string { revision := os.Getenv(ContainerAppRevision) return map[string]string{ - "app_name": appName, - "region": region, - "revision": revision, - "origin": c.GetOrigin(), + "app_name": appName, + "region": region, + "revision": revision, + "origin": c.GetOrigin(), + "_dd.origin": c.GetOrigin(), } } diff --git a/cmd/serverless-init/cloudservice/containerapp_test.go b/cmd/serverless-init/cloudservice/containerapp_test.go index f923dd444e057..8856391480e3a 100644 --- a/cmd/serverless-init/cloudservice/containerapp_test.go +++ b/cmd/serverless-init/cloudservice/containerapp_test.go @@ -21,9 +21,10 @@ func TestGetContainerAppTags(t *testing.T) { tags := service.GetTags() assert.Equal(t, map[string]string{ - "app_name": "test_app_name", - "origin": "containerapp", - "region": "eastus", - "revision": "test_revision", + "app_name": "test_app_name", + "origin": "containerapp", + "region": "eastus", + "revision": "test_revision", + "_dd.origin": "containerapp", }, tags) } diff --git a/cmd/serverless-init/cloudservice/helper/gcp.go b/cmd/serverless-init/cloudservice/helper/gcp.go index 86eb348fc3720..df6e507e53f59 100644 --- a/cmd/serverless-init/cloudservice/helper/gcp.go +++ b/cmd/serverless-init/cloudservice/helper/gcp.go @@ -124,7 +124,7 @@ func getSingleMetadata(httpClient *http.Client, url string) string { req.Header.Add("Metadata-Flavor", "Google") res, err := httpClient.Do(req) if err != nil { - log.Error("unable to get the requested metadata, defaulting to unknown") + log.Info("unable to get the requested metadata, defaulting to unknown") return "unknown" } defer res.Body.Close() diff --git a/cmd/serverless-init/main.go b/cmd/serverless-init/main.go index c3e893c7a7d42..d706669cf091d 100644 --- a/cmd/serverless-init/main.go +++ b/cmd/serverless-init/main.go @@ -32,6 +32,9 @@ func main() { panic("[datadog init process] invalid argument count, did you forget to set CMD ?") } + // load proxy settings + setupProxy() + cloudService := cloudservice.GetCloudServiceType() tags := cloudService.GetTags() origin := cloudService.GetOrigin() @@ -67,3 +70,7 @@ func setupMetricAgent(tags map[string]string) *metrics.ServerlessMetricAgent { metricAgent.SetExtraTags(tagArray) return metricAgent } + +func setupProxy() { + config.LoadProxyFromEnv(config.Datadog) +} diff --git a/cmd/serverless-init/main_test.go b/cmd/serverless-init/main_test.go new file mode 100644 index 0000000000000..2ba440f24f0e1 --- /dev/null +++ b/cmd/serverless-init/main_test.go @@ -0,0 +1,38 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows +// +build !windows + +package main + +import ( + "github.com/DataDog/datadog-agent/pkg/config" + "gotest.tools/assert" + "testing" +) + +func TestProxyNotLoaded(t *testing.T) { + proxyHttp := "abc:1234" + proxyHttps := "abc:5678" + t.Setenv("DD_PROXY_HTTP", proxyHttp) + t.Setenv("DD_PROXY_HTTPS", proxyHttps) + proxyHttpConfig := config.Datadog.GetString("proxy.http") + proxyHttpsConfig := config.Datadog.GetString("proxy.https") + assert.Equal(t, 0, len(proxyHttpConfig)) + assert.Equal(t, 0, len(proxyHttpsConfig)) +} + +func TestProxyLoaded(t *testing.T) { + proxyHttp := "abc:1234" + proxyHttps := "abc:5678" + t.Setenv("DD_PROXY_HTTP", proxyHttp) + t.Setenv("DD_PROXY_HTTPS", proxyHttps) + setupProxy() + proxyHttpConfig := config.Datadog.GetString("proxy.http") + proxyHttpsConfig := config.Datadog.GetString("proxy.https") + assert.Equal(t, proxyHttp, proxyHttpConfig) + assert.Equal(t, proxyHttps, proxyHttpsConfig) +} diff --git a/cmd/serverless/main.go b/cmd/serverless/main.go index 081cf46ec8c5d..44b8791864917 100644 --- a/cmd/serverless/main.go +++ b/cmd/serverless/main.go @@ -237,6 +237,10 @@ func runAgent(stopCh chan struct{}) (serverlessDaemon *daemon.Daemon, err error) // enable telemetry collection go func() { defer wg.Done() + if len(os.Getenv(daemon.LocalTestEnvVar)) > 0 { + log.Debug("Running in local test mode. Telemetry collection HTTP route won't be enabled") + return + } log.Debug("Enabling telemetry collection HTTP route") logRegistrationURL := registration.BuildURL(os.Getenv(runtimeAPIEnvVar), logsAPIRegistrationRoute) logRegistrationError := registration.EnableTelemetryCollection( diff --git a/cmd/system-probe/api/config.go b/cmd/system-probe/api/config.go index 1c63fa259d6f0..22834b4a7bf03 100644 --- a/cmd/system-probe/api/config.go +++ b/cmd/system-probe/api/config.go @@ -15,7 +15,7 @@ import ( // setupConfigHandlers adds the specific handlers for /config endpoints func setupConfigHandlers(r *mux.Router) { - r.HandleFunc("/config", settingshttp.Server.GetFull(getAggregatedNamespaces()...)).Methods("GET") + r.HandleFunc("/config", settingshttp.Server.GetFullSystemProbeConfig(getAggregatedNamespaces()...)).Methods("GET") r.HandleFunc("/config/list-runtime", settingshttp.Server.ListConfigurable).Methods("GET") r.HandleFunc("/config/{setting}", settingshttp.Server.GetValue).Methods("GET") r.HandleFunc("/config/{setting}", settingshttp.Server.SetValue).Methods("POST") diff --git a/cmd/system-probe/api/module/loader.go b/cmd/system-probe/api/module/loader.go index 17a014d6b7d12..ed4e01d285c99 100644 --- a/cmd/system-probe/api/module/loader.go +++ b/cmd/system-probe/api/module/loader.go @@ -27,7 +27,7 @@ func init() { } } -// loader is responsible for managing the lifecyle of each api.Module, which includes: +// loader is responsible for managing the lifecycle of each api.Module, which includes: // * Module initialization; // * Module termination; // * Module telemetry consolidation; @@ -47,7 +47,7 @@ type loader struct { func Register(cfg *config.Config, httpMux *mux.Router, factories []Factory) error { for _, factory := range factories { if !cfg.ModuleIsEnabled(factory.Name) { - log.Infof("%s module disabled", factory.Name) + log.Infof("module %s disabled", factory.Name) continue } @@ -57,27 +57,27 @@ func Register(cfg *config.Config, httpMux *mux.Router, factories []Factory) erro // Let `system-probe` run the other modules. if err != nil { l.errors[factory.Name] = err - log.Errorf("new module `%s` error: %s", factory.Name, err) + log.Errorf("error creating module %s: %s", factory.Name, err) continue } subRouter, err := makeSubrouter(httpMux, string(factory.Name)) if err != nil { l.errors[factory.Name] = err - log.Errorf("error making router for module %s error: %s", factory.Name, err) + log.Errorf("error making router for module %s: %s", factory.Name, err) continue } if err = module.Register(subRouter); err != nil { l.errors[factory.Name] = err - log.Errorf("error registering HTTP endpoints for module `%s` error: %s", factory.Name, err) + log.Errorf("error registering HTTP endpoints for module %s: %s", factory.Name, err) continue } l.routers[factory.Name] = subRouter l.modules[factory.Name] = module - log.Infof("module: %s started", factory.Name) + log.Infof("module %s started", factory.Name) } l.cfg = cfg @@ -158,8 +158,10 @@ func Close() { func updateStats() { start := time.Now() then := time.Now() + now := time.Now() ticker := time.NewTicker(15 * time.Second) - for now := range ticker.C { + + for { l.Lock() if l.closed { l.Unlock() @@ -177,7 +179,9 @@ func updateStats() { l.stats["updated_at"] = now.Unix() l.stats["delta_seconds"] = now.Sub(then).Seconds() l.stats["uptime"] = now.Sub(start).String() - then = now l.Unlock() + + then = now + now = <-ticker.C } } diff --git a/cmd/system-probe/app/config.go b/cmd/system-probe/app/config.go index 5933d7fd41b1b..a14277f2a4d87 100644 --- a/cmd/system-probe/app/config.go +++ b/cmd/system-probe/app/config.go @@ -54,7 +54,7 @@ func getSettingsClient(cmd *cobra.Command, _ []string) (settings.Client, error) // initRuntimeSettings builds the map of runtime settings configurable at runtime. func initRuntimeSettings() error { // Runtime-editable settings must be registered here to dynamically populate command-line information - err := settings.RegisterRuntimeSetting(settings.LogLevelRuntimeSetting{ConfigKey: config.Namespace + ".log_level"}) + err := settings.RegisterRuntimeSetting(settings.LogLevelRuntimeSetting{ConfigRoot: ddconfig.SystemProbe}) if err != nil { return err } diff --git a/cmd/system-probe/app/debug.go b/cmd/system-probe/app/debug.go index 4b1b8da3ba809..99dc8b6c0d925 100644 --- a/cmd/system-probe/app/debug.go +++ b/cmd/system-probe/app/debug.go @@ -25,7 +25,7 @@ func init() { var ( debugCommand = &cobra.Command{ - Use: "debug [state]", + Use: "debug [module] [state]", Short: "Print the runtime state of a running system-probe", Long: ``, Args: cobra.MinimumNArgs(1), @@ -39,8 +39,15 @@ func debugRuntime(_ *cobra.Command, args []string) error { return err } + var path string + if len(args) == 1 { + path = fmt.Sprintf("http://localhost/debug/%s", args[0]) + } else { + path = fmt.Sprintf("http://localhost/%s/debug/%s", args[0], args[1]) + } + // TODO rather than allowing arbitrary query params, use cobra flags - r, err := util.DoGet(c, "http://localhost/debug/"+args[0], util.CloseConnection) + r, err := util.DoGet(c, path, util.CloseConnection) if err != nil { var errMap = make(map[string]string) _ = json.Unmarshal(r, &errMap) diff --git a/cmd/system-probe/app/run.go b/cmd/system-probe/app/run.go index 8d551543c64ae..47c4c669d608f 100644 --- a/cmd/system-probe/app/run.go +++ b/cmd/system-probe/app/run.go @@ -10,13 +10,12 @@ import ( "errors" "fmt" "net/http" + _ "net/http/pprof" // Blank import used because this isn't directly used in this file "os" "os/signal" "syscall" "time" - _ "net/http/pprof" // Blank import used because this isn't directly used in this file - "github.com/fatih/color" "github.com/spf13/cobra" @@ -116,7 +115,7 @@ func run(_ *cobra.Command, _ []string) error { return err } - err := manager.ConfigureAutoExit(mainCtx) + err := manager.ConfigureAutoExit(mainCtx, ddconfig.SystemProbe) if err != nil { return log.Criticalf("Unable to configure auto-exit, err: %w", err) } @@ -133,19 +132,25 @@ func isValidPort(port int) bool { // StartSystemProbe Initializes the system-probe process func StartSystemProbe() error { + // load datadog.yaml config for some CWS code that requires it + err := config.SetupOptionalDatadogConfig() + if err != nil { + return log.Criticalf("unable to set up datadog.yaml configuration: %v", err) + } + cfg, err := config.New(configPath) if err != nil { - return log.Criticalf("Failed to create agent config: %s", err) + return log.Criticalf("unable to set up system-probe.yaml configuration: %s", err) } err = ddconfig.SetupLogger( loggerName, cfg.LogLevel, cfg.LogFile, - ddconfig.GetSyslogURI(), - ddconfig.Datadog.GetBool("syslog_rfc"), - ddconfig.Datadog.GetBool("log_to_console"), - ddconfig.Datadog.GetBool("log_format_json"), + ddconfig.GetSyslogURIFromConfig(ddconfig.SystemProbe), + ddconfig.SystemProbe.GetBool("syslog_rfc"), + ddconfig.SystemProbe.GetBool("log_to_console"), + ddconfig.SystemProbe.GetBool("log_format_json"), ) if err != nil { return log.Criticalf("failed to setup configured logger: %s", err) @@ -155,14 +160,14 @@ func StartSystemProbe() error { log.Infof("running system-probe with version: %s", versionString()) color.NoColor = false - if err := util.SetupCoreDump(); err != nil { + if err := util.SetupCoreDump(ddconfig.SystemProbe); err != nil { log.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) } - if ddconfig.Datadog.GetBool("system_probe_config.memory_controller.enabled") { - memoryPressureLevels := ddconfig.Datadog.GetStringMapString("system_probe_config.memory_controller.pressure_levels") - memoryThresholds := ddconfig.Datadog.GetStringMapString("system_probe_config.memory_controller.thresholds") - hierarchy := ddconfig.Datadog.GetString("system_probe_config.memory_controller.hierarchy") + if ddconfig.SystemProbe.GetBool("system_probe_config.memory_controller.enabled") { + memoryPressureLevels := ddconfig.SystemProbe.GetStringMapString("system_probe_config.memory_controller.pressure_levels") + memoryThresholds := ddconfig.SystemProbe.GetStringMapString("system_probe_config.memory_controller.thresholds") + hierarchy := ddconfig.SystemProbe.GetString("system_probe_config.memory_controller.hierarchy") memoryMonitor, err = utils.NewMemoryMonitor(hierarchy, ddconfig.IsContainerized(), memoryPressureLevels, memoryThresholds) if err != nil { log.Warnf("Can't set up memory controller: %v", err) @@ -194,8 +199,10 @@ func StartSystemProbe() error { } } - if err := statsd.Configure(cfg.StatsdHost, cfg.StatsdPort); err != nil { - return log.Criticalf("Error configuring statsd: %s", err) + if cfg.StatsdPort > 0 { + if err := statsd.Configure(cfg.StatsdHost, cfg.StatsdPort); err != nil { + return log.Criticalf("Error configuring statsd: %s", err) + } } // if a debug port is specified, we expose the default handler to that port diff --git a/cmd/system-probe/config/config.go b/cmd/system-probe/config/config.go index 35bc4ce6b6a6d..39aaec299e649 100644 --- a/cmd/system-probe/config/config.go +++ b/cmd/system-probe/config/config.go @@ -8,9 +8,9 @@ package config import ( "errors" "fmt" + "io/fs" "os" - "path" - "path/filepath" + "runtime" "strings" "github.com/DataDog/viper" @@ -26,10 +26,9 @@ type ModuleName string const ( // Namespace is the top-level configuration key that all system-probe settings are nested underneath - Namespace = "system_probe_config" - spNS = Namespace - smNS = "service_monitoring_config" - defaultConfigFileName = "system-probe.yaml" + Namespace = "system_probe_config" + spNS = Namespace + smNS = "service_monitoring_config" defaultConnsMessageBatchSize = 600 maxConnsMessageBatchSize = 1000 @@ -74,62 +73,40 @@ type Config struct { // New creates a config object for system-probe. It assumes no configuration has been loaded as this point. func New(configPath string) (*Config, error) { - aconfig.InitSystemProbeConfig(aconfig.Datadog) - aconfig.Datadog.SetConfigName("system-probe") + aconfig.SystemProbe.SetConfigName("system-probe") // set the paths where a config file is expected if len(configPath) != 0 { // if the configuration file path was supplied on the command line, - // add that first so it's first in line - aconfig.Datadog.AddConfigPath(configPath) + // add that first, so it's first in line + aconfig.SystemProbe.AddConfigPath(configPath) // If they set a config file directly, let's try to honor that if strings.HasSuffix(configPath, ".yaml") { - aconfig.Datadog.SetConfigFile(configPath) + aconfig.SystemProbe.SetConfigFile(configPath) } } - aconfig.Datadog.AddConfigPath(defaultConfigDir) - - _, err := aconfig.LoadWithoutSecret() - var e viper.ConfigFileNotFoundError + aconfig.SystemProbe.AddConfigPath(defaultConfigDir) + // load the configuration + _, err := aconfig.LoadCustom(aconfig.SystemProbe, "system-probe", true) if err != nil { + var e viper.ConfigFileNotFoundError if errors.As(err, &e) || errors.Is(err, os.ErrNotExist) { - log.Infof("no config exists at %s, ignoring...", configPath) + // do nothing, we can ignore a missing system-probe.yaml config file + } else if errors.Is(err, fs.ErrPermission) { + // special-case permission-denied with a clearer error message + if runtime.GOOS == "windows" { + return nil, fmt.Errorf(`cannot access the system-probe config file (%w); try running the command in an Administrator shell"`, err) + } else { + return nil, fmt.Errorf("cannot access the system-probe config file (%w); try running the command under the same user as the Datadog Agent", err) + } } else { - return nil, err - } - } - return load(configPath) -} - -// Merge will merge the system-probe configuration into the existing datadog configuration -func Merge(configPath string) (*Config, error) { - aconfig.InitSystemProbeConfig(aconfig.Datadog) - if configPath != "" { - if !strings.HasSuffix(configPath, ".yaml") { - configPath = path.Join(configPath, defaultConfigFileName) + return nil, fmt.Errorf("unable to load system-probe config file: %w", err) } - } else { - configPath = path.Join(defaultConfigDir, defaultConfigFileName) - } - - if f, err := os.Open(configPath); err == nil { - err = aconfig.Datadog.MergeConfig(f) - _ = f.Close() - if err != nil { - return nil, fmt.Errorf("error merging system-probe config file: %s", err) - } - } else { - log.Infof("no config exists at %s, ignoring...", configPath) } - - return load(configPath) + return load() } -func load(configPath string) (*Config, error) { - cfg := aconfig.Datadog - - if err := aconfig.ResolveSecrets(cfg, filepath.Base(configPath)); err != nil { - return nil, err - } +func load() (*Config, error) { + cfg := aconfig.SystemProbe var profSettings *profiling.Settings if cfg.GetBool(key(spNS, "internal_profiling.enabled")) { @@ -168,8 +145,8 @@ func load(configPath string) (*Config, error) { SocketAddress: cfg.GetString(key(spNS, "sysprobe_socket")), MaxConnsPerMessage: cfg.GetInt(key(spNS, "max_conns_per_message")), - LogFile: cfg.GetString(key(spNS, "log_file")), - LogLevel: cfg.GetString(key(spNS, "log_level")), + LogFile: cfg.GetString("log_file"), + LogLevel: cfg.GetString("log_level"), DebugPort: cfg.GetInt(key(spNS, "debug_port")), TelemetryEnabled: cfg.GetBool(key(spNS, "telemetry_enabled")), @@ -179,48 +156,52 @@ func load(configPath string) (*Config, error) { ProfilingSettings: profSettings, } + // backwards compatible log settings + if !cfg.IsSet("log_level") && cfg.IsSet(key(spNS, "log_level")) { + c.LogLevel = cfg.GetString(key(spNS, "log_level")) + cfg.Set("log_level", c.LogLevel) + } + if !cfg.IsSet("log_file") && cfg.IsSet(key(spNS, "log_file")) { + c.LogFile = cfg.GetString(key(spNS, "log_file")) + cfg.Set("log_file", c.LogFile) + } + if c.MaxConnsPerMessage > maxConnsMessageBatchSize { log.Warn("Overriding the configured connections count per message limit because it exceeds maximum") c.MaxConnsPerMessage = defaultConnsMessageBatchSize cfg.Set(key(spNS, "max_conns_per_message"), c.MaxConnsPerMessage) } - // this check must come first so we can accurately tell if system_probe was explicitly enabled + // this check must come first, so we can accurately tell if system_probe was explicitly enabled npmEnabled := cfg.GetBool("network_config.enabled") usmEnabled := cfg.GetBool(key(smNS, "enabled")) - if npmEnabled { - log.Info("network_config.enabled detected: enabling system-probe with network module running.") - c.EnabledModules[NetworkTracerModule] = struct{}{} - } else if c.Enabled && !cfg.IsSet("network_config.enabled") && !usmEnabled { + if c.Enabled && !cfg.IsSet("network_config.enabled") && !usmEnabled { // This case exists to preserve backwards compatibility. If system_probe_config.enabled is explicitly set to true, and there is no network_config block, // enable the connections/network check. - log.Info("network_config not found, but system-probe was enabled, enabling network module by default") - c.EnabledModules[NetworkTracerModule] = struct{}{} + log.Info("`system_probe_config.enabled` is deprecated, enable NPM with `network_config.enabled` instead") // ensure others can key off of this single config value for NPM status cfg.Set("network_config.enabled", true) npmEnabled = true } - if !npmEnabled && usmEnabled { - log.Info("service_monitoring.enabled detected: enabling system-probe with network module running.") + if npmEnabled || usmEnabled { c.EnabledModules[NetworkTracerModule] = struct{}{} } - if cfg.GetBool(key(spNS, "enable_tcp_queue_length")) { - log.Info("system_probe_config.enable_tcp_queue_length detected, will enable system-probe with TCP queue length check") c.EnabledModules[TCPQueueLengthTracerModule] = struct{}{} } if cfg.GetBool(key(spNS, "enable_oom_kill")) { - log.Info("system_probe_config.enable_oom_kill detected, will enable system-probe with OOM Kill check") c.EnabledModules[OOMKillProbeModule] = struct{}{} } - if cfg.GetBool("runtime_security_config.enabled") || cfg.GetBool("runtime_security_config.fim_enabled") || cfg.GetBool("runtime_security_config.event_monitoring.enabled") { - log.Info("runtime_security_config.enabled or runtime_security_config.fim_enabled detected, enabling system-probe") + + if cfg.GetBool("runtime_security_config.enabled") || + cfg.GetBool("runtime_security_config.fim_enabled") || + cfg.GetBool("event_monitoring_config.process.enabled") || + (c.ModuleIsEnabled(NetworkTracerModule) && cfg.GetBool("event_monitoring_config.network_process.enabled")) { c.EnabledModules[SecurityRuntimeModule] = struct{}{} } if cfg.GetBool(key(spNS, "process_config.enabled")) { - log.Info("process_config.enabled detected, enabling system-probe") c.EnabledModules[ProcessModule] = struct{}{} } @@ -255,3 +236,26 @@ func (c Config) ModuleIsEnabled(modName ModuleName) bool { _, ok := c.EnabledModules[modName] return ok } + +// SetupOptionalDatadogConfig loads the datadog.yaml config file but will not fail on a missing file +func SetupOptionalDatadogConfig() error { + aconfig.Datadog.AddConfigPath(defaultConfigDir) + // load the configuration + _, err := aconfig.LoadDatadogCustom(aconfig.Datadog, "datadog.yaml", true) + // If `!failOnMissingFile`, do not issue an error if we cannot find the default config file. + var e viper.ConfigFileNotFoundError + if err != nil && !errors.As(err, &e) { + // special-case permission-denied with a clearer error message + if errors.Is(err, fs.ErrPermission) { + if runtime.GOOS == "windows" { + err = fmt.Errorf(`cannot access the Datadog config file (%w); try running the command in an Administrator shell"`, err) + } else { + err = fmt.Errorf("cannot access the Datadog config file (%w); try running the command under the same user as the Datadog Agent", err) + } + } else { + err = fmt.Errorf("unable to load Datadog config file: %w", err) + } + return err + } + return nil +} diff --git a/cmd/system-probe/config/config_linux_test.go b/cmd/system-probe/config/config_linux_test.go new file mode 100644 index 0000000000000..4977bf1ac9501 --- /dev/null +++ b/cmd/system-probe/config/config_linux_test.go @@ -0,0 +1,42 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package config + +import ( + "fmt" + "os" + "strconv" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestNetworkProcessEventMonitoring(t *testing.T) { + newConfig(t) + + for i, te := range []struct { + network, netProcEvents bool + enabled bool + }{ + {network: false, netProcEvents: false, enabled: false}, + {network: false, netProcEvents: true, enabled: false}, + {network: true, netProcEvents: false, enabled: false}, + {network: true, netProcEvents: true, enabled: true}, + } { + t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { + os.Setenv("DD_SYSTEM_PROBE_NETWORK_ENABLED", strconv.FormatBool(te.network)) + os.Setenv("DD_SYSTEM_PROBE_EVENT_MONITORING_NETWORK_PROCESS_ENABLED", strconv.FormatBool(te.netProcEvents)) + defer os.Unsetenv("DD_SYSTEM_PROBE_EVENT_MONITORING_NETWORK_PROCESS_ENABLED") + defer os.Unsetenv("DD_SYSTEM_PROBE_NETWORK_ENABLED") + + cfg, err := New("") + require.NoError(t, err) + assert.Equal(t, te.enabled, cfg.ModuleIsEnabled(SecurityRuntimeModule)) + }) + } + +} diff --git a/cmd/system-probe/config/config_test.go b/cmd/system-probe/config/config_test.go index f3d329f532c59..b5b6d280c2acf 100644 --- a/cmd/system-probe/config/config_test.go +++ b/cmd/system-probe/config/config_test.go @@ -17,33 +17,47 @@ import ( "github.com/DataDog/datadog-agent/pkg/config" ) -func newConfig() { - config.Datadog = config.NewConfig("datadog", "DD", strings.NewReplacer(".", "_")) - config.InitConfig(config.Datadog) +func newConfig(t *testing.T) { + originalConfig := config.SystemProbe + t.Cleanup(func() { + config.SystemProbe = originalConfig + }) + config.SystemProbe = config.NewConfig("system-probe", "DD", strings.NewReplacer(".", "_")) + config.InitSystemProbeConfig(config.SystemProbe) } func TestRuntimeSecurityLoad(t *testing.T) { - newConfig() + newConfig(t) for i, tc := range []struct { - cws, fim, events bool - enabled bool + cws, fim, process_events, network_events bool + enabled bool }{ - {cws: false, fim: false, events: false, enabled: false}, - {cws: false, fim: false, events: true, enabled: true}, - {cws: false, fim: true, events: false, enabled: true}, - {cws: false, fim: true, events: true, enabled: true}, - {cws: true, fim: false, events: false, enabled: true}, - {cws: true, fim: false, events: true, enabled: true}, - {cws: true, fim: true, events: false, enabled: true}, - {cws: true, fim: true, events: true, enabled: true}, + {cws: false, fim: false, process_events: false, network_events: false, enabled: false}, + {cws: false, fim: false, process_events: true, network_events: false, enabled: true}, + {cws: false, fim: true, process_events: false, network_events: false, enabled: true}, + {cws: false, fim: true, process_events: true, network_events: false, enabled: true}, + {cws: true, fim: false, process_events: false, network_events: false, enabled: true}, + {cws: true, fim: false, process_events: true, network_events: false, enabled: true}, + {cws: true, fim: true, process_events: false, network_events: false, enabled: true}, + {cws: true, fim: true, process_events: true, network_events: false, enabled: true}, + {cws: false, fim: false, process_events: false, network_events: true, enabled: true}, + {cws: false, fim: false, process_events: true, network_events: true, enabled: true}, + {cws: false, fim: true, process_events: false, network_events: true, enabled: true}, + {cws: false, fim: true, process_events: true, network_events: true, enabled: true}, + {cws: true, fim: false, process_events: false, network_events: true, enabled: true}, + {cws: true, fim: false, process_events: true, network_events: true, enabled: true}, + {cws: true, fim: true, process_events: false, network_events: true, enabled: true}, + {cws: true, fim: true, process_events: true, network_events: true, enabled: true}, } { t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { t.Setenv("DD_RUNTIME_SECURITY_CONFIG_ENABLED", strconv.FormatBool(tc.cws)) t.Setenv("DD_RUNTIME_SECURITY_CONFIG_FIM_ENABLED", strconv.FormatBool(tc.fim)) - t.Setenv("DD_RUNTIME_SECURITY_CONFIG_EVENT_MONITORING_ENABLED", strconv.FormatBool(tc.events)) + t.Setenv("DD_SYSTEM_PROBE_EVENT_MONITORING_PROCESS_ENABLED", strconv.FormatBool(tc.process_events)) + t.Setenv("DD_SYSTEM_PROBE_EVENT_MONITORING_NETWORK_PROCESS_ENABLED", strconv.FormatBool(tc.network_events)) cfg, err := New("") + t.Log(cfg) require.NoError(t, err) assert.Equal(t, tc.enabled, cfg.ModuleIsEnabled(SecurityRuntimeModule)) }) diff --git a/cmd/system-probe/modules/network_tracer.go b/cmd/system-probe/modules/network_tracer.go index 26d016480fc76..d87d70b0ce772 100644 --- a/cmd/system-probe/modules/network_tracer.go +++ b/cmd/system-probe/modules/network_tracer.go @@ -14,14 +14,14 @@ import ( "fmt" "net/http" "os" - "path/filepath" "runtime" "strings" "time" - "github.com/DataDog/datadog-go/v5/statsd" "go.uber.org/atomic" + "github.com/DataDog/datadog-go/v5/statsd" + "github.com/DataDog/datadog-agent/cmd/system-probe/api/module" "github.com/DataDog/datadog-agent/cmd/system-probe/config" "github.com/DataDog/datadog-agent/cmd/system-probe/utils" @@ -52,7 +52,12 @@ var NetworkTracer = module.Factory{ return nil, fmt.Errorf("%w: %s", ErrSysprobeUnsupported, msg) } - log.Infof("Creating tracer for: %s", filepath.Base(os.Args[0])) + if ncfg.NPMEnabled { + log.Info("enabling network performance monitoring (NPM)") + } + if ncfg.ServiceMonitoringEnabled { + log.Info("enabling universal service monitoring (USM)") + } t, err := tracer.NewTracer(ncfg) @@ -194,6 +199,19 @@ func (nt *networkTracer) Register(httpMux *module.Router) error { utils.WriteAsJSON(w, table) }) + httpMux.HandleFunc("/debug/process_cache", func(w http.ResponseWriter, r *http.Request) { + ctx, cancelFunc := context.WithTimeout(r.Context(), 30*time.Second) + defer cancelFunc() + cache, err := nt.tracer.DebugDumpProcessCache(ctx) + if err != nil { + log.Errorf("unable to dump tracer process cache: %s", err) + w.WriteHeader(500) + return + } + + utils.WriteAsJSON(w, cache) + }) + httpMux.HandleFunc("/debug/telemetry", func(w http.ResponseWriter, req *http.Request) { metrics := telemetry.GetMetrics() utils.WriteAsJSON(w, metrics) diff --git a/cmd/system-probe/modules/security_runtime.go b/cmd/system-probe/modules/security_runtime.go index 4b259b78ef36b..f4048eb94328c 100644 --- a/cmd/system-probe/modules/security_runtime.go +++ b/cmd/system-probe/modules/security_runtime.go @@ -18,11 +18,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" ) -const ( - // DefaultRuntimePoliciesDir is the default policies directory used by the runtime security module - DefaultRuntimePoliciesDir = "/etc/datadog-agent/runtime-security.d" -) - // SecurityRuntime - Security runtime Factory var SecurityRuntime = module.Factory{ Name: config.SecurityRuntimeModule, @@ -33,7 +28,7 @@ var SecurityRuntime = module.Factory{ return nil, fmt.Errorf("invalid security runtime module configuration: %w", err) } - m, err := secmodule.NewModule(config) + m, err := secmodule.NewModule(config, secmodule.Opts{}) if err == ebpf.ErrNotImplemented { log.Info("Datadog runtime security agent is only supported on Linux") return nil, module.ErrNotEnabled diff --git a/cmd/systray/command/command.go b/cmd/systray/command/command.go new file mode 100644 index 0000000000000..a793be32e76c3 --- /dev/null +++ b/cmd/systray/command/command.go @@ -0,0 +1,103 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. +//go:build windows +// +build windows + +// Package command implements the top-level `systray` binary, including its subcommands. +package command + +import ( + "fmt" + "os" + "path/filepath" + + "github.com/spf13/cobra" + + "github.com/DataDog/datadog-agent/cmd/agent/common" + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/comp/systray/systray" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/DataDog/datadog-agent/pkg/util/winutil" + "go.uber.org/fx" +) + +const ( + defaultLogFile = "c:\\programdata\\datadog\\logs\\ddtray.log" +) + +var ( + // set by the build task and used to configure the logger to output to console when debugging. + // This value should correspond to the subsystem in the PE header. + // + // In normal circumstances, we don't want the systray to launch a console window when it runs + // so the default subsystem is "windows". However, console output can be useful for debugging. + // Console output can be viewd by setting the PE subsystem to "console". + subsystem = "windows" +) + +func init() { + // disable cobra mouse trap so cobra doesn't immediately kill our GUI app + cobra.MousetrapHelpText = "" +} + +// MakeCommand makes the top-level Cobra command for this app. +func MakeCommand() *cobra.Command { + systrayParams := systray.Params{} + + // log file path + var logFilePath string + confPath, err := winutil.GetProgramDataDir() + if err == nil { + logFilePath = filepath.Join(confPath, "logs", "ddtray.log") + } else { + logFilePath = defaultLogFile + } + + // log params + var logParams log.Params + if subsystem == "windows" { + logParams = log.LogForDaemon("TRAY", "system_tray.log_file", logFilePath) + } else if subsystem == "console" { + logParams = log.LogForOneShot("TRAY", "info", true) + } + + // root command + cmd := &cobra.Command{ + Use: fmt.Sprintf("%s", os.Args[0]), + SilenceUsage: true, + RunE: func(cmd *cobra.Command, args []string) error { + return fxutil.Run( + // core + fx.Supply(core.BundleParams{ + ConfigParams: config.NewParams(common.DefaultConfPath), + LogParams: logParams, + }), + core.Bundle, + // systray + fx.Supply(systrayParams), + systray.Module, + // require the systray component, causing it to start + fx.Invoke(func(_ systray.Component) {}), + ) + }, + } + + // + // NOTE: The command line help/usage will not be visible in the release binary because the PE subsystem is "windows" + // + + cmd.PersistentFlags().BoolVar(&systrayParams.LaunchGuiFlag, "launch-gui", false, "Launch browser configuration and exit") + + // launch-elev=true only means the process should have been elevated so that it will not elevate again. If the + // parameter is specified but the process is not elevated, some operation will fail due to access denied. + cmd.PersistentFlags().BoolVar(&systrayParams.LaunchElevatedFlag, "launch-elev", false, "Launch program as elevated, internal use only") + + // If this parameter is specified, the process will try to carry out the command before the message loop. + cmd.PersistentFlags().StringVar(&systrayParams.LaunchCommand, "launch-cmd", "", "Carry out a specific command after launch") + + return cmd +} diff --git a/cmd/systray/ddtray.exe.manifest b/cmd/systray/ddtray.exe.manifest index 54d6cb1df9ea3..2cd320f3d310c 100644 --- a/cmd/systray/ddtray.exe.manifest +++ b/cmd/systray/ddtray.exe.manifest @@ -10,7 +10,7 @@ diff --git a/cmd/systray/main_windows.go b/cmd/systray/main_windows.go new file mode 100644 index 0000000000000..6dd2b9e8f6a75 --- /dev/null +++ b/cmd/systray/main_windows.go @@ -0,0 +1,23 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package main + +import ( + "os" + + "github.com/DataDog/datadog-agent/cmd/internal/runcmd" + "github.com/DataDog/datadog-agent/cmd/systray/command" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +func main() { + exitcode := 0 + defer func() { + log.Flush() + os.Exit(exitcode) + }() + exitcode = runcmd.Run(command.MakeCommand()) +} diff --git a/cmd/systray/systray.go b/cmd/systray/systray.go deleted file mode 100644 index c71b413f05027..0000000000000 --- a/cmd/systray/systray.go +++ /dev/null @@ -1,395 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. -//go:build windows -// +build windows - -package main - -//#include -// -//BOOL LaunchUnelevated(LPCWSTR CommandLine) -//{ -// BOOL result = FALSE; -// HWND hwnd = GetShellWindow(); -// -// if (hwnd != NULL) -// { -// DWORD pid; -// if (GetWindowThreadProcessId(hwnd, &pid) != 0) -// { -// HANDLE process = OpenProcess(PROCESS_CREATE_PROCESS, FALSE, pid); -// -// if (process != NULL) -// { -// SIZE_T size; -// if ((!InitializeProcThreadAttributeList(NULL, 1, 0, &size)) && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)) -// { -// LPPROC_THREAD_ATTRIBUTE_LIST p = (LPPROC_THREAD_ATTRIBUTE_LIST)malloc(size); -// if (p != NULL) -// { -// if (InitializeProcThreadAttributeList(p, 1, 0, &size)) -// { -// if (UpdateProcThreadAttribute(p, 0, -// PROC_THREAD_ATTRIBUTE_PARENT_PROCESS, -// &process, sizeof(process), -// NULL, NULL)) -// { -// STARTUPINFOEXW siex = {0}; -// siex.lpAttributeList = p; -// siex.StartupInfo.cb = sizeof(siex); -// PROCESS_INFORMATION pi = {0}; -// -// size_t cmdlen = wcslen(CommandLine); -// size_t rawcmdlen = (cmdlen + 1) * sizeof(WCHAR); -// PWSTR cmdstr = (PWSTR)malloc(rawcmdlen); -// if (cmdstr != NULL) -// { -// memcpy(cmdstr, CommandLine, rawcmdlen); -// if (CreateProcessW(NULL, cmdstr, NULL, NULL, FALSE, -// CREATE_NEW_CONSOLE | EXTENDED_STARTUPINFO_PRESENT, -// NULL, NULL, &siex.StartupInfo, &pi)) -// { -// result = TRUE; -// CloseHandle(pi.hProcess); -// CloseHandle(pi.hThread); -// } -// free(cmdstr); -// } -// } -// } -// free(p); -// } -// } -// CloseHandle(process); -// } -// } -// } -// return result; -//} -import "C" - -import ( - "flag" - "fmt" - "os" - "os/exec" - "runtime" - "strings" - "time" - "unsafe" - - seelog "github.com/cihub/seelog" - - "github.com/DataDog/datadog-agent/pkg/util/log" - - "github.com/DataDog/datadog-agent/pkg/version" - - "github.com/lxn/walk" - "golang.org/x/sys/windows" -) - -type menuItem struct { - label string - handler walk.EventHandler - enabled bool -} - -const ( - cmdTextStartService = "StartService" - cmdTextStopService = "StopService" - cmdTextRestartService = "RestartService" - cmdTextConfig = "Config" -) - -var ( - separator = "SEPARATOR" - launchGraceTime = 2 - ni *walk.NotifyIcon - launchgui bool - launchelev bool - launchcmd string - eventname = windows.StringToUTF16Ptr("ddtray-event") - isUserAdmin bool - cmds = map[string]func(){ - cmdTextStartService: onStart, - cmdTextStopService: onStop, - cmdTextRestartService: onRestart, - cmdTextConfig: onConfigure, - } -) - -func init() { - enableLoggingToFile() - - isAdmin, err := isUserAnAdmin() - isUserAdmin = isAdmin - - if err != nil { - log.Warnf("Failed to call isUserAnAdmin %v", err) - // If we cannot determine if the user is admin or not let the user allow to click on the buttons. - isUserAdmin = true - } -} - -func createMenuItems(notifyIcon *walk.NotifyIcon) []menuItem { - av, _ := version.Agent() - verstring := av.GetNumberAndPre() - - menuHandler := func(cmd string) func() { - return func() { - execCmdOrElevate(cmd) - } - } - - menuitems := make([]menuItem, 0) - menuitems = append(menuitems, menuItem{label: verstring, enabled: false}) - menuitems = append(menuitems, menuItem{label: separator}) - menuitems = append(menuitems, menuItem{label: "&Start", handler: menuHandler(cmdTextStartService), enabled: true}) - menuitems = append(menuitems, menuItem{label: "S&top", handler: menuHandler(cmdTextStopService), enabled: true}) - menuitems = append(menuitems, menuItem{label: "&Restart", handler: menuHandler(cmdTextRestartService), enabled: true}) - menuitems = append(menuitems, menuItem{label: "&Configure", handler: menuHandler(cmdTextConfig), enabled: true}) - menuitems = append(menuitems, menuItem{label: "&Flare", handler: onFlare, enabled: true}) - menuitems = append(menuitems, menuItem{label: separator}) - menuitems = append(menuitems, menuItem{label: "E&xit", handler: onExit, enabled: true}) - - return menuitems -} - -func isUserAnAdmin() (bool, error) { - shell32 := windows.NewLazySystemDLL("Shell32.dll") - defer windows.FreeLibrary(windows.Handle(shell32.Handle())) - - isUserAnAdminProc := shell32.NewProc("IsUserAnAdmin") - ret, _, winError := isUserAnAdminProc.Call() - - if winError != windows.NTE_OP_OK { - return false, fmt.Errorf("IsUserAnAdmin returns error code %d", winError) - } - if ret == 0 { - return false, nil - } - return true, nil -} - -func showCustomMessage(notifyIcon *walk.NotifyIcon, message string) { - if err := notifyIcon.ShowCustom("Datadog Agent Manager", message); err != nil { - log.Warnf("Failed to show custom message %v", err) - } -} - -func onExit() { - walk.App().Exit(0) -} - -func main() { - // Following https://github.com/lxn/win/commit/d9566253ae00d0a7dc7e4c9bda651dcfee029001 - // it's up to the caller to lock OS threads - runtime.LockOSThread() - defer runtime.UnlockOSThread() - - flag.BoolVar(&launchgui, "launch-gui", false, "Launch browser configuration and exit") - - // launch-elev=true only means the process should have been elevated so that it will not elevate again. If the - // parameter is specified but the process is not elevated, some operation will fail due to access denied. - flag.BoolVar(&launchelev, "launch-elev", false, "Launch program as elevated, internal use only") - - // If this parameter is specified, the process will try to carry out the command before the message loop. - flag.StringVar(&launchcmd, "launch-cmd", "", "Carry out a specific command after launch") - flag.Parse() - - log.Debugf("launch-gui is %v, launch-elev is %v, launch-cmd is %v", launchgui, launchelev, launchcmd) - - if launchgui { - //enableLoggingToConsole() - defer log.Flush() - log.Debug("Preparing to launch configuration interface...") - onConfigure() - } - - // Check to see if the process is already running - h, _ := windows.OpenEvent(0x1F0003, // EVENT_ALL_ACCESS - false, - eventname) - - if h != windows.Handle(0) { - // Process already running. - windows.CloseHandle(h) - - // Wait a short period and recheck in case the other process will quit. - time.Sleep(time.Duration(launchGraceTime) * time.Second) - - // Try again - h, _ := windows.OpenEvent(0x1F0003, // EVENT_ALL_ACCESS - false, - eventname) - - if h != windows.Handle(0) { - windows.CloseHandle(h) - return - } - } - - // otherwise, create the handle so that nobody else will - h, _ = windows.CreateEvent(nil, 0, 0, eventname) - // should never fail; test just to make sure we don't close unopened handle - if h != windows.Handle(0) { - defer windows.CloseHandle(h) - } - // We need either a walk.MainWindow or a walk.Dialog for their message loop. - // We will not make it visible in this example, though. - mw, err := walk.NewMainWindow() - if err != nil { - log.Errorf("Failed to create main window %v", err) - os.Exit(1) - } - - // 1 is the ID of the MAIN_ICON in systray.rc - icon, err := walk.NewIconFromResourceId(1) - if err != nil { - log.Warnf("Failed to load icon %v", err) - } - // Create the notify icon and make sure we clean it up on exit. - ni, err = walk.NewNotifyIcon() - if err != nil { - log.Errorf("Failed to create newNotifyIcon %v", err) - os.Exit(2) - } - defer ni.Dispose() - - // Set the icon and a tool tip text. - if err := ni.SetIcon(icon); err != nil { - log.Warnf("Failed to set icon %v", err) - } - if err := ni.SetToolTip("Click for info or use the context menu to exit."); err != nil { - log.Warnf("Failed to set tooltip text %v", err) - } - - // When the left mouse button is pressed, bring up our balloon. - ni.MouseDown().Attach(func(x, y int, button walk.MouseButton) { - if button != walk.LeftButton { - return - } - showCustomMessage(ni, "Please right click to display available options.") - }) - - menuitems := createMenuItems(ni) - - for _, item := range menuitems { - var action *walk.Action - if item.label == separator { - action = walk.NewSeparatorAction() - } else { - action = walk.NewAction() - if err := action.SetText(item.label); err != nil { - log.Warnf("Failed to set text for item %s %v", item.label, err) - continue - } - err = action.SetEnabled(item.enabled) - if err != nil { - log.Warnf("Failed to set enabled for item %s %v", item.label, err) - continue - } - if item.handler != nil { - _ = action.Triggered().Attach(item.handler) - } - } - err = ni.ContextMenu().Actions().Add(action) - if err != nil { - log.Warnf("Failed to add action for item %s to context menu %v", item.label, err) - continue - } - } - - // The notify icon is hidden initially, so we have to make it visible. - if err := ni.SetVisible(true); err != nil { - log.Warnf("Failed to set window visibility %v", err) - } - - // If a command is specified in process command line, carry it out. - if launchcmd != "" { - execCmdOrElevate(launchcmd) - } - - // Run the message loop. - mw.Run() -} - -// opens a browser window at the specified URL -func open(url string) error { - cmdptr := windows.StringToUTF16Ptr("rundll32.exe url.dll,FileProtocolHandler " + url) - if C.LaunchUnelevated(C.LPCWSTR(unsafe.Pointer(cmdptr))) == 0 { - // Failed to run process non-elevated, retry with normal launch. - log.Warnf("Failed to launch configuration page as non-elevated, will launch as current process.") - return exec.Command("rundll32", "url.dll,FileProtocolHandler", url).Start() - } - - // Succeeded, return no error. - return nil -} - -func enableLoggingToFile() { - seeConfig := ` - - - - - ` - logger, _ := seelog.LoggerFromConfigAsBytes([]byte(seeConfig)) - log.ReplaceLogger(logger) -} - -//nolint:deadcode // for debugging -func enableLoggingToConsole() { - seeConfig := ` - - - - - ` - logger, _ := seelog.LoggerFromConfigAsBytes([]byte(seeConfig)) - log.ReplaceLogger(logger) -} - -// execCmdOrElevate carries out a command. If current process is not elevated and is not supposed to be elevated, it will launch -// itself as elevated and quit from the current instance. -func execCmdOrElevate(cmd string) { - if !launchelev && !isUserAdmin { - // If not launched as elevated and user is not admin, relaunch self. Use AND here to prevent from dead loop. - relaunchElevated(cmd) - - // If elevation failed, just quit to the caller. - return - } - - if cmds[cmd] != nil { - cmds[cmd]() - } -} - -// relaunchElevated launch another instance of the current process asking it to carry out a command as admin. -// If the function succeeds, it will quit the process, otherwise the function will return to the caller. -func relaunchElevated(cmd string) { - verb := "runas" - exe, _ := os.Executable() - cwd, _ := os.Getwd() - - // Reconstruct arguments, drop launch-gui and tell the new process it should have been elevated. - xargs := []string{"-launch-elev=true", "-launch-cmd=" + cmd} - args := strings.Join(xargs, " ") - - verbPtr, _ := windows.UTF16PtrFromString(verb) - exePtr, _ := windows.UTF16PtrFromString(exe) - cwdPtr, _ := windows.UTF16PtrFromString(cwd) - argPtr, _ := windows.UTF16PtrFromString(args) - - var showCmd int32 = 1 //SW_NORMAL - - err := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, showCmd) - if err != nil { - log.Warnf("Failed to launch self as elevated %v", err) - } else { - onExit() - } -} diff --git a/cmd/trace-agent/config/config.go b/cmd/trace-agent/config/config.go index 783974c27b5c4..9f3e5040eedc0 100644 --- a/cmd/trace-agent/config/config.go +++ b/cmd/trace-agent/config/config.go @@ -321,13 +321,7 @@ func applyDatadogConfig(c *config.AgentConfig) error { } } - // undocumented - if coreconfig.Datadog.IsSet("apm_config.max_cpu_percent") { - c.MaxCPU = coreconfig.Datadog.GetFloat64("apm_config.max_cpu_percent") / 100 - } - if coreconfig.Datadog.IsSet("apm_config.max_memory") { - c.MaxMemory = coreconfig.Datadog.GetFloat64("apm_config.max_memory") - } + setMaxMemCPU(c, coreconfig.IsContainerized()) // undocumented writers for key, cfg := range map[string]*config.WriterConfig{ @@ -664,3 +658,22 @@ func SetHandler() http.Handler { func httpError(w http.ResponseWriter, status int, err error) { http.Error(w, fmt.Sprintf(`{"error": %q}`, err.Error()), status) } + +// setMaxMemCPU sets watchdog's max_memory and max_cpu_percent parameters. +// If the agent is containerized, max_memory and max_cpu_percent are disabled by default. +// Resource limits are better handled by container runtimes and orchestrators. +func setMaxMemCPU(c *config.AgentConfig, isContainerized bool) { + if coreconfig.Datadog.IsSet("apm_config.max_cpu_percent") { + c.MaxCPU = coreconfig.Datadog.GetFloat64("apm_config.max_cpu_percent") / 100 + } else if isContainerized { + log.Debug("Running in a container and apm_config.max_cpu_percent is not set, setting it to 0") + c.MaxCPU = 0 + } + + if coreconfig.Datadog.IsSet("apm_config.max_memory") { + c.MaxMemory = coreconfig.Datadog.GetFloat64("apm_config.max_memory") + } else if isContainerized { + log.Debug("Running in a container and apm_config.max_memory is not set, setting it to 0") + c.MaxMemory = 0 + } +} diff --git a/cmd/trace-agent/config/config_otlp_test.go b/cmd/trace-agent/config/config_otlp_test.go index 43658bcb2003a..e33f65fb42d73 100644 --- a/cmd/trace-agent/config/config_otlp_test.go +++ b/cmd/trace-agent/config/config_otlp_test.go @@ -32,6 +32,5 @@ func TestFullYamlConfigWithOTLP(t *testing.T) { assert.NoError(applyDatadogConfig(c)) assert.Equal("0.0.0.0", c.OTLPReceiver.BindHost) - assert.Equal(0, c.OTLPReceiver.HTTPPort) assert.Equal(50053, c.OTLPReceiver.GRPCPort) } diff --git a/cmd/trace-agent/config/config_test.go b/cmd/trace-agent/config/config_test.go index ce0874b92afd5..77f9a0e3fe21a 100644 --- a/cmd/trace-agent/config/config_test.go +++ b/cmd/trace-agent/config/config_test.go @@ -834,6 +834,17 @@ func TestLoadEnv(t *testing.T) { assert.Equal(cfg.RejectTags, []*config.Tag{{K: "bad1", V: "value with a space"}}) }) + t.Run(env, func(t *testing.T) { + defer cleanConfig()() + assert := assert.New(t) + err := os.Setenv(env, `["bad1:value with a space","bad2:value with spaces"]`) + assert.NoError(err) + defer os.Unsetenv(env) + cfg, err := LoadConfigFile("./testdata/full.yaml") + assert.NoError(err) + assert.Equal(cfg.RejectTags, []*config.Tag{{K: "bad1", V: "value with a space"}, {K: "bad2", V: "value with spaces"}}) + }) + for _, envKey := range []string{ "DD_CONNECTION_LIMIT", // deprecated "DD_APM_CONNECTION_LIMIT", @@ -1034,3 +1045,45 @@ func TestFargateConfig(t *testing.T) { }) } } + +func TestSetMaxMemCPU(t *testing.T) { + t.Run("default, non-containerized", func(t *testing.T) { + cleanConfig() + defer cleanConfig() + c := config.New() + setMaxMemCPU(c, false) + assert.Equal(t, 0.5, c.MaxCPU) + assert.Equal(t, 5e8, c.MaxMemory) + }) + + t.Run("default, containerized", func(t *testing.T) { + cleanConfig() + defer cleanConfig() + c := config.New() + setMaxMemCPU(c, true) + assert.Equal(t, 0.0, c.MaxCPU) + assert.Equal(t, 0.0, c.MaxMemory) + }) + + t.Run("limits set, non-containerized", func(t *testing.T) { + cleanConfig() + defer cleanConfig() + c := config.New() + coreconfig.Datadog.Set("apm_config.max_cpu_percent", "20") + coreconfig.Datadog.Set("apm_config.max_memory", "200") + setMaxMemCPU(c, false) + assert.Equal(t, 0.2, c.MaxCPU) + assert.Equal(t, 200.0, c.MaxMemory) + }) + + t.Run("limits set, containerized", func(t *testing.T) { + cleanConfig() + defer cleanConfig() + c := config.New() + coreconfig.Datadog.Set("apm_config.max_cpu_percent", "30") + coreconfig.Datadog.Set("apm_config.max_memory", "300") + setMaxMemCPU(c, true) + assert.Equal(t, 0.3, c.MaxCPU) + assert.Equal(t, 300.0, c.MaxMemory) + }) +} diff --git a/cmd/trace-agent/main_nix.go b/cmd/trace-agent/main_nix.go index ab19604731b59..ec57b4c1e34f7 100644 --- a/cmd/trace-agent/main_nix.go +++ b/cmd/trace-agent/main_nix.go @@ -12,8 +12,10 @@ import ( "context" "flag" + "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/runtime" "github.com/DataDog/datadog-agent/pkg/trace/watchdog" + "github.com/DataDog/datadog-agent/pkg/util/log" ) // main is the main application entry point @@ -22,6 +24,9 @@ func main() { // prepare go runtime runtime.SetMaxProcs() + if err := runtime.SetGoMemLimit(config.IsContainerized()); err != nil { + log.Debugf("Couldn't set Go memory limit: %s", err) + } // Handle stops properly go func() { diff --git a/cmd/trace-agent/remote_config.go b/cmd/trace-agent/remote_config.go index b7922f846c5c4..8d451c16433e5 100644 --- a/cmd/trace-agent/remote_config.go +++ b/cmd/trace-agent/remote_config.go @@ -14,8 +14,7 @@ import ( "sync" "time" - "google.golang.org/grpc/metadata" - + "github.com/DataDog/datadog-agent/pkg/config/remote" "github.com/DataDog/datadog-agent/pkg/proto/pbgo" "github.com/DataDog/datadog-agent/pkg/trace/api" "github.com/DataDog/datadog-agent/pkg/trace/config" @@ -41,7 +40,7 @@ func putBuffer(buffer *bytes.Buffer) { bufferPool.Put(buffer) } -func remoteConfigHandler(r *api.HTTPReceiver, client pbgo.AgentSecureClient, token string, cfg *config.AgentConfig) http.Handler { +func remoteConfigHandler(r *api.HTTPReceiver, client remote.ConfigUpdater, cfg *config.AgentConfig) http.Handler { cidProvider := api.NewIDProvider(cfg.ContainerProcRoot) return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { defer timing.Since("datadog.trace_agent.receiver.config_process_ms", time.Now()) @@ -66,10 +65,6 @@ func remoteConfigHandler(r *api.HTTPReceiver, client pbgo.AgentSecureClient, tok http.Error(w, err.Error(), http.StatusBadRequest) return } - md := metadata.MD{ - "authorization": []string{fmt.Sprintf("Bearer %s", token)}, - } - ctx := metadata.NewOutgoingContext(req.Context(), md) if configsRequest.GetClient().GetClientTracer() != nil { normalize(&configsRequest) if configsRequest.Client.ClientTracer.Tags == nil { @@ -79,7 +74,7 @@ func remoteConfigHandler(r *api.HTTPReceiver, client pbgo.AgentSecureClient, tok configsRequest.Client.ClientTracer.Tags = append(configsRequest.Client.ClientTracer.Tags, tag) } } - cfg, err := client.ClientGetConfigs(ctx, &configsRequest) + cfg, err := client.ClientGetConfigs(req.Context(), &configsRequest) if err != nil { statusCode = http.StatusInternalServerError http.Error(w, err.Error(), statusCode) diff --git a/cmd/trace-agent/remote_config_test.go b/cmd/trace-agent/remote_config_test.go index 67e3e7be483f3..1acce8c15e607 100644 --- a/cmd/trace-agent/remote_config_test.go +++ b/cmd/trace-agent/remote_config_test.go @@ -19,10 +19,10 @@ import ( "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/config/features" "github.com/DataDog/datadog-agent/pkg/trace/sampler" + "github.com/DataDog/datadog-agent/pkg/trace/telemetry" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" - "google.golang.org/grpc" ) func TestConfigEndpoint(t *testing.T) { @@ -55,11 +55,11 @@ func TestConfigEndpoint(t *testing.T) { for _, tc := range tcs { t.Run(tc.name, func(t *testing.T) { assert := assert.New(t) - grpc := mockAgentSecureServer{} - rcv := api.NewHTTPReceiver(config.New(), sampler.NewDynamicConfig(), make(chan *api.Payload, 5000), nil) + grpc := agentGRPCConfigFetcher{} + rcv := api.NewHTTPReceiver(config.New(), sampler.NewDynamicConfig(), make(chan *api.Payload, 5000), nil, telemetry.NewNoopCollector()) mux := http.NewServeMux() cfg := &config.AgentConfig{} - mux.Handle("/v0.7/config", remoteConfigHandler(rcv, &grpc, "", cfg)) + mux.Handle("/v0.7/config", remoteConfigHandler(rcv, &grpc, cfg)) server := httptest.NewServer(mux) if tc.valid { var request pbgo.ClientGetConfigsRequest @@ -130,8 +130,8 @@ func TestUpstreamRequest(t *testing.T) { for _, tc := range tcs { t.Run(tc.name, func(t *testing.T) { assert := assert.New(t) - grpc := mockAgentSecureServer{} - rcv := api.NewHTTPReceiver(config.New(), sampler.NewDynamicConfig(), make(chan *api.Payload, 5000), nil) + grpc := agentGRPCConfigFetcher{} + rcv := api.NewHTTPReceiver(config.New(), sampler.NewDynamicConfig(), make(chan *api.Payload, 5000), nil, telemetry.NewNoopCollector()) var request pbgo.ClientGetConfigsRequest err := json.Unmarshal([]byte(tc.expectedUpstreamRequest), &request) @@ -139,7 +139,7 @@ func TestUpstreamRequest(t *testing.T) { grpc.On("ClientGetConfigs", mock.Anything, &request, mock.Anything).Return(&pbgo.ClientGetConfigsResponse{Targets: []byte("test")}, nil) mux := http.NewServeMux() - mux.Handle("/v0.7/config", remoteConfigHandler(rcv, &grpc, "", tc.cfg)) + mux.Handle("/v0.7/config", remoteConfigHandler(rcv, &grpc, tc.cfg)) server := httptest.NewServer(mux) req, _ := http.NewRequest("POST", server.URL+"/v0.7/config", strings.NewReader(tc.tracerReq)) @@ -156,32 +156,12 @@ func TestUpstreamRequest(t *testing.T) { } } -type mockAgentSecureServer struct { +type agentGRPCConfigFetcher struct { pbgo.AgentSecureClient mock.Mock } -func (a *mockAgentSecureServer) TaggerStreamEntities(ctx context.Context, in *pbgo.StreamTagsRequest, opts ...grpc.CallOption) (pbgo.AgentSecure_TaggerStreamEntitiesClient, error) { - args := a.Called(ctx, in, opts) - return args.Get(0).(pbgo.AgentSecure_TaggerStreamEntitiesClient), args.Error(1) -} - -func (a *mockAgentSecureServer) TaggerFetchEntity(ctx context.Context, in *pbgo.FetchEntityRequest, opts ...grpc.CallOption) (*pbgo.FetchEntityResponse, error) { - args := a.Called(ctx, in, opts) - return args.Get(0).(*pbgo.FetchEntityResponse), args.Error(1) -} - -func (a *mockAgentSecureServer) DogstatsdCaptureTrigger(ctx context.Context, in *pbgo.CaptureTriggerRequest, opts ...grpc.CallOption) (*pbgo.CaptureTriggerResponse, error) { - args := a.Called(ctx, in, opts) - return args.Get(0).(*pbgo.CaptureTriggerResponse), args.Error(1) -} - -func (a *mockAgentSecureServer) DogstatsdSetTaggerState(ctx context.Context, in *pbgo.TaggerState, opts ...grpc.CallOption) (*pbgo.TaggerStateResponse, error) { - args := a.Called(ctx, in, opts) - return args.Get(0).(*pbgo.TaggerStateResponse), args.Error(1) -} - -func (a *mockAgentSecureServer) ClientGetConfigs(ctx context.Context, in *pbgo.ClientGetConfigsRequest, opts ...grpc.CallOption) (*pbgo.ClientGetConfigsResponse, error) { - args := a.Called(ctx, in, opts) +func (a *agentGRPCConfigFetcher) ClientGetConfigs(ctx context.Context, in *pbgo.ClientGetConfigsRequest) (*pbgo.ClientGetConfigsResponse, error) { + args := a.Called(ctx, in) return args.Get(0).(*pbgo.ClientGetConfigsResponse), args.Error(1) } diff --git a/cmd/trace-agent/run.go b/cmd/trace-agent/run.go index cd39920ee1309..9525c7bcc3576 100644 --- a/cmd/trace-agent/run.go +++ b/cmd/trace-agent/run.go @@ -19,8 +19,8 @@ import ( cmdconfig "github.com/DataDog/datadog-agent/cmd/trace-agent/config" "github.com/DataDog/datadog-agent/cmd/trace-agent/internal/flags" "github.com/DataDog/datadog-agent/cmd/trace-agent/internal/osutil" - "github.com/DataDog/datadog-agent/pkg/api/security" coreconfig "github.com/DataDog/datadog-agent/pkg/config" + rc "github.com/DataDog/datadog-agent/pkg/config/remote" "github.com/DataDog/datadog-agent/pkg/pidfile" "github.com/DataDog/datadog-agent/pkg/tagger" "github.com/DataDog/datadog-agent/pkg/tagger/local" @@ -32,9 +32,9 @@ import ( tracelog "github.com/DataDog/datadog-agent/pkg/trace/log" "github.com/DataDog/datadog-agent/pkg/trace/metrics" "github.com/DataDog/datadog-agent/pkg/trace/metrics/timing" + "github.com/DataDog/datadog-agent/pkg/trace/telemetry" "github.com/DataDog/datadog-agent/pkg/trace/watchdog" "github.com/DataDog/datadog-agent/pkg/util" - "github.com/DataDog/datadog-agent/pkg/util/grpc" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/profiling" "github.com/DataDog/datadog-agent/pkg/version" @@ -85,6 +85,8 @@ func Run(ctx context.Context) { return } + telemetryCollector := telemetry.NewCollector(cfg) + if err := coreconfig.SetupLogger( coreconfig.LoggerName("TRACE"), coreconfig.Datadog.GetString("log_level"), @@ -94,6 +96,7 @@ func Run(ctx context.Context) { coreconfig.Datadog.GetBool("log_to_console"), coreconfig.Datadog.GetBool("log_format_json"), ); err != nil { + telemetryCollector.SendStartupError(telemetry.CantCreateLogger, err) osutil.Exitf("Cannot create logger: %v", err) } tracelog.SetLogger(corelogger{}) @@ -101,6 +104,7 @@ func Run(ctx context.Context) { if !cfg.Enabled { log.Info(messageAgentDisabled) + telemetryCollector.SendStartupError(telemetry.TraceAgentNotEnabled, fmt.Errorf("")) // a sleep is necessary to ensure that supervisor registers this process as "STARTED" // If the exit is "too quick", we enter a BACKOFF->FATAL loop even though this is an expected exit @@ -124,6 +128,7 @@ func Run(ctx context.Context) { if flags.PIDFilePath != "" { err := pidfile.WritePID(flags.PIDFilePath) if err != nil { + telemetryCollector.SendStartupError(telemetry.CantWritePIDFile, err) log.Criticalf("Error writing PID file, exiting: %v", err) os.Exit(1) } @@ -132,18 +137,20 @@ func Run(ctx context.Context) { defer os.Remove(flags.PIDFilePath) } - if err := util.SetupCoreDump(); err != nil { + if err := util.SetupCoreDump(coreconfig.Datadog); err != nil { log.Warnf("Can't setup core dumps: %v, core dumps might not be available after a crash", err) } - err = manager.ConfigureAutoExit(ctx) + err = manager.ConfigureAutoExit(ctx, coreconfig.Datadog) if err != nil { + telemetryCollector.SendStartupError(telemetry.CantSetupAutoExit, err) osutil.Exitf("Unable to configure auto-exit, err: %v", err) return } err = metrics.Configure(cfg, []string{"version:" + version.AgentVersion}) if err != nil { + telemetryCollector.SendStartupError(telemetry.CantConfigureDogstatsd, err) osutil.Exitf("cannot configure dogstatsd: %v", err) } defer metrics.Flush() @@ -188,17 +195,15 @@ func Run(ctx context.Context) { }() if coreconfig.Datadog.GetBool("remote_configuration.enabled") { - client, err := grpc.GetDDAgentSecureClient(context.Background()) + // Auth tokens are handled by the rcClient + rcClient, err := rc.NewAgentGRPCConfigFetcher() if err != nil { + telemetryCollector.SendStartupError(telemetry.CantCreateRCCLient, err) osutil.Exitf("could not instantiate the tracer remote config client: %v", err) } - token, err := security.FetchAuthToken() - if err != nil { - osutil.Exitf("could obtain the auth token for the tracer remote config client: %v", err) - } api.AttachEndpoint(api.Endpoint{ Pattern: "/v0.7/config", - Handler: func(r *api.HTTPReceiver) http.Handler { return remoteConfigHandler(r, client, token, cfg) }, + Handler: func(r *api.HTTPReceiver) http.Handler { return remoteConfigHandler(r, rcClient, cfg) }, }) } @@ -209,7 +214,7 @@ func Run(ctx context.Context) { }, }) - agnt := agent.NewAgent(ctx, cfg) + agnt := agent.NewAgent(ctx, cfg, telemetryCollector) log.Infof("Trace agent running on host %s", cfg.Hostname) if pcfg := profilingConfig(cfg); pcfg != nil { if err := profiling.Start(*pcfg); err != nil { @@ -219,6 +224,10 @@ func Run(ctx context.Context) { } defer profiling.Stop() } + go func() { + time.Sleep(time.Second * 30) + telemetryCollector.SendStartupSuccess() + }() agnt.Run() // collect memory profile diff --git a/cmd/trace-agent/test/doc.go b/cmd/trace-agent/test/doc.go index f3c45524d8bb4..6e561025b4281 100644 --- a/cmd/trace-agent/test/doc.go +++ b/cmd/trace-agent/test/doc.go @@ -10,14 +10,14 @@ // To use this package, start by instantiating a runner. It needs not be initialized and can // be used as is, for example: // -// // this runner is ready to use: -// var runner test.Runner +// // this runner is ready to use: +// var runner test.Runner // // Next, start the fake backend before running any tests: // -// if err := runner.Start(); err != nil { -// log.Fatal(err) -// } +// if err := runner.Start(); err != nil { +// log.Fatal(err) +// } // // Then, use `runner.RunAgent`, `runner.Post`, `runner.Out` and `runner.KillAgent` to run tests. // For a full demonstration, see the package example. diff --git a/cmd/trace-agent/test/testsuite/traces_test.go b/cmd/trace-agent/test/testsuite/traces_test.go index d601f84786503..c7bfcda5ab6f6 100644 --- a/cmd/trace-agent/test/testsuite/traces_test.go +++ b/cmd/trace-agent/test/testsuite/traces_test.go @@ -9,11 +9,12 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" + "github.com/DataDog/datadog-agent/cmd/trace-agent/test" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/pb" "github.com/DataDog/datadog-agent/pkg/trace/testutil" - "github.com/stretchr/testify/assert" ) // create a new config to access default config values diff --git a/comp/README.md b/comp/README.md index c5b8728941d5c..2a156f08cf741 100644 --- a/comp/README.md +++ b/comp/README.md @@ -23,3 +23,43 @@ Package flare implements a component to generate flares from the agent. ### [comp/core/log](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/core/log) Package log implements a component to handle logging internal to the agent. + +### [comp/core/sysprobeconfig](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/core/sysprobeconfig) + +*Datadog Team*: ebpf-platform + +Package sysprobeconfig implements a component to handle system-probe configuration. This +component temporarily wraps pkg/config. + +## [comp/process](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/process) (Component Bundle) + +*Datadog Team*: processes + +Package process implements the "process" bundle, providing components for the Process Agent + +### [comp/process/containercheck](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/process/containercheck) + +Package containercheck implements a component to handle Container data collection in the Process Agent. + +### [comp/process/processcheck](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/process/processcheck) + +Package processcheck implements a component to handle Process data collection in the Process Agent. + +### [comp/process/runner](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/process/runner) + +Package runner implements a component to run data collection checks in the Process Agent. + +### [comp/process/submitter](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/process/submitter) + +Package submitter implements a component to submit collected data in the Process Agent to +supported Datadog intakes. + +## [comp/systray](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/systray) (Component Bundle) + +*Datadog Team*: windows-agent + +Package systray implements the Datadog Agent Manager System Tray + +### [comp/systray/systray](https://pkg.go.dev/github.com/DataDog/dd-agent-comp-experiments/comp/systray/systray) + +Package systray diff --git a/comp/core/bundle.go b/comp/core/bundle.go index 513636d78d06c..1fdf21c2c643f 100644 --- a/comp/core/bundle.go +++ b/comp/core/bundle.go @@ -13,11 +13,13 @@ package core import ( + "go.uber.org/fx" + "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/flare" "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/comp/core/sysprobeconfig" "github.com/DataDog/datadog-agent/pkg/util/fxutil" - "go.uber.org/fx" ) // team: agent-shared-components @@ -30,6 +32,8 @@ var Bundle = fxutil.Bundle( fx.Provide(func(params BundleParams) log.Params { return params.LogParams }), log.Module, flare.Module, + fx.Provide(func(params BundleParams) sysprobeconfig.Params { return params.SysprobeConfigParams }), + sysprobeconfig.Module, ) // MockBundle defines the mock fx options for this bundle. @@ -38,4 +42,6 @@ var MockBundle = fxutil.Bundle( config.Module, fx.Provide(func(params BundleParams) log.Params { return params.LogParams }), log.Module, + fx.Provide(func(params BundleParams) sysprobeconfig.Params { return params.SysprobeConfigParams }), + sysprobeconfig.MockModule, ) diff --git a/comp/core/bundle_params.go b/comp/core/bundle_params.go index 1522577adda5e..573757a2cd20b 100644 --- a/comp/core/bundle_params.go +++ b/comp/core/bundle_params.go @@ -8,6 +8,7 @@ package core import ( "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/comp/core/sysprobeconfig" ) // BundleParams defines the parameters for this bundle. @@ -18,8 +19,10 @@ import ( // must be called. type BundleParams struct { ConfigParams + SysprobeConfigParams LogParams } type ConfigParams = config.Params type LogParams = log.Params +type SysprobeConfigParams = sysprobeconfig.Params diff --git a/comp/core/config/component.go b/comp/core/config/component.go index a0181788a4238..d1b0fc6b53afa 100644 --- a/comp/core/config/component.go +++ b/comp/core/config/component.go @@ -16,8 +16,6 @@ package config import ( - "time" - "go.uber.org/fx" "github.com/DataDog/datadog-agent/pkg/config" @@ -28,86 +26,7 @@ import ( // Component is the component type. type Component interface { - // IsSet determines whether the given config parameter is set. - // - // This includes values set in the config file, by environment variables, or with - // a default value. - IsSet(key string) bool - - // Get gets the underlying value of a config parameter, without conversion. - Get(key string) interface{} - - // GetString gets a string-typed config parameter value. - GetString(key string) string - - // GetBool gets an integer-typed config parameter value. - GetBool(key string) bool - - // GetInt gets an integer-typed config parameter value. - GetInt(key string) int - - // GetInt32 gets an int32 config parameter value. - GetInt32(key string) int32 - - // GetInt64 gets an int64 config parameter value. - GetInt64(key string) int64 - - // GetFloat64 gets an float64 config parameter value. - GetFloat64(key string) float64 - - // GetTime gets a time as a config parameter value. - GetTime(key string) time.Time - - // GetTime gets a duration as a config parameter value, parsing common suffixes. - // Bare integers are treated as nanoseconds. - GetDuration(key string) time.Duration - - // GetTime gets a slice of strings (represented as a list in the source YAML) - GetStringSlice(key string) []string - - // GetTime gets a slice of floats (represented as a list in the source - // YAML) as a config parameter value, returning an error if any of the - // values cannot be parsed - GetFloat64SliceE(key string) ([]float64, error) - - // GetStringMap gets a map (represented as an object in the source YAML) as - // a config parameter value. - GetStringMap(key string) map[string]interface{} - - // GetStringMapString gets a map (represented as an object in the source - // YAML) as a config parameter value, treating each value as a string. - GetStringMapString(key string) map[string]string - - // GetStringMapStringSlice gets a map (represented as an object in the source - // YAML) as a config parameter value, treating each value as a string slice - // (represented as an array in the source YAML). - GetStringMapStringSlice(key string) map[string][]string - - // GetSizeInBytes gets a size as a config parameter value, parsing common suffixes. - GetSizeInBytes(key string) uint - - // AllSettings merges all settings and returns them as a map[string]interface{}. - AllSettings() map[string]interface{} - - // AllSettingsWithoutDefault is like AllSettings but omits configuration that was - // applied based on defaults. - AllSettingsWithoutDefault() map[string]interface{} - - // AllKeys returns all keys holding a value, regardless of where they are - // set. Nested keys are returned with a v.keyDelim separator - AllKeys() []string - - // GetKnownKeys returns all the keys that meet at least one of these criteria: - // 1) have a default, 2) have an environment variable binded, 3) are an alias or 4) have been SetKnown() - GetKnownKeys() map[string]interface{} - - // GetEnvVars returns a list of the env vars that the config supports. - // These have had the EnvPrefix applied, as well as the EnvKeyReplacer. - GetEnvVars() []string - - // IsSectionSet checks if a given section is set by checking if any of - // its subkeys is set. - IsSectionSet(section string) bool + config.ConfigReader // Warnings returns config warnings collected during setup. Warnings() *config.Warnings @@ -116,9 +35,7 @@ type Component interface { // Mock implements mock-specific methods. type Mock interface { Component - - // Set sets the given config value - Set(key string, value interface{}) + config.ConfigWriter } // Module defines the fx options for this component. diff --git a/comp/core/config/config.go b/comp/core/config/config.go index 4fd7e81747ef1..d6ceb5c599d22 100644 --- a/comp/core/config/config.go +++ b/comp/core/config/config.go @@ -9,12 +9,10 @@ import ( "os" "strings" "testing" - "time" "go.uber.org/fx" secconfig "github.com/DataDog/datadog-agent/cmd/security-agent/config" - sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" "github.com/DataDog/datadog-agent/pkg/config" ) @@ -22,6 +20,7 @@ import ( type cfg struct { // this component is currently implementing a thin wrapper around pkg/config, // and uses globals in that package. + config.Config // warnings are the warnings generated during setup warnings *config.Warnings @@ -34,98 +33,20 @@ type dependencies struct { } func newConfig(deps dependencies) (Component, error) { - warnings, err := setupConfig( - deps.Params.confFilePath, - deps.Params.configName, - !deps.Params.configLoadSecrets, - !deps.Params.configMissingOK, - deps.Params.defaultConfPath) + warnings, err := setupConfig(deps) if err != nil { return nil, err } - if deps.Params.configLoadSysProbe { - _, err := sysconfig.Merge(deps.Params.sysProbeConfFilePath) - if err != nil { - return &cfg{warnings}, err - } - } - if deps.Params.configLoadSecurityAgent { if err := secconfig.Merge(deps.Params.securityAgentConfigFilePaths); err != nil { - return &cfg{warnings}, err + return &cfg{Config: config.Datadog, warnings: warnings}, err } } - return &cfg{warnings}, nil + return &cfg{Config: config.Datadog, warnings: warnings}, nil } -func (c *cfg) IsSet(key string) bool { - return config.Datadog.IsSet(key) -} -func (c *cfg) Get(key string) interface{} { - return config.Datadog.Get(key) -} -func (c *cfg) GetString(key string) string { - return config.Datadog.GetString(key) -} -func (c *cfg) GetBool(key string) bool { - return config.Datadog.GetBool(key) -} -func (c *cfg) GetInt(key string) int { - return config.Datadog.GetInt(key) -} -func (c *cfg) GetInt32(key string) int32 { - return config.Datadog.GetInt32(key) -} -func (c *cfg) GetInt64(key string) int64 { - return config.Datadog.GetInt64(key) -} -func (c *cfg) GetFloat64(key string) float64 { - return config.Datadog.GetFloat64(key) -} -func (c *cfg) GetTime(key string) time.Time { - return config.Datadog.GetTime(key) -} -func (c *cfg) GetDuration(key string) time.Duration { - return config.Datadog.GetDuration(key) -} -func (c *cfg) GetStringSlice(key string) []string { - return config.Datadog.GetStringSlice(key) -} -func (c *cfg) GetFloat64SliceE(key string) ([]float64, error) { - return config.Datadog.GetFloat64SliceE(key) -} -func (c *cfg) GetStringMap(key string) map[string]interface{} { - return config.Datadog.GetStringMap(key) -} -func (c *cfg) GetStringMapString(key string) map[string]string { - return config.Datadog.GetStringMapString(key) -} -func (c *cfg) GetStringMapStringSlice(key string) map[string][]string { - return config.Datadog.GetStringMapStringSlice(key) -} -func (c *cfg) GetSizeInBytes(key string) uint { - return config.Datadog.GetSizeInBytes(key) -} -func (c *cfg) AllSettings() map[string]interface{} { - return config.Datadog.AllSettings() -} -func (c *cfg) AllSettingsWithoutDefault() map[string]interface{} { - return config.Datadog.AllSettingsWithoutDefault() -} -func (c *cfg) AllKeys() []string { - return config.Datadog.AllKeys() -} -func (c *cfg) GetKnownKeys() map[string]interface{} { - return config.Datadog.GetKnownKeys() -} -func (c *cfg) GetEnvVars() []string { - return config.Datadog.GetEnvVars() -} -func (c *cfg) IsSectionSet(section string) bool { - return config.Datadog.IsSectionSet(section) -} func (c *cfg) Warnings() *config.Warnings { return c.warnings } @@ -162,7 +83,3 @@ func newMock(deps dependencies, t testing.TB) Component { return c } - -func (c *cfg) Set(key string, value interface{}) { - config.Datadog.Set(key, value) -} diff --git a/comp/core/config/params.go b/comp/core/config/params.go index b8bba0b776f90..6d2ae4c5cbcd2 100644 --- a/comp/core/config/params.go +++ b/comp/core/config/params.go @@ -19,15 +19,6 @@ type Params struct { // "datadog". configName string - // sysProbeConfFilePath is the path at which to look for system-probe - // configuration, usually given by --sysprobecfgpath. This is not used - // unless ConfigLoadSysProbe is true. - sysProbeConfFilePath string - - // ConfigLoadSysProbe determines whether to read the system-probe.yaml into - // the component's config data. - configLoadSysProbe bool - // securityAgentConfigFilePaths are the paths at which to look for security-aegnt // configuration, usually given by the --cfgpath command-line flag. securityAgentConfigFilePaths []string @@ -79,9 +70,24 @@ func newAgentParams(confFilePath string, configLoadSecrets bool, options ...func // NewSecurityAgentParams creates a new instance of Params for the Security Agent. func NewSecurityAgentParams(securityAgentConfigFilePaths []string, options ...func(*Params)) Params { - params := NewParams("", options...) - params.securityAgentConfigFilePaths = securityAgentConfigFilePaths + params := NewParams(common.DefaultConfPath, options...) + + // By default, we load datadog.yaml and then merge security-agent.yaml + if len(securityAgentConfigFilePaths) > 0 { + params.confFilePath = securityAgentConfigFilePaths[0] // Default: datadog.yaml + params.securityAgentConfigFilePaths = securityAgentConfigFilePaths[1:] // Default: security-agent.yaml + } params.configLoadSecurityAgent = true + + params.configLoadSecrets = true + params.configMissingOK = false + return params +} + +func NewClusterAgentParams(configFilePath string, options ...func(*Params)) Params { + params := NewParams(common.DefaultConfPath, options...) + params.confFilePath = configFilePath + params.configName = "datadog-cluster" return params } @@ -97,12 +103,6 @@ func WithConfigMissingOK(v bool) func(*Params) { } } -func WithConfigLoadSysProbe(v bool) func(*Params) { - return func(b *Params) { - b.configLoadSysProbe = v - } -} - func WithSecurityAgentConfigFilePaths(securityAgentConfigFilePaths []string) func(*Params) { return func(b *Params) { b.securityAgentConfigFilePaths = securityAgentConfigFilePaths @@ -127,12 +127,6 @@ func WithConfigLoadSecrets(configLoadSecrets bool) func(*Params) { } } -func WithSysProbeConfFilePath(sysProbeConfFilePath string) func(*Params) { - return func(b *Params) { - b.sysProbeConfFilePath = sysProbeConfFilePath - } -} - // These functions are used in unit tests. // ConfigLoadSecrets determines whether secrets in the configuration file @@ -146,9 +140,3 @@ func (p Params) ConfigLoadSecrets() bool { func (p Params) ConfigMissingOK() bool { return p.configMissingOK } - -// ConfigLoadSysProbe determines whether to read the system-probe.yaml into -// the component's config data. -func (p Params) ConfigLoadSysProbe() bool { - return p.configLoadSysProbe -} diff --git a/comp/core/config/params_test.go b/comp/core/config/params_test.go new file mode 100644 index 0000000000000..a349d19574958 --- /dev/null +++ b/comp/core/config/params_test.go @@ -0,0 +1,54 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package config + +import ( + "github.com/DataDog/datadog-agent/cmd/agent/common" + "github.com/stretchr/testify/require" + "testing" +) + +func TestNewSecurityAgentParams(t *testing.T) { + tests := []struct { + name string + input []string + check func(params Params) + }{ + { + name: "no security agent config file paths", + input: []string{}, + check: func(params Params) { + require.Equal(t, "", params.confFilePath) + require.Equal(t, []string{}, params.securityAgentConfigFilePaths, "Security Agent Config File Paths not matching") + }, + }, + { + name: "1 security agent config file path", + input: []string{"/etc/datadog-agent/security-agent.yaml"}, + check: func(params Params) { + require.Equal(t, "/etc/datadog-agent/security-agent.yaml", params.confFilePath) + require.Equal(t, []string{"/etc/datadog-agent/security-agent.yaml"}, params.securityAgentConfigFilePaths, "Security Agent config file paths not matching") + }, + }, + { + name: "more than 1 security agent config file paths", + input: []string{"/etc/datadog-agent/security-agent.yaml", "/etc/datadog-agent/other.yaml"}, + check: func(params Params) { + require.Equal(t, "/etc/datadog-agent/security-agent.yaml", params.confFilePath) + require.Equal(t, []string{"/etc/datadog-agent/security-agent.yaml"}, params.securityAgentConfigFilePaths, "Security Agent config file paths not matching") + }, + }, + } + + for _, test := range tests { + configComponentParams := NewSecurityAgentParams(test.input) + + require.Equal(t, true, configComponentParams.configLoadSecurityAgent, "configLoadSecurityAgent values not matching") + require.Equal(t, common.DefaultConfPath, configComponentParams.defaultConfPath, "defaultConfPath values not matching") + require.Equal(t, true, configComponentParams.configLoadSecrets, "configLoadSecrets values not matching") + require.Equal(t, false, configComponentParams.configMissingOK, "configMissingOK values not matching") + } +} diff --git a/comp/core/config/setup.go b/comp/core/config/setup.go index 1631d2e055cfd..3eeec584f1464 100644 --- a/comp/core/config/setup.go +++ b/comp/core/config/setup.go @@ -8,26 +8,26 @@ package config import ( "errors" "fmt" + "github.com/DataDog/viper" "io/fs" - "os" "runtime" "strings" - "github.com/DataDog/viper" - "github.com/DataDog/datadog-agent/pkg/config" ) // setupConfig is copied from cmd/agent/common/helpers.go. -func setupConfig( - confFilePath string, - configName string, - withoutSecrets bool, - failOnMissingFile bool, - defaultConfPath string) (*config.Warnings, error) { +func setupConfig(deps dependencies) (*config.Warnings, error) { + confFilePath := deps.Params.confFilePath + configName := deps.Params.configName + withoutSecrets := !deps.Params.configLoadSecrets + failOnMissingFile := !deps.Params.configMissingOK + defaultConfPath := deps.Params.defaultConfPath + if configName != "" { config.Datadog.SetConfigName(configName) } + // set the paths where a config file is expected if len(confFilePath) != 0 { // if the configuration file path was supplied on the command line, @@ -68,55 +68,3 @@ func setupConfig( } return warnings, nil } - -// MergeConfigurationFiles reads an array of configuration filenames and attempts to merge them. The userDefined value is used to specify that configurationFilesArray contains filenames defined on the command line -// TODO(paulcacheux): change this a component method once all security-agent commands have been converted to fx -func MergeConfigurationFiles(configName string, configurationFilesArray []string, userDefined bool) (*config.Warnings, error) { - // we'll search for a config file named `datadog.yaml` - config.Datadog.SetConfigName(configName) - - // Track if a configuration file was loaded - loadedConfiguration := false - - var warnings *config.Warnings - - // Load and merge configuration files - for _, configurationFilename := range configurationFilesArray { - if _, err := os.Stat(configurationFilename); err != nil { - if userDefined { - fmt.Printf("Warning: unable to access %s\n", configurationFilename) - } - continue - } - if !loadedConfiguration { - w, err := setupConfig(configurationFilename, "", false, true, "") - if err != nil { - if userDefined { - fmt.Printf("Warning: unable to open %s\n", configurationFilename) - } - continue - } - warnings = w - loadedConfiguration = true - } else { - file, err := os.Open(configurationFilename) - if err != nil { - if userDefined { - fmt.Printf("Warning: unable to open %s\n", configurationFilename) - } - continue - } - - err = config.Datadog.MergeConfig(file) - if err != nil { - return warnings, fmt.Errorf("unable to merge a configuration file: %v", err) - } - } - } - - if !loadedConfiguration { - return warnings, fmt.Errorf("unable to load any configuration file from %s", configurationFilesArray) - } - - return warnings, nil -} diff --git a/comp/core/flare/helpers/builder.go b/comp/core/flare/helpers/builder.go index 0ce667f9cd222..ab6181fa14705 100644 --- a/comp/core/flare/helpers/builder.go +++ b/comp/core/flare/helpers/builder.go @@ -14,6 +14,7 @@ import ( "strings" "time" + "github.com/DataDog/datadog-agent/pkg/util/filesystem" "github.com/DataDog/datadog-agent/pkg/util/hostname" "github.com/DataDog/datadog-agent/pkg/util/hostname/validate" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -21,6 +22,10 @@ import ( "github.com/mholt/archiver/v3" ) +const ( + filePerm = 0644 +) + func newBuilder(root string, hostname string) (*builder, error) { fb := &builder{ tmpDir: root, @@ -58,7 +63,7 @@ func newBuilder(root string, hostname string) (*builder, error) { return nil, err } - f, err := os.OpenFile(logPath, os.O_CREATE|os.O_WRONLY, os.ModePerm) + f, err := os.OpenFile(logPath, os.O_CREATE|os.O_WRONLY, filePerm) if err != nil { return nil, fmt.Errorf("Could not create flare_creation.log file: %s", err) } @@ -84,6 +89,15 @@ func NewFlareBuilder() (FlareBuilder, error) { } hostname = validate.CleanHostnameDir(hostname) + fperm, err := filesystem.NewPermission() + if err != nil { + return nil, err + } + err = fperm.RemoveAccessToOtherUsers(tmpDir) + if err != nil { + return nil, err + } + return newBuilder(tmpDir, hostname) } @@ -121,15 +135,30 @@ func (fb *builder) Save() (string, error) { _ = fb.AddFileFromFunc("permissions.log", fb.permsInfos.commit) _ = fb.logFile.Close() - archivePath := filepath.Join(os.TempDir(), getArchiveName()) + archiveName := getArchiveName() + archiveTmpPath := filepath.Join(fb.tmpDir, archiveName) + archiveFinalPath := filepath.Join(os.TempDir(), archiveName) + + // We first create the archive in our fb.tmpDir directory which is only readable by the current user (and + // SYSTEM/ADMIN on Windows). Then we retrict the archive permissions before moving it to the system temporary + // directory. This prevents other users from being able to read local flares. // File format is determined based on archivePath extension, so zip - err := archiver.Archive([]string{fb.flareDir}, archivePath) + err := archiver.Archive([]string{fb.flareDir}, archiveTmpPath) + if err != nil { + return "", err + } + + fperm, err := filesystem.NewPermission() + if err != nil { + return "", err + } + err = fperm.RemoveAccessToOtherUsers(archiveTmpPath) if err != nil { return "", err } - return archivePath, nil + return archiveFinalPath, os.Rename(archiveTmpPath, archiveFinalPath) } func (fb *builder) clean() { @@ -162,7 +191,7 @@ func (fb *builder) AddFile(destFile string, content []byte) error { return err } - if err := os.WriteFile(f, content, os.ModePerm); err != nil { + if err := os.WriteFile(f, content, filePerm); err != nil { return fb.logError("error writing data to '%s': %s", destFile, err) } return nil @@ -189,7 +218,7 @@ func (fb *builder) copyFileTo(shouldScrub bool, srcFile string, destFile string) } } - err = os.WriteFile(path, content, os.ModePerm) + err = os.WriteFile(path, content, filePerm) if err != nil { return fb.logError("error writing file '%s': %s", destFile, err) } diff --git a/comp/core/flare/helpers/helpers.go b/comp/core/flare/helpers/helpers.go index 916f4dafb8b16..b34586ca68cf4 100644 --- a/comp/core/flare/helpers/helpers.go +++ b/comp/core/flare/helpers/helpers.go @@ -50,9 +50,6 @@ type FlareBuilder interface { // CopyFile copies the content of 'srcFile' to the root of the flare. // - // 'destFile' is a path relative to the flare root (ex: "some/path/to/a/file"). Any necessary directory will - // automatically be created. - // // The data is automatically scrubbed of any sensitive informations before being copied. // // Example: CopyFile("/etc/datadog/datadog.yaml") will create a copy of "/etc/datadog/datadog.yaml", named @@ -75,7 +72,7 @@ type FlareBuilder interface { // The path for each file in 'srcDir' is passed to the 'shouldInclude' callback. If 'shouldInclude' returns true, the // file is copies to the flare. If not, the file is ignored. // - // 'destFile' is a path relative to the flare root (ex: "some/path/to/a/dir"). + // 'destDir' is a path relative to the flare root (ex: "some/path/to/a/dir"). // // The data of each copied file is automatically scrubbed of any sensitive informations before being copied. // @@ -88,7 +85,7 @@ type FlareBuilder interface { // The path for each file in 'srcDir' is passed to the 'shouldInclude' callback. If 'shouldInclude' returns true, the // file is copies to the flare. If not, the file is ignored. // - // 'destFile' is a path relative to the flare root (ex: "some/path/to/a/dir"). + // 'destDir' is a path relative to the flare root (ex: "some/path/to/a/dir"). // // The data of each copied file is NOT scrubbed of any sensitive informations before being copied. Only files // already scrubbed should be added in this way (ex: agent logs that are scrubbed at creation). diff --git a/comp/core/flare/helpers/perm_info_win.go b/comp/core/flare/helpers/perm_info_win.go index 11cdfdafd7adf..5c7560c0f466e 100644 --- a/comp/core/flare/helpers/perm_info_win.go +++ b/comp/core/flare/helpers/perm_info_win.go @@ -8,13 +8,261 @@ package helpers +import ( + "fmt" + "os" + "path" + "strings" + "unsafe" + + "github.com/DataDog/datadog-agent/pkg/util/winutil" + "golang.org/x/sys/windows" +) + // filePermsInfo represents file rights on windows. -type filePermsInfo struct{} +type aclInfo struct { + userName string + deny string + aceFlags string + accessMask string + aceFlagsNum uint8 + accessMaskNum uint32 + err error +} + +type filePermsInfo struct { + path string + mode string + acls []*aclInfo + err error +} + +const ( + DD_FILE_READ = (windows.FILE_READ_DATA | windows.FILE_READ_ATTRIBUTES | windows.FILE_READ_EA) + DD_FILE_WRITE = (windows.FILE_WRITE_DATA | windows.FILE_WRITE_ATTRIBUTES | windows.FILE_WRITE_EA | windows.FILE_APPEND_DATA) + DD_FILE_READ_EXEC = (DD_FILE_READ | windows.FILE_EXECUTE) + DD_FILE_READ_EXEC_WRITE = (DD_FILE_READ_EXEC | DD_FILE_WRITE) + DD_FILE_MODIFY = (DD_FILE_READ_EXEC_WRITE | windows.DELETE) + DD_FILE_FULL = (windows.STANDARD_RIGHTS_REQUIRED | windows.SYNCHRONIZE | 0x1FF) +) + +func getFileDacl(fileName string) (*winutil.Acl, winutil.AclSizeInformation, error) { + var aclInfo winutil.AclSizeInformation + var fileDacl *winutil.Acl + err := winutil.GetNamedSecurityInfo(fileName, + winutil.SE_FILE_OBJECT, + winutil.DACL_SECURITY_INFORMATION, + nil, + nil, + &fileDacl, + nil, + nil) + if err != nil { + return nil, aclInfo, fmt.Errorf("cannot get security info for file '%s', error `%s`", fileName, err) + } + + err = winutil.GetAclInformation(fileDacl, &aclInfo, winutil.AclSizeInformationEnum) + if err != nil { + return nil, aclInfo, fmt.Errorf("cannot get acl info for file '%s', error `%s`", fileName, err) + } + + return fileDacl, aclInfo, err +} + +// Currently we are supporting most common ACE types (denied and allowed) +// more could be added in the future +// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-ace_header +// https://learn.microsoft.com/en-us/windows/win32/secauthz/ace +// ACCESS_ALLOWED_ACE and ACCESS_DENIED_ACE are the same and we can use winutil.AccessAllowedAce +// and quickly bailout if other ACE type is used. We may extend it in the future +func getAce(fileName string, acl *winutil.Acl, idx uint32) (*winutil.AccessAllowedAce, error) { + var ace *winutil.AccessAllowedAce + if err := winutil.GetAce(acl, idx, &ace); err != nil { + return nil, fmt.Errorf("could not query a ACE on '%s': %s", fileName, err) + } + + if ace.AceType != winutil.ACCESS_DENIED_ACE_TYPE && + ace.AceType != winutil.ACCESS_ALLOWED_ACE_TYPE { + return nil, fmt.Errorf("unsupported AceType '%s': %x", fileName, ace.AceType) + } + + return ace, nil +} + +func sidToUserName(sid *windows.SID) string { + user, domain, _, err := sid.LookupAccount("") + if err == nil { + if len(domain) > 0 { + return fmt.Sprintf("%s\\%s", domain, user) + } + + return user + } + + return sid.String() +} + +// This function attempts to generate the same rights abbreviation as built-in icacls.exe (when +// icacls.exe runs without arguments it will generate abbreviations legend). Compatibility is +// not complete, e.g. no attempts to interpret directory rights, however numeric values of mask +// are reported. More details can be found here +// https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/icacls +func accessMaskToStr(m uint32) string { + if (m & DD_FILE_FULL) == DD_FILE_FULL { + return "(F)" + } + if (m & DD_FILE_MODIFY) == DD_FILE_MODIFY { + return "(M)" + } + if (m & DD_FILE_READ_EXEC_WRITE) == DD_FILE_READ_EXEC_WRITE { + return "(RX,W)" + } + if (m & DD_FILE_READ_EXEC) == DD_FILE_READ_EXEC { + return "(RX)" + } + if (m & DD_FILE_WRITE) == DD_FILE_WRITE { + return "(W)" + } + if m == windows.GENERIC_ALL { + return "(F)" + } + if m&(windows.GENERIC_READ|windows.GENERIC_WRITE|windows.GENERIC_EXECUTE) != 0 { + rights := make([]string, 0, 3) + if (m & windows.GENERIC_READ) == windows.GENERIC_READ { + rights = append(rights, "GR") + } + if (m & windows.GENERIC_WRITE) == windows.GENERIC_WRITE { + rights = append(rights, "GW") + } + if (m & windows.GENERIC_EXECUTE) == windows.GENERIC_EXECUTE { + rights = append(rights, "GE") + } + return fmt.Sprintf("(%s)", strings.Join(rights, ",")) + } + + return "" +} -func (p permissionsInfos) add(filePath string) error { - return nil +// This function attempts to generate the same rights abbreviation as built-in icacls.exe (when +// icacls.exe runs without arguments it will generate abbreviations legend). Numeric values of flags +// are reported. More details can be found here +// https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/icacls +func accessFlagToStr(f uint8) string { + if (f & windows.OBJECT_INHERIT_ACE) == windows.OBJECT_INHERIT_ACE { + return "(OI)" + } + if (f & windows.CONTAINER_INHERIT_ACE) == windows.CONTAINER_INHERIT_ACE { + return "(CI)" + } + if (f & windows.NO_PROPAGATE_INHERIT_ACE) == windows.NO_PROPAGATE_INHERIT_ACE { + return "(NP)" + } + if (f & windows.INHERIT_ONLY_ACE) == windows.INHERIT_ONLY_ACE { + return "(IO)" + } + if (f & windows.INHERITED_ACE) == windows.INHERITED_ACE { + return "(I)" + } + + return "" +} + +func denyToStr(aceType uint8) string { + if aceType == winutil.ACCESS_DENIED_ACE_TYPE { + return "(DENY)" + } + + return "" +} + +func (p permissionsInfos) addAgentExeFiles() { + // Get Datadog bin directory (optional if err) + installDir, err := winutil.GetProgramFilesDirForProduct("DataDog Agent") + if err == nil { + p.add(path.Join(installDir, "bin", "agent.exe")) + p.add(path.Join(installDir, "bin", "Agent", "ddtray.exe")) + p.add(path.Join(installDir, "bin", "Agent", "process-agent.exe")) + p.add(path.Join(installDir, "bin", "Agent", "system-probe.exe")) + p.add(path.Join(installDir, "bin", "Agent", "trace-agent.exe")) + } } +func (p permissionsInfos) add(filePath string) { + info := filePermsInfo{ + path: filePath, + } + p[filePath] = &info + + fi, err := os.Stat(filePath) + if err != nil { + info.err = fmt.Errorf("could not stat file %s. error: %s", filePath, err) + return + } + info.mode = fi.Mode().String() + + fileDacl, aclSizeInfo, err := getFileDacl(info.path) + if err != nil { + info.err = err + return + } + + info.acls = make([]*aclInfo, 0, aclSizeInfo.AceCount) + for i := uint32(0); i < aclSizeInfo.AceCount; i++ { + acl := aclInfo{} + info.acls = append(info.acls, &acl) + + ace, err := getAce(info.path, fileDacl, i) + if err != nil { + info.err = err + continue + } + + acl.userName = sidToUserName((*windows.SID)(unsafe.Pointer(&ace.SidStart))) + acl.deny = denyToStr(ace.AceType) + acl.aceFlags = accessFlagToStr(ace.AceFlags) + acl.aceFlagsNum = ace.AceFlags + acl.accessMask = accessMaskToStr(ace.AccessMask) + acl.accessMaskNum = ace.AccessMask + } +} + +// Commit resolves the infos of every stacked files in the map +// and then writes the permissions.log file on the filesystem. func (p permissionsInfos) commit() ([]byte, error) { - return nil, nil + + var sb strings.Builder + + // These files are not explicitly copied but their privileges are "interesting" + p.addAgentExeFiles() + + for _, info := range p { + sb.WriteString("File: ") + sb.WriteString(info.path) + sb.WriteString("\n------------------\n") + if info.err != nil { + sb.WriteString(info.err.Error()) + sb.WriteString("\n\n") + continue + } + + sb.WriteString("Mode: ") + sb.WriteString(info.mode) + sb.WriteString("\n") + + for _, acl := range info.acls { + if acl.err != nil { + sb.WriteString(acl.err.Error()) + sb.WriteString("\n") + continue + } + + sb.WriteString(fmt.Sprintf("%s: %s%s%s [flags:0x%x, mask:0x%x]\n", + acl.userName, acl.deny, acl.aceFlags, acl.accessMask, + acl.aceFlagsNum, acl.accessMaskNum)) + } + + sb.WriteString("\n") + } + + return []byte(sb.String()), nil } diff --git a/comp/core/flare/helpers/perm_info_win_test.go b/comp/core/flare/helpers/perm_info_win_test.go index b81e8e3add962..1b27cb0d61141 100644 --- a/comp/core/flare/helpers/perm_info_win_test.go +++ b/comp/core/flare/helpers/perm_info_win_test.go @@ -9,18 +9,74 @@ package helpers import ( + "os" + "path/filepath" + "regexp" "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) -// Test that addParentPerms does not loop on Windows. -func TestPermissionsInfosAddWindows(t *testing.T) { - permsInfos := make(permissionsInfos) - expectedParentPerms := map[string]filePermsInfo{} +func createPermsTestFile(t *testing.T) (string, string, string) { + tempDir := t.TempDir() - // Basic Case - path := "C:\\a\\b\\c\\d" - permsInfos.Add(path) - assert.NotContains(t, permsInfos, path) + f1 := filepath.Join(tempDir, "file1") + f2 := filepath.Join(tempDir, "file2") + f3 := filepath.Join(tempDir, "file3") + + os.WriteFile(f1, nil, 0666) + os.WriteFile(f2, nil, 0444) + + return f1, f2, f3 +} + +func TestPermsFileAdd(t *testing.T) { + f1, f2, f3 := createPermsTestFile(t) + + pi := permissionsInfos{} + pi.add(f1) + pi.add(f2) + pi.add(f3) + + require.Len(t, pi, 3) + + assert.Equal(t, f1, pi[f1].path) + assert.Equal(t, "-rw-rw-rw-", pi[f1].mode) + assert.NotNil(t, pi[f1].acls) + assert.LessOrEqual(t, 1, len(pi[f1].acls)) + assert.NotEmpty(t, pi[f1].acls[0].userName) + assert.NotEmpty(t, pi[f1].acls[0].accessMask) + + assert.Equal(t, f2, pi[f2].path) + assert.Equal(t, "-r--r--r--", pi[f2].mode) + assert.NotNil(t, pi[f2].acls) + assert.LessOrEqual(t, 1, len(pi[f2].acls)) + assert.NotEmpty(t, pi[f2].acls[0].userName) + assert.NotEmpty(t, pi[f2].acls[0].accessMask) + + assert.Equal(t, f3, pi[f3].path) + assert.Empty(t, pi[f3].mode) + assert.NotNil(t, pi[f3].err) + assert.Nil(t, pi[f3].acls) +} + +func TestPermsFileCommit(t *testing.T) { + f1, f2, f3 := createPermsTestFile(t) + + pi := permissionsInfos{} + pi.add(f1) + pi.add(f2) + pi.add(f3) + + // No error + b, err := pi.commit() + require.NoError(t, err) + + res, _ := regexp.Match("\nFile: C:\\\\.+\\\\file1\n", b) + assert.True(t, res) + res, _ = regexp.Match("\nFile: C:\\\\.+\\\\file2\n", b) + assert.True(t, res) + res, _ = regexp.Match("\ncould not stat file.+C:\\\\.+\\\\file3", b) + assert.True(t, res) } diff --git a/comp/core/log/logger.go b/comp/core/log/logger.go index fcfe3416671b6..1cb2ad8d226bd 100644 --- a/comp/core/log/logger.go +++ b/comp/core/log/logger.go @@ -6,11 +6,13 @@ package log import ( + "context" "errors" "github.com/DataDog/datadog-agent/comp/core/config" pkgconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/util/log" + "go.uber.org/fx" ) // logger implements the component @@ -19,7 +21,7 @@ type logger struct { // pkg/util/log, and uses globals in that package. } -func newLogger(params Params, config config.Component) (Component, error) { +func newLogger(lc fx.Lifecycle, params Params, config config.Component) (Component, error) { if params.logLevelFn == nil { return nil, errors.New("must call one of core.BundleParams.LogForOneShot or LogForDaemon") } @@ -34,7 +36,14 @@ func newLogger(params Params, config config.Component) (Component, error) { if err != nil { return nil, err } - return &logger{}, nil + + logger := &logger{} + lc.Append(fx.Hook{OnStop: func(context.Context) error { + logger.Flush() + return nil + }}) + + return logger, nil } // Trace implements Component#Trace. diff --git a/comp/core/sysprobeconfig/component.go b/comp/core/sysprobeconfig/component.go new file mode 100644 index 0000000000000..edd57b9d96550 --- /dev/null +++ b/comp/core/sysprobeconfig/component.go @@ -0,0 +1,51 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package sysprobeconfig implements a component to handle system-probe configuration. This +// component temporarily wraps pkg/config. +// +// This component initializes pkg/config based on the bundle params, and +// will return the same results as that package. This is to support migration +// to a component architecture. When no code still uses pkg/config, that +// package will be removed. +// +// The mock component does nothing at startup, beginning with an empty config. +// It also overwrites the pkg/config.SystemProbe for the duration of the test. +package sysprobeconfig + +import ( + "go.uber.org/fx" + + sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" + "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +// team: ebpf-platform + +// Component is the component type. +type Component interface { + config.ConfigReader + + // Warnings returns config warnings collected during setup. + Warnings() *config.Warnings + + Object() *sysconfig.Config +} + +// Mock implements mock-specific methods. +type Mock interface { + Component +} + +// Module defines the fx options for this component. +var Module = fxutil.Component( + fx.Provide(newConfig), +) + +// MockModule defines the fx options for the mock component. +var MockModule = fxutil.Component( + fx.Provide(newMock), +) diff --git a/comp/core/sysprobeconfig/config.go b/comp/core/sysprobeconfig/config.go new file mode 100644 index 0000000000000..a97e1c7e4b223 --- /dev/null +++ b/comp/core/sysprobeconfig/config.go @@ -0,0 +1,85 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package sysprobeconfig + +import ( + "os" + "strings" + "testing" + + "go.uber.org/fx" + + sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" + "github.com/DataDog/datadog-agent/pkg/config" +) + +// cfg implements the Component. +type cfg struct { + // this component is currently implementing a thin wrapper around pkg/config, + // and uses globals in that package. + config.Config + + syscfg *sysconfig.Config + + // warnings are the warnings generated during setup + warnings *config.Warnings +} + +type dependencies struct { + fx.In + + Params Params +} + +func newConfig(deps dependencies) (Component, error) { + syscfg, err := setupConfig(deps) + if err != nil { + return nil, err + } + + return &cfg{Config: config.SystemProbe, syscfg: syscfg}, nil +} + +func (c *cfg) Warnings() *config.Warnings { + return c.warnings +} + +func (c *cfg) Object() *sysconfig.Config { + return c.syscfg +} + +func newMock(deps dependencies, t testing.TB) Component { + old := config.SystemProbe + config.SystemProbe = config.NewConfig("mock", "XXXX", strings.NewReplacer()) + c := &cfg{ + warnings: &config.Warnings{}, + } + + // call InitSystemProbeConfig to set defaults. + config.InitSystemProbeConfig(config.SystemProbe) + + // Viper's `GetXxx` methods read environment variables at the time they are + // called, if those names were passed explicitly to BindEnv*(), so we must + // also strip all `DD_` environment variables for the duration of the test. + oldEnv := os.Environ() + for _, kv := range oldEnv { + if strings.HasPrefix(kv, "DD_") { + kvslice := strings.SplitN(kv, "=", 2) + os.Unsetenv(kvslice[0]) + } + } + t.Cleanup(func() { + for _, kv := range oldEnv { + kvslice := strings.SplitN(kv, "=", 2) + os.Setenv(kvslice[0], kvslice[1]) + } + }) + + // swap the existing config back at the end of the test. + t.Cleanup(func() { config.SystemProbe = old }) + + return c +} diff --git a/comp/core/sysprobeconfig/params.go b/comp/core/sysprobeconfig/params.go new file mode 100644 index 0000000000000..8ca311961e19d --- /dev/null +++ b/comp/core/sysprobeconfig/params.go @@ -0,0 +1,28 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package sysprobeconfig + +// Params defines the parameters for the sysprobeconfig component. +type Params struct { + // sysProbeConfFilePath is the path at which to look for configuration, usually + // given by the --sysprobecfgpath command-line flag. + sysProbeConfFilePath string +} + +// NewParams creates a new instance of Params +func NewParams(options ...func(*Params)) Params { + params := Params{} + for _, o := range options { + o(¶ms) + } + return params +} + +func WithSysProbeConfFilePath(confFilePath string) func(*Params) { + return func(b *Params) { + b.sysProbeConfFilePath = confFilePath + } +} diff --git a/cmd/agent/common/system_probe_config_helper.go b/comp/core/sysprobeconfig/setup.go similarity index 55% rename from cmd/agent/common/system_probe_config_helper.go rename to comp/core/sysprobeconfig/setup.go index 9dd05781c7a04..4076f47976236 100644 --- a/cmd/agent/common/system_probe_config_helper.go +++ b/comp/core/sysprobeconfig/setup.go @@ -3,17 +3,13 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build process -// +build process - -package common +package sysprobeconfig import ( sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" ) -// SetupSystemProbeConfig reads the system-probe.yaml into the global config object -func SetupSystemProbeConfig(sysProbeConfFilePath string) error { - _, err := sysconfig.Merge(sysProbeConfFilePath) - return err +func setupConfig(deps dependencies) (*sysconfig.Config, error) { + confFilePath := deps.Params.sysProbeConfFilePath + return sysconfig.New(confFilePath) } diff --git a/comp/process/bundle.go b/comp/process/bundle.go new file mode 100644 index 0000000000000..4fd026dd3113c --- /dev/null +++ b/comp/process/bundle.go @@ -0,0 +1,30 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package process implements the "process" bundle, providing components for the Process Agent +// +// The constituent components serve as utilities and are mostly independent of +// one another. Other components should depend on any components they need. +// +// This bundle does not depend on any other bundles. +package process + +import ( + "github.com/DataDog/datadog-agent/comp/process/containercheck" + "github.com/DataDog/datadog-agent/comp/process/processcheck" + "github.com/DataDog/datadog-agent/comp/process/runner" + "github.com/DataDog/datadog-agent/comp/process/submitter" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +// team: processes + +// Bundle defines the fx options for this bundle. +var Bundle = fxutil.Bundle( + runner.Module, + submitter.Module, + processcheck.Module, + containercheck.Module, +) diff --git a/comp/process/bundle_test.go b/comp/process/bundle_test.go new file mode 100644 index 0000000000000..c10f8729ce6df --- /dev/null +++ b/comp/process/bundle_test.go @@ -0,0 +1,48 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package process + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/comp/process/runner" + "github.com/DataDog/datadog-agent/comp/process/submitter" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +func TestBundleDependencies(t *testing.T) { + require.NoError(t, fx.ValidateApp( + // instantiate all of the process components, since this is not done + // automatically. + fx.Invoke(func(r runner.Component) {}), + fx.Invoke(func(r submitter.Component) {}), + Bundle)) +} + +func TestBundleOneShot(t *testing.T) { + runCmd := func(r runner.Component) { + checks := r.GetChecks() + require.Len(t, checks, 2) + + names := []string{} + for _, c := range checks { + require.True(t, c.IsEnabled()) + names = append(names, c.Name()) + } + require.ElementsMatch(t, []string{"process", "container"}, names) + + require.NoError(t, r.Run(context.TODO())) + } + + err := fxutil.OneShot(runCmd, + Bundle, + ) + require.NoError(t, err) +} diff --git a/comp/process/containercheck/check.go b/comp/process/containercheck/check.go new file mode 100644 index 0000000000000..cf811b4389c72 --- /dev/null +++ b/comp/process/containercheck/check.go @@ -0,0 +1,37 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package containercheck + +import ( + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/comp/process/types" +) + +type check struct { +} + +func (c *check) IsEnabled() bool { + return true +} + +func (c *check) Run() (*types.Payload, error) { + return &types.Payload{}, nil +} + +func (c *check) Name() string { + return "container" +} + +type dependencies struct { + fx.In +} + +func newCheck(deps dependencies) types.ProvidesCheck { + return types.ProvidesCheck{ + Check: &check{}, + } +} diff --git a/comp/process/containercheck/component.go b/comp/process/containercheck/component.go new file mode 100644 index 0000000000000..c78d6ec17d313 --- /dev/null +++ b/comp/process/containercheck/component.go @@ -0,0 +1,24 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package containercheck implements a component to handle Container data collection in the Process Agent. +package containercheck + +import ( + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +// team: processes + +// Component is the component type. +type Component interface { +} + +// Module defines the fx options for this component. +var Module = fxutil.Component( + fx.Provide(newCheck), +) diff --git a/comp/process/processcheck/check.go b/comp/process/processcheck/check.go new file mode 100644 index 0000000000000..cdd55a37622af --- /dev/null +++ b/comp/process/processcheck/check.go @@ -0,0 +1,37 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package processcheck + +import ( + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/comp/process/types" +) + +type check struct { +} + +func (c *check) IsEnabled() bool { + return true +} + +func (c *check) Run() (*types.Payload, error) { + return &types.Payload{}, nil +} + +func (c *check) Name() string { + return "process" +} + +type dependencies struct { + fx.In +} + +func newCheck(deps dependencies) types.ProvidesCheck { + return types.ProvidesCheck{ + Check: &check{}, + } +} diff --git a/comp/process/processcheck/component.go b/comp/process/processcheck/component.go new file mode 100644 index 0000000000000..0c5fd63b3d8d8 --- /dev/null +++ b/comp/process/processcheck/component.go @@ -0,0 +1,24 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package processcheck implements a component to handle Process data collection in the Process Agent. +package processcheck + +import ( + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +// team: processes + +// Component is the component type. +type Component interface { +} + +// Module defines the fx options for this component. +var Module = fxutil.Component( + fx.Provide(newCheck), +) diff --git a/comp/process/runner/component.go b/comp/process/runner/component.go new file mode 100644 index 0000000000000..4476f3f681bd8 --- /dev/null +++ b/comp/process/runner/component.go @@ -0,0 +1,39 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package runner implements a component to run data collection checks in the Process Agent. +package runner + +import ( + "context" + + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/comp/process/types" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +// team: processes + +// Component is the component type. +type Component interface { + GetChecks() []types.Check + Run(ctx context.Context) error +} + +// Mock implements mock-specific methods. +type Mock interface { + Component +} + +// Module defines the fx options for this component. +var Module = fxutil.Component( + fx.Provide(newRunner), +) + +// MockModule defines the fx options for the mock component. +var MockModule = fxutil.Component( + fx.Provide(newMock), +) diff --git a/comp/process/runner/runner.go b/comp/process/runner/runner.go new file mode 100644 index 0000000000000..9f7222ea00e53 --- /dev/null +++ b/comp/process/runner/runner.go @@ -0,0 +1,62 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package runner + +import ( + "context" + "testing" + "time" + + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/comp/process/submitter" + "github.com/DataDog/datadog-agent/comp/process/types" +) + +// runner implements the Component. +type runner struct { + checks []types.Check + submitter submitter.Component +} + +type dependencies struct { + fx.In + + Checks []types.Check `group:"check"` + Submitter submitter.Component +} + +func newRunner(deps dependencies) (Component, error) { + return &runner{ + checks: deps.Checks, + submitter: deps.Submitter, + }, nil +} + +func (r *runner) Run(ctx context.Context) error { + + for _, c := range r.checks { + if !c.IsEnabled() { + continue + } + + payload, err := c.Run() + if err != nil { + return err + } + r.submitter.Submit(time.Now(), c.Name(), payload) + } + return nil +} + +func (r *runner) GetChecks() []types.Check { + return r.checks +} + +func newMock(deps dependencies, t testing.TB) Component { + // TODO + return nil +} diff --git a/comp/process/submitter/component.go b/comp/process/submitter/component.go new file mode 100644 index 0000000000000..d5fbde0ff18e0 --- /dev/null +++ b/comp/process/submitter/component.go @@ -0,0 +1,41 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package submitter implements a component to submit collected data in the Process Agent to +// supported Datadog intakes. +package submitter + +import ( + "time" + + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/comp/process/types" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" +) + +// team: processes + +// Component is the component type. +type Component interface { + Submit(start time.Time, checkName string, payload *types.Payload) + Start() error + Stop() +} + +// Mock implements mock-specific methods. +type Mock interface { + Component +} + +// Module defines the fx options for this component. +var Module = fxutil.Component( + fx.Provide(newSubmitter), +) + +// MockModule defines the fx options for the mock component. +var MockModule = fxutil.Component( + fx.Provide(newMock), +) diff --git a/comp/process/submitter/submitter.go b/comp/process/submitter/submitter.go new file mode 100644 index 0000000000000..fd67e17d33c59 --- /dev/null +++ b/comp/process/submitter/submitter.go @@ -0,0 +1,44 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package submitter + +import ( + "testing" + "time" + + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/comp/process/types" +) + +// submitter implements the Component. +type submitter struct { +} + +type dependencies struct { + fx.In +} + +func newSubmitter(deps dependencies) (Component, error) { + return &submitter{}, nil +} + +func (s *submitter) Submit(start time.Time, checkName string, payload *types.Payload) { + +} + +func (s *submitter) Start() error { + return nil +} + +func (s *submitter) Stop() { + +} + +func newMock(deps dependencies, t testing.TB) Component { + // TODO + return nil +} diff --git a/comp/process/types/check.go b/comp/process/types/check.go new file mode 100644 index 0000000000000..6dce8ae694f6e --- /dev/null +++ b/comp/process/types/check.go @@ -0,0 +1,28 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package types + +import ( + "go.uber.org/fx" +) + +// Payload defines payload from the check +type Payload struct { +} + +// Check defines an interface implemented by checks +type Check interface { + IsEnabled() bool + Name() string + Run() (*Payload, error) +} + +// ProvidesCheck wraps a check implementation for consumption in components +type ProvidesCheck struct { + fx.Out + + Check Check `group:"check"` +} diff --git a/pkg/metadata/inventories/host_metadata_win.go b/comp/systray/bundle.go similarity index 72% rename from pkg/metadata/inventories/host_metadata_win.go rename to comp/systray/bundle.go index 92a0c7c5dd0a5..64ad9d8fb9b24 100644 --- a/pkg/metadata/inventories/host_metadata_win.go +++ b/comp/systray/bundle.go @@ -2,10 +2,10 @@ // under the Apache License Version 2.0. // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. - //go:build windows // +build windows -package inventories +// Package systray implements the Datadog Agent Manager System Tray +package systray -func getSystemSpecificHosttMetadata(metadata *HostMetadata) {} +// team: windows-agent diff --git a/comp/systray/systray/component.go b/comp/systray/systray/component.go new file mode 100644 index 0000000000000..93c34786c545d --- /dev/null +++ b/comp/systray/systray/component.go @@ -0,0 +1,29 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. +//go:build windows +// +build windows + +// Package systray +package systray + +import ( + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "go.uber.org/fx" +) + +// team: windows-agent + +type Params struct { + LaunchGuiFlag bool + LaunchElevatedFlag bool + LaunchCommand string +} + +type Component interface { +} + +var Module = fxutil.Component( + fx.Provide(newSystray), +) diff --git a/cmd/systray/doconfigure.go b/comp/systray/systray/doconfigure.go similarity index 74% rename from cmd/systray/doconfigure.go rename to comp/systray/systray/doconfigure.go index 98fea32629680..c6321e10ae986 100644 --- a/cmd/systray/doconfigure.go +++ b/comp/systray/systray/doconfigure.go @@ -5,37 +5,29 @@ //go:build windows // +build windows -package main +package systray import ( "encoding/json" "fmt" - "github.com/DataDog/datadog-agent/cmd/agent/common" "github.com/DataDog/datadog-agent/pkg/api/security" "github.com/DataDog/datadog-agent/pkg/api/util" - "github.com/DataDog/datadog-agent/pkg/config" - - "github.com/DataDog/datadog-agent/pkg/util/log" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" ) -func onConfigure() { +func onConfigure(s *systray) { // seems like a waste. However, the handler function doesn't expect an error code. // this just eats the error code. - err := doConfigure() + err := doConfigure(s) if err != nil { - log.Warnf("Failed to launch gui %v", err) + s.log.Warnf("Failed to launch gui %v", err) } return } -func doConfigure() error { - - err := common.SetupConfigWithoutSecrets("", "") - if err != nil { - return fmt.Errorf("unable to set up global agent configuration: %v", err) - } +func doConfigure(s *systray) error { - guiPort := config.Datadog.GetString("GUI_port") + guiPort := s.config.GetString("GUI_port") if guiPort == "-1" { return fmt.Errorf("GUI not enabled: to enable, please set an appropriate port in your datadog.yaml file") } @@ -48,11 +40,11 @@ func doConfigure() error { // Get the CSRF token from the agent c := util.GetClient(false) // FIX: get certificates right then make this true - ipcAddress, err := config.GetIPCAddress() + ipcAddress, err := pkgconfig.GetIPCAddress() if err != nil { return err } - urlstr := fmt.Sprintf("https://%v:%v/agent/gui/csrf-token", ipcAddress, config.Datadog.GetInt("cmd_port")) + urlstr := fmt.Sprintf("https://%v:%v/agent/gui/csrf-token", ipcAddress, s.config.GetInt("cmd_port")) err = util.SetAuthToken() if err != nil { return err @@ -74,6 +66,6 @@ func doConfigure() error { return fmt.Errorf("error opening GUI: " + err.Error()) } - log.Debugf("GUI opened at 127.0.0.1:" + guiPort + "\n") + s.log.Debugf("GUI opened at 127.0.0.1:" + guiPort + "\n") return nil } diff --git a/cmd/systray/doflare.go b/comp/systray/systray/doflare.go similarity index 79% rename from cmd/systray/doflare.go rename to comp/systray/systray/doflare.go index 33cb5b7dad195..d8c145d880e39 100644 --- a/cmd/systray/doflare.go +++ b/comp/systray/systray/doflare.go @@ -5,7 +5,7 @@ //go:build windows // +build windows -package main +package systray import ( "bytes" @@ -21,8 +21,8 @@ import ( "github.com/DataDog/datadog-agent/cmd/agent/common" "github.com/DataDog/datadog-agent/pkg/api/util" "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/flare" - "github.com/DataDog/datadog-agent/pkg/util/log" + pkgflare "github.com/DataDog/datadog-agent/pkg/flare" + pkglog "github.com/DataDog/datadog-agent/pkg/util/log" ) const ( @@ -83,11 +83,11 @@ func dialogProc(hwnd win.HWND, msg uint32, wParam, lParam uintptr) (result uintp x, y, _, _ := calcPos(wndrect, dlgrect) r, _, err = procSetWindowPos.Call(uintptr(hwnd), 0, uintptr(x), uintptr(y), uintptr(0), uintptr(0), uintptr(0x0041)) if r != 0 { - log.Debugf("failed to set window pos %v", err) + pkglog.Debugf("failed to set window pos %v", err) } } } else { - log.Debugf("failed to get pos %v", err) + pkglog.Debugf("failed to get pos %v", err) } } // set the "OK" to disabled until there's something approximating an email @@ -122,11 +122,11 @@ func dialogProc(hwnd win.HWND, msg uint32, wParam, lParam uintptr) (result uintp win.SendDlgItemMessage(hwnd, IDC_TICKET_EDIT, win.WM_GETTEXT, 255, uintptr(unsafe.Pointer(&buf[0]))) info.caseid = windows.UTF16ToString(buf) - log.Debugf("ticket number %s", info.caseid) + pkglog.Debugf("ticket number %s", info.caseid) win.SendDlgItemMessage(hwnd, IDC_EMAIL_EDIT, win.WM_GETTEXT, 255, uintptr(unsafe.Pointer(&buf[0]))) info.email = windows.UTF16ToString(buf) - log.Debugf("email %s", info.email) + pkglog.Debugf("email %s", info.email) win.EndDialog(hwnd, win.IDOK) return uintptr(1) @@ -137,21 +137,22 @@ func dialogProc(hwnd win.HWND, msg uint32, wParam, lParam uintptr) (result uintp } return uintptr(0) } -func onFlare() { +func onFlare(s *systray) { + // Create a dialog box to prompt for ticket number and email, then create and submit the flare // library will allow multiple calls (multi-threaded window proc?) // however, we're using a single instance of the info structure to // pass data around. Don't allow multiple dialogs to be displayed // (in go1.18, this could be done with sync.Mutex#TryLock) if !inProgress.CAS(false, true) { - log.Warn("Dialog already in progress, skipping") + s.log.Warn("Dialog already in progress, skipping") return } defer inProgress.Store(false) myInst := win.GetModuleHandle(nil) if myInst == win.HINSTANCE(0) { - log.Errorf("Failed to get my own module handle") + s.log.Errorf("Failed to get my own module handle") return } ret := win.DialogBoxParam(myInst, win.MAKEINTRESOURCE(uintptr(IDD_DIALOG1)), win.HWND(0), windows.NewCallback(dialogProc), uintptr(0)) @@ -161,7 +162,7 @@ func onFlare() { // got a non number, just create a new case info.caseid = "0" } - r, e := requestFlare(info.caseid, info.email) + r, e := requestFlare(s, info.caseid, info.email) caption, _ := windows.UTF16PtrFromString("Datadog Flare") var text *uint16 if e == nil { @@ -171,17 +172,14 @@ func onFlare() { } win.MessageBox(win.HWND(0), text, caption, win.MB_OK) } - log.Debugf("DialogBoxParam returns %d", ret) + s.log.Debugf("DialogBoxParam returns %d", ret) } -func requestFlare(caseID, customerEmail string) (response string, e error) { - log.Debug("Asking the agent to build the flare archive.") +func requestFlare(s *systray, caseID, customerEmail string) (response string, e error) { + // For first try, ask the agent to build the flare + s.log.Debug("Asking the agent to build the flare archive.") - e = common.SetupConfig("") - if e != nil { - return - } c := util.GetClient(false) // FIX: get certificates right then make this true ipcAddress, err := config.GetIPCAddress() if err != nil { @@ -208,28 +206,29 @@ func requestFlare(caseID, customerEmail string) (response string, e error) { r, e := util.DoPost(c, urlstr, "application/json", bytes.NewBuffer([]byte{})) var filePath string if e != nil { + // The agent could not make the flare, try create one from this context if r != nil && string(r) != "" { - log.Warnf("The agent ran into an error while making the flare: %s\n", r) + s.log.Warnf("The agent ran into an error while making the flare: %s\n", r) e = fmt.Errorf("Error getting flare from running agent: %s", r) } else { - log.Debug("The agent was unable to make the flare.") + s.log.Debug("The agent was unable to make the flare.") e = fmt.Errorf("Error getting flare from running agent: %w", e) } - log.Debug("Initiating flare locally.") + s.log.Debug("Initiating flare locally.") - filePath, e = flare.CreateArchive(true, common.GetDistPath(), common.PyChecksPath, []string{logFile, jmxLogFile}, nil, e) + filePath, e = s.flare.Create(true, common.GetDistPath(), common.PyChecksPath, []string{logFile, jmxLogFile}, nil, e) if e != nil { - log.Errorf("The flare zipfile failed to be created: %s\n", e) + s.log.Errorf("The flare zipfile failed to be created: %s\n", e) return } } else { filePath = string(r) } - log.Warnf("%s is going to be uploaded to Datadog\n", filePath) + s.log.Warnf("%s is going to be uploaded to Datadog\n", filePath) - response, e = flare.SendFlare(filePath, caseID, customerEmail) - log.Debug(response) + response, e = pkgflare.SendFlare(filePath, caseID, customerEmail) + s.log.Debug(response) if e != nil { return } diff --git a/cmd/systray/doservicecontrol.go b/comp/systray/systray/doservicecontrol.go similarity index 65% rename from cmd/systray/doservicecontrol.go rename to comp/systray/systray/doservicecontrol.go index 3915d981a46ff..a6e6323ef423b 100644 --- a/cmd/systray/doservicecontrol.go +++ b/comp/systray/systray/doservicecontrol.go @@ -6,29 +6,26 @@ //go:build windows // +build windows -package main +package systray import ( "github.com/DataDog/datadog-agent/cmd/agent/windows/controlsvc" - "github.com/DataDog/datadog-agent/pkg/util/log" ) -func onRestart() { +func onRestart(s *systray) { if err := controlsvc.RestartService(); err != nil { - log.Warnf("Failed to restart datadog service %v", err) + s.log.Warnf("Failed to restart datadog service %v", err) } - } -func onStart() { + +func onStart(s *systray) { if err := controlsvc.StartService(); err != nil { - log.Warnf("Failed to start datadog service %v", err) + s.log.Warnf("Failed to start datadog service %v", err) } - } -func onStop() { +func onStop(s *systray) { if err := controlsvc.StopService(); err != nil { - log.Warnf("Failed to stop datadog service %v", err) + s.log.Warnf("Failed to stop datadog service %v", err) } - } diff --git a/comp/systray/systray/systray.go b/comp/systray/systray/systray.go new file mode 100644 index 0000000000000..6526abc345a1a --- /dev/null +++ b/comp/systray/systray/systray.go @@ -0,0 +1,462 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. +//go:build windows +// +build windows + +package systray + +//#include "uac.h" +import "C" + +import ( + "context" + "fmt" + "os" + "os/exec" + "runtime" + "strings" + "sync" + "time" + "unsafe" + + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/flare" + "github.com/DataDog/datadog-agent/comp/core/log" + pkglog "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/util/winutil" + "github.com/DataDog/datadog-agent/pkg/version" + + "github.com/lxn/walk" + "github.com/lxn/win" + "go.uber.org/fx" + "golang.org/x/sys/windows" +) + +type dependencies struct { + fx.In + + Lc fx.Lifecycle + Shutdowner fx.Shutdowner + + Log log.Component + Config config.Component + Flare flare.Component + Params Params +} + +type systray struct { + // For triggering Shutdown + shutdowner fx.Shutdowner + + log log.Component + config config.Component + flare flare.Component + params Params + + isUserAdmin bool + + // allocated in start, destroyed in stop + singletonEventHandle windows.Handle + + // Window management + notifyWindowToStop func() + routineWaitGroup sync.WaitGroup +} + +type menuItem struct { + label string + handler walk.EventHandler + enabled bool +} + +const ( + RSRC_MAIN_ICON = 1 + launchGraceTime = 2 + eventname = "ddtray-event" + cmdTextStartService = "StartService" + cmdTextStopService = "StopService" + cmdTextRestartService = "RestartService" + cmdTextConfig = "Config" + menuSeparator = "SEPARATOR" +) + +var ( + cmds = map[string]func(*systray){ + cmdTextStartService: onStart, + cmdTextStopService: onStop, + cmdTextRestartService: onRestart, + cmdTextConfig: onConfigure, + } +) + +// newSystray creates a new systray component, which will start and stop based on +// the fx Lifecycle +func newSystray(deps dependencies) Component { + // fx init + s := &systray{ + log: deps.Log, + config: deps.Config, + flare: deps.Flare, + params: deps.Params, + shutdowner: deps.Shutdowner, + } + + // fx lifecycle hooks + deps.Lc.Append(fx.Hook{OnStart: s.start, OnStop: s.stop}) + + // init vars + isAdmin, err := winutil.IsUserAnAdmin() + if err != nil { + s.log.Warnf("Failed to call IsUserAnAdmin %v", err) + // If we cannot determine if the user is admin or not let the user allow to click on the buttons. + s.isUserAdmin = true + } else { + s.isUserAdmin = isAdmin + } + + return s +} + +// start hook has a fx enforced timeout, so don't do long running things +func (s *systray) start(ctx context.Context) error { + var err error + + s.log.Debugf("launch-gui is %v, launch-elev is %v, launch-cmd is %v", s.params.LaunchGuiFlag, s.params.LaunchElevatedFlag, s.params.LaunchCommand) + + if s.params.LaunchGuiFlag { + s.log.Debug("Preparing to launch configuration interface...") + go onConfigure(s) + } + + s.singletonEventHandle, err = acquireProcessSingleton(eventname) + if err != nil { + s.log.Errorf("Failed to acquire singleton %v", err) + return err + } + + s.routineWaitGroup.Add(1) + go windowRoutine(s) + + // If a command is specified in process command line, carry it out. + if s.params.LaunchCommand != "" { + go execCmdOrElevate(s, s.params.LaunchCommand) + } + + return nil +} + +func (s *systray) stop(ctx context.Context) error { + if s.notifyWindowToStop != nil { + // Send stop message to window (stops windowRoutine goroutine) + s.notifyWindowToStop() + } + + // wait for goroutine to finish + s.routineWaitGroup.Wait() + + // release our singleton + if s.singletonEventHandle != windows.Handle(0) { + windows.CloseHandle(s.singletonEventHandle) + } + + return nil +} + +// Run window setup and message loop in a single threadlocked goroutine +// https://github.com/lxn/walk/issues/601 +// Use the notifyWindowToStop function to stop the message loop +// Use routineWaitGroup to wait until the routine exits +func windowRoutine(s *systray) { + // Following https://github.com/lxn/win/commit/d9566253ae00d0a7dc7e4c9bda651dcfee029001 + // it's up to the caller to lock OS threads + runtime.LockOSThread() + defer runtime.UnlockOSThread() + + defer stopSystray(s) + defer s.routineWaitGroup.Done() + + // We need either a walk.MainWindow or a walk.Dialog for their message loop. + mw, err := walk.NewMainWindow() + if err != nil { + s.log.Errorf("Failed to create main window: %v", err) + return + } + defer mw.Dispose() + + ni, err := createNotifyIcon(s, mw) + if err != nil { + s.log.Errorf("Failed to create notification tray icon: %v", err) + return + } + defer ni.Dispose() + + // Provide a function that will trigger this thread to run PostQuitMessage() + // which will cause the message loop to return + s.notifyWindowToStop = func() { + mw.Synchronize(func() { + win.PostQuitMessage(0) + }) + } + + // Run the message loop + // use the notifyWindowToStop function to stop the message loop + mw.Run() +} + +func acquireProcessSingleton(eventname string) (windows.Handle, error) { + var utf16EventName = windows.StringToUTF16Ptr(eventname) + + // Check to see if the process is already running + h, _ := windows.OpenEvent(windows.EVENT_ALL_ACCESS, + false, + utf16EventName) + + if h != windows.Handle(0) { + // Process already running. + windows.CloseHandle(h) + + // Wait a short period and recheck in case the other process will quit. + time.Sleep(time.Duration(launchGraceTime) * time.Second) + + // Try again + h, _ := windows.OpenEvent(windows.EVENT_ALL_ACCESS, + false, + utf16EventName) + + if h != windows.Handle(0) { + windows.CloseHandle(h) + return windows.Handle(0), fmt.Errorf("systray is already running") + } + } + + // otherwise, create the handle so that nobody else will + h, err := windows.CreateEvent(nil, 0, 0, utf16EventName) + if err != nil { + // can fail with ERROR_ALREADY_EXISTS if we lost a race + if h != windows.Handle(0) { + windows.CloseHandle(h) + } + return windows.Handle(0), err + } + + return h, nil +} + +func loadIconFromResource(log log.Component, iconID int) (*walk.Icon, error) { + icon, err := walk.NewIconFromResourceId(iconID) + if err == nil { + return icon, nil + } + log.Warnf("Failed to load icon: %v", err) + + // NOTE: Windows 7/2008r2 issue only + // walk.NewIconFromResource eventually calls comctl32.LoadIconWithScaleDown, which due to an + // issue in lxn/win cannot be called on Windows 7/2008r2. This issue presents oddly because + // lxn/win will return 0 and no error when it fails to find/load the function, so the function call + // appears as if it is failing without cause. The function is missing because lxn/win uses + // windows.NewLazySystemDLL to load comctl32 which forces the system32 DLL to be loaded instead of + // the side-by-side (SxS) DLL specified in the manifest. + // + // We can manually load and call LoadIconWithScaleDown, but when we do + // if we pass 96x96 (lxn/walk default), the icon comes out bad from scaling + // if we pass 16x16 (windows tray icon size), the notifyIcon.ShowCustomMessge icon is too small. + // Windows 10/2019 seem to not have either of these issues. + // + // Previous versions of lxn/walk called LoadImage instead and it worked okay, so fallback to that. + hIcon := win.LoadImage( + win.GetModuleHandle(nil), + win.MAKEINTRESOURCE(uintptr(iconID)), + win.IMAGE_ICON, + 0, // width + 0, // height + win.LR_DEFAULTSIZE, + ) + if hIcon == 0 { + gle := win.GetLastError() + return nil, fmt.Errorf("Failed to load fallback icon: %x (%d)", gle, gle) + } + + icon, err = walk.NewIconFromHICON(win.HICON(hIcon)) + return icon, err +} + +// this function must be called from and the NotifyIcon used from a single thread locked goroutine +// https://github.com/lxn/walk/issues/601 +func createNotifyIcon(s *systray, mw *walk.MainWindow) (ni *walk.NotifyIcon, err error) { + // Create the notify icon (must be cleaned up) + ni, err = walk.NewNotifyIcon(mw) + if err != nil { + return nil, err + } + defer func() { + if err != nil && ni != nil { + ni.Dispose() + ni = nil + } + }() + + // Set the icon and a tool tip text. + // 1 is the ID of the MAIN_ICON in systray.rc + icon, err := loadIconFromResource(s.log, RSRC_MAIN_ICON) + if err != nil { + s.log.Warnf("%v, last chance fallback to standard question mark icon.", err) + // Fallback to a question mark icon + icon = walk.IconQuestion() + } + if err := ni.SetIcon(icon); err != nil { + return nil, fmt.Errorf("Failed to set icon: %v", err) + } + + // Set mouseover tooltip + if err := ni.SetToolTip("Click for info or use the context menu to exit."); err != nil { + s.log.Warnf("Failed to set tooltip text: %v", err) + } + + // When the left mouse button is pressed, bring up our balloon. + ni.MouseDown().Attach(func(x, y int, button walk.MouseButton) { + if button != walk.LeftButton { + return + } + showCustomMessage(ni, "Please right click to display available options.") + }) + + menuitems := createMenuItems(s, ni) + + for _, item := range menuitems { + var action *walk.Action + if item.label == menuSeparator { + action = walk.NewSeparatorAction() + } else { + action = walk.NewAction() + if err := action.SetText(item.label); err != nil { + s.log.Warnf("Failed to set text for item %s: %v", item.label, err) + continue + } + err = action.SetEnabled(item.enabled) + if err != nil { + s.log.Warnf("Failed to set enabled for item %s: %v", item.label, err) + continue + } + if item.handler != nil { + _ = action.Triggered().Attach(item.handler) + } + } + err = ni.ContextMenu().Actions().Add(action) + if err != nil { + s.log.Warnf("Failed to add action for item %s to context menu %v", item.label, err) + continue + } + } + + // The notify icon is hidden initially, so we have to make it visible. + if err := ni.SetVisible(true); err != nil { + s.log.Warnf("Failed to set window visibility %v", err) + } + + return ni, nil +} + +func showCustomMessage(notifyIcon *walk.NotifyIcon, message string) { + if err := notifyIcon.ShowCustom("Datadog Agent Manager", message, nil); err != nil { + pkglog.Warnf("Failed to show custom message %v", err) + } +} + +func stopSystray(s *systray) { + // TODO: This will shutdown the entire fx app, how do we stop just this component? + // Stopping just this componenent is not strictly needed at the moment because + // it is only used in the standalone ddtray.exe executable. + triggerShutdown(s) +} + +func triggerShutdown(s *systray) { + if s != nil { + // Tell fx to begin shutdown process + s.shutdowner.Shutdown() + } +} + +func onExit(s *systray) { + triggerShutdown(s) +} + +func createMenuItems(s *systray, notifyIcon *walk.NotifyIcon) []menuItem { + av, _ := version.Agent() + verstring := av.GetNumberAndPre() + + menuHandler := func(cmd string) func() { + return func() { + execCmdOrElevate(s, cmd) + } + } + + menuitems := make([]menuItem, 0) + menuitems = append(menuitems, menuItem{label: verstring, enabled: false}) + menuitems = append(menuitems, menuItem{label: menuSeparator}) + menuitems = append(menuitems, menuItem{label: "&Start", handler: menuHandler(cmdTextStartService), enabled: true}) + menuitems = append(menuitems, menuItem{label: "S&top", handler: menuHandler(cmdTextStopService), enabled: true}) + menuitems = append(menuitems, menuItem{label: "&Restart", handler: menuHandler(cmdTextRestartService), enabled: true}) + menuitems = append(menuitems, menuItem{label: "&Configure", handler: menuHandler(cmdTextConfig), enabled: true}) + menuitems = append(menuitems, menuItem{label: "&Flare", handler: func() { onFlare(s) }, enabled: true}) + menuitems = append(menuitems, menuItem{label: menuSeparator}) + menuitems = append(menuitems, menuItem{label: "E&xit", handler: func() { onExit(s) }, enabled: true}) + + return menuitems +} + +// opens a browser window at the specified URL +func open(url string) error { + cmdptr := windows.StringToUTF16Ptr("rundll32.exe url.dll,FileProtocolHandler " + url) + if C.LaunchUnelevated(C.LPCWSTR(unsafe.Pointer(cmdptr))) == 0 { + // Failed to run process non-elevated, retry with normal launch. + pkglog.Warnf("Failed to launch configuration page as non-elevated, will launch as current process.") + return exec.Command("rundll32", "url.dll,FileProtocolHandler", url).Start() + } + + // Succeeded, return no error. + return nil +} + +// execCmdOrElevate carries out a command. If current process is not elevated and is not supposed to be elevated, it will launch +// itself as elevated and quit from the current instance. +func execCmdOrElevate(s *systray, cmd string) { + if !s.params.LaunchElevatedFlag && !s.isUserAdmin { + // If not launched as elevated and user is not admin, relaunch self. Use AND here to prevent from dead loop. + relaunchElevated(s, cmd) + + // If elevation failed, just quit to the caller. + return + } + + if cmds[cmd] != nil { + cmds[cmd](s) + } +} + +// relaunchElevated launch another instance of the current process asking it to carry out a command as admin. +// If the function succeeds, it will quit the process, otherwise the function will return to the caller. +func relaunchElevated(s *systray, cmd string) { + verb := "runas" + exe, _ := os.Executable() + cwd, _ := os.Getwd() + + // Reconstruct arguments, drop launch-gui and tell the new process it should have been elevated. + xargs := []string{"--launch-elev=true", "--launch-cmd=" + cmd} + args := strings.Join(xargs, " ") + + verbPtr, _ := windows.UTF16PtrFromString(verb) + exePtr, _ := windows.UTF16PtrFromString(exe) + cwdPtr, _ := windows.UTF16PtrFromString(cwd) + argPtr, _ := windows.UTF16PtrFromString(args) + + var showCmd int32 = 1 //SW_NORMAL + + err := windows.ShellExecute(0, verbPtr, exePtr, argPtr, cwdPtr, showCmd) + if err != nil { + s.log.Warnf("Failed to launch self as elevated %v", err) + } else { + triggerShutdown(s) + } +} diff --git a/comp/systray/systray/uac.c b/comp/systray/systray/uac.c new file mode 100644 index 0000000000000..4f90235728a5e --- /dev/null +++ b/comp/systray/systray/uac.c @@ -0,0 +1,84 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +#include "uac.h" + +// Attempts to drop privileges from an elevated process by creating a new process and +// setting the parent process to be the user's explorer.exe. This causes the new process to +// inherit its access token from explorer.exe. +// +// Technique relies on having permission to open explorer.exe with PROCESS_CREATE_PROCESS, +// this access is verified against the explorer.exe process DACL. +// Generally, +// If the current process was elevated via a consent prompt, the user account is the same and access will be granted. +// If the current process was elevated via a credential prompt, the user account is different and access will be denied. +// https://learn.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works +// +// TODO: Try to enable SeDebugPrivilege. This will allow this function to support credential prompts +// if group policy has not been modified to remove SeDebugPrivilege from Administrators. +BOOL LaunchUnelevated(LPCWSTR CommandLine) +{ + BOOL result = FALSE; + // Get handle to the Shell's desktop window + // https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getshellwindow + HWND hwnd = GetShellWindow(); + + if (hwnd != NULL) + { + DWORD pid; + // Get pid that created the window, this should be PID of explorer.exe + if (GetWindowThreadProcessId(hwnd, &pid) != 0) + { + HANDLE process = OpenProcess(PROCESS_CREATE_PROCESS, FALSE, pid); + + if (process != NULL) + { + // To set the parent process, create a thread attribute list containing PROC_THREAD_ATTRIBUTE_PARENT_PROCESS + SIZE_T size; + if ((!InitializeProcThreadAttributeList(NULL, 1, 0, &size)) && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)) + { + LPPROC_THREAD_ATTRIBUTE_LIST p = (LPPROC_THREAD_ATTRIBUTE_LIST)malloc(size); + if (p != NULL) + { + if (InitializeProcThreadAttributeList(p, 1, 0, &size)) + { + if (UpdateProcThreadAttribute(p, 0, + PROC_THREAD_ATTRIBUTE_PARENT_PROCESS, + &process, sizeof(process), + NULL, NULL)) + { + STARTUPINFOEXW siex = {0}; + siex.lpAttributeList = p; + siex.StartupInfo.cb = sizeof(siex); + PROCESS_INFORMATION pi = {0}; + + size_t cmdlen = wcslen(CommandLine); + size_t rawcmdlen = (cmdlen + 1) * sizeof(WCHAR); + PWSTR cmdstr = (PWSTR)malloc(rawcmdlen); + if (cmdstr != NULL) + { + memcpy(cmdstr, CommandLine, rawcmdlen); + if (CreateProcessW(NULL, cmdstr, NULL, NULL, FALSE, + CREATE_NEW_CONSOLE | EXTENDED_STARTUPINFO_PRESENT, + NULL, NULL, &siex.StartupInfo, &pi)) + { + result = TRUE; + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + } + free(cmdstr); + } + } + } + DeleteProcThreadAttributeList(p); + free(p); + } + } + CloseHandle(process); + } + } + } + return result; +} diff --git a/cmd/security-agent/app/common/common.go b/comp/systray/systray/uac.h similarity index 56% rename from cmd/security-agent/app/common/common.go rename to comp/systray/systray/uac.h index f3d915c83f85e..5b591464c2eb1 100644 --- a/cmd/security-agent/app/common/common.go +++ b/comp/systray/systray/uac.h @@ -3,14 +3,6 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -package common +#include -import "github.com/spf13/cobra" - -type GlobalParams struct { - ConfPathArray []string -} - -type SubcommandFactory func(*GlobalParams) []*cobra.Command - -const LoggerName = "SECURITY" +BOOL LaunchUnelevated(LPCWSTR CommandLine); diff --git a/devenv/scripts/Install-DevEnv.ps1 b/devenv/scripts/Install-DevEnv.ps1 index 35dcea54a2eef..84dffe8e7a047 100644 --- a/devenv/scripts/Install-DevEnv.ps1 +++ b/devenv/scripts/Install-DevEnv.ps1 @@ -45,11 +45,11 @@ Write-Host -ForegroundColor Yellow -BackgroundColor DarkGreen '- Installing Gola $ErrorActionPreference = 'Stop' $ProgressPreference = 'SilentlyContinue' -Write-Host -ForegroundColor Green "Installing go 1.18.9" +Write-Host -ForegroundColor Green "Installing go 1.19.5" -$gozip = "https://dl.google.com/go/go1.18.9.windows-amd64.zip" +$gozip = "https://dl.google.com/go/go1.19.5.windows-amd64.zip" if ($Env:TARGET_ARCH -eq "x86") { - $gozip = "https://dl.google.com/go/go1.18.9.windows-386.zip" + $gozip = "https://dl.google.com/go/go1.19.5.windows-386.zip" } $out = 'c:\go.zip' diff --git a/docs/cloud-workload-security/README.md b/docs/cloud-workload-security/README.md index efe33c1c87c76..c3bca36160d54 100644 --- a/docs/cloud-workload-security/README.md +++ b/docs/cloud-workload-security/README.md @@ -75,7 +75,7 @@ The Cloud Workload Security (CWS) part of the Agent sends events to the backend. ### Editing files -To change the documentation of one of the fields in the schema, edit the correct field in `pkg/security/probe/serializers.go`. The documentation of a field is added through the `jsonschema_description` tag of the field. +To change the documentation of one of the fields in the schema, edit the correct field in `pkg/security/probe/serializers.go`. The documentation of a field is added through the commont of the field. For example: diff --git a/docs/cloud-workload-security/agent_expressions.md b/docs/cloud-workload-security/agent_expressions.md index 4366ef01888e4..f6c0f010fee12 100644 --- a/docs/cloud-workload-security/agent_expressions.md +++ b/docs/cloud-workload-security/agent_expressions.md @@ -162,219 +162,219 @@ Examples: The *file.rights* attribute can now be used in addition to *file.mode*. *file.mode* can hold values set by the kernel, while the *file.rights* only holds the values set by the user. These rights may be more familiar because they are in the `chmod` commands. -## Event types +## Event attributes ### Common to all event types -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `async` | bool | True if the syscall was asynchronous | | -| `container.id` | string | ID of the container | | -| `container.tags` | string | Tags of the container | | -| `network.destination.ip` | IP/CIDR | IP address | | -| `network.destination.port` | int | Port number | | -| `network.device.ifindex` | int | interface ifindex | | -| `network.device.ifname` | string | interface ifname | | -| `network.l3_protocol` | int | l3 protocol of the network packet | L3 protocols | -| `network.l4_protocol` | int | l4 protocol of the network packet | L4 protocols | -| `network.size` | int | size in bytes of the network packet | | -| `network.source.ip` | IP/CIDR | IP address | | -| `network.source.port` | int | Port number | | -| `process.ancestors.args` | string | Arguments of the process (as a string) | | -| `process.ancestors.args_flags` | string | Arguments of the process (as an array) | | -| `process.ancestors.args_options` | string | Arguments of the process (as an array) | | -| `process.ancestors.args_truncated` | bool | Indicator of arguments truncation | | -| `process.ancestors.argv` | string | Arguments of the process (as an array) | | -| `process.ancestors.argv0` | string | First argument of the process | | -| `process.ancestors.cap_effective` | int | Effective capability set of the process | Kernel Capability constants | -| `process.ancestors.cap_permitted` | int | Permitted capability set of the process | Kernel Capability constants | -| `process.ancestors.comm` | string | Comm attribute of the process | | -| `process.ancestors.container.id` | string | Container ID | | -| `process.ancestors.cookie` | int | Cookie of the process | | -| `process.ancestors.created_at` | int | Timestamp of the creation of the process | | -| `process.ancestors.egid` | int | Effective GID of the process | | -| `process.ancestors.egroup` | string | Effective group of the process | | -| `process.ancestors.envp` | string | Environment variables of the process | | -| `process.ancestors.envs` | string | Environment variable names of the process | | -| `process.ancestors.envs_truncated` | bool | Indicator of environment variables truncation | | -| `process.ancestors.euid` | int | Effective UID of the process | | -| `process.ancestors.euser` | string | Effective user of the process | | -| `process.ancestors.file.change_time` | int | Change time of the file | | -| `process.ancestors.file.filesystem` | string | File's filesystem | | -| `process.ancestors.file.gid` | int | GID of the file's owner | | -| `process.ancestors.file.group` | string | Group of the file's owner | | -| `process.ancestors.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `process.ancestors.file.inode` | int | Inode of the file | | -| `process.ancestors.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `process.ancestors.file.modification_time` | int | Modification time of the file | | -| `process.ancestors.file.mount_id` | int | Mount ID of the file | | -| `process.ancestors.file.name` | string | File's basename | | -| `process.ancestors.file.name.length` | int | Length of 'process.ancestors.file.name' string | | -| `process.ancestors.file.path` | string | File's path | | -| `process.ancestors.file.path.length` | int | Length of 'process.ancestors.file.path' string | | -| `process.ancestors.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `process.ancestors.file.uid` | int | UID of the file's owner | | -| `process.ancestors.file.user` | string | User of the file's owner | | -| `process.ancestors.fsgid` | int | FileSystem-gid of the process | | -| `process.ancestors.fsgroup` | string | FileSystem-group of the process | | -| `process.ancestors.fsuid` | int | FileSystem-uid of the process | | -| `process.ancestors.fsuser` | string | FileSystem-user of the process | | -| `process.ancestors.gid` | int | GID of the process | | -| `process.ancestors.group` | string | Group of the process | | -| `process.ancestors.interpreter.file.change_time` | int | Change time of the file | | -| `process.ancestors.interpreter.file.filesystem` | string | File's filesystem | | -| `process.ancestors.interpreter.file.gid` | int | GID of the file's owner | | -| `process.ancestors.interpreter.file.group` | string | Group of the file's owner | | -| `process.ancestors.interpreter.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `process.ancestors.interpreter.file.inode` | int | Inode of the file | | -| `process.ancestors.interpreter.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `process.ancestors.interpreter.file.modification_time` | int | Modification time of the file | | -| `process.ancestors.interpreter.file.mount_id` | int | Mount ID of the file | | -| `process.ancestors.interpreter.file.name` | string | File's basename | | -| `process.ancestors.interpreter.file.name.length` | int | Length of 'process.ancestors.interpreter.file.name' string | | -| `process.ancestors.interpreter.file.path` | string | File's path | | -| `process.ancestors.interpreter.file.path.length` | int | Length of 'process.ancestors.interpreter.file.path' string | | -| `process.ancestors.interpreter.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `process.ancestors.interpreter.file.uid` | int | UID of the file's owner | | -| `process.ancestors.interpreter.file.user` | string | User of the file's owner | | -| `process.ancestors.is_kworker` | bool | Indicates whether the process is a kworker | | -| `process.ancestors.is_thread` | bool | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | | -| `process.ancestors.pid` | int | Process ID of the process (also called thread group ID) | | -| `process.ancestors.ppid` | int | Parent process ID | | -| `process.ancestors.tid` | int | Thread ID of the thread | | -| `process.ancestors.tty_name` | string | Name of the TTY associated with the process | | -| `process.ancestors.uid` | int | UID of the process | | -| `process.ancestors.user` | string | User of the process | | -| `process.args` | string | Arguments of the process (as a string) | | -| `process.args_flags` | string | Arguments of the process (as an array) | | -| `process.args_options` | string | Arguments of the process (as an array) | | -| `process.args_truncated` | bool | Indicator of arguments truncation | | -| `process.argv` | string | Arguments of the process (as an array) | | -| `process.argv0` | string | First argument of the process | | -| `process.cap_effective` | int | Effective capability set of the process | Kernel Capability constants | -| `process.cap_permitted` | int | Permitted capability set of the process | Kernel Capability constants | -| `process.comm` | string | Comm attribute of the process | | -| `process.container.id` | string | Container ID | | -| `process.cookie` | int | Cookie of the process | | -| `process.created_at` | int | Timestamp of the creation of the process | | -| `process.egid` | int | Effective GID of the process | | -| `process.egroup` | string | Effective group of the process | | -| `process.envp` | string | Environment variables of the process | | -| `process.envs` | string | Environment variable names of the process | | -| `process.envs_truncated` | bool | Indicator of environment variables truncation | | -| `process.euid` | int | Effective UID of the process | | -| `process.euser` | string | Effective user of the process | | -| `process.file.change_time` | int | Change time of the file | | -| `process.file.filesystem` | string | File's filesystem | | -| `process.file.gid` | int | GID of the file's owner | | -| `process.file.group` | string | Group of the file's owner | | -| `process.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `process.file.inode` | int | Inode of the file | | -| `process.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `process.file.modification_time` | int | Modification time of the file | | -| `process.file.mount_id` | int | Mount ID of the file | | -| `process.file.name` | string | File's basename | | -| `process.file.name.length` | int | Length of 'process.file.name' string | | -| `process.file.path` | string | File's path | | -| `process.file.path.length` | int | Length of 'process.file.path' string | | -| `process.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `process.file.uid` | int | UID of the file's owner | | -| `process.file.user` | string | User of the file's owner | | -| `process.fsgid` | int | FileSystem-gid of the process | | -| `process.fsgroup` | string | FileSystem-group of the process | | -| `process.fsuid` | int | FileSystem-uid of the process | | -| `process.fsuser` | string | FileSystem-user of the process | | -| `process.gid` | int | GID of the process | | -| `process.group` | string | Group of the process | | -| `process.interpreter.file.change_time` | int | Change time of the file | | -| `process.interpreter.file.filesystem` | string | File's filesystem | | -| `process.interpreter.file.gid` | int | GID of the file's owner | | -| `process.interpreter.file.group` | string | Group of the file's owner | | -| `process.interpreter.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `process.interpreter.file.inode` | int | Inode of the file | | -| `process.interpreter.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `process.interpreter.file.modification_time` | int | Modification time of the file | | -| `process.interpreter.file.mount_id` | int | Mount ID of the file | | -| `process.interpreter.file.name` | string | File's basename | | -| `process.interpreter.file.name.length` | int | Length of 'process.interpreter.file.name' string | | -| `process.interpreter.file.path` | string | File's path | | -| `process.interpreter.file.path.length` | int | Length of 'process.interpreter.file.path' string | | -| `process.interpreter.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `process.interpreter.file.uid` | int | UID of the file's owner | | -| `process.interpreter.file.user` | string | User of the file's owner | | -| `process.is_kworker` | bool | Indicates whether the process is a kworker | | -| `process.is_thread` | bool | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | | -| `process.parent.args` | string | Arguments of the process (as a string) | | -| `process.parent.args_flags` | string | Arguments of the process (as an array) | | -| `process.parent.args_options` | string | Arguments of the process (as an array) | | -| `process.parent.args_truncated` | bool | Indicator of arguments truncation | | -| `process.parent.argv` | string | Arguments of the process (as an array) | | -| `process.parent.argv0` | string | First argument of the process | | -| `process.parent.cap_effective` | int | Effective capability set of the process | Kernel Capability constants | -| `process.parent.cap_permitted` | int | Permitted capability set of the process | Kernel Capability constants | -| `process.parent.comm` | string | Comm attribute of the process | | -| `process.parent.container.id` | string | Container ID | | -| `process.parent.cookie` | int | Cookie of the process | | -| `process.parent.created_at` | int | Timestamp of the creation of the process | | -| `process.parent.egid` | int | Effective GID of the process | | -| `process.parent.egroup` | string | Effective group of the process | | -| `process.parent.envp` | string | Environment variables of the process | | -| `process.parent.envs` | string | Environment variable names of the process | | -| `process.parent.envs_truncated` | bool | Indicator of environment variables truncation | | -| `process.parent.euid` | int | Effective UID of the process | | -| `process.parent.euser` | string | Effective user of the process | | -| `process.parent.file.change_time` | int | Change time of the file | | -| `process.parent.file.filesystem` | string | File's filesystem | | -| `process.parent.file.gid` | int | GID of the file's owner | | -| `process.parent.file.group` | string | Group of the file's owner | | -| `process.parent.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `process.parent.file.inode` | int | Inode of the file | | -| `process.parent.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `process.parent.file.modification_time` | int | Modification time of the file | | -| `process.parent.file.mount_id` | int | Mount ID of the file | | -| `process.parent.file.name` | string | File's basename | | -| `process.parent.file.name.length` | int | Length of 'process.parent.file.name' string | | -| `process.parent.file.path` | string | File's path | | -| `process.parent.file.path.length` | int | Length of 'process.parent.file.path' string | | -| `process.parent.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `process.parent.file.uid` | int | UID of the file's owner | | -| `process.parent.file.user` | string | User of the file's owner | | -| `process.parent.fsgid` | int | FileSystem-gid of the process | | -| `process.parent.fsgroup` | string | FileSystem-group of the process | | -| `process.parent.fsuid` | int | FileSystem-uid of the process | | -| `process.parent.fsuser` | string | FileSystem-user of the process | | -| `process.parent.gid` | int | GID of the process | | -| `process.parent.group` | string | Group of the process | | -| `process.parent.interpreter.file.change_time` | int | Change time of the file | | -| `process.parent.interpreter.file.filesystem` | string | File's filesystem | | -| `process.parent.interpreter.file.gid` | int | GID of the file's owner | | -| `process.parent.interpreter.file.group` | string | Group of the file's owner | | -| `process.parent.interpreter.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `process.parent.interpreter.file.inode` | int | Inode of the file | | -| `process.parent.interpreter.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `process.parent.interpreter.file.modification_time` | int | Modification time of the file | | -| `process.parent.interpreter.file.mount_id` | int | Mount ID of the file | | -| `process.parent.interpreter.file.name` | string | File's basename | | -| `process.parent.interpreter.file.name.length` | int | Length of 'process.parent.interpreter.file.name' string | | -| `process.parent.interpreter.file.path` | string | File's path | | -| `process.parent.interpreter.file.path.length` | int | Length of 'process.parent.interpreter.file.path' string | | -| `process.parent.interpreter.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `process.parent.interpreter.file.uid` | int | UID of the file's owner | | -| `process.parent.interpreter.file.user` | string | User of the file's owner | | -| `process.parent.is_kworker` | bool | Indicates whether the process is a kworker | | -| `process.parent.is_thread` | bool | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | | -| `process.parent.pid` | int | Process ID of the process (also called thread group ID) | | -| `process.parent.ppid` | int | Parent process ID | | -| `process.parent.tid` | int | Thread ID of the thread | | -| `process.parent.tty_name` | string | Name of the TTY associated with the process | | -| `process.parent.uid` | int | UID of the process | | -| `process.parent.user` | string | User of the process | | -| `process.pid` | int | Process ID of the process (also called thread group ID) | | -| `process.ppid` | int | Parent process ID | | -| `process.tid` | int | Thread ID of the thread | | -| `process.tty_name` | string | Name of the TTY associated with the process | | -| `process.uid` | int | UID of the process | | -| `process.user` | string | User of the process | | +| Property | Definition | +| -------- | ------------- | +| [`async`](#async-doc) | True if the syscall was asynchronous | +| [`container.id`](#container-id-doc) | ID of the container | +| [`container.tags`](#container-tags-doc) | Tags of the container | +| [`network.destination.ip`](#common-ipportcontext-ip-doc) | IP address | +| [`network.destination.port`](#common-ipportcontext-port-doc) | Port number | +| [`network.device.ifindex`](#network-device-ifindex-doc) | interface ifindex | +| [`network.device.ifname`](#network-device-ifname-doc) | interface ifname | +| [`network.l3_protocol`](#network-l3_protocol-doc) | l3 protocol of the network packet | +| [`network.l4_protocol`](#network-l4_protocol-doc) | l4 protocol of the network packet | +| [`network.size`](#network-size-doc) | size in bytes of the network packet | +| [`network.source.ip`](#common-ipportcontext-ip-doc) | IP address | +| [`network.source.port`](#common-ipportcontext-port-doc) | Port number | +| [`process.ancestors.args`](#common-process-args-doc) | Arguments of the process (as a string, excluding argv0) | +| [`process.ancestors.args_flags`](#common-process-args_flags-doc) | Flags in the process arguments | +| [`process.ancestors.args_options`](#common-process-args_options-doc) | Argument of the process as options | +| [`process.ancestors.args_truncated`](#common-process-args_truncated-doc) | Indicator of arguments truncation | +| [`process.ancestors.argv`](#common-process-argv-doc) | Arguments of the process (as an array, excluding argv0) | +| [`process.ancestors.argv0`](#common-process-argv0-doc) | First argument of the process | +| [`process.ancestors.cap_effective`](#common-credentials-cap_effective-doc) | Effective capability set of the process | +| [`process.ancestors.cap_permitted`](#common-credentials-cap_permitted-doc) | Permitted capability set of the process | +| [`process.ancestors.comm`](#common-process-comm-doc) | Comm attribute of the process | +| [`process.ancestors.container.id`](#common-process-container-id-doc) | Container ID | +| [`process.ancestors.cookie`](#common-process-cookie-doc) | Cookie of the process | +| [`process.ancestors.created_at`](#common-process-created_at-doc) | Timestamp of the creation of the process | +| [`process.ancestors.egid`](#common-credentials-egid-doc) | Effective GID of the process | +| [`process.ancestors.egroup`](#common-credentials-egroup-doc) | Effective group of the process | +| [`process.ancestors.envp`](#common-process-envp-doc) | Environment variables of the process | +| [`process.ancestors.envs`](#common-process-envs-doc) | Environment variable names of the process | +| [`process.ancestors.envs_truncated`](#common-process-envs_truncated-doc) | Indicator of environment variables truncation | +| [`process.ancestors.euid`](#common-credentials-euid-doc) | Effective UID of the process | +| [`process.ancestors.euser`](#common-credentials-euser-doc) | Effective user of the process | +| [`process.ancestors.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`process.ancestors.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`process.ancestors.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`process.ancestors.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`process.ancestors.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`process.ancestors.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`process.ancestors.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`process.ancestors.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`process.ancestors.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`process.ancestors.file.name`](#common-fileevent-name-doc) | File's basename | +| [`process.ancestors.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`process.ancestors.file.path`](#common-fileevent-path-doc) | File's path | +| [`process.ancestors.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`process.ancestors.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`process.ancestors.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`process.ancestors.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`process.ancestors.fsgid`](#common-credentials-fsgid-doc) | FileSystem-gid of the process | +| [`process.ancestors.fsgroup`](#common-credentials-fsgroup-doc) | FileSystem-group of the process | +| [`process.ancestors.fsuid`](#common-credentials-fsuid-doc) | FileSystem-uid of the process | +| [`process.ancestors.fsuser`](#common-credentials-fsuser-doc) | FileSystem-user of the process | +| [`process.ancestors.gid`](#common-credentials-gid-doc) | GID of the process | +| [`process.ancestors.group`](#common-credentials-group-doc) | Group of the process | +| [`process.ancestors.interpreter.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`process.ancestors.interpreter.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`process.ancestors.interpreter.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`process.ancestors.interpreter.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`process.ancestors.interpreter.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`process.ancestors.interpreter.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`process.ancestors.interpreter.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`process.ancestors.interpreter.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`process.ancestors.interpreter.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`process.ancestors.interpreter.file.name`](#common-fileevent-name-doc) | File's basename | +| [`process.ancestors.interpreter.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`process.ancestors.interpreter.file.path`](#common-fileevent-path-doc) | File's path | +| [`process.ancestors.interpreter.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`process.ancestors.interpreter.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`process.ancestors.interpreter.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`process.ancestors.interpreter.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`process.ancestors.is_kworker`](#common-pidcontext-is_kworker-doc) | Indicates whether the process is a kworker | +| [`process.ancestors.is_thread`](#common-process-is_thread-doc) | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | +| [`process.ancestors.pid`](#common-pidcontext-pid-doc) | Process ID of the process (also called thread group ID) | +| [`process.ancestors.ppid`](#common-process-ppid-doc) | Parent process ID | +| [`process.ancestors.tid`](#common-pidcontext-tid-doc) | Thread ID of the thread | +| [`process.ancestors.tty_name`](#common-process-tty_name-doc) | Name of the TTY associated with the process | +| [`process.ancestors.uid`](#common-credentials-uid-doc) | UID of the process | +| [`process.ancestors.user`](#common-credentials-user-doc) | User of the process | +| [`process.args`](#common-process-args-doc) | Arguments of the process (as a string, excluding argv0) | +| [`process.args_flags`](#common-process-args_flags-doc) | Flags in the process arguments | +| [`process.args_options`](#common-process-args_options-doc) | Argument of the process as options | +| [`process.args_truncated`](#common-process-args_truncated-doc) | Indicator of arguments truncation | +| [`process.argv`](#common-process-argv-doc) | Arguments of the process (as an array, excluding argv0) | +| [`process.argv0`](#common-process-argv0-doc) | First argument of the process | +| [`process.cap_effective`](#common-credentials-cap_effective-doc) | Effective capability set of the process | +| [`process.cap_permitted`](#common-credentials-cap_permitted-doc) | Permitted capability set of the process | +| [`process.comm`](#common-process-comm-doc) | Comm attribute of the process | +| [`process.container.id`](#common-process-container-id-doc) | Container ID | +| [`process.cookie`](#common-process-cookie-doc) | Cookie of the process | +| [`process.created_at`](#common-process-created_at-doc) | Timestamp of the creation of the process | +| [`process.egid`](#common-credentials-egid-doc) | Effective GID of the process | +| [`process.egroup`](#common-credentials-egroup-doc) | Effective group of the process | +| [`process.envp`](#common-process-envp-doc) | Environment variables of the process | +| [`process.envs`](#common-process-envs-doc) | Environment variable names of the process | +| [`process.envs_truncated`](#common-process-envs_truncated-doc) | Indicator of environment variables truncation | +| [`process.euid`](#common-credentials-euid-doc) | Effective UID of the process | +| [`process.euser`](#common-credentials-euser-doc) | Effective user of the process | +| [`process.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`process.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`process.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`process.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`process.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`process.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`process.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`process.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`process.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`process.file.name`](#common-fileevent-name-doc) | File's basename | +| [`process.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`process.file.path`](#common-fileevent-path-doc) | File's path | +| [`process.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`process.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`process.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`process.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`process.fsgid`](#common-credentials-fsgid-doc) | FileSystem-gid of the process | +| [`process.fsgroup`](#common-credentials-fsgroup-doc) | FileSystem-group of the process | +| [`process.fsuid`](#common-credentials-fsuid-doc) | FileSystem-uid of the process | +| [`process.fsuser`](#common-credentials-fsuser-doc) | FileSystem-user of the process | +| [`process.gid`](#common-credentials-gid-doc) | GID of the process | +| [`process.group`](#common-credentials-group-doc) | Group of the process | +| [`process.interpreter.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`process.interpreter.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`process.interpreter.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`process.interpreter.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`process.interpreter.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`process.interpreter.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`process.interpreter.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`process.interpreter.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`process.interpreter.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`process.interpreter.file.name`](#common-fileevent-name-doc) | File's basename | +| [`process.interpreter.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`process.interpreter.file.path`](#common-fileevent-path-doc) | File's path | +| [`process.interpreter.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`process.interpreter.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`process.interpreter.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`process.interpreter.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`process.is_kworker`](#common-pidcontext-is_kworker-doc) | Indicates whether the process is a kworker | +| [`process.is_thread`](#common-process-is_thread-doc) | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | +| [`process.parent.args`](#common-process-args-doc) | Arguments of the process (as a string, excluding argv0) | +| [`process.parent.args_flags`](#common-process-args_flags-doc) | Flags in the process arguments | +| [`process.parent.args_options`](#common-process-args_options-doc) | Argument of the process as options | +| [`process.parent.args_truncated`](#common-process-args_truncated-doc) | Indicator of arguments truncation | +| [`process.parent.argv`](#common-process-argv-doc) | Arguments of the process (as an array, excluding argv0) | +| [`process.parent.argv0`](#common-process-argv0-doc) | First argument of the process | +| [`process.parent.cap_effective`](#common-credentials-cap_effective-doc) | Effective capability set of the process | +| [`process.parent.cap_permitted`](#common-credentials-cap_permitted-doc) | Permitted capability set of the process | +| [`process.parent.comm`](#common-process-comm-doc) | Comm attribute of the process | +| [`process.parent.container.id`](#common-process-container-id-doc) | Container ID | +| [`process.parent.cookie`](#common-process-cookie-doc) | Cookie of the process | +| [`process.parent.created_at`](#common-process-created_at-doc) | Timestamp of the creation of the process | +| [`process.parent.egid`](#common-credentials-egid-doc) | Effective GID of the process | +| [`process.parent.egroup`](#common-credentials-egroup-doc) | Effective group of the process | +| [`process.parent.envp`](#common-process-envp-doc) | Environment variables of the process | +| [`process.parent.envs`](#common-process-envs-doc) | Environment variable names of the process | +| [`process.parent.envs_truncated`](#common-process-envs_truncated-doc) | Indicator of environment variables truncation | +| [`process.parent.euid`](#common-credentials-euid-doc) | Effective UID of the process | +| [`process.parent.euser`](#common-credentials-euser-doc) | Effective user of the process | +| [`process.parent.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`process.parent.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`process.parent.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`process.parent.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`process.parent.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`process.parent.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`process.parent.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`process.parent.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`process.parent.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`process.parent.file.name`](#common-fileevent-name-doc) | File's basename | +| [`process.parent.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`process.parent.file.path`](#common-fileevent-path-doc) | File's path | +| [`process.parent.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`process.parent.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`process.parent.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`process.parent.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`process.parent.fsgid`](#common-credentials-fsgid-doc) | FileSystem-gid of the process | +| [`process.parent.fsgroup`](#common-credentials-fsgroup-doc) | FileSystem-group of the process | +| [`process.parent.fsuid`](#common-credentials-fsuid-doc) | FileSystem-uid of the process | +| [`process.parent.fsuser`](#common-credentials-fsuser-doc) | FileSystem-user of the process | +| [`process.parent.gid`](#common-credentials-gid-doc) | GID of the process | +| [`process.parent.group`](#common-credentials-group-doc) | Group of the process | +| [`process.parent.interpreter.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`process.parent.interpreter.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`process.parent.interpreter.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`process.parent.interpreter.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`process.parent.interpreter.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`process.parent.interpreter.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`process.parent.interpreter.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`process.parent.interpreter.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`process.parent.interpreter.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`process.parent.interpreter.file.name`](#common-fileevent-name-doc) | File's basename | +| [`process.parent.interpreter.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`process.parent.interpreter.file.path`](#common-fileevent-path-doc) | File's path | +| [`process.parent.interpreter.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`process.parent.interpreter.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`process.parent.interpreter.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`process.parent.interpreter.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`process.parent.is_kworker`](#common-pidcontext-is_kworker-doc) | Indicates whether the process is a kworker | +| [`process.parent.is_thread`](#common-process-is_thread-doc) | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | +| [`process.parent.pid`](#common-pidcontext-pid-doc) | Process ID of the process (also called thread group ID) | +| [`process.parent.ppid`](#common-process-ppid-doc) | Parent process ID | +| [`process.parent.tid`](#common-pidcontext-tid-doc) | Thread ID of the thread | +| [`process.parent.tty_name`](#common-process-tty_name-doc) | Name of the TTY associated with the process | +| [`process.parent.uid`](#common-credentials-uid-doc) | UID of the process | +| [`process.parent.user`](#common-credentials-user-doc) | User of the process | +| [`process.pid`](#common-pidcontext-pid-doc) | Process ID of the process (also called thread group ID) | +| [`process.ppid`](#common-process-ppid-doc) | Parent process ID | +| [`process.tid`](#common-pidcontext-tid-doc) | Thread ID of the thread | +| [`process.tty_name`](#common-process-tty_name-doc) | Name of the TTY associated with the process | +| [`process.uid`](#common-credentials-uid-doc) | UID of the process | +| [`process.user`](#common-credentials-user-doc) | User of the process | ### Event `bind` @@ -382,369 +382,369 @@ _This event type is experimental and may change in the future._ A bind was executed -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `bind.addr.family` | int | Address family | | -| `bind.addr.ip` | IP/CIDR | IP address | | -| `bind.addr.port` | int | Port number | | -| `bind.retval` | int | Return value of the syscall | Error Constants | +| Property | Definition | +| -------- | ------------- | +| [`bind.addr.family`](#bind-addr-family-doc) | Address family | +| [`bind.addr.ip`](#common-ipportcontext-ip-doc) | IP address | +| [`bind.addr.port`](#common-ipportcontext-port-doc) | Port number | +| [`bind.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | ### Event `bpf` A BPF command was executed -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `bpf.cmd` | int | BPF command name | BPF commands | -| `bpf.map.name` | string | Name of the eBPF map (added in 7.35) | | -| `bpf.map.type` | int | Type of the eBPF map | BPF map types | -| `bpf.prog.attach_type` | int | Attach type of the eBPF program | BPF attach types | -| `bpf.prog.helpers` | int | eBPF helpers used by the eBPF program (added in 7.35) | BPF helper functions | -| `bpf.prog.name` | string | Name of the eBPF program (added in 7.35) | | -| `bpf.prog.tag` | string | Hash (sha1) of the eBPF program (added in 7.35) | | -| `bpf.prog.type` | int | Type of the eBPF program | BPF program types | -| `bpf.retval` | int | Return value of the syscall | Error Constants | +| Property | Definition | +| -------- | ------------- | +| [`bpf.cmd`](#bpf-cmd-doc) | BPF command name | +| [`bpf.map.name`](#bpf-map-name-doc) | Name of the eBPF map (added in 7.35) | +| [`bpf.map.type`](#bpf-map-type-doc) | Type of the eBPF map | +| [`bpf.prog.attach_type`](#bpf-prog-attach_type-doc) | Attach type of the eBPF program | +| [`bpf.prog.helpers`](#bpf-prog-helpers-doc) | eBPF helpers used by the eBPF program (added in 7.35) | +| [`bpf.prog.name`](#bpf-prog-name-doc) | Name of the eBPF program (added in 7.35) | +| [`bpf.prog.tag`](#bpf-prog-tag-doc) | Hash (sha1) of the eBPF program (added in 7.35) | +| [`bpf.prog.type`](#bpf-prog-type-doc) | Type of the eBPF program | +| [`bpf.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | ### Event `capset` A process changed its capacity set -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `capset.cap_effective` | int | Effective capability set of the process | Kernel Capability constants | -| `capset.cap_permitted` | int | Permitted capability set of the process | Kernel Capability constants | +| Property | Definition | +| -------- | ------------- | +| [`capset.cap_effective`](#capset-cap_effective-doc) | Effective capability set of the process | +| [`capset.cap_permitted`](#capset-cap_permitted-doc) | Permitted capability set of the process | ### Event `chmod` A file’s permissions were changed -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `chmod.file.change_time` | int | Change time of the file | | -| `chmod.file.destination.mode` | int | New mode/rights of the chmod-ed file | Chmod mode constants | -| `chmod.file.destination.rights` | int | New mode/rights of the chmod-ed file | Chmod mode constants | -| `chmod.file.filesystem` | string | File's filesystem | | -| `chmod.file.gid` | int | GID of the file's owner | | -| `chmod.file.group` | string | Group of the file's owner | | -| `chmod.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `chmod.file.inode` | int | Inode of the file | | -| `chmod.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `chmod.file.modification_time` | int | Modification time of the file | | -| `chmod.file.mount_id` | int | Mount ID of the file | | -| `chmod.file.name` | string | File's basename | | -| `chmod.file.name.length` | int | Length of 'chmod.file.name' string | | -| `chmod.file.path` | string | File's path | | -| `chmod.file.path.length` | int | Length of 'chmod.file.path' string | | -| `chmod.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `chmod.file.uid` | int | UID of the file's owner | | -| `chmod.file.user` | string | User of the file's owner | | -| `chmod.retval` | int | Return value of the syscall | Error Constants | +| Property | Definition | +| -------- | ------------- | +| [`chmod.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`chmod.file.destination.mode`](#chmod-file-destination-mode-doc) | New mode of the chmod-ed file | +| [`chmod.file.destination.rights`](#chmod-file-destination-rights-doc) | New rights of the chmod-ed file | +| [`chmod.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`chmod.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`chmod.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`chmod.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`chmod.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`chmod.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`chmod.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`chmod.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`chmod.file.name`](#common-fileevent-name-doc) | File's basename | +| [`chmod.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`chmod.file.path`](#common-fileevent-path-doc) | File's path | +| [`chmod.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`chmod.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`chmod.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`chmod.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`chmod.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | ### Event `chown` A file’s owner was changed -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `chown.file.change_time` | int | Change time of the file | | -| `chown.file.destination.gid` | int | New GID of the chown-ed file's owner | | -| `chown.file.destination.group` | string | New group of the chown-ed file's owner | | -| `chown.file.destination.uid` | int | New UID of the chown-ed file's owner | | -| `chown.file.destination.user` | string | New user of the chown-ed file's owner | | -| `chown.file.filesystem` | string | File's filesystem | | -| `chown.file.gid` | int | GID of the file's owner | | -| `chown.file.group` | string | Group of the file's owner | | -| `chown.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `chown.file.inode` | int | Inode of the file | | -| `chown.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `chown.file.modification_time` | int | Modification time of the file | | -| `chown.file.mount_id` | int | Mount ID of the file | | -| `chown.file.name` | string | File's basename | | -| `chown.file.name.length` | int | Length of 'chown.file.name' string | | -| `chown.file.path` | string | File's path | | -| `chown.file.path.length` | int | Length of 'chown.file.path' string | | -| `chown.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `chown.file.uid` | int | UID of the file's owner | | -| `chown.file.user` | string | User of the file's owner | | -| `chown.retval` | int | Return value of the syscall | Error Constants | +| Property | Definition | +| -------- | ------------- | +| [`chown.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`chown.file.destination.gid`](#chown-file-destination-gid-doc) | New GID of the chown-ed file's owner | +| [`chown.file.destination.group`](#chown-file-destination-group-doc) | New group of the chown-ed file's owner | +| [`chown.file.destination.uid`](#chown-file-destination-uid-doc) | New UID of the chown-ed file's owner | +| [`chown.file.destination.user`](#chown-file-destination-user-doc) | New user of the chown-ed file's owner | +| [`chown.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`chown.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`chown.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`chown.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`chown.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`chown.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`chown.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`chown.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`chown.file.name`](#common-fileevent-name-doc) | File's basename | +| [`chown.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`chown.file.path`](#common-fileevent-path-doc) | File's path | +| [`chown.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`chown.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`chown.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`chown.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`chown.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | ### Event `dns` A DNS request was sent -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `dns.id` | int | [Experimental] the DNS request ID | | -| `dns.question.class` | int | the class looked up by the DNS question | DNS qclasses | -| `dns.question.count` | int | the total count of questions in the DNS request | | -| `dns.question.length` | int | the total DNS request size in bytes | | -| `dns.question.name` | string | the queried domain name | | -| `dns.question.name.length` | int | the queried domain name | | -| `dns.question.type` | int | a two octet code which specifies the DNS question type | DNS qtypes | +| Property | Definition | +| -------- | ------------- | +| [`dns.id`](#dns-id-doc) | [Experimental] the DNS request ID | +| [`dns.question.class`](#dns-question-class-doc) | the class looked up by the DNS question | +| [`dns.question.count`](#dns-question-count-doc) | the total count of questions in the DNS request | +| [`dns.question.length`](#dns-question-length-doc) | the total DNS request size in bytes | +| [`dns.question.name`](#dns-question-name-doc) | the queried domain name | +| [`dns.question.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`dns.question.type`](#dns-question-type-doc) | a two octet code which specifies the DNS question type | ### Event `exec` A process was executed or forked -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `exec.args` | string | Arguments of the process (as a string) | | -| `exec.args_flags` | string | Arguments of the process (as an array) | | -| `exec.args_options` | string | Arguments of the process (as an array) | | -| `exec.args_truncated` | bool | Indicator of arguments truncation | | -| `exec.argv` | string | Arguments of the process (as an array) | | -| `exec.argv0` | string | First argument of the process | | -| `exec.cap_effective` | int | Effective capability set of the process | Kernel Capability constants | -| `exec.cap_permitted` | int | Permitted capability set of the process | Kernel Capability constants | -| `exec.comm` | string | Comm attribute of the process | | -| `exec.container.id` | string | Container ID | | -| `exec.cookie` | int | Cookie of the process | | -| `exec.created_at` | int | Timestamp of the creation of the process | | -| `exec.egid` | int | Effective GID of the process | | -| `exec.egroup` | string | Effective group of the process | | -| `exec.envp` | string | Environment variables of the process | | -| `exec.envs` | string | Environment variable names of the process | | -| `exec.envs_truncated` | bool | Indicator of environment variables truncation | | -| `exec.euid` | int | Effective UID of the process | | -| `exec.euser` | string | Effective user of the process | | -| `exec.file.change_time` | int | Change time of the file | | -| `exec.file.filesystem` | string | File's filesystem | | -| `exec.file.gid` | int | GID of the file's owner | | -| `exec.file.group` | string | Group of the file's owner | | -| `exec.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `exec.file.inode` | int | Inode of the file | | -| `exec.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `exec.file.modification_time` | int | Modification time of the file | | -| `exec.file.mount_id` | int | Mount ID of the file | | -| `exec.file.name` | string | File's basename | | -| `exec.file.name.length` | int | Length of 'exec.file.name' string | | -| `exec.file.path` | string | File's path | | -| `exec.file.path.length` | int | Length of 'exec.file.path' string | | -| `exec.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `exec.file.uid` | int | UID of the file's owner | | -| `exec.file.user` | string | User of the file's owner | | -| `exec.fsgid` | int | FileSystem-gid of the process | | -| `exec.fsgroup` | string | FileSystem-group of the process | | -| `exec.fsuid` | int | FileSystem-uid of the process | | -| `exec.fsuser` | string | FileSystem-user of the process | | -| `exec.gid` | int | GID of the process | | -| `exec.group` | string | Group of the process | | -| `exec.interpreter.file.change_time` | int | Change time of the file | | -| `exec.interpreter.file.filesystem` | string | File's filesystem | | -| `exec.interpreter.file.gid` | int | GID of the file's owner | | -| `exec.interpreter.file.group` | string | Group of the file's owner | | -| `exec.interpreter.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `exec.interpreter.file.inode` | int | Inode of the file | | -| `exec.interpreter.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `exec.interpreter.file.modification_time` | int | Modification time of the file | | -| `exec.interpreter.file.mount_id` | int | Mount ID of the file | | -| `exec.interpreter.file.name` | string | File's basename | | -| `exec.interpreter.file.name.length` | int | Length of 'exec.interpreter.file.name' string | | -| `exec.interpreter.file.path` | string | File's path | | -| `exec.interpreter.file.path.length` | int | Length of 'exec.interpreter.file.path' string | | -| `exec.interpreter.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `exec.interpreter.file.uid` | int | UID of the file's owner | | -| `exec.interpreter.file.user` | string | User of the file's owner | | -| `exec.is_kworker` | bool | Indicates whether the process is a kworker | | -| `exec.is_thread` | bool | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | | -| `exec.pid` | int | Process ID of the process (also called thread group ID) | | -| `exec.ppid` | int | Parent process ID | | -| `exec.tid` | int | Thread ID of the thread | | -| `exec.tty_name` | string | Name of the TTY associated with the process | | -| `exec.uid` | int | UID of the process | | -| `exec.user` | string | User of the process | | +| Property | Definition | +| -------- | ------------- | +| [`exec.args`](#common-process-args-doc) | Arguments of the process (as a string, excluding argv0) | +| [`exec.args_flags`](#common-process-args_flags-doc) | Flags in the process arguments | +| [`exec.args_options`](#common-process-args_options-doc) | Argument of the process as options | +| [`exec.args_truncated`](#common-process-args_truncated-doc) | Indicator of arguments truncation | +| [`exec.argv`](#common-process-argv-doc) | Arguments of the process (as an array, excluding argv0) | +| [`exec.argv0`](#common-process-argv0-doc) | First argument of the process | +| [`exec.cap_effective`](#common-credentials-cap_effective-doc) | Effective capability set of the process | +| [`exec.cap_permitted`](#common-credentials-cap_permitted-doc) | Permitted capability set of the process | +| [`exec.comm`](#common-process-comm-doc) | Comm attribute of the process | +| [`exec.container.id`](#common-process-container-id-doc) | Container ID | +| [`exec.cookie`](#common-process-cookie-doc) | Cookie of the process | +| [`exec.created_at`](#common-process-created_at-doc) | Timestamp of the creation of the process | +| [`exec.egid`](#common-credentials-egid-doc) | Effective GID of the process | +| [`exec.egroup`](#common-credentials-egroup-doc) | Effective group of the process | +| [`exec.envp`](#common-process-envp-doc) | Environment variables of the process | +| [`exec.envs`](#common-process-envs-doc) | Environment variable names of the process | +| [`exec.envs_truncated`](#common-process-envs_truncated-doc) | Indicator of environment variables truncation | +| [`exec.euid`](#common-credentials-euid-doc) | Effective UID of the process | +| [`exec.euser`](#common-credentials-euser-doc) | Effective user of the process | +| [`exec.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`exec.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`exec.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`exec.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`exec.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`exec.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`exec.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`exec.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`exec.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`exec.file.name`](#common-fileevent-name-doc) | File's basename | +| [`exec.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`exec.file.path`](#common-fileevent-path-doc) | File's path | +| [`exec.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`exec.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`exec.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`exec.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`exec.fsgid`](#common-credentials-fsgid-doc) | FileSystem-gid of the process | +| [`exec.fsgroup`](#common-credentials-fsgroup-doc) | FileSystem-group of the process | +| [`exec.fsuid`](#common-credentials-fsuid-doc) | FileSystem-uid of the process | +| [`exec.fsuser`](#common-credentials-fsuser-doc) | FileSystem-user of the process | +| [`exec.gid`](#common-credentials-gid-doc) | GID of the process | +| [`exec.group`](#common-credentials-group-doc) | Group of the process | +| [`exec.interpreter.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`exec.interpreter.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`exec.interpreter.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`exec.interpreter.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`exec.interpreter.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`exec.interpreter.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`exec.interpreter.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`exec.interpreter.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`exec.interpreter.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`exec.interpreter.file.name`](#common-fileevent-name-doc) | File's basename | +| [`exec.interpreter.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`exec.interpreter.file.path`](#common-fileevent-path-doc) | File's path | +| [`exec.interpreter.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`exec.interpreter.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`exec.interpreter.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`exec.interpreter.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`exec.is_kworker`](#common-pidcontext-is_kworker-doc) | Indicates whether the process is a kworker | +| [`exec.is_thread`](#common-process-is_thread-doc) | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | +| [`exec.pid`](#common-pidcontext-pid-doc) | Process ID of the process (also called thread group ID) | +| [`exec.ppid`](#common-process-ppid-doc) | Parent process ID | +| [`exec.tid`](#common-pidcontext-tid-doc) | Thread ID of the thread | +| [`exec.tty_name`](#common-process-tty_name-doc) | Name of the TTY associated with the process | +| [`exec.uid`](#common-credentials-uid-doc) | UID of the process | +| [`exec.user`](#common-credentials-user-doc) | User of the process | ### Event `exit` A process was terminated -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `exit.args` | string | Arguments of the process (as a string) | | -| `exit.args_flags` | string | Arguments of the process (as an array) | | -| `exit.args_options` | string | Arguments of the process (as an array) | | -| `exit.args_truncated` | bool | Indicator of arguments truncation | | -| `exit.argv` | string | Arguments of the process (as an array) | | -| `exit.argv0` | string | First argument of the process | | -| `exit.cap_effective` | int | Effective capability set of the process | Kernel Capability constants | -| `exit.cap_permitted` | int | Permitted capability set of the process | Kernel Capability constants | -| `exit.cause` | int | Cause of the process termination (one of EXITED, SIGNALED, COREDUMPED) | | -| `exit.code` | int | Exit code of the process or number of the signal that caused the process to terminate | | -| `exit.comm` | string | Comm attribute of the process | | -| `exit.container.id` | string | Container ID | | -| `exit.cookie` | int | Cookie of the process | | -| `exit.created_at` | int | Timestamp of the creation of the process | | -| `exit.egid` | int | Effective GID of the process | | -| `exit.egroup` | string | Effective group of the process | | -| `exit.envp` | string | Environment variables of the process | | -| `exit.envs` | string | Environment variable names of the process | | -| `exit.envs_truncated` | bool | Indicator of environment variables truncation | | -| `exit.euid` | int | Effective UID of the process | | -| `exit.euser` | string | Effective user of the process | | -| `exit.file.change_time` | int | Change time of the file | | -| `exit.file.filesystem` | string | File's filesystem | | -| `exit.file.gid` | int | GID of the file's owner | | -| `exit.file.group` | string | Group of the file's owner | | -| `exit.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `exit.file.inode` | int | Inode of the file | | -| `exit.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `exit.file.modification_time` | int | Modification time of the file | | -| `exit.file.mount_id` | int | Mount ID of the file | | -| `exit.file.name` | string | File's basename | | -| `exit.file.name.length` | int | Length of 'exit.file.name' string | | -| `exit.file.path` | string | File's path | | -| `exit.file.path.length` | int | Length of 'exit.file.path' string | | -| `exit.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `exit.file.uid` | int | UID of the file's owner | | -| `exit.file.user` | string | User of the file's owner | | -| `exit.fsgid` | int | FileSystem-gid of the process | | -| `exit.fsgroup` | string | FileSystem-group of the process | | -| `exit.fsuid` | int | FileSystem-uid of the process | | -| `exit.fsuser` | string | FileSystem-user of the process | | -| `exit.gid` | int | GID of the process | | -| `exit.group` | string | Group of the process | | -| `exit.interpreter.file.change_time` | int | Change time of the file | | -| `exit.interpreter.file.filesystem` | string | File's filesystem | | -| `exit.interpreter.file.gid` | int | GID of the file's owner | | -| `exit.interpreter.file.group` | string | Group of the file's owner | | -| `exit.interpreter.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `exit.interpreter.file.inode` | int | Inode of the file | | -| `exit.interpreter.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `exit.interpreter.file.modification_time` | int | Modification time of the file | | -| `exit.interpreter.file.mount_id` | int | Mount ID of the file | | -| `exit.interpreter.file.name` | string | File's basename | | -| `exit.interpreter.file.name.length` | int | Length of 'exit.interpreter.file.name' string | | -| `exit.interpreter.file.path` | string | File's path | | -| `exit.interpreter.file.path.length` | int | Length of 'exit.interpreter.file.path' string | | -| `exit.interpreter.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `exit.interpreter.file.uid` | int | UID of the file's owner | | -| `exit.interpreter.file.user` | string | User of the file's owner | | -| `exit.is_kworker` | bool | Indicates whether the process is a kworker | | -| `exit.is_thread` | bool | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | | -| `exit.pid` | int | Process ID of the process (also called thread group ID) | | -| `exit.ppid` | int | Parent process ID | | -| `exit.tid` | int | Thread ID of the thread | | -| `exit.tty_name` | string | Name of the TTY associated with the process | | -| `exit.uid` | int | UID of the process | | -| `exit.user` | string | User of the process | | +| Property | Definition | +| -------- | ------------- | +| [`exit.args`](#common-process-args-doc) | Arguments of the process (as a string, excluding argv0) | +| [`exit.args_flags`](#common-process-args_flags-doc) | Flags in the process arguments | +| [`exit.args_options`](#common-process-args_options-doc) | Argument of the process as options | +| [`exit.args_truncated`](#common-process-args_truncated-doc) | Indicator of arguments truncation | +| [`exit.argv`](#common-process-argv-doc) | Arguments of the process (as an array, excluding argv0) | +| [`exit.argv0`](#common-process-argv0-doc) | First argument of the process | +| [`exit.cap_effective`](#common-credentials-cap_effective-doc) | Effective capability set of the process | +| [`exit.cap_permitted`](#common-credentials-cap_permitted-doc) | Permitted capability set of the process | +| [`exit.cause`](#exit-cause-doc) | Cause of the process termination (one of EXITED, SIGNALED, COREDUMPED) | +| [`exit.code`](#exit-code-doc) | Exit code of the process or number of the signal that caused the process to terminate | +| [`exit.comm`](#common-process-comm-doc) | Comm attribute of the process | +| [`exit.container.id`](#common-process-container-id-doc) | Container ID | +| [`exit.cookie`](#common-process-cookie-doc) | Cookie of the process | +| [`exit.created_at`](#common-process-created_at-doc) | Timestamp of the creation of the process | +| [`exit.egid`](#common-credentials-egid-doc) | Effective GID of the process | +| [`exit.egroup`](#common-credentials-egroup-doc) | Effective group of the process | +| [`exit.envp`](#common-process-envp-doc) | Environment variables of the process | +| [`exit.envs`](#common-process-envs-doc) | Environment variable names of the process | +| [`exit.envs_truncated`](#common-process-envs_truncated-doc) | Indicator of environment variables truncation | +| [`exit.euid`](#common-credentials-euid-doc) | Effective UID of the process | +| [`exit.euser`](#common-credentials-euser-doc) | Effective user of the process | +| [`exit.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`exit.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`exit.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`exit.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`exit.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`exit.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`exit.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`exit.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`exit.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`exit.file.name`](#common-fileevent-name-doc) | File's basename | +| [`exit.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`exit.file.path`](#common-fileevent-path-doc) | File's path | +| [`exit.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`exit.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`exit.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`exit.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`exit.fsgid`](#common-credentials-fsgid-doc) | FileSystem-gid of the process | +| [`exit.fsgroup`](#common-credentials-fsgroup-doc) | FileSystem-group of the process | +| [`exit.fsuid`](#common-credentials-fsuid-doc) | FileSystem-uid of the process | +| [`exit.fsuser`](#common-credentials-fsuser-doc) | FileSystem-user of the process | +| [`exit.gid`](#common-credentials-gid-doc) | GID of the process | +| [`exit.group`](#common-credentials-group-doc) | Group of the process | +| [`exit.interpreter.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`exit.interpreter.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`exit.interpreter.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`exit.interpreter.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`exit.interpreter.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`exit.interpreter.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`exit.interpreter.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`exit.interpreter.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`exit.interpreter.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`exit.interpreter.file.name`](#common-fileevent-name-doc) | File's basename | +| [`exit.interpreter.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`exit.interpreter.file.path`](#common-fileevent-path-doc) | File's path | +| [`exit.interpreter.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`exit.interpreter.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`exit.interpreter.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`exit.interpreter.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`exit.is_kworker`](#common-pidcontext-is_kworker-doc) | Indicates whether the process is a kworker | +| [`exit.is_thread`](#common-process-is_thread-doc) | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | +| [`exit.pid`](#common-pidcontext-pid-doc) | Process ID of the process (also called thread group ID) | +| [`exit.ppid`](#common-process-ppid-doc) | Parent process ID | +| [`exit.tid`](#common-pidcontext-tid-doc) | Thread ID of the thread | +| [`exit.tty_name`](#common-process-tty_name-doc) | Name of the TTY associated with the process | +| [`exit.uid`](#common-credentials-uid-doc) | UID of the process | +| [`exit.user`](#common-credentials-user-doc) | User of the process | ### Event `link` Create a new name/alias for a file -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `link.file.change_time` | int | Change time of the file | | -| `link.file.destination.change_time` | int | Change time of the file | | -| `link.file.destination.filesystem` | string | File's filesystem | | -| `link.file.destination.gid` | int | GID of the file's owner | | -| `link.file.destination.group` | string | Group of the file's owner | | -| `link.file.destination.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `link.file.destination.inode` | int | Inode of the file | | -| `link.file.destination.mode` | int | Mode/rights of the file | Chmod mode constants | -| `link.file.destination.modification_time` | int | Modification time of the file | | -| `link.file.destination.mount_id` | int | Mount ID of the file | | -| `link.file.destination.name` | string | File's basename | | -| `link.file.destination.name.length` | int | Length of 'link.file.destination.name' string | | -| `link.file.destination.path` | string | File's path | | -| `link.file.destination.path.length` | int | Length of 'link.file.destination.path' string | | -| `link.file.destination.rights` | int | Mode/rights of the file | Chmod mode constants | -| `link.file.destination.uid` | int | UID of the file's owner | | -| `link.file.destination.user` | string | User of the file's owner | | -| `link.file.filesystem` | string | File's filesystem | | -| `link.file.gid` | int | GID of the file's owner | | -| `link.file.group` | string | Group of the file's owner | | -| `link.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `link.file.inode` | int | Inode of the file | | -| `link.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `link.file.modification_time` | int | Modification time of the file | | -| `link.file.mount_id` | int | Mount ID of the file | | -| `link.file.name` | string | File's basename | | -| `link.file.name.length` | int | Length of 'link.file.name' string | | -| `link.file.path` | string | File's path | | -| `link.file.path.length` | int | Length of 'link.file.path' string | | -| `link.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `link.file.uid` | int | UID of the file's owner | | -| `link.file.user` | string | User of the file's owner | | -| `link.retval` | int | Return value of the syscall | Error Constants | +| Property | Definition | +| -------- | ------------- | +| [`link.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`link.file.destination.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`link.file.destination.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`link.file.destination.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`link.file.destination.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`link.file.destination.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`link.file.destination.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`link.file.destination.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`link.file.destination.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`link.file.destination.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`link.file.destination.name`](#common-fileevent-name-doc) | File's basename | +| [`link.file.destination.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`link.file.destination.path`](#common-fileevent-path-doc) | File's path | +| [`link.file.destination.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`link.file.destination.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`link.file.destination.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`link.file.destination.user`](#common-filefields-user-doc) | User of the file's owner | +| [`link.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`link.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`link.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`link.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`link.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`link.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`link.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`link.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`link.file.name`](#common-fileevent-name-doc) | File's basename | +| [`link.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`link.file.path`](#common-fileevent-path-doc) | File's path | +| [`link.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`link.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`link.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`link.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`link.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | ### Event `load_module` A new kernel module was loaded -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `load_module.file.change_time` | int | Change time of the file | | -| `load_module.file.filesystem` | string | File's filesystem | | -| `load_module.file.gid` | int | GID of the file's owner | | -| `load_module.file.group` | string | Group of the file's owner | | -| `load_module.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `load_module.file.inode` | int | Inode of the file | | -| `load_module.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `load_module.file.modification_time` | int | Modification time of the file | | -| `load_module.file.mount_id` | int | Mount ID of the file | | -| `load_module.file.name` | string | File's basename | | -| `load_module.file.name.length` | int | Length of 'load_module.file.name' string | | -| `load_module.file.path` | string | File's path | | -| `load_module.file.path.length` | int | Length of 'load_module.file.path' string | | -| `load_module.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `load_module.file.uid` | int | UID of the file's owner | | -| `load_module.file.user` | string | User of the file's owner | | -| `load_module.loaded_from_memory` | bool | Indicates if the kernel module was loaded from memory | | -| `load_module.name` | string | Name of the new kernel module | | -| `load_module.retval` | int | Return value of the syscall | Error Constants | +| Property | Definition | +| -------- | ------------- | +| [`load_module.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`load_module.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`load_module.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`load_module.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`load_module.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`load_module.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`load_module.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`load_module.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`load_module.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`load_module.file.name`](#common-fileevent-name-doc) | File's basename | +| [`load_module.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`load_module.file.path`](#common-fileevent-path-doc) | File's path | +| [`load_module.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`load_module.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`load_module.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`load_module.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`load_module.loaded_from_memory`](#load_module-loaded_from_memory-doc) | Indicates if the kernel module was loaded from memory | +| [`load_module.name`](#load_module-name-doc) | Name of the new kernel module | +| [`load_module.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | ### Event `mkdir` A directory was created -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `mkdir.file.change_time` | int | Change time of the file | | -| `mkdir.file.destination.mode` | int | Mode/rights of the new directory | Chmod mode constants | -| `mkdir.file.destination.rights` | int | Mode/rights of the new directory | Chmod mode constants | -| `mkdir.file.filesystem` | string | File's filesystem | | -| `mkdir.file.gid` | int | GID of the file's owner | | -| `mkdir.file.group` | string | Group of the file's owner | | -| `mkdir.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `mkdir.file.inode` | int | Inode of the file | | -| `mkdir.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `mkdir.file.modification_time` | int | Modification time of the file | | -| `mkdir.file.mount_id` | int | Mount ID of the file | | -| `mkdir.file.name` | string | File's basename | | -| `mkdir.file.name.length` | int | Length of 'mkdir.file.name' string | | -| `mkdir.file.path` | string | File's path | | -| `mkdir.file.path.length` | int | Length of 'mkdir.file.path' string | | -| `mkdir.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `mkdir.file.uid` | int | UID of the file's owner | | -| `mkdir.file.user` | string | User of the file's owner | | -| `mkdir.retval` | int | Return value of the syscall | Error Constants | +| Property | Definition | +| -------- | ------------- | +| [`mkdir.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`mkdir.file.destination.mode`](#mkdir-file-destination-mode-doc) | Mode of the new directory | +| [`mkdir.file.destination.rights`](#mkdir-file-destination-rights-doc) | Rights of the new directory | +| [`mkdir.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`mkdir.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`mkdir.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`mkdir.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`mkdir.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`mkdir.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`mkdir.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`mkdir.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`mkdir.file.name`](#common-fileevent-name-doc) | File's basename | +| [`mkdir.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`mkdir.file.path`](#common-fileevent-path-doc) | File's path | +| [`mkdir.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`mkdir.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`mkdir.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`mkdir.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`mkdir.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | ### Event `mmap` A mmap command was executed -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `mmap.file.change_time` | int | Change time of the file | | -| `mmap.file.filesystem` | string | File's filesystem | | -| `mmap.file.gid` | int | GID of the file's owner | | -| `mmap.file.group` | string | Group of the file's owner | | -| `mmap.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `mmap.file.inode` | int | Inode of the file | | -| `mmap.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `mmap.file.modification_time` | int | Modification time of the file | | -| `mmap.file.mount_id` | int | Mount ID of the file | | -| `mmap.file.name` | string | File's basename | | -| `mmap.file.name.length` | int | Length of 'mmap.file.name' string | | -| `mmap.file.path` | string | File's path | | -| `mmap.file.path.length` | int | Length of 'mmap.file.path' string | | -| `mmap.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `mmap.file.uid` | int | UID of the file's owner | | -| `mmap.file.user` | string | User of the file's owner | | -| `mmap.flags` | int | memory segment flags | MMap flags | -| `mmap.protection` | int | memory segment protection | Protection constants | -| `mmap.retval` | int | Return value of the syscall | Error Constants | +| Property | Definition | +| -------- | ------------- | +| [`mmap.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`mmap.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`mmap.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`mmap.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`mmap.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`mmap.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`mmap.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`mmap.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`mmap.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`mmap.file.name`](#common-fileevent-name-doc) | File's basename | +| [`mmap.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`mmap.file.path`](#common-fileevent-path-doc) | File's path | +| [`mmap.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`mmap.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`mmap.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`mmap.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`mmap.flags`](#mmap-flags-doc) | memory segment flags | +| [`mmap.protection`](#mmap-protection-doc) | memory segment protection | +| [`mmap.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | ### Event `mount` @@ -752,702 +752,1833 @@ _This event type is experimental and may change in the future._ A filesystem was mounted -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `mount.fs_type` | string | Type of the mounted file system | | -| `mount.mountpoint.path` | string | Path of the mount point | | -| `mount.retval` | int | Return value of the syscall | Error Constants | -| `mount.source.path` | string | Source path of a bind mount | | +| Property | Definition | +| -------- | ------------- | +| [`mount.fs_type`](#mount-fs_type-doc) | Type of the mounted file system | +| [`mount.mountpoint.path`](#mount-mountpoint-path-doc) | Path of the mount point | +| [`mount.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | +| [`mount.source.path`](#mount-source-path-doc) | Source path of a bind mount | ### Event `mprotect` A mprotect command was executed -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `mprotect.req_protection` | int | new memory segment protection | Virtual Memory flags | -| `mprotect.retval` | int | Return value of the syscall | Error Constants | -| `mprotect.vm_protection` | int | initial memory segment protection | Virtual Memory flags | +| Property | Definition | +| -------- | ------------- | +| [`mprotect.req_protection`](#mprotect-req_protection-doc) | new memory segment protection | +| [`mprotect.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | +| [`mprotect.vm_protection`](#mprotect-vm_protection-doc) | initial memory segment protection | ### Event `open` A file was opened -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `open.file.change_time` | int | Change time of the file | | -| `open.file.destination.mode` | int | Mode of the created file | Chmod mode constants | -| `open.file.filesystem` | string | File's filesystem | | -| `open.file.gid` | int | GID of the file's owner | | -| `open.file.group` | string | Group of the file's owner | | -| `open.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `open.file.inode` | int | Inode of the file | | -| `open.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `open.file.modification_time` | int | Modification time of the file | | -| `open.file.mount_id` | int | Mount ID of the file | | -| `open.file.name` | string | File's basename | | -| `open.file.name.length` | int | Length of 'open.file.name' string | | -| `open.file.path` | string | File's path | | -| `open.file.path.length` | int | Length of 'open.file.path' string | | -| `open.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `open.file.uid` | int | UID of the file's owner | | -| `open.file.user` | string | User of the file's owner | | -| `open.flags` | int | Flags used when opening the file | Open flags | -| `open.retval` | int | Return value of the syscall | Error Constants | +| Property | Definition | +| -------- | ------------- | +| [`open.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`open.file.destination.mode`](#open-file-destination-mode-doc) | Mode of the created file | +| [`open.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`open.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`open.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`open.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`open.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`open.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`open.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`open.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`open.file.name`](#common-fileevent-name-doc) | File's basename | +| [`open.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`open.file.path`](#common-fileevent-path-doc) | File's path | +| [`open.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`open.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`open.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`open.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`open.flags`](#open-flags-doc) | Flags used when opening the file | +| [`open.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | ### Event `ptrace` A ptrace command was executed -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `ptrace.request` | int | ptrace request | Ptrace constants | -| `ptrace.retval` | int | Return value of the syscall | Error Constants | -| `ptrace.tracee.ancestors.args` | string | Arguments of the process (as a string) | | -| `ptrace.tracee.ancestors.args_flags` | string | Arguments of the process (as an array) | | -| `ptrace.tracee.ancestors.args_options` | string | Arguments of the process (as an array) | | -| `ptrace.tracee.ancestors.args_truncated` | bool | Indicator of arguments truncation | | -| `ptrace.tracee.ancestors.argv` | string | Arguments of the process (as an array) | | -| `ptrace.tracee.ancestors.argv0` | string | First argument of the process | | -| `ptrace.tracee.ancestors.cap_effective` | int | Effective capability set of the process | Kernel Capability constants | -| `ptrace.tracee.ancestors.cap_permitted` | int | Permitted capability set of the process | Kernel Capability constants | -| `ptrace.tracee.ancestors.comm` | string | Comm attribute of the process | | -| `ptrace.tracee.ancestors.container.id` | string | Container ID | | -| `ptrace.tracee.ancestors.cookie` | int | Cookie of the process | | -| `ptrace.tracee.ancestors.created_at` | int | Timestamp of the creation of the process | | -| `ptrace.tracee.ancestors.egid` | int | Effective GID of the process | | -| `ptrace.tracee.ancestors.egroup` | string | Effective group of the process | | -| `ptrace.tracee.ancestors.envp` | string | Environment variables of the process | | -| `ptrace.tracee.ancestors.envs` | string | Environment variable names of the process | | -| `ptrace.tracee.ancestors.envs_truncated` | bool | Indicator of environment variables truncation | | -| `ptrace.tracee.ancestors.euid` | int | Effective UID of the process | | -| `ptrace.tracee.ancestors.euser` | string | Effective user of the process | | -| `ptrace.tracee.ancestors.file.change_time` | int | Change time of the file | | -| `ptrace.tracee.ancestors.file.filesystem` | string | File's filesystem | | -| `ptrace.tracee.ancestors.file.gid` | int | GID of the file's owner | | -| `ptrace.tracee.ancestors.file.group` | string | Group of the file's owner | | -| `ptrace.tracee.ancestors.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `ptrace.tracee.ancestors.file.inode` | int | Inode of the file | | -| `ptrace.tracee.ancestors.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `ptrace.tracee.ancestors.file.modification_time` | int | Modification time of the file | | -| `ptrace.tracee.ancestors.file.mount_id` | int | Mount ID of the file | | -| `ptrace.tracee.ancestors.file.name` | string | File's basename | | -| `ptrace.tracee.ancestors.file.name.length` | int | Length of 'ptrace.tracee.ancestors.file.name' string | | -| `ptrace.tracee.ancestors.file.path` | string | File's path | | -| `ptrace.tracee.ancestors.file.path.length` | int | Length of 'ptrace.tracee.ancestors.file.path' string | | -| `ptrace.tracee.ancestors.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `ptrace.tracee.ancestors.file.uid` | int | UID of the file's owner | | -| `ptrace.tracee.ancestors.file.user` | string | User of the file's owner | | -| `ptrace.tracee.ancestors.fsgid` | int | FileSystem-gid of the process | | -| `ptrace.tracee.ancestors.fsgroup` | string | FileSystem-group of the process | | -| `ptrace.tracee.ancestors.fsuid` | int | FileSystem-uid of the process | | -| `ptrace.tracee.ancestors.fsuser` | string | FileSystem-user of the process | | -| `ptrace.tracee.ancestors.gid` | int | GID of the process | | -| `ptrace.tracee.ancestors.group` | string | Group of the process | | -| `ptrace.tracee.ancestors.interpreter.file.change_time` | int | Change time of the file | | -| `ptrace.tracee.ancestors.interpreter.file.filesystem` | string | File's filesystem | | -| `ptrace.tracee.ancestors.interpreter.file.gid` | int | GID of the file's owner | | -| `ptrace.tracee.ancestors.interpreter.file.group` | string | Group of the file's owner | | -| `ptrace.tracee.ancestors.interpreter.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `ptrace.tracee.ancestors.interpreter.file.inode` | int | Inode of the file | | -| `ptrace.tracee.ancestors.interpreter.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `ptrace.tracee.ancestors.interpreter.file.modification_time` | int | Modification time of the file | | -| `ptrace.tracee.ancestors.interpreter.file.mount_id` | int | Mount ID of the file | | -| `ptrace.tracee.ancestors.interpreter.file.name` | string | File's basename | | -| `ptrace.tracee.ancestors.interpreter.file.name.length` | int | Length of 'ptrace.tracee.ancestors.interpreter.file.name' string | | -| `ptrace.tracee.ancestors.interpreter.file.path` | string | File's path | | -| `ptrace.tracee.ancestors.interpreter.file.path.length` | int | Length of 'ptrace.tracee.ancestors.interpreter.file.path' string | | -| `ptrace.tracee.ancestors.interpreter.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `ptrace.tracee.ancestors.interpreter.file.uid` | int | UID of the file's owner | | -| `ptrace.tracee.ancestors.interpreter.file.user` | string | User of the file's owner | | -| `ptrace.tracee.ancestors.is_kworker` | bool | Indicates whether the process is a kworker | | -| `ptrace.tracee.ancestors.is_thread` | bool | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | | -| `ptrace.tracee.ancestors.pid` | int | Process ID of the process (also called thread group ID) | | -| `ptrace.tracee.ancestors.ppid` | int | Parent process ID | | -| `ptrace.tracee.ancestors.tid` | int | Thread ID of the thread | | -| `ptrace.tracee.ancestors.tty_name` | string | Name of the TTY associated with the process | | -| `ptrace.tracee.ancestors.uid` | int | UID of the process | | -| `ptrace.tracee.ancestors.user` | string | User of the process | | -| `ptrace.tracee.args` | string | Arguments of the process (as a string) | | -| `ptrace.tracee.args_flags` | string | Arguments of the process (as an array) | | -| `ptrace.tracee.args_options` | string | Arguments of the process (as an array) | | -| `ptrace.tracee.args_truncated` | bool | Indicator of arguments truncation | | -| `ptrace.tracee.argv` | string | Arguments of the process (as an array) | | -| `ptrace.tracee.argv0` | string | First argument of the process | | -| `ptrace.tracee.cap_effective` | int | Effective capability set of the process | Kernel Capability constants | -| `ptrace.tracee.cap_permitted` | int | Permitted capability set of the process | Kernel Capability constants | -| `ptrace.tracee.comm` | string | Comm attribute of the process | | -| `ptrace.tracee.container.id` | string | Container ID | | -| `ptrace.tracee.cookie` | int | Cookie of the process | | -| `ptrace.tracee.created_at` | int | Timestamp of the creation of the process | | -| `ptrace.tracee.egid` | int | Effective GID of the process | | -| `ptrace.tracee.egroup` | string | Effective group of the process | | -| `ptrace.tracee.envp` | string | Environment variables of the process | | -| `ptrace.tracee.envs` | string | Environment variable names of the process | | -| `ptrace.tracee.envs_truncated` | bool | Indicator of environment variables truncation | | -| `ptrace.tracee.euid` | int | Effective UID of the process | | -| `ptrace.tracee.euser` | string | Effective user of the process | | -| `ptrace.tracee.file.change_time` | int | Change time of the file | | -| `ptrace.tracee.file.filesystem` | string | File's filesystem | | -| `ptrace.tracee.file.gid` | int | GID of the file's owner | | -| `ptrace.tracee.file.group` | string | Group of the file's owner | | -| `ptrace.tracee.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `ptrace.tracee.file.inode` | int | Inode of the file | | -| `ptrace.tracee.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `ptrace.tracee.file.modification_time` | int | Modification time of the file | | -| `ptrace.tracee.file.mount_id` | int | Mount ID of the file | | -| `ptrace.tracee.file.name` | string | File's basename | | -| `ptrace.tracee.file.name.length` | int | Length of 'ptrace.tracee.file.name' string | | -| `ptrace.tracee.file.path` | string | File's path | | -| `ptrace.tracee.file.path.length` | int | Length of 'ptrace.tracee.file.path' string | | -| `ptrace.tracee.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `ptrace.tracee.file.uid` | int | UID of the file's owner | | -| `ptrace.tracee.file.user` | string | User of the file's owner | | -| `ptrace.tracee.fsgid` | int | FileSystem-gid of the process | | -| `ptrace.tracee.fsgroup` | string | FileSystem-group of the process | | -| `ptrace.tracee.fsuid` | int | FileSystem-uid of the process | | -| `ptrace.tracee.fsuser` | string | FileSystem-user of the process | | -| `ptrace.tracee.gid` | int | GID of the process | | -| `ptrace.tracee.group` | string | Group of the process | | -| `ptrace.tracee.interpreter.file.change_time` | int | Change time of the file | | -| `ptrace.tracee.interpreter.file.filesystem` | string | File's filesystem | | -| `ptrace.tracee.interpreter.file.gid` | int | GID of the file's owner | | -| `ptrace.tracee.interpreter.file.group` | string | Group of the file's owner | | -| `ptrace.tracee.interpreter.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `ptrace.tracee.interpreter.file.inode` | int | Inode of the file | | -| `ptrace.tracee.interpreter.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `ptrace.tracee.interpreter.file.modification_time` | int | Modification time of the file | | -| `ptrace.tracee.interpreter.file.mount_id` | int | Mount ID of the file | | -| `ptrace.tracee.interpreter.file.name` | string | File's basename | | -| `ptrace.tracee.interpreter.file.name.length` | int | Length of 'ptrace.tracee.interpreter.file.name' string | | -| `ptrace.tracee.interpreter.file.path` | string | File's path | | -| `ptrace.tracee.interpreter.file.path.length` | int | Length of 'ptrace.tracee.interpreter.file.path' string | | -| `ptrace.tracee.interpreter.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `ptrace.tracee.interpreter.file.uid` | int | UID of the file's owner | | -| `ptrace.tracee.interpreter.file.user` | string | User of the file's owner | | -| `ptrace.tracee.is_kworker` | bool | Indicates whether the process is a kworker | | -| `ptrace.tracee.is_thread` | bool | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | | -| `ptrace.tracee.parent.args` | string | Arguments of the process (as a string) | | -| `ptrace.tracee.parent.args_flags` | string | Arguments of the process (as an array) | | -| `ptrace.tracee.parent.args_options` | string | Arguments of the process (as an array) | | -| `ptrace.tracee.parent.args_truncated` | bool | Indicator of arguments truncation | | -| `ptrace.tracee.parent.argv` | string | Arguments of the process (as an array) | | -| `ptrace.tracee.parent.argv0` | string | First argument of the process | | -| `ptrace.tracee.parent.cap_effective` | int | Effective capability set of the process | Kernel Capability constants | -| `ptrace.tracee.parent.cap_permitted` | int | Permitted capability set of the process | Kernel Capability constants | -| `ptrace.tracee.parent.comm` | string | Comm attribute of the process | | -| `ptrace.tracee.parent.container.id` | string | Container ID | | -| `ptrace.tracee.parent.cookie` | int | Cookie of the process | | -| `ptrace.tracee.parent.created_at` | int | Timestamp of the creation of the process | | -| `ptrace.tracee.parent.egid` | int | Effective GID of the process | | -| `ptrace.tracee.parent.egroup` | string | Effective group of the process | | -| `ptrace.tracee.parent.envp` | string | Environment variables of the process | | -| `ptrace.tracee.parent.envs` | string | Environment variable names of the process | | -| `ptrace.tracee.parent.envs_truncated` | bool | Indicator of environment variables truncation | | -| `ptrace.tracee.parent.euid` | int | Effective UID of the process | | -| `ptrace.tracee.parent.euser` | string | Effective user of the process | | -| `ptrace.tracee.parent.file.change_time` | int | Change time of the file | | -| `ptrace.tracee.parent.file.filesystem` | string | File's filesystem | | -| `ptrace.tracee.parent.file.gid` | int | GID of the file's owner | | -| `ptrace.tracee.parent.file.group` | string | Group of the file's owner | | -| `ptrace.tracee.parent.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `ptrace.tracee.parent.file.inode` | int | Inode of the file | | -| `ptrace.tracee.parent.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `ptrace.tracee.parent.file.modification_time` | int | Modification time of the file | | -| `ptrace.tracee.parent.file.mount_id` | int | Mount ID of the file | | -| `ptrace.tracee.parent.file.name` | string | File's basename | | -| `ptrace.tracee.parent.file.name.length` | int | Length of 'ptrace.tracee.parent.file.name' string | | -| `ptrace.tracee.parent.file.path` | string | File's path | | -| `ptrace.tracee.parent.file.path.length` | int | Length of 'ptrace.tracee.parent.file.path' string | | -| `ptrace.tracee.parent.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `ptrace.tracee.parent.file.uid` | int | UID of the file's owner | | -| `ptrace.tracee.parent.file.user` | string | User of the file's owner | | -| `ptrace.tracee.parent.fsgid` | int | FileSystem-gid of the process | | -| `ptrace.tracee.parent.fsgroup` | string | FileSystem-group of the process | | -| `ptrace.tracee.parent.fsuid` | int | FileSystem-uid of the process | | -| `ptrace.tracee.parent.fsuser` | string | FileSystem-user of the process | | -| `ptrace.tracee.parent.gid` | int | GID of the process | | -| `ptrace.tracee.parent.group` | string | Group of the process | | -| `ptrace.tracee.parent.interpreter.file.change_time` | int | Change time of the file | | -| `ptrace.tracee.parent.interpreter.file.filesystem` | string | File's filesystem | | -| `ptrace.tracee.parent.interpreter.file.gid` | int | GID of the file's owner | | -| `ptrace.tracee.parent.interpreter.file.group` | string | Group of the file's owner | | -| `ptrace.tracee.parent.interpreter.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `ptrace.tracee.parent.interpreter.file.inode` | int | Inode of the file | | -| `ptrace.tracee.parent.interpreter.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `ptrace.tracee.parent.interpreter.file.modification_time` | int | Modification time of the file | | -| `ptrace.tracee.parent.interpreter.file.mount_id` | int | Mount ID of the file | | -| `ptrace.tracee.parent.interpreter.file.name` | string | File's basename | | -| `ptrace.tracee.parent.interpreter.file.name.length` | int | Length of 'ptrace.tracee.parent.interpreter.file.name' string | | -| `ptrace.tracee.parent.interpreter.file.path` | string | File's path | | -| `ptrace.tracee.parent.interpreter.file.path.length` | int | Length of 'ptrace.tracee.parent.interpreter.file.path' string | | -| `ptrace.tracee.parent.interpreter.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `ptrace.tracee.parent.interpreter.file.uid` | int | UID of the file's owner | | -| `ptrace.tracee.parent.interpreter.file.user` | string | User of the file's owner | | -| `ptrace.tracee.parent.is_kworker` | bool | Indicates whether the process is a kworker | | -| `ptrace.tracee.parent.is_thread` | bool | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | | -| `ptrace.tracee.parent.pid` | int | Process ID of the process (also called thread group ID) | | -| `ptrace.tracee.parent.ppid` | int | Parent process ID | | -| `ptrace.tracee.parent.tid` | int | Thread ID of the thread | | -| `ptrace.tracee.parent.tty_name` | string | Name of the TTY associated with the process | | -| `ptrace.tracee.parent.uid` | int | UID of the process | | -| `ptrace.tracee.parent.user` | string | User of the process | | -| `ptrace.tracee.pid` | int | Process ID of the process (also called thread group ID) | | -| `ptrace.tracee.ppid` | int | Parent process ID | | -| `ptrace.tracee.tid` | int | Thread ID of the thread | | -| `ptrace.tracee.tty_name` | string | Name of the TTY associated with the process | | -| `ptrace.tracee.uid` | int | UID of the process | | -| `ptrace.tracee.user` | string | User of the process | | +| Property | Definition | +| -------- | ------------- | +| [`ptrace.request`](#ptrace-request-doc) | ptrace request | +| [`ptrace.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | +| [`ptrace.tracee.ancestors.args`](#common-process-args-doc) | Arguments of the process (as a string, excluding argv0) | +| [`ptrace.tracee.ancestors.args_flags`](#common-process-args_flags-doc) | Flags in the process arguments | +| [`ptrace.tracee.ancestors.args_options`](#common-process-args_options-doc) | Argument of the process as options | +| [`ptrace.tracee.ancestors.args_truncated`](#common-process-args_truncated-doc) | Indicator of arguments truncation | +| [`ptrace.tracee.ancestors.argv`](#common-process-argv-doc) | Arguments of the process (as an array, excluding argv0) | +| [`ptrace.tracee.ancestors.argv0`](#common-process-argv0-doc) | First argument of the process | +| [`ptrace.tracee.ancestors.cap_effective`](#common-credentials-cap_effective-doc) | Effective capability set of the process | +| [`ptrace.tracee.ancestors.cap_permitted`](#common-credentials-cap_permitted-doc) | Permitted capability set of the process | +| [`ptrace.tracee.ancestors.comm`](#common-process-comm-doc) | Comm attribute of the process | +| [`ptrace.tracee.ancestors.container.id`](#common-process-container-id-doc) | Container ID | +| [`ptrace.tracee.ancestors.cookie`](#common-process-cookie-doc) | Cookie of the process | +| [`ptrace.tracee.ancestors.created_at`](#common-process-created_at-doc) | Timestamp of the creation of the process | +| [`ptrace.tracee.ancestors.egid`](#common-credentials-egid-doc) | Effective GID of the process | +| [`ptrace.tracee.ancestors.egroup`](#common-credentials-egroup-doc) | Effective group of the process | +| [`ptrace.tracee.ancestors.envp`](#common-process-envp-doc) | Environment variables of the process | +| [`ptrace.tracee.ancestors.envs`](#common-process-envs-doc) | Environment variable names of the process | +| [`ptrace.tracee.ancestors.envs_truncated`](#common-process-envs_truncated-doc) | Indicator of environment variables truncation | +| [`ptrace.tracee.ancestors.euid`](#common-credentials-euid-doc) | Effective UID of the process | +| [`ptrace.tracee.ancestors.euser`](#common-credentials-euser-doc) | Effective user of the process | +| [`ptrace.tracee.ancestors.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`ptrace.tracee.ancestors.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`ptrace.tracee.ancestors.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`ptrace.tracee.ancestors.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`ptrace.tracee.ancestors.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`ptrace.tracee.ancestors.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`ptrace.tracee.ancestors.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`ptrace.tracee.ancestors.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`ptrace.tracee.ancestors.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`ptrace.tracee.ancestors.file.name`](#common-fileevent-name-doc) | File's basename | +| [`ptrace.tracee.ancestors.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`ptrace.tracee.ancestors.file.path`](#common-fileevent-path-doc) | File's path | +| [`ptrace.tracee.ancestors.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`ptrace.tracee.ancestors.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`ptrace.tracee.ancestors.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`ptrace.tracee.ancestors.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`ptrace.tracee.ancestors.fsgid`](#common-credentials-fsgid-doc) | FileSystem-gid of the process | +| [`ptrace.tracee.ancestors.fsgroup`](#common-credentials-fsgroup-doc) | FileSystem-group of the process | +| [`ptrace.tracee.ancestors.fsuid`](#common-credentials-fsuid-doc) | FileSystem-uid of the process | +| [`ptrace.tracee.ancestors.fsuser`](#common-credentials-fsuser-doc) | FileSystem-user of the process | +| [`ptrace.tracee.ancestors.gid`](#common-credentials-gid-doc) | GID of the process | +| [`ptrace.tracee.ancestors.group`](#common-credentials-group-doc) | Group of the process | +| [`ptrace.tracee.ancestors.interpreter.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`ptrace.tracee.ancestors.interpreter.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`ptrace.tracee.ancestors.interpreter.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`ptrace.tracee.ancestors.interpreter.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`ptrace.tracee.ancestors.interpreter.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`ptrace.tracee.ancestors.interpreter.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`ptrace.tracee.ancestors.interpreter.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`ptrace.tracee.ancestors.interpreter.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`ptrace.tracee.ancestors.interpreter.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`ptrace.tracee.ancestors.interpreter.file.name`](#common-fileevent-name-doc) | File's basename | +| [`ptrace.tracee.ancestors.interpreter.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`ptrace.tracee.ancestors.interpreter.file.path`](#common-fileevent-path-doc) | File's path | +| [`ptrace.tracee.ancestors.interpreter.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`ptrace.tracee.ancestors.interpreter.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`ptrace.tracee.ancestors.interpreter.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`ptrace.tracee.ancestors.interpreter.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`ptrace.tracee.ancestors.is_kworker`](#common-pidcontext-is_kworker-doc) | Indicates whether the process is a kworker | +| [`ptrace.tracee.ancestors.is_thread`](#common-process-is_thread-doc) | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | +| [`ptrace.tracee.ancestors.pid`](#common-pidcontext-pid-doc) | Process ID of the process (also called thread group ID) | +| [`ptrace.tracee.ancestors.ppid`](#common-process-ppid-doc) | Parent process ID | +| [`ptrace.tracee.ancestors.tid`](#common-pidcontext-tid-doc) | Thread ID of the thread | +| [`ptrace.tracee.ancestors.tty_name`](#common-process-tty_name-doc) | Name of the TTY associated with the process | +| [`ptrace.tracee.ancestors.uid`](#common-credentials-uid-doc) | UID of the process | +| [`ptrace.tracee.ancestors.user`](#common-credentials-user-doc) | User of the process | +| [`ptrace.tracee.args`](#common-process-args-doc) | Arguments of the process (as a string, excluding argv0) | +| [`ptrace.tracee.args_flags`](#common-process-args_flags-doc) | Flags in the process arguments | +| [`ptrace.tracee.args_options`](#common-process-args_options-doc) | Argument of the process as options | +| [`ptrace.tracee.args_truncated`](#common-process-args_truncated-doc) | Indicator of arguments truncation | +| [`ptrace.tracee.argv`](#common-process-argv-doc) | Arguments of the process (as an array, excluding argv0) | +| [`ptrace.tracee.argv0`](#common-process-argv0-doc) | First argument of the process | +| [`ptrace.tracee.cap_effective`](#common-credentials-cap_effective-doc) | Effective capability set of the process | +| [`ptrace.tracee.cap_permitted`](#common-credentials-cap_permitted-doc) | Permitted capability set of the process | +| [`ptrace.tracee.comm`](#common-process-comm-doc) | Comm attribute of the process | +| [`ptrace.tracee.container.id`](#common-process-container-id-doc) | Container ID | +| [`ptrace.tracee.cookie`](#common-process-cookie-doc) | Cookie of the process | +| [`ptrace.tracee.created_at`](#common-process-created_at-doc) | Timestamp of the creation of the process | +| [`ptrace.tracee.egid`](#common-credentials-egid-doc) | Effective GID of the process | +| [`ptrace.tracee.egroup`](#common-credentials-egroup-doc) | Effective group of the process | +| [`ptrace.tracee.envp`](#common-process-envp-doc) | Environment variables of the process | +| [`ptrace.tracee.envs`](#common-process-envs-doc) | Environment variable names of the process | +| [`ptrace.tracee.envs_truncated`](#common-process-envs_truncated-doc) | Indicator of environment variables truncation | +| [`ptrace.tracee.euid`](#common-credentials-euid-doc) | Effective UID of the process | +| [`ptrace.tracee.euser`](#common-credentials-euser-doc) | Effective user of the process | +| [`ptrace.tracee.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`ptrace.tracee.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`ptrace.tracee.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`ptrace.tracee.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`ptrace.tracee.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`ptrace.tracee.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`ptrace.tracee.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`ptrace.tracee.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`ptrace.tracee.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`ptrace.tracee.file.name`](#common-fileevent-name-doc) | File's basename | +| [`ptrace.tracee.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`ptrace.tracee.file.path`](#common-fileevent-path-doc) | File's path | +| [`ptrace.tracee.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`ptrace.tracee.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`ptrace.tracee.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`ptrace.tracee.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`ptrace.tracee.fsgid`](#common-credentials-fsgid-doc) | FileSystem-gid of the process | +| [`ptrace.tracee.fsgroup`](#common-credentials-fsgroup-doc) | FileSystem-group of the process | +| [`ptrace.tracee.fsuid`](#common-credentials-fsuid-doc) | FileSystem-uid of the process | +| [`ptrace.tracee.fsuser`](#common-credentials-fsuser-doc) | FileSystem-user of the process | +| [`ptrace.tracee.gid`](#common-credentials-gid-doc) | GID of the process | +| [`ptrace.tracee.group`](#common-credentials-group-doc) | Group of the process | +| [`ptrace.tracee.interpreter.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`ptrace.tracee.interpreter.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`ptrace.tracee.interpreter.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`ptrace.tracee.interpreter.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`ptrace.tracee.interpreter.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`ptrace.tracee.interpreter.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`ptrace.tracee.interpreter.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`ptrace.tracee.interpreter.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`ptrace.tracee.interpreter.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`ptrace.tracee.interpreter.file.name`](#common-fileevent-name-doc) | File's basename | +| [`ptrace.tracee.interpreter.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`ptrace.tracee.interpreter.file.path`](#common-fileevent-path-doc) | File's path | +| [`ptrace.tracee.interpreter.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`ptrace.tracee.interpreter.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`ptrace.tracee.interpreter.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`ptrace.tracee.interpreter.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`ptrace.tracee.is_kworker`](#common-pidcontext-is_kworker-doc) | Indicates whether the process is a kworker | +| [`ptrace.tracee.is_thread`](#common-process-is_thread-doc) | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | +| [`ptrace.tracee.parent.args`](#common-process-args-doc) | Arguments of the process (as a string, excluding argv0) | +| [`ptrace.tracee.parent.args_flags`](#common-process-args_flags-doc) | Flags in the process arguments | +| [`ptrace.tracee.parent.args_options`](#common-process-args_options-doc) | Argument of the process as options | +| [`ptrace.tracee.parent.args_truncated`](#common-process-args_truncated-doc) | Indicator of arguments truncation | +| [`ptrace.tracee.parent.argv`](#common-process-argv-doc) | Arguments of the process (as an array, excluding argv0) | +| [`ptrace.tracee.parent.argv0`](#common-process-argv0-doc) | First argument of the process | +| [`ptrace.tracee.parent.cap_effective`](#common-credentials-cap_effective-doc) | Effective capability set of the process | +| [`ptrace.tracee.parent.cap_permitted`](#common-credentials-cap_permitted-doc) | Permitted capability set of the process | +| [`ptrace.tracee.parent.comm`](#common-process-comm-doc) | Comm attribute of the process | +| [`ptrace.tracee.parent.container.id`](#common-process-container-id-doc) | Container ID | +| [`ptrace.tracee.parent.cookie`](#common-process-cookie-doc) | Cookie of the process | +| [`ptrace.tracee.parent.created_at`](#common-process-created_at-doc) | Timestamp of the creation of the process | +| [`ptrace.tracee.parent.egid`](#common-credentials-egid-doc) | Effective GID of the process | +| [`ptrace.tracee.parent.egroup`](#common-credentials-egroup-doc) | Effective group of the process | +| [`ptrace.tracee.parent.envp`](#common-process-envp-doc) | Environment variables of the process | +| [`ptrace.tracee.parent.envs`](#common-process-envs-doc) | Environment variable names of the process | +| [`ptrace.tracee.parent.envs_truncated`](#common-process-envs_truncated-doc) | Indicator of environment variables truncation | +| [`ptrace.tracee.parent.euid`](#common-credentials-euid-doc) | Effective UID of the process | +| [`ptrace.tracee.parent.euser`](#common-credentials-euser-doc) | Effective user of the process | +| [`ptrace.tracee.parent.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`ptrace.tracee.parent.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`ptrace.tracee.parent.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`ptrace.tracee.parent.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`ptrace.tracee.parent.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`ptrace.tracee.parent.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`ptrace.tracee.parent.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`ptrace.tracee.parent.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`ptrace.tracee.parent.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`ptrace.tracee.parent.file.name`](#common-fileevent-name-doc) | File's basename | +| [`ptrace.tracee.parent.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`ptrace.tracee.parent.file.path`](#common-fileevent-path-doc) | File's path | +| [`ptrace.tracee.parent.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`ptrace.tracee.parent.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`ptrace.tracee.parent.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`ptrace.tracee.parent.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`ptrace.tracee.parent.fsgid`](#common-credentials-fsgid-doc) | FileSystem-gid of the process | +| [`ptrace.tracee.parent.fsgroup`](#common-credentials-fsgroup-doc) | FileSystem-group of the process | +| [`ptrace.tracee.parent.fsuid`](#common-credentials-fsuid-doc) | FileSystem-uid of the process | +| [`ptrace.tracee.parent.fsuser`](#common-credentials-fsuser-doc) | FileSystem-user of the process | +| [`ptrace.tracee.parent.gid`](#common-credentials-gid-doc) | GID of the process | +| [`ptrace.tracee.parent.group`](#common-credentials-group-doc) | Group of the process | +| [`ptrace.tracee.parent.interpreter.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`ptrace.tracee.parent.interpreter.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`ptrace.tracee.parent.interpreter.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`ptrace.tracee.parent.interpreter.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`ptrace.tracee.parent.interpreter.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`ptrace.tracee.parent.interpreter.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`ptrace.tracee.parent.interpreter.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`ptrace.tracee.parent.interpreter.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`ptrace.tracee.parent.interpreter.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`ptrace.tracee.parent.interpreter.file.name`](#common-fileevent-name-doc) | File's basename | +| [`ptrace.tracee.parent.interpreter.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`ptrace.tracee.parent.interpreter.file.path`](#common-fileevent-path-doc) | File's path | +| [`ptrace.tracee.parent.interpreter.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`ptrace.tracee.parent.interpreter.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`ptrace.tracee.parent.interpreter.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`ptrace.tracee.parent.interpreter.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`ptrace.tracee.parent.is_kworker`](#common-pidcontext-is_kworker-doc) | Indicates whether the process is a kworker | +| [`ptrace.tracee.parent.is_thread`](#common-process-is_thread-doc) | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | +| [`ptrace.tracee.parent.pid`](#common-pidcontext-pid-doc) | Process ID of the process (also called thread group ID) | +| [`ptrace.tracee.parent.ppid`](#common-process-ppid-doc) | Parent process ID | +| [`ptrace.tracee.parent.tid`](#common-pidcontext-tid-doc) | Thread ID of the thread | +| [`ptrace.tracee.parent.tty_name`](#common-process-tty_name-doc) | Name of the TTY associated with the process | +| [`ptrace.tracee.parent.uid`](#common-credentials-uid-doc) | UID of the process | +| [`ptrace.tracee.parent.user`](#common-credentials-user-doc) | User of the process | +| [`ptrace.tracee.pid`](#common-pidcontext-pid-doc) | Process ID of the process (also called thread group ID) | +| [`ptrace.tracee.ppid`](#common-process-ppid-doc) | Parent process ID | +| [`ptrace.tracee.tid`](#common-pidcontext-tid-doc) | Thread ID of the thread | +| [`ptrace.tracee.tty_name`](#common-process-tty_name-doc) | Name of the TTY associated with the process | +| [`ptrace.tracee.uid`](#common-credentials-uid-doc) | UID of the process | +| [`ptrace.tracee.user`](#common-credentials-user-doc) | User of the process | ### Event `removexattr` Remove extended attributes -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `removexattr.file.change_time` | int | Change time of the file | | -| `removexattr.file.destination.name` | string | Name of the extended attribute | | -| `removexattr.file.destination.namespace` | string | Namespace of the extended attribute | | -| `removexattr.file.filesystem` | string | File's filesystem | | -| `removexattr.file.gid` | int | GID of the file's owner | | -| `removexattr.file.group` | string | Group of the file's owner | | -| `removexattr.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `removexattr.file.inode` | int | Inode of the file | | -| `removexattr.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `removexattr.file.modification_time` | int | Modification time of the file | | -| `removexattr.file.mount_id` | int | Mount ID of the file | | -| `removexattr.file.name` | string | File's basename | | -| `removexattr.file.name.length` | int | Length of 'removexattr.file.name' string | | -| `removexattr.file.path` | string | File's path | | -| `removexattr.file.path.length` | int | Length of 'removexattr.file.path' string | | -| `removexattr.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `removexattr.file.uid` | int | UID of the file's owner | | -| `removexattr.file.user` | string | User of the file's owner | | -| `removexattr.retval` | int | Return value of the syscall | Error Constants | +| Property | Definition | +| -------- | ------------- | +| [`removexattr.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`removexattr.file.destination.name`](#common-setxattrevent-file-destination-name-doc) | Name of the extended attribute | +| [`removexattr.file.destination.namespace`](#common-setxattrevent-file-destination-namespace-doc) | Namespace of the extended attribute | +| [`removexattr.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`removexattr.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`removexattr.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`removexattr.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`removexattr.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`removexattr.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`removexattr.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`removexattr.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`removexattr.file.name`](#common-fileevent-name-doc) | File's basename | +| [`removexattr.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`removexattr.file.path`](#common-fileevent-path-doc) | File's path | +| [`removexattr.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`removexattr.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`removexattr.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`removexattr.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`removexattr.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | ### Event `rename` A file/directory was renamed -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `rename.file.change_time` | int | Change time of the file | | -| `rename.file.destination.change_time` | int | Change time of the file | | -| `rename.file.destination.filesystem` | string | File's filesystem | | -| `rename.file.destination.gid` | int | GID of the file's owner | | -| `rename.file.destination.group` | string | Group of the file's owner | | -| `rename.file.destination.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `rename.file.destination.inode` | int | Inode of the file | | -| `rename.file.destination.mode` | int | Mode/rights of the file | Chmod mode constants | -| `rename.file.destination.modification_time` | int | Modification time of the file | | -| `rename.file.destination.mount_id` | int | Mount ID of the file | | -| `rename.file.destination.name` | string | File's basename | | -| `rename.file.destination.name.length` | int | Length of 'rename.file.destination.name' string | | -| `rename.file.destination.path` | string | File's path | | -| `rename.file.destination.path.length` | int | Length of 'rename.file.destination.path' string | | -| `rename.file.destination.rights` | int | Mode/rights of the file | Chmod mode constants | -| `rename.file.destination.uid` | int | UID of the file's owner | | -| `rename.file.destination.user` | string | User of the file's owner | | -| `rename.file.filesystem` | string | File's filesystem | | -| `rename.file.gid` | int | GID of the file's owner | | -| `rename.file.group` | string | Group of the file's owner | | -| `rename.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `rename.file.inode` | int | Inode of the file | | -| `rename.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `rename.file.modification_time` | int | Modification time of the file | | -| `rename.file.mount_id` | int | Mount ID of the file | | -| `rename.file.name` | string | File's basename | | -| `rename.file.name.length` | int | Length of 'rename.file.name' string | | -| `rename.file.path` | string | File's path | | -| `rename.file.path.length` | int | Length of 'rename.file.path' string | | -| `rename.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `rename.file.uid` | int | UID of the file's owner | | -| `rename.file.user` | string | User of the file's owner | | -| `rename.retval` | int | Return value of the syscall | Error Constants | +| Property | Definition | +| -------- | ------------- | +| [`rename.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`rename.file.destination.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`rename.file.destination.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`rename.file.destination.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`rename.file.destination.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`rename.file.destination.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`rename.file.destination.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`rename.file.destination.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`rename.file.destination.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`rename.file.destination.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`rename.file.destination.name`](#common-fileevent-name-doc) | File's basename | +| [`rename.file.destination.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`rename.file.destination.path`](#common-fileevent-path-doc) | File's path | +| [`rename.file.destination.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`rename.file.destination.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`rename.file.destination.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`rename.file.destination.user`](#common-filefields-user-doc) | User of the file's owner | +| [`rename.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`rename.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`rename.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`rename.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`rename.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`rename.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`rename.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`rename.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`rename.file.name`](#common-fileevent-name-doc) | File's basename | +| [`rename.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`rename.file.path`](#common-fileevent-path-doc) | File's path | +| [`rename.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`rename.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`rename.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`rename.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`rename.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | ### Event `rmdir` A directory was removed -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `rmdir.file.change_time` | int | Change time of the file | | -| `rmdir.file.filesystem` | string | File's filesystem | | -| `rmdir.file.gid` | int | GID of the file's owner | | -| `rmdir.file.group` | string | Group of the file's owner | | -| `rmdir.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `rmdir.file.inode` | int | Inode of the file | | -| `rmdir.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `rmdir.file.modification_time` | int | Modification time of the file | | -| `rmdir.file.mount_id` | int | Mount ID of the file | | -| `rmdir.file.name` | string | File's basename | | -| `rmdir.file.name.length` | int | Length of 'rmdir.file.name' string | | -| `rmdir.file.path` | string | File's path | | -| `rmdir.file.path.length` | int | Length of 'rmdir.file.path' string | | -| `rmdir.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `rmdir.file.uid` | int | UID of the file's owner | | -| `rmdir.file.user` | string | User of the file's owner | | -| `rmdir.retval` | int | Return value of the syscall | Error Constants | +| Property | Definition | +| -------- | ------------- | +| [`rmdir.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`rmdir.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`rmdir.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`rmdir.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`rmdir.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`rmdir.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`rmdir.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`rmdir.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`rmdir.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`rmdir.file.name`](#common-fileevent-name-doc) | File's basename | +| [`rmdir.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`rmdir.file.path`](#common-fileevent-path-doc) | File's path | +| [`rmdir.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`rmdir.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`rmdir.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`rmdir.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`rmdir.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | ### Event `selinux` An SELinux operation was run -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `selinux.bool.name` | string | SELinux boolean name | | -| `selinux.bool.state` | string | SELinux boolean new value | | -| `selinux.bool_commit.state` | bool | Indicator of a SELinux boolean commit operation | | -| `selinux.enforce.status` | string | SELinux enforcement status (one of "enforcing", "permissive", "disabled"") | | +| Property | Definition | +| -------- | ------------- | +| [`selinux.bool.name`](#selinux-bool-name-doc) | SELinux boolean name | +| [`selinux.bool.state`](#selinux-bool-state-doc) | SELinux boolean new value | +| [`selinux.bool_commit.state`](#selinux-bool_commit-state-doc) | Indicator of a SELinux boolean commit operation | +| [`selinux.enforce.status`](#selinux-enforce-status-doc) | SELinux enforcement status (one of "enforcing", "permissive", "disabled") | ### Event `setgid` A process changed its effective gid -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `setgid.egid` | int | New effective GID of the process | | -| `setgid.egroup` | string | New effective group of the process | | -| `setgid.fsgid` | int | New FileSystem GID of the process | | -| `setgid.fsgroup` | string | New FileSystem group of the process | | -| `setgid.gid` | int | New GID of the process | | -| `setgid.group` | string | New group of the process | | +| Property | Definition | +| -------- | ------------- | +| [`setgid.egid`](#setgid-egid-doc) | New effective GID of the process | +| [`setgid.egroup`](#setgid-egroup-doc) | New effective group of the process | +| [`setgid.fsgid`](#setgid-fsgid-doc) | New FileSystem GID of the process | +| [`setgid.fsgroup`](#setgid-fsgroup-doc) | New FileSystem group of the process | +| [`setgid.gid`](#setgid-gid-doc) | New GID of the process | +| [`setgid.group`](#setgid-group-doc) | New group of the process | ### Event `setuid` A process changed its effective uid -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `setuid.euid` | int | New effective UID of the process | | -| `setuid.euser` | string | New effective user of the process | | -| `setuid.fsuid` | int | New FileSystem UID of the process | | -| `setuid.fsuser` | string | New FileSystem user of the process | | -| `setuid.uid` | int | New UID of the process | | -| `setuid.user` | string | New user of the process | | +| Property | Definition | +| -------- | ------------- | +| [`setuid.euid`](#setuid-euid-doc) | New effective UID of the process | +| [`setuid.euser`](#setuid-euser-doc) | New effective user of the process | +| [`setuid.fsuid`](#setuid-fsuid-doc) | New FileSystem UID of the process | +| [`setuid.fsuser`](#setuid-fsuser-doc) | New FileSystem user of the process | +| [`setuid.uid`](#setuid-uid-doc) | New UID of the process | +| [`setuid.user`](#setuid-user-doc) | New user of the process | ### Event `setxattr` Set exteneded attributes -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `setxattr.file.change_time` | int | Change time of the file | | -| `setxattr.file.destination.name` | string | Name of the extended attribute | | -| `setxattr.file.destination.namespace` | string | Namespace of the extended attribute | | -| `setxattr.file.filesystem` | string | File's filesystem | | -| `setxattr.file.gid` | int | GID of the file's owner | | -| `setxattr.file.group` | string | Group of the file's owner | | -| `setxattr.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `setxattr.file.inode` | int | Inode of the file | | -| `setxattr.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `setxattr.file.modification_time` | int | Modification time of the file | | -| `setxattr.file.mount_id` | int | Mount ID of the file | | -| `setxattr.file.name` | string | File's basename | | -| `setxattr.file.name.length` | int | Length of 'setxattr.file.name' string | | -| `setxattr.file.path` | string | File's path | | -| `setxattr.file.path.length` | int | Length of 'setxattr.file.path' string | | -| `setxattr.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `setxattr.file.uid` | int | UID of the file's owner | | -| `setxattr.file.user` | string | User of the file's owner | | -| `setxattr.retval` | int | Return value of the syscall | Error Constants | +| Property | Definition | +| -------- | ------------- | +| [`setxattr.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`setxattr.file.destination.name`](#common-setxattrevent-file-destination-name-doc) | Name of the extended attribute | +| [`setxattr.file.destination.namespace`](#common-setxattrevent-file-destination-namespace-doc) | Namespace of the extended attribute | +| [`setxattr.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`setxattr.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`setxattr.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`setxattr.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`setxattr.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`setxattr.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`setxattr.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`setxattr.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`setxattr.file.name`](#common-fileevent-name-doc) | File's basename | +| [`setxattr.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`setxattr.file.path`](#common-fileevent-path-doc) | File's path | +| [`setxattr.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`setxattr.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`setxattr.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`setxattr.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`setxattr.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | ### Event `signal` A signal was sent -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `signal.pid` | int | Target PID | | -| `signal.retval` | int | Return value of the syscall | Error Constants | -| `signal.target.ancestors.args` | string | Arguments of the process (as a string) | | -| `signal.target.ancestors.args_flags` | string | Arguments of the process (as an array) | | -| `signal.target.ancestors.args_options` | string | Arguments of the process (as an array) | | -| `signal.target.ancestors.args_truncated` | bool | Indicator of arguments truncation | | -| `signal.target.ancestors.argv` | string | Arguments of the process (as an array) | | -| `signal.target.ancestors.argv0` | string | First argument of the process | | -| `signal.target.ancestors.cap_effective` | int | Effective capability set of the process | Kernel Capability constants | -| `signal.target.ancestors.cap_permitted` | int | Permitted capability set of the process | Kernel Capability constants | -| `signal.target.ancestors.comm` | string | Comm attribute of the process | | -| `signal.target.ancestors.container.id` | string | Container ID | | -| `signal.target.ancestors.cookie` | int | Cookie of the process | | -| `signal.target.ancestors.created_at` | int | Timestamp of the creation of the process | | -| `signal.target.ancestors.egid` | int | Effective GID of the process | | -| `signal.target.ancestors.egroup` | string | Effective group of the process | | -| `signal.target.ancestors.envp` | string | Environment variables of the process | | -| `signal.target.ancestors.envs` | string | Environment variable names of the process | | -| `signal.target.ancestors.envs_truncated` | bool | Indicator of environment variables truncation | | -| `signal.target.ancestors.euid` | int | Effective UID of the process | | -| `signal.target.ancestors.euser` | string | Effective user of the process | | -| `signal.target.ancestors.file.change_time` | int | Change time of the file | | -| `signal.target.ancestors.file.filesystem` | string | File's filesystem | | -| `signal.target.ancestors.file.gid` | int | GID of the file's owner | | -| `signal.target.ancestors.file.group` | string | Group of the file's owner | | -| `signal.target.ancestors.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `signal.target.ancestors.file.inode` | int | Inode of the file | | -| `signal.target.ancestors.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `signal.target.ancestors.file.modification_time` | int | Modification time of the file | | -| `signal.target.ancestors.file.mount_id` | int | Mount ID of the file | | -| `signal.target.ancestors.file.name` | string | File's basename | | -| `signal.target.ancestors.file.name.length` | int | Length of 'signal.target.ancestors.file.name' string | | -| `signal.target.ancestors.file.path` | string | File's path | | -| `signal.target.ancestors.file.path.length` | int | Length of 'signal.target.ancestors.file.path' string | | -| `signal.target.ancestors.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `signal.target.ancestors.file.uid` | int | UID of the file's owner | | -| `signal.target.ancestors.file.user` | string | User of the file's owner | | -| `signal.target.ancestors.fsgid` | int | FileSystem-gid of the process | | -| `signal.target.ancestors.fsgroup` | string | FileSystem-group of the process | | -| `signal.target.ancestors.fsuid` | int | FileSystem-uid of the process | | -| `signal.target.ancestors.fsuser` | string | FileSystem-user of the process | | -| `signal.target.ancestors.gid` | int | GID of the process | | -| `signal.target.ancestors.group` | string | Group of the process | | -| `signal.target.ancestors.interpreter.file.change_time` | int | Change time of the file | | -| `signal.target.ancestors.interpreter.file.filesystem` | string | File's filesystem | | -| `signal.target.ancestors.interpreter.file.gid` | int | GID of the file's owner | | -| `signal.target.ancestors.interpreter.file.group` | string | Group of the file's owner | | -| `signal.target.ancestors.interpreter.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `signal.target.ancestors.interpreter.file.inode` | int | Inode of the file | | -| `signal.target.ancestors.interpreter.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `signal.target.ancestors.interpreter.file.modification_time` | int | Modification time of the file | | -| `signal.target.ancestors.interpreter.file.mount_id` | int | Mount ID of the file | | -| `signal.target.ancestors.interpreter.file.name` | string | File's basename | | -| `signal.target.ancestors.interpreter.file.name.length` | int | Length of 'signal.target.ancestors.interpreter.file.name' string | | -| `signal.target.ancestors.interpreter.file.path` | string | File's path | | -| `signal.target.ancestors.interpreter.file.path.length` | int | Length of 'signal.target.ancestors.interpreter.file.path' string | | -| `signal.target.ancestors.interpreter.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `signal.target.ancestors.interpreter.file.uid` | int | UID of the file's owner | | -| `signal.target.ancestors.interpreter.file.user` | string | User of the file's owner | | -| `signal.target.ancestors.is_kworker` | bool | Indicates whether the process is a kworker | | -| `signal.target.ancestors.is_thread` | bool | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | | -| `signal.target.ancestors.pid` | int | Process ID of the process (also called thread group ID) | | -| `signal.target.ancestors.ppid` | int | Parent process ID | | -| `signal.target.ancestors.tid` | int | Thread ID of the thread | | -| `signal.target.ancestors.tty_name` | string | Name of the TTY associated with the process | | -| `signal.target.ancestors.uid` | int | UID of the process | | -| `signal.target.ancestors.user` | string | User of the process | | -| `signal.target.args` | string | Arguments of the process (as a string) | | -| `signal.target.args_flags` | string | Arguments of the process (as an array) | | -| `signal.target.args_options` | string | Arguments of the process (as an array) | | -| `signal.target.args_truncated` | bool | Indicator of arguments truncation | | -| `signal.target.argv` | string | Arguments of the process (as an array) | | -| `signal.target.argv0` | string | First argument of the process | | -| `signal.target.cap_effective` | int | Effective capability set of the process | Kernel Capability constants | -| `signal.target.cap_permitted` | int | Permitted capability set of the process | Kernel Capability constants | -| `signal.target.comm` | string | Comm attribute of the process | | -| `signal.target.container.id` | string | Container ID | | -| `signal.target.cookie` | int | Cookie of the process | | -| `signal.target.created_at` | int | Timestamp of the creation of the process | | -| `signal.target.egid` | int | Effective GID of the process | | -| `signal.target.egroup` | string | Effective group of the process | | -| `signal.target.envp` | string | Environment variables of the process | | -| `signal.target.envs` | string | Environment variable names of the process | | -| `signal.target.envs_truncated` | bool | Indicator of environment variables truncation | | -| `signal.target.euid` | int | Effective UID of the process | | -| `signal.target.euser` | string | Effective user of the process | | -| `signal.target.file.change_time` | int | Change time of the file | | -| `signal.target.file.filesystem` | string | File's filesystem | | -| `signal.target.file.gid` | int | GID of the file's owner | | -| `signal.target.file.group` | string | Group of the file's owner | | -| `signal.target.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `signal.target.file.inode` | int | Inode of the file | | -| `signal.target.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `signal.target.file.modification_time` | int | Modification time of the file | | -| `signal.target.file.mount_id` | int | Mount ID of the file | | -| `signal.target.file.name` | string | File's basename | | -| `signal.target.file.name.length` | int | Length of 'signal.target.file.name' string | | -| `signal.target.file.path` | string | File's path | | -| `signal.target.file.path.length` | int | Length of 'signal.target.file.path' string | | -| `signal.target.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `signal.target.file.uid` | int | UID of the file's owner | | -| `signal.target.file.user` | string | User of the file's owner | | -| `signal.target.fsgid` | int | FileSystem-gid of the process | | -| `signal.target.fsgroup` | string | FileSystem-group of the process | | -| `signal.target.fsuid` | int | FileSystem-uid of the process | | -| `signal.target.fsuser` | string | FileSystem-user of the process | | -| `signal.target.gid` | int | GID of the process | | -| `signal.target.group` | string | Group of the process | | -| `signal.target.interpreter.file.change_time` | int | Change time of the file | | -| `signal.target.interpreter.file.filesystem` | string | File's filesystem | | -| `signal.target.interpreter.file.gid` | int | GID of the file's owner | | -| `signal.target.interpreter.file.group` | string | Group of the file's owner | | -| `signal.target.interpreter.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `signal.target.interpreter.file.inode` | int | Inode of the file | | -| `signal.target.interpreter.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `signal.target.interpreter.file.modification_time` | int | Modification time of the file | | -| `signal.target.interpreter.file.mount_id` | int | Mount ID of the file | | -| `signal.target.interpreter.file.name` | string | File's basename | | -| `signal.target.interpreter.file.name.length` | int | Length of 'signal.target.interpreter.file.name' string | | -| `signal.target.interpreter.file.path` | string | File's path | | -| `signal.target.interpreter.file.path.length` | int | Length of 'signal.target.interpreter.file.path' string | | -| `signal.target.interpreter.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `signal.target.interpreter.file.uid` | int | UID of the file's owner | | -| `signal.target.interpreter.file.user` | string | User of the file's owner | | -| `signal.target.is_kworker` | bool | Indicates whether the process is a kworker | | -| `signal.target.is_thread` | bool | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | | -| `signal.target.parent.args` | string | Arguments of the process (as a string) | | -| `signal.target.parent.args_flags` | string | Arguments of the process (as an array) | | -| `signal.target.parent.args_options` | string | Arguments of the process (as an array) | | -| `signal.target.parent.args_truncated` | bool | Indicator of arguments truncation | | -| `signal.target.parent.argv` | string | Arguments of the process (as an array) | | -| `signal.target.parent.argv0` | string | First argument of the process | | -| `signal.target.parent.cap_effective` | int | Effective capability set of the process | Kernel Capability constants | -| `signal.target.parent.cap_permitted` | int | Permitted capability set of the process | Kernel Capability constants | -| `signal.target.parent.comm` | string | Comm attribute of the process | | -| `signal.target.parent.container.id` | string | Container ID | | -| `signal.target.parent.cookie` | int | Cookie of the process | | -| `signal.target.parent.created_at` | int | Timestamp of the creation of the process | | -| `signal.target.parent.egid` | int | Effective GID of the process | | -| `signal.target.parent.egroup` | string | Effective group of the process | | -| `signal.target.parent.envp` | string | Environment variables of the process | | -| `signal.target.parent.envs` | string | Environment variable names of the process | | -| `signal.target.parent.envs_truncated` | bool | Indicator of environment variables truncation | | -| `signal.target.parent.euid` | int | Effective UID of the process | | -| `signal.target.parent.euser` | string | Effective user of the process | | -| `signal.target.parent.file.change_time` | int | Change time of the file | | -| `signal.target.parent.file.filesystem` | string | File's filesystem | | -| `signal.target.parent.file.gid` | int | GID of the file's owner | | -| `signal.target.parent.file.group` | string | Group of the file's owner | | -| `signal.target.parent.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `signal.target.parent.file.inode` | int | Inode of the file | | -| `signal.target.parent.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `signal.target.parent.file.modification_time` | int | Modification time of the file | | -| `signal.target.parent.file.mount_id` | int | Mount ID of the file | | -| `signal.target.parent.file.name` | string | File's basename | | -| `signal.target.parent.file.name.length` | int | Length of 'signal.target.parent.file.name' string | | -| `signal.target.parent.file.path` | string | File's path | | -| `signal.target.parent.file.path.length` | int | Length of 'signal.target.parent.file.path' string | | -| `signal.target.parent.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `signal.target.parent.file.uid` | int | UID of the file's owner | | -| `signal.target.parent.file.user` | string | User of the file's owner | | -| `signal.target.parent.fsgid` | int | FileSystem-gid of the process | | -| `signal.target.parent.fsgroup` | string | FileSystem-group of the process | | -| `signal.target.parent.fsuid` | int | FileSystem-uid of the process | | -| `signal.target.parent.fsuser` | string | FileSystem-user of the process | | -| `signal.target.parent.gid` | int | GID of the process | | -| `signal.target.parent.group` | string | Group of the process | | -| `signal.target.parent.interpreter.file.change_time` | int | Change time of the file | | -| `signal.target.parent.interpreter.file.filesystem` | string | File's filesystem | | -| `signal.target.parent.interpreter.file.gid` | int | GID of the file's owner | | -| `signal.target.parent.interpreter.file.group` | string | Group of the file's owner | | -| `signal.target.parent.interpreter.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `signal.target.parent.interpreter.file.inode` | int | Inode of the file | | -| `signal.target.parent.interpreter.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `signal.target.parent.interpreter.file.modification_time` | int | Modification time of the file | | -| `signal.target.parent.interpreter.file.mount_id` | int | Mount ID of the file | | -| `signal.target.parent.interpreter.file.name` | string | File's basename | | -| `signal.target.parent.interpreter.file.name.length` | int | Length of 'signal.target.parent.interpreter.file.name' string | | -| `signal.target.parent.interpreter.file.path` | string | File's path | | -| `signal.target.parent.interpreter.file.path.length` | int | Length of 'signal.target.parent.interpreter.file.path' string | | -| `signal.target.parent.interpreter.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `signal.target.parent.interpreter.file.uid` | int | UID of the file's owner | | -| `signal.target.parent.interpreter.file.user` | string | User of the file's owner | | -| `signal.target.parent.is_kworker` | bool | Indicates whether the process is a kworker | | -| `signal.target.parent.is_thread` | bool | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | | -| `signal.target.parent.pid` | int | Process ID of the process (also called thread group ID) | | -| `signal.target.parent.ppid` | int | Parent process ID | | -| `signal.target.parent.tid` | int | Thread ID of the thread | | -| `signal.target.parent.tty_name` | string | Name of the TTY associated with the process | | -| `signal.target.parent.uid` | int | UID of the process | | -| `signal.target.parent.user` | string | User of the process | | -| `signal.target.pid` | int | Process ID of the process (also called thread group ID) | | -| `signal.target.ppid` | int | Parent process ID | | -| `signal.target.tid` | int | Thread ID of the thread | | -| `signal.target.tty_name` | string | Name of the TTY associated with the process | | -| `signal.target.uid` | int | UID of the process | | -| `signal.target.user` | string | User of the process | | -| `signal.type` | int | Signal type (ex: SIGHUP, SIGINT, SIGQUIT, etc) | Signal constants | +| Property | Definition | +| -------- | ------------- | +| [`signal.pid`](#signal-pid-doc) | Target PID | +| [`signal.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | +| [`signal.target.ancestors.args`](#common-process-args-doc) | Arguments of the process (as a string, excluding argv0) | +| [`signal.target.ancestors.args_flags`](#common-process-args_flags-doc) | Flags in the process arguments | +| [`signal.target.ancestors.args_options`](#common-process-args_options-doc) | Argument of the process as options | +| [`signal.target.ancestors.args_truncated`](#common-process-args_truncated-doc) | Indicator of arguments truncation | +| [`signal.target.ancestors.argv`](#common-process-argv-doc) | Arguments of the process (as an array, excluding argv0) | +| [`signal.target.ancestors.argv0`](#common-process-argv0-doc) | First argument of the process | +| [`signal.target.ancestors.cap_effective`](#common-credentials-cap_effective-doc) | Effective capability set of the process | +| [`signal.target.ancestors.cap_permitted`](#common-credentials-cap_permitted-doc) | Permitted capability set of the process | +| [`signal.target.ancestors.comm`](#common-process-comm-doc) | Comm attribute of the process | +| [`signal.target.ancestors.container.id`](#common-process-container-id-doc) | Container ID | +| [`signal.target.ancestors.cookie`](#common-process-cookie-doc) | Cookie of the process | +| [`signal.target.ancestors.created_at`](#common-process-created_at-doc) | Timestamp of the creation of the process | +| [`signal.target.ancestors.egid`](#common-credentials-egid-doc) | Effective GID of the process | +| [`signal.target.ancestors.egroup`](#common-credentials-egroup-doc) | Effective group of the process | +| [`signal.target.ancestors.envp`](#common-process-envp-doc) | Environment variables of the process | +| [`signal.target.ancestors.envs`](#common-process-envs-doc) | Environment variable names of the process | +| [`signal.target.ancestors.envs_truncated`](#common-process-envs_truncated-doc) | Indicator of environment variables truncation | +| [`signal.target.ancestors.euid`](#common-credentials-euid-doc) | Effective UID of the process | +| [`signal.target.ancestors.euser`](#common-credentials-euser-doc) | Effective user of the process | +| [`signal.target.ancestors.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`signal.target.ancestors.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`signal.target.ancestors.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`signal.target.ancestors.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`signal.target.ancestors.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`signal.target.ancestors.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`signal.target.ancestors.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`signal.target.ancestors.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`signal.target.ancestors.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`signal.target.ancestors.file.name`](#common-fileevent-name-doc) | File's basename | +| [`signal.target.ancestors.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`signal.target.ancestors.file.path`](#common-fileevent-path-doc) | File's path | +| [`signal.target.ancestors.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`signal.target.ancestors.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`signal.target.ancestors.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`signal.target.ancestors.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`signal.target.ancestors.fsgid`](#common-credentials-fsgid-doc) | FileSystem-gid of the process | +| [`signal.target.ancestors.fsgroup`](#common-credentials-fsgroup-doc) | FileSystem-group of the process | +| [`signal.target.ancestors.fsuid`](#common-credentials-fsuid-doc) | FileSystem-uid of the process | +| [`signal.target.ancestors.fsuser`](#common-credentials-fsuser-doc) | FileSystem-user of the process | +| [`signal.target.ancestors.gid`](#common-credentials-gid-doc) | GID of the process | +| [`signal.target.ancestors.group`](#common-credentials-group-doc) | Group of the process | +| [`signal.target.ancestors.interpreter.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`signal.target.ancestors.interpreter.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`signal.target.ancestors.interpreter.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`signal.target.ancestors.interpreter.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`signal.target.ancestors.interpreter.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`signal.target.ancestors.interpreter.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`signal.target.ancestors.interpreter.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`signal.target.ancestors.interpreter.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`signal.target.ancestors.interpreter.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`signal.target.ancestors.interpreter.file.name`](#common-fileevent-name-doc) | File's basename | +| [`signal.target.ancestors.interpreter.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`signal.target.ancestors.interpreter.file.path`](#common-fileevent-path-doc) | File's path | +| [`signal.target.ancestors.interpreter.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`signal.target.ancestors.interpreter.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`signal.target.ancestors.interpreter.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`signal.target.ancestors.interpreter.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`signal.target.ancestors.is_kworker`](#common-pidcontext-is_kworker-doc) | Indicates whether the process is a kworker | +| [`signal.target.ancestors.is_thread`](#common-process-is_thread-doc) | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | +| [`signal.target.ancestors.pid`](#common-pidcontext-pid-doc) | Process ID of the process (also called thread group ID) | +| [`signal.target.ancestors.ppid`](#common-process-ppid-doc) | Parent process ID | +| [`signal.target.ancestors.tid`](#common-pidcontext-tid-doc) | Thread ID of the thread | +| [`signal.target.ancestors.tty_name`](#common-process-tty_name-doc) | Name of the TTY associated with the process | +| [`signal.target.ancestors.uid`](#common-credentials-uid-doc) | UID of the process | +| [`signal.target.ancestors.user`](#common-credentials-user-doc) | User of the process | +| [`signal.target.args`](#common-process-args-doc) | Arguments of the process (as a string, excluding argv0) | +| [`signal.target.args_flags`](#common-process-args_flags-doc) | Flags in the process arguments | +| [`signal.target.args_options`](#common-process-args_options-doc) | Argument of the process as options | +| [`signal.target.args_truncated`](#common-process-args_truncated-doc) | Indicator of arguments truncation | +| [`signal.target.argv`](#common-process-argv-doc) | Arguments of the process (as an array, excluding argv0) | +| [`signal.target.argv0`](#common-process-argv0-doc) | First argument of the process | +| [`signal.target.cap_effective`](#common-credentials-cap_effective-doc) | Effective capability set of the process | +| [`signal.target.cap_permitted`](#common-credentials-cap_permitted-doc) | Permitted capability set of the process | +| [`signal.target.comm`](#common-process-comm-doc) | Comm attribute of the process | +| [`signal.target.container.id`](#common-process-container-id-doc) | Container ID | +| [`signal.target.cookie`](#common-process-cookie-doc) | Cookie of the process | +| [`signal.target.created_at`](#common-process-created_at-doc) | Timestamp of the creation of the process | +| [`signal.target.egid`](#common-credentials-egid-doc) | Effective GID of the process | +| [`signal.target.egroup`](#common-credentials-egroup-doc) | Effective group of the process | +| [`signal.target.envp`](#common-process-envp-doc) | Environment variables of the process | +| [`signal.target.envs`](#common-process-envs-doc) | Environment variable names of the process | +| [`signal.target.envs_truncated`](#common-process-envs_truncated-doc) | Indicator of environment variables truncation | +| [`signal.target.euid`](#common-credentials-euid-doc) | Effective UID of the process | +| [`signal.target.euser`](#common-credentials-euser-doc) | Effective user of the process | +| [`signal.target.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`signal.target.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`signal.target.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`signal.target.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`signal.target.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`signal.target.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`signal.target.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`signal.target.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`signal.target.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`signal.target.file.name`](#common-fileevent-name-doc) | File's basename | +| [`signal.target.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`signal.target.file.path`](#common-fileevent-path-doc) | File's path | +| [`signal.target.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`signal.target.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`signal.target.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`signal.target.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`signal.target.fsgid`](#common-credentials-fsgid-doc) | FileSystem-gid of the process | +| [`signal.target.fsgroup`](#common-credentials-fsgroup-doc) | FileSystem-group of the process | +| [`signal.target.fsuid`](#common-credentials-fsuid-doc) | FileSystem-uid of the process | +| [`signal.target.fsuser`](#common-credentials-fsuser-doc) | FileSystem-user of the process | +| [`signal.target.gid`](#common-credentials-gid-doc) | GID of the process | +| [`signal.target.group`](#common-credentials-group-doc) | Group of the process | +| [`signal.target.interpreter.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`signal.target.interpreter.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`signal.target.interpreter.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`signal.target.interpreter.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`signal.target.interpreter.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`signal.target.interpreter.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`signal.target.interpreter.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`signal.target.interpreter.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`signal.target.interpreter.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`signal.target.interpreter.file.name`](#common-fileevent-name-doc) | File's basename | +| [`signal.target.interpreter.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`signal.target.interpreter.file.path`](#common-fileevent-path-doc) | File's path | +| [`signal.target.interpreter.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`signal.target.interpreter.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`signal.target.interpreter.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`signal.target.interpreter.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`signal.target.is_kworker`](#common-pidcontext-is_kworker-doc) | Indicates whether the process is a kworker | +| [`signal.target.is_thread`](#common-process-is_thread-doc) | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | +| [`signal.target.parent.args`](#common-process-args-doc) | Arguments of the process (as a string, excluding argv0) | +| [`signal.target.parent.args_flags`](#common-process-args_flags-doc) | Flags in the process arguments | +| [`signal.target.parent.args_options`](#common-process-args_options-doc) | Argument of the process as options | +| [`signal.target.parent.args_truncated`](#common-process-args_truncated-doc) | Indicator of arguments truncation | +| [`signal.target.parent.argv`](#common-process-argv-doc) | Arguments of the process (as an array, excluding argv0) | +| [`signal.target.parent.argv0`](#common-process-argv0-doc) | First argument of the process | +| [`signal.target.parent.cap_effective`](#common-credentials-cap_effective-doc) | Effective capability set of the process | +| [`signal.target.parent.cap_permitted`](#common-credentials-cap_permitted-doc) | Permitted capability set of the process | +| [`signal.target.parent.comm`](#common-process-comm-doc) | Comm attribute of the process | +| [`signal.target.parent.container.id`](#common-process-container-id-doc) | Container ID | +| [`signal.target.parent.cookie`](#common-process-cookie-doc) | Cookie of the process | +| [`signal.target.parent.created_at`](#common-process-created_at-doc) | Timestamp of the creation of the process | +| [`signal.target.parent.egid`](#common-credentials-egid-doc) | Effective GID of the process | +| [`signal.target.parent.egroup`](#common-credentials-egroup-doc) | Effective group of the process | +| [`signal.target.parent.envp`](#common-process-envp-doc) | Environment variables of the process | +| [`signal.target.parent.envs`](#common-process-envs-doc) | Environment variable names of the process | +| [`signal.target.parent.envs_truncated`](#common-process-envs_truncated-doc) | Indicator of environment variables truncation | +| [`signal.target.parent.euid`](#common-credentials-euid-doc) | Effective UID of the process | +| [`signal.target.parent.euser`](#common-credentials-euser-doc) | Effective user of the process | +| [`signal.target.parent.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`signal.target.parent.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`signal.target.parent.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`signal.target.parent.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`signal.target.parent.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`signal.target.parent.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`signal.target.parent.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`signal.target.parent.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`signal.target.parent.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`signal.target.parent.file.name`](#common-fileevent-name-doc) | File's basename | +| [`signal.target.parent.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`signal.target.parent.file.path`](#common-fileevent-path-doc) | File's path | +| [`signal.target.parent.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`signal.target.parent.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`signal.target.parent.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`signal.target.parent.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`signal.target.parent.fsgid`](#common-credentials-fsgid-doc) | FileSystem-gid of the process | +| [`signal.target.parent.fsgroup`](#common-credentials-fsgroup-doc) | FileSystem-group of the process | +| [`signal.target.parent.fsuid`](#common-credentials-fsuid-doc) | FileSystem-uid of the process | +| [`signal.target.parent.fsuser`](#common-credentials-fsuser-doc) | FileSystem-user of the process | +| [`signal.target.parent.gid`](#common-credentials-gid-doc) | GID of the process | +| [`signal.target.parent.group`](#common-credentials-group-doc) | Group of the process | +| [`signal.target.parent.interpreter.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`signal.target.parent.interpreter.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`signal.target.parent.interpreter.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`signal.target.parent.interpreter.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`signal.target.parent.interpreter.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`signal.target.parent.interpreter.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`signal.target.parent.interpreter.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`signal.target.parent.interpreter.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`signal.target.parent.interpreter.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`signal.target.parent.interpreter.file.name`](#common-fileevent-name-doc) | File's basename | +| [`signal.target.parent.interpreter.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`signal.target.parent.interpreter.file.path`](#common-fileevent-path-doc) | File's path | +| [`signal.target.parent.interpreter.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`signal.target.parent.interpreter.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`signal.target.parent.interpreter.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`signal.target.parent.interpreter.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`signal.target.parent.is_kworker`](#common-pidcontext-is_kworker-doc) | Indicates whether the process is a kworker | +| [`signal.target.parent.is_thread`](#common-process-is_thread-doc) | Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) | +| [`signal.target.parent.pid`](#common-pidcontext-pid-doc) | Process ID of the process (also called thread group ID) | +| [`signal.target.parent.ppid`](#common-process-ppid-doc) | Parent process ID | +| [`signal.target.parent.tid`](#common-pidcontext-tid-doc) | Thread ID of the thread | +| [`signal.target.parent.tty_name`](#common-process-tty_name-doc) | Name of the TTY associated with the process | +| [`signal.target.parent.uid`](#common-credentials-uid-doc) | UID of the process | +| [`signal.target.parent.user`](#common-credentials-user-doc) | User of the process | +| [`signal.target.pid`](#common-pidcontext-pid-doc) | Process ID of the process (also called thread group ID) | +| [`signal.target.ppid`](#common-process-ppid-doc) | Parent process ID | +| [`signal.target.tid`](#common-pidcontext-tid-doc) | Thread ID of the thread | +| [`signal.target.tty_name`](#common-process-tty_name-doc) | Name of the TTY associated with the process | +| [`signal.target.uid`](#common-credentials-uid-doc) | UID of the process | +| [`signal.target.user`](#common-credentials-user-doc) | User of the process | +| [`signal.type`](#signal-type-doc) | Signal type (ex: SIGHUP, SIGINT, SIGQUIT, etc) | ### Event `splice` A splice command was executed -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `splice.file.change_time` | int | Change time of the file | | -| `splice.file.filesystem` | string | File's filesystem | | -| `splice.file.gid` | int | GID of the file's owner | | -| `splice.file.group` | string | Group of the file's owner | | -| `splice.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `splice.file.inode` | int | Inode of the file | | -| `splice.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `splice.file.modification_time` | int | Modification time of the file | | -| `splice.file.mount_id` | int | Mount ID of the file | | -| `splice.file.name` | string | File's basename | | -| `splice.file.name.length` | int | Length of 'splice.file.name' string | | -| `splice.file.path` | string | File's path | | -| `splice.file.path.length` | int | Length of 'splice.file.path' string | | -| `splice.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `splice.file.uid` | int | UID of the file's owner | | -| `splice.file.user` | string | User of the file's owner | | -| `splice.pipe_entry_flag` | int | Entry flag of the "fd_out" pipe passed to the splice syscall | Pipe buffer flags | -| `splice.pipe_exit_flag` | int | Exit flag of the "fd_out" pipe passed to the splice syscall | Pipe buffer flags | -| `splice.retval` | int | Return value of the syscall | Error Constants | +| Property | Definition | +| -------- | ------------- | +| [`splice.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`splice.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`splice.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`splice.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`splice.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`splice.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`splice.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`splice.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`splice.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`splice.file.name`](#common-fileevent-name-doc) | File's basename | +| [`splice.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`splice.file.path`](#common-fileevent-path-doc) | File's path | +| [`splice.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`splice.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`splice.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`splice.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`splice.pipe_entry_flag`](#splice-pipe_entry_flag-doc) | Entry flag of the "fd_out" pipe passed to the splice syscall | +| [`splice.pipe_exit_flag`](#splice-pipe_exit_flag-doc) | Exit flag of the "fd_out" pipe passed to the splice syscall | +| [`splice.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | ### Event `unlink` A file was deleted -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `unlink.file.change_time` | int | Change time of the file | | -| `unlink.file.filesystem` | string | File's filesystem | | -| `unlink.file.gid` | int | GID of the file's owner | | -| `unlink.file.group` | string | Group of the file's owner | | -| `unlink.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `unlink.file.inode` | int | Inode of the file | | -| `unlink.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `unlink.file.modification_time` | int | Modification time of the file | | -| `unlink.file.mount_id` | int | Mount ID of the file | | -| `unlink.file.name` | string | File's basename | | -| `unlink.file.name.length` | int | Length of 'unlink.file.name' string | | -| `unlink.file.path` | string | File's path | | -| `unlink.file.path.length` | int | Length of 'unlink.file.path' string | | -| `unlink.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `unlink.file.uid` | int | UID of the file's owner | | -| `unlink.file.user` | string | User of the file's owner | | -| `unlink.flags` | int | | Unlink flags | -| `unlink.retval` | int | Return value of the syscall | Error Constants | +| Property | Definition | +| -------- | ------------- | +| [`unlink.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`unlink.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`unlink.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`unlink.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`unlink.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`unlink.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`unlink.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`unlink.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`unlink.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`unlink.file.name`](#common-fileevent-name-doc) | File's basename | +| [`unlink.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`unlink.file.path`](#common-fileevent-path-doc) | File's path | +| [`unlink.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`unlink.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`unlink.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`unlink.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`unlink.flags`](#unlink-flags-doc) | Flags of the unlink syscall | +| [`unlink.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | ### Event `unload_module` A kernel module was deleted -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `unload_module.name` | string | Name of the kernel module that was deleted | | -| `unload_module.retval` | int | Return value of the syscall | Error Constants | +| Property | Definition | +| -------- | ------------- | +| [`unload_module.name`](#unload_module-name-doc) | Name of the kernel module that was deleted | +| [`unload_module.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | ### Event `utimes` Change file access/modification times -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | -| `utimes.file.change_time` | int | Change time of the file | | -| `utimes.file.filesystem` | string | File's filesystem | | -| `utimes.file.gid` | int | GID of the file's owner | | -| `utimes.file.group` | string | Group of the file's owner | | -| `utimes.file.in_upper_layer` | bool | Indicator of the file layer, for example, in an OverlayFS | | -| `utimes.file.inode` | int | Inode of the file | | -| `utimes.file.mode` | int | Mode/rights of the file | Chmod mode constants | -| `utimes.file.modification_time` | int | Modification time of the file | | -| `utimes.file.mount_id` | int | Mount ID of the file | | -| `utimes.file.name` | string | File's basename | | -| `utimes.file.name.length` | int | Length of 'utimes.file.name' string | | -| `utimes.file.path` | string | File's path | | -| `utimes.file.path.length` | int | Length of 'utimes.file.path' string | | -| `utimes.file.rights` | int | Mode/rights of the file | Chmod mode constants | -| `utimes.file.uid` | int | UID of the file's owner | | -| `utimes.file.user` | string | User of the file's owner | | -| `utimes.retval` | int | Return value of the syscall | Error Constants | +| Property | Definition | +| -------- | ------------- | +| [`utimes.file.change_time`](#common-filefields-change_time-doc) | Change time of the file | +| [`utimes.file.filesystem`](#common-fileevent-filesystem-doc) | File's filesystem | +| [`utimes.file.gid`](#common-filefields-gid-doc) | GID of the file's owner | +| [`utimes.file.group`](#common-filefields-group-doc) | Group of the file's owner | +| [`utimes.file.in_upper_layer`](#common-filefields-in_upper_layer-doc) | Indicator of the file layer, for example, in an OverlayFS | +| [`utimes.file.inode`](#common-filefields-inode-doc) | Inode of the file | +| [`utimes.file.mode`](#common-filefields-mode-doc) | Mode of the file | +| [`utimes.file.modification_time`](#common-filefields-modification_time-doc) | Modification time of the file | +| [`utimes.file.mount_id`](#common-filefields-mount_id-doc) | Mount ID of the file | +| [`utimes.file.name`](#common-fileevent-name-doc) | File's basename | +| [`utimes.file.name.length`](#common-string-length-doc) | Length of the corresponding string | +| [`utimes.file.path`](#common-fileevent-path-doc) | File's path | +| [`utimes.file.path.length`](#common-string-length-doc) | Length of the corresponding string | +| [`utimes.file.rights`](#common-filefields-rights-doc) | Rights of the file | +| [`utimes.file.uid`](#common-filefields-uid-doc) | UID of the file's owner | +| [`utimes.file.user`](#common-filefields-user-doc) | User of the file's owner | +| [`utimes.retval`](#common-syscallevent-retval-doc) | Return value of the syscall | + + +## Attributes documentation + + +### `*.args` {#common-process-args-doc} +Type: string + +Definition: Arguments of the process (as a string, excluding argv0) + +`*.args` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + + +Example: + +{{< code-block lang="javascript" >}} +exec.args == "-sV -p 22,53,110,143,4564 198.116.0-255.1-127" +{{< /code-block >}} + +Matches any process with these exact arguments. + +Example: + +{{< code-block lang="javascript" >}} +exec.args =~ "* -F * http*" +{{< /code-block >}} + +Matches any process that has the "-F" argument anywhere before an argument starting with "http". + +### `*.args_flags` {#common-process-args_flags-doc} +Type: string + +Definition: Flags in the process arguments + +`*.args_flags` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + + +Example: + +{{< code-block lang="javascript" >}} +exec.args_flags in ["s"] && exec.args_flags in ["V"] +{{< /code-block >}} + +Matches any process with both "-s" and "-V" flags in its arguments. Also matches "-sV". + +### `*.args_options` {#common-process-args_options-doc} +Type: string + +Definition: Argument of the process as options + +`*.args_options` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + + +Example: + +{{< code-block lang="javascript" >}} +exec.args_options in ["p=0-1024"] +{{< /code-block >}} + +Matches any process that has either "-p 0-1024" or "--p=0-1024" in its arguments. + +### `*.args_truncated` {#common-process-args_truncated-doc} +Type: bool + +Definition: Indicator of arguments truncation + +`*.args_truncated` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.argv` {#common-process-argv-doc} +Type: string + +Definition: Arguments of the process (as an array, excluding argv0) + +`*.argv` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + + +Example: + +{{< code-block lang="javascript" >}} +exec.argv in ["127.0.0.1"] +{{< /code-block >}} + +Matches any process that has this IP address as one of its arguments. + +### `*.argv0` {#common-process-argv0-doc} +Type: string + +Definition: First argument of the process + +`*.argv0` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.cap_effective` {#common-credentials-cap_effective-doc} +Type: int + +Definition: Effective capability set of the process + +`*.cap_effective` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + +Constants: [Kernel Capability constants](#kernel-capability-constants) + + + +### `*.cap_permitted` {#common-credentials-cap_permitted-doc} +Type: int + +Definition: Permitted capability set of the process + +`*.cap_permitted` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + +Constants: [Kernel Capability constants](#kernel-capability-constants) + + + +### `*.change_time` {#common-filefields-change_time-doc} +Type: int + +Definition: Change time of the file + +`*.change_time` has 38 possible prefixes: +`chmod.file` `chown.file` `exec.file` `exec.interpreter.file` `exit.file` `exit.interpreter.file` `link.file` `link.file.destination` `load_module.file` `mkdir.file` `mmap.file` `open.file` `process.ancestors.file` `process.ancestors.interpreter.file` `process.file` `process.interpreter.file` `process.parent.file` `process.parent.interpreter.file` `ptrace.tracee.ancestors.file` `ptrace.tracee.ancestors.interpreter.file` `ptrace.tracee.file` `ptrace.tracee.interpreter.file` `ptrace.tracee.parent.file` `ptrace.tracee.parent.interpreter.file` `removexattr.file` `rename.file` `rename.file.destination` `rmdir.file` `setxattr.file` `signal.target.ancestors.file` `signal.target.ancestors.interpreter.file` `signal.target.file` `signal.target.interpreter.file` `signal.target.parent.file` `signal.target.parent.interpreter.file` `splice.file` `unlink.file` `utimes.file` + + +### `*.comm` {#common-process-comm-doc} +Type: string + +Definition: Comm attribute of the process + +`*.comm` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.container.id` {#common-process-container-id-doc} +Type: string + +Definition: Container ID + +`*.container.id` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.cookie` {#common-process-cookie-doc} +Type: int + +Definition: Cookie of the process + +`*.cookie` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.created_at` {#common-process-created_at-doc} +Type: int + +Definition: Timestamp of the creation of the process + +`*.created_at` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.egid` {#common-credentials-egid-doc} +Type: int + +Definition: Effective GID of the process + +`*.egid` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.egroup` {#common-credentials-egroup-doc} +Type: string + +Definition: Effective group of the process + +`*.egroup` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.envp` {#common-process-envp-doc} +Type: string + +Definition: Environment variables of the process + +`*.envp` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.envs` {#common-process-envs-doc} +Type: string + +Definition: Environment variable names of the process + +`*.envs` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.envs_truncated` {#common-process-envs_truncated-doc} +Type: bool + +Definition: Indicator of environment variables truncation + +`*.envs_truncated` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.euid` {#common-credentials-euid-doc} +Type: int + +Definition: Effective UID of the process + +`*.euid` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.euser` {#common-credentials-euser-doc} +Type: string + +Definition: Effective user of the process + +`*.euser` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.file.destination.name` {#common-setxattrevent-file-destination-name-doc} +Type: string + +Definition: Name of the extended attribute + +`*.file.destination.name` has 2 possible prefixes: +`removexattr` `setxattr` + + +### `*.file.destination.namespace` {#common-setxattrevent-file-destination-namespace-doc} +Type: string + +Definition: Namespace of the extended attribute + +`*.file.destination.namespace` has 2 possible prefixes: +`removexattr` `setxattr` + + +### `*.filesystem` {#common-fileevent-filesystem-doc} +Type: string + +Definition: File's filesystem + +`*.filesystem` has 38 possible prefixes: +`chmod.file` `chown.file` `exec.file` `exec.interpreter.file` `exit.file` `exit.interpreter.file` `link.file` `link.file.destination` `load_module.file` `mkdir.file` `mmap.file` `open.file` `process.ancestors.file` `process.ancestors.interpreter.file` `process.file` `process.interpreter.file` `process.parent.file` `process.parent.interpreter.file` `ptrace.tracee.ancestors.file` `ptrace.tracee.ancestors.interpreter.file` `ptrace.tracee.file` `ptrace.tracee.interpreter.file` `ptrace.tracee.parent.file` `ptrace.tracee.parent.interpreter.file` `removexattr.file` `rename.file` `rename.file.destination` `rmdir.file` `setxattr.file` `signal.target.ancestors.file` `signal.target.ancestors.interpreter.file` `signal.target.file` `signal.target.interpreter.file` `signal.target.parent.file` `signal.target.parent.interpreter.file` `splice.file` `unlink.file` `utimes.file` + + +### `*.fsgid` {#common-credentials-fsgid-doc} +Type: int + +Definition: FileSystem-gid of the process + +`*.fsgid` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.fsgroup` {#common-credentials-fsgroup-doc} +Type: string + +Definition: FileSystem-group of the process + +`*.fsgroup` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.fsuid` {#common-credentials-fsuid-doc} +Type: int + +Definition: FileSystem-uid of the process + +`*.fsuid` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.fsuser` {#common-credentials-fsuser-doc} +Type: string + +Definition: FileSystem-user of the process + +`*.fsuser` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.gid` {#common-credentials-gid-doc} +Type: int + +Definition: GID of the process + +`*.gid` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.gid` {#common-filefields-gid-doc} +Type: int + +Definition: GID of the file's owner + +`*.gid` has 38 possible prefixes: +`chmod.file` `chown.file` `exec.file` `exec.interpreter.file` `exit.file` `exit.interpreter.file` `link.file` `link.file.destination` `load_module.file` `mkdir.file` `mmap.file` `open.file` `process.ancestors.file` `process.ancestors.interpreter.file` `process.file` `process.interpreter.file` `process.parent.file` `process.parent.interpreter.file` `ptrace.tracee.ancestors.file` `ptrace.tracee.ancestors.interpreter.file` `ptrace.tracee.file` `ptrace.tracee.interpreter.file` `ptrace.tracee.parent.file` `ptrace.tracee.parent.interpreter.file` `removexattr.file` `rename.file` `rename.file.destination` `rmdir.file` `setxattr.file` `signal.target.ancestors.file` `signal.target.ancestors.interpreter.file` `signal.target.file` `signal.target.interpreter.file` `signal.target.parent.file` `signal.target.parent.interpreter.file` `splice.file` `unlink.file` `utimes.file` + + +### `*.group` {#common-credentials-group-doc} +Type: string + +Definition: Group of the process + +`*.group` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.group` {#common-filefields-group-doc} +Type: string + +Definition: Group of the file's owner + +`*.group` has 38 possible prefixes: +`chmod.file` `chown.file` `exec.file` `exec.interpreter.file` `exit.file` `exit.interpreter.file` `link.file` `link.file.destination` `load_module.file` `mkdir.file` `mmap.file` `open.file` `process.ancestors.file` `process.ancestors.interpreter.file` `process.file` `process.interpreter.file` `process.parent.file` `process.parent.interpreter.file` `ptrace.tracee.ancestors.file` `ptrace.tracee.ancestors.interpreter.file` `ptrace.tracee.file` `ptrace.tracee.interpreter.file` `ptrace.tracee.parent.file` `ptrace.tracee.parent.interpreter.file` `removexattr.file` `rename.file` `rename.file.destination` `rmdir.file` `setxattr.file` `signal.target.ancestors.file` `signal.target.ancestors.interpreter.file` `signal.target.file` `signal.target.interpreter.file` `signal.target.parent.file` `signal.target.parent.interpreter.file` `splice.file` `unlink.file` `utimes.file` + + +### `*.in_upper_layer` {#common-filefields-in_upper_layer-doc} +Type: bool + +Definition: Indicator of the file layer, for example, in an OverlayFS + +`*.in_upper_layer` has 38 possible prefixes: +`chmod.file` `chown.file` `exec.file` `exec.interpreter.file` `exit.file` `exit.interpreter.file` `link.file` `link.file.destination` `load_module.file` `mkdir.file` `mmap.file` `open.file` `process.ancestors.file` `process.ancestors.interpreter.file` `process.file` `process.interpreter.file` `process.parent.file` `process.parent.interpreter.file` `ptrace.tracee.ancestors.file` `ptrace.tracee.ancestors.interpreter.file` `ptrace.tracee.file` `ptrace.tracee.interpreter.file` `ptrace.tracee.parent.file` `ptrace.tracee.parent.interpreter.file` `removexattr.file` `rename.file` `rename.file.destination` `rmdir.file` `setxattr.file` `signal.target.ancestors.file` `signal.target.ancestors.interpreter.file` `signal.target.file` `signal.target.interpreter.file` `signal.target.parent.file` `signal.target.parent.interpreter.file` `splice.file` `unlink.file` `utimes.file` + + +### `*.inode` {#common-filefields-inode-doc} +Type: int + +Definition: Inode of the file + +`*.inode` has 38 possible prefixes: +`chmod.file` `chown.file` `exec.file` `exec.interpreter.file` `exit.file` `exit.interpreter.file` `link.file` `link.file.destination` `load_module.file` `mkdir.file` `mmap.file` `open.file` `process.ancestors.file` `process.ancestors.interpreter.file` `process.file` `process.interpreter.file` `process.parent.file` `process.parent.interpreter.file` `ptrace.tracee.ancestors.file` `ptrace.tracee.ancestors.interpreter.file` `ptrace.tracee.file` `ptrace.tracee.interpreter.file` `ptrace.tracee.parent.file` `ptrace.tracee.parent.interpreter.file` `removexattr.file` `rename.file` `rename.file.destination` `rmdir.file` `setxattr.file` `signal.target.ancestors.file` `signal.target.ancestors.interpreter.file` `signal.target.file` `signal.target.interpreter.file` `signal.target.parent.file` `signal.target.parent.interpreter.file` `splice.file` `unlink.file` `utimes.file` + + +### `*.ip` {#common-ipportcontext-ip-doc} +Type: IP/CIDR + +Definition: IP address + +`*.ip` has 3 possible prefixes: +`bind.addr` `network.destination` `network.source` + + +### `*.is_kworker` {#common-pidcontext-is_kworker-doc} +Type: bool + +Definition: Indicates whether the process is a kworker + +`*.is_kworker` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.is_thread` {#common-process-is_thread-doc} +Type: bool + +Definition: Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) + +`*.is_thread` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.length` {#common-string-length-doc} +Type: int + +Definition: Length of the corresponding string + +`*.length` has 77 possible prefixes: +`chmod.file.name` `chmod.file.path` `chown.file.name` `chown.file.path` `dns.question.name` `exec.file.name` `exec.file.path` `exec.interpreter.file.name` `exec.interpreter.file.path` `exit.file.name` `exit.file.path` `exit.interpreter.file.name` `exit.interpreter.file.path` `link.file.destination.name` `link.file.destination.path` `link.file.name` `link.file.path` `load_module.file.name` `load_module.file.path` `mkdir.file.name` `mkdir.file.path` `mmap.file.name` `mmap.file.path` `open.file.name` `open.file.path` `process.ancestors.file.name` `process.ancestors.file.path` `process.ancestors.interpreter.file.name` `process.ancestors.interpreter.file.path` `process.file.name` `process.file.path` `process.interpreter.file.name` `process.interpreter.file.path` `process.parent.file.name` `process.parent.file.path` `process.parent.interpreter.file.name` `process.parent.interpreter.file.path` `ptrace.tracee.ancestors.file.name` `ptrace.tracee.ancestors.file.path` `ptrace.tracee.ancestors.interpreter.file.name` `ptrace.tracee.ancestors.interpreter.file.path` `ptrace.tracee.file.name` `ptrace.tracee.file.path` `ptrace.tracee.interpreter.file.name` `ptrace.tracee.interpreter.file.path` `ptrace.tracee.parent.file.name` `ptrace.tracee.parent.file.path` `ptrace.tracee.parent.interpreter.file.name` `ptrace.tracee.parent.interpreter.file.path` `removexattr.file.name` `removexattr.file.path` `rename.file.destination.name` `rename.file.destination.path` `rename.file.name` `rename.file.path` `rmdir.file.name` `rmdir.file.path` `setxattr.file.name` `setxattr.file.path` `signal.target.ancestors.file.name` `signal.target.ancestors.file.path` `signal.target.ancestors.interpreter.file.name` `signal.target.ancestors.interpreter.file.path` `signal.target.file.name` `signal.target.file.path` `signal.target.interpreter.file.name` `signal.target.interpreter.file.path` `signal.target.parent.file.name` `signal.target.parent.file.path` `signal.target.parent.interpreter.file.name` `signal.target.parent.interpreter.file.path` `splice.file.name` `splice.file.path` `unlink.file.name` `unlink.file.path` `utimes.file.name` `utimes.file.path` + + +### `*.mode` {#common-filefields-mode-doc} +Type: int + +Definition: Mode of the file + +`*.mode` has 38 possible prefixes: +`chmod.file` `chown.file` `exec.file` `exec.interpreter.file` `exit.file` `exit.interpreter.file` `link.file` `link.file.destination` `load_module.file` `mkdir.file` `mmap.file` `open.file` `process.ancestors.file` `process.ancestors.interpreter.file` `process.file` `process.interpreter.file` `process.parent.file` `process.parent.interpreter.file` `ptrace.tracee.ancestors.file` `ptrace.tracee.ancestors.interpreter.file` `ptrace.tracee.file` `ptrace.tracee.interpreter.file` `ptrace.tracee.parent.file` `ptrace.tracee.parent.interpreter.file` `removexattr.file` `rename.file` `rename.file.destination` `rmdir.file` `setxattr.file` `signal.target.ancestors.file` `signal.target.ancestors.interpreter.file` `signal.target.file` `signal.target.interpreter.file` `signal.target.parent.file` `signal.target.parent.interpreter.file` `splice.file` `unlink.file` `utimes.file` + + +### `*.modification_time` {#common-filefields-modification_time-doc} +Type: int + +Definition: Modification time of the file + +`*.modification_time` has 38 possible prefixes: +`chmod.file` `chown.file` `exec.file` `exec.interpreter.file` `exit.file` `exit.interpreter.file` `link.file` `link.file.destination` `load_module.file` `mkdir.file` `mmap.file` `open.file` `process.ancestors.file` `process.ancestors.interpreter.file` `process.file` `process.interpreter.file` `process.parent.file` `process.parent.interpreter.file` `ptrace.tracee.ancestors.file` `ptrace.tracee.ancestors.interpreter.file` `ptrace.tracee.file` `ptrace.tracee.interpreter.file` `ptrace.tracee.parent.file` `ptrace.tracee.parent.interpreter.file` `removexattr.file` `rename.file` `rename.file.destination` `rmdir.file` `setxattr.file` `signal.target.ancestors.file` `signal.target.ancestors.interpreter.file` `signal.target.file` `signal.target.interpreter.file` `signal.target.parent.file` `signal.target.parent.interpreter.file` `splice.file` `unlink.file` `utimes.file` + + +### `*.mount_id` {#common-filefields-mount_id-doc} +Type: int + +Definition: Mount ID of the file + +`*.mount_id` has 38 possible prefixes: +`chmod.file` `chown.file` `exec.file` `exec.interpreter.file` `exit.file` `exit.interpreter.file` `link.file` `link.file.destination` `load_module.file` `mkdir.file` `mmap.file` `open.file` `process.ancestors.file` `process.ancestors.interpreter.file` `process.file` `process.interpreter.file` `process.parent.file` `process.parent.interpreter.file` `ptrace.tracee.ancestors.file` `ptrace.tracee.ancestors.interpreter.file` `ptrace.tracee.file` `ptrace.tracee.interpreter.file` `ptrace.tracee.parent.file` `ptrace.tracee.parent.interpreter.file` `removexattr.file` `rename.file` `rename.file.destination` `rmdir.file` `setxattr.file` `signal.target.ancestors.file` `signal.target.ancestors.interpreter.file` `signal.target.file` `signal.target.interpreter.file` `signal.target.parent.file` `signal.target.parent.interpreter.file` `splice.file` `unlink.file` `utimes.file` + + +### `*.name` {#common-fileevent-name-doc} +Type: string + +Definition: File's basename + +`*.name` has 38 possible prefixes: +`chmod.file` `chown.file` `exec.file` `exec.interpreter.file` `exit.file` `exit.interpreter.file` `link.file` `link.file.destination` `load_module.file` `mkdir.file` `mmap.file` `open.file` `process.ancestors.file` `process.ancestors.interpreter.file` `process.file` `process.interpreter.file` `process.parent.file` `process.parent.interpreter.file` `ptrace.tracee.ancestors.file` `ptrace.tracee.ancestors.interpreter.file` `ptrace.tracee.file` `ptrace.tracee.interpreter.file` `ptrace.tracee.parent.file` `ptrace.tracee.parent.interpreter.file` `removexattr.file` `rename.file` `rename.file.destination` `rmdir.file` `setxattr.file` `signal.target.ancestors.file` `signal.target.ancestors.interpreter.file` `signal.target.file` `signal.target.interpreter.file` `signal.target.parent.file` `signal.target.parent.interpreter.file` `splice.file` `unlink.file` `utimes.file` + + + +Example: + +{{< code-block lang="javascript" >}} +exec.file.name == "apt" +{{< /code-block >}} + +Matches the execution of any file named apt. + +### `*.path` {#common-fileevent-path-doc} +Type: string + +Definition: File's path + +`*.path` has 38 possible prefixes: +`chmod.file` `chown.file` `exec.file` `exec.interpreter.file` `exit.file` `exit.interpreter.file` `link.file` `link.file.destination` `load_module.file` `mkdir.file` `mmap.file` `open.file` `process.ancestors.file` `process.ancestors.interpreter.file` `process.file` `process.interpreter.file` `process.parent.file` `process.parent.interpreter.file` `ptrace.tracee.ancestors.file` `ptrace.tracee.ancestors.interpreter.file` `ptrace.tracee.file` `ptrace.tracee.interpreter.file` `ptrace.tracee.parent.file` `ptrace.tracee.parent.interpreter.file` `removexattr.file` `rename.file` `rename.file.destination` `rmdir.file` `setxattr.file` `signal.target.ancestors.file` `signal.target.ancestors.interpreter.file` `signal.target.file` `signal.target.interpreter.file` `signal.target.parent.file` `signal.target.parent.interpreter.file` `splice.file` `unlink.file` `utimes.file` + + + +Example: + +{{< code-block lang="javascript" >}} +exec.file.path == "/usr/bin/apt" +{{< /code-block >}} + +Matches the execution of the file located at /usr/bin/apt + +Example: + +{{< code-block lang="javascript" >}} +open.file.path == "/etc/passwd" +{{< /code-block >}} + +Matches any process opening the /etc/passwd file. + +### `*.pid` {#common-pidcontext-pid-doc} +Type: int + +Definition: Process ID of the process (also called thread group ID) + +`*.pid` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.port` {#common-ipportcontext-port-doc} +Type: int + +Definition: Port number + +`*.port` has 3 possible prefixes: +`bind.addr` `network.destination` `network.source` + + +### `*.ppid` {#common-process-ppid-doc} +Type: int + +Definition: Parent process ID + +`*.ppid` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.retval` {#common-syscallevent-retval-doc} +Type: int + +Definition: Return value of the syscall + +`*.retval` has 21 possible prefixes: +`bind` `bpf` `chmod` `chown` `link` `load_module` `mkdir` `mmap` `mount` `mprotect` `open` `ptrace` `removexattr` `rename` `rmdir` `setxattr` `signal` `splice` `unlink` `unload_module` `utimes` + +Constants: [Error constants](#error-constants) + + + +### `*.rights` {#common-filefields-rights-doc} +Type: int + +Definition: Rights of the file + +`*.rights` has 38 possible prefixes: +`chmod.file` `chown.file` `exec.file` `exec.interpreter.file` `exit.file` `exit.interpreter.file` `link.file` `link.file.destination` `load_module.file` `mkdir.file` `mmap.file` `open.file` `process.ancestors.file` `process.ancestors.interpreter.file` `process.file` `process.interpreter.file` `process.parent.file` `process.parent.interpreter.file` `ptrace.tracee.ancestors.file` `ptrace.tracee.ancestors.interpreter.file` `ptrace.tracee.file` `ptrace.tracee.interpreter.file` `ptrace.tracee.parent.file` `ptrace.tracee.parent.interpreter.file` `removexattr.file` `rename.file` `rename.file.destination` `rmdir.file` `setxattr.file` `signal.target.ancestors.file` `signal.target.ancestors.interpreter.file` `signal.target.file` `signal.target.interpreter.file` `signal.target.parent.file` `signal.target.parent.interpreter.file` `splice.file` `unlink.file` `utimes.file` + +Constants: [Chmod mode constants](#chmod-mode-constants) + + + +### `*.tid` {#common-pidcontext-tid-doc} +Type: int + +Definition: Thread ID of the thread + +`*.tid` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.tty_name` {#common-process-tty_name-doc} +Type: string + +Definition: Name of the TTY associated with the process + +`*.tty_name` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.uid` {#common-credentials-uid-doc} +Type: int + +Definition: UID of the process + +`*.uid` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + +### `*.uid` {#common-filefields-uid-doc} +Type: int + +Definition: UID of the file's owner + +`*.uid` has 38 possible prefixes: +`chmod.file` `chown.file` `exec.file` `exec.interpreter.file` `exit.file` `exit.interpreter.file` `link.file` `link.file.destination` `load_module.file` `mkdir.file` `mmap.file` `open.file` `process.ancestors.file` `process.ancestors.interpreter.file` `process.file` `process.interpreter.file` `process.parent.file` `process.parent.interpreter.file` `ptrace.tracee.ancestors.file` `ptrace.tracee.ancestors.interpreter.file` `ptrace.tracee.file` `ptrace.tracee.interpreter.file` `ptrace.tracee.parent.file` `ptrace.tracee.parent.interpreter.file` `removexattr.file` `rename.file` `rename.file.destination` `rmdir.file` `setxattr.file` `signal.target.ancestors.file` `signal.target.ancestors.interpreter.file` `signal.target.file` `signal.target.interpreter.file` `signal.target.parent.file` `signal.target.parent.interpreter.file` `splice.file` `unlink.file` `utimes.file` + + +### `*.user` {#common-credentials-user-doc} +Type: string + +Definition: User of the process + +`*.user` has 11 possible prefixes: +`exec` `exit` `process` `process.ancestors` `process.parent` `ptrace.tracee` `ptrace.tracee.ancestors` `ptrace.tracee.parent` `signal.target` `signal.target.ancestors` `signal.target.parent` + + + +Example: + +{{< code-block lang="javascript" >}} +process.user == "root" +{{< /code-block >}} + +Constrain an event to be triggered by a process running as the root user. + +### `*.user` {#common-filefields-user-doc} +Type: string + +Definition: User of the file's owner + +`*.user` has 38 possible prefixes: +`chmod.file` `chown.file` `exec.file` `exec.interpreter.file` `exit.file` `exit.interpreter.file` `link.file` `link.file.destination` `load_module.file` `mkdir.file` `mmap.file` `open.file` `process.ancestors.file` `process.ancestors.interpreter.file` `process.file` `process.interpreter.file` `process.parent.file` `process.parent.interpreter.file` `ptrace.tracee.ancestors.file` `ptrace.tracee.ancestors.interpreter.file` `ptrace.tracee.file` `ptrace.tracee.interpreter.file` `ptrace.tracee.parent.file` `ptrace.tracee.parent.interpreter.file` `removexattr.file` `rename.file` `rename.file.destination` `rmdir.file` `setxattr.file` `signal.target.ancestors.file` `signal.target.ancestors.interpreter.file` `signal.target.file` `signal.target.interpreter.file` `signal.target.parent.file` `signal.target.parent.interpreter.file` `splice.file` `unlink.file` `utimes.file` + + +### `async` {#async-doc} +Type: bool + +Definition: True if the syscall was asynchronous + + + +### `bind.addr.family` {#bind-addr-family-doc} +Type: int + +Definition: Address family + + + +### `bpf.cmd` {#bpf-cmd-doc} +Type: int + +Definition: BPF command name + + +Constants: [BPF commands](#bpf-commands) + + + +### `bpf.map.name` {#bpf-map-name-doc} +Type: string + +Definition: Name of the eBPF map (added in 7.35) + + + +### `bpf.map.type` {#bpf-map-type-doc} +Type: int + +Definition: Type of the eBPF map + + +Constants: [BPF map types](#bpf-map-types) + + + +### `bpf.prog.attach_type` {#bpf-prog-attach_type-doc} +Type: int + +Definition: Attach type of the eBPF program + + +Constants: [BPF attach types](#bpf-attach-types) + + + +### `bpf.prog.helpers` {#bpf-prog-helpers-doc} +Type: int + +Definition: eBPF helpers used by the eBPF program (added in 7.35) + + +Constants: [BPF helper functions](#bpf-helper-functions) + + + +### `bpf.prog.name` {#bpf-prog-name-doc} +Type: string + +Definition: Name of the eBPF program (added in 7.35) + + + +### `bpf.prog.tag` {#bpf-prog-tag-doc} +Type: string + +Definition: Hash (sha1) of the eBPF program (added in 7.35) + + + +### `bpf.prog.type` {#bpf-prog-type-doc} +Type: int + +Definition: Type of the eBPF program + + +Constants: [BPF program types](#bpf-program-types) + + + +### `capset.cap_effective` {#capset-cap_effective-doc} +Type: int + +Definition: Effective capability set of the process + + +Constants: [Kernel Capability constants](#kernel-capability-constants) + + + +### `capset.cap_permitted` {#capset-cap_permitted-doc} +Type: int + +Definition: Permitted capability set of the process + + +Constants: [Kernel Capability constants](#kernel-capability-constants) + + + +### `chmod.file.destination.mode` {#chmod-file-destination-mode-doc} +Type: int + +Definition: New mode of the chmod-ed file + + +Constants: [Chmod mode constants](#chmod-mode-constants) + + + +### `chmod.file.destination.rights` {#chmod-file-destination-rights-doc} +Type: int + +Definition: New rights of the chmod-ed file + + +Constants: [Chmod mode constants](#chmod-mode-constants) + + + +### `chown.file.destination.gid` {#chown-file-destination-gid-doc} +Type: int + +Definition: New GID of the chown-ed file's owner + + + +### `chown.file.destination.group` {#chown-file-destination-group-doc} +Type: string + +Definition: New group of the chown-ed file's owner + + + +### `chown.file.destination.uid` {#chown-file-destination-uid-doc} +Type: int + +Definition: New UID of the chown-ed file's owner + + + +### `chown.file.destination.user` {#chown-file-destination-user-doc} +Type: string + +Definition: New user of the chown-ed file's owner + + + +### `container.id` {#container-id-doc} +Type: string + +Definition: ID of the container + + + +### `container.tags` {#container-tags-doc} +Type: string + +Definition: Tags of the container + + + +### `dns.id` {#dns-id-doc} +Type: int + +Definition: [Experimental] the DNS request ID + + + +### `dns.question.class` {#dns-question-class-doc} +Type: int + +Definition: the class looked up by the DNS question + + +Constants: [DNS qclasses](#dns-qclasses) + + + +### `dns.question.count` {#dns-question-count-doc} +Type: int + +Definition: the total count of questions in the DNS request + + + +### `dns.question.length` {#dns-question-length-doc} +Type: int + +Definition: the total DNS request size in bytes + + + +### `dns.question.name` {#dns-question-name-doc} +Type: string + +Definition: the queried domain name + + + +### `dns.question.type` {#dns-question-type-doc} +Type: int + +Definition: a two octet code which specifies the DNS question type + + +Constants: [DNS qtypes](#dns-qtypes) + + + +### `exit.cause` {#exit-cause-doc} +Type: int + +Definition: Cause of the process termination (one of EXITED, SIGNALED, COREDUMPED) + + + +### `exit.code` {#exit-code-doc} +Type: int + +Definition: Exit code of the process or number of the signal that caused the process to terminate + + + +### `load_module.loaded_from_memory` {#load_module-loaded_from_memory-doc} +Type: bool + +Definition: Indicates if the kernel module was loaded from memory + + + +### `load_module.name` {#load_module-name-doc} +Type: string + +Definition: Name of the new kernel module + + + +### `mkdir.file.destination.mode` {#mkdir-file-destination-mode-doc} +Type: int + +Definition: Mode of the new directory + + +Constants: [Chmod mode constants](#chmod-mode-constants) + + + +### `mkdir.file.destination.rights` {#mkdir-file-destination-rights-doc} +Type: int + +Definition: Rights of the new directory + + +Constants: [Chmod mode constants](#chmod-mode-constants) + + + +### `mmap.flags` {#mmap-flags-doc} +Type: int + +Definition: memory segment flags + + +Constants: [MMap flags](#mmap-flags) + + + +### `mmap.protection` {#mmap-protection-doc} +Type: int + +Definition: memory segment protection + + +Constants: [Protection constants](#protection-constants) + + + +### `mount.fs_type` {#mount-fs_type-doc} +Type: string + +Definition: Type of the mounted file system + + + +### `mount.mountpoint.path` {#mount-mountpoint-path-doc} +Type: string + +Definition: Path of the mount point + + + +### `mount.source.path` {#mount-source-path-doc} +Type: string + +Definition: Source path of a bind mount + + + +### `mprotect.req_protection` {#mprotect-req_protection-doc} +Type: int + +Definition: new memory segment protection + + +Constants: [Virtual Memory flags](#virtual-memory-flags) + + + +### `mprotect.vm_protection` {#mprotect-vm_protection-doc} +Type: int + +Definition: initial memory segment protection + + +Constants: [Virtual Memory flags](#virtual-memory-flags) + + + +### `network.device.ifindex` {#network-device-ifindex-doc} +Type: int + +Definition: interface ifindex + + + +### `network.device.ifname` {#network-device-ifname-doc} +Type: string + +Definition: interface ifname + + + +### `network.l3_protocol` {#network-l3_protocol-doc} +Type: int + +Definition: l3 protocol of the network packet + + +Constants: [L3 protocols](#l3-protocols) + + + +### `network.l4_protocol` {#network-l4_protocol-doc} +Type: int + +Definition: l4 protocol of the network packet + + +Constants: [L4 protocols](#l4-protocols) + + + +### `network.size` {#network-size-doc} +Type: int + +Definition: size in bytes of the network packet + + + +### `open.file.destination.mode` {#open-file-destination-mode-doc} +Type: int + +Definition: Mode of the created file + + +Constants: [Chmod mode constants](#chmod-mode-constants) + + + +### `open.flags` {#open-flags-doc} +Type: int + +Definition: Flags used when opening the file + + +Constants: [Open flags](#open-flags) + + + +### `ptrace.request` {#ptrace-request-doc} +Type: int + +Definition: ptrace request + + +Constants: [Ptrace constants](#ptrace-constants) + + + +### `selinux.bool.name` {#selinux-bool-name-doc} +Type: string + +Definition: SELinux boolean name + + + +### `selinux.bool.state` {#selinux-bool-state-doc} +Type: string + +Definition: SELinux boolean new value + + + +### `selinux.bool_commit.state` {#selinux-bool_commit-state-doc} +Type: bool + +Definition: Indicator of a SELinux boolean commit operation + + + +### `selinux.enforce.status` {#selinux-enforce-status-doc} +Type: string + +Definition: SELinux enforcement status (one of "enforcing", "permissive", "disabled") + + + +### `setgid.egid` {#setgid-egid-doc} +Type: int + +Definition: New effective GID of the process + + + +### `setgid.egroup` {#setgid-egroup-doc} +Type: string + +Definition: New effective group of the process + + + +### `setgid.fsgid` {#setgid-fsgid-doc} +Type: int + +Definition: New FileSystem GID of the process + + + +### `setgid.fsgroup` {#setgid-fsgroup-doc} +Type: string + +Definition: New FileSystem group of the process + + + +### `setgid.gid` {#setgid-gid-doc} +Type: int + +Definition: New GID of the process + + + +### `setgid.group` {#setgid-group-doc} +Type: string + +Definition: New group of the process + + + +### `setuid.euid` {#setuid-euid-doc} +Type: int + +Definition: New effective UID of the process + + + +### `setuid.euser` {#setuid-euser-doc} +Type: string + +Definition: New effective user of the process + + + +### `setuid.fsuid` {#setuid-fsuid-doc} +Type: int + +Definition: New FileSystem UID of the process + + + +### `setuid.fsuser` {#setuid-fsuser-doc} +Type: string + +Definition: New FileSystem user of the process + + + +### `setuid.uid` {#setuid-uid-doc} +Type: int + +Definition: New UID of the process + + + +### `setuid.user` {#setuid-user-doc} +Type: string + +Definition: New user of the process + + + +### `signal.pid` {#signal-pid-doc} +Type: int + +Definition: Target PID + + + +### `signal.type` {#signal-type-doc} +Type: int + +Definition: Signal type (ex: SIGHUP, SIGINT, SIGQUIT, etc) + + +Constants: [Signal constants](#signal-constants) + + + +### `splice.pipe_entry_flag` {#splice-pipe_entry_flag-doc} +Type: int + +Definition: Entry flag of the "fd_out" pipe passed to the splice syscall + + +Constants: [Pipe buffer flags](#pipe-buffer-flags) + + + +### `splice.pipe_exit_flag` {#splice-pipe_exit_flag-doc} +Type: int + +Definition: Exit flag of the "fd_out" pipe passed to the splice syscall + + +Constants: [Pipe buffer flags](#pipe-buffer-flags) + + + +### `unlink.flags` {#unlink-flags-doc} +Type: int + +Definition: Flags of the unlink syscall + + +Constants: [Unlink flags](#unlink-flags) + + + +### `unload_module.name` {#unload_module-name-doc} +Type: string + +Definition: Name of the kernel module that was deleted + ## Constants Constants are used to improve the readability of your rules. Some constants are common to all architectures, others are specific to some architectures. -### `BPF attach types` - +### `BPF attach types` {#bpf-attach-types} BPF attach types are the supported eBPF program attach types. | Name | Architectures | @@ -1492,8 +2623,7 @@ BPF attach types are the supported eBPF program attach types. | `BPF_XDP` | all | | `BPF_SK_SKB_VERDICT` | all | -### `BPF commands` - +### `BPF commands` {#bpf-commands} BPF commands are used to specify a command to a bpf syscall. | Name | Architectures | @@ -1536,8 +2666,7 @@ BPF commands are used to specify a command to a bpf syscall. | `BPF_LINK_DETACH` | all | | `BPF_PROG_BIND_MAP` | all | -### `BPF helper functions` - +### `BPF helper functions` {#bpf-helper-functions} BPF helper functions are the supported BPF helper functions. | Name | Architectures | @@ -1709,8 +2838,7 @@ BPF helper functions are the supported BPF helper functions. | `BPF_FOR_EACH_MAP_ELEM` | all | | `BPF_SNPRINTF` | all | -### `BPF map types` - +### `BPF map types` {#bpf-map-types} BPF map types are the supported eBPF map types. | Name | Architectures | @@ -1746,8 +2874,7 @@ BPF map types are the supported eBPF map types. | `BPF_MAP_TYPE_INODE_STORAGE` | all | | `BPF_MAP_TYPE_TASK_STORAGE` | all | -### `BPF program types` - +### `BPF program types` {#bpf-program-types} BPF program types are the supported eBPF program types. | Name | Architectures | @@ -1784,8 +2911,7 @@ BPF program types are the supported eBPF program types. | `BPF_PROG_TYPE_LSM` | all | | `BPF_PROG_TYPE_SK_LOOKUP` | all | -### `Chmod mode constants` - +### `Chmod mode constants` {#chmod-mode-constants} Chmod mode constants are the supported modes for the chmod syscall. | Name | Architectures | @@ -1814,8 +2940,7 @@ Chmod mode constants are the supported modes for the chmod syscall. | `S_IXOTH` | all | | `S_IXUSR` | all | -### `DNS qclasses` - +### `DNS qclasses` {#dns-qclasses} DNS qclasses are the supported DNS query classes. | Name | Architectures | @@ -1827,8 +2952,7 @@ DNS qclasses are the supported DNS query classes. | `CLASS_NONE` | all | | `CLASS_ANY` | all | -### `DNS qtypes` - +### `DNS qtypes` {#dns-qtypes} DNS qtypes are the supported DNS query types. | Name | Architectures | @@ -1918,9 +3042,8 @@ DNS qtypes are the supported DNS query types. | `DLV` | all | | `Reserved` | all | -### `Error Constants` - -Error Constants are the supported error constants. +### `Error constants` {#error-constants} +Error constants are the supported error constants. | Name | Architectures | | ---- |---------------| @@ -2058,8 +3181,7 @@ Error Constants are the supported error constants. | `EXDEV` | all | | `EXFULL` | all | -### `Kernel Capability constants` - +### `Kernel Capability constants` {#kernel-capability-constants} Kernel Capability constants are the supported Linux Kernel Capability. | Name | Architectures | @@ -2107,8 +3229,7 @@ Kernel Capability constants are the supported Linux Kernel Capability. | `CAP_SYS_TTY_CONFIG` | all | | `CAP_WAKE_ALARM` | all | -### `L3 protocols` - +### `L3 protocols` {#l3-protocols} L3 protocols are the supported Layer 3 protocols. | Name | Architectures | @@ -2204,8 +3325,7 @@ L3 protocols are the supported Layer 3 protocols. | `ETH_P_XDSA` | all | | `ETH_P_MAP` | all | -### `L4 protocols` - +### `L4 protocols` {#l4-protocols} L4 protocols are the supported Layer 4 protocols. | Name | Architectures | @@ -2238,8 +3358,7 @@ L4 protocols are the supported Layer 4 protocols. | `IP_PROTO_MPLS` | all | | `IP_PROTO_RAW` | all | -### `MMap flags` - +### `MMap flags` {#mmap-flags} MMap flags are the supported flags for the mmap syscall. | Name | Architectures | @@ -2277,8 +3396,7 @@ MMap flags are the supported flags for the mmap syscall. | `MAP_HUGE_16GB` | all | | `MAP_32BIT` | amd64 | -### `Network Address Family constants` - +### `Network Address Family constants` {#network-address-family-constants} Network Address Family constants are the supported network address families. | Name | Architectures | @@ -2333,8 +3451,7 @@ Network Address Family constants are the supported network address families. | `AF_XDP` | all | | `AF_MAX` | all | -### `Open flags` - +### `Open flags` {#open-flags} Open flags are the supported flags for the open syscall. | Name | Architectures | @@ -2361,8 +3478,7 @@ Open flags are the supported flags for the open syscall. | `O_NONBLOCK` | all | | `O_RSYNC` | all | -### `Pipe buffer flags` - +### `Pipe buffer flags` {#pipe-buffer-flags} Pipe buffer flags are the supported flags for a pipe buffer. | Name | Architectures | @@ -2375,8 +3491,7 @@ Pipe buffer flags are the supported flags for a pipe buffer. | `PIPE_BUF_FLAG_WHOLE` | all | | `PIPE_BUF_FLAG_LOSS` | all | -### `Protection constants` - +### `Protection constants` {#protection-constants} Protection constants are the supported protections for the mmap syscall. | Name | Architectures | @@ -2388,8 +3503,7 @@ Protection constants are the supported protections for the mmap syscall. | `PROT_GROWSDOWN` | all | | `PROT_GROWSUP` | all | -### `Ptrace constants` - +### `Ptrace constants` {#ptrace-constants} Ptrace constants are the supported ptrace commands for the ptrace syscall. | Name | Architectures | @@ -2448,8 +3562,7 @@ Ptrace constants are the supported ptrace commands for the ptrace syscall. | `PTRACE_PEEKMTETAGS` | arm64 | | `PTRACE_POKEMTETAGS` | arm64 | -### `SecL constants` - +### `SecL constants` {#secl-constants} SecL constants are the supported generic SecL constants. | Name | Architectures | @@ -2457,8 +3570,7 @@ SecL constants are the supported generic SecL constants. | `true` | all | | `false` | all | -### `Signal constants` - +### `Signal constants` {#signal-constants} Signal constants are the supported signals for the kill syscall. | Name | Architectures | @@ -2497,16 +3609,14 @@ Signal constants are the supported signals for the kill syscall. | `SIGPWR` | all | | `SIGSYS` | all | -### `Unlink flags` - +### `Unlink flags` {#unlink-flags} Unlink flags are the supported flags for the unlink syscall. | Name | Architectures | | ---- |---------------| | `AT_REMOVEDIR` | all | -### `Virtual Memory flags` - +### `Virtual Memory flags` {#virtual-memory-flags} Virtual Memory flags define the protection of a virtual memory segment. | Name | Architectures | diff --git a/docs/cloud-workload-security/backend.md b/docs/cloud-workload-security/backend.md index f9c5dc8f1a66d..324462ced4f04 100644 --- a/docs/cloud-workload-security/backend.md +++ b/docs/cloud-workload-security/backend.md @@ -543,10 +543,10 @@ CWS logs have the following JSON schema: }, "MountEvent": { "properties": { - "mountpoint": { + "mp": { "$ref": "#/$defs/File" }, - "source": { + "root": { "$ref": "#/$defs/File" }, "mount_id": { @@ -567,16 +567,16 @@ CWS logs have the following JSON schema: "fs_type": { "type": "string" }, - "mountpoint_path": { + "mountpoint.path": { "type": "string" }, - "mountsource_path": { + "source.path": { "type": "string" }, - "mountpoint_path_error": { + "mountpoint.path_error": { "type": "string" }, - "mountsource_path_error": { + "source.path_error": { "type": "string" } }, @@ -2021,10 +2021,10 @@ CWS logs have the following JSON schema: {{< code-block lang="json" collapsible="true" >}} { "properties": { - "mountpoint": { + "mp": { "$ref": "#/$defs/File" }, - "source": { + "root": { "$ref": "#/$defs/File" }, "mount_id": { @@ -2045,16 +2045,16 @@ CWS logs have the following JSON schema: "fs_type": { "type": "string" }, - "mountpoint_path": { + "mountpoint.path": { "type": "string" }, - "mountsource_path": { + "source.path": { "type": "string" }, - "mountpoint_path_error": { + "mountpoint.path_error": { "type": "string" }, - "mountsource_path_error": { + "source.path_error": { "type": "string" } }, diff --git a/docs/cloud-workload-security/backend.schema.json b/docs/cloud-workload-security/backend.schema.json index 1f775da3f71c4..66cea4d6c098b 100644 --- a/docs/cloud-workload-security/backend.schema.json +++ b/docs/cloud-workload-security/backend.schema.json @@ -527,10 +527,10 @@ }, "MountEvent": { "properties": { - "mountpoint": { + "mp": { "$ref": "#/$defs/File" }, - "source": { + "root": { "$ref": "#/$defs/File" }, "mount_id": { @@ -551,16 +551,16 @@ "fs_type": { "type": "string" }, - "mountpoint_path": { + "mountpoint.path": { "type": "string" }, - "mountsource_path": { + "source.path": { "type": "string" }, - "mountpoint_path_error": { + "mountpoint.path_error": { "type": "string" }, - "mountsource_path_error": { + "source.path_error": { "type": "string" } }, diff --git a/docs/cloud-workload-security/scripts/secl-doc-gen.py b/docs/cloud-workload-security/scripts/secl-doc-gen.py index 11e6254e42c06..866fca86cd78f 100644 --- a/docs/cloud-workload-security/scripts/secl-doc-gen.py +++ b/docs/cloud-workload-security/scripts/secl-doc-gen.py @@ -9,10 +9,8 @@ @dataclass class EventTypeProperty: name: str - datatype: str definition: str - constants: str - + doc_link: str @dataclass class EventType: @@ -24,6 +22,22 @@ class EventType: properties: List[EventTypeProperty] +@dataclass +class Example: + expression: str + description: str + +@dataclass +class PropertyDocumentation: + name: str + link: str + datatype: str + definition: str + prefixes: List[str] + constants: str + constants_link: str + examples: List[Example] + @dataclass class Constant: name: str @@ -33,10 +47,12 @@ class Constant: @dataclass class Constants: name: str + link: str definition: str all: List[Constant] + def build_event_types(top_node): output = [] for et in top_node["event_types"]: @@ -44,19 +60,24 @@ def build_event_types(top_node): et["name"], et["type"], et["definition"], et["from_agent_version"], et["experimental"], [] ) for p in et["properties"]: - try: - prop = EventTypeProperty(p["name"], p["type"], p["definition"], p["constants"]) - except KeyError: - prop = EventTypeProperty(p["name"], p["type"], p["definition"], "none") + prop = EventTypeProperty(p["name"], p["definition"], p["property_doc_link"]) event_type.properties.append(prop) output.append(event_type) return output +def build_properties_doc(top_node): + output = [] + for property in top_node["properties_doc"]: + property_doc = PropertyDocumentation(property["name"], property["link"], property["type"], property["definition"], property["prefixes"], property["constants"], property["constants_link"], []) + for exp in property["examples"]: + property_doc.examples.append(Example(exp["expression"], exp["description"])) + output.append(property_doc) + return output def build_constants(top_node): output = [] for cs in top_node["constants"]: - constants = Constants(cs["name"], cs["description"], []) + constants = Constants(cs["name"], cs["link"], cs["description"], []) for c in cs["all"]: constants.all.append(Constant(c["name"], c["architecture"])) output.append(constants) @@ -75,8 +96,9 @@ def build_constants(top_node): secl_json_file.close() event_types = build_event_types(json_top_node) + properties_doc_list = build_properties_doc(json_top_node) constants_list = build_constants(json_top_node) output_file = open(args.output, "w") - print(common.fill_template(args.template, event_types=event_types, constants_list=constants_list), file=output_file) + print(common.fill_template(args.template, event_types=event_types, constants_list=constants_list, properties_doc_list=properties_doc_list), file=output_file) output_file.close() diff --git a/docs/cloud-workload-security/scripts/templates/agent_expressions.md b/docs/cloud-workload-security/scripts/templates/agent_expressions.md index f98858e758359..8692a42e85d53 100644 --- a/docs/cloud-workload-security/scripts/templates/agent_expressions.md +++ b/docs/cloud-workload-security/scripts/templates/agent_expressions.md @@ -146,7 +146,7 @@ Examples: The *file.rights* attribute can now be used in addition to *file.mode*. *file.mode* can hold values set by the kernel, while the *file.rights* only holds the values set by the user. These rights may be more familiar because they are in the `chmod` commands. -## Event types +## Event attributes {% for event_type in event_types %} {% if event_type.name == "*" %} @@ -161,20 +161,62 @@ _This event type is experimental and may change in the future._ {{ event_type.definition }} {% endif %} -| Property | Type | Definition | Constants | -| -------- | ---- | ---------- | --------- | +| Property | Definition | +| -------- | ------------- | {% for property in event_type.properties %} -| `{{ property.name }}` | {{ property.datatype }} | {{ property.definition }} | {{ property.constants }} | +| [`{{ property.name }}`](#{{ property.doc_link }}) | {{ property.definition }} | {% endfor %} {% endfor %} +## Attributes documentation + +{% for property_doc in properties_doc_list %} + +### `{{ property_doc.name }}` {% raw %}{#{% endraw %}{{ property_doc.link }}{% raw %}}{% endraw %} + +Type: {{ property_doc.datatype }} + +{% if property_doc.definition != "" %} +Definition: {{ property_doc.definition }} +{% endif %} + +{% if property_doc.prefixes|length > 1 %} +`{{ property_doc.name }}` has {{ property_doc.prefixes|length }} possible prefixes: +{% for prefix in property_doc.prefixes %}`{{ prefix }}`{% if not loop.last %} {% endif %}{% endfor %} + +{% endif %} +{% if property_doc.constants != "" %} + +Constants: [{{ property_doc.constants }}](#{{ property_doc.constants_link }}) + +{% endif %} + +{% if property_doc.examples|length > 0 %} + +{% for example in property_doc.examples %} + +Example: + +{% raw %}{{< code-block lang="javascript" >}}{% endraw %} + +{{ example.expression }} +{% raw %}{{< /code-block >}}{% endraw %} + +{% if example.description != "" %} + +{{ example.description }} +{% endif %} +{% endfor %} +{% endif %} +{% endfor %} + ## Constants Constants are used to improve the readability of your rules. Some constants are common to all architectures, others are specific to some architectures. {% for constants in constants_list %} -### `{{ constants.name }}` +### `{{ constants.name }}` {% raw %}{#{% endraw %}{{ constants.link }}{% raw %}}{% endraw %} {{ constants.definition }} diff --git a/docs/cloud-workload-security/secl.json b/docs/cloud-workload-security/secl.json index 4eb70a4f10288..a389ae4bdaf0e 100644 --- a/docs/cloud-workload-security/secl.json +++ b/docs/cloud-workload-security/secl.json @@ -9,1245 +9,1038 @@ "properties": [ { "name": "async", - "type": "bool", "definition": "True if the syscall was asynchronous", - "constants": "" + "property_doc_link": "async-doc" }, { "name": "container.id", - "type": "string", "definition": "ID of the container", - "constants": "" + "property_doc_link": "container-id-doc" }, { "name": "container.tags", - "type": "string", "definition": "Tags of the container", - "constants": "" + "property_doc_link": "container-tags-doc" }, { "name": "network.destination.ip", - "type": "IP/CIDR", "definition": "IP address", - "constants": "" + "property_doc_link": "common-ipportcontext-ip-doc" }, { "name": "network.destination.port", - "type": "int", "definition": "Port number", - "constants": "" + "property_doc_link": "common-ipportcontext-port-doc" }, { "name": "network.device.ifindex", - "type": "int", "definition": "interface ifindex", - "constants": "" + "property_doc_link": "network-device-ifindex-doc" }, { "name": "network.device.ifname", - "type": "string", "definition": "interface ifname", - "constants": "" + "property_doc_link": "network-device-ifname-doc" }, { "name": "network.l3_protocol", - "type": "int", "definition": "l3 protocol of the network packet", - "constants": "L3 protocols" + "property_doc_link": "network-l3_protocol-doc" }, { "name": "network.l4_protocol", - "type": "int", "definition": "l4 protocol of the network packet", - "constants": "L4 protocols" + "property_doc_link": "network-l4_protocol-doc" }, { "name": "network.size", - "type": "int", "definition": "size in bytes of the network packet", - "constants": "" + "property_doc_link": "network-size-doc" }, { "name": "network.source.ip", - "type": "IP/CIDR", "definition": "IP address", - "constants": "" + "property_doc_link": "common-ipportcontext-ip-doc" }, { "name": "network.source.port", - "type": "int", "definition": "Port number", - "constants": "" + "property_doc_link": "common-ipportcontext-port-doc" }, { "name": "process.ancestors.args", - "type": "string", - "definition": "Arguments of the process (as a string)", - "constants": "" + "definition": "Arguments of the process (as a string, excluding argv0)", + "property_doc_link": "common-process-args-doc" }, { "name": "process.ancestors.args_flags", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Flags in the process arguments", + "property_doc_link": "common-process-args_flags-doc" }, { "name": "process.ancestors.args_options", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Argument of the process as options", + "property_doc_link": "common-process-args_options-doc" }, { "name": "process.ancestors.args_truncated", - "type": "bool", "definition": "Indicator of arguments truncation", - "constants": "" + "property_doc_link": "common-process-args_truncated-doc" }, { "name": "process.ancestors.argv", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Arguments of the process (as an array, excluding argv0)", + "property_doc_link": "common-process-argv-doc" }, { "name": "process.ancestors.argv0", - "type": "string", "definition": "First argument of the process", - "constants": "" + "property_doc_link": "common-process-argv0-doc" }, { "name": "process.ancestors.cap_effective", - "type": "int", "definition": "Effective capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_effective-doc" }, { "name": "process.ancestors.cap_permitted", - "type": "int", "definition": "Permitted capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_permitted-doc" }, { "name": "process.ancestors.comm", - "type": "string", "definition": "Comm attribute of the process", - "constants": "" + "property_doc_link": "common-process-comm-doc" }, { "name": "process.ancestors.container.id", - "type": "string", "definition": "Container ID", - "constants": "" + "property_doc_link": "common-process-container-id-doc" }, { "name": "process.ancestors.cookie", - "type": "int", "definition": "Cookie of the process", - "constants": "" + "property_doc_link": "common-process-cookie-doc" }, { "name": "process.ancestors.created_at", - "type": "int", "definition": "Timestamp of the creation of the process", - "constants": "" + "property_doc_link": "common-process-created_at-doc" }, { "name": "process.ancestors.egid", - "type": "int", "definition": "Effective GID of the process", - "constants": "" + "property_doc_link": "common-credentials-egid-doc" }, { "name": "process.ancestors.egroup", - "type": "string", "definition": "Effective group of the process", - "constants": "" + "property_doc_link": "common-credentials-egroup-doc" }, { "name": "process.ancestors.envp", - "type": "string", "definition": "Environment variables of the process", - "constants": "" + "property_doc_link": "common-process-envp-doc" }, { "name": "process.ancestors.envs", - "type": "string", "definition": "Environment variable names of the process", - "constants": "" + "property_doc_link": "common-process-envs-doc" }, { "name": "process.ancestors.envs_truncated", - "type": "bool", "definition": "Indicator of environment variables truncation", - "constants": "" + "property_doc_link": "common-process-envs_truncated-doc" }, { "name": "process.ancestors.euid", - "type": "int", "definition": "Effective UID of the process", - "constants": "" + "property_doc_link": "common-credentials-euid-doc" }, { "name": "process.ancestors.euser", - "type": "string", "definition": "Effective user of the process", - "constants": "" + "property_doc_link": "common-credentials-euser-doc" }, { "name": "process.ancestors.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "process.ancestors.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "process.ancestors.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "process.ancestors.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "process.ancestors.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "process.ancestors.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "process.ancestors.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "process.ancestors.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "process.ancestors.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "process.ancestors.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "process.ancestors.file.name.length", - "type": "int", - "definition": "Length of 'process.ancestors.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "process.ancestors.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "process.ancestors.file.path.length", - "type": "int", - "definition": "Length of 'process.ancestors.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "process.ancestors.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "process.ancestors.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "process.ancestors.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "process.ancestors.fsgid", - "type": "int", "definition": "FileSystem-gid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgid-doc" }, { "name": "process.ancestors.fsgroup", - "type": "string", "definition": "FileSystem-group of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgroup-doc" }, { "name": "process.ancestors.fsuid", - "type": "int", "definition": "FileSystem-uid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuid-doc" }, { "name": "process.ancestors.fsuser", - "type": "string", "definition": "FileSystem-user of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuser-doc" }, { "name": "process.ancestors.gid", - "type": "int", "definition": "GID of the process", - "constants": "" + "property_doc_link": "common-credentials-gid-doc" }, { "name": "process.ancestors.group", - "type": "string", "definition": "Group of the process", - "constants": "" + "property_doc_link": "common-credentials-group-doc" }, { "name": "process.ancestors.interpreter.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "process.ancestors.interpreter.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "process.ancestors.interpreter.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "process.ancestors.interpreter.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "process.ancestors.interpreter.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "process.ancestors.interpreter.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "process.ancestors.interpreter.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "process.ancestors.interpreter.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "process.ancestors.interpreter.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "process.ancestors.interpreter.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "process.ancestors.interpreter.file.name.length", - "type": "int", - "definition": "Length of 'process.ancestors.interpreter.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "process.ancestors.interpreter.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "process.ancestors.interpreter.file.path.length", - "type": "int", - "definition": "Length of 'process.ancestors.interpreter.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "process.ancestors.interpreter.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "process.ancestors.interpreter.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "process.ancestors.interpreter.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "process.ancestors.is_kworker", - "type": "bool", "definition": "Indicates whether the process is a kworker", - "constants": "" + "property_doc_link": "common-pidcontext-is_kworker-doc" }, { "name": "process.ancestors.is_thread", - "type": "bool", "definition": "Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program)", - "constants": "" + "property_doc_link": "common-process-is_thread-doc" }, { "name": "process.ancestors.pid", - "type": "int", "definition": "Process ID of the process (also called thread group ID)", - "constants": "" + "property_doc_link": "common-pidcontext-pid-doc" }, { "name": "process.ancestors.ppid", - "type": "int", "definition": "Parent process ID", - "constants": "" + "property_doc_link": "common-process-ppid-doc" }, { "name": "process.ancestors.tid", - "type": "int", "definition": "Thread ID of the thread", - "constants": "" + "property_doc_link": "common-pidcontext-tid-doc" }, { "name": "process.ancestors.tty_name", - "type": "string", "definition": "Name of the TTY associated with the process", - "constants": "" + "property_doc_link": "common-process-tty_name-doc" }, { "name": "process.ancestors.uid", - "type": "int", "definition": "UID of the process", - "constants": "" + "property_doc_link": "common-credentials-uid-doc" }, { "name": "process.ancestors.user", - "type": "string", "definition": "User of the process", - "constants": "" + "property_doc_link": "common-credentials-user-doc" }, { "name": "process.args", - "type": "string", - "definition": "Arguments of the process (as a string)", - "constants": "" + "definition": "Arguments of the process (as a string, excluding argv0)", + "property_doc_link": "common-process-args-doc" }, { "name": "process.args_flags", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Flags in the process arguments", + "property_doc_link": "common-process-args_flags-doc" }, { "name": "process.args_options", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Argument of the process as options", + "property_doc_link": "common-process-args_options-doc" }, { "name": "process.args_truncated", - "type": "bool", "definition": "Indicator of arguments truncation", - "constants": "" + "property_doc_link": "common-process-args_truncated-doc" }, { "name": "process.argv", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Arguments of the process (as an array, excluding argv0)", + "property_doc_link": "common-process-argv-doc" }, { "name": "process.argv0", - "type": "string", "definition": "First argument of the process", - "constants": "" + "property_doc_link": "common-process-argv0-doc" }, { "name": "process.cap_effective", - "type": "int", "definition": "Effective capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_effective-doc" }, { "name": "process.cap_permitted", - "type": "int", "definition": "Permitted capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_permitted-doc" }, { "name": "process.comm", - "type": "string", "definition": "Comm attribute of the process", - "constants": "" + "property_doc_link": "common-process-comm-doc" }, { "name": "process.container.id", - "type": "string", "definition": "Container ID", - "constants": "" + "property_doc_link": "common-process-container-id-doc" }, { "name": "process.cookie", - "type": "int", "definition": "Cookie of the process", - "constants": "" + "property_doc_link": "common-process-cookie-doc" }, { "name": "process.created_at", - "type": "int", "definition": "Timestamp of the creation of the process", - "constants": "" + "property_doc_link": "common-process-created_at-doc" }, { "name": "process.egid", - "type": "int", "definition": "Effective GID of the process", - "constants": "" + "property_doc_link": "common-credentials-egid-doc" }, { "name": "process.egroup", - "type": "string", "definition": "Effective group of the process", - "constants": "" + "property_doc_link": "common-credentials-egroup-doc" }, { "name": "process.envp", - "type": "string", "definition": "Environment variables of the process", - "constants": "" + "property_doc_link": "common-process-envp-doc" }, { "name": "process.envs", - "type": "string", "definition": "Environment variable names of the process", - "constants": "" + "property_doc_link": "common-process-envs-doc" }, { "name": "process.envs_truncated", - "type": "bool", "definition": "Indicator of environment variables truncation", - "constants": "" + "property_doc_link": "common-process-envs_truncated-doc" }, { "name": "process.euid", - "type": "int", "definition": "Effective UID of the process", - "constants": "" + "property_doc_link": "common-credentials-euid-doc" }, { "name": "process.euser", - "type": "string", "definition": "Effective user of the process", - "constants": "" + "property_doc_link": "common-credentials-euser-doc" }, { "name": "process.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "process.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "process.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "process.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "process.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "process.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "process.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "process.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "process.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "process.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "process.file.name.length", - "type": "int", - "definition": "Length of 'process.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "process.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "process.file.path.length", - "type": "int", - "definition": "Length of 'process.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "process.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "process.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "process.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "process.fsgid", - "type": "int", "definition": "FileSystem-gid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgid-doc" }, { "name": "process.fsgroup", - "type": "string", "definition": "FileSystem-group of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgroup-doc" }, { "name": "process.fsuid", - "type": "int", "definition": "FileSystem-uid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuid-doc" }, { "name": "process.fsuser", - "type": "string", "definition": "FileSystem-user of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuser-doc" }, { "name": "process.gid", - "type": "int", "definition": "GID of the process", - "constants": "" + "property_doc_link": "common-credentials-gid-doc" }, { "name": "process.group", - "type": "string", "definition": "Group of the process", - "constants": "" + "property_doc_link": "common-credentials-group-doc" }, { "name": "process.interpreter.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "process.interpreter.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "process.interpreter.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "process.interpreter.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "process.interpreter.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "process.interpreter.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "process.interpreter.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "process.interpreter.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "process.interpreter.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "process.interpreter.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "process.interpreter.file.name.length", - "type": "int", - "definition": "Length of 'process.interpreter.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "process.interpreter.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "process.interpreter.file.path.length", - "type": "int", - "definition": "Length of 'process.interpreter.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "process.interpreter.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "process.interpreter.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "process.interpreter.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "process.is_kworker", - "type": "bool", "definition": "Indicates whether the process is a kworker", - "constants": "" + "property_doc_link": "common-pidcontext-is_kworker-doc" }, { "name": "process.is_thread", - "type": "bool", "definition": "Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program)", - "constants": "" + "property_doc_link": "common-process-is_thread-doc" }, { "name": "process.parent.args", - "type": "string", - "definition": "Arguments of the process (as a string)", - "constants": "" + "definition": "Arguments of the process (as a string, excluding argv0)", + "property_doc_link": "common-process-args-doc" }, { "name": "process.parent.args_flags", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Flags in the process arguments", + "property_doc_link": "common-process-args_flags-doc" }, { "name": "process.parent.args_options", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Argument of the process as options", + "property_doc_link": "common-process-args_options-doc" }, { "name": "process.parent.args_truncated", - "type": "bool", "definition": "Indicator of arguments truncation", - "constants": "" + "property_doc_link": "common-process-args_truncated-doc" }, { "name": "process.parent.argv", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Arguments of the process (as an array, excluding argv0)", + "property_doc_link": "common-process-argv-doc" }, { "name": "process.parent.argv0", - "type": "string", "definition": "First argument of the process", - "constants": "" + "property_doc_link": "common-process-argv0-doc" }, { "name": "process.parent.cap_effective", - "type": "int", "definition": "Effective capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_effective-doc" }, { "name": "process.parent.cap_permitted", - "type": "int", "definition": "Permitted capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_permitted-doc" }, { "name": "process.parent.comm", - "type": "string", "definition": "Comm attribute of the process", - "constants": "" + "property_doc_link": "common-process-comm-doc" }, { "name": "process.parent.container.id", - "type": "string", "definition": "Container ID", - "constants": "" + "property_doc_link": "common-process-container-id-doc" }, { "name": "process.parent.cookie", - "type": "int", "definition": "Cookie of the process", - "constants": "" + "property_doc_link": "common-process-cookie-doc" }, { "name": "process.parent.created_at", - "type": "int", "definition": "Timestamp of the creation of the process", - "constants": "" + "property_doc_link": "common-process-created_at-doc" }, { "name": "process.parent.egid", - "type": "int", "definition": "Effective GID of the process", - "constants": "" + "property_doc_link": "common-credentials-egid-doc" }, { "name": "process.parent.egroup", - "type": "string", "definition": "Effective group of the process", - "constants": "" + "property_doc_link": "common-credentials-egroup-doc" }, { "name": "process.parent.envp", - "type": "string", "definition": "Environment variables of the process", - "constants": "" + "property_doc_link": "common-process-envp-doc" }, { "name": "process.parent.envs", - "type": "string", "definition": "Environment variable names of the process", - "constants": "" + "property_doc_link": "common-process-envs-doc" }, { "name": "process.parent.envs_truncated", - "type": "bool", "definition": "Indicator of environment variables truncation", - "constants": "" + "property_doc_link": "common-process-envs_truncated-doc" }, { "name": "process.parent.euid", - "type": "int", "definition": "Effective UID of the process", - "constants": "" + "property_doc_link": "common-credentials-euid-doc" }, { "name": "process.parent.euser", - "type": "string", "definition": "Effective user of the process", - "constants": "" + "property_doc_link": "common-credentials-euser-doc" }, { "name": "process.parent.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "process.parent.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "process.parent.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "process.parent.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "process.parent.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "process.parent.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "process.parent.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "process.parent.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "process.parent.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "process.parent.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "process.parent.file.name.length", - "type": "int", - "definition": "Length of 'process.parent.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "process.parent.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "process.parent.file.path.length", - "type": "int", - "definition": "Length of 'process.parent.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "process.parent.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "process.parent.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "process.parent.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "process.parent.fsgid", - "type": "int", "definition": "FileSystem-gid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgid-doc" }, { "name": "process.parent.fsgroup", - "type": "string", "definition": "FileSystem-group of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgroup-doc" }, { "name": "process.parent.fsuid", - "type": "int", "definition": "FileSystem-uid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuid-doc" }, { "name": "process.parent.fsuser", - "type": "string", "definition": "FileSystem-user of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuser-doc" }, { "name": "process.parent.gid", - "type": "int", "definition": "GID of the process", - "constants": "" + "property_doc_link": "common-credentials-gid-doc" }, { "name": "process.parent.group", - "type": "string", "definition": "Group of the process", - "constants": "" + "property_doc_link": "common-credentials-group-doc" }, { "name": "process.parent.interpreter.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "process.parent.interpreter.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "process.parent.interpreter.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "process.parent.interpreter.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "process.parent.interpreter.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "process.parent.interpreter.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "process.parent.interpreter.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "process.parent.interpreter.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "process.parent.interpreter.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "process.parent.interpreter.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "process.parent.interpreter.file.name.length", - "type": "int", - "definition": "Length of 'process.parent.interpreter.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "process.parent.interpreter.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "process.parent.interpreter.file.path.length", - "type": "int", - "definition": "Length of 'process.parent.interpreter.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "process.parent.interpreter.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "process.parent.interpreter.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "process.parent.interpreter.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "process.parent.is_kworker", - "type": "bool", "definition": "Indicates whether the process is a kworker", - "constants": "" + "property_doc_link": "common-pidcontext-is_kworker-doc" }, { "name": "process.parent.is_thread", - "type": "bool", "definition": "Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program)", - "constants": "" + "property_doc_link": "common-process-is_thread-doc" }, { "name": "process.parent.pid", - "type": "int", "definition": "Process ID of the process (also called thread group ID)", - "constants": "" + "property_doc_link": "common-pidcontext-pid-doc" }, { "name": "process.parent.ppid", - "type": "int", "definition": "Parent process ID", - "constants": "" + "property_doc_link": "common-process-ppid-doc" }, { "name": "process.parent.tid", - "type": "int", "definition": "Thread ID of the thread", - "constants": "" + "property_doc_link": "common-pidcontext-tid-doc" }, { "name": "process.parent.tty_name", - "type": "string", "definition": "Name of the TTY associated with the process", - "constants": "" + "property_doc_link": "common-process-tty_name-doc" }, { "name": "process.parent.uid", - "type": "int", "definition": "UID of the process", - "constants": "" + "property_doc_link": "common-credentials-uid-doc" }, { "name": "process.parent.user", - "type": "string", "definition": "User of the process", - "constants": "" + "property_doc_link": "common-credentials-user-doc" }, { "name": "process.pid", - "type": "int", "definition": "Process ID of the process (also called thread group ID)", - "constants": "" + "property_doc_link": "common-pidcontext-pid-doc" }, { "name": "process.ppid", - "type": "int", "definition": "Parent process ID", - "constants": "" + "property_doc_link": "common-process-ppid-doc" }, { "name": "process.tid", - "type": "int", "definition": "Thread ID of the thread", - "constants": "" + "property_doc_link": "common-pidcontext-tid-doc" }, { "name": "process.tty_name", - "type": "string", "definition": "Name of the TTY associated with the process", - "constants": "" + "property_doc_link": "common-process-tty_name-doc" }, { "name": "process.uid", - "type": "int", "definition": "UID of the process", - "constants": "" + "property_doc_link": "common-credentials-uid-doc" }, { "name": "process.user", - "type": "string", "definition": "User of the process", - "constants": "" + "property_doc_link": "common-credentials-user-doc" } ] }, @@ -1260,27 +1053,23 @@ "properties": [ { "name": "bind.addr.family", - "type": "int", "definition": "Address family", - "constants": "" + "property_doc_link": "bind-addr-family-doc" }, { "name": "bind.addr.ip", - "type": "IP/CIDR", "definition": "IP address", - "constants": "" + "property_doc_link": "common-ipportcontext-ip-doc" }, { "name": "bind.addr.port", - "type": "int", "definition": "Port number", - "constants": "" + "property_doc_link": "common-ipportcontext-port-doc" }, { "name": "bind.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" } ] }, @@ -1293,57 +1082,48 @@ "properties": [ { "name": "bpf.cmd", - "type": "int", "definition": "BPF command name", - "constants": "BPF commands" + "property_doc_link": "bpf-cmd-doc" }, { "name": "bpf.map.name", - "type": "string", "definition": "Name of the eBPF map (added in 7.35)", - "constants": "" + "property_doc_link": "bpf-map-name-doc" }, { "name": "bpf.map.type", - "type": "int", "definition": "Type of the eBPF map", - "constants": "BPF map types" + "property_doc_link": "bpf-map-type-doc" }, { "name": "bpf.prog.attach_type", - "type": "int", "definition": "Attach type of the eBPF program", - "constants": "BPF attach types" + "property_doc_link": "bpf-prog-attach_type-doc" }, { "name": "bpf.prog.helpers", - "type": "int", "definition": "eBPF helpers used by the eBPF program (added in 7.35)", - "constants": "BPF helper functions" + "property_doc_link": "bpf-prog-helpers-doc" }, { "name": "bpf.prog.name", - "type": "string", "definition": "Name of the eBPF program (added in 7.35)", - "constants": "" + "property_doc_link": "bpf-prog-name-doc" }, { "name": "bpf.prog.tag", - "type": "string", "definition": "Hash (sha1) of the eBPF program (added in 7.35)", - "constants": "" + "property_doc_link": "bpf-prog-tag-doc" }, { "name": "bpf.prog.type", - "type": "int", "definition": "Type of the eBPF program", - "constants": "BPF program types" + "property_doc_link": "bpf-prog-type-doc" }, { "name": "bpf.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" } ] }, @@ -1356,15 +1136,13 @@ "properties": [ { "name": "capset.cap_effective", - "type": "int", "definition": "Effective capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "capset-cap_effective-doc" }, { "name": "capset.cap_permitted", - "type": "int", "definition": "Permitted capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "capset-cap_permitted-doc" } ] }, @@ -1377,117 +1155,98 @@ "properties": [ { "name": "chmod.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "chmod.file.destination.mode", - "type": "int", - "definition": "New mode/rights of the chmod-ed file", - "constants": "Chmod mode constants" + "definition": "New mode of the chmod-ed file", + "property_doc_link": "chmod-file-destination-mode-doc" }, { "name": "chmod.file.destination.rights", - "type": "int", - "definition": "New mode/rights of the chmod-ed file", - "constants": "Chmod mode constants" + "definition": "New rights of the chmod-ed file", + "property_doc_link": "chmod-file-destination-rights-doc" }, { "name": "chmod.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "chmod.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "chmod.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "chmod.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "chmod.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "chmod.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "chmod.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "chmod.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "chmod.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "chmod.file.name.length", - "type": "int", - "definition": "Length of 'chmod.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "chmod.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "chmod.file.path.length", - "type": "int", - "definition": "Length of 'chmod.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "chmod.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "chmod.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "chmod.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "chmod.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" } ] }, @@ -1500,129 +1259,108 @@ "properties": [ { "name": "chown.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "chown.file.destination.gid", - "type": "int", "definition": "New GID of the chown-ed file's owner", - "constants": "" + "property_doc_link": "chown-file-destination-gid-doc" }, { "name": "chown.file.destination.group", - "type": "string", "definition": "New group of the chown-ed file's owner", - "constants": "" + "property_doc_link": "chown-file-destination-group-doc" }, { "name": "chown.file.destination.uid", - "type": "int", "definition": "New UID of the chown-ed file's owner", - "constants": "" + "property_doc_link": "chown-file-destination-uid-doc" }, { "name": "chown.file.destination.user", - "type": "string", "definition": "New user of the chown-ed file's owner", - "constants": "" + "property_doc_link": "chown-file-destination-user-doc" }, { "name": "chown.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "chown.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "chown.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "chown.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "chown.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "chown.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "chown.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "chown.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "chown.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "chown.file.name.length", - "type": "int", - "definition": "Length of 'chown.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "chown.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "chown.file.path.length", - "type": "int", - "definition": "Length of 'chown.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "chown.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "chown.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "chown.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "chown.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" } ] }, @@ -1635,45 +1373,38 @@ "properties": [ { "name": "dns.id", - "type": "int", "definition": "[Experimental] the DNS request ID", - "constants": "" + "property_doc_link": "dns-id-doc" }, { "name": "dns.question.class", - "type": "int", "definition": "the class looked up by the DNS question", - "constants": "DNS qclasses" + "property_doc_link": "dns-question-class-doc" }, { "name": "dns.question.count", - "type": "int", "definition": "the total count of questions in the DNS request", - "constants": "" + "property_doc_link": "dns-question-count-doc" }, { "name": "dns.question.length", - "type": "int", "definition": "the total DNS request size in bytes", - "constants": "" + "property_doc_link": "dns-question-length-doc" }, { "name": "dns.question.name", - "type": "string", "definition": "the queried domain name", - "constants": "" + "property_doc_link": "dns-question-name-doc" }, { "name": "dns.question.name.length", - "type": "int", - "definition": "the queried domain name", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "dns.question.type", - "type": "int", "definition": "a two octet code which specifies the DNS question type", - "constants": "DNS qtypes" + "property_doc_link": "dns-question-type-doc" } ] }, @@ -1686,393 +1417,328 @@ "properties": [ { "name": "exec.args", - "type": "string", - "definition": "Arguments of the process (as a string)", - "constants": "" + "definition": "Arguments of the process (as a string, excluding argv0)", + "property_doc_link": "common-process-args-doc" }, { "name": "exec.args_flags", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Flags in the process arguments", + "property_doc_link": "common-process-args_flags-doc" }, { "name": "exec.args_options", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Argument of the process as options", + "property_doc_link": "common-process-args_options-doc" }, { "name": "exec.args_truncated", - "type": "bool", "definition": "Indicator of arguments truncation", - "constants": "" + "property_doc_link": "common-process-args_truncated-doc" }, { "name": "exec.argv", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Arguments of the process (as an array, excluding argv0)", + "property_doc_link": "common-process-argv-doc" }, { "name": "exec.argv0", - "type": "string", "definition": "First argument of the process", - "constants": "" + "property_doc_link": "common-process-argv0-doc" }, { "name": "exec.cap_effective", - "type": "int", "definition": "Effective capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_effective-doc" }, { "name": "exec.cap_permitted", - "type": "int", "definition": "Permitted capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_permitted-doc" }, { "name": "exec.comm", - "type": "string", "definition": "Comm attribute of the process", - "constants": "" + "property_doc_link": "common-process-comm-doc" }, { "name": "exec.container.id", - "type": "string", "definition": "Container ID", - "constants": "" + "property_doc_link": "common-process-container-id-doc" }, { "name": "exec.cookie", - "type": "int", "definition": "Cookie of the process", - "constants": "" + "property_doc_link": "common-process-cookie-doc" }, { "name": "exec.created_at", - "type": "int", "definition": "Timestamp of the creation of the process", - "constants": "" + "property_doc_link": "common-process-created_at-doc" }, { "name": "exec.egid", - "type": "int", "definition": "Effective GID of the process", - "constants": "" + "property_doc_link": "common-credentials-egid-doc" }, { "name": "exec.egroup", - "type": "string", "definition": "Effective group of the process", - "constants": "" + "property_doc_link": "common-credentials-egroup-doc" }, { "name": "exec.envp", - "type": "string", "definition": "Environment variables of the process", - "constants": "" + "property_doc_link": "common-process-envp-doc" }, { "name": "exec.envs", - "type": "string", "definition": "Environment variable names of the process", - "constants": "" + "property_doc_link": "common-process-envs-doc" }, { "name": "exec.envs_truncated", - "type": "bool", "definition": "Indicator of environment variables truncation", - "constants": "" + "property_doc_link": "common-process-envs_truncated-doc" }, { "name": "exec.euid", - "type": "int", "definition": "Effective UID of the process", - "constants": "" + "property_doc_link": "common-credentials-euid-doc" }, { "name": "exec.euser", - "type": "string", "definition": "Effective user of the process", - "constants": "" + "property_doc_link": "common-credentials-euser-doc" }, { "name": "exec.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "exec.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "exec.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "exec.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "exec.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "exec.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "exec.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "exec.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "exec.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "exec.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "exec.file.name.length", - "type": "int", - "definition": "Length of 'exec.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "exec.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "exec.file.path.length", - "type": "int", - "definition": "Length of 'exec.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "exec.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "exec.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "exec.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "exec.fsgid", - "type": "int", "definition": "FileSystem-gid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgid-doc" }, { "name": "exec.fsgroup", - "type": "string", "definition": "FileSystem-group of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgroup-doc" }, { "name": "exec.fsuid", - "type": "int", "definition": "FileSystem-uid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuid-doc" }, { "name": "exec.fsuser", - "type": "string", "definition": "FileSystem-user of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuser-doc" }, { "name": "exec.gid", - "type": "int", "definition": "GID of the process", - "constants": "" + "property_doc_link": "common-credentials-gid-doc" }, { "name": "exec.group", - "type": "string", "definition": "Group of the process", - "constants": "" + "property_doc_link": "common-credentials-group-doc" }, { "name": "exec.interpreter.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "exec.interpreter.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "exec.interpreter.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "exec.interpreter.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "exec.interpreter.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "exec.interpreter.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "exec.interpreter.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "exec.interpreter.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "exec.interpreter.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "exec.interpreter.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "exec.interpreter.file.name.length", - "type": "int", - "definition": "Length of 'exec.interpreter.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "exec.interpreter.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "exec.interpreter.file.path.length", - "type": "int", - "definition": "Length of 'exec.interpreter.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "exec.interpreter.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "exec.interpreter.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "exec.interpreter.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "exec.is_kworker", - "type": "bool", "definition": "Indicates whether the process is a kworker", - "constants": "" + "property_doc_link": "common-pidcontext-is_kworker-doc" }, { "name": "exec.is_thread", - "type": "bool", "definition": "Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program)", - "constants": "" + "property_doc_link": "common-process-is_thread-doc" }, { "name": "exec.pid", - "type": "int", "definition": "Process ID of the process (also called thread group ID)", - "constants": "" + "property_doc_link": "common-pidcontext-pid-doc" }, { "name": "exec.ppid", - "type": "int", "definition": "Parent process ID", - "constants": "" + "property_doc_link": "common-process-ppid-doc" }, { "name": "exec.tid", - "type": "int", "definition": "Thread ID of the thread", - "constants": "" + "property_doc_link": "common-pidcontext-tid-doc" }, { "name": "exec.tty_name", - "type": "string", "definition": "Name of the TTY associated with the process", - "constants": "" + "property_doc_link": "common-process-tty_name-doc" }, { "name": "exec.uid", - "type": "int", "definition": "UID of the process", - "constants": "" + "property_doc_link": "common-credentials-uid-doc" }, { "name": "exec.user", - "type": "string", "definition": "User of the process", - "constants": "" + "property_doc_link": "common-credentials-user-doc" } ] }, @@ -2085,405 +1751,338 @@ "properties": [ { "name": "exit.args", - "type": "string", - "definition": "Arguments of the process (as a string)", - "constants": "" + "definition": "Arguments of the process (as a string, excluding argv0)", + "property_doc_link": "common-process-args-doc" }, { "name": "exit.args_flags", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Flags in the process arguments", + "property_doc_link": "common-process-args_flags-doc" }, { "name": "exit.args_options", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Argument of the process as options", + "property_doc_link": "common-process-args_options-doc" }, { "name": "exit.args_truncated", - "type": "bool", "definition": "Indicator of arguments truncation", - "constants": "" + "property_doc_link": "common-process-args_truncated-doc" }, { "name": "exit.argv", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Arguments of the process (as an array, excluding argv0)", + "property_doc_link": "common-process-argv-doc" }, { "name": "exit.argv0", - "type": "string", "definition": "First argument of the process", - "constants": "" + "property_doc_link": "common-process-argv0-doc" }, { "name": "exit.cap_effective", - "type": "int", "definition": "Effective capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_effective-doc" }, { "name": "exit.cap_permitted", - "type": "int", "definition": "Permitted capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_permitted-doc" }, { "name": "exit.cause", - "type": "int", "definition": "Cause of the process termination (one of EXITED, SIGNALED, COREDUMPED)", - "constants": "" + "property_doc_link": "exit-cause-doc" }, { "name": "exit.code", - "type": "int", "definition": "Exit code of the process or number of the signal that caused the process to terminate", - "constants": "" + "property_doc_link": "exit-code-doc" }, { "name": "exit.comm", - "type": "string", "definition": "Comm attribute of the process", - "constants": "" + "property_doc_link": "common-process-comm-doc" }, { "name": "exit.container.id", - "type": "string", "definition": "Container ID", - "constants": "" + "property_doc_link": "common-process-container-id-doc" }, { "name": "exit.cookie", - "type": "int", "definition": "Cookie of the process", - "constants": "" + "property_doc_link": "common-process-cookie-doc" }, { "name": "exit.created_at", - "type": "int", "definition": "Timestamp of the creation of the process", - "constants": "" + "property_doc_link": "common-process-created_at-doc" }, { "name": "exit.egid", - "type": "int", "definition": "Effective GID of the process", - "constants": "" + "property_doc_link": "common-credentials-egid-doc" }, { "name": "exit.egroup", - "type": "string", "definition": "Effective group of the process", - "constants": "" + "property_doc_link": "common-credentials-egroup-doc" }, { "name": "exit.envp", - "type": "string", "definition": "Environment variables of the process", - "constants": "" + "property_doc_link": "common-process-envp-doc" }, { "name": "exit.envs", - "type": "string", "definition": "Environment variable names of the process", - "constants": "" + "property_doc_link": "common-process-envs-doc" }, { "name": "exit.envs_truncated", - "type": "bool", "definition": "Indicator of environment variables truncation", - "constants": "" + "property_doc_link": "common-process-envs_truncated-doc" }, { "name": "exit.euid", - "type": "int", "definition": "Effective UID of the process", - "constants": "" + "property_doc_link": "common-credentials-euid-doc" }, { "name": "exit.euser", - "type": "string", "definition": "Effective user of the process", - "constants": "" + "property_doc_link": "common-credentials-euser-doc" }, { "name": "exit.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "exit.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "exit.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "exit.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "exit.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "exit.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "exit.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "exit.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "exit.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "exit.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "exit.file.name.length", - "type": "int", - "definition": "Length of 'exit.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "exit.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "exit.file.path.length", - "type": "int", - "definition": "Length of 'exit.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "exit.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "exit.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "exit.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "exit.fsgid", - "type": "int", "definition": "FileSystem-gid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgid-doc" }, { "name": "exit.fsgroup", - "type": "string", "definition": "FileSystem-group of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgroup-doc" }, { "name": "exit.fsuid", - "type": "int", "definition": "FileSystem-uid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuid-doc" }, { "name": "exit.fsuser", - "type": "string", "definition": "FileSystem-user of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuser-doc" }, { "name": "exit.gid", - "type": "int", "definition": "GID of the process", - "constants": "" + "property_doc_link": "common-credentials-gid-doc" }, { "name": "exit.group", - "type": "string", "definition": "Group of the process", - "constants": "" + "property_doc_link": "common-credentials-group-doc" }, { "name": "exit.interpreter.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "exit.interpreter.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "exit.interpreter.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "exit.interpreter.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "exit.interpreter.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "exit.interpreter.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "exit.interpreter.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "exit.interpreter.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "exit.interpreter.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "exit.interpreter.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "exit.interpreter.file.name.length", - "type": "int", - "definition": "Length of 'exit.interpreter.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "exit.interpreter.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "exit.interpreter.file.path.length", - "type": "int", - "definition": "Length of 'exit.interpreter.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "exit.interpreter.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "exit.interpreter.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "exit.interpreter.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "exit.is_kworker", - "type": "bool", "definition": "Indicates whether the process is a kworker", - "constants": "" + "property_doc_link": "common-pidcontext-is_kworker-doc" }, { "name": "exit.is_thread", - "type": "bool", "definition": "Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program)", - "constants": "" + "property_doc_link": "common-process-is_thread-doc" }, { "name": "exit.pid", - "type": "int", "definition": "Process ID of the process (also called thread group ID)", - "constants": "" + "property_doc_link": "common-pidcontext-pid-doc" }, { "name": "exit.ppid", - "type": "int", "definition": "Parent process ID", - "constants": "" + "property_doc_link": "common-process-ppid-doc" }, { "name": "exit.tid", - "type": "int", "definition": "Thread ID of the thread", - "constants": "" + "property_doc_link": "common-pidcontext-tid-doc" }, { "name": "exit.tty_name", - "type": "string", "definition": "Name of the TTY associated with the process", - "constants": "" + "property_doc_link": "common-process-tty_name-doc" }, { "name": "exit.uid", - "type": "int", "definition": "UID of the process", - "constants": "" + "property_doc_link": "common-credentials-uid-doc" }, { "name": "exit.user", - "type": "string", "definition": "User of the process", - "constants": "" + "property_doc_link": "common-credentials-user-doc" } ] }, @@ -2496,201 +2095,168 @@ "properties": [ { "name": "link.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "link.file.destination.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "link.file.destination.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "link.file.destination.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "link.file.destination.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "link.file.destination.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "link.file.destination.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "link.file.destination.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "link.file.destination.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "link.file.destination.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "link.file.destination.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "link.file.destination.name.length", - "type": "int", - "definition": "Length of 'link.file.destination.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "link.file.destination.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "link.file.destination.path.length", - "type": "int", - "definition": "Length of 'link.file.destination.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "link.file.destination.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "link.file.destination.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "link.file.destination.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "link.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "link.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "link.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "link.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "link.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "link.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "link.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "link.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "link.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "link.file.name.length", - "type": "int", - "definition": "Length of 'link.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "link.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "link.file.path.length", - "type": "int", - "definition": "Length of 'link.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "link.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "link.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "link.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "link.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" } ] }, @@ -2703,117 +2269,98 @@ "properties": [ { "name": "load_module.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "load_module.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "load_module.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "load_module.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "load_module.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "load_module.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "load_module.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "load_module.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "load_module.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "load_module.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "load_module.file.name.length", - "type": "int", - "definition": "Length of 'load_module.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "load_module.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "load_module.file.path.length", - "type": "int", - "definition": "Length of 'load_module.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "load_module.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "load_module.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "load_module.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "load_module.loaded_from_memory", - "type": "bool", "definition": "Indicates if the kernel module was loaded from memory", - "constants": "" + "property_doc_link": "load_module-loaded_from_memory-doc" }, { "name": "load_module.name", - "type": "string", "definition": "Name of the new kernel module", - "constants": "" + "property_doc_link": "load_module-name-doc" }, { "name": "load_module.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" } ] }, @@ -2826,117 +2373,98 @@ "properties": [ { "name": "mkdir.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "mkdir.file.destination.mode", - "type": "int", - "definition": "Mode/rights of the new directory", - "constants": "Chmod mode constants" + "definition": "Mode of the new directory", + "property_doc_link": "mkdir-file-destination-mode-doc" }, { "name": "mkdir.file.destination.rights", - "type": "int", - "definition": "Mode/rights of the new directory", - "constants": "Chmod mode constants" + "definition": "Rights of the new directory", + "property_doc_link": "mkdir-file-destination-rights-doc" }, { "name": "mkdir.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "mkdir.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "mkdir.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "mkdir.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "mkdir.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "mkdir.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "mkdir.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "mkdir.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "mkdir.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "mkdir.file.name.length", - "type": "int", - "definition": "Length of 'mkdir.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "mkdir.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "mkdir.file.path.length", - "type": "int", - "definition": "Length of 'mkdir.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "mkdir.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "mkdir.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "mkdir.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "mkdir.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" } ] }, @@ -2949,117 +2477,98 @@ "properties": [ { "name": "mmap.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "mmap.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "mmap.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "mmap.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "mmap.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "mmap.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "mmap.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "mmap.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "mmap.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "mmap.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "mmap.file.name.length", - "type": "int", - "definition": "Length of 'mmap.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "mmap.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "mmap.file.path.length", - "type": "int", - "definition": "Length of 'mmap.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "mmap.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "mmap.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "mmap.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "mmap.flags", - "type": "int", "definition": "memory segment flags", - "constants": "MMap flags" + "property_doc_link": "mmap-flags-doc" }, { "name": "mmap.protection", - "type": "int", "definition": "memory segment protection", - "constants": "Protection constants" + "property_doc_link": "mmap-protection-doc" }, { "name": "mmap.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" } ] }, @@ -3072,27 +2581,23 @@ "properties": [ { "name": "mount.fs_type", - "type": "string", "definition": "Type of the mounted file system", - "constants": "" + "property_doc_link": "mount-fs_type-doc" }, { "name": "mount.mountpoint.path", - "type": "string", "definition": "Path of the mount point", - "constants": "" + "property_doc_link": "mount-mountpoint-path-doc" }, { "name": "mount.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" }, { "name": "mount.source.path", - "type": "string", "definition": "Source path of a bind mount", - "constants": "" + "property_doc_link": "mount-source-path-doc" } ] }, @@ -3105,21 +2610,18 @@ "properties": [ { "name": "mprotect.req_protection", - "type": "int", "definition": "new memory segment protection", - "constants": "Virtual Memory flags" + "property_doc_link": "mprotect-req_protection-doc" }, { "name": "mprotect.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" }, { "name": "mprotect.vm_protection", - "type": "int", "definition": "initial memory segment protection", - "constants": "Virtual Memory flags" + "property_doc_link": "mprotect-vm_protection-doc" } ] }, @@ -3132,117 +2634,98 @@ "properties": [ { "name": "open.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "open.file.destination.mode", - "type": "int", "definition": "Mode of the created file", - "constants": "Chmod mode constants" + "property_doc_link": "open-file-destination-mode-doc" }, { "name": "open.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "open.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "open.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "open.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "open.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "open.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "open.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "open.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "open.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "open.file.name.length", - "type": "int", - "definition": "Length of 'open.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "open.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "open.file.path.length", - "type": "int", - "definition": "Length of 'open.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "open.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "open.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "open.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "open.flags", - "type": "int", "definition": "Flags used when opening the file", - "constants": "Open flags" + "property_doc_link": "open-flags-doc" }, { "name": "open.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" } ] }, @@ -3255,1185 +2738,988 @@ "properties": [ { "name": "ptrace.request", - "type": "int", "definition": "ptrace request", - "constants": "Ptrace constants" + "property_doc_link": "ptrace-request-doc" }, { "name": "ptrace.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" }, { "name": "ptrace.tracee.ancestors.args", - "type": "string", - "definition": "Arguments of the process (as a string)", - "constants": "" + "definition": "Arguments of the process (as a string, excluding argv0)", + "property_doc_link": "common-process-args-doc" }, { "name": "ptrace.tracee.ancestors.args_flags", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Flags in the process arguments", + "property_doc_link": "common-process-args_flags-doc" }, { "name": "ptrace.tracee.ancestors.args_options", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Argument of the process as options", + "property_doc_link": "common-process-args_options-doc" }, { "name": "ptrace.tracee.ancestors.args_truncated", - "type": "bool", "definition": "Indicator of arguments truncation", - "constants": "" + "property_doc_link": "common-process-args_truncated-doc" }, { "name": "ptrace.tracee.ancestors.argv", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Arguments of the process (as an array, excluding argv0)", + "property_doc_link": "common-process-argv-doc" }, { "name": "ptrace.tracee.ancestors.argv0", - "type": "string", "definition": "First argument of the process", - "constants": "" + "property_doc_link": "common-process-argv0-doc" }, { "name": "ptrace.tracee.ancestors.cap_effective", - "type": "int", "definition": "Effective capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_effective-doc" }, { "name": "ptrace.tracee.ancestors.cap_permitted", - "type": "int", "definition": "Permitted capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_permitted-doc" }, { "name": "ptrace.tracee.ancestors.comm", - "type": "string", "definition": "Comm attribute of the process", - "constants": "" + "property_doc_link": "common-process-comm-doc" }, { "name": "ptrace.tracee.ancestors.container.id", - "type": "string", "definition": "Container ID", - "constants": "" + "property_doc_link": "common-process-container-id-doc" }, { "name": "ptrace.tracee.ancestors.cookie", - "type": "int", "definition": "Cookie of the process", - "constants": "" + "property_doc_link": "common-process-cookie-doc" }, { "name": "ptrace.tracee.ancestors.created_at", - "type": "int", "definition": "Timestamp of the creation of the process", - "constants": "" + "property_doc_link": "common-process-created_at-doc" }, { "name": "ptrace.tracee.ancestors.egid", - "type": "int", "definition": "Effective GID of the process", - "constants": "" + "property_doc_link": "common-credentials-egid-doc" }, { "name": "ptrace.tracee.ancestors.egroup", - "type": "string", "definition": "Effective group of the process", - "constants": "" + "property_doc_link": "common-credentials-egroup-doc" }, { "name": "ptrace.tracee.ancestors.envp", - "type": "string", "definition": "Environment variables of the process", - "constants": "" + "property_doc_link": "common-process-envp-doc" }, { "name": "ptrace.tracee.ancestors.envs", - "type": "string", "definition": "Environment variable names of the process", - "constants": "" + "property_doc_link": "common-process-envs-doc" }, { "name": "ptrace.tracee.ancestors.envs_truncated", - "type": "bool", "definition": "Indicator of environment variables truncation", - "constants": "" + "property_doc_link": "common-process-envs_truncated-doc" }, { "name": "ptrace.tracee.ancestors.euid", - "type": "int", "definition": "Effective UID of the process", - "constants": "" + "property_doc_link": "common-credentials-euid-doc" }, { "name": "ptrace.tracee.ancestors.euser", - "type": "string", "definition": "Effective user of the process", - "constants": "" + "property_doc_link": "common-credentials-euser-doc" }, { "name": "ptrace.tracee.ancestors.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "ptrace.tracee.ancestors.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "ptrace.tracee.ancestors.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "ptrace.tracee.ancestors.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "ptrace.tracee.ancestors.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "ptrace.tracee.ancestors.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "ptrace.tracee.ancestors.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "ptrace.tracee.ancestors.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "ptrace.tracee.ancestors.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "ptrace.tracee.ancestors.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "ptrace.tracee.ancestors.file.name.length", - "type": "int", - "definition": "Length of 'ptrace.tracee.ancestors.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "ptrace.tracee.ancestors.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "ptrace.tracee.ancestors.file.path.length", - "type": "int", - "definition": "Length of 'ptrace.tracee.ancestors.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "ptrace.tracee.ancestors.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "ptrace.tracee.ancestors.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "ptrace.tracee.ancestors.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "ptrace.tracee.ancestors.fsgid", - "type": "int", "definition": "FileSystem-gid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgid-doc" }, { "name": "ptrace.tracee.ancestors.fsgroup", - "type": "string", "definition": "FileSystem-group of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgroup-doc" }, { "name": "ptrace.tracee.ancestors.fsuid", - "type": "int", "definition": "FileSystem-uid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuid-doc" }, { "name": "ptrace.tracee.ancestors.fsuser", - "type": "string", "definition": "FileSystem-user of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuser-doc" }, { "name": "ptrace.tracee.ancestors.gid", - "type": "int", "definition": "GID of the process", - "constants": "" + "property_doc_link": "common-credentials-gid-doc" }, { "name": "ptrace.tracee.ancestors.group", - "type": "string", "definition": "Group of the process", - "constants": "" + "property_doc_link": "common-credentials-group-doc" }, { "name": "ptrace.tracee.ancestors.interpreter.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "ptrace.tracee.ancestors.interpreter.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "ptrace.tracee.ancestors.interpreter.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "ptrace.tracee.ancestors.interpreter.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "ptrace.tracee.ancestors.interpreter.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "ptrace.tracee.ancestors.interpreter.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "ptrace.tracee.ancestors.interpreter.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "ptrace.tracee.ancestors.interpreter.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "ptrace.tracee.ancestors.interpreter.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "ptrace.tracee.ancestors.interpreter.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "ptrace.tracee.ancestors.interpreter.file.name.length", - "type": "int", - "definition": "Length of 'ptrace.tracee.ancestors.interpreter.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "ptrace.tracee.ancestors.interpreter.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "ptrace.tracee.ancestors.interpreter.file.path.length", - "type": "int", - "definition": "Length of 'ptrace.tracee.ancestors.interpreter.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "ptrace.tracee.ancestors.interpreter.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "ptrace.tracee.ancestors.interpreter.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "ptrace.tracee.ancestors.interpreter.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "ptrace.tracee.ancestors.is_kworker", - "type": "bool", "definition": "Indicates whether the process is a kworker", - "constants": "" + "property_doc_link": "common-pidcontext-is_kworker-doc" }, { "name": "ptrace.tracee.ancestors.is_thread", - "type": "bool", "definition": "Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program)", - "constants": "" + "property_doc_link": "common-process-is_thread-doc" }, { "name": "ptrace.tracee.ancestors.pid", - "type": "int", "definition": "Process ID of the process (also called thread group ID)", - "constants": "" + "property_doc_link": "common-pidcontext-pid-doc" }, { "name": "ptrace.tracee.ancestors.ppid", - "type": "int", "definition": "Parent process ID", - "constants": "" + "property_doc_link": "common-process-ppid-doc" }, { "name": "ptrace.tracee.ancestors.tid", - "type": "int", "definition": "Thread ID of the thread", - "constants": "" + "property_doc_link": "common-pidcontext-tid-doc" }, { "name": "ptrace.tracee.ancestors.tty_name", - "type": "string", "definition": "Name of the TTY associated with the process", - "constants": "" + "property_doc_link": "common-process-tty_name-doc" }, { "name": "ptrace.tracee.ancestors.uid", - "type": "int", "definition": "UID of the process", - "constants": "" + "property_doc_link": "common-credentials-uid-doc" }, { "name": "ptrace.tracee.ancestors.user", - "type": "string", "definition": "User of the process", - "constants": "" + "property_doc_link": "common-credentials-user-doc" }, { "name": "ptrace.tracee.args", - "type": "string", - "definition": "Arguments of the process (as a string)", - "constants": "" + "definition": "Arguments of the process (as a string, excluding argv0)", + "property_doc_link": "common-process-args-doc" }, { "name": "ptrace.tracee.args_flags", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Flags in the process arguments", + "property_doc_link": "common-process-args_flags-doc" }, { "name": "ptrace.tracee.args_options", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Argument of the process as options", + "property_doc_link": "common-process-args_options-doc" }, { "name": "ptrace.tracee.args_truncated", - "type": "bool", "definition": "Indicator of arguments truncation", - "constants": "" + "property_doc_link": "common-process-args_truncated-doc" }, { "name": "ptrace.tracee.argv", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Arguments of the process (as an array, excluding argv0)", + "property_doc_link": "common-process-argv-doc" }, { "name": "ptrace.tracee.argv0", - "type": "string", "definition": "First argument of the process", - "constants": "" + "property_doc_link": "common-process-argv0-doc" }, { "name": "ptrace.tracee.cap_effective", - "type": "int", "definition": "Effective capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_effective-doc" }, { "name": "ptrace.tracee.cap_permitted", - "type": "int", "definition": "Permitted capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_permitted-doc" }, { "name": "ptrace.tracee.comm", - "type": "string", "definition": "Comm attribute of the process", - "constants": "" + "property_doc_link": "common-process-comm-doc" }, { "name": "ptrace.tracee.container.id", - "type": "string", "definition": "Container ID", - "constants": "" + "property_doc_link": "common-process-container-id-doc" }, { "name": "ptrace.tracee.cookie", - "type": "int", "definition": "Cookie of the process", - "constants": "" + "property_doc_link": "common-process-cookie-doc" }, { "name": "ptrace.tracee.created_at", - "type": "int", "definition": "Timestamp of the creation of the process", - "constants": "" + "property_doc_link": "common-process-created_at-doc" }, { "name": "ptrace.tracee.egid", - "type": "int", "definition": "Effective GID of the process", - "constants": "" + "property_doc_link": "common-credentials-egid-doc" }, { "name": "ptrace.tracee.egroup", - "type": "string", "definition": "Effective group of the process", - "constants": "" + "property_doc_link": "common-credentials-egroup-doc" }, { "name": "ptrace.tracee.envp", - "type": "string", "definition": "Environment variables of the process", - "constants": "" + "property_doc_link": "common-process-envp-doc" }, { "name": "ptrace.tracee.envs", - "type": "string", "definition": "Environment variable names of the process", - "constants": "" + "property_doc_link": "common-process-envs-doc" }, { "name": "ptrace.tracee.envs_truncated", - "type": "bool", "definition": "Indicator of environment variables truncation", - "constants": "" + "property_doc_link": "common-process-envs_truncated-doc" }, { "name": "ptrace.tracee.euid", - "type": "int", "definition": "Effective UID of the process", - "constants": "" + "property_doc_link": "common-credentials-euid-doc" }, { "name": "ptrace.tracee.euser", - "type": "string", "definition": "Effective user of the process", - "constants": "" + "property_doc_link": "common-credentials-euser-doc" }, { "name": "ptrace.tracee.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "ptrace.tracee.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "ptrace.tracee.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "ptrace.tracee.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "ptrace.tracee.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "ptrace.tracee.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "ptrace.tracee.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "ptrace.tracee.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "ptrace.tracee.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "ptrace.tracee.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "ptrace.tracee.file.name.length", - "type": "int", - "definition": "Length of 'ptrace.tracee.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "ptrace.tracee.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "ptrace.tracee.file.path.length", - "type": "int", - "definition": "Length of 'ptrace.tracee.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "ptrace.tracee.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "ptrace.tracee.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "ptrace.tracee.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "ptrace.tracee.fsgid", - "type": "int", "definition": "FileSystem-gid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgid-doc" }, { "name": "ptrace.tracee.fsgroup", - "type": "string", "definition": "FileSystem-group of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgroup-doc" }, { "name": "ptrace.tracee.fsuid", - "type": "int", "definition": "FileSystem-uid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuid-doc" }, { "name": "ptrace.tracee.fsuser", - "type": "string", "definition": "FileSystem-user of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuser-doc" }, { "name": "ptrace.tracee.gid", - "type": "int", "definition": "GID of the process", - "constants": "" + "property_doc_link": "common-credentials-gid-doc" }, { "name": "ptrace.tracee.group", - "type": "string", "definition": "Group of the process", - "constants": "" + "property_doc_link": "common-credentials-group-doc" }, { "name": "ptrace.tracee.interpreter.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "ptrace.tracee.interpreter.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "ptrace.tracee.interpreter.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "ptrace.tracee.interpreter.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "ptrace.tracee.interpreter.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "ptrace.tracee.interpreter.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "ptrace.tracee.interpreter.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "ptrace.tracee.interpreter.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "ptrace.tracee.interpreter.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "ptrace.tracee.interpreter.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "ptrace.tracee.interpreter.file.name.length", - "type": "int", - "definition": "Length of 'ptrace.tracee.interpreter.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "ptrace.tracee.interpreter.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "ptrace.tracee.interpreter.file.path.length", - "type": "int", - "definition": "Length of 'ptrace.tracee.interpreter.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "ptrace.tracee.interpreter.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "ptrace.tracee.interpreter.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "ptrace.tracee.interpreter.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "ptrace.tracee.is_kworker", - "type": "bool", "definition": "Indicates whether the process is a kworker", - "constants": "" + "property_doc_link": "common-pidcontext-is_kworker-doc" }, { "name": "ptrace.tracee.is_thread", - "type": "bool", "definition": "Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program)", - "constants": "" + "property_doc_link": "common-process-is_thread-doc" }, { "name": "ptrace.tracee.parent.args", - "type": "string", - "definition": "Arguments of the process (as a string)", - "constants": "" + "definition": "Arguments of the process (as a string, excluding argv0)", + "property_doc_link": "common-process-args-doc" }, { "name": "ptrace.tracee.parent.args_flags", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Flags in the process arguments", + "property_doc_link": "common-process-args_flags-doc" }, { "name": "ptrace.tracee.parent.args_options", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Argument of the process as options", + "property_doc_link": "common-process-args_options-doc" }, { "name": "ptrace.tracee.parent.args_truncated", - "type": "bool", "definition": "Indicator of arguments truncation", - "constants": "" + "property_doc_link": "common-process-args_truncated-doc" }, { "name": "ptrace.tracee.parent.argv", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Arguments of the process (as an array, excluding argv0)", + "property_doc_link": "common-process-argv-doc" }, { "name": "ptrace.tracee.parent.argv0", - "type": "string", "definition": "First argument of the process", - "constants": "" + "property_doc_link": "common-process-argv0-doc" }, { "name": "ptrace.tracee.parent.cap_effective", - "type": "int", "definition": "Effective capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_effective-doc" }, { "name": "ptrace.tracee.parent.cap_permitted", - "type": "int", "definition": "Permitted capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_permitted-doc" }, { "name": "ptrace.tracee.parent.comm", - "type": "string", "definition": "Comm attribute of the process", - "constants": "" + "property_doc_link": "common-process-comm-doc" }, { "name": "ptrace.tracee.parent.container.id", - "type": "string", "definition": "Container ID", - "constants": "" + "property_doc_link": "common-process-container-id-doc" }, { "name": "ptrace.tracee.parent.cookie", - "type": "int", "definition": "Cookie of the process", - "constants": "" + "property_doc_link": "common-process-cookie-doc" }, { "name": "ptrace.tracee.parent.created_at", - "type": "int", "definition": "Timestamp of the creation of the process", - "constants": "" + "property_doc_link": "common-process-created_at-doc" }, { "name": "ptrace.tracee.parent.egid", - "type": "int", "definition": "Effective GID of the process", - "constants": "" + "property_doc_link": "common-credentials-egid-doc" }, { "name": "ptrace.tracee.parent.egroup", - "type": "string", "definition": "Effective group of the process", - "constants": "" + "property_doc_link": "common-credentials-egroup-doc" }, { "name": "ptrace.tracee.parent.envp", - "type": "string", "definition": "Environment variables of the process", - "constants": "" + "property_doc_link": "common-process-envp-doc" }, { "name": "ptrace.tracee.parent.envs", - "type": "string", "definition": "Environment variable names of the process", - "constants": "" + "property_doc_link": "common-process-envs-doc" }, { "name": "ptrace.tracee.parent.envs_truncated", - "type": "bool", "definition": "Indicator of environment variables truncation", - "constants": "" + "property_doc_link": "common-process-envs_truncated-doc" }, { "name": "ptrace.tracee.parent.euid", - "type": "int", "definition": "Effective UID of the process", - "constants": "" + "property_doc_link": "common-credentials-euid-doc" }, { "name": "ptrace.tracee.parent.euser", - "type": "string", "definition": "Effective user of the process", - "constants": "" + "property_doc_link": "common-credentials-euser-doc" }, { "name": "ptrace.tracee.parent.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "ptrace.tracee.parent.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "ptrace.tracee.parent.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "ptrace.tracee.parent.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "ptrace.tracee.parent.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "ptrace.tracee.parent.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "ptrace.tracee.parent.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "ptrace.tracee.parent.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "ptrace.tracee.parent.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "ptrace.tracee.parent.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "ptrace.tracee.parent.file.name.length", - "type": "int", - "definition": "Length of 'ptrace.tracee.parent.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "ptrace.tracee.parent.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "ptrace.tracee.parent.file.path.length", - "type": "int", - "definition": "Length of 'ptrace.tracee.parent.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "ptrace.tracee.parent.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "ptrace.tracee.parent.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "ptrace.tracee.parent.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "ptrace.tracee.parent.fsgid", - "type": "int", "definition": "FileSystem-gid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgid-doc" }, { "name": "ptrace.tracee.parent.fsgroup", - "type": "string", "definition": "FileSystem-group of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgroup-doc" }, { "name": "ptrace.tracee.parent.fsuid", - "type": "int", "definition": "FileSystem-uid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuid-doc" }, { "name": "ptrace.tracee.parent.fsuser", - "type": "string", "definition": "FileSystem-user of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuser-doc" }, { "name": "ptrace.tracee.parent.gid", - "type": "int", "definition": "GID of the process", - "constants": "" + "property_doc_link": "common-credentials-gid-doc" }, { "name": "ptrace.tracee.parent.group", - "type": "string", "definition": "Group of the process", - "constants": "" + "property_doc_link": "common-credentials-group-doc" }, { "name": "ptrace.tracee.parent.interpreter.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "ptrace.tracee.parent.interpreter.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "ptrace.tracee.parent.interpreter.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "ptrace.tracee.parent.interpreter.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "ptrace.tracee.parent.interpreter.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "ptrace.tracee.parent.interpreter.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "ptrace.tracee.parent.interpreter.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "ptrace.tracee.parent.interpreter.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "ptrace.tracee.parent.interpreter.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "ptrace.tracee.parent.interpreter.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "ptrace.tracee.parent.interpreter.file.name.length", - "type": "int", - "definition": "Length of 'ptrace.tracee.parent.interpreter.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "ptrace.tracee.parent.interpreter.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "ptrace.tracee.parent.interpreter.file.path.length", - "type": "int", - "definition": "Length of 'ptrace.tracee.parent.interpreter.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "ptrace.tracee.parent.interpreter.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "ptrace.tracee.parent.interpreter.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "ptrace.tracee.parent.interpreter.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "ptrace.tracee.parent.is_kworker", - "type": "bool", "definition": "Indicates whether the process is a kworker", - "constants": "" + "property_doc_link": "common-pidcontext-is_kworker-doc" }, { "name": "ptrace.tracee.parent.is_thread", - "type": "bool", "definition": "Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program)", - "constants": "" + "property_doc_link": "common-process-is_thread-doc" }, { "name": "ptrace.tracee.parent.pid", - "type": "int", "definition": "Process ID of the process (also called thread group ID)", - "constants": "" + "property_doc_link": "common-pidcontext-pid-doc" }, { "name": "ptrace.tracee.parent.ppid", - "type": "int", "definition": "Parent process ID", - "constants": "" + "property_doc_link": "common-process-ppid-doc" }, { "name": "ptrace.tracee.parent.tid", - "type": "int", "definition": "Thread ID of the thread", - "constants": "" + "property_doc_link": "common-pidcontext-tid-doc" }, { "name": "ptrace.tracee.parent.tty_name", - "type": "string", "definition": "Name of the TTY associated with the process", - "constants": "" + "property_doc_link": "common-process-tty_name-doc" }, { "name": "ptrace.tracee.parent.uid", - "type": "int", "definition": "UID of the process", - "constants": "" + "property_doc_link": "common-credentials-uid-doc" }, { "name": "ptrace.tracee.parent.user", - "type": "string", "definition": "User of the process", - "constants": "" + "property_doc_link": "common-credentials-user-doc" }, { "name": "ptrace.tracee.pid", - "type": "int", "definition": "Process ID of the process (also called thread group ID)", - "constants": "" + "property_doc_link": "common-pidcontext-pid-doc" }, { "name": "ptrace.tracee.ppid", - "type": "int", "definition": "Parent process ID", - "constants": "" + "property_doc_link": "common-process-ppid-doc" }, { "name": "ptrace.tracee.tid", - "type": "int", "definition": "Thread ID of the thread", - "constants": "" + "property_doc_link": "common-pidcontext-tid-doc" }, { "name": "ptrace.tracee.tty_name", - "type": "string", "definition": "Name of the TTY associated with the process", - "constants": "" + "property_doc_link": "common-process-tty_name-doc" }, { "name": "ptrace.tracee.uid", - "type": "int", "definition": "UID of the process", - "constants": "" + "property_doc_link": "common-credentials-uid-doc" }, { "name": "ptrace.tracee.user", - "type": "string", "definition": "User of the process", - "constants": "" + "property_doc_link": "common-credentials-user-doc" } ] }, @@ -4446,117 +3732,98 @@ "properties": [ { "name": "removexattr.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "removexattr.file.destination.name", - "type": "string", "definition": "Name of the extended attribute", - "constants": "" + "property_doc_link": "common-setxattrevent-file-destination-name-doc" }, { "name": "removexattr.file.destination.namespace", - "type": "string", "definition": "Namespace of the extended attribute", - "constants": "" + "property_doc_link": "common-setxattrevent-file-destination-namespace-doc" }, { "name": "removexattr.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "removexattr.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "removexattr.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "removexattr.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "removexattr.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "removexattr.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "removexattr.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "removexattr.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "removexattr.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "removexattr.file.name.length", - "type": "int", - "definition": "Length of 'removexattr.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "removexattr.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "removexattr.file.path.length", - "type": "int", - "definition": "Length of 'removexattr.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "removexattr.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "removexattr.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "removexattr.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "removexattr.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" } ] }, @@ -4569,201 +3836,168 @@ "properties": [ { "name": "rename.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "rename.file.destination.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "rename.file.destination.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "rename.file.destination.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "rename.file.destination.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "rename.file.destination.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "rename.file.destination.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "rename.file.destination.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "rename.file.destination.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "rename.file.destination.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "rename.file.destination.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "rename.file.destination.name.length", - "type": "int", - "definition": "Length of 'rename.file.destination.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "rename.file.destination.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "rename.file.destination.path.length", - "type": "int", - "definition": "Length of 'rename.file.destination.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "rename.file.destination.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "rename.file.destination.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "rename.file.destination.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "rename.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "rename.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "rename.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "rename.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "rename.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "rename.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "rename.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "rename.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "rename.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "rename.file.name.length", - "type": "int", - "definition": "Length of 'rename.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "rename.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "rename.file.path.length", - "type": "int", - "definition": "Length of 'rename.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "rename.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "rename.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "rename.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "rename.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" } ] }, @@ -4776,105 +4010,88 @@ "properties": [ { "name": "rmdir.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "rmdir.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "rmdir.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "rmdir.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "rmdir.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "rmdir.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "rmdir.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "rmdir.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "rmdir.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "rmdir.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "rmdir.file.name.length", - "type": "int", - "definition": "Length of 'rmdir.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "rmdir.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "rmdir.file.path.length", - "type": "int", - "definition": "Length of 'rmdir.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "rmdir.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "rmdir.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "rmdir.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "rmdir.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" } ] }, @@ -4887,27 +4104,23 @@ "properties": [ { "name": "selinux.bool.name", - "type": "string", "definition": "SELinux boolean name", - "constants": "" + "property_doc_link": "selinux-bool-name-doc" }, { "name": "selinux.bool.state", - "type": "string", "definition": "SELinux boolean new value", - "constants": "" + "property_doc_link": "selinux-bool-state-doc" }, { "name": "selinux.bool_commit.state", - "type": "bool", "definition": "Indicator of a SELinux boolean commit operation", - "constants": "" + "property_doc_link": "selinux-bool_commit-state-doc" }, { "name": "selinux.enforce.status", - "type": "string", - "definition": "SELinux enforcement status (one of \"enforcing\", \"permissive\", \"disabled\"\")", - "constants": "" + "definition": "SELinux enforcement status (one of \"enforcing\", \"permissive\", \"disabled\")", + "property_doc_link": "selinux-enforce-status-doc" } ] }, @@ -4920,39 +4133,33 @@ "properties": [ { "name": "setgid.egid", - "type": "int", "definition": "New effective GID of the process", - "constants": "" + "property_doc_link": "setgid-egid-doc" }, { "name": "setgid.egroup", - "type": "string", "definition": "New effective group of the process", - "constants": "" + "property_doc_link": "setgid-egroup-doc" }, { "name": "setgid.fsgid", - "type": "int", "definition": "New FileSystem GID of the process", - "constants": "" + "property_doc_link": "setgid-fsgid-doc" }, { "name": "setgid.fsgroup", - "type": "string", "definition": "New FileSystem group of the process", - "constants": "" + "property_doc_link": "setgid-fsgroup-doc" }, { "name": "setgid.gid", - "type": "int", "definition": "New GID of the process", - "constants": "" + "property_doc_link": "setgid-gid-doc" }, { "name": "setgid.group", - "type": "string", "definition": "New group of the process", - "constants": "" + "property_doc_link": "setgid-group-doc" } ] }, @@ -4965,39 +4172,33 @@ "properties": [ { "name": "setuid.euid", - "type": "int", "definition": "New effective UID of the process", - "constants": "" + "property_doc_link": "setuid-euid-doc" }, { "name": "setuid.euser", - "type": "string", "definition": "New effective user of the process", - "constants": "" + "property_doc_link": "setuid-euser-doc" }, { "name": "setuid.fsuid", - "type": "int", "definition": "New FileSystem UID of the process", - "constants": "" + "property_doc_link": "setuid-fsuid-doc" }, { "name": "setuid.fsuser", - "type": "string", "definition": "New FileSystem user of the process", - "constants": "" + "property_doc_link": "setuid-fsuser-doc" }, { "name": "setuid.uid", - "type": "int", "definition": "New UID of the process", - "constants": "" + "property_doc_link": "setuid-uid-doc" }, { "name": "setuid.user", - "type": "string", "definition": "New user of the process", - "constants": "" + "property_doc_link": "setuid-user-doc" } ] }, @@ -5010,117 +4211,98 @@ "properties": [ { "name": "setxattr.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "setxattr.file.destination.name", - "type": "string", "definition": "Name of the extended attribute", - "constants": "" + "property_doc_link": "common-setxattrevent-file-destination-name-doc" }, { "name": "setxattr.file.destination.namespace", - "type": "string", "definition": "Namespace of the extended attribute", - "constants": "" + "property_doc_link": "common-setxattrevent-file-destination-namespace-doc" }, { "name": "setxattr.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "setxattr.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "setxattr.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "setxattr.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "setxattr.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "setxattr.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "setxattr.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "setxattr.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "setxattr.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "setxattr.file.name.length", - "type": "int", - "definition": "Length of 'setxattr.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "setxattr.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "setxattr.file.path.length", - "type": "int", - "definition": "Length of 'setxattr.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "setxattr.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "setxattr.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "setxattr.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "setxattr.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" } ] }, @@ -5133,1191 +4315,993 @@ "properties": [ { "name": "signal.pid", - "type": "int", "definition": "Target PID", - "constants": "" + "property_doc_link": "signal-pid-doc" }, { "name": "signal.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" }, { "name": "signal.target.ancestors.args", - "type": "string", - "definition": "Arguments of the process (as a string)", - "constants": "" + "definition": "Arguments of the process (as a string, excluding argv0)", + "property_doc_link": "common-process-args-doc" }, { "name": "signal.target.ancestors.args_flags", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Flags in the process arguments", + "property_doc_link": "common-process-args_flags-doc" }, { "name": "signal.target.ancestors.args_options", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Argument of the process as options", + "property_doc_link": "common-process-args_options-doc" }, { "name": "signal.target.ancestors.args_truncated", - "type": "bool", "definition": "Indicator of arguments truncation", - "constants": "" + "property_doc_link": "common-process-args_truncated-doc" }, { "name": "signal.target.ancestors.argv", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Arguments of the process (as an array, excluding argv0)", + "property_doc_link": "common-process-argv-doc" }, { "name": "signal.target.ancestors.argv0", - "type": "string", "definition": "First argument of the process", - "constants": "" + "property_doc_link": "common-process-argv0-doc" }, { "name": "signal.target.ancestors.cap_effective", - "type": "int", "definition": "Effective capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_effective-doc" }, { "name": "signal.target.ancestors.cap_permitted", - "type": "int", "definition": "Permitted capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_permitted-doc" }, { "name": "signal.target.ancestors.comm", - "type": "string", "definition": "Comm attribute of the process", - "constants": "" + "property_doc_link": "common-process-comm-doc" }, { "name": "signal.target.ancestors.container.id", - "type": "string", "definition": "Container ID", - "constants": "" + "property_doc_link": "common-process-container-id-doc" }, { "name": "signal.target.ancestors.cookie", - "type": "int", "definition": "Cookie of the process", - "constants": "" + "property_doc_link": "common-process-cookie-doc" }, { "name": "signal.target.ancestors.created_at", - "type": "int", "definition": "Timestamp of the creation of the process", - "constants": "" + "property_doc_link": "common-process-created_at-doc" }, { "name": "signal.target.ancestors.egid", - "type": "int", "definition": "Effective GID of the process", - "constants": "" + "property_doc_link": "common-credentials-egid-doc" }, { "name": "signal.target.ancestors.egroup", - "type": "string", "definition": "Effective group of the process", - "constants": "" + "property_doc_link": "common-credentials-egroup-doc" }, { "name": "signal.target.ancestors.envp", - "type": "string", "definition": "Environment variables of the process", - "constants": "" + "property_doc_link": "common-process-envp-doc" }, { "name": "signal.target.ancestors.envs", - "type": "string", "definition": "Environment variable names of the process", - "constants": "" + "property_doc_link": "common-process-envs-doc" }, { "name": "signal.target.ancestors.envs_truncated", - "type": "bool", "definition": "Indicator of environment variables truncation", - "constants": "" + "property_doc_link": "common-process-envs_truncated-doc" }, { "name": "signal.target.ancestors.euid", - "type": "int", "definition": "Effective UID of the process", - "constants": "" + "property_doc_link": "common-credentials-euid-doc" }, { "name": "signal.target.ancestors.euser", - "type": "string", "definition": "Effective user of the process", - "constants": "" + "property_doc_link": "common-credentials-euser-doc" }, { "name": "signal.target.ancestors.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "signal.target.ancestors.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "signal.target.ancestors.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "signal.target.ancestors.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "signal.target.ancestors.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "signal.target.ancestors.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "signal.target.ancestors.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "signal.target.ancestors.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "signal.target.ancestors.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "signal.target.ancestors.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "signal.target.ancestors.file.name.length", - "type": "int", - "definition": "Length of 'signal.target.ancestors.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "signal.target.ancestors.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "signal.target.ancestors.file.path.length", - "type": "int", - "definition": "Length of 'signal.target.ancestors.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "signal.target.ancestors.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "signal.target.ancestors.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "signal.target.ancestors.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "signal.target.ancestors.fsgid", - "type": "int", "definition": "FileSystem-gid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgid-doc" }, { "name": "signal.target.ancestors.fsgroup", - "type": "string", "definition": "FileSystem-group of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgroup-doc" }, { "name": "signal.target.ancestors.fsuid", - "type": "int", "definition": "FileSystem-uid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuid-doc" }, { "name": "signal.target.ancestors.fsuser", - "type": "string", "definition": "FileSystem-user of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuser-doc" }, { "name": "signal.target.ancestors.gid", - "type": "int", "definition": "GID of the process", - "constants": "" + "property_doc_link": "common-credentials-gid-doc" }, { "name": "signal.target.ancestors.group", - "type": "string", "definition": "Group of the process", - "constants": "" + "property_doc_link": "common-credentials-group-doc" }, { "name": "signal.target.ancestors.interpreter.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "signal.target.ancestors.interpreter.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "signal.target.ancestors.interpreter.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "signal.target.ancestors.interpreter.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "signal.target.ancestors.interpreter.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "signal.target.ancestors.interpreter.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "signal.target.ancestors.interpreter.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "signal.target.ancestors.interpreter.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "signal.target.ancestors.interpreter.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "signal.target.ancestors.interpreter.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "signal.target.ancestors.interpreter.file.name.length", - "type": "int", - "definition": "Length of 'signal.target.ancestors.interpreter.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "signal.target.ancestors.interpreter.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "signal.target.ancestors.interpreter.file.path.length", - "type": "int", - "definition": "Length of 'signal.target.ancestors.interpreter.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "signal.target.ancestors.interpreter.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "signal.target.ancestors.interpreter.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "signal.target.ancestors.interpreter.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "signal.target.ancestors.is_kworker", - "type": "bool", "definition": "Indicates whether the process is a kworker", - "constants": "" + "property_doc_link": "common-pidcontext-is_kworker-doc" }, { "name": "signal.target.ancestors.is_thread", - "type": "bool", "definition": "Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program)", - "constants": "" + "property_doc_link": "common-process-is_thread-doc" }, { "name": "signal.target.ancestors.pid", - "type": "int", "definition": "Process ID of the process (also called thread group ID)", - "constants": "" + "property_doc_link": "common-pidcontext-pid-doc" }, { "name": "signal.target.ancestors.ppid", - "type": "int", "definition": "Parent process ID", - "constants": "" + "property_doc_link": "common-process-ppid-doc" }, { "name": "signal.target.ancestors.tid", - "type": "int", "definition": "Thread ID of the thread", - "constants": "" + "property_doc_link": "common-pidcontext-tid-doc" }, { "name": "signal.target.ancestors.tty_name", - "type": "string", "definition": "Name of the TTY associated with the process", - "constants": "" + "property_doc_link": "common-process-tty_name-doc" }, { "name": "signal.target.ancestors.uid", - "type": "int", "definition": "UID of the process", - "constants": "" + "property_doc_link": "common-credentials-uid-doc" }, { "name": "signal.target.ancestors.user", - "type": "string", "definition": "User of the process", - "constants": "" + "property_doc_link": "common-credentials-user-doc" }, { "name": "signal.target.args", - "type": "string", - "definition": "Arguments of the process (as a string)", - "constants": "" + "definition": "Arguments of the process (as a string, excluding argv0)", + "property_doc_link": "common-process-args-doc" }, { "name": "signal.target.args_flags", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Flags in the process arguments", + "property_doc_link": "common-process-args_flags-doc" }, { "name": "signal.target.args_options", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Argument of the process as options", + "property_doc_link": "common-process-args_options-doc" }, { "name": "signal.target.args_truncated", - "type": "bool", "definition": "Indicator of arguments truncation", - "constants": "" + "property_doc_link": "common-process-args_truncated-doc" }, { "name": "signal.target.argv", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Arguments of the process (as an array, excluding argv0)", + "property_doc_link": "common-process-argv-doc" }, { "name": "signal.target.argv0", - "type": "string", "definition": "First argument of the process", - "constants": "" + "property_doc_link": "common-process-argv0-doc" }, { "name": "signal.target.cap_effective", - "type": "int", "definition": "Effective capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_effective-doc" }, { "name": "signal.target.cap_permitted", - "type": "int", "definition": "Permitted capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_permitted-doc" }, { "name": "signal.target.comm", - "type": "string", "definition": "Comm attribute of the process", - "constants": "" + "property_doc_link": "common-process-comm-doc" }, { "name": "signal.target.container.id", - "type": "string", "definition": "Container ID", - "constants": "" + "property_doc_link": "common-process-container-id-doc" }, { "name": "signal.target.cookie", - "type": "int", "definition": "Cookie of the process", - "constants": "" + "property_doc_link": "common-process-cookie-doc" }, { "name": "signal.target.created_at", - "type": "int", "definition": "Timestamp of the creation of the process", - "constants": "" + "property_doc_link": "common-process-created_at-doc" }, { "name": "signal.target.egid", - "type": "int", "definition": "Effective GID of the process", - "constants": "" + "property_doc_link": "common-credentials-egid-doc" }, { "name": "signal.target.egroup", - "type": "string", "definition": "Effective group of the process", - "constants": "" + "property_doc_link": "common-credentials-egroup-doc" }, { "name": "signal.target.envp", - "type": "string", "definition": "Environment variables of the process", - "constants": "" + "property_doc_link": "common-process-envp-doc" }, { "name": "signal.target.envs", - "type": "string", "definition": "Environment variable names of the process", - "constants": "" + "property_doc_link": "common-process-envs-doc" }, { "name": "signal.target.envs_truncated", - "type": "bool", "definition": "Indicator of environment variables truncation", - "constants": "" + "property_doc_link": "common-process-envs_truncated-doc" }, { "name": "signal.target.euid", - "type": "int", "definition": "Effective UID of the process", - "constants": "" + "property_doc_link": "common-credentials-euid-doc" }, { "name": "signal.target.euser", - "type": "string", "definition": "Effective user of the process", - "constants": "" + "property_doc_link": "common-credentials-euser-doc" }, { "name": "signal.target.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "signal.target.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "signal.target.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "signal.target.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "signal.target.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "signal.target.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "signal.target.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "signal.target.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "signal.target.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "signal.target.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "signal.target.file.name.length", - "type": "int", - "definition": "Length of 'signal.target.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "signal.target.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "signal.target.file.path.length", - "type": "int", - "definition": "Length of 'signal.target.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "signal.target.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "signal.target.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "signal.target.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "signal.target.fsgid", - "type": "int", "definition": "FileSystem-gid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgid-doc" }, { "name": "signal.target.fsgroup", - "type": "string", "definition": "FileSystem-group of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgroup-doc" }, { "name": "signal.target.fsuid", - "type": "int", "definition": "FileSystem-uid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuid-doc" }, { "name": "signal.target.fsuser", - "type": "string", "definition": "FileSystem-user of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuser-doc" }, { "name": "signal.target.gid", - "type": "int", "definition": "GID of the process", - "constants": "" + "property_doc_link": "common-credentials-gid-doc" }, { "name": "signal.target.group", - "type": "string", "definition": "Group of the process", - "constants": "" + "property_doc_link": "common-credentials-group-doc" }, { "name": "signal.target.interpreter.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "signal.target.interpreter.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "signal.target.interpreter.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "signal.target.interpreter.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "signal.target.interpreter.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "signal.target.interpreter.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "signal.target.interpreter.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "signal.target.interpreter.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "signal.target.interpreter.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "signal.target.interpreter.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "signal.target.interpreter.file.name.length", - "type": "int", - "definition": "Length of 'signal.target.interpreter.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "signal.target.interpreter.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "signal.target.interpreter.file.path.length", - "type": "int", - "definition": "Length of 'signal.target.interpreter.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "signal.target.interpreter.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "signal.target.interpreter.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "signal.target.interpreter.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "signal.target.is_kworker", - "type": "bool", "definition": "Indicates whether the process is a kworker", - "constants": "" + "property_doc_link": "common-pidcontext-is_kworker-doc" }, { "name": "signal.target.is_thread", - "type": "bool", "definition": "Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program)", - "constants": "" + "property_doc_link": "common-process-is_thread-doc" }, { "name": "signal.target.parent.args", - "type": "string", - "definition": "Arguments of the process (as a string)", - "constants": "" + "definition": "Arguments of the process (as a string, excluding argv0)", + "property_doc_link": "common-process-args-doc" }, { "name": "signal.target.parent.args_flags", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Flags in the process arguments", + "property_doc_link": "common-process-args_flags-doc" }, { "name": "signal.target.parent.args_options", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Argument of the process as options", + "property_doc_link": "common-process-args_options-doc" }, { "name": "signal.target.parent.args_truncated", - "type": "bool", "definition": "Indicator of arguments truncation", - "constants": "" + "property_doc_link": "common-process-args_truncated-doc" }, { "name": "signal.target.parent.argv", - "type": "string", - "definition": "Arguments of the process (as an array)", - "constants": "" + "definition": "Arguments of the process (as an array, excluding argv0)", + "property_doc_link": "common-process-argv-doc" }, { "name": "signal.target.parent.argv0", - "type": "string", "definition": "First argument of the process", - "constants": "" + "property_doc_link": "common-process-argv0-doc" }, { "name": "signal.target.parent.cap_effective", - "type": "int", "definition": "Effective capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_effective-doc" }, { "name": "signal.target.parent.cap_permitted", - "type": "int", "definition": "Permitted capability set of the process", - "constants": "Kernel Capability constants" + "property_doc_link": "common-credentials-cap_permitted-doc" }, { "name": "signal.target.parent.comm", - "type": "string", "definition": "Comm attribute of the process", - "constants": "" + "property_doc_link": "common-process-comm-doc" }, { "name": "signal.target.parent.container.id", - "type": "string", "definition": "Container ID", - "constants": "" + "property_doc_link": "common-process-container-id-doc" }, { "name": "signal.target.parent.cookie", - "type": "int", "definition": "Cookie of the process", - "constants": "" + "property_doc_link": "common-process-cookie-doc" }, { "name": "signal.target.parent.created_at", - "type": "int", "definition": "Timestamp of the creation of the process", - "constants": "" + "property_doc_link": "common-process-created_at-doc" }, { "name": "signal.target.parent.egid", - "type": "int", "definition": "Effective GID of the process", - "constants": "" + "property_doc_link": "common-credentials-egid-doc" }, { "name": "signal.target.parent.egroup", - "type": "string", "definition": "Effective group of the process", - "constants": "" + "property_doc_link": "common-credentials-egroup-doc" }, { "name": "signal.target.parent.envp", - "type": "string", "definition": "Environment variables of the process", - "constants": "" + "property_doc_link": "common-process-envp-doc" }, { "name": "signal.target.parent.envs", - "type": "string", "definition": "Environment variable names of the process", - "constants": "" + "property_doc_link": "common-process-envs-doc" }, { "name": "signal.target.parent.envs_truncated", - "type": "bool", "definition": "Indicator of environment variables truncation", - "constants": "" + "property_doc_link": "common-process-envs_truncated-doc" }, { "name": "signal.target.parent.euid", - "type": "int", "definition": "Effective UID of the process", - "constants": "" + "property_doc_link": "common-credentials-euid-doc" }, { "name": "signal.target.parent.euser", - "type": "string", "definition": "Effective user of the process", - "constants": "" + "property_doc_link": "common-credentials-euser-doc" }, { "name": "signal.target.parent.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "signal.target.parent.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "signal.target.parent.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "signal.target.parent.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "signal.target.parent.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "signal.target.parent.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "signal.target.parent.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "signal.target.parent.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "signal.target.parent.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "signal.target.parent.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "signal.target.parent.file.name.length", - "type": "int", - "definition": "Length of 'signal.target.parent.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "signal.target.parent.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "signal.target.parent.file.path.length", - "type": "int", - "definition": "Length of 'signal.target.parent.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "signal.target.parent.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "signal.target.parent.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "signal.target.parent.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "signal.target.parent.fsgid", - "type": "int", "definition": "FileSystem-gid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgid-doc" }, { "name": "signal.target.parent.fsgroup", - "type": "string", "definition": "FileSystem-group of the process", - "constants": "" + "property_doc_link": "common-credentials-fsgroup-doc" }, { "name": "signal.target.parent.fsuid", - "type": "int", "definition": "FileSystem-uid of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuid-doc" }, { "name": "signal.target.parent.fsuser", - "type": "string", "definition": "FileSystem-user of the process", - "constants": "" + "property_doc_link": "common-credentials-fsuser-doc" }, { "name": "signal.target.parent.gid", - "type": "int", "definition": "GID of the process", - "constants": "" + "property_doc_link": "common-credentials-gid-doc" }, { "name": "signal.target.parent.group", - "type": "string", "definition": "Group of the process", - "constants": "" + "property_doc_link": "common-credentials-group-doc" }, { "name": "signal.target.parent.interpreter.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "signal.target.parent.interpreter.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "signal.target.parent.interpreter.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "signal.target.parent.interpreter.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "signal.target.parent.interpreter.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "signal.target.parent.interpreter.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "signal.target.parent.interpreter.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "signal.target.parent.interpreter.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "signal.target.parent.interpreter.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "signal.target.parent.interpreter.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "signal.target.parent.interpreter.file.name.length", - "type": "int", - "definition": "Length of 'signal.target.parent.interpreter.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "signal.target.parent.interpreter.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "signal.target.parent.interpreter.file.path.length", - "type": "int", - "definition": "Length of 'signal.target.parent.interpreter.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "signal.target.parent.interpreter.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "signal.target.parent.interpreter.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "signal.target.parent.interpreter.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "signal.target.parent.is_kworker", - "type": "bool", "definition": "Indicates whether the process is a kworker", - "constants": "" + "property_doc_link": "common-pidcontext-is_kworker-doc" }, { "name": "signal.target.parent.is_thread", - "type": "bool", "definition": "Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program)", - "constants": "" + "property_doc_link": "common-process-is_thread-doc" }, { "name": "signal.target.parent.pid", - "type": "int", "definition": "Process ID of the process (also called thread group ID)", - "constants": "" + "property_doc_link": "common-pidcontext-pid-doc" }, { "name": "signal.target.parent.ppid", - "type": "int", "definition": "Parent process ID", - "constants": "" + "property_doc_link": "common-process-ppid-doc" }, { "name": "signal.target.parent.tid", - "type": "int", "definition": "Thread ID of the thread", - "constants": "" + "property_doc_link": "common-pidcontext-tid-doc" }, { "name": "signal.target.parent.tty_name", - "type": "string", "definition": "Name of the TTY associated with the process", - "constants": "" + "property_doc_link": "common-process-tty_name-doc" }, { "name": "signal.target.parent.uid", - "type": "int", "definition": "UID of the process", - "constants": "" + "property_doc_link": "common-credentials-uid-doc" }, { "name": "signal.target.parent.user", - "type": "string", "definition": "User of the process", - "constants": "" + "property_doc_link": "common-credentials-user-doc" }, { "name": "signal.target.pid", - "type": "int", "definition": "Process ID of the process (also called thread group ID)", - "constants": "" + "property_doc_link": "common-pidcontext-pid-doc" }, { "name": "signal.target.ppid", - "type": "int", "definition": "Parent process ID", - "constants": "" + "property_doc_link": "common-process-ppid-doc" }, { "name": "signal.target.tid", - "type": "int", "definition": "Thread ID of the thread", - "constants": "" + "property_doc_link": "common-pidcontext-tid-doc" }, { "name": "signal.target.tty_name", - "type": "string", "definition": "Name of the TTY associated with the process", - "constants": "" + "property_doc_link": "common-process-tty_name-doc" }, { "name": "signal.target.uid", - "type": "int", "definition": "UID of the process", - "constants": "" + "property_doc_link": "common-credentials-uid-doc" }, { "name": "signal.target.user", - "type": "string", "definition": "User of the process", - "constants": "" + "property_doc_link": "common-credentials-user-doc" }, { "name": "signal.type", - "type": "int", "definition": "Signal type (ex: SIGHUP, SIGINT, SIGQUIT, etc)", - "constants": "Signal constants" + "property_doc_link": "signal-type-doc" } ] }, @@ -6330,117 +5314,98 @@ "properties": [ { "name": "splice.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "splice.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "splice.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "splice.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "splice.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "splice.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "splice.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "splice.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "splice.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "splice.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "splice.file.name.length", - "type": "int", - "definition": "Length of 'splice.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "splice.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "splice.file.path.length", - "type": "int", - "definition": "Length of 'splice.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "splice.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "splice.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "splice.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "splice.pipe_entry_flag", - "type": "int", "definition": "Entry flag of the \"fd_out\" pipe passed to the splice syscall", - "constants": "Pipe buffer flags" + "property_doc_link": "splice-pipe_entry_flag-doc" }, { "name": "splice.pipe_exit_flag", - "type": "int", "definition": "Exit flag of the \"fd_out\" pipe passed to the splice syscall", - "constants": "Pipe buffer flags" + "property_doc_link": "splice-pipe_exit_flag-doc" }, { "name": "splice.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" } ] }, @@ -6453,111 +5418,93 @@ "properties": [ { "name": "unlink.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "unlink.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "unlink.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "unlink.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "unlink.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "unlink.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "unlink.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "unlink.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "unlink.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "unlink.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "unlink.file.name.length", - "type": "int", - "definition": "Length of 'unlink.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "unlink.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "unlink.file.path.length", - "type": "int", - "definition": "Length of 'unlink.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "unlink.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "unlink.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "unlink.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "unlink.flags", - "type": "int", - "definition": "", - "constants": "Unlink flags" + "definition": "Flags of the unlink syscall", + "property_doc_link": "unlink-flags-doc" }, { "name": "unlink.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" } ] }, @@ -6570,15 +5517,13 @@ "properties": [ { "name": "unload_module.name", - "type": "string", "definition": "Name of the kernel module that was deleted", - "constants": "" + "property_doc_link": "unload_module-name-doc" }, { "name": "unload_module.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" } ] }, @@ -6591,112 +5536,2555 @@ "properties": [ { "name": "utimes.file.change_time", - "type": "int", "definition": "Change time of the file", - "constants": "" + "property_doc_link": "common-filefields-change_time-doc" }, { "name": "utimes.file.filesystem", - "type": "string", "definition": "File's filesystem", - "constants": "" + "property_doc_link": "common-fileevent-filesystem-doc" }, { "name": "utimes.file.gid", - "type": "int", "definition": "GID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-gid-doc" }, { "name": "utimes.file.group", - "type": "string", "definition": "Group of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-group-doc" }, { "name": "utimes.file.in_upper_layer", - "type": "bool", "definition": "Indicator of the file layer, for example, in an OverlayFS", - "constants": "" + "property_doc_link": "common-filefields-in_upper_layer-doc" }, { "name": "utimes.file.inode", - "type": "int", "definition": "Inode of the file", - "constants": "" + "property_doc_link": "common-filefields-inode-doc" }, { "name": "utimes.file.mode", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Mode of the file", + "property_doc_link": "common-filefields-mode-doc" }, { "name": "utimes.file.modification_time", - "type": "int", "definition": "Modification time of the file", - "constants": "" + "property_doc_link": "common-filefields-modification_time-doc" }, { "name": "utimes.file.mount_id", - "type": "int", "definition": "Mount ID of the file", - "constants": "" + "property_doc_link": "common-filefields-mount_id-doc" }, { "name": "utimes.file.name", - "type": "string", "definition": "File's basename", - "constants": "" + "property_doc_link": "common-fileevent-name-doc" }, { "name": "utimes.file.name.length", - "type": "int", - "definition": "Length of 'utimes.file.name' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "utimes.file.path", - "type": "string", "definition": "File's path", - "constants": "" + "property_doc_link": "common-fileevent-path-doc" }, { "name": "utimes.file.path.length", - "type": "int", - "definition": "Length of 'utimes.file.path' string", - "constants": "" + "definition": "Length of the corresponding string", + "property_doc_link": "common-string-length-doc" }, { "name": "utimes.file.rights", - "type": "int", - "definition": "Mode/rights of the file", - "constants": "Chmod mode constants" + "definition": "Rights of the file", + "property_doc_link": "common-filefields-rights-doc" }, { "name": "utimes.file.uid", - "type": "int", "definition": "UID of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-uid-doc" }, { "name": "utimes.file.user", - "type": "string", "definition": "User of the file's owner", - "constants": "" + "property_doc_link": "common-filefields-user-doc" }, { "name": "utimes.retval", - "type": "int", "definition": "Return value of the syscall", - "constants": "Error Constants" + "property_doc_link": "common-syscallevent-retval-doc" + } + ] + } + ], + "properties_doc": [ + { + "name": "*.args", + "link": "common-process-args-doc", + "type": "string", + "definition": "Arguments of the process (as a string, excluding argv0)", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [ + { + "expression": "exec.args == \"-sV -p 22,53,110,143,4564 198.116.0-255.1-127\"", + "description": "Matches any process with these exact arguments." + }, + { + "expression": "exec.args =~ \"* -F * http*\"", + "description": "Matches any process that has the \"-F\" argument anywhere before an argument starting with \"http\"." + } + ] + }, + { + "name": "*.args_flags", + "link": "common-process-args_flags-doc", + "type": "string", + "definition": "Flags in the process arguments", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [ + { + "expression": "exec.args_flags in [\"s\"] \u0026\u0026 exec.args_flags in [\"V\"]", + "description": "Matches any process with both \"-s\" and \"-V\" flags in its arguments. Also matches \"-sV\"." + } + ] + }, + { + "name": "*.args_options", + "link": "common-process-args_options-doc", + "type": "string", + "definition": "Argument of the process as options", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [ + { + "expression": "exec.args_options in [\"p=0-1024\"]", + "description": "Matches any process that has either \"-p 0-1024\" or \"--p=0-1024\" in its arguments." + } + ] + }, + { + "name": "*.args_truncated", + "link": "common-process-args_truncated-doc", + "type": "bool", + "definition": "Indicator of arguments truncation", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.argv", + "link": "common-process-argv-doc", + "type": "string", + "definition": "Arguments of the process (as an array, excluding argv0)", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [ + { + "expression": "exec.argv in [\"127.0.0.1\"]", + "description": "Matches any process that has this IP address as one of its arguments." + } + ] + }, + { + "name": "*.argv0", + "link": "common-process-argv0-doc", + "type": "string", + "definition": "First argument of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.cap_effective", + "link": "common-credentials-cap_effective-doc", + "type": "int", + "definition": "Effective capability set of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "Kernel Capability constants", + "constants_link": "kernel-capability-constants", + "examples": [] + }, + { + "name": "*.cap_permitted", + "link": "common-credentials-cap_permitted-doc", + "type": "int", + "definition": "Permitted capability set of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "Kernel Capability constants", + "constants_link": "kernel-capability-constants", + "examples": [] + }, + { + "name": "*.change_time", + "link": "common-filefields-change_time-doc", + "type": "int", + "definition": "Change time of the file", + "prefixes": [ + "chmod.file", + "chown.file", + "exec.file", + "exec.interpreter.file", + "exit.file", + "exit.interpreter.file", + "link.file", + "link.file.destination", + "load_module.file", + "mkdir.file", + "mmap.file", + "open.file", + "process.ancestors.file", + "process.ancestors.interpreter.file", + "process.file", + "process.interpreter.file", + "process.parent.file", + "process.parent.interpreter.file", + "ptrace.tracee.ancestors.file", + "ptrace.tracee.ancestors.interpreter.file", + "ptrace.tracee.file", + "ptrace.tracee.interpreter.file", + "ptrace.tracee.parent.file", + "ptrace.tracee.parent.interpreter.file", + "removexattr.file", + "rename.file", + "rename.file.destination", + "rmdir.file", + "setxattr.file", + "signal.target.ancestors.file", + "signal.target.ancestors.interpreter.file", + "signal.target.file", + "signal.target.interpreter.file", + "signal.target.parent.file", + "signal.target.parent.interpreter.file", + "splice.file", + "unlink.file", + "utimes.file" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.comm", + "link": "common-process-comm-doc", + "type": "string", + "definition": "Comm attribute of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.container.id", + "link": "common-process-container-id-doc", + "type": "string", + "definition": "Container ID", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.cookie", + "link": "common-process-cookie-doc", + "type": "int", + "definition": "Cookie of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.created_at", + "link": "common-process-created_at-doc", + "type": "int", + "definition": "Timestamp of the creation of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.egid", + "link": "common-credentials-egid-doc", + "type": "int", + "definition": "Effective GID of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.egroup", + "link": "common-credentials-egroup-doc", + "type": "string", + "definition": "Effective group of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.envp", + "link": "common-process-envp-doc", + "type": "string", + "definition": "Environment variables of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.envs", + "link": "common-process-envs-doc", + "type": "string", + "definition": "Environment variable names of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.envs_truncated", + "link": "common-process-envs_truncated-doc", + "type": "bool", + "definition": "Indicator of environment variables truncation", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.euid", + "link": "common-credentials-euid-doc", + "type": "int", + "definition": "Effective UID of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.euser", + "link": "common-credentials-euser-doc", + "type": "string", + "definition": "Effective user of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.file.destination.name", + "link": "common-setxattrevent-file-destination-name-doc", + "type": "string", + "definition": "Name of the extended attribute", + "prefixes": [ + "removexattr", + "setxattr" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.file.destination.namespace", + "link": "common-setxattrevent-file-destination-namespace-doc", + "type": "string", + "definition": "Namespace of the extended attribute", + "prefixes": [ + "removexattr", + "setxattr" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.filesystem", + "link": "common-fileevent-filesystem-doc", + "type": "string", + "definition": "File's filesystem", + "prefixes": [ + "chmod.file", + "chown.file", + "exec.file", + "exec.interpreter.file", + "exit.file", + "exit.interpreter.file", + "link.file", + "link.file.destination", + "load_module.file", + "mkdir.file", + "mmap.file", + "open.file", + "process.ancestors.file", + "process.ancestors.interpreter.file", + "process.file", + "process.interpreter.file", + "process.parent.file", + "process.parent.interpreter.file", + "ptrace.tracee.ancestors.file", + "ptrace.tracee.ancestors.interpreter.file", + "ptrace.tracee.file", + "ptrace.tracee.interpreter.file", + "ptrace.tracee.parent.file", + "ptrace.tracee.parent.interpreter.file", + "removexattr.file", + "rename.file", + "rename.file.destination", + "rmdir.file", + "setxattr.file", + "signal.target.ancestors.file", + "signal.target.ancestors.interpreter.file", + "signal.target.file", + "signal.target.interpreter.file", + "signal.target.parent.file", + "signal.target.parent.interpreter.file", + "splice.file", + "unlink.file", + "utimes.file" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.fsgid", + "link": "common-credentials-fsgid-doc", + "type": "int", + "definition": "FileSystem-gid of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.fsgroup", + "link": "common-credentials-fsgroup-doc", + "type": "string", + "definition": "FileSystem-group of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.fsuid", + "link": "common-credentials-fsuid-doc", + "type": "int", + "definition": "FileSystem-uid of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.fsuser", + "link": "common-credentials-fsuser-doc", + "type": "string", + "definition": "FileSystem-user of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.gid", + "link": "common-credentials-gid-doc", + "type": "int", + "definition": "GID of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.gid", + "link": "common-filefields-gid-doc", + "type": "int", + "definition": "GID of the file's owner", + "prefixes": [ + "chmod.file", + "chown.file", + "exec.file", + "exec.interpreter.file", + "exit.file", + "exit.interpreter.file", + "link.file", + "link.file.destination", + "load_module.file", + "mkdir.file", + "mmap.file", + "open.file", + "process.ancestors.file", + "process.ancestors.interpreter.file", + "process.file", + "process.interpreter.file", + "process.parent.file", + "process.parent.interpreter.file", + "ptrace.tracee.ancestors.file", + "ptrace.tracee.ancestors.interpreter.file", + "ptrace.tracee.file", + "ptrace.tracee.interpreter.file", + "ptrace.tracee.parent.file", + "ptrace.tracee.parent.interpreter.file", + "removexattr.file", + "rename.file", + "rename.file.destination", + "rmdir.file", + "setxattr.file", + "signal.target.ancestors.file", + "signal.target.ancestors.interpreter.file", + "signal.target.file", + "signal.target.interpreter.file", + "signal.target.parent.file", + "signal.target.parent.interpreter.file", + "splice.file", + "unlink.file", + "utimes.file" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.group", + "link": "common-credentials-group-doc", + "type": "string", + "definition": "Group of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.group", + "link": "common-filefields-group-doc", + "type": "string", + "definition": "Group of the file's owner", + "prefixes": [ + "chmod.file", + "chown.file", + "exec.file", + "exec.interpreter.file", + "exit.file", + "exit.interpreter.file", + "link.file", + "link.file.destination", + "load_module.file", + "mkdir.file", + "mmap.file", + "open.file", + "process.ancestors.file", + "process.ancestors.interpreter.file", + "process.file", + "process.interpreter.file", + "process.parent.file", + "process.parent.interpreter.file", + "ptrace.tracee.ancestors.file", + "ptrace.tracee.ancestors.interpreter.file", + "ptrace.tracee.file", + "ptrace.tracee.interpreter.file", + "ptrace.tracee.parent.file", + "ptrace.tracee.parent.interpreter.file", + "removexattr.file", + "rename.file", + "rename.file.destination", + "rmdir.file", + "setxattr.file", + "signal.target.ancestors.file", + "signal.target.ancestors.interpreter.file", + "signal.target.file", + "signal.target.interpreter.file", + "signal.target.parent.file", + "signal.target.parent.interpreter.file", + "splice.file", + "unlink.file", + "utimes.file" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.in_upper_layer", + "link": "common-filefields-in_upper_layer-doc", + "type": "bool", + "definition": "Indicator of the file layer, for example, in an OverlayFS", + "prefixes": [ + "chmod.file", + "chown.file", + "exec.file", + "exec.interpreter.file", + "exit.file", + "exit.interpreter.file", + "link.file", + "link.file.destination", + "load_module.file", + "mkdir.file", + "mmap.file", + "open.file", + "process.ancestors.file", + "process.ancestors.interpreter.file", + "process.file", + "process.interpreter.file", + "process.parent.file", + "process.parent.interpreter.file", + "ptrace.tracee.ancestors.file", + "ptrace.tracee.ancestors.interpreter.file", + "ptrace.tracee.file", + "ptrace.tracee.interpreter.file", + "ptrace.tracee.parent.file", + "ptrace.tracee.parent.interpreter.file", + "removexattr.file", + "rename.file", + "rename.file.destination", + "rmdir.file", + "setxattr.file", + "signal.target.ancestors.file", + "signal.target.ancestors.interpreter.file", + "signal.target.file", + "signal.target.interpreter.file", + "signal.target.parent.file", + "signal.target.parent.interpreter.file", + "splice.file", + "unlink.file", + "utimes.file" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.inode", + "link": "common-filefields-inode-doc", + "type": "int", + "definition": "Inode of the file", + "prefixes": [ + "chmod.file", + "chown.file", + "exec.file", + "exec.interpreter.file", + "exit.file", + "exit.interpreter.file", + "link.file", + "link.file.destination", + "load_module.file", + "mkdir.file", + "mmap.file", + "open.file", + "process.ancestors.file", + "process.ancestors.interpreter.file", + "process.file", + "process.interpreter.file", + "process.parent.file", + "process.parent.interpreter.file", + "ptrace.tracee.ancestors.file", + "ptrace.tracee.ancestors.interpreter.file", + "ptrace.tracee.file", + "ptrace.tracee.interpreter.file", + "ptrace.tracee.parent.file", + "ptrace.tracee.parent.interpreter.file", + "removexattr.file", + "rename.file", + "rename.file.destination", + "rmdir.file", + "setxattr.file", + "signal.target.ancestors.file", + "signal.target.ancestors.interpreter.file", + "signal.target.file", + "signal.target.interpreter.file", + "signal.target.parent.file", + "signal.target.parent.interpreter.file", + "splice.file", + "unlink.file", + "utimes.file" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.ip", + "link": "common-ipportcontext-ip-doc", + "type": "IP/CIDR", + "definition": "IP address", + "prefixes": [ + "bind.addr", + "network.destination", + "network.source" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.is_kworker", + "link": "common-pidcontext-is_kworker-doc", + "type": "bool", + "definition": "Indicates whether the process is a kworker", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.is_thread", + "link": "common-process-is_thread-doc", + "type": "bool", + "definition": "Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program)", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.length", + "link": "common-string-length-doc", + "type": "int", + "definition": "Length of the corresponding string", + "prefixes": [ + "chmod.file.name", + "chmod.file.path", + "chown.file.name", + "chown.file.path", + "dns.question.name", + "exec.file.name", + "exec.file.path", + "exec.interpreter.file.name", + "exec.interpreter.file.path", + "exit.file.name", + "exit.file.path", + "exit.interpreter.file.name", + "exit.interpreter.file.path", + "link.file.destination.name", + "link.file.destination.path", + "link.file.name", + "link.file.path", + "load_module.file.name", + "load_module.file.path", + "mkdir.file.name", + "mkdir.file.path", + "mmap.file.name", + "mmap.file.path", + "open.file.name", + "open.file.path", + "process.ancestors.file.name", + "process.ancestors.file.path", + "process.ancestors.interpreter.file.name", + "process.ancestors.interpreter.file.path", + "process.file.name", + "process.file.path", + "process.interpreter.file.name", + "process.interpreter.file.path", + "process.parent.file.name", + "process.parent.file.path", + "process.parent.interpreter.file.name", + "process.parent.interpreter.file.path", + "ptrace.tracee.ancestors.file.name", + "ptrace.tracee.ancestors.file.path", + "ptrace.tracee.ancestors.interpreter.file.name", + "ptrace.tracee.ancestors.interpreter.file.path", + "ptrace.tracee.file.name", + "ptrace.tracee.file.path", + "ptrace.tracee.interpreter.file.name", + "ptrace.tracee.interpreter.file.path", + "ptrace.tracee.parent.file.name", + "ptrace.tracee.parent.file.path", + "ptrace.tracee.parent.interpreter.file.name", + "ptrace.tracee.parent.interpreter.file.path", + "removexattr.file.name", + "removexattr.file.path", + "rename.file.destination.name", + "rename.file.destination.path", + "rename.file.name", + "rename.file.path", + "rmdir.file.name", + "rmdir.file.path", + "setxattr.file.name", + "setxattr.file.path", + "signal.target.ancestors.file.name", + "signal.target.ancestors.file.path", + "signal.target.ancestors.interpreter.file.name", + "signal.target.ancestors.interpreter.file.path", + "signal.target.file.name", + "signal.target.file.path", + "signal.target.interpreter.file.name", + "signal.target.interpreter.file.path", + "signal.target.parent.file.name", + "signal.target.parent.file.path", + "signal.target.parent.interpreter.file.name", + "signal.target.parent.interpreter.file.path", + "splice.file.name", + "splice.file.path", + "unlink.file.name", + "unlink.file.path", + "utimes.file.name", + "utimes.file.path" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.mode", + "link": "common-filefields-mode-doc", + "type": "int", + "definition": "Mode of the file", + "prefixes": [ + "chmod.file", + "chown.file", + "exec.file", + "exec.interpreter.file", + "exit.file", + "exit.interpreter.file", + "link.file", + "link.file.destination", + "load_module.file", + "mkdir.file", + "mmap.file", + "open.file", + "process.ancestors.file", + "process.ancestors.interpreter.file", + "process.file", + "process.interpreter.file", + "process.parent.file", + "process.parent.interpreter.file", + "ptrace.tracee.ancestors.file", + "ptrace.tracee.ancestors.interpreter.file", + "ptrace.tracee.file", + "ptrace.tracee.interpreter.file", + "ptrace.tracee.parent.file", + "ptrace.tracee.parent.interpreter.file", + "removexattr.file", + "rename.file", + "rename.file.destination", + "rmdir.file", + "setxattr.file", + "signal.target.ancestors.file", + "signal.target.ancestors.interpreter.file", + "signal.target.file", + "signal.target.interpreter.file", + "signal.target.parent.file", + "signal.target.parent.interpreter.file", + "splice.file", + "unlink.file", + "utimes.file" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.modification_time", + "link": "common-filefields-modification_time-doc", + "type": "int", + "definition": "Modification time of the file", + "prefixes": [ + "chmod.file", + "chown.file", + "exec.file", + "exec.interpreter.file", + "exit.file", + "exit.interpreter.file", + "link.file", + "link.file.destination", + "load_module.file", + "mkdir.file", + "mmap.file", + "open.file", + "process.ancestors.file", + "process.ancestors.interpreter.file", + "process.file", + "process.interpreter.file", + "process.parent.file", + "process.parent.interpreter.file", + "ptrace.tracee.ancestors.file", + "ptrace.tracee.ancestors.interpreter.file", + "ptrace.tracee.file", + "ptrace.tracee.interpreter.file", + "ptrace.tracee.parent.file", + "ptrace.tracee.parent.interpreter.file", + "removexattr.file", + "rename.file", + "rename.file.destination", + "rmdir.file", + "setxattr.file", + "signal.target.ancestors.file", + "signal.target.ancestors.interpreter.file", + "signal.target.file", + "signal.target.interpreter.file", + "signal.target.parent.file", + "signal.target.parent.interpreter.file", + "splice.file", + "unlink.file", + "utimes.file" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.mount_id", + "link": "common-filefields-mount_id-doc", + "type": "int", + "definition": "Mount ID of the file", + "prefixes": [ + "chmod.file", + "chown.file", + "exec.file", + "exec.interpreter.file", + "exit.file", + "exit.interpreter.file", + "link.file", + "link.file.destination", + "load_module.file", + "mkdir.file", + "mmap.file", + "open.file", + "process.ancestors.file", + "process.ancestors.interpreter.file", + "process.file", + "process.interpreter.file", + "process.parent.file", + "process.parent.interpreter.file", + "ptrace.tracee.ancestors.file", + "ptrace.tracee.ancestors.interpreter.file", + "ptrace.tracee.file", + "ptrace.tracee.interpreter.file", + "ptrace.tracee.parent.file", + "ptrace.tracee.parent.interpreter.file", + "removexattr.file", + "rename.file", + "rename.file.destination", + "rmdir.file", + "setxattr.file", + "signal.target.ancestors.file", + "signal.target.ancestors.interpreter.file", + "signal.target.file", + "signal.target.interpreter.file", + "signal.target.parent.file", + "signal.target.parent.interpreter.file", + "splice.file", + "unlink.file", + "utimes.file" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.name", + "link": "common-fileevent-name-doc", + "type": "string", + "definition": "File's basename", + "prefixes": [ + "chmod.file", + "chown.file", + "exec.file", + "exec.interpreter.file", + "exit.file", + "exit.interpreter.file", + "link.file", + "link.file.destination", + "load_module.file", + "mkdir.file", + "mmap.file", + "open.file", + "process.ancestors.file", + "process.ancestors.interpreter.file", + "process.file", + "process.interpreter.file", + "process.parent.file", + "process.parent.interpreter.file", + "ptrace.tracee.ancestors.file", + "ptrace.tracee.ancestors.interpreter.file", + "ptrace.tracee.file", + "ptrace.tracee.interpreter.file", + "ptrace.tracee.parent.file", + "ptrace.tracee.parent.interpreter.file", + "removexattr.file", + "rename.file", + "rename.file.destination", + "rmdir.file", + "setxattr.file", + "signal.target.ancestors.file", + "signal.target.ancestors.interpreter.file", + "signal.target.file", + "signal.target.interpreter.file", + "signal.target.parent.file", + "signal.target.parent.interpreter.file", + "splice.file", + "unlink.file", + "utimes.file" + ], + "constants": "", + "constants_link": "", + "examples": [ + { + "expression": "exec.file.name == \"apt\"", + "description": "Matches the execution of any file named apt." + } + ] + }, + { + "name": "*.path", + "link": "common-fileevent-path-doc", + "type": "string", + "definition": "File's path", + "prefixes": [ + "chmod.file", + "chown.file", + "exec.file", + "exec.interpreter.file", + "exit.file", + "exit.interpreter.file", + "link.file", + "link.file.destination", + "load_module.file", + "mkdir.file", + "mmap.file", + "open.file", + "process.ancestors.file", + "process.ancestors.interpreter.file", + "process.file", + "process.interpreter.file", + "process.parent.file", + "process.parent.interpreter.file", + "ptrace.tracee.ancestors.file", + "ptrace.tracee.ancestors.interpreter.file", + "ptrace.tracee.file", + "ptrace.tracee.interpreter.file", + "ptrace.tracee.parent.file", + "ptrace.tracee.parent.interpreter.file", + "removexattr.file", + "rename.file", + "rename.file.destination", + "rmdir.file", + "setxattr.file", + "signal.target.ancestors.file", + "signal.target.ancestors.interpreter.file", + "signal.target.file", + "signal.target.interpreter.file", + "signal.target.parent.file", + "signal.target.parent.interpreter.file", + "splice.file", + "unlink.file", + "utimes.file" + ], + "constants": "", + "constants_link": "", + "examples": [ + { + "expression": "exec.file.path == \"/usr/bin/apt\"", + "description": "Matches the execution of the file located at /usr/bin/apt" + }, + { + "expression": "open.file.path == \"/etc/passwd\"", + "description": "Matches any process opening the /etc/passwd file." } ] + }, + { + "name": "*.pid", + "link": "common-pidcontext-pid-doc", + "type": "int", + "definition": "Process ID of the process (also called thread group ID)", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.port", + "link": "common-ipportcontext-port-doc", + "type": "int", + "definition": "Port number", + "prefixes": [ + "bind.addr", + "network.destination", + "network.source" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.ppid", + "link": "common-process-ppid-doc", + "type": "int", + "definition": "Parent process ID", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.retval", + "link": "common-syscallevent-retval-doc", + "type": "int", + "definition": "Return value of the syscall", + "prefixes": [ + "bind", + "bpf", + "chmod", + "chown", + "link", + "load_module", + "mkdir", + "mmap", + "mount", + "mprotect", + "open", + "ptrace", + "removexattr", + "rename", + "rmdir", + "setxattr", + "signal", + "splice", + "unlink", + "unload_module", + "utimes" + ], + "constants": "Error constants", + "constants_link": "error-constants", + "examples": [] + }, + { + "name": "*.rights", + "link": "common-filefields-rights-doc", + "type": "int", + "definition": "Rights of the file", + "prefixes": [ + "chmod.file", + "chown.file", + "exec.file", + "exec.interpreter.file", + "exit.file", + "exit.interpreter.file", + "link.file", + "link.file.destination", + "load_module.file", + "mkdir.file", + "mmap.file", + "open.file", + "process.ancestors.file", + "process.ancestors.interpreter.file", + "process.file", + "process.interpreter.file", + "process.parent.file", + "process.parent.interpreter.file", + "ptrace.tracee.ancestors.file", + "ptrace.tracee.ancestors.interpreter.file", + "ptrace.tracee.file", + "ptrace.tracee.interpreter.file", + "ptrace.tracee.parent.file", + "ptrace.tracee.parent.interpreter.file", + "removexattr.file", + "rename.file", + "rename.file.destination", + "rmdir.file", + "setxattr.file", + "signal.target.ancestors.file", + "signal.target.ancestors.interpreter.file", + "signal.target.file", + "signal.target.interpreter.file", + "signal.target.parent.file", + "signal.target.parent.interpreter.file", + "splice.file", + "unlink.file", + "utimes.file" + ], + "constants": "Chmod mode constants", + "constants_link": "chmod-mode-constants", + "examples": [] + }, + { + "name": "*.tid", + "link": "common-pidcontext-tid-doc", + "type": "int", + "definition": "Thread ID of the thread", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.tty_name", + "link": "common-process-tty_name-doc", + "type": "string", + "definition": "Name of the TTY associated with the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.uid", + "link": "common-credentials-uid-doc", + "type": "int", + "definition": "UID of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.uid", + "link": "common-filefields-uid-doc", + "type": "int", + "definition": "UID of the file's owner", + "prefixes": [ + "chmod.file", + "chown.file", + "exec.file", + "exec.interpreter.file", + "exit.file", + "exit.interpreter.file", + "link.file", + "link.file.destination", + "load_module.file", + "mkdir.file", + "mmap.file", + "open.file", + "process.ancestors.file", + "process.ancestors.interpreter.file", + "process.file", + "process.interpreter.file", + "process.parent.file", + "process.parent.interpreter.file", + "ptrace.tracee.ancestors.file", + "ptrace.tracee.ancestors.interpreter.file", + "ptrace.tracee.file", + "ptrace.tracee.interpreter.file", + "ptrace.tracee.parent.file", + "ptrace.tracee.parent.interpreter.file", + "removexattr.file", + "rename.file", + "rename.file.destination", + "rmdir.file", + "setxattr.file", + "signal.target.ancestors.file", + "signal.target.ancestors.interpreter.file", + "signal.target.file", + "signal.target.interpreter.file", + "signal.target.parent.file", + "signal.target.parent.interpreter.file", + "splice.file", + "unlink.file", + "utimes.file" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "*.user", + "link": "common-credentials-user-doc", + "type": "string", + "definition": "User of the process", + "prefixes": [ + "exec", + "exit", + "process", + "process.ancestors", + "process.parent", + "ptrace.tracee", + "ptrace.tracee.ancestors", + "ptrace.tracee.parent", + "signal.target", + "signal.target.ancestors", + "signal.target.parent" + ], + "constants": "", + "constants_link": "", + "examples": [ + { + "expression": "process.user == \"root\"", + "description": "Constrain an event to be triggered by a process running as the root user." + } + ] + }, + { + "name": "*.user", + "link": "common-filefields-user-doc", + "type": "string", + "definition": "User of the file's owner", + "prefixes": [ + "chmod.file", + "chown.file", + "exec.file", + "exec.interpreter.file", + "exit.file", + "exit.interpreter.file", + "link.file", + "link.file.destination", + "load_module.file", + "mkdir.file", + "mmap.file", + "open.file", + "process.ancestors.file", + "process.ancestors.interpreter.file", + "process.file", + "process.interpreter.file", + "process.parent.file", + "process.parent.interpreter.file", + "ptrace.tracee.ancestors.file", + "ptrace.tracee.ancestors.interpreter.file", + "ptrace.tracee.file", + "ptrace.tracee.interpreter.file", + "ptrace.tracee.parent.file", + "ptrace.tracee.parent.interpreter.file", + "removexattr.file", + "rename.file", + "rename.file.destination", + "rmdir.file", + "setxattr.file", + "signal.target.ancestors.file", + "signal.target.ancestors.interpreter.file", + "signal.target.file", + "signal.target.interpreter.file", + "signal.target.parent.file", + "signal.target.parent.interpreter.file", + "splice.file", + "unlink.file", + "utimes.file" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "async", + "link": "async-doc", + "type": "bool", + "definition": "True if the syscall was asynchronous", + "prefixes": [ + "" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "bind.addr.family", + "link": "bind-addr-family-doc", + "type": "int", + "definition": "Address family", + "prefixes": [ + "bind" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "bpf.cmd", + "link": "bpf-cmd-doc", + "type": "int", + "definition": "BPF command name", + "prefixes": [ + "bpf" + ], + "constants": "BPF commands", + "constants_link": "bpf-commands", + "examples": [] + }, + { + "name": "bpf.map.name", + "link": "bpf-map-name-doc", + "type": "string", + "definition": "Name of the eBPF map (added in 7.35)", + "prefixes": [ + "bpf.map" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "bpf.map.type", + "link": "bpf-map-type-doc", + "type": "int", + "definition": "Type of the eBPF map", + "prefixes": [ + "bpf.map" + ], + "constants": "BPF map types", + "constants_link": "bpf-map-types", + "examples": [] + }, + { + "name": "bpf.prog.attach_type", + "link": "bpf-prog-attach_type-doc", + "type": "int", + "definition": "Attach type of the eBPF program", + "prefixes": [ + "bpf.prog" + ], + "constants": "BPF attach types", + "constants_link": "bpf-attach-types", + "examples": [] + }, + { + "name": "bpf.prog.helpers", + "link": "bpf-prog-helpers-doc", + "type": "int", + "definition": "eBPF helpers used by the eBPF program (added in 7.35)", + "prefixes": [ + "bpf.prog" + ], + "constants": "BPF helper functions", + "constants_link": "bpf-helper-functions", + "examples": [] + }, + { + "name": "bpf.prog.name", + "link": "bpf-prog-name-doc", + "type": "string", + "definition": "Name of the eBPF program (added in 7.35)", + "prefixes": [ + "bpf.prog" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "bpf.prog.tag", + "link": "bpf-prog-tag-doc", + "type": "string", + "definition": "Hash (sha1) of the eBPF program (added in 7.35)", + "prefixes": [ + "bpf.prog" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "bpf.prog.type", + "link": "bpf-prog-type-doc", + "type": "int", + "definition": "Type of the eBPF program", + "prefixes": [ + "bpf.prog" + ], + "constants": "BPF program types", + "constants_link": "bpf-program-types", + "examples": [] + }, + { + "name": "capset.cap_effective", + "link": "capset-cap_effective-doc", + "type": "int", + "definition": "Effective capability set of the process", + "prefixes": [ + "capset" + ], + "constants": "Kernel Capability constants", + "constants_link": "kernel-capability-constants", + "examples": [] + }, + { + "name": "capset.cap_permitted", + "link": "capset-cap_permitted-doc", + "type": "int", + "definition": "Permitted capability set of the process", + "prefixes": [ + "capset" + ], + "constants": "Kernel Capability constants", + "constants_link": "kernel-capability-constants", + "examples": [] + }, + { + "name": "chmod.file.destination.mode", + "link": "chmod-file-destination-mode-doc", + "type": "int", + "definition": "New mode of the chmod-ed file", + "prefixes": [ + "chmod" + ], + "constants": "Chmod mode constants", + "constants_link": "chmod-mode-constants", + "examples": [] + }, + { + "name": "chmod.file.destination.rights", + "link": "chmod-file-destination-rights-doc", + "type": "int", + "definition": "New rights of the chmod-ed file", + "prefixes": [ + "chmod" + ], + "constants": "Chmod mode constants", + "constants_link": "chmod-mode-constants", + "examples": [] + }, + { + "name": "chown.file.destination.gid", + "link": "chown-file-destination-gid-doc", + "type": "int", + "definition": "New GID of the chown-ed file's owner", + "prefixes": [ + "chown" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "chown.file.destination.group", + "link": "chown-file-destination-group-doc", + "type": "string", + "definition": "New group of the chown-ed file's owner", + "prefixes": [ + "chown" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "chown.file.destination.uid", + "link": "chown-file-destination-uid-doc", + "type": "int", + "definition": "New UID of the chown-ed file's owner", + "prefixes": [ + "chown" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "chown.file.destination.user", + "link": "chown-file-destination-user-doc", + "type": "string", + "definition": "New user of the chown-ed file's owner", + "prefixes": [ + "chown" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "container.id", + "link": "container-id-doc", + "type": "string", + "definition": "ID of the container", + "prefixes": [ + "container" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "container.tags", + "link": "container-tags-doc", + "type": "string", + "definition": "Tags of the container", + "prefixes": [ + "container" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "dns.id", + "link": "dns-id-doc", + "type": "int", + "definition": "[Experimental] the DNS request ID", + "prefixes": [ + "dns" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "dns.question.class", + "link": "dns-question-class-doc", + "type": "int", + "definition": "the class looked up by the DNS question", + "prefixes": [ + "dns" + ], + "constants": "DNS qclasses", + "constants_link": "dns-qclasses", + "examples": [] + }, + { + "name": "dns.question.count", + "link": "dns-question-count-doc", + "type": "int", + "definition": "the total count of questions in the DNS request", + "prefixes": [ + "dns" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "dns.question.length", + "link": "dns-question-length-doc", + "type": "int", + "definition": "the total DNS request size in bytes", + "prefixes": [ + "dns" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "dns.question.name", + "link": "dns-question-name-doc", + "type": "string", + "definition": "the queried domain name", + "prefixes": [ + "dns" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "dns.question.type", + "link": "dns-question-type-doc", + "type": "int", + "definition": "a two octet code which specifies the DNS question type", + "prefixes": [ + "dns" + ], + "constants": "DNS qtypes", + "constants_link": "dns-qtypes", + "examples": [] + }, + { + "name": "exit.cause", + "link": "exit-cause-doc", + "type": "int", + "definition": "Cause of the process termination (one of EXITED, SIGNALED, COREDUMPED)", + "prefixes": [ + "exit" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "exit.code", + "link": "exit-code-doc", + "type": "int", + "definition": "Exit code of the process or number of the signal that caused the process to terminate", + "prefixes": [ + "exit" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "load_module.loaded_from_memory", + "link": "load_module-loaded_from_memory-doc", + "type": "bool", + "definition": "Indicates if the kernel module was loaded from memory", + "prefixes": [ + "load_module" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "load_module.name", + "link": "load_module-name-doc", + "type": "string", + "definition": "Name of the new kernel module", + "prefixes": [ + "load_module" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "mkdir.file.destination.mode", + "link": "mkdir-file-destination-mode-doc", + "type": "int", + "definition": "Mode of the new directory", + "prefixes": [ + "mkdir" + ], + "constants": "Chmod mode constants", + "constants_link": "chmod-mode-constants", + "examples": [] + }, + { + "name": "mkdir.file.destination.rights", + "link": "mkdir-file-destination-rights-doc", + "type": "int", + "definition": "Rights of the new directory", + "prefixes": [ + "mkdir" + ], + "constants": "Chmod mode constants", + "constants_link": "chmod-mode-constants", + "examples": [] + }, + { + "name": "mmap.flags", + "link": "mmap-flags-doc", + "type": "int", + "definition": "memory segment flags", + "prefixes": [ + "mmap" + ], + "constants": "MMap flags", + "constants_link": "mmap-flags", + "examples": [] + }, + { + "name": "mmap.protection", + "link": "mmap-protection-doc", + "type": "int", + "definition": "memory segment protection", + "prefixes": [ + "mmap" + ], + "constants": "Protection constants", + "constants_link": "protection-constants", + "examples": [] + }, + { + "name": "mount.fs_type", + "link": "mount-fs_type-doc", + "type": "string", + "definition": "Type of the mounted file system", + "prefixes": [ + "mount" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "mount.mountpoint.path", + "link": "mount-mountpoint-path-doc", + "type": "string", + "definition": "Path of the mount point", + "prefixes": [ + "mount" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "mount.source.path", + "link": "mount-source-path-doc", + "type": "string", + "definition": "Source path of a bind mount", + "prefixes": [ + "mount" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "mprotect.req_protection", + "link": "mprotect-req_protection-doc", + "type": "int", + "definition": "new memory segment protection", + "prefixes": [ + "mprotect" + ], + "constants": "Virtual Memory flags", + "constants_link": "virtual-memory-flags", + "examples": [] + }, + { + "name": "mprotect.vm_protection", + "link": "mprotect-vm_protection-doc", + "type": "int", + "definition": "initial memory segment protection", + "prefixes": [ + "mprotect" + ], + "constants": "Virtual Memory flags", + "constants_link": "virtual-memory-flags", + "examples": [] + }, + { + "name": "network.device.ifindex", + "link": "network-device-ifindex-doc", + "type": "int", + "definition": "interface ifindex", + "prefixes": [ + "network.device" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "network.device.ifname", + "link": "network-device-ifname-doc", + "type": "string", + "definition": "interface ifname", + "prefixes": [ + "network.device" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "network.l3_protocol", + "link": "network-l3_protocol-doc", + "type": "int", + "definition": "l3 protocol of the network packet", + "prefixes": [ + "network" + ], + "constants": "L3 protocols", + "constants_link": "l3-protocols", + "examples": [] + }, + { + "name": "network.l4_protocol", + "link": "network-l4_protocol-doc", + "type": "int", + "definition": "l4 protocol of the network packet", + "prefixes": [ + "network" + ], + "constants": "L4 protocols", + "constants_link": "l4-protocols", + "examples": [] + }, + { + "name": "network.size", + "link": "network-size-doc", + "type": "int", + "definition": "size in bytes of the network packet", + "prefixes": [ + "network" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "open.file.destination.mode", + "link": "open-file-destination-mode-doc", + "type": "int", + "definition": "Mode of the created file", + "prefixes": [ + "open" + ], + "constants": "Chmod mode constants", + "constants_link": "chmod-mode-constants", + "examples": [] + }, + { + "name": "open.flags", + "link": "open-flags-doc", + "type": "int", + "definition": "Flags used when opening the file", + "prefixes": [ + "open" + ], + "constants": "Open flags", + "constants_link": "open-flags", + "examples": [] + }, + { + "name": "ptrace.request", + "link": "ptrace-request-doc", + "type": "int", + "definition": "ptrace request", + "prefixes": [ + "ptrace" + ], + "constants": "Ptrace constants", + "constants_link": "ptrace-constants", + "examples": [] + }, + { + "name": "selinux.bool.name", + "link": "selinux-bool-name-doc", + "type": "string", + "definition": "SELinux boolean name", + "prefixes": [ + "selinux" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "selinux.bool.state", + "link": "selinux-bool-state-doc", + "type": "string", + "definition": "SELinux boolean new value", + "prefixes": [ + "selinux" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "selinux.bool_commit.state", + "link": "selinux-bool_commit-state-doc", + "type": "bool", + "definition": "Indicator of a SELinux boolean commit operation", + "prefixes": [ + "selinux" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "selinux.enforce.status", + "link": "selinux-enforce-status-doc", + "type": "string", + "definition": "SELinux enforcement status (one of \"enforcing\", \"permissive\", \"disabled\")", + "prefixes": [ + "selinux" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "setgid.egid", + "link": "setgid-egid-doc", + "type": "int", + "definition": "New effective GID of the process", + "prefixes": [ + "setgid" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "setgid.egroup", + "link": "setgid-egroup-doc", + "type": "string", + "definition": "New effective group of the process", + "prefixes": [ + "setgid" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "setgid.fsgid", + "link": "setgid-fsgid-doc", + "type": "int", + "definition": "New FileSystem GID of the process", + "prefixes": [ + "setgid" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "setgid.fsgroup", + "link": "setgid-fsgroup-doc", + "type": "string", + "definition": "New FileSystem group of the process", + "prefixes": [ + "setgid" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "setgid.gid", + "link": "setgid-gid-doc", + "type": "int", + "definition": "New GID of the process", + "prefixes": [ + "setgid" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "setgid.group", + "link": "setgid-group-doc", + "type": "string", + "definition": "New group of the process", + "prefixes": [ + "setgid" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "setuid.euid", + "link": "setuid-euid-doc", + "type": "int", + "definition": "New effective UID of the process", + "prefixes": [ + "setuid" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "setuid.euser", + "link": "setuid-euser-doc", + "type": "string", + "definition": "New effective user of the process", + "prefixes": [ + "setuid" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "setuid.fsuid", + "link": "setuid-fsuid-doc", + "type": "int", + "definition": "New FileSystem UID of the process", + "prefixes": [ + "setuid" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "setuid.fsuser", + "link": "setuid-fsuser-doc", + "type": "string", + "definition": "New FileSystem user of the process", + "prefixes": [ + "setuid" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "setuid.uid", + "link": "setuid-uid-doc", + "type": "int", + "definition": "New UID of the process", + "prefixes": [ + "setuid" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "setuid.user", + "link": "setuid-user-doc", + "type": "string", + "definition": "New user of the process", + "prefixes": [ + "setuid" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "signal.pid", + "link": "signal-pid-doc", + "type": "int", + "definition": "Target PID", + "prefixes": [ + "signal" + ], + "constants": "", + "constants_link": "", + "examples": [] + }, + { + "name": "signal.type", + "link": "signal-type-doc", + "type": "int", + "definition": "Signal type (ex: SIGHUP, SIGINT, SIGQUIT, etc)", + "prefixes": [ + "signal" + ], + "constants": "Signal constants", + "constants_link": "signal-constants", + "examples": [] + }, + { + "name": "splice.pipe_entry_flag", + "link": "splice-pipe_entry_flag-doc", + "type": "int", + "definition": "Entry flag of the \"fd_out\" pipe passed to the splice syscall", + "prefixes": [ + "splice" + ], + "constants": "Pipe buffer flags", + "constants_link": "pipe-buffer-flags", + "examples": [] + }, + { + "name": "splice.pipe_exit_flag", + "link": "splice-pipe_exit_flag-doc", + "type": "int", + "definition": "Exit flag of the \"fd_out\" pipe passed to the splice syscall", + "prefixes": [ + "splice" + ], + "constants": "Pipe buffer flags", + "constants_link": "pipe-buffer-flags", + "examples": [] + }, + { + "name": "unlink.flags", + "link": "unlink-flags-doc", + "type": "int", + "definition": "Flags of the unlink syscall", + "prefixes": [ + "unlink" + ], + "constants": "Unlink flags", + "constants_link": "unlink-flags", + "examples": [] + }, + { + "name": "unload_module.name", + "link": "unload_module-name-doc", + "type": "string", + "definition": "Name of the kernel module that was deleted", + "prefixes": [ + "unload_module" + ], + "constants": "", + "constants_link": "", + "examples": [] } ], "constants": [ { "name": "BPF attach types", + "link": "bpf-attach-types", "description": "BPF attach types are the supported eBPF program attach types.", "all": [ { @@ -6859,6 +8247,7 @@ }, { "name": "BPF commands", + "link": "bpf-commands", "description": "BPF commands are used to specify a command to a bpf syscall.", "all": [ { @@ -7013,6 +8402,7 @@ }, { "name": "BPF helper functions", + "link": "bpf-helper-functions", "description": "BPF helper functions are the supported BPF helper functions.", "all": [ { @@ -7683,6 +9073,7 @@ }, { "name": "BPF map types", + "link": "bpf-map-types", "description": "BPF map types are the supported eBPF map types.", "all": [ { @@ -7809,6 +9200,7 @@ }, { "name": "BPF program types", + "link": "bpf-program-types", "description": "BPF program types are the supported eBPF program types.", "all": [ { @@ -7939,6 +9331,7 @@ }, { "name": "Chmod mode constants", + "link": "chmod-mode-constants", "description": "Chmod mode constants are the supported modes for the chmod syscall.", "all": [ { @@ -8037,6 +9430,7 @@ }, { "name": "DNS qclasses", + "link": "dns-qclasses", "description": "DNS qclasses are the supported DNS query classes.", "all": [ { @@ -8067,6 +9461,7 @@ }, { "name": "DNS qtypes", + "link": "dns-qtypes", "description": "DNS qtypes are the supported DNS query types.", "all": [ { @@ -8408,8 +9803,9 @@ ] }, { - "name": "Error Constants", - "description": "Error Constants are the supported error constants.", + "name": "Error constants", + "link": "error-constants", + "description": "Error constants are the supported error constants.", "all": [ { "name": "E2BIG", @@ -8947,6 +10343,7 @@ }, { "name": "Kernel Capability constants", + "link": "kernel-capability-constants", "description": "Kernel Capability constants are the supported Linux Kernel Capability.", "all": [ { @@ -9121,6 +10518,7 @@ }, { "name": "L3 protocols", + "link": "l3-protocols", "description": "L3 protocols are the supported Layer 3 protocols.", "all": [ { @@ -9487,6 +10885,7 @@ }, { "name": "L4 protocols", + "link": "l4-protocols", "description": "L4 protocols are the supported Layer 4 protocols.", "all": [ { @@ -9601,6 +11000,7 @@ }, { "name": "MMap flags", + "link": "mmap-flags", "description": "MMap flags are the supported flags for the mmap syscall.", "all": [ { @@ -9735,6 +11135,7 @@ }, { "name": "Network Address Family constants", + "link": "network-address-family-constants", "description": "Network Address Family constants are the supported network address families.", "all": [ { @@ -9937,6 +11338,7 @@ }, { "name": "Open flags", + "link": "open-flags", "description": "Open flags are the supported flags for the open syscall.", "all": [ { @@ -10027,6 +11429,7 @@ }, { "name": "Pipe buffer flags", + "link": "pipe-buffer-flags", "description": "Pipe buffer flags are the supported flags for a pipe buffer.", "all": [ { @@ -10061,6 +11464,7 @@ }, { "name": "Protection constants", + "link": "protection-constants", "description": "Protection constants are the supported protections for the mmap syscall.", "all": [ { @@ -10091,6 +11495,7 @@ }, { "name": "Ptrace constants", + "link": "ptrace-constants", "description": "Ptrace constants are the supported ptrace commands for the ptrace syscall.", "all": [ { @@ -10309,6 +11714,7 @@ }, { "name": "SecL constants", + "link": "secl-constants", "description": "SecL constants are the supported generic SecL constants.", "all": [ { @@ -10323,6 +11729,7 @@ }, { "name": "Signal constants", + "link": "signal-constants", "description": "Signal constants are the supported signals for the kill syscall.", "all": [ { @@ -10461,6 +11868,7 @@ }, { "name": "Unlink flags", + "link": "unlink-flags", "description": "Unlink flags are the supported flags for the unlink syscall.", "all": [ { @@ -10471,6 +11879,7 @@ }, { "name": "Virtual Memory flags", + "link": "virtual-memory-flags", "description": "Virtual Memory flags define the protection of a virtual memory segment.", "all": [ { diff --git a/docs/components/defining-bundles.md b/docs/components/defining-bundles.md index 0a0342ff33afb..0b8b58a98a0bf 100644 --- a/docs/components/defining-bundles.md +++ b/docs/components/defining-bundles.md @@ -16,7 +16,7 @@ The package must have the following defined in `bundle.go`: * A team-name comment of the form `// team: `. This is used to generate CODEOWNERS information. - * `BundleParams` -- the type of the bundle's parameters (see below). + * An optional `BundleParams` -- the type of the bundle's parameters (see below). This item should have a formulaic doc string like `// BundleParams defines the parameters for this bundle.` * `Bundle` -- an `fx.Option` that can be included in an `fx.App` to make this bundle's components available. @@ -37,41 +37,31 @@ These parameters are limited to two kinds: Anything else is runtime configuration and should be handled vi `comp/core/config` or another mechanism. -To avoid Go package cycles, the `BundleParams` type must be defined in the bundle's internal package, and re-exported from the bundle package: - -```go -// --- comp//internal/params.go --- - -// BundleParams defines the parameters for this bundle. -type BundleParams struct { - ... -} -``` +Bundle parameters must stored only `Params` types for sub components. The reason is that each sub component +must be usable without `BundleParams`. ```go // --- comp//bundle.go --- -import ".../comp//internal" import ".../comp//foo" +import ".../comp//bar" // ... // BundleParams defines the parameters for this bundle. -type BundleParams = internal.BundleParams +type BundleParams struct { + Foo foo.Params + Bar bar.Params +} var Bundle = fxutil.Bundle( + // You must tell to fx how to get foo.Params from BundleParams. + fx.Provide(func(params BundleParams) foo.Params { return params.Foo }), foo.Module, + // You must tell to fx how to get bar.Params from BundleParams. + fx.Provide(func(params BundleParams) bar.Params { return params.Bar }), + bar.Module, ) ``` -Components within the bundle can then require `internal.BundleParams` and modify their behavior appropriately: - -```go -// --- comp//foo/foo.go - -func newFoo(..., params internal.BundleParams) provides { - if params.HyperMode { ... } -} -``` - ## Testing A bundle should have a test file, `bundle_test.go`, to verify the documentation's claim about its dependencies. diff --git a/docs/dev/agent_dev_env.md b/docs/dev/agent_dev_env.md index 5462290defa3e..496b3b99323c3 100644 --- a/docs/dev/agent_dev_env.md +++ b/docs/dev/agent_dev_env.md @@ -1,6 +1,8 @@ -# Linux and MacOS Development Environments +# Development Environments -## Python +## Linux and MacOS + +### Python The Agent embeds a full-fledged CPython interpreter so it requires the development files to be available in the dev env. The Agent can embed Python2 @@ -28,7 +30,7 @@ sudo apt-get install python3.8-dev On Windows, install Python 2.7 and/or 3.8 via the [official installer](https://www.python.org/downloads/). -### Additional Windows Tools +#### Additional Windows Tools You will also need the Visual Studio for [Visual Studio for Python installer](http://aka.ms/vcpython27) Download the [gcc toolchain](http://win-builds.org/). @@ -37,9 +39,9 @@ Download the [gcc toolchain](http://win-builds.org/). - Add installation folder to the `%PATH%`. -### Python Dependencies +#### Python Dependencies -#### Preface +##### Preface To protect and isolate your system-wide python installation, a python virtual environment is _highly_ recommended (though optional). It will help keep a @@ -66,7 +68,7 @@ though). PYTHONPATH="./venv/lib/python3.8/site-packages:$PYTHONPATH" ./agent run ... ``` -### Invoke +#### Invoke [Invoke](http://www.pyinvoke.org/) is a task runner written in Python that is extensively used in this project to orchestrate builds and test @@ -91,9 +93,9 @@ are used in the official build. Such values are listed in the `invoke.yaml` file at the root of this repo and can be overridden by setting `INVOKE_*` env variables (see Invoke docs for more details). -## Golang +### Golang -You must [install Golang](https://golang.org/doc/install) version `1.18.9` or +You must [install Golang](https://golang.org/doc/install) version `1.19.5` or higher. Make sure that `$GOPATH/bin` is in your `$PATH` otherwise `invoke` cannot use any additional tool it might need. @@ -102,18 +104,18 @@ specified in our build images (see e.g. [here](https://github.com/DataDog/datado may not be able to build the agent and/or the [rtloader](https://github.com/DataDog/datadog-agent/tree/main/rtloader) binary properly.** -## Installing tooling +### Installing tooling From the root of `datadog-agent`, run `invoke install-tools` to install go tooling. This uses `go` to install the necessary dependencies. -## System or Embedded? +### System or Embedded? When working on the Agent codebase you can choose among two different ways to build the binary, informally named _System_ and _Embedded_ builds. For most contribution scenarios you should rely on the System build (the default) and use the Embedded one only for specific use cases. Let's explore the differences. -### System build +#### System build _System_ builds use your operating system's standard system libraries to satisfy the Agent's external dependencies. Since, for example, macOS 10.11 may provide a @@ -126,7 +128,7 @@ sure you have system copies of all the Agent's dependencies, skip the _Embedded build_ section below and read on to see how to install them via your usual package manager (apt, yum, brew, etc). -### Embedded build +#### Embedded build _Embedded_ builds download specifically-versioned dependencies and compile them locally from sources. We run Embedded builds to create Datadog's official Agent @@ -146,7 +148,7 @@ and build dependencies, so you need a recent `ruby` environment with `bundler` installed. See [how to build Agent packages with Omnibus][agent-omnibus] for more details. -### Systemd +#### Systemd The agent is able to collect systemd journal logs using a wrapper on the systemd utility library. @@ -160,7 +162,7 @@ On Redhat/CentOS: sudo yum install systemd-devel ``` -## Docker +### Docker If you want to build a Docker image containing the Agent, or if you wan to run [system and integration tests][testing] you need to run a recent version of Docker in your @@ -173,7 +175,7 @@ dev environment. [integrations-core]: https://github.com/DataDog/integrations-core [datadog_checks_base]: https://github.com/DataDog/integrations-core/tree/master/datadog_checks_base -## Doxygen +### Doxygen We use [Doxygen](http://www.doxygen.nl/) to generate the documentation for the `rtloader` part of the Agent. @@ -182,11 +184,11 @@ Alternatively, you can use already-compiled Doxygen binaries from [here](http:// To get the dependency graphs, you may also need to install the `dot` executable from [graphviz](http://www.graphviz.org/) and add it to your `$PATH`. -## Pre-commit hooks +### Pre-commit hooks It is optional but recommended to install `pre-commit` to run a number of checks done by the CI locally. -### Installation +#### Installation To install it, run: @@ -204,11 +206,11 @@ inv install-shellcheck --destination (by default, the shellcheck binary is installed in `/usr/local/bin`). -### Skipping `pre-commit` +#### Skipping `pre-commit` If you want to skip `pre-commit` for a specific commit you can add `--no-verify` to the `git commit` command. -### Running `pre-commit` manually +#### Running `pre-commit` manually If you want to run one of the checks manually, you can run `pre-commit run `. @@ -219,15 +221,7 @@ pre-commit run flake8 --all-files # run flake8 on all files See `pre-commit run --help` for further options. -## Setting up your Windows development environment - -### Code editor - -[Microsoft Visual Studio Code](https://code.visualstudio.com/download) is recommended as it's lightweight and versatile. - -Building on Windows would require multiple 3rd-party softwares to be installed. To avoid the complexity, it is recommended to make the code change in VS Code then do the build in Docker image. For complete information, see [Build the Agent packages](https://github.com/DataDog/datadog-agent/blob/main/docs/dev/agent_omnibus.md) - -## Setting up Visual Studio Code Dev Container +### Setting up Visual Studio Code Dev Container [Microsoft Visual Studio Code](https://code.visualstudio.com/download) with the [devcontainer plugin](https://code.visualstudio.com/docs/remote/containers) allow to use a container as remote development environment in vscode. It simplify and isolate the dependencies needed to develop in this repository. @@ -241,3 +235,10 @@ To configure the vscode editor to use a container as remote development environm - A pop-up should show-up to propose to "reopen in container" your workspace. - The first start, it might propose you to install the golang plugin dependencies/tooling. +## Windows development environment + +### Code editor + +[Microsoft Visual Studio Code](https://code.visualstudio.com/download) is recommended as it's lightweight and versatile. + +Building on Windows requires multiple 3rd-party software to be installed. To avoid the complexity, Datadog recommends to make the code change in VS Code, and then do the build in Docker image. For complete information, see [Build the Agent packages](https://github.com/DataDog/datadog-agent/blob/main/docs/dev/agent_omnibus.md) diff --git a/docs/dev/agent_memory.md b/docs/dev/agent_memory.md index ba99fc5f8bd64..ff0c3e42db55a 100644 --- a/docs/dev/agent_memory.md +++ b/docs/dev/agent_memory.md @@ -136,9 +136,40 @@ available in the links below. Python, another runtime in the Agent process, is also garbage collected. Datadog offers two tools with the Agent that can help you identify memory issues: -- Trracemalloc +- Python memory telemetry (Python 3 only) +- Tracemalloc - Pympler +### Python memory telemetry + +Python memory telemetry hooks into low-level allocator routines, to +provide a coarse view of the total memory allocated by the Python +memory manager. + +Python memory telemetry is only available when using Python 3 (Python +2 lacks the hooks necessary to implement this). + +Python memory telemetry is part of the Agent internal telemetry and is +enabled by default. Set `telemetry.python_memory: false` to disable. + +| Internal name | Default metric name | Description | +|----------------|-----------------------------|----------------------------------------------------------------| +| `pymem__alloc` | `datadog.agent.pymem.alloc` | Total number of bytes allocated since the start of the Agent. | +| `pymem__inuse` | `datadog.agent.pymem.inuse` | Number of bytes currently allocated by the Python interpreter. | + +The Python memory manager internally maintains a small reserve of +unused memory, so the numbers provided by this tool may be slightly +larger than the memory actually used by the Python code. + +This telemetry represents memory allocated by pymalloc and the raw +allocator (See [Memory management] in the Python manual). It does not +include memory allocated by native extensions and libraries directly +via libc. + +[Memory management]: https://docs.python.org/3/c-api/memory.html + +### Tracemalloc + Tracemalloc is part of the CPython interpreter, and tracks allocations and frees. It's implemented efficiently and runs with relatively low overhead. It also allows the user to compare memory in different points in time to diff --git a/go.mod b/go.mod index e023b28b200f3..670f447f1acae 100644 --- a/go.mod +++ b/go.mod @@ -19,8 +19,6 @@ retract ( replace ( github.com/cihub/seelog => github.com/cihub/seelog v0.0.0-20151216151435-d2c6e5aa9fbf // v2.6 github.com/coreos/go-systemd => github.com/coreos/go-systemd v0.0.0-20180202092358-40e2722dffea - github.com/docker/distribution => github.com/docker/distribution v2.8.1+incompatible - github.com/lxn/walk => github.com/lxn/walk v0.0.0-20180521183810-02935bac0ab8 github.com/mholt/archiver => github.com/mholt/archiver v2.0.1-0.20171012052341-26cf5bb32d07+incompatible github.com/spf13/cast => github.com/DataDog/cast v1.3.1-0.20190301154711-1ee8c8bd14a3 github.com/ugorji/go => github.com/ugorji/go v1.1.7 @@ -35,6 +33,7 @@ replace ( github.com/DataDog/datadog-agent/pkg/trace => ./pkg/trace github.com/DataDog/datadog-agent/pkg/util/cgroups => ./pkg/util/cgroups github.com/DataDog/datadog-agent/pkg/util/log => ./pkg/util/log + github.com/DataDog/datadog-agent/pkg/util/pointer => ./pkg/util/pointer github.com/DataDog/datadog-agent/pkg/util/scrubber => ./pkg/util/scrubber ) @@ -42,19 +41,22 @@ require ( code.cloudfoundry.org/bbs v0.0.0-20200403215808-d7bc971db0db code.cloudfoundry.org/garden v0.0.0-20210208153517-580cadd489d2 code.cloudfoundry.org/lager v2.0.0+incompatible - github.com/DataDog/agent-payload/v5 v5.0.50 - github.com/DataDog/datadog-agent/pkg/obfuscate v0.42.0-rc.3 - github.com/DataDog/datadog-agent/pkg/otlp/model v0.42.0-rc.3 - github.com/DataDog/datadog-agent/pkg/quantile v0.42.0-rc.3 - github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.42.0-rc.3 - github.com/DataDog/datadog-agent/pkg/security/secl v0.42.0-rc.3 - github.com/DataDog/datadog-agent/pkg/trace v0.42.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/cgroups v0.42.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.42.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.42.0-rc.3 + github.com/CycloneDX/cyclonedx-go v0.7.0 + github.com/DataDog/agent-payload/v5 v5.0.67 + github.com/DataDog/datadog-agent/pkg/obfuscate v0.43.0-rc.3 + github.com/DataDog/datadog-agent/pkg/otlp/model v0.43.0-rc.3 + github.com/DataDog/datadog-agent/pkg/quantile v0.43.0-rc.3 + github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.43.0-rc.3 + github.com/DataDog/datadog-agent/pkg/security/secl v0.43.0-rc.3 + github.com/DataDog/datadog-agent/pkg/trace v0.43.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/cgroups v0.43.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/log v0.43.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/pointer v0.43.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.43.0-rc.3 github.com/DataDog/datadog-go/v5 v5.1.1 github.com/DataDog/datadog-operator v0.7.1-0.20220602134901-4f6af09bf54f - github.com/DataDog/ebpf-manager v0.1.0 + github.com/DataDog/ebpf-manager v0.2.1 + github.com/DataDog/go-libddwaf v0.0.0-20221118110754-0372d7c76b8a github.com/DataDog/go-tuf v0.3.0--fix-localmeta-fork github.com/DataDog/gohai v0.0.0-20221116153829-5d479901d2e9 github.com/DataDog/gopsutil v1.2.2 @@ -65,29 +67,31 @@ require ( github.com/DataDog/zstd v1.5.2 github.com/DataDog/zstd_0 v0.0.0-20210310093942-586c1286621f github.com/Masterminds/semver v1.5.0 + github.com/Masterminds/semver/v3 v3.2.0 github.com/Masterminds/sprig/v3 v3.2.3 - github.com/Microsoft/go-winio v0.5.2 - github.com/Microsoft/hcsshim v0.9.4 + github.com/Microsoft/go-winio v0.6.0 + github.com/Microsoft/hcsshim v0.9.6 github.com/acobaugh/osrelease v0.1.0 github.com/alecthomas/participle v0.7.1 github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1 github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 - github.com/avast/retry-go/v4 v4.3.1 + github.com/aquasecurity/trivy v0.34.0 + github.com/aquasecurity/trivy-db v0.0.0-20230105123735-5ce110fc82e1 + github.com/avast/retry-go/v4 v4.3.2 github.com/aws/aws-lambda-go v1.32.0 - github.com/aws/aws-sdk-go v1.44.117 + github.com/aws/aws-sdk-go v1.44.171 github.com/beevik/ntp v0.3.0 github.com/benbjohnson/clock v1.3.0 - github.com/benesch/cgosymbolizer v0.0.0-20190515212042-bec6fe6e597b github.com/bhmj/jsonslice v0.0.0-20200323023432-92c3edaad8e2 github.com/blabber/go-freebsd-sysctl v0.0.0-20201130114544-503969f39d8f github.com/cenkalti/backoff v2.2.1+incompatible github.com/cenkalti/backoff/v4 v4.2.0 github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 - github.com/cilium/ebpf v0.9.3 + github.com/cilium/ebpf v0.10.0 github.com/clbanning/mxj v1.8.4 github.com/cloudfoundry-community/go-cfclient v0.0.0-20210621174645-7773f7e22665 github.com/containerd/cgroups v1.0.4 - github.com/containerd/containerd v1.6.8 + github.com/containerd/containerd v1.6.15 github.com/containerd/typeurl v1.0.2 github.com/containernetworking/cni v1.1.2 github.com/coreos/go-semver v0.3.0 @@ -95,16 +99,18 @@ require ( github.com/cri-o/ocicni v0.4.0 github.com/cyphar/filepath-securejoin v0.2.3 github.com/davecgh/go-spew v1.1.1 - github.com/docker/docker v20.10.17+incompatible + github.com/docker/docker v23.0.0-rc.1+incompatible github.com/docker/go-connections v0.4.0 - github.com/docker/libnetwork v0.5.6 github.com/dustin/go-humanize v1.0.0 github.com/elastic/go-libaudit v0.4.0 + github.com/evanphx/json-patch v5.6.0+incompatible github.com/fatih/color v1.13.0 github.com/freddierice/go-losetup v0.0.0-20170407175016-fc9adea44124 + github.com/fsnotify/fsnotify v1.6.0 github.com/go-delve/delve v1.9.1 github.com/go-ini/ini v1.67.0 github.com/go-ole/go-ole v1.2.6 + github.com/go-redis/redis/v9 v9.0.0-rc.2 github.com/gobwas/glob v0.2.3 github.com/godbus/dbus v4.1.0+incompatible github.com/gogo/protobuf v1.3.2 @@ -112,6 +118,8 @@ require ( github.com/golang/mock v1.6.0 github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.9 + github.com/google/go-containerregistry v0.12.0 + github.com/google/gofuzz v1.2.0 github.com/google/gopacket v1.1.19 github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 github.com/gorilla/mux v1.8.0 @@ -119,7 +127,7 @@ require ( github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/h2non/filetype v1.1.2-0.20210602110014-3305bbb7ac7b - github.com/hashicorp/consul/api v1.13.0 + github.com/hashicorp/consul/api v1.18.0 github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/golang-lru v0.5.4 github.com/hashicorp/golang-lru/v2 v2.0.1 @@ -128,11 +136,11 @@ require ( github.com/imdario/mergo v0.3.13 github.com/invopop/jsonschema v0.7.0 github.com/iovisor/gobpf v0.2.0 - github.com/itchyny/gojq v0.12.10 + github.com/itchyny/gojq v0.12.11 github.com/json-iterator/go v1.1.12 github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 - github.com/lxn/walk v0.0.0-20191128110447-55ccb3a9f5c1 - github.com/lxn/win v0.0.0-20191128105842-2da648fda5b4 + github.com/lxn/walk v0.0.0-20210112085537-c389da54e794 + github.com/lxn/win v0.0.0-20210218163916-a377121e959e github.com/mailru/easyjson v0.7.7 github.com/mdlayher/netlink v1.6.2 github.com/mholt/archiver/v3 v3.5.1 @@ -143,30 +151,40 @@ require ( github.com/netsampler/goflow2 v1.1.1-0.20220825033856-d6caeaacddbb github.com/olekukonko/tablewriter v0.0.5 github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852 - github.com/open-policy-agent/opa v0.45.0 - github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.64.0 - github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 - github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 + github.com/open-policy-agent/opa v0.48.0 + github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.70.0 + github.com/opencontainers/go-digest v1.0.0 + github.com/opencontainers/image-spec v1.1.0-rc2 + github.com/opencontainers/runtime-spec v1.0.3-0.20220311020903-6969a0a09ab1 github.com/openshift/api v3.9.0+incompatible github.com/pahanini/go-grpc-bidirectional-streaming-example v0.0.0-20211027164128-cc6111af44be github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.14.0 + github.com/prometheus/client_model v0.3.0 + github.com/prometheus/procfs v0.9.0 github.com/richardartoul/molecule v0.0.0-20210914193524-25d8911bb85b github.com/robfig/cron/v3 v3.0.1 + github.com/samber/lo v1.36.0 github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da - github.com/shirou/gopsutil/v3 v3.22.10 + github.com/secure-systems-lab/go-securesystemslib v0.4.0 + github.com/shirou/gopsutil/v3 v3.22.12 github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 github.com/sirupsen/logrus v1.9.0 + github.com/skydive-project/go-debouncer v1.0.0 github.com/smira/go-xz v0.0.0-20150414201226-0c531f070014 github.com/spf13/afero v1.9.3 github.com/spf13/cast v1.5.0 github.com/spf13/cobra v1.6.1 github.com/spf13/pflag v1.0.5 + github.com/streadway/amqp v1.0.0 github.com/stretchr/testify v1.8.1 github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 github.com/tinylib/msgp v1.1.6 github.com/twmb/murmur3 v1.1.6 + github.com/uptrace/bun v1.1.9 + github.com/uptrace/bun/dialect/pgdialect v1.1.9 + github.com/uptrace/bun/driver/pgdriver v1.1.9 github.com/urfave/negroni v1.0.0 github.com/vishvananda/netlink v1.2.0-beta.0.20220404152918-5e915e014938 github.com/vishvananda/netns v0.0.0-20220913150850-18c4f4234207 @@ -175,28 +193,33 @@ require ( github.com/xeipuuv/gojsonschema v1.2.0 go.etcd.io/bbolt v1.3.6 go.etcd.io/etcd/client/v2 v2.306.0-alpha.0 - go.opentelemetry.io/collector v0.66.0 - go.opentelemetry.io/collector/component v0.66.0 - go.opentelemetry.io/collector/exporter/loggingexporter v0.66.0 - go.opentelemetry.io/collector/exporter/otlpexporter v0.66.0 - go.opentelemetry.io/collector/pdata v0.66.0 - go.opentelemetry.io/collector/processor/batchprocessor v0.66.0 - go.opentelemetry.io/collector/receiver/otlpreceiver v0.66.0 + go.mongodb.org/mongo-driver v1.11.1 + go.opentelemetry.io/collector v0.70.0 + go.opentelemetry.io/collector/component v0.70.0 + go.opentelemetry.io/collector/confmap v0.70.0 + go.opentelemetry.io/collector/exporter/loggingexporter v0.70.0 + go.opentelemetry.io/collector/exporter/otlpexporter v0.70.0 + go.opentelemetry.io/collector/pdata v1.0.0-rc4 + go.opentelemetry.io/collector/processor/batchprocessor v0.70.0 + go.opentelemetry.io/collector/receiver/otlpreceiver v0.70.0 go.uber.org/atomic v1.10.0 go.uber.org/automaxprocs v1.5.1 - go.uber.org/multierr v1.8.0 - go.uber.org/zap v1.23.0 + go.uber.org/dig v1.15.0 + go.uber.org/fx v1.18.2 + go.uber.org/multierr v1.9.0 + go.uber.org/zap v1.24.0 go4.org/netipx v0.0.0-20220812043211-3cc044ffd68d golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4 golang.org/x/exp v0.0.0-20221114191408-850992195362 - golang.org/x/net v0.4.0 + golang.org/x/net v0.5.0 golang.org/x/sync v0.1.0 - golang.org/x/sys v0.3.0 - golang.org/x/text v0.5.0 - golang.org/x/time v0.0.0-20220411224347-583f2d630306 - golang.org/x/tools v0.4.0 - google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c - google.golang.org/grpc v1.51.0 + golang.org/x/sys v0.4.0 + golang.org/x/text v0.6.0 + golang.org/x/time v0.1.0 + golang.org/x/tools v0.5.0 + golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 + google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 + google.golang.org/grpc v1.52.0 google.golang.org/grpc/examples v0.0.0-20221020162917-9127159caf5a google.golang.org/protobuf v1.28.1 gopkg.in/DataDog/dd-trace-go.v1 v1.37.0 @@ -204,27 +227,28 @@ require ( gopkg.in/yaml.v3 v3.0.1 gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 gotest.tools v2.2.0+incompatible - k8s.io/api v0.23.8 - k8s.io/apimachinery v0.23.8 - k8s.io/apiserver v0.23.8 + k8s.io/api v0.25.5 + k8s.io/apiextensions-apiserver v0.25.5 + k8s.io/apimachinery v0.25.5 + k8s.io/apiserver v0.25.5 k8s.io/autoscaler/vertical-pod-autoscaler v0.10.0 - k8s.io/client-go v0.23.8 - k8s.io/cri-api v0.23.8 + k8s.io/client-go v0.25.5 + k8s.io/cri-api v0.25.5 // Cannot be upgraded to 0.26 without lossing CRI API v1alpha2 k8s.io/klog v1.0.1-0.20200310124935-4ad0115ba9e4 // Min version that includes fix for Windows Nano - k8s.io/klog/v2 v2.60.1 - k8s.io/kube-openapi v0.0.0-20220124234850-424119656bbf + k8s.io/klog/v2 v2.80.1 + k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 k8s.io/kube-state-metrics/v2 v2.4.2 - k8s.io/kubelet v0.23.8 - k8s.io/metrics v0.23.8 - k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 - sigs.k8s.io/custom-metrics-apiserver v1.23.0 + k8s.io/kubelet v0.25.5 + k8s.io/metrics v0.25.5 + k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 + sigs.k8s.io/custom-metrics-apiserver v1.25.1 ) require ( cloud.google.com/go v0.105.0 // indirect cloud.google.com/go/compute v1.12.1 // indirect cloud.google.com/go/compute/metadata v0.2.1 // indirect - cloud.google.com/go/iam v0.6.0 // indirect + cloud.google.com/go/iam v0.7.0 // indirect cloud.google.com/go/storage v1.28.0 // indirect code.cloudfoundry.org/cfhttp/v2 v2.0.0 // indirect code.cloudfoundry.org/clock v1.0.0 // indirect @@ -240,60 +264,115 @@ require ( code.cloudfoundry.org/tlsconfig v0.0.0-20200131000646-bbe0f8da39b3 // indirect contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect github.com/AlekSi/pointer v1.1.0 // indirect - github.com/BurntSushi/toml v1.1.0 // indirect + github.com/Azure/azure-sdk-for-go v67.1.0+incompatible // indirect + github.com/Azure/go-autorest v14.2.0+incompatible // indirect + github.com/Azure/go-autorest/autorest v0.11.28 // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.21 // indirect + github.com/Azure/go-autorest/autorest/azure/auth v0.5.11 // indirect + github.com/Azure/go-autorest/autorest/azure/cli v0.4.5 // indirect + github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect + github.com/Azure/go-autorest/logger v0.2.1 // indirect + github.com/Azure/go-autorest/tracing v0.6.0 // indirect + github.com/BurntSushi/toml v1.2.1 // indirect github.com/DataDog/aptly v1.5.0 // indirect github.com/DataDog/extendeddaemonset v0.7.1-0.20220530183123-9c60ea5abbc6 // indirect github.com/DataDog/gostackparse v0.5.0 // indirect github.com/DataDog/mmh3 v0.0.0-20210722141835-012dc69a9e49 // indirect github.com/DisposaBoy/JsonConfigReader v0.0.0-20171218180944-5ea4d0ddac55 // indirect + github.com/GoogleCloudPlatform/docker-credential-gcr v2.0.5+incompatible // indirect github.com/Masterminds/goutils v1.1.1 // indirect - github.com/Masterminds/semver/v3 v3.2.0 github.com/NYTimes/gziphandler v1.1.1 // indirect github.com/OneOfOne/xxhash v1.2.8 // indirect - github.com/Sirupsen/logrus v1.0.6 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7 // indirect github.com/StackExchange/wmi v1.2.1 // indirect + github.com/VividCortex/ewma v1.1.1 // indirect + github.com/acomagu/bufpipe v1.0.3 // indirect + github.com/agext/levenshtein v1.2.3 // indirect github.com/agnivade/levenshtein v1.1.1 // indirect github.com/andybalholm/brotli v1.0.2 // indirect + github.com/aquasecurity/go-dep-parser v0.0.0-20230115135733-3be7cb085121 // indirect + github.com/aquasecurity/go-gem-version v0.0.0-20201115065557-8eed6fe000ce // indirect + github.com/aquasecurity/go-npm-version v0.0.0-20201110091526-0b796d180798 // indirect + github.com/aquasecurity/go-pep440-version v0.0.0-20210121094942-22b2f8951d46 // indirect + github.com/aquasecurity/go-version v0.0.0-20210121072130-637058cfe492 // indirect + github.com/aquasecurity/table v1.8.0 // indirect + github.com/aquasecurity/tml v0.6.1 // indirect github.com/arduino/go-apt-client v0.0.0-20190812130613-5613f843fdc8 // indirect - github.com/armon/go-metrics v0.3.10 // indirect + github.com/armon/go-metrics v0.4.0 // indirect + github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect github.com/awalterschulze/gographviz v2.0.1+incompatible // indirect + github.com/aws/aws-sdk-go-v2 v1.17.1 // indirect + github.com/aws/aws-sdk-go-v2/config v1.18.3 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.13.3 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.19 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.25 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.19 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.3.26 // indirect + github.com/aws/aws-sdk-go-v2/service/ebs v1.15.19 // indirect + github.com/aws/aws-sdk-go-v2/service/ec2 v1.63.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.19 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.11.25 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.8 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.17.5 // indirect + github.com/aws/smithy-go v1.13.4 // indirect github.com/beorn7/perks v1.0.1 // indirect + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/blang/semver v3.5.1+incompatible // indirect github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40 // indirect + github.com/briandowns/spinner v1.12.0 // indirect + github.com/caarlos0/env/v6 v6.10.1 // indirect github.com/cavaliergopher/grab/v3 v3.0.1 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect - github.com/containerd/continuity v0.2.2 // indirect + github.com/cheggaaa/pb/v3 v3.1.0 // indirect + github.com/containerd/continuity v0.3.0 // indirect github.com/containerd/fifo v1.0.0 // indirect - github.com/containerd/ttrpc v1.1.0 // indirect + github.com/containerd/stargz-snapshotter/estargz v0.13.0 // indirect + github.com/containerd/ttrpc v1.1.1-0.20220420014843-944ef4a40df3 // indirect github.com/containernetworking/plugins v1.1.1 // indirect - github.com/coreos/go-systemd/v22 v22.3.2 // indirect + github.com/coreos/go-systemd/v22 v22.4.0 // indirect github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f // indirect - github.com/dgraph-io/ristretto v0.1.0 // indirect github.com/dgryski/go-jump v0.0.0-20211018200510-ba001c3ffce0 // indirect - github.com/docker/distribution v2.7.1+incompatible // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/dimchansky/utfbom v1.1.1 // indirect + github.com/docker/cli v23.0.0-rc.1+incompatible // indirect + github.com/docker/distribution v2.8.1+incompatible // indirect + github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect - github.com/docker/go-units v0.4.0 // indirect + github.com/docker/go-units v0.5.0 // indirect github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect github.com/emicklei/go-restful v2.16.0+incompatible // indirect github.com/emicklei/go-restful-swagger12 v0.0.0-20201014110547-68ccff494617 // indirect - github.com/evanphx/json-patch v4.12.0+incompatible + github.com/emirpasic/gods v1.12.0 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect - github.com/fsnotify/fsnotify v1.6.0 github.com/ghodss/yaml v1.0.0 // indirect + github.com/go-errors/errors v1.4.2 // indirect + github.com/go-git/gcfg v1.5.0 // indirect + github.com/go-git/go-billy/v5 v5.3.1 // indirect + github.com/go-git/go-git/v5 v5.4.2 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect github.com/go-logr/logr v1.2.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-openapi/analysis v0.21.4 // indirect + github.com/go-openapi/errors v0.20.3 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.20.0 // indirect - github.com/go-openapi/swag v0.21.1 // indirect - github.com/go-test/deep v1.0.5 // indirect + github.com/go-openapi/loads v0.21.2 // indirect + github.com/go-openapi/runtime v0.24.2 // indirect + github.com/go-openapi/spec v0.20.7 // indirect + github.com/go-openapi/strfmt v0.21.3 // indirect + github.com/go-openapi/swag v0.22.3 // indirect + github.com/go-openapi/validate v0.22.0 // indirect + github.com/go-redis/redis/v8 v8.11.5 // indirect + github.com/go-test/deep v1.0.7 // indirect github.com/godbus/dbus/v5 v5.0.6 // indirect - github.com/gogo/googleapis v1.4.0 // indirect + github.com/gogo/googleapis v1.4.1 // indirect + github.com/golang-jwt/jwt/v4 v4.4.2 // indirect github.com/golang/glog v1.0.0 // indirect github.com/golang/snappy v0.0.4 // indirect - github.com/google/gofuzz v1.2.0 // indirect - github.com/google/uuid v1.3.0 // indirect + github.com/google/licenseclassifier/v2 v2.0.0 // indirect + github.com/google/uuid v1.3.0 + github.com/google/wire v0.5.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.0 // indirect github.com/googleapis/gax-go/v2 v2.7.0 // indirect github.com/googleapis/gnostic v0.5.5 // indirect @@ -302,72 +381,108 @@ require ( github.com/grpc-ecosystem/grpc-gateway/v2 v2.10.1 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-hclog v1.0.0 // indirect + github.com/hashicorp/go-getter v1.6.2 // indirect + github.com/hashicorp/go-hclog v1.2.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect + github.com/hashicorp/go-retryablehttp v0.7.2 // indirect github.com/hashicorp/go-rootcerts v1.0.2 // indirect + github.com/hashicorp/go-safetemp v1.0.0 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect - github.com/hashicorp/serf v0.9.6 // indirect + github.com/hashicorp/serf v0.10.1 // indirect github.com/huandu/xstrings v1.3.3 // indirect github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0 // indirect - github.com/ianlancetaylor/cgosymbolizer v0.0.0-20201204192058-7acc97e53614 // indirect + github.com/ianlancetaylor/cgosymbolizer v0.0.0-20221208003206-eaf69f594683 github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639 // indirect + github.com/in-toto/in-toto-golang v0.5.0 // indirect github.com/inconshreveable/mousetrap v1.0.1 // indirect github.com/itchyny/timefmt-go v0.1.5 // indirect + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect github.com/jlaffaye/ftp v0.0.0-20200812143550-39e3779af0db // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jonboulle/clockwork v0.3.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/josharian/native v1.0.0 // indirect github.com/karrick/godirwalk v1.17.0 // indirect + github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect + github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 // indirect github.com/kjk/lzma v0.0.0-20161016003348-3fd93898850d // indirect - github.com/klauspost/compress v1.15.12 // indirect + github.com/klauspost/compress v1.15.15 // indirect github.com/klauspost/pgzip v1.2.5 // indirect - github.com/knadh/koanf v1.4.4 // indirect + github.com/knadh/koanf v1.5.0 // indirect + github.com/knqyf263/go-apk-version v0.0.0-20200609155635-041fdbb8563f // indirect + github.com/knqyf263/go-deb-version v0.0.0-20190517075300-09fca494f03d // indirect + github.com/knqyf263/go-rpm-version v0.0.0-20220614171824-631e686d1075 // indirect + github.com/knqyf263/go-rpmdb v0.0.0-20221030142135-919c8a52f04f // indirect + github.com/knqyf263/nested v0.0.1 // indirect + github.com/liamg/jfather v0.0.7 // indirect github.com/libp2p/go-reuseport v0.1.0 // indirect github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect - github.com/magiconair/properties v1.8.6 // indirect - github.com/mattn/go-colorable v0.1.12 // indirect + github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 // indirect + github.com/magiconair/properties v1.8.7 // indirect + github.com/masahiro331/go-disk v0.0.0-20220919035250-c8da316f91ac // indirect + github.com/masahiro331/go-ebs-file v0.0.0-20221225061409-5ef263bb2cc3 // indirect + github.com/masahiro331/go-ext4-filesystem v0.0.0-20221225060520-c150f5eacfe1 // indirect + github.com/masahiro331/go-mvn-version v0.0.0-20210429150710-d3157d602a08 // indirect + github.com/masahiro331/go-vmdk-parser v0.0.0-20221225061455-612096e4bbbd // indirect + github.com/masahiro331/go-xfs-filesystem v0.0.0-20221225060805-c02764233454 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.16 // indirect github.com/mattn/go-runewidth v0.0.14 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mdlayher/socket v0.2.3 // indirect + github.com/microsoft/go-rustaudit v0.0.0-20220808201409-204dfee52032 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-testing-interface v1.0.0 // indirect + github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/mkrautz/goar v0.0.0-20150919110319-282caa8bd9da // indirect + github.com/moby/buildkit v0.11.0 // indirect github.com/moby/locker v1.0.1 // indirect - github.com/moby/sys/signal v0.6.0 // indirect + github.com/moby/sys/signal v0.7.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect github.com/mostynb/go-grpc-compression v1.1.17 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d // indirect github.com/nwaples/rardecode v1.1.0 // indirect - github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/oklog/ulid v1.3.1 // indirect github.com/opencontainers/runc v1.1.3 // indirect - github.com/opencontainers/selinux v1.10.1 // indirect + github.com/opencontainers/selinux v1.10.2 // indirect + github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/outcaste-io/ristretto v0.2.0 // indirect + github.com/owenrumney/go-sarif/v2 v2.1.2 // indirect + github.com/package-url/packageurl-go v0.1.1-0.20220428063043-89078438f170 // indirect github.com/pborman/uuid v1.2.1 // indirect github.com/pelletier/go-toml v1.9.5 // indirect + github.com/pelletier/go-toml/v2 v2.0.5 // indirect github.com/philhofer/fwd v1.1.1 // indirect github.com/pierrec/lz4/v4 v4.1.15 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect - github.com/prometheus/client_model v0.3.0 - github.com/prometheus/common v0.37.0 // indirect - github.com/prometheus/procfs v0.8.0 + github.com/prometheus/common v0.39.0 // indirect github.com/prometheus/statsd_exporter v0.22.7 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect github.com/rivo/uniseg v0.2.0 // indirect - github.com/rogpeppe/go-internal v1.8.1 // indirect - github.com/rs/cors v1.8.2 // indirect + github.com/rs/cors v1.8.3 // indirect + github.com/safchain/baloum v0.0.0-20221229104256-b1fc8f70a86b + github.com/saracen/walker v0.0.0-20191201085201-324a081bae7e // indirect github.com/sassoftware/go-rpmutils v0.2.0 // indirect - github.com/secure-systems-lab/go-securesystemslib v0.4.0 + github.com/sergi/go-diff v1.1.0 // indirect + github.com/shibumi/go-pathspec v1.3.0 // indirect github.com/shopspring/decimal v1.2.0 // indirect - github.com/skydive-project/go-debouncer v1.0.0 + github.com/sigstore/rekor v1.0.1 // indirect github.com/smira/go-ftp-protocol v0.0.0-20140829150050-066b75c2b70d // indirect + github.com/spdx/tools-golang v0.3.1-0.20230104082527-d6f58551be3f // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/spf13/viper v1.14.0 // indirect github.com/stretchr/objx v0.5.0 // indirect + github.com/subosito/gotenv v1.4.1 // indirect github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect github.com/tchap/go-patricia/v2 v2.3.1 // indirect github.com/tedsuo/ifrit v0.0.0-20191009134036-9a97d0632f00 // indirect @@ -378,62 +493,88 @@ require ( github.com/tklauser/go-sysconf v0.3.11 // indirect github.com/tklauser/numcpus v0.6.0 // indirect github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 // indirect + github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc // indirect + github.com/twitchtv/twirp v8.1.2+incompatible // indirect github.com/ugorji/go/codec v1.2.7 // indirect github.com/ulikunitz/xz v0.5.10 // indirect + github.com/vbatts/tar-split v0.11.2 // indirect github.com/vito/go-sse v1.0.0 // indirect + github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect github.com/vmihailenco/tagparser v0.1.2 // indirect + github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect + github.com/xanzy/ssh-agent v0.3.0 // indirect + github.com/xdg-go/pbkdf2 v1.0.0 // indirect + github.com/xdg-go/scram v1.1.1 // indirect + github.com/xdg-go/stringprep v1.0.3 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect + github.com/xlab/treeprint v1.1.0 // indirect github.com/xor-gate/ar v0.0.0-20170530204233-5c72ae81e2b7 // indirect github.com/yashtewari/glob-intersection v0.1.0 // indirect + github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect go.etcd.io/etcd/api/v3 v3.6.0-alpha.0 // indirect go.etcd.io/etcd/client/pkg/v3 v3.6.0-alpha.0.0.20220522111935-c3bc4116dcd1 // indirect go.etcd.io/etcd/client/v3 v3.6.0-alpha.0 // indirect go.etcd.io/etcd/server/v3 v3.6.0-alpha.0.0.20220522111935-c3bc4116dcd1 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/collector/consumer v0.66.0 // indirect - go.opentelemetry.io/collector/featuregate v0.66.0 // indirect - go.opentelemetry.io/collector/semconv v0.66.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.4 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.36.4 // indirect - go.opentelemetry.io/contrib/propagators/b3 v1.11.1 // indirect - go.opentelemetry.io/otel v1.11.1 // indirect - go.opentelemetry.io/otel/exporters/prometheus v0.33.0 // indirect - go.opentelemetry.io/otel/metric v0.33.0 // indirect - go.opentelemetry.io/otel/sdk v1.11.1 // indirect - go.opentelemetry.io/otel/sdk/metric v0.33.0 // indirect - go.opentelemetry.io/otel/trace v1.11.1 // indirect - go.uber.org/dig v1.15.0 - go.uber.org/fx v1.18.2 - golang.org/x/crypto v0.3.0 // indirect + go.opentelemetry.io/collector/consumer v0.70.0 // indirect + go.opentelemetry.io/collector/featuregate v0.70.0 // indirect + go.opentelemetry.io/collector/semconv v0.70.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.37.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.37.0 // indirect + go.opentelemetry.io/contrib/propagators/b3 v1.12.0 // indirect + go.opentelemetry.io/otel v1.11.2 // indirect + go.opentelemetry.io/otel/exporters/prometheus v0.34.0 // indirect + go.opentelemetry.io/otel/metric v0.34.0 // indirect + go.opentelemetry.io/otel/sdk v1.11.2 // indirect + go.opentelemetry.io/otel/sdk/metric v0.34.0 // indirect + go.opentelemetry.io/otel/trace v1.11.2 // indirect + golang.org/x/crypto v0.5.0 // indirect golang.org/x/mod v0.7.0 // indirect - golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 // indirect - golang.org/x/term v0.3.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + golang.org/x/oauth2 v0.3.0 // indirect + golang.org/x/term v0.4.0 // indirect + gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/api v0.103.0 // indirect google.golang.org/appengine v1.6.7 // indirect gopkg.in/Knetic/govaluate.v3 v3.0.0 // indirect + gopkg.in/cheggaaa/pb.v1 v1.0.28 // indirect gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect - k8s.io/apiextensions-apiserver v0.23.5 - k8s.io/component-base v0.23.8 // indirect - k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c // indirect - sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30 // indirect + gopkg.in/warnings.v0 v0.1.2 // indirect + k8s.io/component-base v0.25.5 // indirect + k8s.io/gengo v0.0.0-20211129171323-c02415ce4185 // indirect + lukechampine.com/uint128 v1.1.1 // indirect + mellium.im/sasl v0.3.1 // indirect + modernc.org/cc/v3 v3.36.0 // indirect + modernc.org/ccgo/v3 v3.16.6 // indirect + modernc.org/libc v1.16.7 // indirect + modernc.org/mathutil v1.4.1 // indirect + modernc.org/memory v1.1.1 // indirect + modernc.org/opt v0.1.1 // indirect + modernc.org/sqlite v1.17.3 // indirect + modernc.org/strutil v1.1.1 // indirect + modernc.org/token v1.0.0 // indirect + sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.33 // indirect sigs.k8s.io/controller-runtime v0.11.2 // indirect - sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect + sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) require ( - github.com/DataDog/go-libddwaf v0.0.0-20221118110754-0372d7c76b8a - github.com/go-redis/redis/v9 v9.0.0-rc.2 - github.com/streadway/amqp v1.0.0 + github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect + github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect + github.com/godror/knownpb v0.1.0 // indirect + gonum.org/v1/gonum v0.12.0 // indirect ) require ( + github.com/godror/godror v0.36.0 + github.com/jmoiron/sqlx v1.3.5 + github.com/ory/dockertest v3.3.5+incompatible github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect github.com/godror/knownpb v0.1.0 // indirect @@ -441,9 +582,6 @@ require ( require ( github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/godror/godror v0.36.0 - github.com/jmoiron/sqlx v1.3.5 - github.com/ory/dockertest v3.3.5+incompatible gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect ) @@ -452,15 +590,33 @@ replace github.com/pahanini/go-grpc-bidirectional-streaming-example v0.0.0-20211 // Fixing a CVE on a transitive dep of k8s/etcd, should be cleaned-up once k8s.io/apiserver dep is removed (but double-check with `go mod why` that no other dep pulls it) replace github.com/dgrijalva/jwt-go => github.com/golang-jwt/jwt v3.2.1+incompatible -// Exclude this version of containerd because it depends on github.com/Microsoft/hcsshim@v0.8.7 which depends on k8s.io/kubernetes which is a dependency we’d like to avoid -exclude github.com/containerd/containerd v1.5.0-beta.1 - // Remove once the issue https://github.com/microsoft/Windows-Containers/issues/72 is resolved replace github.com/golang/glog v1.0.0 => github.com/paulcacheux/glog v1.0.1-0.20211019114809-ec0f43a655b9 replace github.com/vishvananda/netlink => github.com/DataDog/netlink v1.0.1-0.20220504230202-f7323aba1f6c -// k8s.io/apiserver depends on a very old version of the opentelemetry modules, -// so we created a fork that removed the dependency entirely. This can be -// removed once k8s.io uses opentelemetry 1.0 or newer -replace k8s.io/apiserver => github.com/juliogreff/apiserver v0.23.6-0.20220531090536-be42650a25e5 +// Use custom Trivy fork to reduce binary size +// Pull in replacements needed by upstream Trivy +replace ( + github.com/aquasecurity/trivy => github.com/DataDog/trivy v0.0.0-20230120171913-9b1b011fb2fe + github.com/spdx/tools-golang => github.com/spdx/tools-golang v0.3.0 + oras.land/oras-go => oras.land/oras-go v1.1.1 +) + +// Kubernetes replaces, currently required as 0.24 drops compatibility for <1.14 due to leader election leases +replace ( + k8s.io/api => k8s.io/api v0.23.15 + k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.23.15 + k8s.io/apimachinery => k8s.io/apimachinery v0.23.15 + // k8s.io/apiserver depends on a very old version of the opentelemetry modules, + // so we created a fork that removed the dependency entirely. This can be + // removed once k8s.io uses opentelemetry 1.0 or newer (0.26) + k8s.io/apiserver => github.com/juliogreff/apiserver v0.23.6-0.20220531090536-be42650a25e5 + k8s.io/client-go => k8s.io/client-go v0.23.15 + k8s.io/component-base => k8s.io/component-base v0.23.15 + k8s.io/cri-api => k8s.io/cri-api v0.23.15 + k8s.io/kube-openapi => k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 + k8s.io/kubelet => k8s.io/kubelet v0.23.15 + k8s.io/metrics => k8s.io/metrics v0.23.15 + sigs.k8s.io/custom-metrics-apiserver => sigs.k8s.io/custom-metrics-apiserver v1.23.0 +) diff --git a/go.sum b/go.sum index dfd1b9dd5a49e..95aa637e73212 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,4 @@ bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= -bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -37,9 +36,9 @@ cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxB cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/iam v0.6.0 h1:nsqQC88kT5Iwlm4MeNGTpfMWddp6NB/UOLFTH6m1QfQ= -cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= -cloud.google.com/go/longrunning v0.1.1 h1:y50CXG4j0+qvEukslYFBCrzaXX0qpFbBzc3PchSu/LE= +cloud.google.com/go/iam v0.7.0 h1:k4MuwOsS7zGJJ+QfZ5vBK8SgHBAvYN/23BWsiihJ1vs= +cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= +cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= @@ -90,37 +89,47 @@ github.com/AlekSi/pointer v1.0.0/go.mod h1:1kjywbfcPFCmncIxtk6fIEub6LKrfMz3gc5QK github.com/AlekSi/pointer v1.1.0 h1:SSDMPcXD9jSl8FPy9cRzoRaMJtm9g9ggGTxecRUbQoI= github.com/AlekSi/pointer v1.1.0/go.mod h1:y7BvfRI3wXPWKXEBhU71nbnIEEZX0QTSB2Bj48UJIZE= github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k= +github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v67.1.0+incompatible h1:oziYcaopbnIKfM69DL05wXdypiqfrUKdxUKrKpynJTw= +github.com/Azure/azure-sdk-for-go v67.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-storage-blob-go v0.13.0/go.mod h1:pA9kNqtjUeQF2zOSu4s//nUdBD+e64lEuc4sVnuOfNs= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= -github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= -github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= -github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= +github.com/Azure/go-autorest/autorest v0.11.24/go.mod h1:G6kyRlFnTuSbEYkQGawPfsCswgme4iYf6rfSKUDzbCc= +github.com/Azure/go-autorest/autorest v0.11.28 h1:ndAExarwr5Y+GaHE6VCaY1kyS/HwwGGyuimVhWsHOEM= +github.com/Azure/go-autorest/autorest v0.11.28/go.mod h1:MrkzG3Y3AH668QyF9KRk5neJnGgmhQ6krbhR8Q5eMvA= github.com/Azure/go-autorest/autorest/adal v0.9.2/go.mod h1:/3SMAM86bP6wC9Ev35peQDUeqFZBMH07vvUOmg4z/fE= -github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= -github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= +github.com/Azure/go-autorest/autorest/adal v0.9.21 h1:jjQnVFXPfekaqb8vIsv2G1lxshoW+oGv4MDlhRtnYZk= +github.com/Azure/go-autorest/autorest/adal v0.9.21/go.mod h1:zua7mBUaCc5YnSLKYgGJR/w5ePdMDA6H56upLsHzA9U= +github.com/Azure/go-autorest/autorest/azure/auth v0.5.11 h1:P6bYXFoao05z5uhOQzbC3Qd8JqF3jUoocoTeIxkp2cA= +github.com/Azure/go-autorest/autorest/azure/auth v0.5.11/go.mod h1:84w/uV8E37feW2NCJ08uT9VBfjfUHpgLVnG2InYD6cg= +github.com/Azure/go-autorest/autorest/azure/cli v0.4.5 h1:0W/yGmFdTIT77fvdlGZ0LMISoLHFJ7Tx4U0yeB+uFs4= +github.com/Azure/go-autorest/autorest/azure/cli v0.4.5/go.mod h1:ADQAXrkgm7acgWVUNamOgh8YNrv4p27l3Wc55oVfpzg= +github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= +github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= +github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= +github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.1.0 h1:ksErzDEI1khOiGPgpwuI7x2ebx/uXQNw7xJpn9Eq1+I= -github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DataDog/agent-payload/v5 v5.0.50 h1:26k2YcgKxJuc2lrO8v4UeePDz5ZMtYOheLopHwOVy8s= -github.com/DataDog/agent-payload/v5 v5.0.50/go.mod h1:vhXPNG7eNDOLeW94Z7dLNUBv61kRBHK7vXnQ+RQfckk= +github.com/CycloneDX/cyclonedx-go v0.7.0 h1:jNxp8hL7UpcvPDFXjY+Y1ibFtsW+e5zyF9QoSmhK/zg= +github.com/CycloneDX/cyclonedx-go v0.7.0/go.mod h1:W5Z9w8pTTL+t+yG3PCiFRGlr8PUlE0pGWzKSJbsyXkg= +github.com/DataDog/agent-payload/v5 v5.0.67 h1:CMBowuUjm5AMC43M1X2npQMHvXVtMByKeZOgTQaY5qI= +github.com/DataDog/agent-payload/v5 v5.0.67/go.mod h1:oQZi1VZp1e3QvlSUX4iphZCpJaFepUxWq0hNXxihKBM= github.com/DataDog/aptly v1.5.0 h1:Oy6JVRC9iDgnmpeVYa4diXwP/exU7wJ/U1kuI4Zacxg= github.com/DataDog/aptly v1.5.0/go.mod h1:KVyvkYXGcFugxadGFZ+u5Fc3M6q/EfzFZyeTD9HVbkY= github.com/DataDog/cast v1.3.1-0.20190301154711-1ee8c8bd14a3 h1:SobA9WYm4K/MUtWlbKaomWTmnuYp1KhIm8Wlx3vmpsg= @@ -131,8 +140,8 @@ github.com/DataDog/datadog-go/v5 v5.1.1 h1:JLZ6s2K1pG2h9GkvEvMdEGqMDyVLEAccdX5Tl github.com/DataDog/datadog-go/v5 v5.1.1/go.mod h1:KhiYb2Badlv9/rofz+OznKoEF5XKTonWyhx5K83AP8E= github.com/DataDog/datadog-operator v0.7.1-0.20220602134901-4f6af09bf54f h1:A7WPfKHAeZB+yD83KtY8Y4mZKFAbZgBziulshnpErK4= github.com/DataDog/datadog-operator v0.7.1-0.20220602134901-4f6af09bf54f/go.mod h1:KAQEFctpgWNlJ2/ef9PRKqy79UAa/URSOWZzgaCrwug= -github.com/DataDog/ebpf-manager v0.1.0 h1:IsyrQibXHXNfxicihzMJ4mEbursWuwn6fVEtQL1Bo28= -github.com/DataDog/ebpf-manager v0.1.0/go.mod h1:oUCSIP1dv/SGMlSzJ8ZII3nCHdUqFQOjXD5QvQcdk+8= +github.com/DataDog/ebpf-manager v0.2.1 h1:kiOSDFMmY/QX6NDyKD053Ug8LQS6KPc8QEtgqpJBSLc= +github.com/DataDog/ebpf-manager v0.2.1/go.mod h1:QNbbXqQdl1RDRDna/vSHzhpTNXTnqxxJRVXdeANgCUA= github.com/DataDog/extendeddaemonset v0.7.1-0.20220530183123-9c60ea5abbc6 h1:XDD6SEIEpe5CAa7esIWlgdXLQgLKN4hvPw+Wd8pJQFU= github.com/DataDog/extendeddaemonset v0.7.1-0.20220530183123-9c60ea5abbc6/go.mod h1:YxkO6rhI37nstfxBAdk4fVi5kheKJRMk9AtqDdl/mSQ= github.com/DataDog/go-grpc-bidirectional-streaming-example v0.0.0-20221024060302-b9cf785c02fe h1:RO40ywnX/vZLi4Pb4jRuFGgQQBYGIIoQ6u+P2MIgFOA= @@ -156,6 +165,8 @@ github.com/DataDog/nikos v1.10.0/go.mod h1:Akd6ZjhqCE5wkpy+r2vLzrOyZNrPg+APYr+i+ github.com/DataDog/sketches-go v1.0.0/go.mod h1:O+XkJHWk9w4hDwY2ZUDU31ZC9sNYlYo8DiFsxjYeo1k= github.com/DataDog/sketches-go v1.4.1 h1:j5G6as+9FASM2qC36lvpvQAj9qsv/jUs3FtO8CwZNAY= github.com/DataDog/sketches-go v1.4.1/go.mod h1:xJIXldczJyyjnbDop7ZZcLxJdV3+7Kra7H1KMgpgkLk= +github.com/DataDog/trivy v0.0.0-20230120171913-9b1b011fb2fe h1:37VGGoe+SJ/blsYK0xZDy84m8hp/suVx6MBSeiZJKLc= +github.com/DataDog/trivy v0.0.0-20230120171913-9b1b011fb2fe/go.mod h1:f1nyvEyWU3w5L8dYIQljloMO/BX0i0OK9NwGeZtvmFw= github.com/DataDog/viper v1.12.0 h1:FufyZpZPxyszafSV5B8Q8it75IhhuJwH0T7QpT6HnD0= github.com/DataDog/viper v1.12.0/go.mod h1:wDdUVJ2SHaMaPrCZrlRCObwkubsX8j5sme3LaR/SGTc= github.com/DataDog/watermarkpodautoscaler v0.5.0-rc.1.0.20220530183114-687bca6395e8 h1:2+uhTsVJvKbLIIGJxRoI3NTSPB9rNWqmLqFAqgPWkPM= @@ -169,6 +180,9 @@ github.com/DataDog/zstd_0 v0.0.0-20210310093942-586c1286621f/go.mod h1:oXfOhM/Kr github.com/DisposaBoy/JsonConfigReader v0.0.0-20130112093355-33a99fdf1d5e/go.mod h1:GCzqZQHydohgVLSIqRKZeTt8IGb1Y4NaFfim3H40uUI= github.com/DisposaBoy/JsonConfigReader v0.0.0-20171218180944-5ea4d0ddac55 h1:jbGlDKdzAZ92NzK65hUP98ri0/r50vVVvmZsFP/nIqo= github.com/DisposaBoy/JsonConfigReader v0.0.0-20171218180944-5ea4d0ddac55/go.mod h1:GCzqZQHydohgVLSIqRKZeTt8IGb1Y4NaFfim3H40uUI= +github.com/GoogleCloudPlatform/docker-credential-gcr v2.0.5+incompatible h1:juIaKLLVhqzP55d8x4cSVgwyQv76Z55/fRv/UBr2KkQ= +github.com/GoogleCloudPlatform/docker-credential-gcr v2.0.5+incompatible/go.mod h1:BB1eHdMLYEFuFdBlRMb0N7YGVdM5s6Pt0njxgvfbGGs= +github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= @@ -179,50 +193,60 @@ github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7Y github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA= github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM= +github.com/Masterminds/squirrel v1.5.3 h1:YPpoceAcxuzIljlr5iWpNKaql7hLeG1KLSrhvdHpkZc= github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= -github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= +github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= +github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8= github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600= github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= -github.com/Microsoft/hcsshim v0.9.4 h1:mnUj0ivWy6UzbB1uLFqKR6F+ZyiDc7j4iGgHTpO+5+I= -github.com/Microsoft/hcsshim v0.9.4/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= +github.com/Microsoft/hcsshim v0.9.6 h1:VwnDOgLeoi2du6dAznfmspNqTiwczvjv4K7NxuY9jsY= +github.com/Microsoft/hcsshim v0.9.6/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= +github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OneOfOne/xxhash v1.2.8 h1:31czK/TI9sNkxIKfaUfGlU47BAxQ0ztGgd9vPyqimf8= github.com/OneOfOne/xxhash v1.2.8/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7 h1:YoJbenK9C67SkzkDfmQuVln04ygHj3vjZfd9FL+GmQQ= +github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= -github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/Shopify/sarama v1.22.0/go.mod h1:lm3THZ8reqBDBQKQyb5HB3sY1lKp3grEbQ81aWSgPp4= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/Sirupsen/logrus v1.0.6 h1:HCAGQRk48dRVPA5Y+Yh0qdCSTzPOyU1tBJ7Q9YzotII= -github.com/Sirupsen/logrus v1.0.6/go.mod h1:rmk17hk6i8ZSAJkSDa7nOxamrG+SP4P0mm+DAvExv4U= github.com/StackExchange/wmi v0.0.0-20181212234831-e0a55b97c705/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= +github.com/VividCortex/ewma v1.1.1 h1:MnEK4VOv6n0RSY4vtRe3h11qjxL3+t0B8yOL8iMXdcM= +github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA= github.com/acobaugh/osrelease v0.1.0 h1:Yb59HQDGGNhCj4suHaFQQfBps5wyoKLSSX/J/+UifRE= github.com/acobaugh/osrelease v0.1.0/go.mod h1:4bFEs0MtgHNHBrmHCt67gNisnabCRAlzdVasCEGHTWY= +github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= +github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= +github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= +github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/agnivade/levenshtein v1.1.1 h1:QY8M92nrzkmr798gCo3kmMyqXFzdQVpxLlGPRBij0P8= github.com/agnivade/levenshtein v1.1.1/go.mod h1:veldBMzWxcCG2ZvUTKD2kJNRdCk5hVbJomOvKkmgYbo= +github.com/alecthomas/chroma v0.10.0 h1:7XDcGkCQopCNKjZHfYrNLraA+M7e0fMiJ/Mfikbfjek= github.com/alecthomas/participle v0.7.1 h1:2bN7reTw//5f0cugJcTOnY/NYZcWQOaajW+BwZB5xWs= github.com/alecthomas/participle v0.7.1/go.mod h1:HfdmEuwvr12HXQN44HPWXR0lHmVolVYe4dyL6lQ3duY= github.com/alecthomas/repr v0.0.0-20181024024818-d37bc2a10ba1 h1:GDQdwm/gAcJcLAKQQZGOJ4knlw+7rfEQQcmwTbt4p5E= @@ -235,13 +259,41 @@ github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk5 github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc= github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= +github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a h1:HbKu58rmZpUGpz5+4FfNmIU+FmZg2P3Xaj2v2bfNWmk= +github.com/alicebob/miniredis/v2 v2.23.0 h1:+lwAJYjvvdIVg6doFHuotFjueJ/7KY10xo/vm3X3Scw= github.com/andybalholm/brotli v1.0.1/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= github.com/andybalholm/brotli v1.0.2 h1:JKnhI/XQ75uFBTiuzXpzFrUriDPiZjlOSzh6wXogP0E= github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= +github.com/apparentlymart/go-cidr v1.1.0 h1:2mAhrMoF+nhXqxTzSZMUzDHkLjmIHC+Zzn4tdgBZjnU= +github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= +github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= +github.com/aquasecurity/bolt-fixtures v0.0.0-20200903104109-d34e7f983986 h1:2a30xLN2sUZcMXl50hg+PJCIDdJgIvIbVcKqLJ/ZrtM= +github.com/aquasecurity/defsec v0.82.7-0.20230103191626-4f3187c78d6b h1:3tjlf7nI/AFqoClNTOmm7MbO/HJy/ObQRzMIj2M44z8= +github.com/aquasecurity/go-dep-parser v0.0.0-20230115135733-3be7cb085121 h1:oVuf6kGqL8aY2hCpRdlOxW7lGu4CeSv2rq46b2N7nXQ= +github.com/aquasecurity/go-dep-parser v0.0.0-20230115135733-3be7cb085121/go.mod h1:Cj+0xDZFgXGQin2fo40aH2a9srUKMOCFPw50NHsfVEk= +github.com/aquasecurity/go-gem-version v0.0.0-20201115065557-8eed6fe000ce h1:QgBRgJvtEOBtUXilDb1MLi1p1MWoyFDXAu5DEUl5nwM= +github.com/aquasecurity/go-gem-version v0.0.0-20201115065557-8eed6fe000ce/go.mod h1:HXgVzOPvXhVGLJs4ZKO817idqr/xhwsTcj17CLYY74s= +github.com/aquasecurity/go-npm-version v0.0.0-20201110091526-0b796d180798 h1:eveqE9ivrt30CJ7dOajOfBavhZ4zPqHcZe/4tKp0alc= +github.com/aquasecurity/go-npm-version v0.0.0-20201110091526-0b796d180798/go.mod h1:hxbJZtKlO4P8sZ9nztizR6XLoE33O+BkPmuYQ4ACyz0= +github.com/aquasecurity/go-pep440-version v0.0.0-20210121094942-22b2f8951d46 h1:vmXNl+HDfqqXgr0uY1UgK1GAhps8nbAAtqHNBcgyf+4= +github.com/aquasecurity/go-pep440-version v0.0.0-20210121094942-22b2f8951d46/go.mod h1:olhPNdiiAAMiSujemd1O/sc6GcyePr23f/6uGKtthNg= +github.com/aquasecurity/go-version v0.0.0-20201107203531-5e48ac5d022a/go.mod h1:9Beu8XsUNNfzml7WBf3QmyPToP1wm1Gj/Vc5UJKqTzU= +github.com/aquasecurity/go-version v0.0.0-20210121072130-637058cfe492 h1:rcEG5HI490FF0a7zuvxOxen52ddygCfNVjP0XOCMl+M= +github.com/aquasecurity/go-version v0.0.0-20210121072130-637058cfe492/go.mod h1:9Beu8XsUNNfzml7WBf3QmyPToP1wm1Gj/Vc5UJKqTzU= +github.com/aquasecurity/memoryfs v1.4.4 h1:HdkShi6jjKZLAgQ+6/CXXDB/zwH2hAMp2oklo9w5t7A= +github.com/aquasecurity/table v1.8.0 h1:9ntpSwrUfjrM6/YviArlx/ZBGd6ix8W+MtojQcM7tv0= +github.com/aquasecurity/table v1.8.0/go.mod h1:eqOmvjjB7AhXFgFqpJUEE/ietg7RrMSJZXyTN8E/wZw= +github.com/aquasecurity/testdocker v0.0.0-20230111101738-e741bda259da h1:pj/adfN0Wbzc0H8YkI1nX5K92wOU5/1/1TRuuc0y5Nw= +github.com/aquasecurity/tml v0.6.1 h1:y2ZlGSfrhnn7t4ZJ/0rotuH+v5Jgv6BDDO5jB6A9gwo= +github.com/aquasecurity/tml v0.6.1/go.mod h1:OnYMWY5lvI9ejU7yH9LCberWaaTBW7hBFsITiIMY2yY= +github.com/aquasecurity/trivy-db v0.0.0-20230105123735-5ce110fc82e1 h1:3ANUmuIZlMpSmhd6ah3FWQuZxZQFdpRzlrn0p90zzVc= +github.com/aquasecurity/trivy-db v0.0.0-20230105123735-5ce110fc82e1/go.mod h1:/nULgnDeq/JMPMVwE1dmf4kWlYn++7VrM3O2naj4BHA= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q= github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE= github.com/arduino/go-apt-client v0.0.0-20190812130613-5613f843fdc8 h1:HpmeqWCUoU+dPrz8V4KGDMDxvR+WyeJ0g6DSSqnptuY= @@ -250,73 +302,125 @@ github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hC github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-metrics v0.3.0/go.mod h1:zXjbSimjXTd7vOpY8B0/2LpvNvDoXBuplAD+gJD3GYs= -github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= -github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-metrics v0.4.0 h1:yCQqn7dwca4ITXb+CbubHmedzaQYHhNhrEXLYUeEe8Q= +github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/avast/retry-go/v4 v4.3.1 h1:Mtg11F9PdAIMkMiio2RKcYauoVHjl2aB3zQJJlzD4cE= -github.com/avast/retry-go/v4 v4.3.1/go.mod h1:rg6XFaiuFYII0Xu3RDbZQkxCofFwruZKW8oEF1jpWiU= +github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d h1:Byv0BzEl3/e6D5CLfI0j/7hiIEtvGVFPCZ7Ei2oq8iQ= +github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/avast/retry-go/v4 v4.3.2 h1:x4sTEu3jSwr7zNjya8NTdIN+U88u/jtO/q3OupBoDtM= +github.com/avast/retry-go/v4 v4.3.2/go.mod h1:rg6XFaiuFYII0Xu3RDbZQkxCofFwruZKW8oEF1jpWiU= github.com/awalterschulze/gographviz v0.0.0-20160912181450-761fd5fbb34e/go.mod h1:GEV5wmg4YquNw7v1kkyoX9etIk8yVmXj+AkDHuuETHs= github.com/awalterschulze/gographviz v2.0.1+incompatible h1:XIECBRq9VPEQqkQL5pw2OtjCAdrtIgFKoJU8eT98AS8= github.com/awalterschulze/gographviz v2.0.1+incompatible/go.mod h1:GEV5wmg4YquNw7v1kkyoX9etIk8yVmXj+AkDHuuETHs= github.com/aws/aws-lambda-go v1.32.0 h1:i8MflawW1hoyYp85GMH7LhvAs4cqzL7LOS6fSv8l2KM= github.com/aws/aws-lambda-go v1.32.0/go.mod h1:IF5Q7wj4VyZyUFnZ54IQqeWtctHQ9tz+KhcbDenr220= +github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= +github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= github.com/aws/aws-sdk-go v1.25.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.34.28/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= -github.com/aws/aws-sdk-go v1.44.117 h1:mZuODB3Y4soG9QWAXyGb2po+6Easa/enifpj4MnZ91s= -github.com/aws/aws-sdk-go v1.44.117/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.171 h1:maREiPAmibvuONMOEZIkCH2OTosLRnDelceTtH3SYfo= +github.com/aws/aws-sdk-go v1.44.171/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v1.0.0/go.mod h1:smfAbmpW+tcRVuNUjo3MOArSZmW72t62rkCzc2i0TWM= github.com/aws/aws-sdk-go-v2 v1.9.2/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= +github.com/aws/aws-sdk-go-v2 v1.16.16/go.mod h1:SwiyXi/1zTUZ6KIAmLK5V5ll8SiURNUYOqTerZPaF9k= +github.com/aws/aws-sdk-go-v2 v1.17.1 h1:02c72fDJr87N8RAC2s3Qu0YuvMRZKNZJ9F+lAehCazk= +github.com/aws/aws-sdk-go-v2 v1.17.1/go.mod h1:JLnGeGONAyi2lWXI1p0PCIOIy333JMVK1U7Hf0aRFLw= github.com/aws/aws-sdk-go-v2/config v1.0.0/go.mod h1:WysE/OpUgE37tjtmtJd8GXgT8s1euilE5XtUkRNUQ1w= github.com/aws/aws-sdk-go-v2/config v1.8.3/go.mod h1:4AEiLtAb8kLs7vgw2ZV3p2VZ1+hBavOc84hqxVNpCyw= +github.com/aws/aws-sdk-go-v2/config v1.18.3 h1:3kfBKcX3votFX84dm00U8RGA1sCCh3eRMOGzg5dCWfU= +github.com/aws/aws-sdk-go-v2/config v1.18.3/go.mod h1:BYdrbeCse3ZnOD5+2/VE/nATOK8fEUpBtmPMdKSyhMU= github.com/aws/aws-sdk-go-v2/credentials v1.0.0/go.mod h1:/SvsiqBf509hG4Bddigr3NB12MIpfHhZapyBurJe8aY= github.com/aws/aws-sdk-go-v2/credentials v1.4.3/go.mod h1:FNNC6nQZQUuyhq5aE5c7ata8o9e4ECGmS4lAXC7o1mQ= +github.com/aws/aws-sdk-go-v2/credentials v1.13.3 h1:ur+FHdp4NbVIv/49bUjBW+FE7e57HOo03ELodttmagk= +github.com/aws/aws-sdk-go-v2/credentials v1.13.3/go.mod h1:/rOMmqYBcFfNbRPU0iN9IgGqD5+V2yp3iWNmIlz0wI4= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.0/go.mod h1:wpMHDCXvOXZxGCRSidyepa8uJHY4vaBGfY2/+oKU/Bc= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.6.0/go.mod h1:gqlclDEZp4aqJOancXK6TN24aKhT0W0Ae9MHk3wzTMM= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.19 h1:E3PXZSI3F2bzyj6XxUXdTIfvp425HHhwKsFvmzBwHgs= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.19/go.mod h1:VihW95zQpeKQWVPGkwT+2+WJNQV8UXFfMTWdU6VErL8= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.23/go.mod h1:2DFxAQ9pfIRy0imBCJv+vZ2X6RKxves6fbnEuSry6b4= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.25 h1:nBO/RFxeq/IS5G9Of+ZrgucRciie2qpLy++3UGZ+q2E= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.25/go.mod h1:Zb29PYkf42vVYQY6pvSyJCJcFHlPIiY+YKdPtwnvMkY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.17/go.mod h1:pRwaTYCJemADaqCbUAxltMoHKata7hmB5PjEXeu0kfg= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.19 h1:oRHDrwCTVT8ZXi4sr9Ld+EXk7N/KGssOr2ygNeojEhw= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.19/go.mod h1:6Q0546uHDp421okhmmGfbxzq2hBqbXFNpi4k+Q1JnQA= github.com/aws/aws-sdk-go-v2/internal/ini v1.2.4/go.mod h1:ZcBrrI3zBKlhGFNYWvju0I3TR93I7YIgAfy82Fh4lcQ= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.26 h1:Mza+vlnZr+fPKFKRq/lKGVvM6B/8ZZmNdEopOwSQLms= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.26/go.mod h1:Y2OJ+P+MC1u1VKnavT+PshiEuGPyh/7DqxoDNij4/bg= github.com/aws/aws-sdk-go-v2/service/appconfig v1.4.2/go.mod h1:FZ3HkCe+b10uFZZkFdvf98LHW21k49W8o8J366lqVKY= +github.com/aws/aws-sdk-go-v2/service/ebs v1.15.19 h1:6S06aB1xyXs3C9RE5RyJROw1v1ByXGHo/cxTZ13VRp0= +github.com/aws/aws-sdk-go-v2/service/ebs v1.15.19/go.mod h1:pJhytP5qZaPIqCF2BewXttD4bc29KIPm6LMSIBhMCFI= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.63.1 h1:jSS5gynKz4XaGcs6m25idCTN+tvPkRJ2WedSWCcZEjI= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.63.1/go.mod h1:0+6fPoY0SglgzQUs2yml7X/fup12cMlVumJufh5npRQ= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.0/go.mod h1:3jExOmpbjgPnz2FJaMOfbSk1heTkZ66aD3yNtVhnjvI= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.3.2/go.mod h1:72HRZDLMtmVQiLG2tLfQcaWLCssELvGl+Zf2WVxMmR8= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.17/go.mod h1:4nYOrY41Lrbk2170/BGkcJKBhws9Pfn8MG3aGqjjeFI= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.19 h1:GE25AWCdNUPh9AOJzI9KIJnja7IwUc1WyUqz/JTyJ/I= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.19/go.mod h1:02CP6iuYP+IVnBX5HULVdSAku/85eHB2Y9EsFhrkEwU= github.com/aws/aws-sdk-go-v2/service/sqs v1.0.0/go.mod h1:w5BclCU8ptTbagzXS/fHBr+vAyXUjggg/72qDIURKMk= github.com/aws/aws-sdk-go-v2/service/sso v1.0.0/go.mod h1:qNdDupP6xoM//zL1JmPl2XGbyPL5kKrlsoYVh8XZxzQ= github.com/aws/aws-sdk-go-v2/service/sso v1.4.2/go.mod h1:NBvT9R1MEF+Ud6ApJKM0G+IkPchKS7p7c2YPKwHmBOk= +github.com/aws/aws-sdk-go-v2/service/sso v1.11.25 h1:GFZitO48N/7EsFDt8fMa5iYdmWqkUDDB3Eje6z3kbG0= +github.com/aws/aws-sdk-go-v2/service/sso v1.11.25/go.mod h1:IARHuzTXmj1C0KS35vboR0FeJ89OkEy1M9mWbK2ifCI= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.8 h1:jcw6kKZrtNfBPJkaHrscDOZoe5gvi9wjudnxvozYFJo= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.8/go.mod h1:er2JHN+kBY6FcMfcBBKNGCT3CarImmdFzishsqBmSRI= github.com/aws/aws-sdk-go-v2/service/sts v1.0.0/go.mod h1:5f+cELGATgill5Pu3/vK3Ebuigstc+qYEHW5MvGWZO4= github.com/aws/aws-sdk-go-v2/service/sts v1.7.2/go.mod h1:8EzeIqfWt2wWT4rJVu3f21TfrhJ8AEMzVybRNSb/b4g= +github.com/aws/aws-sdk-go-v2/service/sts v1.17.5 h1:60SJ4lhvn///8ygCzYy2l53bFW/Q15bVfyjyAWo6zuw= +github.com/aws/aws-sdk-go-v2/service/sts v1.17.5/go.mod h1:bXcN3koeVYiJcdDU89n3kCYILob7Y34AeLopUbZgLT4= github.com/aws/smithy-go v1.0.0/go.mod h1:EzMw8dbp/YJL4A5/sbhGddag+NPT7q084agLbB9LgIw= github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/aws/smithy-go v1.11.0/go.mod h1:3xHYmszWVx2c0kIwQeEVf9uSm4fYZt67FBJnwub1bgM= +github.com/aws/smithy-go v1.13.3/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aws/smithy-go v1.13.4 h1:/RN2z1txIJWeXeOkzX+Hk/4Uuvv7dWtCjbmVJcrskyk= +github.com/aws/smithy-go v1.13.4/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/beevik/ntp v0.3.0 h1:xzVrPrE4ziasFXgBVBZJDP0Wg/KpMwk2KHJ4Ba8GrDw= github.com/beevik/ntp v0.3.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benesch/cgosymbolizer v0.0.0-20190515212042-bec6fe6e597b h1:5JgaFtHFRnOPReItxvhMDXbvuBkjSWE+9glJyF466yw= -github.com/benesch/cgosymbolizer v0.0.0-20190515212042-bec6fe6e597b/go.mod h1:eMD2XUcPsHYbakFEocKrWZp47G0MRJYoC60qFblGjpA= +github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bhmj/jsonslice v0.0.0-20200323023432-92c3edaad8e2 h1:11xwzvvHBTyUMCD7infJV2SXSaVyp9ZXK9QgfV6Jfss= github.com/bhmj/jsonslice v0.0.0-20200323023432-92c3edaad8e2/go.mod h1:blvNODZOz8uOvDJzGiXzoi8QlzcAhA57sMnKx1D18/k= github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k= +github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blabber/go-freebsd-sysctl v0.0.0-20201130114544-503969f39d8f h1:gMH+lz/KRpSqdoL+IQjgd91bP1LB8vrVEfNxr47GYC8= github.com/blabber/go-freebsd-sysctl v0.0.0-20201130114544-503969f39d8f/go.mod h1:cTRyHktEaXkKTTEyZ0hAgS7H4V0AVoKhB8Dx0tVr/tY= -github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bmatcuk/doublestar v1.3.4 h1:gPypJ5xD31uhX6Tf54sDPUOBXTqKH4c9aPY66CyQrS0= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40 h1:y4B3+GPxKlrigF1ha5FFErxK+sr6sWxQovRMzwMhejo= github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= github.com/bradfitz/gomemcache v0.0.0-20220106215444-fb4bf637b56d/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= +github.com/bradleyjkemp/cupaloy/v2 v2.8.0 h1:any4BmKE+jGIaMpnU8YgH/I2LPiLBufr6oMMlVBbn9M= +github.com/briandowns/spinner v1.12.0 h1:72O0PzqGJb6G3KgrcIOtL/JAGGZ5ptOMCn9cUHmqsmw= +github.com/briandowns/spinner v1.12.0/go.mod h1:QOuQk7x+EaDASo80FEXwlwiA+j/PPIcX3FScO+3/ZPQ= +github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/bytecodealliance/wasmtime-go v1.0.0 h1:9u9gqaUiaJeN5IoD1L7egD8atOnTGyJcNp8BhkL9cUU= +github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= +github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= +github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= +github.com/bytecodealliance/wasmtime-go/v3 v3.0.2 h1:3uZCA/BLTIu+DqCfguByNMJa2HVHpXvjfy0Dy7g6fuA= +github.com/caarlos0/env/v6 v6.10.1 h1:t1mPSxNpei6M5yAeu1qtRdPAK29Nbcf/n3G7x+b3/II= +github.com/caarlos0/env/v6 v6.10.1/go.mod h1:hvp/ryKXKipEkcuYjs9mI4bBCg+UI0Yhgm5Zu0ddvwc= github.com/cavaliergopher/grab/v3 v3.0.1 h1:4z7TkBfmPjmLAAmkkAZNX/6QJ1nNFdv3SdIHXju0Fr4= github.com/cavaliergopher/grab/v3 v3.0.1/go.mod h1:1U/KNnD+Ft6JJiYoYBAimKH2XrYptb8Kl3DFGmsjpq4= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= @@ -333,11 +437,15 @@ github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghf github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= github.com/cheggaaa/pb v1.0.10/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= +github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo= +github.com/cheggaaa/pb/v3 v3.1.0 h1:3uouEsl32RL7gTiQsuaXD4Bzbfl5tGztXGUvXbs4O04= +github.com/cheggaaa/pb/v3 v3.1.0/go.mod h1:YjrevcBqadFDaGQKRdmZxTY42pXEqda48Ea3lt0K/BE= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -349,8 +457,8 @@ github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= -github.com/cilium/ebpf v0.9.3 h1:5KtxXZU+scyERvkJMEm16TbScVvuuMrlhPly78ZMbSc= -github.com/cilium/ebpf v0.9.3/go.mod h1:w27N4UjpaQ9X/DGrSugxUG+H+NhgntDuPb5lCzxCn8A= +github.com/cilium/ebpf v0.10.0 h1:nk5HPMeoBXtOzbkZBWym+ZWq1GIiHUsBFXxwewXAHLQ= +github.com/cilium/ebpf v0.10.0/go.mod h1:DPiVdY/kT534dgc9ERmvP8mWA+9gvwgKfRvk4nNWnoE= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I= @@ -370,16 +478,19 @@ github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMe github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= +github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb h1:EDmT6Q9Zs+SbUoc7Ik9EfrFqcylYqgPZ9ANSbTAntnE= github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb/go.mod h1:ZjrT6AXHbDs86ZSdt/osfBi5qfexBrKUdONk989Wnk4= github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0 h1:sDMmm+q/3+BukdIpxwO365v/Rbspp2Nt5XntgQRXq8Q= github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= github.com/confluentinc/confluent-kafka-go v1.4.0/go.mod h1:u2zNLny2xq+5rWeTQjFHbDzzNuba4P1vo31r9r4uAdg= +github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E= github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= +github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI= github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= @@ -389,30 +500,39 @@ github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f2 github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA= github.com/containerd/cgroups v1.0.4/go.mod h1:nLNQtsF7Sl2HxNebu77i1R0oDlhiTG+kO4JTrUzo6IA= github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= +github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/containerd v1.3.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ= github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU= github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI= github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s= github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g= github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0QMhscqVp1AR9c= -github.com/containerd/containerd v1.6.8 h1:h4dOFDwzHmqFEP754PgfgTeVXFnLiRc6kiqC7tplDJs= -github.com/containerd/containerd v1.6.8/go.mod h1:By6p5KqPK0/7/CgO/A6t/Gz+CUYUu2zf1hUaaymVXB0= +github.com/containerd/containerd v1.6.15 h1:4wWexxzLNHNE46aIETc6ge4TofO550v+BlLoANrbses= +github.com/containerd/containerd v1.6.15/go.mod h1:U2NnBPIhzJDm59xF7xB2MMHnKtggpZ+phKg8o2TKj2c= github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= github.com/containerd/continuity v0.0.0-20200709052629-daa8e1ccc0bc/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= +github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= -github.com/containerd/continuity v0.2.2 h1:QSqfxcn8c+12slxwu00AtzXrsami0MJb/MQs9lOLHLA= -github.com/containerd/continuity v0.2.2/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk= +github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= +github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= @@ -422,9 +542,11 @@ github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O1 github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= +github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0= github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= @@ -432,15 +554,22 @@ github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFY github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= github.com/containerd/stargz-snapshotter/estargz v0.4.1/go.mod h1:x7Q9dg9QYb4+ELgxmo4gBUeJB0tl5dqH1Sdz0nJU1QM= +github.com/containerd/stargz-snapshotter/estargz v0.13.0 h1:fD7AwuVV+B40p0d9qVkH/Au1qhp8hn/HWJHIYjpEcfw= +github.com/containerd/stargz-snapshotter/estargz v0.13.0/go.mod h1:m+9VaGJGlhCnrcEUod8mYumTmRgblwd3rC5UCEh2Yp0= github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= -github.com/containerd/ttrpc v1.1.0 h1:GbtyLRxb0gOLR0TYQWt3O6B0NvT8tMdorEHqIQo/lWI= github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= +github.com/containerd/ttrpc v1.1.1-0.20220420014843-944ef4a40df3 h1:BhCp66ofL8oYcdelc3CBXc2/Pfvvgx+s+mrp9TvNgn8= +github.com/containerd/ttrpc v1.1.1-0.20220420014843-944ef4a40df3/go.mod h1:YYyNVhZrTMiaf51Vj6WhAJqJw+vl/nzABhj8pWrzle4= github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY= github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= +github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= @@ -454,6 +583,7 @@ github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHV github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= github.com/containernetworking/plugins v1.1.1 h1:+AGfFigZ5TiQH00vhR8qPeSatj53eNGz0C1d3wVYlHE= github.com/containernetworking/plugins v1.1.1/go.mod h1:Sr5TH/eBsGLXK/h71HeLfX19sZPp3ry5uHSkI4LPxV8= +github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -471,8 +601,9 @@ github.com/coreos/go-systemd v0.0.0-20180202092358-40e2722dffea h1:IHPWgevPcOUjT github.com/coreos/go-systemd v0.0.0-20180202092358-40e2722dffea/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/go-systemd/v22 v22.4.0 h1:y9YHcjnjynCd/DVbg5j9L/33jQM3MxJlbj/zWskzfGU= +github.com/coreos/go-systemd/v22 v22.4.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosiner/argv v0.1.0/go.mod h1:EusR6TucWKX+zFgtdUsKT2Cvg45K5rtpCcWz4hK06d8= @@ -491,16 +622,15 @@ github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1S github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= -github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/denisenkom/go-mssqldb v0.0.0-20200428022330-06a60b6afbbc/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/denisenkom/go-mssqldb v0.11.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= +github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= github.com/derekparker/trie v0.0.0-20200317170641-1fdf38b7b0e9/go.mod h1:D6ICZm05D9VN1n/8iOtBxLpXtoGp6HDFUJ1RNVieOSE= -github.com/dgraph-io/badger/v3 v3.2103.2 h1:dpyM5eCJAtQCBcMCZcT4UBZchuTJgCywerHHgmxfxM8= -github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= -github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= +github.com/dgraph-io/badger/v3 v3.2103.5 h1:ylPa6qzbjYRQMU6jokoj4wzcaweHylt//CH0AKt0akg= +github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-jump v0.0.0-20211018200510-ba001c3ffce0 h1:0wH6nO9QEa02Qx8sIQGw6ieKdz+BXjpccSOo9vXNl4U= @@ -510,24 +640,37 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cu github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48 h1:fRzb/w+pyskVMQ+UbP35JkH8yB7MYb4q/qhBarqZE6g= github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA= +github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= +github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= +github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E= +github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v23.0.0-rc.1+incompatible h1:Vl3pcUK4/LFAD56Ys3BrqgAtuwpWd/IO3amuSL0ZbP0= +github.com/docker/cli v23.0.0-rc.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= +github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker v1.4.2-0.20200319182547-c7ad2b866182/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.17+incompatible h1:JYCuMrWaVNophQTOrMMoSwudOVEfcegoZZrleKc1xwE= -github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v23.0.0-rc.1+incompatible h1:Dmn88McWuHc7BSNN1s6RtfhMmt6ZPQAYUEf7FhqpiQI= +github.com/docker/docker v23.0.0-rc.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= +github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= +github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= +github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= +github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= -github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/libnetwork v0.5.6 h1:hnGiypBsZR6PW1I8lqaBHh06U6LCJbI3IhOvfsZiymY= -github.com/docker/libnetwork v0.5.6/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= -github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 h1:iFaUwBSo5Svw6L7HYpRu/0lE3e0BaElwnNO1qkNQxBY= github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5/go.mod h1:qssHWj60/X5sZFNxpG4HBPDHVqxNm4DfnCKgrbZOT+s= @@ -542,7 +685,6 @@ github.com/elastic/go-elasticsearch/v6 v6.8.5/go.mod h1:UwaDJsD3rWLM5rKNFzv9hgox github.com/elastic/go-elasticsearch/v7 v7.17.1/go.mod h1:OJ4wdbtDNk5g503kvlHLyErCgQwwzmDtaFC4XyOxXA4= github.com/elastic/go-libaudit v0.4.0 h1:pxLCycMJKW91W8ZmZT74DQmryTZuXryKESo6sXdu1XY= github.com/elastic/go-libaudit v0.4.0/go.mod h1:lNJ7gX+arohEQTwqinAc8xycVuFNqsaunba1mwcBdvE= -github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= @@ -550,6 +692,8 @@ github.com/emicklei/go-restful v2.16.0+incompatible h1:rgqiKNjTnFQA6kkhFe16D8epT github.com/emicklei/go-restful v2.16.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful-swagger12 v0.0.0-20201014110547-68ccff494617 h1:jri9taV4TK9oItoWJCofXJi21Dp/k25u32NnfphqLAY= github.com/emicklei/go-restful-swagger12 v0.0.0-20201014110547-68ccff494617/go.mod h1:qr0VowGBT4CS4Q8vFF8BSeKz34PuqKGxs/L0IAQA9DQ= +github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -562,13 +706,14 @@ github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go. github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= -github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= +github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= @@ -576,6 +721,7 @@ github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flynn/go-docopt v0.0.0-20140912013429-f6dd2ebbb31e/go.mod h1:HyVoz1Mz5Co8TFO8EupIdlcpwShBmY98dkT2xeHkvEI= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= @@ -583,23 +729,26 @@ github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHqu github.com/foxcpp/go-mockdns v0.0.0-20210729171921-fb145fc6f897 h1:E52jfcE64UG42SwLmrW0QByONfGynWuzBvm86BoB9z8= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/frankban/quicktest v1.13.0/go.mod h1:qLE0fzW0VuyUAJgPU19zByoIr0HtCHN/r/VLSOOIySU= -github.com/frankban/quicktest v1.14.0 h1:+cqqvzZV87b4adx/5ayVOaYZ2CrvM4ejQvUdBzPPUss= github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og= +github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= github.com/freddierice/go-losetup v0.0.0-20170407175016-fc9adea44124 h1:TVfi5xMshZAXzVXozESk8bi0JSTPwHkx7qtLOkkcu/c= github.com/freddierice/go-losetup v0.0.0-20170407175016-fc9adea44124/go.mod h1:zAk7fcFx45euzK9Az14j6Hd9n8Cwhnjp/NBfhSIAmFg= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= +github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/garyburd/redigo v1.6.3/go.mod h1:rTb6epsqigu3kYKBnaF028A7Tf/Aw5s0cqA47doKKqw= github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= -github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U= +github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= github.com/go-chi/chi v1.5.0/go.mod h1:REp24E+25iKvxgeTfHmdUoL5x15kBiDBlnIl5bCwe2k= @@ -608,9 +757,21 @@ github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJ github.com/go-delve/delve v1.9.1 h1:HBvHO5anAntm2ORXKQJqH7R8bezmCuPO+Tf2SJZ2Ojw= github.com/go-delve/delve v1.9.1/go.mod h1:CET1wODsRJ2vlNepWyFEatwXRJ8rnrbgqaf1d4+Hgi4= github.com/go-delve/liner v1.2.3-0.20220127212407-d32d89dd2a5d/go.mod h1:biJCRbqp51wS+I92HMqn5H8/A0PAhxn2vyOT+JqhiGI= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= +github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.3.1 h1:CPiOUAzKtMRvolEKw+bG1PLRpT7D3LIs3/3ey4Aiu34= +github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-git-fixtures/v4 v4.2.1 h1:n9gGL1Ct/yIw+nfsfr8s4+sbhT+Ncu2SubfXjIWgci8= +github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= +github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4= +github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gorp/gorp/v3 v3.0.2 h1:ULqJXIekoqMx29FI5ekXXFoH1dT2Vc8UhnRzBg+Emz4= github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= @@ -645,25 +806,49 @@ github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNI github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/analysis v0.21.2/go.mod h1:HZwRk4RRisyG8vx2Oe6aqeSQcoxRp47Xkp3+K6q+LdY= +github.com/go-openapi/analysis v0.21.4 h1:ZDFLvSNxpDaomuCueM0BlSXxpANBlFYiBvr+GXrvIHc= +github.com/go-openapi/analysis v0.21.4/go.mod h1:4zQ35W4neeZTqh3ol0rv/O8JBbka9QyAgQRPp9y3pfo= +github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/errors v0.20.2/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/errors v0.20.3 h1:rz6kiC84sqNQoqrtulzaL/VERgkoCyB6WdEkc2ujzUc= +github.com/go-openapi/errors v0.20.3/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= -github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/loads v0.21.1/go.mod h1:/DtAMXXneXFjbQMGEtbamCZb+4x7eGwkvZCvBmwUG+g= +github.com/go-openapi/loads v0.21.2 h1:r2a/xFIYeZ4Qd2TnGpWDIQNcP80dIaZgf704za8enro= +github.com/go-openapi/loads v0.21.2/go.mod h1:Jq58Os6SSGz0rzh62ptiu8Z31I+OTHqmULx5e/gJbNw= +github.com/go-openapi/runtime v0.24.2 h1:yX9HMGQbz32M87ECaAhGpJjBmErO3QLcgdZj9BzGx7c= +github.com/go-openapi/runtime v0.24.2/go.mod h1:AKurw9fNre+h3ELZfk6ILsfvPN+bvvlaU/M9q/r9hpk= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= +github.com/go-openapi/spec v0.20.6/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= +github.com/go-openapi/spec v0.20.7 h1:1Rlu/ZrOCCob0n+JKKJAWhNWMPW8bOZRg8FJaY+0SKI= +github.com/go-openapi/spec v0.20.7/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= +github.com/go-openapi/strfmt v0.21.0/go.mod h1:ZRQ409bWMj+SOgXofQAGTIo2Ebu72Gs+WaRADcS5iNg= +github.com/go-openapi/strfmt v0.21.1/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= +github.com/go-openapi/strfmt v0.21.2/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= +github.com/go-openapi/strfmt v0.21.3 h1:xwhj5X6CjXEZZHMWy1zKJxvW9AfHC9pkyUjLvHtKG7o= +github.com/go-openapi/strfmt v0.21.3/go.mod h1:k+RzNO0Da+k3FrrynSNN8F7n/peCmQQqbbXjtDfvmGg= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-openapi/swag v0.21.1 h1:wm0rhTb5z7qpJRHBdPOMuY4QjVUMbF6/kwoYeRAOrKU= +github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/validate v0.21.0/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= +github.com/go-openapi/validate v0.22.0 h1:b0QecH6VslW/TxtpKgzpO1SNG7GU2FsaqKdP1E2T50Y= +github.com/go-openapi/validate v0.22.0/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= github.com/go-pg/pg/v10 v10.0.0/go.mod h1:XHU1AkQW534GFuUdSiQ46+Xw6Ah+9+b8DlT4YwhiXL8= github.com/go-pg/zerochecker v0.2.0/go.mod h1:NJZ4wKL0NmTtz0GKCoJ8kym6Xn/EQzXRl2OnAe7MmDo= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= @@ -676,6 +861,8 @@ github.com/go-playground/validator/v10 v10.10.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4 github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-redis/redis/v7 v7.1.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= github.com/go-redis/redis/v8 v8.0.0/go.mod h1:isLoQT/NFSP7V67lyvM9GmdvLdyZ7pEhsXvvyQtnQTo= +github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= +github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-redis/redis/v9 v9.0.0-rc.2 h1:IN1eI8AvJJeWHjMW/hlFAv2sAfvTun2DVksDDJ3a6a0= github.com/go-redis/redis/v9 v9.0.0-rc.2/go.mod h1:cgBknjwcBJa2prbnuHH/4k/Mlj4r0pWNV2HBanHujfY= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= @@ -683,11 +870,12 @@ github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LB github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/go-test/deep v1.0.5 h1:AKODKU3pDH1RzZzm6YZu77YWtEAq6uh1rLIAQlay2qc= -github.com/go-test/deep v1.0.5/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= +github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M= +github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= @@ -714,7 +902,9 @@ github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/V github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/goccy/go-yaml v1.8.2 h1:gDYrSN12XK/wQTFjxWIgcIqjNCV/Zb5V09M7cq+dbCs= github.com/gocql/gocql v0.0.0-20220224095938-0eacd3183625/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJrHG8= +github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus v4.1.0+incompatible h1:WqqLRTsQic3apZUK9qC5sGNfXthmPXzUZ7nQPrNITa4= @@ -729,21 +919,27 @@ github.com/godror/knownpb v0.1.0 h1:dJPK8s/I3PQzGGaGcUStL2zIaaICNzKKAK8BzP1uLio= github.com/godror/knownpb v0.1.0/go.mod h1:4nRFbQo1dDuwKnblRXDxrfCFYeT4hjg3GjMqef58eRE= github.com/gofiber/fiber/v2 v2.11.0/go.mod h1:oZTLWqYnqpMMuF922SjGbsYZsdpE1MCfh416HNdweIM= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/googleapis v1.4.0 h1:zgVt4UpGxcqVOw97aRGxT4svlcmdK35fynLNctY32zI= +github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= +github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= +github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -760,7 +956,6 @@ github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71 github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -793,6 +988,7 @@ github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9 github.com/google/cel-go v0.9.0/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA= github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw= +github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -810,14 +1006,17 @@ github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-containerregistry v0.5.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYVaIZs/MK/Jz5any1wFW0= +github.com/google/go-containerregistry v0.12.0 h1:nidOEtFYlgPCRqxCKj/4c/js940HVWplCWc5ftdfdUA= +github.com/google/go-containerregistry v0.12.0/go.mod h1:sdIK+oHQO7B93xI8UweYdl887YhuIwg9vz8BSLH3+8k= github.com/google/go-dap v0.6.0/go.mod h1:5q8aYQFnHOAZEMP+6vmq25HKYAEwE+LF5yh7JKrrhSQ= -github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= +github.com/google/licenseclassifier/v2 v2.0.0 h1:1Y57HHILNf4m0ABuMVb6xk4vAJYEUO0gDxNpog0pyeA= +github.com/google/licenseclassifier/v2 v2.0.0/go.mod h1:cOjbdH0kyC9R22sdQbYsFkto4NGCAc+ZSwbeThazEtM= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -840,30 +1039,32 @@ github.com/google/pprof v0.0.0-20210423192551-a2663126120b/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/wire v0.5.0 h1:I7ELFeVBr3yfPIcc8+MWvrjk+3VjbcSzoXm3JVa+jD8= +github.com/google/wire v0.5.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/googleapis/enterprise-certificate-proxy v0.2.0 h1:y8Yozv7SZtlU//QXbezB6QkpuE6jMD2/gfzk4AftXjs= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= -github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw= github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.5.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= @@ -873,7 +1074,9 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gosnmp/gosnmp v1.34.1-0.20220306115220-ca8397b73095 h1:IL2nwZxmnTCUn4fG6uIMik78zvFWZK+mr4jJ0cRupv0= github.com/gosnmp/gosnmp v1.34.1-0.20220306115220-ca8397b73095/go.mod h1:QWTRprXN9haHFof3P96XTDYc46boCGAh5IXp0DniEx4= +github.com/gosuri/uitable v0.0.4 h1:IG2xLKRvErL3uhY6e1BylFzG+aJiwQviDDTfOKeKTpY= github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.0/go.mod h1:mJzapYve32yjrKlk9GbyCZHuPgZsrbyIbyKhSzOpg6s= @@ -894,13 +1097,16 @@ github.com/h2non/filetype v1.1.2-0.20210602110014-3305bbb7ac7b/go.mod h1:319b3zT github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= github.com/hashicorp/consul/api v1.0.0/go.mod h1:mbFwfRxOTDHZpT3iUsMAFcLNoVm6Xbe1xZ6KiSm8FY0= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/api v1.13.0 h1:2hnLQ0GjQvw7f3O61jMO8gbasZviZTrt9R8WzgiirHc= github.com/hashicorp/consul/api v1.13.0/go.mod h1:ZlVrynguJKcYr54zGaDbaL3fOvKC9m72FhPvA8T35KQ= +github.com/hashicorp/consul/api v1.18.0 h1:R7PPNzTCeN6VuQNDwwhZWJvzCtGSrNpJqfb22h3yH9g= +github.com/hashicorp/consul/api v1.18.0/go.mod h1:owRRGJ9M5xReDC5nfT8FTJrNAPbT4NM6p/k+d03q2v4= github.com/hashicorp/consul/internal v0.1.0/go.mod h1:zi9bMZYbiPHyAjgBWo7kCUcy5l2NrTdrkVupCc7Oo6c= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.7.0/go.mod h1:fY08Y9z5SvJqevyZNy6WWPXiG3KwBPAvlcdx16zZ0fM= -github.com/hashicorp/consul/sdk v0.8.0 h1:OJtKBtEjboEZvG6AOUdh4Z1Zbyu0WcxQ0qatRrZHTVU= github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= +github.com/hashicorp/consul/sdk v0.13.0 h1:lce3nFlpv8humJL8rNrrGHYSKc3q+Kxfeg3Ii1m6ZWU= +github.com/hashicorp/consul/sdk v0.13.0/go.mod h1:0hs/l5fOVhJy/VdcoaNqUSi2AUs95eF5WKtv+EYIQqE= +github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -908,20 +1114,23 @@ github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-getter v1.6.2 h1:7jX7xcB+uVCliddZgeKyNxv0xoT7qL5KDtH7rU4IqIk= +github.com/hashicorp/go-getter v1.6.2/go.mod h1:IZCrswsZPeWv9IkVnLElzRU/gz/QPi6pZHn4tv6vbwA= github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.0.0 h1:bkKf0BeBXcSYa7f5Fyi9gMuQ8gNsxeiNpZjR6VxNZeo= -github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.2.0 h1:La19f8d7WIlm4ogzNHB0JGqs5AUDAZ2UfCY4sJXcJdM= +github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-kms-wrapping/entropy v0.1.0/go.mod h1:d1g9WGtAunDNpek8jUIEJnBlbgKS1N2Q61QkHiZyR1g= github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= @@ -931,10 +1140,14 @@ github.com/hashicorp/go-plugin v1.4.3/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ3 github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-retryablehttp v0.7.2 h1:AcYqCvkpalPnPF2pn0KamgwamS42TqUDDYFRKq/RAd0= +github.com/hashicorp/go-retryablehttp v0.7.2/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= +github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= github.com/hashicorp/go-secure-stdlib/base62 v0.1.1/go.mod h1:EdWO6czbmthiwZ3/PUsDV+UD1D5IRU4ActiaWGwt0Yw= github.com/hashicorp/go-secure-stdlib/mlock v0.1.1/go.mod h1:zq93CJChV6L9QTfGKtfBxKqD7BqqXx5O04A/ns2p5+I= github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8= @@ -947,10 +1160,13 @@ github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjG github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -960,18 +1176,21 @@ github.com/hashicorp/golang-lru/v2 v2.0.1 h1:5pv5N1lT1fjLg2VQ5KWc7kmucp2x/kvFOnx github.com/hashicorp/golang-lru/v2 v2.0.1/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/hcl/v2 v2.14.1 h1:x0BpjfZ+CYdbiz+8yZTQ+gdLO7IXvOut7Da+XJayx34= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/memberlist v0.1.6/go.mod h1:5VDNHjqFMgEcclnwmkCnC99IPwxBmIsxwY8qn+Nl0H4= -github.com/hashicorp/memberlist v0.3.0 h1:8+567mCcFDnS5ADl7lrpxPMWiFCElyUEeW0gtj34fMA= github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM= +github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/serf v0.8.6/go.mod h1:P/AVgr4UHsUYqVHG1y9eFhz8S35pqhGhLZaDpfGKIMo= -github.com/hashicorp/serf v0.9.6 h1:uuEX1kLR6aoda1TBttmJQKDLZE1Ob7KN0NPdE7EtCDc= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= +github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q= github.com/hashicorp/vault/api v1.1.0/go.mod h1:R3Umvhlxi2TN7Ex2hzOowyeNb+SfbVWI973N+ctaFMk= github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M= @@ -988,19 +1207,22 @@ github.com/huandu/xstrings v1.3.3 h1:/Gcsuc1x8JVbJ9/rlye4xZnVAbEkGauT8lbebqcQws4 github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0 h1:i462o439ZjprVSFSZLZxcsoAe592sZB1rci2Z8j4wdk= github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= -github.com/ianlancetaylor/cgosymbolizer v0.0.0-20201204192058-7acc97e53614 h1:C4ihxAUmsEyBsTEIqKaIsTTeGk0c9Oy7K1AbRnw3lTc= -github.com/ianlancetaylor/cgosymbolizer v0.0.0-20201204192058-7acc97e53614/go.mod h1:a5aratAVTWyz+nJMmDsN8O4XTfaLfdAsB1ysCmZX5Bw= +github.com/ianlancetaylor/cgosymbolizer v0.0.0-20221208003206-eaf69f594683 h1:K5WubDh+7FP4wf8HB+vOrUmeCoGMYmLv0QMfWYA4oCk= +github.com/ianlancetaylor/cgosymbolizer v0.0.0-20221208003206-eaf69f594683/go.mod h1:DvXTE/K/RtHehxU8/GtDs4vFtfw64jJ3PaCnFri8CRg= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639 h1:mV02weKRL81bEnm8A0HT1/CAelMQDBuQIfLw8n+d6xI= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/iceber/iouring-go v0.0.0-20220511091803-99712053f7ec h1:2GZMXHuaYOUFqvB3MFDsOxtuNTSCVBL+yptA99ASdvU= github.com/iceber/iouring-go v0.0.0-20220511091803-99712053f7ec/go.mod h1:LEzdaZarZ5aqROlLIwJ4P7h3+4o71008fSy6wpaEB+s= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= +github.com/in-toto/in-toto-golang v0.5.0 h1:hb8bgwr0M2hGdDsLjkJ3ZqJ8JFLL/tgYdAxF/XEFBbY= +github.com/in-toto/in-toto-golang v0.5.0/go.mod h1:/Rq0IZHLV7Ku5gielPT4wPHJfH1GdHMCq8+WPxw8/BE= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= @@ -1008,8 +1230,8 @@ github.com/invopop/jsonschema v0.7.0 h1:2vgQcBz1n256N+FpX3Jq7Y17AjYt46Ig3zIWyy77 github.com/invopop/jsonschema v0.7.0/go.mod h1:O9uiLokuu0+MGFlyiaqtWxwqJm41/+8Nj0lD7A36YH0= github.com/iovisor/gobpf v0.2.0 h1:34xkQxft+35GagXBk3n23eqhm0v7q0ejeVirb8sqEOQ= github.com/iovisor/gobpf v0.2.0/go.mod h1:WSY9Jj5RhdgC3ci1QaacvbFdQ8cbrEjrpiZbLHLt2s4= -github.com/itchyny/gojq v0.12.10 h1:6TcS0VYWS6wgntpF/4tnrzwdCMjiTxRAxIqZWfDsDQU= -github.com/itchyny/gojq v0.12.10/go.mod h1:o3FT8Gkbg/geT4pLI0tF3hvip5F3Y/uskjRz9OYa38g= +github.com/itchyny/gojq v0.12.11 h1:YhLueoHhHiN4mkfM+3AyJV6EPcCxKZsOnYf+aVSwaQw= +github.com/itchyny/gojq v0.12.11/go.mod h1:o3FT8Gkbg/geT4pLI0tF3hvip5F3Y/uskjRz9OYa38g= github.com/itchyny/timefmt-go v0.1.5 h1:G0INE2la8S6ru/ZI5JecgyzbbJNs5lG1RcBqa7Jm6GE= github.com/itchyny/timefmt-go v0.1.5/go.mod h1:nEP7L+2YmAbT2kZ2HfSs1d8Xtw9LY8D2stDBckWakZ8= github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= @@ -1068,15 +1290,21 @@ github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dv github.com/jackc/puddle v1.1.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.2.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= github.com/jinzhu/gorm v1.9.1/go.mod h1:Vla75njaFJ8clLU1W44h34PjIkijhjHIYnZxMqCdxqo= +github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jinzhu/now v1.1.3/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jlaffaye/ftp v0.0.0-20180404123514-2403248fa8cc/go.mod h1:lli8NYPQOFy3O++YmYbqVgOcQ1JPCwdOy+5zSjKJ9qY= github.com/jlaffaye/ftp v0.0.0-20200812143550-39e3779af0db h1:e30IC+OuZIeMVK33/zE7wDvxDaRmGuRt/ps67pzcxAw= github.com/jlaffaye/ftp v0.0.0-20200812143550-39e3779af0db/go.mod h1:2lmrmq866uF2tnje75wQHzmPXhmSWUt7Gyx2vgK1RCU= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -1097,10 +1325,8 @@ github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFF github.com/josharian/native v1.0.0 h1:Ts/E8zCSEsG17dUqv7joXJFybuMLjQfWE04tsBODTxk= github.com/josharian/native v1.0.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -1121,6 +1347,10 @@ github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaR github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= github.com/karrick/godirwalk v1.17.0 h1:b4kY7nqDdioR/6qnbHQyDvmA17u5G1cZ6J+CZXwSWoI= github.com/karrick/godirwalk v1.17.0/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 h1:DowS9hvgyYSX4TO5NpyC606/Z4SxnNYbT+WX27or6Ck= +github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= @@ -1129,6 +1359,7 @@ github.com/kjk/lzma v0.0.0-20161016003348-3fd93898850d h1:RnWZeH8N8KXfbwMTex/KKM github.com/kjk/lzma v0.0.0-20161016003348-3fd93898850d/go.mod h1:phT/jsRPBAEqjAibu1BurrabCBNTYiVI+zbmyCZJY6Q= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/compress v1.11.2/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= @@ -1138,14 +1369,25 @@ github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8 github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.14.2/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= -github.com/klauspost/compress v1.15.12 h1:YClS/PImqYbn+UILDnqxQCZ3RehC9N318SU3kElDUEM= github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw= +github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/crc32 v1.2.0/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg= github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/knadh/koanf v1.4.4 h1:d2jY5nCCeoaiqvEKSBW9rEc93EfNy/XWgWsSB3j7JEA= -github.com/knadh/koanf v1.4.4/go.mod h1:Hgyjp4y8v44hpZtPzs7JZfRAW5AhN7KfZcwv1RYggDs= +github.com/knadh/koanf v1.5.0 h1:q2TSd/3Pyc/5yP9ldIrSdIz26MCcyNQzW0pEAugLPNs= +github.com/knadh/koanf v1.5.0/go.mod h1:Hgyjp4y8v44hpZtPzs7JZfRAW5AhN7KfZcwv1RYggDs= +github.com/knqyf263/go-apk-version v0.0.0-20200609155635-041fdbb8563f h1:GvCU5GXhHq+7LeOzx/haG7HSIZokl3/0GkoUFzsRJjg= +github.com/knqyf263/go-apk-version v0.0.0-20200609155635-041fdbb8563f/go.mod h1:q59u9px8b7UTj0nIjEjvmTWekazka6xIt6Uogz5Dm+8= +github.com/knqyf263/go-deb-version v0.0.0-20190517075300-09fca494f03d h1:X4cedH4Kn3JPupAwwWuo4AzYp16P0OyLO9d7OnMZc/c= +github.com/knqyf263/go-deb-version v0.0.0-20190517075300-09fca494f03d/go.mod h1:o8sgWoz3JADecfc/cTYD92/Et1yMqMy0utV1z+VaZao= +github.com/knqyf263/go-rpm-version v0.0.0-20220614171824-631e686d1075 h1:aC6MEAs3PE3lWD7lqrJfDxHd6hcced9R4JTZu85cJwU= +github.com/knqyf263/go-rpm-version v0.0.0-20220614171824-631e686d1075/go.mod h1:i4sF0l1fFnY1aiw08QQSwVAFxHEm311Me3WsU/X7nL0= +github.com/knqyf263/go-rpmdb v0.0.0-20221030142135-919c8a52f04f h1:oz80cOWEcx/tTh5T0g43oz5W7zZw8jm7zD5BR9tQjX8= +github.com/knqyf263/go-rpmdb v0.0.0-20221030142135-919c8a52f04f/go.mod h1:zp6SMcRd0GB+uwNJjr+DkrNZdQZ4er2HMO6KyD0vIGU= +github.com/knqyf263/nested v0.0.1 h1:Sv26CegUMhjt19zqbBKntjwESdxe5hxVPSk0+AKjdUc= +github.com/knqyf263/nested v0.0.1/go.mod h1:zwhsIhMkBg90DTOJQvxPkKIypEHPYkgWHs4gybdlUmk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -1154,42 +1396,51 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/labstack/echo v3.3.10+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s= github.com/labstack/echo/v4 v4.2.0/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= +github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw= +github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/liamg/iamgo v0.0.9 h1:tADGm3xVotyRJmuKKaH4+zsBn7LOcvgdpuF3WsSKW3c= +github.com/liamg/jfather v0.0.7 h1:Xf78zS263yfT+xr2VSo6+kyAy4ROlCacRqJG7s5jt4k= +github.com/liamg/jfather v0.0.7/go.mod h1:xXBGiBoiZ6tmHhfy5Jzw8sugzajwYdi6VosIpB3/cPM= +github.com/liamg/memoryfs v1.4.3 h1:+ChjcuPRYpjJSulD13PXDNR3JeJ5HUYKjLHyWVK0bqU= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8= github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= github.com/libp2p/go-reuseport v0.1.0 h1:0ooKOx2iwyIkf339WCZ2HN3ujTDbkK0PjC7JVoP1AiM= github.com/libp2p/go-reuseport v0.1.0/go.mod h1:bQVn9hmfcTaoo0c9v5pBhOarsU1eNOBZdaAd2hzXRKU= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c h1:VtwQ41oftZwlMnOEbMWQtSEUgU64U4s+GHk7hZK+jtY= github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE= -github.com/lxn/walk v0.0.0-20180521183810-02935bac0ab8 h1:kqUcMNgwsZClDdT80kUmq8sidJQKQS2KyQQ0DTgbqNU= -github.com/lxn/walk v0.0.0-20180521183810-02935bac0ab8/go.mod h1:E23UucZGqpuUANJooIbHWCufXvOcT6E7Stq81gU+CSQ= -github.com/lxn/win v0.0.0-20191128105842-2da648fda5b4 h1:5BmtGkQbch91lglMHQ9JIDGiYCL3kBRBA0ItZTvOcEI= -github.com/lxn/win v0.0.0-20191128105842-2da648fda5b4/go.mod h1:ouWl4wViUNh8tPSIwxTVMuS014WakR1hqvBc2I0bMoA= +github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40 h1:EnfXoSqDfSNJv0VBNqY/88RNnhSGYkrHaO0mmFGbVsc= +github.com/lunixbochs/struc v0.0.0-20200707160740-784aaebc1d40/go.mod h1:vy1vK6wD6j7xX6O6hXe621WabdtNkou2h7uRtTfRMyg= +github.com/lxn/walk v0.0.0-20210112085537-c389da54e794 h1:NVRJ0Uy0SOFcXSKLsS65OmI1sgCCfiDUPj+cwnH7GZw= +github.com/lxn/walk v0.0.0-20210112085537-c389da54e794/go.mod h1:E23UucZGqpuUANJooIbHWCufXvOcT6E7Stq81gU+CSQ= +github.com/lxn/win v0.0.0-20210218163916-a377121e959e h1:H+t6A/QJMbhCSEH5rAuRxh+CtW96g0Or0Fxa9IKr4uc= +github.com/lxn/win v0.0.0-20210218163916-a377121e959e/go.mod h1:KxxjdtRkfNoYDCUP5ryK7XJJNTnpC8atvtmTheChOtk= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= -github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mailru/easyjson v0.0.0-20180730094502-03f2033d19d5/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -1199,20 +1450,37 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= +github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11 h1:YFh+sjyJTMQSYjKwM4dFKhJPJC/wfo98tPUc17HdoYw= github.com/martini-contrib/render v0.0.0-20150707142108-ec18f8345a11/go.mod h1:Ah2dBMoxZEqk118as2T4u4fjfXarE0pPnMJaArZQZsI= +github.com/masahiro331/go-disk v0.0.0-20220919035250-c8da316f91ac h1:QyRucnGOLHJag1eB9CtuZwZk+/LpvTSYr5mnFLLFlgA= +github.com/masahiro331/go-disk v0.0.0-20220919035250-c8da316f91ac/go.mod h1:J7Vb0sf0JzOhT0uHTeCqO6dqP/ELVcQvQ6yQ/56ZRGw= +github.com/masahiro331/go-ebs-file v0.0.0-20221225061409-5ef263bb2cc3 h1:CCX8exCYIPHrMKba1KDhM37PxC3/amBUZXH8yoJOAMQ= +github.com/masahiro331/go-ebs-file v0.0.0-20221225061409-5ef263bb2cc3/go.mod h1:5NOkqebMwu8UiOTSjwqam1Ykdr7fci52TVE2xDQnIiM= +github.com/masahiro331/go-ext4-filesystem v0.0.0-20221225060520-c150f5eacfe1 h1:GBZZSY8xEoAf76ZOlxqKi/OMufpZnTxpTf7ectT1eNM= +github.com/masahiro331/go-ext4-filesystem v0.0.0-20221225060520-c150f5eacfe1/go.mod h1:X08d9nmB+eg7Gj2XWAOkiG8lbMFbgGXPsDKEvkFwyF8= +github.com/masahiro331/go-mvn-version v0.0.0-20210429150710-d3157d602a08 h1:AevUBW4cc99rAF8q8vmddIP8qd/0J5s/UyltGbp66dg= +github.com/masahiro331/go-mvn-version v0.0.0-20210429150710-d3157d602a08/go.mod h1:JOkBRrE1HvgTyjk6diFtNGgr8XJMtIfiBzkL5krqzVk= +github.com/masahiro331/go-vmdk-parser v0.0.0-20221225061455-612096e4bbbd h1:Y30EzvuoVp97b0unb/GOFXzBUKRXZXUN2e0wYmvC+ic= +github.com/masahiro331/go-vmdk-parser v0.0.0-20221225061455-612096e4bbbd/go.mod h1:5f7mCJGW9cJb8SDn3z8qodGxpMCOo8d/2nls/tiwRrw= +github.com/masahiro331/go-xfs-filesystem v0.0.0-20221225060805-c02764233454 h1:XHFL/6QXvGlsBZ6xZvLPSsQW5QIzrOnNUKgkjRo7KWo= +github.com/masahiro331/go-xfs-filesystem v0.0.0-20221225060805-c02764233454/go.mod h1:QKBZqdn6teT0LK3QhAf3K6xakItd1LonOShOEC44idQ= +github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= +github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= @@ -1225,7 +1493,9 @@ github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peK github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= @@ -1234,10 +1504,11 @@ github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vq github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/mattn/go-sqlite3 v1.14.12/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/mattn/go-sqlite3 v1.14.12 h1:TJ1bhYJPV44phC+IMu1u2K/i5RriLTPe+yc68XDJ1Z0= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= github.com/mdlayher/netlink v1.6.2 h1:D2zGSkvYsJ6NreeED3JiVTu1lj2sIYATqSaZlhPzUgQ= github.com/mdlayher/netlink v1.6.2/go.mod h1:O1HXX2sIWSMJ3Qn1BYZk1yZM+7iMki/uYGGiwGyq/iU= @@ -1245,6 +1516,8 @@ github.com/mdlayher/socket v0.2.3 h1:XZA2X2TjdOwNoNPVPclRCURoX/hokBY8nkTmRZFEheM github.com/mdlayher/socket v0.2.3/go.mod h1:bz12/FozYNH/VbvC3q7TRIK/Y6dH1kCKsXaUeXi/FmY= github.com/mholt/archiver/v3 v3.5.1 h1:rDjOBX9JSF5BvoJGvjqK479aL70qh9DIpZCl+k7Clwo= github.com/mholt/archiver/v3 v3.5.1/go.mod h1:e3dqJ7H78uzsRSEACH1joayhuSyhnonssnDhppzS1L4= +github.com/microsoft/go-rustaudit v0.0.0-20220808201409-204dfee52032 h1:TLygBUBxikNJJfLwgm+Qwdgq1FtfV8Uh7bcxRyTzK8s= +github.com/microsoft/go-rustaudit v0.0.0-20220808201409-204dfee52032/go.mod h1:vYT9HE7WCvL64iVeZylKmCsWKfE+JZ8105iuh2Trk8g= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.25/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= @@ -1265,44 +1538,53 @@ github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go. github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4= +github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mkrautz/goar v0.0.0-20150919110319-282caa8bd9da h1:Iu5QFXIMK/YrHJ0NgUnK0rqYTTyb0ldt/rqNenAj39U= github.com/mkrautz/goar v0.0.0-20150919110319-282caa8bd9da/go.mod h1:NfnmoBY0gGkr3/NmI+DP/UXbZvOCurCUYAzOdYJjlOc= +github.com/moby/buildkit v0.11.0 h1:GqBC/ETDqwdu61g4tCxX1GFZuGWg/nuqFxamb2or1dw= +github.com/moby/buildkit v0.11.0/go.mod h1:v43oa6H2Fx/cdzc7j0UlUu8p6188yy1P3vrujAs99uw= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= +github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78= github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI= -github.com/moby/sys/signal v0.6.0 h1:aDpY94H8VlhTGa9sNYUFCFsMZIUh5wm0B6XkIoJj/iY= -github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= +github.com/moby/sys/signal v0.7.0 h1:25RW3d5TnQEoKvRbEKUGay6DCQ46IxAVTT9CUMgmsSI= +github.com/moby/sys/signal v0.7.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= -github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= -github.com/moby/term v0.0.0-20210610120745-9d4ed1856297 h1:yH0SvLzcbZxcJXho2yh7CqdENGMQe73Cw3woZBpPli0= github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= +github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb h1:e+l77LJOEqXTIQihQJVkA6ZxPOUmfPM5e4H7rcpgtSk= github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= @@ -1317,6 +1599,7 @@ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRW github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/ncw/swift v1.0.30/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= +github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= github.com/netsampler/goflow2 v1.1.1-0.20220825033856-d6caeaacddbb h1:4Zzp+I9TvRo9OufYGl9lK67mkEjlT+YROxj6oWbD788= github.com/netsampler/goflow2 v1.1.1-0.20220825033856-d6caeaacddbb/go.mod h1:C9f54WtFVVbGpPWnpLMz+/hS3c7wc4L0g9ZzdIFAcuM= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= @@ -1329,6 +1612,7 @@ github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= @@ -1341,7 +1625,6 @@ github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= @@ -1367,20 +1650,24 @@ github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAl github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E= -github.com/open-policy-agent/opa v0.45.0 h1:P5nuhVRtR+e58fk3CMMbiqr6ZFyWQPNOC3otsorGsFs= -github.com/open-policy-agent/opa v0.45.0/go.mod h1:/OnsYljNEWJ6DXeFOOnoGn8CvwZGMUS4iRqzYdJvmBI= -github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.64.0 h1:q/eqvFPeeAxZ+By7v7kZCboH0Qd8SlGoZhSJm0+Ep7I= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.64.0 h1:s+o8etLMu6wLm+iNE0A2mj71hqn1gMy/EmMvs99gpnc= -github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.64.0/go.mod h1:NXLo+jR2eisTG28/+UAtk7GJxdag/osWRP99PFbc0Is= +github.com/open-policy-agent/opa v0.48.0 h1:s2K823yohAUu/HB4MOPWDhBh88JMKQv7uTr6S89fbM0= +github.com/open-policy-agent/opa v0.48.0/go.mod h1:CsQcksP+qGBxO9oEBj1NnZqKcjgjmTJbRNTzjZB/DXQ= +github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.70.0 h1:PPxT/5yr3mW+1DECtHyi/olnX+SVYsgsH6tD9LIOj5Y= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.70.0 h1:PmrJJNn00th9SNrw1MAQDse7q+5sKYK8FifTogpOAUw= +github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.70.0/go.mod h1:LkspJrJbYemKhWbvWLaaTbUt3x6Esll4EbpOhMPPsS4= +github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 h1:rc3tiVYb5z54aKaDfakKn0dDjIyPpTtszkjuMzyt7ec= -github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= @@ -1388,26 +1675,36 @@ github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20220311020903-6969a0a09ab1 h1:DUNsiyVYdBOR9Ztzo4/AxcT2KsIV6apA0NvF2gZTXVQ= +github.com/opencontainers/runtime-spec v1.0.3-0.20220311020903-6969a0a09ab1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= -github.com/opencontainers/selinux v1.10.1 h1:09LIPVRP3uuZGQvgR+SgMSNBd1Eb3vlRbGqQpoHsF8w= -github.com/opencontainers/selinux v1.10.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= +github.com/opencontainers/selinux v1.10.2 h1:NFy2xCsjn7+WspbfZkUd5zyVeisV7VFbPSP96+8/ha4= +github.com/opencontainers/selinux v1.10.2/go.mod h1:cARutUbaUrlRClyvxOICCgKixCs6L05aUsohzA3EkHQ= github.com/openshift/api v3.9.0+incompatible h1:fJ/KsefYuZAjmrr3+5U9yZIZbTOpVkDDLDLFresAeYs= github.com/openshift/api v3.9.0+incompatible/go.mod h1:dh9o4Fs58gpFXGSYfnVxGR9PnV53I8TW84pQaJDdGiY= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= +github.com/outcaste-io/ristretto v0.2.0 h1:47w059XTZWFt01OucwjcBt8mEa3VUUhntUWEfmgVBFc= +github.com/outcaste-io/ristretto v0.2.0/go.mod h1:iBZA7RCt6jaOr0z6hiBQ6t662/oZ6Gx/yauuPvIWHAI= +github.com/owenrumney/go-sarif v1.1.1/go.mod h1:dNDiPlF04ESR/6fHlPyq7gHKmrM0sHUvAGjsoh8ZH0U= +github.com/owenrumney/go-sarif/v2 v2.1.2 h1:PMDK7tXShJ9zsB7bfvlpADH5NEw1dfA9xwU8Xtdj73U= +github.com/owenrumney/go-sarif/v2 v2.1.2/go.mod h1:MSqMMx9WqlBSY7pXoOZWgEsVB4FDNfhcaXDA1j6Sr+w= +github.com/owenrumney/squealer v1.0.1-0.20220510063705-c0be93f0edea h1:RwQ26NYF4vvP7GckFRB4ABL18Byo7vnYBzMpmZKkGwQ= +github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= github.com/oxtoacart/bpool v0.0.0-20150712133111-4e1c5567d7c2 h1:CXwSGu/LYmbjEab5aMCs5usQRVBGThelUKBNnoSOuso= github.com/oxtoacart/bpool v0.0.0-20150712133111-4e1c5567d7c2/go.mod h1:L3UMQOThbttwfYRNFOWLLVXMhk5Lkio4GGOtw5UrxS0= +github.com/package-url/packageurl-go v0.1.1-0.20220428063043-89078438f170 h1:DiLBVp4DAcZlBVBEtJpNWZpZVq0AEeCY7Hqk8URVs4o= +github.com/package-url/packageurl-go v0.1.1-0.20220428063043-89078438f170/go.mod h1:uQd4a7Rh3ZsVg5j0lNyAfyxIeGde9yrlhjF78GzeW0c= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= @@ -1424,6 +1721,9 @@ github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrap github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= +github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= +github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/philhofer/fwd v1.1.1 h1:GdGcTjf5RNAxwS4QLsiMzJYj5KEvPJD3Abr261yRQXQ= github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= @@ -1443,7 +1743,6 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= @@ -1453,6 +1752,7 @@ github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c h1:NRoLoZvkB github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= +github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= @@ -1468,12 +1768,14 @@ github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrb github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= +github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -1485,8 +1787,9 @@ github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9 github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.39.0 h1:oOyhkDq05hPZKItWVBkJ6g6AtGxi+fy7F4JvUV8uhsI= +github.com/prometheus/common v0.39.0/go.mod h1:6XBZ7lYdLCbkAVhwRsWTZn+IN5AB9F/NXd5w0BbEX0Y= github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -1497,20 +1800,23 @@ github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDa github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= +github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0= github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rhnvrm/simples3 v0.6.1/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA= github.com/richardartoul/molecule v0.0.0-20210914193524-25d8911bb85b h1:mbJ/v+xr6vdyRt8JqWm4WJKu6pO1h/t2vInWU0eKPL4= github.com/richardartoul/molecule v0.0.0-20210914193524-25d8911bb85b/go.mod h1:uvX/8buq8uVeiZiFht+0lqSLBHF+uGV8BrTv8W/SIwk= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= @@ -1522,21 +1828,28 @@ github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= -github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= -github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= -github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= -github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= +github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= +github.com/rubenv/sql-migrate v1.1.2 h1:9M6oj4e//owVVHYrFISmY9LBRw6gzkCNmD9MV36tZeQ= +github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= +github.com/safchain/baloum v0.0.0-20221229104256-b1fc8f70a86b h1:cTiH46CYvPhgOlE0t82N+rgQw44b7vB39ay+P+wiVz8= +github.com/safchain/baloum v0.0.0-20221229104256-b1fc8f70a86b/go.mod h1:1+GWOH32bsIEAHknYja6/H1efcDs+/Q2XrtYMM200Ho= github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= +github.com/samber/lo v1.36.0 h1:4LaOxH1mHnbDGhTVE0i1z8v/lWaQW8AIfOD3HU4mSaw= +github.com/samber/lo v1.36.0/go.mod h1:HLeWcJRRyLKp3+/XBJvOrerCQn9mhdKMHyd7IRlgeQ8= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da h1:p3Vo3i64TCLY7gIfzeQaUJ+kppEO5WQG3cL8iE8tGHU= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/saracen/walker v0.0.0-20191201085201-324a081bae7e h1:NO86zOn5ScSKW8wRbMaSIcjDZUFpWdCQQnexRqZ9h9A= +github.com/saracen/walker v0.0.0-20191201085201-324a081bae7e/go.mod h1:G0Z6yVPru183i2MuRJx1DcR4dgIZtLcTdaaE/pC1BJU= github.com/sassoftware/go-rpmutils v0.2.0 h1:pKW0HDYMFWQ5b4JQPiI3WI12hGsVoW0V8+GMoZiI/JE= github.com/sassoftware/go-rpmutils v0.2.0/go.mod h1:TJJQYtLe/BeEmEjelI3b7xNZjzAukEkeWKmoakvaOoI= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= @@ -1549,8 +1862,13 @@ github.com/secure-systems-lab/go-securesystemslib v0.3.1/go.mod h1:o8hhjkbNl2gOa github.com/secure-systems-lab/go-securesystemslib v0.4.0 h1:b23VGrQhTA8cN2CbBw7/FulN9fTtqYUdS5+Oxzt+DUE= github.com/secure-systems-lab/go-securesystemslib v0.4.0/go.mod h1:FGBZgq2tXWICsxWQW1msNf49F0Pf2Op5Htayx335Qbs= github.com/segmentio/kafka-go v0.4.29/go.mod h1:m1lXeqJtIFYZayv0shM/tjrAFljvWLTprxBHd+3PnaU= -github.com/shirou/gopsutil/v3 v3.22.10 h1:4KMHdfBRYXGF9skjDWiL4RA2N+E8dRdodU/bOZpPoVg= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shibumi/go-pathspec v1.3.0 h1:QUyMZhFo0Md5B8zV8x2tesohbb5kfbpTi9rBnKh5dkI= +github.com/shibumi/go-pathspec v1.3.0/go.mod h1:Xutfslp817l2I1cZvgcfeMQJG5QnU2lh5tVaaMCl3jE= github.com/shirou/gopsutil/v3 v3.22.10/go.mod h1:QNza6r4YQoydyCfo6rH0blGfKahgibh4dQmV5xdFkQk= +github.com/shirou/gopsutil/v3 v3.22.12 h1:oG0ns6poeUSxf78JtOsfygNWuEHYYz8hnnNg7P04TJs= +github.com/shirou/gopsutil/v3 v3.22.12/go.mod h1:Xd7P1kwZcp5VW52+9XsirIKd/BROzbb2wdX3Kqlz9uI= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 h1:udFKJ0aHUL60LboW/A+DfgoHVedieIzIXE8uylPue0U= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= @@ -1558,6 +1876,8 @@ github.com/shopspring/decimal v0.0.0-20200227202807-02e2044944cc/go.mod h1:DKyhr github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sigstore/rekor v1.0.1 h1:rcESXSNkAPRWFYZel9rarspdvneET60F2ngNkadi89c= +github.com/sigstore/rekor v1.0.1/go.mod h1:ecTKdZWGWqE1pl3U1m1JebQJLU/hSjD9vYHOmHQ7w4g= github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -1590,7 +1910,11 @@ github.com/smira/go-xz v0.0.0-20150414201226-0c531f070014/go.mod h1:smSuTvETRIkX github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js= github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= +github.com/sosedoff/gitkit v0.3.0 h1:TfINVRNUM+GcFa+LGhZ3RcWN86Im1M6i8qs0IsgMy90= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spdx/gordf v0.0.0-20201111095634-7098f93598fb/go.mod h1:uKWaldnbMnjsSAXRurWqqrdyZen1R7kxl8TkmWk2OyM= +github.com/spdx/tools-golang v0.3.0 h1:rtm+DHk3aAt74Fh0Wgucb4pCxjXV8SqHCPEb2iBd30k= +github.com/spdx/tools-golang v0.3.0/go.mod h1:RO4Y3IFROJnz+43JKm1YOrbtgQNljW4gAPpA/sY2eqo= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= @@ -1606,7 +1930,6 @@ github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUq github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -1615,6 +1938,8 @@ github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/y github.com/spf13/viper v1.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= +github.com/spf13/viper v1.14.0 h1:Rg7d3Lo706X9tHsJMUjdiwMpHB7W8WnSVOssIY+JElU= +github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= github.com/square/certstrap v1.2.0 h1:ecgyABrbFLr8jSbOC6oTBmBek0t/HqtgrMUZCPuyfdw= github.com/square/certstrap v1.2.0/go.mod h1:CUHqV+fxJW0Y5UQFnnbYwQ7bpKXO1AKbic9g73799yw= github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= @@ -1628,7 +1953,6 @@ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoH github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -1643,6 +1967,9 @@ github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKs github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stvp/go-udp-testing v0.0.0-20201019212854-469649b16807/go.mod h1:7jxmlfBCDBXRzr0eAQJ48XC1hBu1np4CS5+cHEYfwpc= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= +github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= @@ -1657,6 +1984,7 @@ github.com/tedsuo/ifrit v0.0.0-20191009134036-9a97d0632f00 h1:mujcChM89zOHwgZBBN github.com/tedsuo/ifrit v0.0.0-20191009134036-9a97d0632f00/go.mod h1:eyZnKCc955uh98WQvzOm0dgAeLnf2O0Rz0LPoC5ze+0= github.com/tedsuo/rata v1.0.0 h1:Sf9aZrYy6ElSTncjnGkyC2yuVvz5YJetBIUKJ4CmeKE= github.com/tedsuo/rata v1.0.0/go.mod h1:X47ELzhOoLbfFIY0Cql9P6yo3Cdwf2CMX3FVZxRzJPc= +github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M= github.com/tidwall/assert v0.1.0/go.mod h1:QLYtGyeqse53vuELQheYl9dngGCJQ+mTtlxcktb+Kj8= github.com/tidwall/btree v0.3.0/go.mod h1:huei1BkDWJ3/sLXmO+bsCNELL+Bp2Kks9OLyQFkzvA8= github.com/tidwall/btree v1.1.0/go.mod h1:TzIRzen6yHbibdSfK6t8QimqbUnoxUSrZfeW7Uob0q4= @@ -1696,10 +2024,12 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20200122045848-3419fae592fc/go.mod h1 github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 h1:6fotK7otjonDflCTK0BCfls4SPy3NcCVb5dqqmbRknE= github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75/go.mod h1:KO6IkyS8Y3j8OdNO85qEYBsRPuteD+YciPomcXdrMnk= +github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc h1:9lRDQMhESg+zvGYmW5DyG0UqvY96Bu5QYsTLvCHdrgo= github.com/tmthrgd/go-hex v0.0.0-20190904060850-447a3041c3bc/go.mod h1:bciPuU6GHm1iF1pBvUfxfsH0Wmnc2VbpgvbI9ZWuIRs= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/twitchtv/twirp v8.1.1+incompatible/go.mod h1:RRJoFSAmTEh2weEqWtpPE3vFK5YBhA6bqp2l1kfCC5A= +github.com/twitchtv/twirp v8.1.2+incompatible h1:0O6TfzZW09ZP5r+ORA90XQEE3PTgA6C7MBbl2KxvVgE= +github.com/twitchtv/twirp v8.1.2+incompatible/go.mod h1:RRJoFSAmTEh2weEqWtpPE3vFK5YBhA6bqp2l1kfCC5A= github.com/twmb/murmur3 v1.1.6 h1:mqrRot1BRxm+Yct+vavLMou2/iJt0tNVTTC0QoIjaZg= github.com/twmb/murmur3 v1.1.6/go.mod h1:Qq/R7NUyOfr65zD+6Q5IHKsJLwP7exErjN6lyyq3OSQ= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= @@ -1710,10 +2040,18 @@ github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oW github.com/ulikunitz/xz v0.5.9/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.10 h1:t92gobL9l3HE202wg3rlk19F6X+JOxl9BBrCCMYEYd8= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/uptrace/bun v1.1.9 h1:6zs+YJcgw8oj67c+YmI8edQokDFeyR4BE/ykNWjGYYs= +github.com/uptrace/bun v1.1.9/go.mod h1:fpYRCGyruLCyP7dNjMfqulYn4VBP/fH0enc0j0yW/Cs= +github.com/uptrace/bun/dialect/pgdialect v1.1.9 h1:V23SU89WfjqtePLFPRXVXCwmSyYb0XKeg8Z6BMXgyHg= +github.com/uptrace/bun/dialect/pgdialect v1.1.9/go.mod h1:+ux7PjC4NYsNMdGE9b2ERxCi2jJai8Z8zniXFExq0Ns= +github.com/uptrace/bun/driver/pgdriver v1.1.9 h1:Dy9g/EpgOG15RP3mDAuJd/hnfXAUdBsfxpg9On27M+Y= +github.com/uptrace/bun/driver/pgdriver v1.1.9/go.mod h1:YnPHzR4fT24PXrBTcadclXfdtkR9dYouqk2HwOiKf2g= github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.21.0/go.mod h1:lxDj6qX9Q6lWQxIrbrT0nwecwUtRnhVZAJjJZrVUZZQ= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= @@ -1722,6 +2060,8 @@ github.com/valyala/fasthttp v1.32.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlIME= +github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI= github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= github.com/vishvananda/netns v0.0.0-20220913150850-18c4f4234207 h1:nn7SOQy8xCu3iXNv7oiBhhEQtbWdnEOMnuKBlHvrqIM= @@ -1734,9 +2074,12 @@ github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvC github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= github.com/vmihailenco/msgpack/v5 v5.0.0-beta.1/go.mod h1:xlngVLeyQ/Qi05oQxhQ+oTuqa03RjMwMfk/7/TCs+QI= github.com/vmihailenco/msgpack/v5 v5.3.4/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= +github.com/vmihailenco/msgpack/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= +github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc= github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= +github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= github.com/wI2L/jsondiff v0.3.0 h1:iTzQ9u/d86GE9RsBzVHX88f2EA1vQUboHwLhSQFc1s4= github.com/wI2L/jsondiff v0.3.0/go.mod h1:y1IMzNNjlSsk3IUoJdRJO7VRBtzMvRgyo4Vu0LdHpTc= @@ -1744,9 +2087,16 @@ github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0 h1:3UeQBvD0TFrlVjOeLOBz+CPAI8dnbqNSVwUwRrkp7vQ= github.com/wsxiaoys/terminal v0.0.0-20160513160801-0940f3fc43a0/go.mod h1:IXCdmsXIht47RaVFLEdVnh1t+pgYtTAhQGj73kz+2DM= +github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= +github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= +github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/scram v1.1.1 h1:VOMT+81stJgXW3CpHyqHN3AXDYIMsx56mEFrB37Mb/E= +github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= +github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCOIs= +github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= @@ -1754,17 +2104,21 @@ github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMc github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo= github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/treeprint v1.1.0 h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk= +github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= github.com/xor-gate/ar v0.0.0-20170530204233-5c72ae81e2b7 h1:Vo3q7h44BfmnLQh5SdF+2xwIoVnHThmZLunx6odjrHI= github.com/xor-gate/ar v0.0.0-20170530204233-5c72ae81e2b7/go.mod h1:TCWCUPhQU1j7axqROa/VHnlgJGHthAOqJZahg7b/DUc= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yashtewari/glob-intersection v0.1.0 h1:6gJvMYQlTDOL3dMsPF6J0+26vwX9MB8/1q3uAdhmTrg= github.com/yashtewari/glob-intersection v0.1.0/go.mod h1:LK7pIC3piUjovexikBbJ26Yml7g8xa5bsjfx2v1fwok= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA= github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -1774,8 +2128,15 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yuin/gopher-lua v0.0.0-20210529063254-f4c35e4016d9 h1:k/gmLsJDWwWqbLCur2yWnJzwQEKRcAHXo6seXGuSwWw= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= +github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= +github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= +github.com/zclconf/go-cty v1.10.0 h1:mp9ZXQeIcN8kAwuqorjH+Q+njbJKjLrvB2yIh4q7U+0= +github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= +github.com/zclconf/go-cty-yaml v1.0.2 h1:dNyg4QLTrv2IfJpm7Wtxi55ed5gLGOlPrZ6kMd51hY0= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= github.com/zenazn/goji v1.0.1/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= github.com/zorkian/go-datadog-api v2.30.0+incompatible h1:R4ryGocppDqZZbnNc5EDR8xGWF/z/MxzWnqTUijDQes= @@ -1807,6 +2168,12 @@ go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVd go.etcd.io/etcd/server/v3 v3.6.0-alpha.0.0.20220522111935-c3bc4116dcd1 h1:S801WVTlIcQnS+pA7srsyxgxg4qNYx4Fm/YToSDde+w= go.etcd.io/etcd/server/v3 v3.6.0-alpha.0.0.20220522111935-c3bc4116dcd1/go.mod h1:sw82kLjlBpuhowfKyi54jk2s8qK8W4YG5EwlY/BleOY= go.mongodb.org/mongo-driver v1.5.1/go.mod h1:gRXCHX4Jo7J0IJ1oDQyUxF7jfy19UfxniMS4xxMmUqw= +go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg= +go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng= +go.mongodb.org/mongo-driver v1.8.3/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY= +go.mongodb.org/mongo-driver v1.10.0/go.mod h1:wsihk0Kdgv8Kqu1Anit4sfK+22vSFbUrAVEYRhCXrA8= +go.mongodb.org/mongo-driver v1.11.1 h1:QP0znIRTuL0jf1oBQoAoM0C6ZJfBK4kx0Uumtv1A7w8= +go.mongodb.org/mongo-driver v1.11.1/go.mod h1:s7p5vEtfbeR1gYi6pnj3c3/urpbLv2T5Sfd6Rp2HBB8= go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -1817,65 +2184,68 @@ go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/collector v0.66.0 h1:5+0N2PCyqHoE3MYV8tgCsyeD86KbmIVDKmqKF9A7u9k= -go.opentelemetry.io/collector v0.66.0/go.mod h1:hE6jCs+0rfiufCrVPucKZTMwfHit1okfDPnwPT2eW1I= -go.opentelemetry.io/collector/component v0.66.0 h1:M2kI+BXGilmqEs8Kufo5nu0xiO+5cvwdPflV/r4pGkE= -go.opentelemetry.io/collector/component v0.66.0/go.mod h1:0c84EqXUhvYe6KW7hJfh76tiI/5yjWCH2amwyQ06XLM= -go.opentelemetry.io/collector/consumer v0.66.0 h1:wDx0MmqqsHGBcEa24HS0MlvDbLR0jT/936CSZ7vvP4M= -go.opentelemetry.io/collector/consumer v0.66.0/go.mod h1:WtoRZa5SnxQO1ZEQdVxYpFcXCmq62rakv0oUSlPO0NQ= -go.opentelemetry.io/collector/exporter/loggingexporter v0.66.0 h1:LLgWAS3zGce/H7UVB/EwPm49n3qNRbh/Gkd1IPORJDg= -go.opentelemetry.io/collector/exporter/loggingexporter v0.66.0/go.mod h1:X7fNHTbcgvOOio9QDEyVk0WbIm1JaVYby4z3VzsOc2k= -go.opentelemetry.io/collector/exporter/otlpexporter v0.66.0 h1:uXNkGlAXHyvUZL51qsQR8hS8oSt80m1ncbqwXRRkJMk= -go.opentelemetry.io/collector/exporter/otlpexporter v0.66.0/go.mod h1:IOoHR1lsV1r2TFOVctPogn9RUXT4jiU7kH+IhfUlP1w= -go.opentelemetry.io/collector/extension/zpagesextension v0.65.0 h1:T5JJIJ3cmClqdSMgkbjoIiP9p059AAvbfcd3houJkxM= -go.opentelemetry.io/collector/featuregate v0.66.0 h1:WW3IYWxOu9cfXa6fQwov0jswlf2Y/NEBHgiDkRPm4Uw= -go.opentelemetry.io/collector/featuregate v0.66.0/go.mod h1:tewuFKJYalWBU0bmNKg++MC1ipINXUr6szYzOw2p1GI= -go.opentelemetry.io/collector/pdata v0.66.0 h1:UdE5U6MsDNzuiWaXdjGx2lC3ElVqWmN/hiUE8vyvSuM= -go.opentelemetry.io/collector/pdata v0.66.0/go.mod h1:pqyaznLzk21m+1KL6fwOsRryRELL+zNM0qiVSn0MbVc= -go.opentelemetry.io/collector/processor/batchprocessor v0.66.0 h1:3GNIEOmGiVUSWljlisFGmjvIfsVKhn0OCafirS53YAs= -go.opentelemetry.io/collector/processor/batchprocessor v0.66.0/go.mod h1:XhGTsC1B/bq4gpg8IZ/QYBLXkzE4Gw3r7Xu2+ik8A1Q= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.66.0 h1:ZHEOeGOIYIDTKhI9xs30/obFfhUbb9b2+e/eahp1fJA= -go.opentelemetry.io/collector/receiver/otlpreceiver v0.66.0/go.mod h1:pb+dcV+KJ44dP+CqV0N6L6dTeDDvCXB8StCqwlrrSkM= -go.opentelemetry.io/collector/semconv v0.66.0 h1:gz4fYzOVOt1EQCcOL6pbSmTRj93pZErjHD+H100pH+4= -go.opentelemetry.io/collector/semconv v0.66.0/go.mod h1:5o9yhOa+ABt7g2E5JABDxGZ1PQPbtfxrKNbYn+LOTXU= +go.opentelemetry.io/collector v0.70.0 h1:TScQZj/bCaLpDwDbNyhI6PGlh7WxntmAcI3z3hrGCqA= +go.opentelemetry.io/collector v0.70.0/go.mod h1:cNC9VPU99N8R+cBubX2B29a1y0Ji+Fi9tgAY1LwIMt0= +go.opentelemetry.io/collector/component v0.70.0 h1:4GrQKhXPFm1fl5rzTs2kIui4driRfUAmf9Tp7hUk8NE= +go.opentelemetry.io/collector/component v0.70.0/go.mod h1:oGcF4cJf1kSNe+heznP1s5JGZhhcE8CjaoJR6M2A0Rg= +go.opentelemetry.io/collector/confmap v0.70.0 h1:GJDaM7c3yFyT7Zv6l2/5ahwaqPCvtC92Ii8Bg2AVdjU= +go.opentelemetry.io/collector/confmap v0.70.0/go.mod h1:8//JWR2TMChLH35Az0mGFrCskEIP6POgZJK6iRRhzeM= +go.opentelemetry.io/collector/consumer v0.70.0 h1:Z103QX++5AOHqjhDTyx7ITOycQ26XnM0o6QuedOHx9U= +go.opentelemetry.io/collector/consumer v0.70.0/go.mod h1:JfMJigmMJkAMWoL7fDNirOLY0QTE9wxcFccLyJZU7E0= +go.opentelemetry.io/collector/exporter/loggingexporter v0.70.0 h1:PR01rOPeujJNWdSjMzITlHtFKQd6N8mSbwKJsFYt/r8= +go.opentelemetry.io/collector/exporter/loggingexporter v0.70.0/go.mod h1:4o3PQnk089ri3PYcLwbES3a6zJMSz7Co3a5GIDP0xg8= +go.opentelemetry.io/collector/exporter/otlpexporter v0.70.0 h1:6C7ZL6s6+2pi2YoJZ1xYUgc/nw7xbt2AHYw+PAx9rmQ= +go.opentelemetry.io/collector/exporter/otlpexporter v0.70.0/go.mod h1:5HIhiFU1h5kXEutmal2FmUgpKSh/NiNMISLqSEPn4ns= +go.opentelemetry.io/collector/extension/zpagesextension v0.70.0 h1:tRc2GYFZQKMgEajokb2mNiCh3cuO/PtKOtlxT3VKf+U= +go.opentelemetry.io/collector/featuregate v0.70.0 h1:Xr6hrMT/++SjTm06nreex8WlpgFhYJ7S0yRVn1OvVf8= +go.opentelemetry.io/collector/featuregate v0.70.0/go.mod h1:ih+oCwrHW3bLac/qnPUzes28yDCDmh8WzsAKKauwCYI= +go.opentelemetry.io/collector/pdata v1.0.0-rc4 h1:vIQHHiaDqvTM3I30j3PDo44ttkv9n8prroe4G+RsUe0= +go.opentelemetry.io/collector/pdata v1.0.0-rc4/go.mod h1:ft/11i2R6Ld/DC543bAS4R30/W8heexIvNqtzmQpnLQ= +go.opentelemetry.io/collector/processor/batchprocessor v0.70.0 h1:NsdvJNGzHDrM6uc9L+DMFhaBS8TfVJdSQ/oKfJt8EbM= +go.opentelemetry.io/collector/processor/batchprocessor v0.70.0/go.mod h1:nph333cNq6wz40bMtLvkPyv2HBL7Fw1sIvzGQhrLO4c= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.70.0 h1:sfcP6O30iB+rLNjsBokgR1nqhnoKIWyLWDH98eyrH2A= +go.opentelemetry.io/collector/receiver/otlpreceiver v0.70.0/go.mod h1:vk/I0IW9OL996JGBYjdMrchfXne2Q3paVCM6MbItHR0= +go.opentelemetry.io/collector/semconv v0.70.0 h1:zuito4A9yoB5v+4M7GnwMBNcQdfhutHeysDAkTaGJjw= +go.opentelemetry.io/collector/semconv v0.70.0/go.mod h1:UAp+qAMqEXOD0eEBmWJ3IJ5+LkF7zVTgmfufwpHmL8w= go.opentelemetry.io/contrib v0.20.0 h1:ubFQUn0VCZ0gPwIoJfBJVpeBlyRMxu8Mm/huKWYd9p0= go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.4 h1:PRXhsszxTt5bbPriTjmaweWUsAnJYeWBhUMLRetUgBU= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.4/go.mod h1:05eWWy6ZWzmpeImD3UowLTB3VjDMU1yxQ+ENuVWDM3c= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.37.0 h1:+uFejS4DCfNH6d3xODVIGsdhzgzhh45p9gpbHQMbdZI= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.37.0/go.mod h1:HSmzQvagH8pS2/xrK7ScWsk0vAMtRTGbMFgInXCi8Tc= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.36.4 h1:aUEBEdCa6iamGzg6fuYxDA8ThxvOG240mAvWDU+XLio= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.36.4/go.mod h1:l2MdsbKTocpPS5nQZscqTR9jd8u96VYZdcpF8Sye7mA= -go.opentelemetry.io/contrib/propagators/b3 v1.11.1 h1:icQ6ttRV+r/2fnU46BIo/g/mPu6Rs5Ug8Rtohe3KqzI= -go.opentelemetry.io/contrib/propagators/b3 v1.11.1/go.mod h1:ECIveyMXgnl4gorxFcA7RYjJY/Ql9n20ubhbfDc3QfA= -go.opentelemetry.io/contrib/zpages v0.36.4 h1:Z2VK5WsDhWs9VwZ1p0TM5RyusTOgAQfdMMDDQPRnlmY= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.37.0 h1:yt2NKzK7Vyo6h0+X8BA4FpreZQTlVEIarnsBP/H5mzs= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.37.0/go.mod h1:+ARmXlUlc51J7sZeCBkBJNdHGySrdOzgzxp6VWRWM1U= +go.opentelemetry.io/contrib/propagators/b3 v1.12.0 h1:OtfTF8bneN8qTeo/j92kcvc0iDDm4bm/c3RzaUJfiu0= +go.opentelemetry.io/contrib/propagators/b3 v1.12.0/go.mod h1:0JDB4elfPUWGsCH/qhaMkDzP1l8nB0ANVx8zXuAYEwg= +go.opentelemetry.io/contrib/zpages v0.37.0 h1:lFEw7jgrW75kZ40gkXtywV0jTJt8q7w85oTLGc1IZBU= go.opentelemetry.io/otel v0.11.0/go.mod h1:G8UCk+KooF2HLkgo8RHX9epABH/aRGYET7gQOqBVdB0= go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= -go.opentelemetry.io/otel v1.11.1 h1:4WLLAmcfkmDk2ukNXJyq3/kiz/3UzCaYq6PskJsaou4= -go.opentelemetry.io/otel v1.11.1/go.mod h1:1nNhXBbWSD0nsL38H6btgnFN2k4i0sNLHNNMZMSbUGE= +go.opentelemetry.io/otel v1.11.2 h1:YBZcQlsVekzFsFbjygXMOXSs6pialIZxcjfO/mBDmR0= +go.opentelemetry.io/otel v1.11.2/go.mod h1:7p4EUV+AqgdlNV9gL97IgUZiVR3yrFXYo53f9BM3tRI= go.opentelemetry.io/otel/exporters/otlp v0.20.0 h1:PTNgq9MRmQqqJY0REVbZFvwkYOA85vbdQU/nVfxDyqg= go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.7.0 h1:7Yxsak1q4XrJ5y7XBnNwqWx9amMZvoidCctv62XOQ6Y= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.7.0 h1:cMDtmgJ5FpRvqx9x2Aq+Mm0O6K/zcUkH73SFz20TuBw= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.7.0 h1:MFAyzUPrTwLOwCi+cltN0ZVyy4phU41lwH+lyMyQTS4= -go.opentelemetry.io/otel/exporters/prometheus v0.33.0 h1:xXhPj7SLKWU5/Zd4Hxmd+X1C4jdmvc0Xy+kvjFx2z60= -go.opentelemetry.io/otel/exporters/prometheus v0.33.0/go.mod h1:ZSmYfKdYWEdSDBB4njLBIwTf4AU2JNsH3n2quVQDebI= +go.opentelemetry.io/otel/exporters/prometheus v0.34.0 h1:L5D+HxdaC/ORB47ribbTBbkXRZs9JzPjq0EoIOMWncM= +go.opentelemetry.io/otel/exporters/prometheus v0.34.0/go.mod h1:6gUoJyfhoWqF0tOLaY0ZmKgkQRcvEQx6p5rVlKHp3s4= go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= -go.opentelemetry.io/otel/metric v0.33.0 h1:xQAyl7uGEYvrLAiV/09iTJlp1pZnQ9Wl793qbVvED1E= -go.opentelemetry.io/otel/metric v0.33.0/go.mod h1:QlTYc+EnYNq/M2mNk1qDDMRLpqCOj2f/r5c7Fd5FYaI= +go.opentelemetry.io/otel/metric v0.34.0 h1:MCPoQxcg/26EuuJwpYN1mZTeCYAUGx8ABxfW07YkjP8= +go.opentelemetry.io/otel/metric v0.34.0/go.mod h1:ZFuI4yQGNCupurTXCwkeD/zHBt+C2bR7bw5JqUm/AP8= go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= -go.opentelemetry.io/otel/sdk v1.11.1 h1:F7KmQgoHljhUuJyA+9BiU+EkJfyX5nVVF4wyzWZpKxs= -go.opentelemetry.io/otel/sdk v1.11.1/go.mod h1:/l3FE4SupHJ12TduVjUkZtlfFqDCQJlOlithYrdktys= +go.opentelemetry.io/otel/sdk v1.11.2 h1:GF4JoaEx7iihdMFu30sOyRx52HDHOkl9xQ8SMqNXUiU= +go.opentelemetry.io/otel/sdk v1.11.2/go.mod h1:wZ1WxImwpq+lVRo4vsmSOxdd+xwoUJ6rqyLc3SyX9aU= go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= -go.opentelemetry.io/otel/sdk/metric v0.33.0 h1:oTqyWfksgKoJmbrs2q7O7ahkJzt+Ipekihf8vhpa9qo= -go.opentelemetry.io/otel/sdk/metric v0.33.0/go.mod h1:xdypMeA21JBOvjjzDUtD0kzIcHO/SPez+a8HOzJPGp0= +go.opentelemetry.io/otel/sdk/metric v0.34.0 h1:7ElxfQpXCFZlRTvVRTkcUvK8Gt5DC8QzmzsLsO2gdzo= +go.opentelemetry.io/otel/sdk/metric v0.34.0/go.mod h1:l4r16BIqiqPy5rd14kkxllPy/fOI4tWo1jkpD9Z3ffQ= go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= -go.opentelemetry.io/otel/trace v1.11.1 h1:ofxdnzsNrGBYXbP7t7zpUK281+go5rF7dvdIZXF8gdQ= -go.opentelemetry.io/otel/trace v1.11.1/go.mod h1:f/Q9G7vzk5u91PhbmKbg1Qn0rzH1LJ4vbPHFGkTPtOk= +go.opentelemetry.io/otel/trace v1.11.2 h1:Xf7hWSF2Glv0DE3MH7fBHvtpSBsjcBUe5MYAmZM/+y0= +go.opentelemetry.io/otel/trace v1.11.2/go.mod h1:4N+yC7QEz7TTsG9BSRLNAa63eg5E06ObSbKPmxQ/pKA= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.16.0 h1:WHzDWdXUvbc5bG2ObdrGfaNpQz7ft7QN9HHmJlbiB1E= +go.starlark.net v0.0.0-20220816155156-cfacd8902214 h1:MqijAN3S61c7KWasOk+zIqIjHQPN6WUra/X3+YAkQxQ= go.starlark.net v0.0.0-20220816155156-cfacd8902214/go.mod h1:VZcBMdr3cT3PnBoWunTabuSEXwVAH+ZJ5zxfs3AdASk= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= @@ -1892,13 +2262,14 @@ go.uber.org/dig v1.15.0/go.mod h1:pKHs0wMynzL6brANhB2hLMro+zalv1osARTviTcqHLM= go.uber.org/fx v1.18.2 h1:bUNI6oShr+OVFQeU8cDNbnN7VFsu+SsjHzUF51V/GAU= go.uber.org/fx v1.18.2/go.mod h1:g0V1KMQ66zIRk8bLu3Ea5Jt2w/cHlOIp4wdRsgh0JaY= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= +go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= +go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= @@ -1906,8 +2277,8 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.14.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= -go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= go4.org/netipx v0.0.0-20220812043211-3cc044ffd68d h1:ggxwEf5eu0l8v+87VhX1czFh8zJul3hK16Gmruxn7hw= go4.org/netipx v0.0.0-20220812043211-3cc044ffd68d/go.mod h1:tgPU4N2u9RByaTN3NC2p9xOzyFpte4jYwsIIRF7XlSc= golang.org/x/arch v0.0.0-20190927153633-4e8777c89be4 h1:QlVATYS7JBoZMVaf+cNjb90WD/beKVHnIxFKT4QaHVI= @@ -1918,7 +2289,7 @@ golang.org/x/crypto v0.0.0-20180910181607-0e37d006457b/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190404164418-38d8ce5564a5/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= @@ -1929,11 +2300,11 @@ golang.org/x/crypto v0.0.0-20190506204251-e1dfcc566284/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -1942,6 +2313,7 @@ golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= @@ -1954,8 +2326,11 @@ golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.3.0 h1:a06MkbcxBrEFc0w0QIZWXrH/9cCX6KJyWbBOIwAn+7A= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1999,7 +2374,6 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -2020,6 +2394,7 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -2057,8 +2432,10 @@ golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -2070,13 +2447,15 @@ golang.org/x/net v0.0.0-20211020060615-d418f374d309/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220923203811-8be639271d50/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= -golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190130055435-99b60b757ec1/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -2093,8 +2472,8 @@ golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 h1:nt+Q6cXKz4MosCSpnbMtqiQ8Oz0pxTef2B4Vca2lvfk= -golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.3.0 h1:6l90koy8/LaBLmLu8jpHeHexzMwEita0zFfYlggy2F8= +golang.org/x/oauth2 v0.3.0/go.mod h1:rQrIauxkUhJ6CuwEXwymO2/eh4xz2ZWF1nBkcxS+tGk= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -2112,7 +2491,6 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220923202941-7f9b1623fab7/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -2122,7 +2500,6 @@ golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181128092732-4ed8d59d0b35/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -2134,14 +2511,17 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190529164535-6a60838ec259/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2194,10 +2574,11 @@ golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201018230417-eeed37f84f13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -2212,9 +2593,11 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -2227,6 +2610,7 @@ golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -2238,6 +2622,9 @@ golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220405052023-b1e9470b6e64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -2246,17 +2633,19 @@ golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= -golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/term v0.4.0 h1:O7UWfv5+A2qiuulQk30kVinPoMtoIPeVaKLEgLpVkvg= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -2268,22 +2657,20 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220411224347-583f2d630306 h1:+gHMid33q6pen7kv9xvT+JRinntgeXO2AeZVd0AWD3w= -golang.org/x/time v0.0.0-20220411224347-583f2d630306/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= +golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -2294,6 +2681,7 @@ golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -2309,7 +2697,7 @@ golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191011211836-4c025a95b26e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -2349,6 +2737,7 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -2363,8 +2752,8 @@ golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyj golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM= golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.4.0 h1:7mTAgkunk3fr4GAloyyCasadO6h9zSsQZbwvcaIciV4= -golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= +golang.org/x/tools v0.5.0 h1:+bSpV5HIeWkuvgaMfI3UmKRThoTA5ODJTUd8T17NO+4= +golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -2375,6 +2764,9 @@ golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3j golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= +gonum.org/v1/gonum v0.12.0 h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o= +gonum.org/v1/gonum v0.12.0/go.mod h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY= +google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -2408,6 +2800,7 @@ google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -2415,6 +2808,7 @@ google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= @@ -2451,7 +2845,6 @@ google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201102152239-715cce707fb0/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -2464,8 +2857,9 @@ google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c h1:QgY/XxIAIeccR+Ca/rDdKubLIU9rcJ3xfy1DC/Wd2Oo= -google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 h1:a2S6M0+660BgMNl++4JPlcAO/CjkqYItDEZwkoDQK7c= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -2497,8 +2891,8 @@ google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQ google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.52.0 h1:kd48UiU7EHsV4rnLyOJRuP/Il/UHE7gdDAQ+SZI7nZk= +google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= google.golang.org/grpc/examples v0.0.0-20221020162917-9127159caf5a h1:p51n6zkL483uumoZhCSGtHCem9kDeU05G5jX/wYI9gw= google.golang.org/grpc/examples v0.0.0-20221020162917-9127159caf5a/go.mod h1:gxndsbNG1n4TZcHGgsYEfVGnTxqfEdfiDv6/DADXX9o= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -2521,20 +2915,21 @@ gopkg.in/DataDog/dd-trace-go.v1 v1.37.0 h1:V485ujNZdVc9pBQgpalgSpTRlr3PdxcX5v60Y gopkg.in/DataDog/dd-trace-go.v1 v1.37.0/go.mod h1:HMpV5TQ38YAfRJ8OlM7UfLyGg6D01MPNHRFwsnrGMB0= gopkg.in/Knetic/govaluate.v3 v3.0.0 h1:18mUyIt4ZlRlFZAAfVetz4/rzlJs9yhN+U02F4u1AOc= gopkg.in/Knetic/govaluate.v3 v3.0.0/go.mod h1:csKLBORsPbafmSCGTEh3U7Ozmsuq8ZSIlKk1bcqph0E= -gopkg.in/airbrake/gobrake.v2 v2.0.9 h1:7z2uVWwn7oVeeugY1DtlPAy5H+KYgB1KeKTnqjNatLo= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.28 h1:n1tBJnnK2r7g9OW2btFH91V92STTUevLXYFb8gy9EMk= gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2 h1:OAj3g0cR6Dx/R07QgQe8wkA9RNjB2u4i700xBkIT4e0= gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= gopkg.in/h2non/filetype.v1 v1.0.1/go.mod h1:M0yem4rwSX5lLVrkEuRRp2/NinFMD5vgJ4DlAhZcfNo= gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= @@ -2542,6 +2937,8 @@ gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/jinzhu/gorm.v1 v1.9.1/go.mod h1:56JJPUzbikvTVnoyP1nppSkbJ2L8sunqTBDY2fDrmFg= gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= @@ -2553,6 +2950,8 @@ gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76 gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -2564,6 +2963,7 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= @@ -2582,6 +2982,7 @@ gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81 gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= +helm.sh/helm/v3 v3.10.3 h1:wL7IUZ7Zyukm5Kz0OUmIFZgKHuAgByCrUcJBtY0kDyw= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -2589,60 +2990,29 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.17.0/go.mod h1:npsyOePkeP0CPwyGfXDHxvypiYMJxBWAMpQxCaJ4ZxI= -k8s.io/api v0.18.3/go.mod h1:UOaMwERbqJMfeeeHc8XJKawj4P9TgDRnViIqqBeH2QA= -k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= -k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= -k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= -k8s.io/api v0.23.5/go.mod h1:Na4XuKng8PXJ2JsploYYrivXrINeTaycCGcYgF91Xm8= -k8s.io/api v0.23.8 h1:tBMQ7z7s1NUUii649OaGe962xPacUzHwnGEj6Ahneu0= -k8s.io/api v0.23.8/go.mod h1:26VNldp5fRyiZ/tEO/3V8RJW+In1Aay3YkxsDzkvuWU= -k8s.io/apiextensions-apiserver v0.23.5 h1:5SKzdXyvIJKu+zbfPc3kCbWpbxi+O+zdmAJBm26UJqI= -k8s.io/apiextensions-apiserver v0.23.5/go.mod h1:ntcPWNXS8ZPKN+zTXuzYMeg731CP0heCTl6gYBxLcuQ= -k8s.io/apimachinery v0.17.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= -k8s.io/apimachinery v0.18.3/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko= -k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= -k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= -k8s.io/apimachinery v0.23.5/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= -k8s.io/apimachinery v0.23.8 h1:6Z+0LLvvPnAF6GXbUcBmzB1+b/AnDZpVd2N0MxUJcl0= -k8s.io/apimachinery v0.23.8/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= +k8s.io/api v0.23.15 h1:czl3QbP3Jb3J/gR5seTTKafYA5YQhkZLerQQUBhkpBk= +k8s.io/api v0.23.15/go.mod h1:hxtVWhlKGalIP4YXHxg8nzDlRd1ciyIkgEKTlvXjSMs= +k8s.io/apiextensions-apiserver v0.23.15 h1:ABxYYQ0d5WlqBboqlL00ZBT9HAKXs+DpkISTyjpkuzc= +k8s.io/apiextensions-apiserver v0.23.15/go.mod h1:+w9qQ3O85VidEPKRDkwfz5uwY0rwJN+t5+bbWmZJWPM= +k8s.io/apimachinery v0.23.15 h1:IyYaHIVN2OL1QKXXye0IWNI/EpOBicMVRkj34rIdyPk= +k8s.io/apimachinery v0.23.15/go.mod h1:mbefzm1H5rPdyibAc8rmzLAbr/oG60tDHQFj0FTqrZU= k8s.io/autoscaler/vertical-pod-autoscaler v0.10.0 h1:mSO9phIinHH3bRuXQkHMIA2uJ4i1WSayDeYr8J3bGjU= k8s.io/autoscaler/vertical-pod-autoscaler v0.10.0/go.mod h1:sOm4JDB+0ZrrqFuscsbWL5KoFMMJuOrN1NE/6ulmYNA= -k8s.io/client-go v0.17.0/go.mod h1:TYgR6EUHs6k45hb6KWjVD6jFZvJV4gHDikv/It0xz+k= -k8s.io/client-go v0.18.3/go.mod h1:4a/dpQEvzAhT1BbuWW09qvIaGw6Gbu1gZYiQZIi1DMw= -k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= -k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= -k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= -k8s.io/client-go v0.23.5/go.mod h1:flkeinTO1CirYgzMPRWxUCnV0G4Fbu2vLhYCObnt/r4= -k8s.io/client-go v0.23.8 h1:0POvFP1/bN0DQYO41ks1tdzIBf9I+afqpUUNedyZ3T4= -k8s.io/client-go v0.23.8/go.mod h1:m9GosuTn6NlShCjb5XvrRlNDuHeIbGrsDLxjDoS6gec= -k8s.io/code-generator v0.18.3/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= +k8s.io/cli-runtime v0.25.3 h1:Zs7P7l7db/5J+KDePOVtDlArAa9pZXaDinGWGZl0aM8= +k8s.io/client-go v0.23.15 h1:raIR9U0gmZwX2kkwR4PtLghcNfYTiB9QYdodlycmT1s= +k8s.io/client-go v0.23.15/go.mod h1:ar8V/vcyQD28dkxGURvv2JTteCUL9PMW5DZXpNrJBTY= k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= -k8s.io/code-generator v0.23.5/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= -k8s.io/code-generator v0.23.8/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= -k8s.io/component-base v0.18.3/go.mod h1:bp5GzGR0aGkYEfTj+eTY0AN/vXTgkJdQXjNTTVUaa3k= -k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= -k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= -k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= -k8s.io/component-base v0.23.5/go.mod h1:c5Nq44KZyt1aLl0IpHX82fhsn84Sb0jjzwjpcA42bY0= -k8s.io/component-base v0.23.8 h1:dURy1K89nxhF90yKk0dvCJgiaH5z3iMGwmAeqVP0m6U= -k8s.io/component-base v0.23.8/go.mod h1:rCj6EeaYLsNneVoFuSPL/AlEWmomc39j9M9i4NpR8r0= -k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= -k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= -k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= -k8s.io/cri-api v0.23.8 h1:nrO76IwyGdHlWgi1QvnMQnQgP6PDNqiEwf0hwNRFrgU= -k8s.io/cri-api v0.23.8/go.mod h1:REJE3PSU0h/LOV1APBrupxrEJqnoxZC8KWzkBUHwrK4= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/code-generator v0.23.15/go.mod h1:saIBS4+guYkA7QIxLvLe5d9C+LX9oZ44fN6By/Rd11M= +k8s.io/component-base v0.23.15 h1:QNOCSImZnDqVXJFGHh5li3/pcRbPakjvLcrs1MDRgSY= +k8s.io/component-base v0.23.15/go.mod h1:D32qwobDGMqWr/gLyNxKNwlfrWwa//3jX7RZuJrucDY= +k8s.io/cri-api v0.23.15 h1:LtFjtXF3FOAd7dgKT9yZ21xAqIrd7JTkURfZ7ISfKL8= +k8s.io/cri-api v0.23.15/go.mod h1:WtUZS6AZ9GadZ3xXRbujziML9XcA1+5HBWPJe/AG0tU= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c h1:GohjlNKauSai7gN4wsJkeZ3WAJx4Sh+oT/b5IYn5suA= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/gengo v0.0.0-20211129171323-c02415ce4185 h1:TT1WdmqqXareKxZ/oNXEUSwKlLiHzPMyB0t8BaFeBYI= +k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog v1.0.1-0.20200310124935-4ad0115ba9e4 h1:PbZJplYddJmSutLN9divJ0qU2nwGuY9ce++qhcsjqU0= k8s.io/klog v1.0.1-0.20200310124935-4ad0115ba9e4/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= @@ -2650,52 +3020,83 @@ k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/klog/v2 v2.60.1 h1:VW25q3bZx9uE3vvdL6M8ezOX79vA2Aq1nEWLqNQclHc= -k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= -k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= -k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= -k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= +k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= +k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKbP2BmgwBL2p7pn0A3dG9W4= k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= -k8s.io/kube-openapi v0.0.0-20220124234850-424119656bbf h1:M9XBsiMslw2lb2ZzglC0TOkBPK5NQi0/noUrdnoFwUg= -k8s.io/kube-openapi v0.0.0-20220124234850-424119656bbf/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= k8s.io/kube-state-metrics/v2 v2.4.2 h1:IYloz4pxxy331k3DeUMmblagZokwyi+Wh6f7XbGn8gE= k8s.io/kube-state-metrics/v2 v2.4.2/go.mod h1:9Bwe50fiZLymSO58qKUAwmcr6CmsLu9qybTlGzHFcG4= -k8s.io/kubelet v0.23.8 h1:aGsw04xpQT/wWCx5g/dLiMc/1hOAG0UPZQ5y1rsGA6k= -k8s.io/kubelet v0.23.8/go.mod h1:XIWz9AgB1KLYuPwvo7ikK8klIfQj8CFaG3ct4livZsM= -k8s.io/metrics v0.18.3/go.mod h1:TkuJE3ezDZ1ym8pYkZoEzJB7HDiFE7qxl+EmExEBoPA= -k8s.io/metrics v0.23.8 h1:7GyddWA3gUGnKjs9Q75g41prZEEqWPqJm29tSuSJteU= -k8s.io/metrics v0.23.8/go.mod h1:LbJVChFCnODQqgEGvK+E2HGp+SjgbSv4JQ0Xo5P1Mtk= -k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +k8s.io/kubectl v0.25.3 h1:HnWJziEtmsm4JaJiKT33kG0kadx68MXxUE8UEbXnN4U= +k8s.io/kubelet v0.23.15 h1:7PFvNjNxj6AC58Vv37k8isFyHGMpa91lYctKLCSaS34= +k8s.io/kubelet v0.23.15/go.mod h1:LdqsFYxm2o61tEFf9zf9bEcyeCw5Ev6x8Xv61tDBaZM= +k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= +k8s.io/metrics v0.23.15 h1:76eEvnxwjaNzj1HpwgyovjAFZ+RvF6J9CV/5/H7TX+E= +k8s.io/metrics v0.23.15/go.mod h1:biUO8gcMwcwu23GIV0F1nE1XEynlmAO5/VBsJqRxvpo= k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc= -k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2 h1:GfD9OzL11kvZN5iArC6oTS7RTj7oJOIfnislxYlqTj8= +k8s.io/utils v0.0.0-20221108210102-8e77b1f39fe2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +lukechampine.com/uint128 v1.1.1 h1:pnxCASz787iMf+02ssImqk6OLt+Z5QHMoZyUXR4z6JU= +lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= mellium.im/sasl v0.2.1/go.mod h1:ROaEDLQNuf9vjKqE1SrAfnsobm2YKXT1gnN1uDp1PjQ= +mellium.im/sasl v0.3.1 h1:wE0LW6g7U83vhvxjC1IY8DnXM+EU095yeo8XClvCdfo= +mellium.im/sasl v0.3.1/go.mod h1:xm59PUYpZHhgQ9ZqoJ5QaCqzWMi8IeS49dhp6plPCzw= +modernc.org/cc/v3 v3.36.0 h1:0kmRkTmqNidmu3c7BNDSdVHCxXCkWLmWmCIVX4LUboo= +modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= +modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= +modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.6 h1:3l18poV+iUemQ98O3X5OMr97LOqlzis+ytivU4NqGhA= +modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= +modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= +modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= +modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= +modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= +modernc.org/libc v1.16.7 h1:qzQtHhsZNpVPpeCu+aMIQldXeV1P0vRhSqCL0nOIJOA= +modernc.org/libc v1.16.7/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= +modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.1 h1:ij3fYGe8zBF4Vu+g0oT7mB06r8sqGWKuJu1yXeR4by8= +modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.1.1 h1:bDOL0DIDLQv7bWhP3gMvIrnoFw+Eo6F7a2QK9HPDiFU= +modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/opt v0.1.1 h1:/0RX92k9vwVeDXj+Xn23DKp2VJubL7k8qNffND6qn3A= +modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.17.3 h1:iE+coC5g17LtByDYDWKpR6m2Z9022YrSh3bumwOnIrI= +modernc.org/sqlite v1.17.3/go.mod h1:10hPVYar9C0kfXuTWGz8s0XtB8uAGymUy51ZzStYe3k= +modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs= +modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= +modernc.org/tcl v1.13.1 h1:npxzTwFTZYM8ghWicVIX1cRWzj7Nd8i6AqqX2p+IYao= +modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= +modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk= +modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.5.1 h1:RTNHdsrOpeoSeOF4FbzTo8gBYByaJ5xT7NgZ9ZqRiJM= +modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= +oras.land/oras-go v1.1.1 h1:gI00ftziRivKXaw1BdMeEoIA4uBgga33iVlOsEwefFs= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30 h1:dUk62HQ3ZFhD48Qr8MIXCiKA8wInBQCtuE4QGfFW7yA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.33 h1:LYqFq+6Cj2D0gFfrJvL7iElD4ET6ir3VDdhDdTK7rgc= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.33/go.mod h1:soWkSNf2tZC7aMibXEqVhCd73GOY5fJikn8qbdzemB0= sigs.k8s.io/controller-runtime v0.11.2 h1:H5GTxQl0Mc9UjRJhORusqfJCIjBO8UtUxGggCwL1rLA= sigs.k8s.io/controller-runtime v0.11.2/go.mod h1:P6QCzrEjLaZGqHsfd+os7JQ+WFZhvB8MRFsn4dWF7O4= sigs.k8s.io/custom-metrics-apiserver v1.23.0 h1:GQfmPQFnqQWCJ+HrSONkFNW4OPirx9AuzP8xbjQixmo= sigs.k8s.io/custom-metrics-apiserver v1.23.0/go.mod h1:fh9GeIlqMqo3xs7OUL7kUPdaCG/Pk3CmrtY4arf0eZw= sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= -sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2 h1:kDi4JBNAsJWfz1aEXhO8Jg87JJaPNLh5tIzYHgStQ9Y= -sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= -sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= -sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= +sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM= +sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y= sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/internal/tools/go.mod b/internal/tools/go.mod index 1251999de3251..582a751c160a1 100644 --- a/internal/tools/go.mod +++ b/internal/tools/go.mod @@ -5,11 +5,11 @@ go 1.18 require ( github.com/frapposelli/wwhrd v0.4.0 github.com/go-enry/go-license-detector/v4 v4.3.0 - github.com/golangci/golangci-lint v1.47.3 + github.com/golangci/golangci-lint v1.50.1 github.com/goware/modvendor v0.5.0 github.com/mgechev/revive v1.2.4 github.com/stormcat24/protodep v0.0.0-20210106175019-c95189bc461b - github.com/vektra/mockery/v2 v2.15.0 + github.com/vektra/mockery/v2 v2.16.0 golang.org/x/mobile v0.0.0-20201217150744-e6ae53a27f4f golang.org/x/perf v0.0.0-20210220033136-40a54f11e909 gotest.tools/gotestsum v1.8.2 @@ -21,13 +21,14 @@ replace github.com/sylvia7788/contextcheck => github.com/sylvia7788/contextcheck require ( 4d63.com/gochecknoglobals v0.1.0 // indirect + github.com/Abirdcfly/dupword v0.0.7 // indirect github.com/Antonboom/errname v0.1.7 // indirect github.com/Antonboom/nilnil v0.1.1 // indirect - github.com/BurntSushi/toml v1.2.0 // indirect + github.com/BurntSushi/toml v1.2.1 // indirect github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 // indirect github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 // indirect github.com/Masterminds/semver v1.5.0 // indirect - github.com/OpenPeeDeeP/depguard v1.1.0 // indirect + github.com/OpenPeeDeeP/depguard v1.1.1 // indirect github.com/alexkohler/prealloc v1.0.0 // indirect github.com/alingse/asasalint v0.0.11 // indirect github.com/ashanbrown/forbidigo v1.3.0 // indirect @@ -43,7 +44,9 @@ require ( github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/charithe/durationcheck v0.0.9 // indirect github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 // indirect - github.com/daixiang0/gci v0.6.3 // indirect + github.com/chigopher/pathlib v0.12.0 // indirect + github.com/curioswitch/go-reassign v0.2.0 // indirect + github.com/daixiang0/gci v0.8.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/denis-tingaikin/go-header v0.4.3 // indirect github.com/dgryski/go-minhash v0.0.0-20170608043002-7fe510aff544 // indirect @@ -58,13 +61,13 @@ require ( github.com/firefart/nonamedreturns v1.0.4 // indirect github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/fzipp/gocyclo v0.6.0 // indirect - github.com/go-critic/go-critic v0.6.4 // indirect + github.com/go-critic/go-critic v0.6.5 // indirect github.com/go-git/gcfg v1.5.0 // indirect github.com/go-git/go-billy/v5 v5.0.0 // indirect github.com/go-git/go-git/v5 v5.1.0 // indirect github.com/go-toolsmith/astcast v1.0.0 // indirect - github.com/go-toolsmith/astcopy v1.0.1 // indirect - github.com/go-toolsmith/astequal v1.0.2 // indirect + github.com/go-toolsmith/astcopy v1.0.2 // indirect + github.com/go-toolsmith/astequal v1.0.3 // indirect github.com/go-toolsmith/astfmt v1.0.0 // indirect github.com/go-toolsmith/astp v1.0.0 // indirect github.com/go-toolsmith/strparse v1.0.0 // indirect @@ -77,13 +80,13 @@ require ( github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 // indirect github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a // indirect github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe // indirect - github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a // indirect + github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 // indirect github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 // indirect github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca // indirect github.com/golangci/misspell v0.3.5 // indirect github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 // indirect github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 // indirect - github.com/google/go-cmp v0.5.8 // indirect + github.com/google/go-cmp v0.5.9 // indirect github.com/google/licensecheck v0.3.1 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8 // indirect @@ -98,7 +101,7 @@ require ( github.com/hexops/gotextdiff v1.0.3 // indirect github.com/hhatto/gorst v0.0.0-20181029133204-ca9f730cac5b // indirect github.com/imdario/mergo v0.3.9 // indirect - github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/inconshreveable/mousetrap v1.0.1 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jdkato/prose v1.1.0 // indirect github.com/jessevdk/go-flags v1.4.0 // indirect @@ -109,6 +112,7 @@ require ( github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd // indirect github.com/kisielk/errcheck v1.6.2 // indirect github.com/kisielk/gotool v1.0.0 // indirect + github.com/kkHAIKE/contextcheck v1.1.3 // indirect github.com/kulti/thelper v0.6.3 // indirect github.com/kunwardeep/paralleltest v1.0.6 // indirect github.com/kyoh86/exportloopref v0.1.8 // indirect @@ -117,6 +121,7 @@ require ( github.com/leonklingele/grouper v1.1.0 // indirect github.com/lufeee/execinquery v1.2.1 // indirect github.com/magiconair/properties v1.8.6 // indirect + github.com/maratori/testableexamples v1.0.0 // indirect github.com/maratori/testpackage v1.1.0 // indirect github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 // indirect github.com/mattn/go-colorable v0.1.13 // indirect @@ -132,21 +137,21 @@ require ( github.com/moricho/tparallel v0.2.1 // indirect github.com/nakabonne/nestif v0.3.1 // indirect github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 // indirect - github.com/nishanths/exhaustive v0.8.1 // indirect + github.com/nishanths/exhaustive v0.8.3 // indirect github.com/nishanths/predeclared v0.2.2 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pelletier/go-toml/v2 v2.0.2 // indirect + github.com/pelletier/go-toml/v2 v2.0.5 // indirect github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/polyfloyd/go-errorlint v1.0.2 // indirect + github.com/polyfloyd/go-errorlint v1.0.5 // indirect github.com/prometheus/client_golang v1.12.1 // indirect github.com/prometheus/client_model v0.2.0 // indirect github.com/prometheus/common v0.32.1 // indirect github.com/prometheus/procfs v0.7.3 // indirect - github.com/quasilyte/go-ruleguard v0.3.17 // indirect - github.com/quasilyte/gogrep v0.0.0-20220120141003-628d8b3623b5 // indirect + github.com/quasilyte/go-ruleguard v0.3.18 // indirect + github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f // indirect github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 // indirect github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 // indirect github.com/rs/zerolog v1.27.0 // indirect @@ -154,6 +159,8 @@ require ( github.com/ryancurrah/gomodguard v1.2.4 // indirect github.com/ryanrolds/sqlclosecheck v0.3.0 // indirect github.com/sanposhiho/wastedassign/v2 v2.0.6 // indirect + github.com/sashamelentyev/interfacebloat v1.1.0 // indirect + github.com/sashamelentyev/usestdlibvars v1.20.0 // indirect github.com/securego/gosec/v2 v2.13.1 // indirect github.com/sergi/go-diff v1.1.0 // indirect github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c // indirect @@ -166,7 +173,7 @@ require ( github.com/sourcegraph/go-diff v0.6.1 // indirect github.com/spf13/afero v1.8.2 // indirect github.com/spf13/cast v1.5.0 // indirect - github.com/spf13/cobra v1.5.0 // indirect + github.com/spf13/cobra v1.6.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.12.0 // indirect @@ -175,13 +182,13 @@ require ( github.com/stbenjam/no-sprintf-host-port v0.1.1 // indirect github.com/stretchr/objx v0.4.0 // indirect github.com/stretchr/testify v1.8.0 // indirect - github.com/subosito/gotenv v1.4.0 // indirect - github.com/sylvia7788/contextcheck v1.0.6 // indirect + github.com/subosito/gotenv v1.4.1 // indirect github.com/tdakkota/asciicheck v0.1.1 // indirect github.com/tetafro/godot v1.4.11 // indirect github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144 // indirect - github.com/tomarrell/wrapcheck/v2 v2.6.2 // indirect - github.com/tommy-muehle/go-mnd/v2 v2.5.0 // indirect + github.com/timonwong/loggercheck v0.9.3 // indirect + github.com/tomarrell/wrapcheck/v2 v2.7.0 // indirect + github.com/tommy-muehle/go-mnd/v2 v2.5.1 // indirect github.com/ultraware/funlen v0.0.3 // indirect github.com/ultraware/whitespace v0.0.5 // indirect github.com/uudashr/gocognit v1.0.6 // indirect @@ -192,19 +199,19 @@ require ( go.uber.org/atomic v1.7.0 // indirect go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.17.0 // indirect - golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa // indirect + golang.org/x/crypto v0.1.0 // indirect golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect - golang.org/x/exp/typeparams v0.0.0-20220613132600-b0d781184e0d // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect - golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect - golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 // indirect - golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect - golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 // indirect - golang.org/x/text v0.3.7 // indirect - golang.org/x/tools v0.1.12 // indirect + golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91 // indirect + golang.org/x/mod v0.6.0 // indirect + golang.org/x/net v0.1.0 // indirect + golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde // indirect + golang.org/x/sys v0.1.0 // indirect + golang.org/x/term v0.1.0 // indirect + golang.org/x/text v0.4.0 // indirect + golang.org/x/tools v0.2.0 // indirect gonum.org/v1/gonum v0.7.0 // indirect google.golang.org/protobuf v1.28.0 // indirect - gopkg.in/ini.v1 v1.66.6 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/neurosnap/sentences.v1 v1.0.6 // indirect gopkg.in/src-d/go-billy.v4 v4.3.2 // indirect gopkg.in/src-d/go-git.v4 v4.13.1 // indirect @@ -212,7 +219,7 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect honnef.co/go/tools v0.3.3 // indirect - mvdan.cc/gofumpt v0.3.1 // indirect + mvdan.cc/gofumpt v0.4.0 // indirect mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed // indirect mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b // indirect mvdan.cc/unparam v0.0.0-20220706161116-678bad134442 // indirect diff --git a/internal/tools/go.sum b/internal/tools/go.sum index 4dddac8d32330..ca177e4adfdf4 100644 --- a/internal/tools/go.sum +++ b/internal/tools/go.sum @@ -39,13 +39,15 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Abirdcfly/dupword v0.0.7 h1:z14n0yytA3wNO2gpCD/jVtp/acEXPGmYu0esewpBt6Q= +github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako= github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= github.com/Antonboom/nilnil v0.1.1 h1:PHhrh5ANKFWRBh7TdYmyyq2gyT2lotnvFvvFbylF81Q= github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.2.0 h1:Rt8g24XnyGTyglgET/PRUNlrUeu9F5L+7FilkXfZgs0= -github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= @@ -54,8 +56,8 @@ github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmc github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20190129172621-c8b1d7a94ddf/go.mod h1:aJ4qN3TfrelA6NZ6AXsXRfmEVaYin3EDbSPJrKS8OXo= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/OpenPeeDeeP/depguard v1.1.0 h1:pjK9nLPS1FwQYGGpPxoMYpe7qACHOhAWQMQzV71i49o= -github.com/OpenPeeDeeP/depguard v1.1.0/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= +github.com/OpenPeeDeeP/depguard v1.1.1 h1:TSUznLjvp/4IUP+OQ0t/4jF4QUyxIcVX8YnghZdunyA= +github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= github.com/aclements/go-gg v0.0.0-20170118225347-6dbb4e4fefb0/go.mod h1:55qNq4vcpkIuHowELi5C8e+1yUHtoLoOUR9QU5j7Tes= github.com/aclements/go-moremath v0.0.0-20161014184102-0ff62e0875ff/go.mod h1:idZL3yvz4kzx1dsBOAC+oYv6L92P1oFEhUXUB1A/lwQ= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= @@ -105,6 +107,8 @@ github.com/charithe/durationcheck v0.0.9 h1:mPP4ucLrf/rKZiIG/a9IPXHGlh8p4CzgpyTy github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 h1:E7LT642ysztPWE0dfz43cWOvMiF42DyTRC+eZIaO4yI= github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= +github.com/chigopher/pathlib v0.12.0 h1:1GM7fN/IwXXmOHbd1jkMqHD2wUhYqUvafgxTwmLT/q8= +github.com/chigopher/pathlib v0.12.0/go.mod h1:EJ5UtJ/sK8Nt6q3VWN+EwZLZ3g0afJiG8NegYiQQ/gQ= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -120,9 +124,11 @@ github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwc github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cristalhq/acmd v0.7.0/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= -github.com/daixiang0/gci v0.6.3 h1:wUAqXChk8HbwXn8AfxD9DYSCp9Bpz1L3e6Q4Roe+q9E= -github.com/daixiang0/gci v0.6.3/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= +github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= +github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= +github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= +github.com/daixiang0/gci v0.8.1 h1:T4xpSC+hmsi4CSyuYfIJdMZAr9o7xZmHpQVygMghGZ4= +github.com/daixiang0/gci v0.8.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -172,8 +178,8 @@ github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-critic/go-critic v0.6.4 h1:tucuG1pvOyYgpBIrVxw0R6gwO42lNa92Aq3VaDoIs+E= -github.com/go-critic/go-critic v0.6.4/go.mod h1:qL5SOlk7NtY6sJPoVCTKDIgzNOxHkkkOCVDyi9wJe1U= +github.com/go-critic/go-critic v0.6.5 h1:fDaR/5GWURljXwF8Eh31T2GZNz9X4jeboS912mWF8Uo= +github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= github.com/go-enry/go-license-detector/v4 v4.3.0 h1:OFlQAVNw5FlKUjX4OuW8JOabu8MQHjTKDb9pdeNYMUw= github.com/go-enry/go-license-detector/v4 v4.3.0/go.mod h1:HaM4wdNxSlz/9Gw0uVOKSQS5JVFqf2Pk8xUPEn6bldI= github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= @@ -198,13 +204,12 @@ github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= -github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= -github.com/go-toolsmith/astcopy v1.0.1 h1:l09oBhAPyV74kLJ3ZO31iBU8htZGTwr9LTjuMCyL8go= -github.com/go-toolsmith/astcopy v1.0.1/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= +github.com/go-toolsmith/astcopy v1.0.2 h1:YnWf5Rnh1hUudj11kei53kI57quN/VH6Hp1n+erozn0= +github.com/go-toolsmith/astcopy v1.0.2/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= -github.com/go-toolsmith/astequal v1.0.1/go.mod h1:4oGA3EZXTVItV/ipGiOx7NWkY5veFfcsOJVS2YxltLw= -github.com/go-toolsmith/astequal v1.0.2 h1:+XvaV8zNxua+9+Oa4AHmgmpo4RYAbwr/qjNppLfX2yM= github.com/go-toolsmith/astequal v1.0.2/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= +github.com/go-toolsmith/astequal v1.0.3 h1:+LVdyRatFS+XO78SGV4I3TCEA0AC7fKEGma+fH+674o= +github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k= github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg= @@ -260,10 +265,10 @@ github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9 github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe h1:6RGUuS7EGotKx6J5HIP8ZtyMdiDscjMLfRBSPuzVVeo= github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= -github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a h1:iR3fYXUjHCR97qWS8ch1y9zPNsgXThGwjKPrYfqMPks= -github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= -github.com/golangci/golangci-lint v1.47.3 h1:ri7A2DgtFpxgqcMSsU3qIT0IBm/SCdYgXlvmJx4szUU= -github.com/golangci/golangci-lint v1.47.3/go.mod h1:IvT5xyPX1W8JUJJrV60gcMzgQe1ttW/38yAzn6LuHOk= +github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 h1:amWTbTGqOZ71ruzrdA+Nx5WA3tV1N0goTspwmKCQvBY= +github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs= +github.com/golangci/golangci-lint v1.50.1 h1:C829clMcZXEORakZlwpk7M4iDw2XiwxxKaG504SZ9zY= +github.com/golangci/golangci-lint v1.50.1/go.mod h1:AQjHBopYS//oB8xs0y0M/dtxdKHkdhl0RvmjUct0/4w= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= @@ -291,9 +296,9 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/licensecheck v0.3.1 h1:QoxgoDkaeC4nFrtGN1jV7IPmDCHFNIVh54e5hSt6sPs= github.com/google/licensecheck v0.3.1/go.mod h1:ORkR35t/JjW+emNKtfJDII0zlciG9JgbT7SmsohlHmY= @@ -356,8 +361,9 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.9 h1:UauaLniWCFHWd+Jp9oCEkTBj8VO/9DKg3PV3VCNMDIg= github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= +github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jdkato/prose v1.1.0 h1:LpvmDGwbKGTgdCH3a8VJL56sr7p/wOFPw/R4lM4PfFg= @@ -390,6 +396,8 @@ github.com/kisielk/errcheck v1.6.2 h1:uGQ9xI8/pgc9iOoCe7kWQgRE6SBTrCGmTSf0LrEtY7 github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kkHAIKE/contextcheck v1.1.3 h1:l4pNvrb8JSwRd51ojtcOxOeHJzHek+MtOyXbaR0uvmw= +github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= @@ -419,6 +427,8 @@ github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xq github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI= +github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= github.com/maratori/testpackage v1.1.0 h1:GJY4wlzQhuBusMF1oahQCBtUV/AQ/k69IZ68vxaac2Q= github.com/maratori/testpackage v1.1.0/go.mod h1:PeAhzU8qkCwdGEMTEupsHJNlQu2gZopMC6RjbhmHeDc= github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 h1:pWxk9e//NbPwfxat7RXkts09K+dEBJWakUWwICVqYbA= @@ -476,8 +486,8 @@ github.com/neurosnap/sentences v1.0.6 h1:iBVUivNtlwGkYsJblWV8GGVFmXzZzak907Ci8aA github.com/neurosnap/sentences v1.0.6/go.mod h1:pg1IapvYpWCJJm/Etxeh0+gtMf1rI1STY9S7eUCPbDc= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nishanths/exhaustive v0.8.1 h1:0QKNascWv9qIHY7zRoZSxeRr6kuk5aAT3YXLTiDmjTo= -github.com/nishanths/exhaustive v0.8.1/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= +github.com/nishanths/exhaustive v0.8.3 h1:pw5O09vwg8ZaditDp/nQRqVnrMczSJDxRDJMowvhsrM= +github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= @@ -494,19 +504,20 @@ github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtb github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.2 h1:+jQXlF3scKIcSEKkdHzXhCTDLPFi5r1wnK6yPS+49Gw= -github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI= +github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwbMiyQg= +github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d h1:CdDQnGF8Nq9ocOS/xlSptM1N3BbrA6/kmaep5ggwaIA= github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/polyfloyd/go-errorlint v1.0.2 h1:kp1yvHflYhTmw5m3MmBy8SCyQkKPjwDthVuMH0ug6Yk= -github.com/polyfloyd/go-errorlint v1.0.2/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= +github.com/polyfloyd/go-errorlint v1.0.5 h1:AHB5JRCjlmelh9RrLxT9sgzpalIwwq4hqE8EkwIwKdY= +github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= @@ -530,20 +541,20 @@ github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= -github.com/quasilyte/go-ruleguard v0.3.17 h1:cDdoaSbQg11LXPDQqiCK54QmQXsEQQCTIgdcpeULGSI= -github.com/quasilyte/go-ruleguard v0.3.17/go.mod h1:sST5PvaR7yb/Az5ksX8oc88usJ4EGjmJv7cK7y3jyig= +github.com/quasilyte/go-ruleguard v0.3.18 h1:sd+abO1PEI9fkYennwzHn9kl3nqP6M5vE7FiOzZ+5CE= +github.com/quasilyte/go-ruleguard v0.3.18/go.mod h1:lOIzcYlgxrQ2sGJ735EHXmf/e9MJ516j16K/Ifcttvs= github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= github.com/quasilyte/go-ruleguard/dsl v0.3.21/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= -github.com/quasilyte/gogrep v0.0.0-20220120141003-628d8b3623b5 h1:PDWGei+Rf2bBiuZIbZmM20J2ftEy9IeUCHA8HbQqed8= -github.com/quasilyte/gogrep v0.0.0-20220120141003-628d8b3623b5/go.mod h1:wSEyW6O61xRV6zb6My3HxrQ5/8ke7NE2OayqCHa3xRM= +github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f h1:6Gtn2i04RD0gVyYf2/IUMTIs+qYleBt4zxDqkLTcu4U= +github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 h1:L8QM9bvf68pVdQ3bCFZMDmnt9yqcMBro1pC7F+IPYMY= github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs= github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= @@ -557,6 +568,10 @@ github.com/ryanrolds/sqlclosecheck v0.3.0 h1:AZx+Bixh8zdUBxUA1NxbxVAS78vTPq4rCb8 github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/sanposhiho/wastedassign/v2 v2.0.6 h1:+6/hQIHKNJAUixEj6EmOngGIisyeI+T3335lYTyxRoA= github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= +github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw= +github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= +github.com/sashamelentyev/usestdlibvars v1.20.0 h1:K6CXjqqtSYSsuyRDDC7Sjn6vTMLiSJa4ZmDkiokoqtw= +github.com/sashamelentyev/usestdlibvars v1.20.0/go.mod h1:0GaP+ecfZMXShS0A94CJn6aEuPRILv8h/VuWI9n1ygg= github.com/securego/gosec/v2 v2.13.1 h1:7mU32qn2dyC81MH9L2kefnQyRMUarfDER3iQyMHcjYM= github.com/securego/gosec/v2 v2.13.1/go.mod h1:EO1sImBMBWFjOTFzMWfTRrZW6M15gm60ljzrmy/wtHo= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= @@ -586,14 +601,15 @@ github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4l github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0HZqLQ= github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.4.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= -github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= +github.com/spf13/cobra v1.6.0 h1:42a0n6jwCot1pUmomAp4T7DeMD+20LFv4Q54pxLf2LI= +github.com/spf13/cobra v1.6.0/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= @@ -625,13 +641,10 @@ github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/subosito/gotenv v1.4.0 h1:yAzM1+SmVcz5R4tXGsNMu1jUl2aOJXoiWUCEwwnGrvs= -github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= -github.com/sylvia7788/contextcheck v1.0.4 h1:MsiVqROAdr0efZc/fOCt0c235qm9XJqHtWwM+2h2B04= -github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= +github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= +github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/tdakkota/asciicheck v0.1.1 h1:PKzG7JUTUmVspQTDqtkX9eSiLGossXTybutHwTXuO0A= github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= github.com/tenntenn/modver v1.0.1 h1:2klLppGhDgzJrScMpkj9Ujy3rXPUspSjAcev9tSEBgA= @@ -642,10 +655,12 @@ github.com/tetafro/godot v1.4.11 h1:BVoBIqAf/2QdbFmSwAWnaIqDivZdOV0ZRwEm6jivLKw= github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144 h1:kl4KhGNsJIbDHS9/4U9yQo1UcPQM0kOMJHn29EoH/Ro= github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/tomarrell/wrapcheck/v2 v2.6.2 h1:3dI6YNcrJTQ/CJQ6M/DUkc0gnqYSIk6o0rChn9E/D0M= -github.com/tomarrell/wrapcheck/v2 v2.6.2/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= -github.com/tommy-muehle/go-mnd/v2 v2.5.0 h1:iAj0a8e6+dXSL7Liq0aXPox36FiN1dBbjA6lt9fl65s= -github.com/tommy-muehle/go-mnd/v2 v2.5.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= +github.com/timonwong/loggercheck v0.9.3 h1:ecACo9fNiHxX4/Bc02rW2+kaJIAMAes7qJ7JKxt0EZI= +github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiTocu/YZoOf+OzFdw= +github.com/tomarrell/wrapcheck/v2 v2.7.0 h1:J/F8DbSKJC83bAvC6FoZaRjZiZ/iKoueSdrEkmGeacA= +github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= +github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= +github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA= github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= @@ -653,8 +668,8 @@ github.com/ultraware/whitespace v0.0.5 h1:hh+/cpIcopyMYbZNVov9iSxvJU3OYQg78Sfaqz github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/uudashr/gocognit v1.0.6 h1:2Cgi6MweCsdB6kpcVQp7EW4U23iBFQWfTXiWlyp842Y= github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= -github.com/vektra/mockery/v2 v2.15.0 h1:5Egbxoancm1hhkJUoAF+cf0FBzC9oxS28LL/ZKbC980= -github.com/vektra/mockery/v2 v2.15.0/go.mod h1:RswGtsqDbCR9j4UcgBQuAZY7OFxI+TgtHevc0gR0kCY= +github.com/vektra/mockery/v2 v2.16.0 h1:NMfQMZ4dKAHxR0rTHCt47HyJlBgFdYmrLlHhZIj2yeo= +github.com/vektra/mockery/v2 v2.16.0/go.mod h1:OZL0JSpvEWEHgyNr150zNbP1ktxr6yPZ/W82RHaTHl0= github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= @@ -690,14 +705,15 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -715,8 +731,8 @@ golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMk golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/exp/typeparams v0.0.0-20220613132600-b0d781184e0d h1:+W8Qf4iJtMGKkyAygcKohjxTk4JPsL9DpzApJ22m5Ic= -golang.org/x/exp/typeparams v0.0.0-20220613132600-b0d781184e0d/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91 h1:Ic/qN6TEifvObMGQy72k0n1LlJr7DjWWEi+MOsDOiSk= +golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -747,8 +763,9 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.6.0 h1:b9gGHsz9/HhJ3HF5DHQytPpuwocVTChQJK3AvoLRD5I= +golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -785,8 +802,9 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/oauth2 v0.0.0-20170207211851-4464e7848382/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -812,8 +830,9 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde h1:ejfdSekXMDxDLbRrJMwUk6KnSLZ2McaUCVcIKM+N6jc= +golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180202135801-37707fdb30a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -876,12 +895,14 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0 h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -889,8 +910,9 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -975,8 +997,9 @@ golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlz golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.2.0 h1:G6AHpWxTMGY1KyEYoAQ5WTtIekUUvDNjan3ugu60JvE= +golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1088,8 +1111,8 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= -gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/neurosnap/sentences.v1 v1.0.6 h1:v7ElyP020iEZQONyLld3fHILHWOPs+ntzuQTNPkul8E= gopkg.in/neurosnap/sentences.v1 v1.0.6/go.mod h1:YlK+SN+fLQZj+kY3r8DkGDhDr91+S3JmTb5LSxFRQo0= gopkg.in/src-d/go-billy.v4 v4.3.2 h1:0SQA1pRztfTFx2miS8sA97XvooFeNOmvUenF4o0EcVg= @@ -1125,8 +1148,8 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.3.3 h1:oDx7VAwstgpYpb3wv0oxiZlxY+foCpRAwY7Vk6XpAgA= honnef.co/go/tools v0.3.3/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= -mvdan.cc/gofumpt v0.3.1 h1:avhhrOmv0IuvQVK7fvwV91oFSGAk5/6Po8GXTzICeu8= -mvdan.cc/gofumpt v0.3.1/go.mod h1:w3ymliuxvzVx8DAutBnVyDqYb1Niy/yCJt/lk821YCE= +mvdan.cc/gofumpt v0.4.0 h1:JVf4NN1mIpHogBj7ABpgOyZc65/UUOkKQFkoURsz4MM= +mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= diff --git a/internal/tools/proto/go.mod b/internal/tools/proto/go.mod index d8741c8613720..ee2391e48e0ac 100644 --- a/internal/tools/proto/go.mod +++ b/internal/tools/proto/go.mod @@ -22,5 +22,5 @@ require ( golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c // indirect google.golang.org/protobuf v1.26.0 // indirect - gopkg.in/yaml.v2 v2.2.3 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/internal/tools/proto/go.sum b/internal/tools/proto/go.sum index be9458dc79a63..dbcac02d8b4c1 100644 --- a/internal/tools/proto/go.sum +++ b/internal/tools/proto/go.sum @@ -82,7 +82,8 @@ google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/l google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.3 h1:fvjTMHxHEw/mxHbtzPi3JCcKXQRAnQTBRo6YCJSVHKI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/omnibus/config/software/datadog-agent-finalize.rb b/omnibus/config/software/datadog-agent-finalize.rb index 2b3b1eda2a235..e7a871819a728 100644 --- a/omnibus/config/software/datadog-agent-finalize.rb +++ b/omnibus/config/software/datadog-agent-finalize.rb @@ -84,7 +84,7 @@ if linux? # Fix pip after building on extended toolchain in CentOS builder - if redhat? + if redhat? && ohai["platform_version"].to_i == 6 unless arm? rhel_toolchain_root = "/opt/rh/devtoolset-1.1/root" # lets be cautious - we first search for the expected toolchain path, if its not there, bail out @@ -197,6 +197,7 @@ strip_exclude("*runtime-security*") strip_exclude("*dns*") strip_exclude("*oom-kill*") + strip_exclude("*tcp-queue-length*") end if osx? diff --git a/omnibus/config/software/datadog-agent-integrations-py2.rb b/omnibus/config/software/datadog-agent-integrations-py2.rb index 4d0c817f23f50..9e449eda2f548 100644 --- a/omnibus/config/software/datadog-agent-integrations-py2.rb +++ b/omnibus/config/software/datadog-agent-integrations-py2.rb @@ -142,7 +142,7 @@ # command "#{pip} download --dest #{build_deps_dir} hatchling==0.25.1", :env => pre_build_env command "#{pip} download --dest #{build_deps_dir} setuptools==40.9.0", :env => pre_build_env # Version from ./setuptools2.rb - command "#{pip} install wheel==0.34.1", :env => pre_build_env + command "#{pip} install wheel==0.37.1", :env => pre_build_env # Pin to the last version that supports Python 2 command "#{pip} install setuptools-scm==5.0.2", :env => pre_build_env # Pin to the last version that supports Python 2 command "#{pip} install pip-tools==5.4.0", :env => pre_build_env uninstall_buildtime_deps = ['rtloader', 'click', 'first', 'pip-tools'] @@ -253,8 +253,6 @@ if windows? command "#{python} -m pip wheel . --no-deps --no-index --wheel-dir=#{wheel_build_dir}", :env => win_build_env, :cwd => "#{windows_safe_path(project_dir)}\\datadog_checks_base" command "#{python} -m pip install datadog_checks_base --no-deps --no-index --find-links=#{wheel_build_dir}" - command "#{python} -m pip wheel . --no-deps --no-index --wheel-dir=#{wheel_build_dir}", :env => win_build_env, :cwd => "#{windows_safe_path(project_dir)}\\datadog_checks_downloader" - command "#{python} -m pip install datadog_checks_downloader --no-deps --no-index --find-links=#{wheel_build_dir}" command "#{python} -m piptools compile --generate-hashes --output-file #{windows_safe_path(install_dir)}\\#{agent_requirements_file} #{static_reqs_out_file} " \ "--pip-args \"--retries #{pip_max_retries} --timeout #{pip_timeout}\"", :env => win_build_env # Pip-compiling seperately each lib that needs a custom build installation @@ -265,8 +263,6 @@ else command "#{pip} wheel . --no-deps --no-index --wheel-dir=#{wheel_build_dir}", :env => nix_build_env, :cwd => "#{project_dir}/datadog_checks_base" command "#{pip} install datadog_checks_base --no-deps --no-index --find-links=#{wheel_build_dir}" - command "#{pip} wheel . --no-deps --no-index --wheel-dir=#{wheel_build_dir}", :env => nix_build_env, :cwd => "#{project_dir}/datadog_checks_downloader" - command "#{pip} install datadog_checks_downloader --no-deps --no-index --find-links=#{wheel_build_dir}" command "#{python} -m piptools compile --generate-hashes --output-file #{install_dir}/#{agent_requirements_file} #{static_reqs_out_file} " \ "--pip-args \"--retries #{pip_max_retries} --timeout #{pip_timeout}\"", :env => nix_build_env # Pip-compiling seperately each lib that needs a custom build installation diff --git a/omnibus/config/software/datadog-agent-integrations-py3.rb b/omnibus/config/software/datadog-agent-integrations-py3.rb index 1e8b979dd3400..d26fd19927b7b 100644 --- a/omnibus/config/software/datadog-agent-integrations-py3.rb +++ b/omnibus/config/software/datadog-agent-integrations-py3.rb @@ -10,6 +10,7 @@ dependency 'datadog-agent' dependency 'pip3' +dependency 'setuptools3' dependency 'snowflake-connector-python-py3' @@ -117,10 +118,8 @@ # aliases for pip if windows? - pip = "#{windows_safe_path(python_3_embedded)}\\Scripts\\pip.exe" python = "#{windows_safe_path(python_3_embedded)}\\python.exe" else - pip = "#{install_dir}/embedded/bin/pip3" python = "#{install_dir}/embedded/bin/python3" end @@ -144,10 +143,10 @@ # Prepare the build env, these dependencies are only needed to build and # install the core integrations. # - command "#{pip} download --dest #{build_deps_dir} hatchling==0.25.1", :env => pre_build_env - command "#{pip} download --dest #{build_deps_dir} setuptools==40.9.0", :env => pre_build_env # Version from ./setuptools3.rb - command "#{pip} install wheel==0.34.1", :env => pre_build_env - command "#{pip} install pip-tools==6.4.0", :env => pre_build_env + command "#{python} -m pip download --dest #{build_deps_dir} hatchling==0.25.1", :env => pre_build_env + command "#{python} -m pip download --dest #{build_deps_dir} setuptools==66.1.1", :env => pre_build_env # Version from ./setuptools3.rb + command "#{python} -m pip install wheel==0.38.4", :env => pre_build_env + command "#{python} -m pip install pip-tools==6.12.1", :env => pre_build_env uninstall_buildtime_deps = ['rtloader', 'click', 'first', 'pip-tools'] nix_build_env = { "PIP_FIND_LINKS" => "#{build_deps_dir}", @@ -267,10 +266,10 @@ "--pip-args \"--retries #{pip_max_retries} --timeout #{pip_timeout}\"", :env => env end else - command "#{pip} wheel . --no-deps --no-index --wheel-dir=#{wheel_build_dir}", :env => nix_build_env, :cwd => "#{project_dir}/datadog_checks_base" - command "#{pip} install datadog_checks_base --no-deps --no-index --find-links=#{wheel_build_dir}" - command "#{pip} wheel . --no-deps --no-index --wheel-dir=#{wheel_build_dir}", :env => nix_build_env, :cwd => "#{project_dir}/datadog_checks_downloader" - command "#{pip} install datadog_checks_downloader --no-deps --no-index --find-links=#{wheel_build_dir}" + command "#{python} -m pip wheel . --no-deps --no-index --wheel-dir=#{wheel_build_dir}", :env => nix_build_env, :cwd => "#{project_dir}/datadog_checks_base" + command "#{python} -m pip install datadog_checks_base --no-deps --no-index --find-links=#{wheel_build_dir}" + command "#{python} -m pip wheel . --no-deps --no-index --wheel-dir=#{wheel_build_dir}", :env => nix_build_env, :cwd => "#{project_dir}/datadog_checks_downloader" + command "#{python} -m pip install datadog_checks_downloader --no-deps --no-index --find-links=#{wheel_build_dir}" command "#{python} -m piptools compile --generate-hashes --output-file #{install_dir}/#{agent_requirements_file} #{static_reqs_out_file} " \ "--pip-args \"--retries #{pip_max_retries} --timeout #{pip_timeout}\"", :env => nix_build_env # Pip-compiling seperately each lib that needs a custom build installation @@ -296,7 +295,7 @@ command "#{python} -m pip install --no-deps --require-hashes -r #{install_dir}/agent_#{lib}_requirements-py3.txt", :env => env end # Then we install the rest (already installed libraries will be ignored) with the main flags - command "#{pip} install --no-deps --require-hashes -r #{install_dir}/#{agent_requirements_file}", :env => nix_build_env + command "#{python} -m pip install --no-deps --require-hashes -r #{install_dir}/#{agent_requirements_file}", :env => nix_build_env end # @@ -305,7 +304,7 @@ # Create a constraint file after installing all the core dependencies and before any integration # This is then used as a constraint file by the integration command to avoid messing with the agent's python environment - command "#{pip} freeze > #{install_dir}/#{final_constraints_file}" + command "#{python} -m pip freeze > #{install_dir}/#{final_constraints_file}" if windows? cached_wheels_dir = "#{windows_safe_path(wheel_build_dir)}\\.cached" @@ -374,7 +373,7 @@ command "#{python} -m pip install --no-deps --no-index " \ " --find-links #{windows_safe_path(cached_wheels_dir)} -r #{windows_safe_path(cached_wheels_dir)}\\found.txt" else - command "#{pip} install --no-deps --no-index " \ + command "#{python} -m pip install --no-deps --no-index " \ "--find-links #{cached_wheels_dir} -r #{cached_wheels_dir}/found.txt" end end @@ -386,11 +385,7 @@ # get list of integration wheels already installed from cache installed_list = Array.new if cache_bucket != '' - if windows? - installed_out = `#{python} -m pip list --format json` - else - installed_out = `#{pip} list --format json` - end + installed_out = `#{python} -m pip list --format json` if $?.exitstatus == 0 installed = JSON.parse(installed_out) installed.each do |package| @@ -454,11 +449,10 @@ if windows? command "#{python} -m pip wheel . --no-deps --no-index --wheel-dir=#{wheel_build_dir}", :env => win_build_env, :cwd => "#{windows_safe_path(project_dir)}\\#{check}" - command "#{python} -m pip install datadog-#{check} --no-deps --no-index --find-links=#{wheel_build_dir}" else - command "#{pip} wheel . --no-deps --no-index --wheel-dir=#{wheel_build_dir}", :env => nix_build_env, :cwd => "#{project_dir}/#{check}" - command "#{pip} install datadog-#{check} --no-deps --no-index --find-links=#{wheel_build_dir}" + command "#{python} -m pip wheel . --no-deps --no-index --wheel-dir=#{wheel_build_dir}", :env => nix_build_env, :cwd => "#{project_dir}/#{check}" end + command "#{python} -m pip install datadog-#{check} --no-deps --no-index --find-links=#{wheel_build_dir}" if cache_bucket != '' && ENV.fetch('INTEGRATION_WHEELS_SKIP_CACHE_UPLOAD', '') == '' && cache_branch != nil command "inv -e agent.upload-integration-to-cache " \ "--python 3 --bucket #{cache_bucket} " \ @@ -473,11 +467,7 @@ # From now on we don't need piptools anymore, uninstall its deps so we don't include them in the final artifact uninstall_buildtime_deps.each do |dep| - if windows? - command "#{python} -m pip uninstall -y #{dep}" - else - command "#{pip} uninstall -y #{dep}" - end + command "#{python} -m pip uninstall -y #{dep}" end end @@ -493,11 +483,7 @@ end # Run pip check to make sure the agent's python environment is clean, all the dependencies are compatible - if windows? - command "#{python} -m pip check" - else - command "#{pip} check" - end + command "#{python} -m pip check" end end diff --git a/omnibus/config/software/freetds.rb b/omnibus/config/software/freetds.rb index 840cb9b5ec2b8..9d104b2ace305 100644 --- a/omnibus/config/software/freetds.rb +++ b/omnibus/config/software/freetds.rb @@ -5,7 +5,7 @@ source sha256: "1c306e658e10a325eefddfd662cec3a6d9065fe61c515f26d4f1fb6c4c62405d" end -source url: "ftp://ftp.freetds.org/pub/freetds/stable/freetds-#{version}.tar.gz" +source url: "https://www.freetds.org/files/stable/freetds-#{version}.tar.gz" relative_path "freetds-#{version}" diff --git a/omnibus/config/software/libxcrypt.rb b/omnibus/config/software/libxcrypt.rb index 0a513cbe48b0f..c832bb2ca5230 100644 --- a/omnibus/config/software/libxcrypt.rb +++ b/omnibus/config/software/libxcrypt.rb @@ -21,7 +21,7 @@ env = with_standard_compiler_flags - if redhat? && !arm? + if redhat? && !arm? && ohai['platform_version'].to_i == 6 # On the CentOS 6 builder, use gcc 4.9.2 in the devtoolset-3 env, # and ignore sign conversion warnings. env["CC"] = "/opt/rh/devtoolset-3/root/usr/bin/gcc" @@ -37,4 +37,4 @@ "--disable-obsolete-api"].join(" "), env: env command "make -j #{workers}", env: env command "make -j #{workers} install" -end \ No newline at end of file +end diff --git a/omnibus/config/software/pip3.rb b/omnibus/config/software/pip3.rb index 26d2258cd865e..3be6c62a32a62 100644 --- a/omnibus/config/software/pip3.rb +++ b/omnibus/config/software/pip3.rb @@ -1,10 +1,15 @@ name "pip3" -default_version "21.3.1" -dependency "setuptools3" +# The version of pip used must be at least equal to the one bundled with the Python version we use +# Python 3.8.16 bundles pip 22.0.4 +default_version "22.3.1" + +skip_transitive_dependency_licensing true + +dependency "python3" source :url => "https://github.com/pypa/pip/archive/#{version}.tar.gz", - :sha256 => "cbfb6a0b5bc2d1e4b4647729ee5b944bb313c8ffd9ff83b9d2e0f727f0c79714", + :sha256 => "8d9f7cd8ad0d6f0c70e71704fd3f0f6538d70930454f1f21bbc2f8e94f6964ee", :extract => :seven_zip relative_path "pip-#{version}" @@ -14,14 +19,12 @@ license_file "https://raw.githubusercontent.com/pypa/pip/main/LICENSE.txt" if ohai["platform"] == "windows" - python_bin = "#{windows_safe_path(python_3_embedded)}\\python.exe" - python_prefix = "#{windows_safe_path(python_3_embedded)}" + python = "#{windows_safe_path(python_3_embedded)}\\python.exe" else - python_bin = "#{install_dir}/embedded/bin/python3" - python_prefix = "#{install_dir}/embedded" + python = "#{install_dir}/embedded/bin/python3" end - command "#{python_bin} setup.py install --prefix=#{python_prefix}" + command "#{python} -m pip install ." if ohai["platform"] != "windows" block do diff --git a/omnibus/config/software/python3.rb b/omnibus/config/software/python3.rb index a54967b3b3e76..884e777224e9f 100644 --- a/omnibus/config/software/python3.rb +++ b/omnibus/config/software/python3.rb @@ -22,7 +22,7 @@ python_configure = ["./configure", "--prefix=#{install_dir}/embedded", "--with-ssl=#{install_dir}/embedded", - "--with-ensurepip=no"] # pip is installed separately by its own software def + "--with-ensurepip=yes"] # We upgrade pip later, in the pip3 software definition if mac_os_x? python_configure.push("--enable-ipv6", @@ -88,5 +88,9 @@ command "XCOPY /YEHIR *.* \"#{windows_safe_path(python_3_embedded)}\"" command "copy /y \"#{windows_safe_path(vcrt140_root)}\\*.dll\" \"#{windows_safe_path(python_3_embedded)}\"" + + # Install pip + python = "#{windows_safe_path(python_3_embedded)}\\python.exe" + command "#{python} -m ensurepip" end end diff --git a/omnibus/config/software/setuptools3.rb b/omnibus/config/software/setuptools3.rb index 2ad023bb7f4bc..eba8d906e3e9b 100644 --- a/omnibus/config/software/setuptools3.rb +++ b/omnibus/config/software/setuptools3.rb @@ -1,14 +1,17 @@ name "setuptools3" -default_version "40.9.0" + +# The version of setuptools used must be at least equal to the one bundled with the Python version we use +# Python 3.8.16 bundles setuptools 56.0.0 +default_version "66.1.1" skip_transitive_dependency_licensing true -dependency "python3" +dependency "pip3" relative_path "setuptools-#{version}" source :url => "https://github.com/pypa/setuptools/archive/v#{version}.tar.gz", - :sha256 => "9ef6623c057d6e46ada8156bb48dc72ef6dbe721768720cc66966cca4097061c", + :sha256 => "081209b1c080b30ca78013dde35600a3070508fcce745a939498f4d76e05b6a6", :extract => :seven_zip build do @@ -16,15 +19,12 @@ license "Python-2.0" if ohai["platform"] == "windows" - python_bin = "#{windows_safe_path(python_3_embedded)}\\python.exe" - python_prefix = "#{windows_safe_path(python_3_embedded)}" + python = "#{windows_safe_path(python_3_embedded)}\\python.exe" else - python_bin = "#{install_dir}/embedded/bin/python3" - python_prefix = "#{install_dir}/embedded" + python = "#{install_dir}/embedded/bin/python3" end - command "#{python_bin} bootstrap.py" - command "#{python_bin} setup.py install --prefix=#{python_prefix}" + command "#{python} -m pip install ." if ohai["platform"] != "windows" block do diff --git a/omnibus/config/software/snowflake-connector-python-py3.rb b/omnibus/config/software/snowflake-connector-python-py3.rb index d8163c6701645..894833e2db361 100644 --- a/omnibus/config/software/snowflake-connector-python-py3.rb +++ b/omnibus/config/software/snowflake-connector-python-py3.rb @@ -6,12 +6,12 @@ # modify the wheel build. name "snowflake-connector-python-py3" -default_version "2.8.2" +default_version "2.8.3" dependency "pip3" source :url => "https://github.com/snowflakedb/snowflake-connector-python/archive/refs/tags/v#{version}.tar.gz", - :sha256 => "2920e32145c500cb4953b08cf55f09729d731f8c0f49922144372ac8a2e3057b", + :sha256 => "1c868db9620d75dfc556696b92cd72f045443792141a2c5f6977b6afab6ca6ed", :extract => :seven_zip relative_path "snowflake-connector-python-#{version}" @@ -29,4 +29,5 @@ pip = "#{install_dir}/embedded/bin/pip3" end + command "#{pip} install ." end diff --git a/omnibus/config/software/system-probe.rb b/omnibus/config/software/system-probe.rb index e1362ac4184e5..15b205a5a8f23 100644 --- a/omnibus/config/software/system-probe.rb +++ b/omnibus/config/software/system-probe.rb @@ -15,9 +15,12 @@ mkdir "#{install_dir}/embedded/share/system-probe/ebpf/runtime" mkdir "#{install_dir}/embedded/share/system-probe/ebpf/co-re" mkdir "#{install_dir}/embedded/share/system-probe/ebpf/co-re/btf" + mkdir "#{install_dir}/embedded/share/system-probe/java" mkdir "#{install_dir}/embedded/nikos/embedded/bin" mkdir "#{install_dir}/embedded/nikos/embedded/lib" + copy 'pkg/network/java/agent-usm.jar', "#{install_dir}/embedded/share/system-probe/java/" + if ENV.has_key?('SYSTEM_PROBE_BIN') and not ENV['SYSTEM_PROBE_BIN'].empty? copy "#{ENV['SYSTEM_PROBE_BIN']}/system-probe", "#{install_dir}/embedded/bin/system-probe" copy "#{ENV['SYSTEM_PROBE_BIN']}/http.o", "#{install_dir}/embedded/share/system-probe/ebpf/" @@ -32,6 +35,7 @@ copy "#{ENV['SYSTEM_PROBE_BIN']}/runtime-security-syscall-wrapper.o", "#{install_dir}/embedded/share/system-probe/ebpf/" copy "#{ENV['SYSTEM_PROBE_BIN']}/runtime-security-offset-guesser.o", "#{install_dir}/embedded/share/system-probe/ebpf/" copy "#{ENV['SYSTEM_PROBE_BIN']}/oom-kill-co-re.o", "#{install_dir}/embedded/share/system-probe/ebpf/co-re/oom-kill.o" + copy "#{ENV['SYSTEM_PROBE_BIN']}/tcp-queue-length-co-re.o", "#{install_dir}/embedded/share/system-probe/ebpf/co-re/tcp-queue-length.o" copy "#{ENV['SYSTEM_PROBE_BIN']}/tracer.c", "#{install_dir}/embedded/share/system-probe/ebpf/runtime/" copy "#{ENV['SYSTEM_PROBE_BIN']}/http.c", "#{install_dir}/embedded/share/system-probe/ebpf/runtime/" copy "#{ENV['SYSTEM_PROBE_BIN']}/runtime-security.c", "#{install_dir}/embedded/share/system-probe/ebpf/runtime/" diff --git a/omnibus/config/templates/datadog-agent/systemd.process.service.erb b/omnibus/config/templates/datadog-agent/systemd.process.service.erb index 29b3cfba48517..15e90302d22f9 100644 --- a/omnibus/config/templates/datadog-agent/systemd.process.service.erb +++ b/omnibus/config/templates/datadog-agent/systemd.process.service.erb @@ -8,7 +8,7 @@ Type=simple PIDFile=<%= install_dir %>/run/process-agent.pid User=dd-agent Restart=on-failure -ExecStart=<%= install_dir %>/embedded/bin/process-agent --config=<%= etc_dir %>/datadog.yaml --sysprobe-config=<%= etc_dir %>/system-probe.yaml --pid=<%= install_dir %>/run/process-agent.pid +ExecStart=<%= install_dir %>/embedded/bin/process-agent --cfgpath=<%= etc_dir %>/datadog.yaml --sysprobe-config=<%= etc_dir %>/system-probe.yaml --pid=<%= install_dir %>/run/process-agent.pid # Since systemd 229, should be in [Unit] but in order to support systemd <229, # it is also supported to have it here. StartLimitInterval=10 diff --git a/omnibus/config/templates/datadog-agent/sysvinit_debian.process.erb b/omnibus/config/templates/datadog-agent/sysvinit_debian.process.erb index 95a851e20e9f4..836c6bc0dfe41 100644 --- a/omnibus/config/templates/datadog-agent/sysvinit_debian.process.erb +++ b/omnibus/config/templates/datadog-agent/sysvinit_debian.process.erb @@ -16,7 +16,7 @@ ETC_DIR="<%= etc_dir %>" INSTALL_DIR="<%= install_dir %>" AGENTPATH="$INSTALL_DIR/embedded/bin/process-agent" PIDFILE="$INSTALL_DIR/run/process-agent.pid" -AGENT_ARGS="--config=$ETC_DIR/datadog.yaml --pid=$PIDFILE" +AGENT_ARGS="--cfgpath=$ETC_DIR/datadog.yaml --pid=$PIDFILE" AGENT_USER="dd-agent" NAME="datadog-agent-process" DESC="Datadog Process Agent" diff --git a/omnibus/config/templates/datadog-agent/upstart_debian.process.conf.erb b/omnibus/config/templates/datadog-agent/upstart_debian.process.conf.erb index e807381ddd20f..535acf15f4100 100644 --- a/omnibus/config/templates/datadog-agent/upstart_debian.process.conf.erb +++ b/omnibus/config/templates/datadog-agent/upstart_debian.process.conf.erb @@ -16,7 +16,7 @@ env DD_LOG_TO_CONSOLE=false setuid dd-agent script - exec <%= install_dir %>/embedded/bin/process-agent --config=<%= etc_dir %>/datadog.yaml --sysprobe-config=<%= etc_dir %>/system-probe.yaml --pid=<%= install_dir %>/run/process-agent.pid + exec <%= install_dir %>/embedded/bin/process-agent --cfgpath=<%= etc_dir %>/datadog.yaml --sysprobe-config=<%= etc_dir %>/system-probe.yaml --pid=<%= install_dir %>/run/process-agent.pid end script post-stop script diff --git a/omnibus/config/templates/datadog-agent/upstart_redhat.process.conf.erb b/omnibus/config/templates/datadog-agent/upstart_redhat.process.conf.erb index dcf13926c259e..6014ebaa904a7 100644 --- a/omnibus/config/templates/datadog-agent/upstart_redhat.process.conf.erb +++ b/omnibus/config/templates/datadog-agent/upstart_redhat.process.conf.erb @@ -16,7 +16,7 @@ script # # setuid is not available in versions of upstart before 1.4. CentOS/RHEL6 use an earlier version of upstart. # This is the best way to set the user in the absence of setuid. - exec su -s /bin/sh -c 'DD_LOG_TO_CONSOLE=false exec "$0" "$@"' dd-agent -- <%= install_dir %>/embedded/bin/process-agent --config=<%= etc_dir %>/datadog.yaml --sysprobe-config=<%= etc_dir %>/system-probe.yaml --pid=<%= install_dir %>/run/process-agent.pid &>> /var/log/datadog/process-errors.log + exec su -s /bin/sh -c 'DD_LOG_TO_CONSOLE=false exec "$0" "$@"' dd-agent -- <%= install_dir %>/embedded/bin/process-agent --cfgpath=<%= etc_dir %>/datadog.yaml --sysprobe-config=<%= etc_dir %>/system-probe.yaml --pid=<%= install_dir %>/run/process-agent.pid &>> /var/log/datadog/process-errors.log end script pre-start script diff --git a/omnibus/package-scripts/agent-deb/postinst b/omnibus/package-scripts/agent-deb/postinst index 7ad5809a35c68..6eb37b39f0ad5 100755 --- a/omnibus/package-scripts/agent-deb/postinst +++ b/omnibus/package-scripts/agent-deb/postinst @@ -94,6 +94,7 @@ fi chown root:root ${INSTALL_DIR}/embedded/bin/system-probe chown root:root ${INSTALL_DIR}/embedded/bin/security-agent chown -R root:root ${INSTALL_DIR}/embedded/share/system-probe/ebpf +chown -R root:root ${INSTALL_DIR}/embedded/share/system-probe/java # Enable and restart the agent service here on Debian platforms # On RHEL, this is done in the posttrans script diff --git a/omnibus/package-scripts/agent-deb/prerm b/omnibus/package-scripts/agent-deb/prerm index e85fd2e697c7d..6dafab99b1d1a 100755 --- a/omnibus/package-scripts/agent-deb/prerm +++ b/omnibus/package-scripts/agent-deb/prerm @@ -110,6 +110,20 @@ remove_version_history() fi } +remove_sysprobe_files() +{ + for file in run/runtime-security-registry.json run/sysprobe.sock run/system-probe.pid + do + if [ -e "$INSTALL_DIR/$file" ]; then + rm "$INSTALL_DIR/$file" || true + fi + done + + if [ -d "$INSTALL_DIR/run" ]; then + rmdir "$INSTALL_DIR/run" || true + fi +} + stop_agent deregister_agent remove_custom_integrations @@ -119,6 +133,7 @@ case "$1" in remove) # We're uninstalling. remove_version_history + remove_sysprobe_files ;; upgrade) # We're upgrading. diff --git a/omnibus/package-scripts/agent-rpm/postinst b/omnibus/package-scripts/agent-rpm/postinst index 2d2715cc0e651..83291f5c7516d 100755 --- a/omnibus/package-scripts/agent-rpm/postinst +++ b/omnibus/package-scripts/agent-rpm/postinst @@ -38,5 +38,6 @@ fi chown root:root ${INSTALL_DIR}/embedded/bin/system-probe chown root:root ${INSTALL_DIR}/embedded/bin/security-agent chown -R root:root ${INSTALL_DIR}/embedded/share/system-probe/ebpf +chown -R root:root ${INSTALL_DIR}/embedded/share/system-probe/java exit 0 diff --git a/omnibus/package-scripts/agent-rpm/prerm b/omnibus/package-scripts/agent-rpm/prerm index 619d833dd5a03..2b450e2213521 100755 --- a/omnibus/package-scripts/agent-rpm/prerm +++ b/omnibus/package-scripts/agent-rpm/prerm @@ -94,6 +94,20 @@ remove_version_history() fi } +remove_sysprobe_files() +{ + for file in run/runtime-security-registry.json run/sysprobe.sock run/system-probe.pid + do + if [ -e "$INSTALL_DIR/$file" ]; then + rm "$INSTALL_DIR/$file" || true + fi + done + + if [ -d "$INSTALL_DIR/run" ]; then + rmdir "$INSTALL_DIR/run" || true + fi +} + stop_agent deregister_agent @@ -103,6 +117,7 @@ case "$*" in remove_custom_integrations remove_py_compiled_files remove_version_history + remove_sysprobe_files ;; 1) # We're upgrading. diff --git a/omnibus/resources/agent/msi/localization-en-us.wxl.erb b/omnibus/resources/agent/msi/localization-en-us.wxl.erb index 2e96fa0c74061..cb512822e2d53 100644 --- a/omnibus/resources/agent/msi/localization-en-us.wxl.erb +++ b/omnibus/resources/agent/msi/localization-en-us.wxl.erb @@ -21,7 +21,7 @@ {\WixUI_Font_Normal_White}Select the way you want features to be installed. {\WixUI_Font_Title_White}Files in Use - WixUI_Font_Normal_White}Some files that need to be updated are currently in use. + {\WixUI_Font_Normal_White}Some files that need to be updated are currently in use. {\WixUI_Font_Title_White}Destination Folder {\WixUI_Font_Normal_White}Click Next to install to the default folder or click Change to choose another. diff --git a/omnibus/resources/agent/msi/source.wxs.erb b/omnibus/resources/agent/msi/source.wxs.erb index d9b6d66688cbc..ec5a09da30637 100644 --- a/omnibus/resources/agent/msi/source.wxs.erb +++ b/omnibus/resources/agent/msi/source.wxs.erb @@ -186,7 +186,7 @@ Directory="AGENT" Execute="immediate" Return="asyncNoWait" - ExeCommand=""[AGENT]ddtray.exe" "-launch-gui"" /> + ExeCommand=""[AGENT]ddtray.exe" "--launch-gui"" /> @@ -367,7 +367,7 @@ Name="Datadog Agent Manager" Description="Manage your Datadog Agent" Target="[AGENT]ddtray.exe" - Arguments= ""-launch-gui"" + Arguments= ""--launch-gui"" WorkingDirectory="AGENT"/> diff --git a/omnibus/resources/iot/msi/source.wxs.erb b/omnibus/resources/iot/msi/source.wxs.erb index 1218d4a75fb4b..1e75203e02657 100644 --- a/omnibus/resources/iot/msi/source.wxs.erb +++ b/omnibus/resources/iot/msi/source.wxs.erb @@ -109,7 +109,7 @@ Directory="AGENT" Execute="immediate" Return="asyncNoWait" - ExeCommand=""[AGENT]ddtray.exe" "-launch-gui"" /> + ExeCommand=""[AGENT]ddtray.exe" "--launch-gui"" /> @@ -291,7 +291,7 @@ Name="Datadog Agent Manager" Description="Manage your Datadog Agent" Target="[AGENT]ddtray.exe" - Arguments= ""-launch-gui"" + Arguments= ""--launch-gui"" WorkingDirectory="AGENT"/> diff --git a/pkg/aggregator/aggregator.go b/pkg/aggregator/aggregator.go index 5283c3ef0dc61..d31c2ffcf434e 100644 --- a/pkg/aggregator/aggregator.go +++ b/pkg/aggregator/aggregator.go @@ -124,6 +124,10 @@ var ( aggregatorEventPlatformEventsErrors = expvar.Map{} aggregatorContainerLifecycleEvents = expvar.Int{} aggregatorContainerLifecycleEventsErrors = expvar.Int{} + aggregatorContainerImages = expvar.Int{} + aggregatorContainerImagesErrors = expvar.Int{} + aggregatorSBOM = expvar.Int{} + aggregatorSBOMErrors = expvar.Int{} tlmFlush = telemetry.NewCounter("aggregator", "flush", []string{"data_type", "state"}, "Number of metrics/service checks/events flushed") @@ -179,6 +183,10 @@ func init() { aggregatorExpvars.Set("EventPlatformEventsErrors", &aggregatorEventPlatformEventsErrors) aggregatorExpvars.Set("ContainerLifecycleEvents", &aggregatorContainerLifecycleEvents) aggregatorExpvars.Set("ContainerLifecycleEventsErrors", &aggregatorContainerLifecycleEventsErrors) + aggregatorExpvars.Set("ContainerImages", &aggregatorContainerImages) + aggregatorExpvars.Set("ContainerImagesErrors", &aggregatorContainerImagesErrors) + aggregatorExpvars.Set("SBOM", &aggregatorSBOM) + aggregatorExpvars.Set("SBOMErrors", &aggregatorSBOMErrors) contextsByMtypeMap := expvar.Map{} aggregatorDogstatsdContextsByMtype = make([]expvar.Int, int(metrics.NumMetricTypes)) @@ -212,6 +220,16 @@ type BufferedAggregator struct { contLcycleStopper chan struct{} contLcycleDequeueOnce sync.Once + contImageIn chan senderContainerImage + contImageBuffer chan senderContainerImage + contImageStopper chan struct{} + contImageDequeueOnce sync.Once + + sbomIn chan senderSBOM + sbomBuffer chan senderSBOM + sbomStopper chan struct{} + sbomDequeueOnce sync.Once + // metricSamplePool is a pool of slices of metric sample to avoid allocations. // Used by the Dogstatsd Batcher. MetricSamplePool *metrics.MetricSamplePool @@ -237,6 +255,7 @@ type BufferedAggregator struct { tlmContainerTagsEnabled bool // Whether we should call the tagger to tag agent telemetry metrics agentTags func(collectors.TagCardinality) ([]string, error) // This function gets the agent tags from the tagger (defined as a struct field to ease testing) + globalTags func(collectors.TagCardinality) ([]string, error) // This function gets global tags from the tagger when host tags are not available flushAndSerializeInParallel FlushAndSerializeInParallel } @@ -290,6 +309,14 @@ func NewBufferedAggregator(s serializer.MetricSerializer, eventPlatformForwarder contLcycleBuffer: make(chan senderContainerLifecycleEvent, bufferSize), contLcycleStopper: make(chan struct{}), + contImageIn: make(chan senderContainerImage, bufferSize), + contImageBuffer: make(chan senderContainerImage, bufferSize), + contImageStopper: make(chan struct{}), + + sbomIn: make(chan senderSBOM, bufferSize), + sbomBuffer: make(chan senderSBOM, bufferSize), + sbomStopper: make(chan struct{}), + tagsStore: tagsStore, checkSamplers: make(map[check.ID]*CheckSampler), flushInterval: flushInterval, @@ -304,6 +331,7 @@ func NewBufferedAggregator(s serializer.MetricSerializer, eventPlatformForwarder agentName: agentName, tlmContainerTagsEnabled: config.Datadog.GetBool("basic_telemetry_add_container_tags"), agentTags: tagger.AgentTags, + globalTags: tagger.GlobalTags, flushAndSerializeInParallel: NewFlushAndSerializeInParallel(config.Datadog), } @@ -785,6 +813,12 @@ func (agg *BufferedAggregator) run() { case event := <-agg.contLcycleIn: aggregatorContainerLifecycleEvents.Add(1) agg.handleContainerLifecycleEvent(event) + case event := <-agg.contImageIn: + aggregatorContainerImages.Add(1) + agg.handleContainerImage(event) + case event := <-agg.sbomIn: + aggregatorSBOM.Add(1) + agg.handleSBOM(event) } } } @@ -805,6 +839,38 @@ func (agg *BufferedAggregator) dequeueContainerLifecycleEvents() { } } +// dequeueContainerImages consumes buffered container image. +// It is blocking so it should be started in its own routine and only one instance should be started. +func (agg *BufferedAggregator) dequeueContainerImages() { + for { + select { + case event := <-agg.contImageBuffer: + if err := agg.serializer.SendContainerImage(event.msgs, agg.hostname); err != nil { + aggregatorContainerImagesErrors.Add(1) + log.Warnf("Error submitting container image data: %v", err) + } + case <-agg.contImageStopper: + return + } + } +} + +// dequeueSBOM consumes buffered SBOM. +// It is blocking so it should be started in its own routine and only one instance should be started. +func (agg *BufferedAggregator) dequeueSBOM() { + for { + select { + case event := <-agg.sbomBuffer: + if err := agg.serializer.SendSBOM(event.msgs, agg.hostname); err != nil { + aggregatorSBOMErrors.Add(1) + log.Warnf("Error submitting SBOM data: %v", err) + } + case <-agg.sbomStopper: + return + } + } +} + // handleContainerLifecycleEvent forwards container lifecycle events to the buffering channel. func (agg *BufferedAggregator) handleContainerLifecycleEvent(event senderContainerLifecycleEvent) { select { @@ -816,19 +882,58 @@ func (agg *BufferedAggregator) handleContainerLifecycleEvent(event senderContain } } +// handleContainerImage forwards container image to the buffering channel. +func (agg *BufferedAggregator) handleContainerImage(event senderContainerImage) { + select { + case agg.contImageBuffer <- event: + return + default: + aggregatorContainerImagesErrors.Add(1) + log.Warn("Container image channel is full") + } +} + +// handleSBOM forwards SBOM to the buffering channel. +func (agg *BufferedAggregator) handleSBOM(event senderSBOM) { + select { + case agg.sbomBuffer <- event: + return + default: + aggregatorSBOMErrors.Add(1) + log.Warn("SBOM channel is full") + } +} + // tags returns the list of tags that should be added to the agent telemetry metrics // Container agent tags may be missing in the first seconds after agent startup func (agg *BufferedAggregator) tags(withVersion bool) []string { - tags := []string{} - if agg.tlmContainerTagsEnabled { + var tags []string + if agg.hostname == "" { var err error - tags, err = agg.agentTags(tagger.ChecksCardinality) + tags, err = agg.globalTags(tagger.ChecksCardinality) if err != nil { + log.Debugf("Couldn't get Global tags: %v", err) + } + } + if agg.tlmContainerTagsEnabled { + agentTags, err := agg.agentTags(tagger.ChecksCardinality) + if err == nil { + if tags == nil { + tags = agentTags + } else { + tags = append(tags, agentTags...) + } + } else { log.Debugf("Couldn't get Agent tags: %v", err) } } if withVersion { - return append(tags, "version:"+version.AgentVersion) + tags = append(tags, "version:"+version.AgentVersion) + } + // nil to empty string + // This is expected by other components/tests + if tags == nil { + tags = []string{} } return tags } diff --git a/pkg/aggregator/aggregator_test.go b/pkg/aggregator/aggregator_test.go index 49959006072b7..aed53a903c5a1 100644 --- a/pkg/aggregator/aggregator_test.go +++ b/pkg/aggregator/aggregator_test.go @@ -14,7 +14,6 @@ import ( "expvar" "fmt" "sort" - "testing" "time" @@ -491,53 +490,84 @@ func TestTags(t *testing.T) { tests := []struct { name string + hostname string tlmContainerTagsEnabled bool agentTags func(collectors.TagCardinality) ([]string, error) + globalTags func(collectors.TagCardinality) ([]string, error) withVersion bool want []string }{ { name: "tags disabled, with version", + hostname: "hostname", tlmContainerTagsEnabled: false, agentTags: func(collectors.TagCardinality) ([]string, error) { return nil, errors.New("disabled") }, + globalTags: func(collectors.TagCardinality) ([]string, error) { return nil, errors.New("disabled") }, withVersion: true, want: []string{"version:" + version.AgentVersion}, }, { name: "tags disabled, without version", + hostname: "hostname", tlmContainerTagsEnabled: false, agentTags: func(collectors.TagCardinality) ([]string, error) { return nil, errors.New("disabled") }, + globalTags: func(collectors.TagCardinality) ([]string, error) { return nil, errors.New("disabled") }, withVersion: false, want: []string{}, }, { name: "tags enabled, with version", + hostname: "hostname", tlmContainerTagsEnabled: true, agentTags: func(collectors.TagCardinality) ([]string, error) { return []string{"container_name:agent"}, nil }, + globalTags: func(collectors.TagCardinality) ([]string, error) { return nil, errors.New("disabled") }, withVersion: true, want: []string{"container_name:agent", "version:" + version.AgentVersion}, }, { name: "tags enabled, without version", + hostname: "hostname", tlmContainerTagsEnabled: true, agentTags: func(collectors.TagCardinality) ([]string, error) { return []string{"container_name:agent"}, nil }, + globalTags: func(collectors.TagCardinality) ([]string, error) { return nil, errors.New("disabled") }, withVersion: false, want: []string{"container_name:agent"}, }, { name: "tags enabled, with version, tagger error", + hostname: "hostname", tlmContainerTagsEnabled: true, agentTags: func(collectors.TagCardinality) ([]string, error) { return nil, errors.New("no tags") }, + globalTags: func(collectors.TagCardinality) ([]string, error) { return nil, errors.New("disabled") }, withVersion: true, want: []string{"version:" + version.AgentVersion}, }, + { + name: "tags enabled, with version, with global tags (no hostname)", + hostname: "", + tlmContainerTagsEnabled: true, + agentTags: func(collectors.TagCardinality) ([]string, error) { return []string{"container_name:agent"}, nil }, + globalTags: func(collectors.TagCardinality) ([]string, error) { return []string{"kube_cluster_name:foo"}, nil }, + withVersion: true, + want: []string{"container_name:agent", "version:" + version.AgentVersion, "kube_cluster_name:foo"}, + }, + { + name: "tags enabled, with version, with global tags (hostname present)", + hostname: "hostname", + tlmContainerTagsEnabled: true, + agentTags: func(collectors.TagCardinality) ([]string, error) { return []string{"container_name:agent"}, nil }, + globalTags: func(collectors.TagCardinality) ([]string, error) { return []string{"kube_cluster_name:foo"}, nil }, + withVersion: true, + want: []string{"container_name:agent", "version:" + version.AgentVersion}, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { defer config.Datadog.Set("basic_telemetry_add_container_tags", nil) config.Datadog.Set("basic_telemetry_add_container_tags", tt.tlmContainerTagsEnabled) - agg := NewBufferedAggregator(nil, nil, "hostname", time.Second) + agg := NewBufferedAggregator(nil, nil, tt.hostname, time.Second) agg.agentTags = tt.agentTags + agg.globalTags = tt.globalTags assert.ElementsMatch(t, tt.want, agg.tags(tt.withVersion)) }) } diff --git a/pkg/aggregator/context_resolver.go b/pkg/aggregator/context_resolver.go index 9a75bcc34396c..e8c0ff13daa32 100644 --- a/pkg/aggregator/context_resolver.go +++ b/pkg/aggregator/context_resolver.go @@ -111,6 +111,36 @@ func (cr *contextResolver) release() { } } +func (c *contextResolver) sendOriginTelemetry(timestamp float64, series metrics.SerieSink, hostname string, constTags []string) { + // Within the contextResolver, each set of tags is represented by a unique pointer. + perOrigin := map[*tags.Entry]uint64{} + for _, cx := range c.contextsByKey { + perOrigin[cx.taggerTags]++ + } + + // We send metrics directly to the sink, instead of using + // pkg/telemetry for a few reasons: + // + // 1. We can send full set of tagger tags for higher level + // aggregations (pod, namespace, etc). pkg/telemetry only + // allows a fixed set of tags. + // 2. Avoid the need to manually create and delete tag values + // inside a telemetry Gauge. + // 3. Cardinality is automatically limited to origins verified by + // the tagger (although broken applications sending invalid + // origin id would coalesce to no origin, making this less + // useful for troubleshooting). + for entry, count := range perOrigin { + series.Append(&metrics.Serie{ + Name: "datadog.agent.aggregator.dogstatsd_contexts_by_origin", + Host: hostname, + Tags: tagset.NewCompositeTags(constTags, entry.Tags()), + MType: metrics.APIGaugeType, + Points: []metrics.Point{{Ts: timestamp, Value: float64(count)}}, + }) + } +} + // timestampContextResolver allows tracking and expiring contexts based on time. type timestampContextResolver struct { resolver *contextResolver @@ -177,6 +207,10 @@ func (cr *timestampContextResolver) expireContexts(expireTimestamp float64, keep return expiredContextKeys } +func (cr *timestampContextResolver) sendOriginTelemetry(timestamp float64, series metrics.SerieSink, hostname string, tags []string) { + cr.resolver.sendOriginTelemetry(timestamp, series, hostname, tags) +} + // countBasedContextResolver allows tracking and expiring contexts based on the number // of calls of `expireContexts`. type countBasedContextResolver struct { diff --git a/pkg/aggregator/context_resolver_test.go b/pkg/aggregator/context_resolver_test.go index 297b474d34d3d..b5a97f5c6aa6d 100644 --- a/pkg/aggregator/context_resolver_test.go +++ b/pkg/aggregator/context_resolver_test.go @@ -257,3 +257,56 @@ func testTagDeduplication(t *testing.T, store *tags.Store) { func TestTagDeduplication(t *testing.T) { testWithTagsStore(t, testTagDeduplication) } + +type mockSink []*metrics.Serie + +func (s *mockSink) Append(ms *metrics.Serie) { + *s = append(*s, ms) +} + +type mockSample struct { + name string + taggerTags []string + metricTags []string +} + +func (s *mockSample) GetName() string { return s.name } +func (s *mockSample) GetHost() string { return "noop" } +func (s *mockSample) GetMetricType() metrics.MetricType { return metrics.GaugeType } +func (s *mockSample) IsNoIndex() bool { return false } +func (s *mockSample) GetTags(tb, mb tagset.TagsAccumulator) { + tb.Append(s.taggerTags...) + mb.Append(s.metricTags...) +} + +func TestOriginTelemetry(t *testing.T) { + r := newContextResolver(tags.NewStore(true, "test")) + r.trackContext(&mockSample{"foo", []string{"foo"}, []string{"ook"}}) + r.trackContext(&mockSample{"foo", []string{"foo"}, []string{"eek"}}) + r.trackContext(&mockSample{"foo", []string{"bar"}, []string{"ook"}}) + r.trackContext(&mockSample{"bar", []string{"bar"}, []string{}}) + r.trackContext(&mockSample{"bar", []string{"baz"}, []string{}}) + sink := mockSink{} + ts := 1672835152.0 + r.sendOriginTelemetry(ts, &sink, "test", []string{"test"}) + + assert.ElementsMatch(t, sink, []*metrics.Serie{{ + Name: "datadog.agent.aggregator.dogstatsd_contexts_by_origin", + Host: "test", + Tags: tagset.NewCompositeTags([]string{"test"}, []string{"foo"}), + MType: metrics.APIGaugeType, + Points: []metrics.Point{{Ts: ts, Value: 2.0 }}, + }, { + Name: "datadog.agent.aggregator.dogstatsd_contexts_by_origin", + Host: "test", + Tags: tagset.NewCompositeTags([]string{"test"}, []string{"bar"}), + MType: metrics.APIGaugeType, + Points: []metrics.Point{{Ts: ts, Value: 2.0 }}, + }, { + Name: "datadog.agent.aggregator.dogstatsd_contexts_by_origin", + Host: "test", + Tags: tagset.NewCompositeTags([]string{"test"}, []string{"baz"}), + MType: metrics.APIGaugeType, + Points: []metrics.Point{{Ts: ts, Value: 1.0 }}, + }}) +} diff --git a/pkg/aggregator/demultiplexer_agent.go b/pkg/aggregator/demultiplexer_agent.go index f0e43925318c8..559fadac43354 100644 --- a/pkg/aggregator/demultiplexer_agent.go +++ b/pkg/aggregator/demultiplexer_agent.go @@ -12,10 +12,12 @@ import ( "github.com/DataDog/datadog-agent/pkg/aggregator/internal/tags" "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/containerimage" "github.com/DataDog/datadog-agent/pkg/containerlifecycle" "github.com/DataDog/datadog-agent/pkg/epforwarder" "github.com/DataDog/datadog-agent/pkg/forwarder" "github.com/DataDog/datadog-agent/pkg/metrics" + "github.com/DataDog/datadog-agent/pkg/sbom" "github.com/DataDog/datadog-agent/pkg/serializer" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -61,6 +63,8 @@ type AgentDemultiplexerOptions struct { UseEventPlatformForwarder bool UseOrchestratorForwarder bool UseContainerLifecycleForwarder bool + UseContainerImageForwarder bool + UseSBOMForwarder bool FlushInterval time.Duration EnableNoAggregationPipeline bool @@ -83,6 +87,8 @@ func DefaultAgentDemultiplexerOptions(options *forwarder.Options) AgentDemultipl UseNoopEventPlatformForwarder: false, UseNoopOrchestratorForwarder: false, UseContainerLifecycleForwarder: false, + UseContainerImageForwarder: false, + UseSBOMForwarder: false, // the different agents/binaries enable it on a per-need basis EnableNoAggregationPipeline: false, } @@ -108,6 +114,8 @@ type forwarders struct { orchestrator forwarder.Forwarder eventPlatform epforwarder.EventPlatformForwarder containerLifecycle *forwarder.DefaultForwarder + containerImage *forwarder.DefaultForwarder + sbom *forwarder.DefaultForwarder } type dataOutputs struct { @@ -162,6 +170,18 @@ func initAgentDemultiplexer(options AgentDemultiplexerOptions, hostname string) containerLifecycleForwarder = containerlifecycle.NewForwarder() } + // setup the container image forwarder + var containerImageForwarder *forwarder.DefaultForwarder + if options.UseContainerImageForwarder { + containerImageForwarder = containerimage.NewForwarder() + } + + // setup the SBOM forwarder + var sbomForwarder *forwarder.DefaultForwarder + if options.UseSBOMForwarder { + sbomForwarder = sbom.NewForwarder() + } + var sharedForwarder forwarder.Forwarder if options.UseNoopForwarder { sharedForwarder = forwarder.NoopForwarder{} @@ -169,10 +189,15 @@ func initAgentDemultiplexer(options AgentDemultiplexerOptions, hostname string) sharedForwarder = forwarder.NewDefaultForwarder(options.SharedForwarderOptions) } + if config.Datadog.GetBool("telemetry.enabled") && config.Datadog.GetBool("telemetry.dogstatsd_origin") && !config.Datadog.GetBool("aggregator_use_tags_store") { + log.Warn("DogStatsD origin telemetry is not supported when aggregator_use_tags_store is disabled.") + config.Datadog.Set("telemetry.dogstatsd_origin", false) + } + // prepare the serializer // ---------------------- - sharedSerializer := serializer.NewSerializer(sharedForwarder, orchestratorForwarder, containerLifecycleForwarder) + sharedSerializer := serializer.NewSerializer(sharedForwarder, orchestratorForwarder, containerLifecycleForwarder, containerImageForwarder, sbomForwarder) // prepare the embedded aggregator // -- @@ -193,7 +218,7 @@ func initAgentDemultiplexer(options AgentDemultiplexerOptions, hostname string) for i := 0; i < statsdPipelinesCount; i++ { // the sampler tagsStore := tags.NewStore(config.Datadog.GetBool("aggregator_use_tags_store"), fmt.Sprintf("timesampler #%d", i)) - statsdSampler := NewTimeSampler(TimeSamplerID(i), bucketSize, tagsStore) + statsdSampler := NewTimeSampler(TimeSamplerID(i), bucketSize, tagsStore, agg.hostname) // its worker (process loop + flush/serialization mechanism) @@ -204,7 +229,7 @@ func initAgentDemultiplexer(options AgentDemultiplexerOptions, hostname string) var noAggWorker *noAggregationStreamWorker var noAggSerializer serializer.MetricSerializer if options.EnableNoAggregationPipeline { - noAggSerializer = serializer.NewSerializer(sharedForwarder, orchestratorForwarder, containerLifecycleForwarder) + noAggSerializer = serializer.NewSerializer(sharedForwarder, orchestratorForwarder, containerLifecycleForwarder, containerImageForwarder, sbomForwarder) noAggWorker = newNoAggregationStreamWorker( config.Datadog.GetInt("dogstatsd_no_aggregation_pipeline_batch_size"), noAggSerializer, @@ -230,6 +255,8 @@ func initAgentDemultiplexer(options AgentDemultiplexerOptions, hostname string) orchestrator: orchestratorForwarder, eventPlatform: eventPlatformForwarder, containerLifecycle: containerLifecycleForwarder, + containerImage: containerImageForwarder, + sbom: sbomForwarder, }, sharedSerializer: sharedSerializer, @@ -309,6 +336,24 @@ func (d *AgentDemultiplexer) Run() { log.Debug("not starting the container lifecycle forwarder") } + // container image forwarder + if d.forwarders.containerImage != nil { + if err := d.forwarders.containerImage.Start(); err != nil { + log.Errorf("error starting container image forwarder: %v", err) + } + } else { + log.Debug("not starting the container image forwarder") + } + + // sbom forwarder + if d.forwarders.sbom != nil { + if err := d.forwarders.sbom.Start(); err != nil { + log.Errorf("error starting SBOM forwarder: %v", err) + } + } else { + log.Debug("not starting the SBOM forwarder") + } + // shared forwarder if d.forwarders.shared != nil { d.forwarders.shared.Start() //nolint:errcheck @@ -322,6 +367,14 @@ func (d *AgentDemultiplexer) Run() { d.aggregator.contLcycleDequeueOnce.Do(func() { go d.aggregator.dequeueContainerLifecycleEvents() }) } + if d.options.UseContainerImageForwarder { + d.aggregator.contImageDequeueOnce.Do(func() { go d.aggregator.dequeueContainerImages() }) + } + + if d.options.UseSBOMForwarder { + d.aggregator.sbomDequeueOnce.Do(func() { go d.aggregator.dequeueSBOM() }) + } + for _, w := range d.statsd.workers { go w.run() } @@ -417,6 +470,14 @@ func (d *AgentDemultiplexer) Stop(flush bool) { d.dataOutputs.forwarders.containerLifecycle.Stop() d.dataOutputs.forwarders.containerLifecycle = nil } + if d.dataOutputs.forwarders.containerImage != nil { + d.dataOutputs.forwarders.containerImage.Stop() + d.dataOutputs.forwarders.containerImage = nil + } + if d.dataOutputs.forwarders.sbom != nil { + d.dataOutputs.forwarders.sbom.Stop() + d.dataOutputs.forwarders.sbom = nil + } if d.dataOutputs.forwarders.shared != nil { d.dataOutputs.forwarders.shared.Stop() d.dataOutputs.forwarders.shared = nil diff --git a/pkg/aggregator/demultiplexer_senders.go b/pkg/aggregator/demultiplexer_senders.go index 34ddcf68435a3..4fcbb3e3753dc 100644 --- a/pkg/aggregator/demultiplexer_senders.go +++ b/pkg/aggregator/demultiplexer_senders.go @@ -74,6 +74,8 @@ func (s *senders) GetDefaultSender() (Sender, error) { s.agg.orchestratorManifestIn, s.agg.eventPlatformIn, s.agg.contLcycleIn, + s.agg.contImageIn, + s.agg.sbomIn, ) }) return s.defaultSender, nil diff --git a/pkg/aggregator/demultiplexer_serverless.go b/pkg/aggregator/demultiplexer_serverless.go index 80ae33cfec516..d1b7ed8227a36 100644 --- a/pkg/aggregator/demultiplexer_serverless.go +++ b/pkg/aggregator/demultiplexer_serverless.go @@ -39,11 +39,11 @@ type ServerlessDemultiplexer struct { func InitAndStartServerlessDemultiplexer(domainResolvers map[string]resolver.DomainResolver, forwarderTimeout time.Duration) *ServerlessDemultiplexer { bufferSize := config.Datadog.GetInt("aggregator_buffer_size") forwarder := forwarder.NewSyncForwarder(domainResolvers, forwarderTimeout) - serializer := serializer.NewSerializer(forwarder, nil, nil) + serializer := serializer.NewSerializer(forwarder, nil, nil, nil, nil) metricSamplePool := metrics.NewMetricSamplePool(MetricSamplePoolBatchSize) tagsStore := tags.NewStore(config.Datadog.GetBool("aggregator_use_tags_store"), "timesampler") - statsdSampler := NewTimeSampler(TimeSamplerID(0), bucketSize, tagsStore) + statsdSampler := NewTimeSampler(TimeSamplerID(0), bucketSize, tagsStore, "") flushAndSerializeInParallel := NewFlushAndSerializeInParallel(config.Datadog) statsdWorker := newTimeSamplerWorker(statsdSampler, DefaultFlushInterval, bufferSize, metricSamplePool, flushAndSerializeInParallel, tagsStore) diff --git a/pkg/aggregator/mocksender/asserts.go b/pkg/aggregator/mocksender/asserts.go index d450d0f697ff9..0c3918127edf9 100644 --- a/pkg/aggregator/mocksender/asserts.go +++ b/pkg/aggregator/mocksender/asserts.go @@ -12,6 +12,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" + "github.com/DataDog/agent-payload/v5/contimage" + "github.com/DataDog/agent-payload/v5/sbom" "github.com/DataDog/datadog-agent/pkg/metrics" ) @@ -70,6 +72,16 @@ func (m *MockSender) AssertEventPlatformEvent(t *testing.T, expectedRawEvent str return m.Mock.AssertCalled(t, "EventPlatformEvent", expectedRawEvent, expectedEventType) } +// AssertContainerImage assert the expected event was emitted with the following values +func (m *MockSender) AssertContainerImage(t *testing.T, expectedContainerImages []contimage.ContainerImagePayload) bool { + return m.Mock.AssertCalled(t, "ContainerImage", expectedContainerImages) +} + +// AssertSBOM assert the expected event was emitted with the following values +func (m *MockSender) AssertSBOM(t *testing.T, expectedSBOM []sbom.SBOMPayload) bool { + return m.Mock.AssertCalled(t, "SBOM", expectedSBOM) +} + // AssertEventMissing assert the expectedEvent was never emitted with the following values: // AggregationKey, Priority, SourceTypeName, EventType, Host and a Ts range weighted with the parameter allowedDelta func (m *MockSender) AssertEventMissing(t *testing.T, expectedEvent metrics.Event, allowedDelta time.Duration) bool { diff --git a/pkg/aggregator/mocksender/mocked_methods.go b/pkg/aggregator/mocksender/mocked_methods.go index 85a463bf649b7..28ef14c46d86a 100644 --- a/pkg/aggregator/mocksender/mocked_methods.go +++ b/pkg/aggregator/mocksender/mocked_methods.go @@ -11,97 +11,97 @@ import ( "github.com/DataDog/datadog-agent/pkg/serializer" ) -//Rate adds a rate type to the mock calls. +// Rate adds a rate type to the mock calls. func (m *MockSender) Rate(metric string, value float64, hostname string, tags []string) { m.Called(metric, value, hostname, tags) } -//Count adds a count type to the mock calls. +// Count adds a count type to the mock calls. func (m *MockSender) Count(metric string, value float64, hostname string, tags []string) { m.Called(metric, value, hostname, tags) } -//MonotonicCount adds a monotonic count type to the mock calls. +// MonotonicCount adds a monotonic count type to the mock calls. func (m *MockSender) MonotonicCount(metric string, value float64, hostname string, tags []string) { m.Called(metric, value, hostname, tags) } -//MonotonicCountWithFlushFirstValue adds a monotonic count type to the mock calls with flushFirstValue parameter +// MonotonicCountWithFlushFirstValue adds a monotonic count type to the mock calls with flushFirstValue parameter func (m *MockSender) MonotonicCountWithFlushFirstValue(metric string, value float64, hostname string, tags []string, flushFirstValue bool) { m.Called(metric, value, hostname, tags, flushFirstValue) } -//Counter adds a counter type to the mock calls. +// Counter adds a counter type to the mock calls. func (m *MockSender) Counter(metric string, value float64, hostname string, tags []string) { m.Called(metric, value, hostname, tags) } -//Histogram adds a histogram type to the mock calls. +// Histogram adds a histogram type to the mock calls. func (m *MockSender) Histogram(metric string, value float64, hostname string, tags []string) { m.Called(metric, value, hostname, tags) } -//Historate adds a historate type to the mock calls. +// Historate adds a historate type to the mock calls. func (m *MockSender) Historate(metric string, value float64, hostname string, tags []string) { m.Called(metric, value, hostname, tags) } -//Gauge adds a gauge type to the mock calls. +// Gauge adds a gauge type to the mock calls. func (m *MockSender) Gauge(metric string, value float64, hostname string, tags []string) { m.Called(metric, value, hostname, tags) } -//GaugeNoIndex adds a gauge type to the mock calls that is not indexed. +// GaugeNoIndex adds a gauge type to the mock calls that is not indexed. func (m *MockSender) GaugeNoIndex(metric string, value float64, hostname string, tags []string) { m.Called(metric, value, hostname, tags) } -//ServiceCheck enables the service check mock call. +// ServiceCheck enables the service check mock call. func (m *MockSender) ServiceCheck(checkName string, status metrics.ServiceCheckStatus, hostname string, tags []string, message string) { m.Called(checkName, status, hostname, tags, message) } -//DisableDefaultHostname enables the hostname mock call. +// DisableDefaultHostname enables the hostname mock call. func (m *MockSender) DisableDefaultHostname(d bool) { m.Called(d) } -//Event enables the event mock call. +// Event enables the event mock call. func (m *MockSender) Event(e metrics.Event) { m.Called(e) } -//EventPlatformEvent enables the event platform event mock call. +// EventPlatformEvent enables the event platform event mock call. func (m *MockSender) EventPlatformEvent(rawEvent string, eventType string) { m.Called(rawEvent, eventType) } -//HistogramBucket enables the histogram bucket mock call. +// HistogramBucket enables the histogram bucket mock call. func (m *MockSender) HistogramBucket(metric string, value int64, lowerBound, upperBound float64, monotonic bool, hostname string, tags []string, flushFirstValue bool) { m.Called(metric, value, lowerBound, upperBound, monotonic, hostname, tags, flushFirstValue) } -//Commit enables the commit mock call. +// Commit enables the commit mock call. func (m *MockSender) Commit() { m.Called() } -//SetCheckCustomTags enables the set of check custom tags mock call. +// SetCheckCustomTags enables the set of check custom tags mock call. func (m *MockSender) SetCheckCustomTags(tags []string) { m.Called(tags) } -//SetCheckService enables the setting of check service mock call. +// SetCheckService enables the setting of check service mock call. func (m *MockSender) SetCheckService(service string) { m.Called(service) } -//FinalizeCheckServiceTag enables the sending of check service tag mock call. +// FinalizeCheckServiceTag enables the sending of check service tag mock call. func (m *MockSender) FinalizeCheckServiceTag() { m.Called() } -//GetSenderStats enables the get metric stats mock call. +// GetSenderStats enables the get metric stats mock call. func (m *MockSender) GetSenderStats() check.SenderStats { m.Called() return check.NewSenderStats() @@ -117,6 +117,16 @@ func (m *MockSender) ContainerLifecycleEvent(msgs []serializer.ContainerLifecycl m.Called(msgs) } +// ContainerImage submit container image messages +func (m *MockSender) ContainerImage(msgs []serializer.ContainerImageMessage) { + m.Called(msgs) +} + +// SBOM submit sbom data +func (m *MockSender) SBOM(msgs []serializer.SBOMMessage) { + m.Called(msgs) +} + // OrchestratorManifest submit orchestrator manifest messages func (m *MockSender) OrchestratorManifest(msgs []serializer.ProcessMessageBody, clusterID string) { m.Called(msgs, clusterID) diff --git a/pkg/aggregator/mocksender/mocksender.go b/pkg/aggregator/mocksender/mocksender.go index a4fd2db258625..e713125cdb4f7 100644 --- a/pkg/aggregator/mocksender/mocksender.go +++ b/pkg/aggregator/mocksender/mocksender.go @@ -34,7 +34,7 @@ func SetSender(sender *MockSender, id check.ID) { aggregator.SetSender(sender, id) //nolint:errcheck } -//MockSender allows mocking of the checks sender for unit testing +// MockSender allows mocking of the checks sender for unit testing type MockSender struct { mock.Mock } diff --git a/pkg/aggregator/sender.go b/pkg/aggregator/sender.go index 8a4acd1e31d91..97b33c50f20eb 100644 --- a/pkg/aggregator/sender.go +++ b/pkg/aggregator/sender.go @@ -41,6 +41,8 @@ type Sender interface { OrchestratorMetadata(msgs []serializer.ProcessMessageBody, clusterID string, nodeType int) OrchestratorManifest(msgs []serializer.ProcessMessageBody, clusterID string) ContainerLifecycleEvent(msgs []serializer.ContainerLifecycleMessage) + ContainerImage(msgs []serializer.ContainerImageMessage) + SBOM(msgs []serializer.SBOMMessage) } // RawSender interface to submit samples to aggregator directly @@ -64,6 +66,8 @@ type checkSender struct { orchestratorMetadataOut chan<- senderOrchestratorMetadata orchestratorManifestOut chan<- senderOrchestratorManifest contlcycleOut chan<- senderContainerLifecycleEvent + contimageOut chan<- senderContainerImage + sbomOut chan<- senderSBOM eventPlatformOut chan<- senderEventPlatformEvent checkTags []string service string @@ -109,6 +113,14 @@ type senderContainerLifecycleEvent struct { msgs []serializer.ContainerLifecycleMessage } +type senderContainerImage struct { + msgs []serializer.ContainerImageMessage +} + +type senderSBOM struct { + msgs []serializer.SBOMMessage +} + type senderOrchestratorManifest struct { msgs []serializer.ProcessMessageBody clusterID string @@ -130,6 +142,8 @@ func newCheckSender( orchestratorManifestOut chan<- senderOrchestratorManifest, eventPlatformOut chan<- senderEventPlatformEvent, contlcycleOut chan<- senderContainerLifecycleEvent, + contimageOut chan<- senderContainerImage, + sbomOut chan<- senderSBOM, ) *checkSender { return &checkSender{ id: id, @@ -143,6 +157,8 @@ func newCheckSender( orchestratorManifestOut: orchestratorManifestOut, eventPlatformOut: eventPlatformOut, contlcycleOut: contlcycleOut, + contimageOut: contimageOut, + sbomOut: sbomOut, } } @@ -434,10 +450,19 @@ func (s *checkSender) OrchestratorManifest(msgs []serializer.ProcessMessageBody, } s.orchestratorManifestOut <- om } + func (s *checkSender) ContainerLifecycleEvent(msgs []serializer.ContainerLifecycleMessage) { s.contlcycleOut <- senderContainerLifecycleEvent{msgs: msgs} } +func (s *checkSender) ContainerImage(msgs []serializer.ContainerImageMessage) { + s.contimageOut <- senderContainerImage{msgs: msgs} +} + +func (s *checkSender) SBOM(msgs []serializer.SBOMMessage) { + s.sbomOut <- senderSBOM{msgs: msgs} +} + func (sp *checkSenderPool) getSender(id check.ID) (Sender, error) { sp.m.Lock() defer sp.m.Unlock() @@ -463,6 +488,8 @@ func (sp *checkSenderPool) mkSender(id check.ID) (Sender, error) { sp.agg.orchestratorManifestIn, sp.agg.eventPlatformIn, sp.agg.contLcycleIn, + sp.agg.contImageIn, + sp.agg.sbomIn, ) sp.senders[id] = sender return sender, err diff --git a/pkg/aggregator/sender_test.go b/pkg/aggregator/sender_test.go index 462368ab56f5e..1fa8e15fcc070 100644 --- a/pkg/aggregator/sender_test.go +++ b/pkg/aggregator/sender_test.go @@ -28,6 +28,8 @@ type senderWithChans struct { orchestratorManifestChan chan senderOrchestratorManifest eventPlatformEventChan chan senderEventPlatformEvent contlcycleOut chan senderContainerLifecycleEvent + contimageOut chan senderContainerImage + sbomOut chan senderSBOM sender *checkSender } @@ -39,7 +41,9 @@ func initSender(id check.ID, defaultHostname string) (s senderWithChans) { s.orchestratorManifestChan = make(chan senderOrchestratorManifest, 10) s.eventPlatformEventChan = make(chan senderEventPlatformEvent, 10) s.contlcycleOut = make(chan senderContainerLifecycleEvent, 10) - s.sender = newCheckSender(id, defaultHostname, s.itemChan, s.serviceCheckChan, s.eventChan, s.orchestratorChan, s.orchestratorManifestChan, s.eventPlatformEventChan, s.contlcycleOut) + s.contimageOut = make(chan senderContainerImage, 10) + s.sbomOut = make(chan senderSBOM, 10) + s.sender = newCheckSender(id, defaultHostname, s.itemChan, s.serviceCheckChan, s.eventChan, s.orchestratorChan, s.orchestratorManifestChan, s.eventPlatformEventChan, s.contlcycleOut, s.contimageOut, s.sbomOut) return s } @@ -175,7 +179,9 @@ func TestGetAndSetSender(t *testing.T) { orchestratorManifestChan := make(chan senderOrchestratorManifest, 10) eventPlatformChan := make(chan senderEventPlatformEvent, 10) contlcycleChan := make(chan senderContainerLifecycleEvent, 10) - testCheckSender := newCheckSender(checkID1, "", itemChan, serviceCheckChan, eventChan, orchestratorChan, orchestratorManifestChan, eventPlatformChan, contlcycleChan) + contimageChan := make(chan senderContainerImage, 10) + sbomChan := make(chan senderSBOM, 10) + testCheckSender := newCheckSender(checkID1, "", itemChan, serviceCheckChan, eventChan, orchestratorChan, orchestratorManifestChan, eventPlatformChan, contlcycleChan, contimageChan, sbomChan) err := demux.SetSender(testCheckSender, checkID1) assert.Nil(t, err) diff --git a/pkg/aggregator/time_sampler.go b/pkg/aggregator/time_sampler.go index 61eaa78944ccf..a1bf20f875a90 100644 --- a/pkg/aggregator/time_sampler.go +++ b/pkg/aggregator/time_sampler.go @@ -6,6 +6,8 @@ package aggregator import ( + "fmt" + "github.com/DataDog/datadog-agent/pkg/aggregator/ckey" "github.com/DataDog/datadog-agent/pkg/aggregator/internal/tags" "github.com/DataDog/datadog-agent/pkg/config" @@ -35,10 +37,12 @@ type TimeSampler struct { // id is a number to differentiate multiple time samplers // since we start running more than one with the demultiplexer introduction id TimeSamplerID + + hostname string } // NewTimeSampler returns a newly initialized TimeSampler -func NewTimeSampler(id TimeSamplerID, interval int64, cache *tags.Store) *TimeSampler { +func NewTimeSampler(id TimeSamplerID, interval int64, cache *tags.Store, hostname string) *TimeSampler { if interval == 0 { interval = bucketSize } @@ -52,6 +56,7 @@ func NewTimeSampler(id TimeSamplerID, interval int64, cache *tags.Store) *TimeSa counterLastSampledByContext: map[ckey.ContextKey]float64{}, sketchMap: make(sketchMap), id: id, + hostname: hostname, } return s @@ -229,6 +234,10 @@ func (s *TimeSampler) flush(timestamp float64, series metrics.SerieSink, sketche aggregatorDogstatsdContextsByMtype[i].Set(int64(count)) tlmDogstatsdContextsByMtype.Set(float64(count), mtype) } + + if config.Datadog.GetBool("telemetry.enabled") && config.Datadog.GetBool("telemetry.dogstatsd_origin") { + s.sendOriginTelemetry(timestamp, series) + } } // flushContextMetrics flushes the contextMetrics inside contextMetricsFlusher, handles its errors, @@ -275,3 +284,14 @@ func (s *TimeSampler) countersSampleZeroValue(timestamp int64, contextMetrics me } } } + +func (s *TimeSampler) sendOriginTelemetry(timestamp float64, series metrics.SerieSink) { + // If multiple samplers are used, this avoids the need to + // aggregate the stats agent-side, and allows us to see amount of + // tags duplication between shards. + tags := []string{ + fmt.Sprintf("sampler_id:%d", s.id), + } + + s.contextResolver.sendOriginTelemetry(timestamp, series, s.hostname, tags) +} diff --git a/pkg/aggregator/time_sampler_test.go b/pkg/aggregator/time_sampler_test.go index 5b63900aa0273..9d7f2cb20a3d0 100644 --- a/pkg/aggregator/time_sampler_test.go +++ b/pkg/aggregator/time_sampler_test.go @@ -33,7 +33,7 @@ func generateSerieContextKey(serie *metrics.Serie) ckey.ContextKey { } func testTimeSampler() *TimeSampler { - sampler := NewTimeSampler(TimeSamplerID(0), 10, tags.NewStore(false, "test")) + sampler := NewTimeSampler(TimeSamplerID(0), 10, tags.NewStore(false, "test"), "host") return sampler } diff --git a/pkg/aggregator/time_sampler_worker.go b/pkg/aggregator/time_sampler_worker.go index 0c20971464408..6b3b57e17154d 100644 --- a/pkg/aggregator/time_sampler_worker.go +++ b/pkg/aggregator/time_sampler_worker.go @@ -13,9 +13,9 @@ import ( ) // The timeSamplerWorker runs the process loop for a TimeSampler: -// - receiving samples for the TimeSampler to process -// - receiving flush triggers to flush the series from the TimeSampler -// into a serializer +// - receiving samples for the TimeSampler to process +// - receiving flush triggers to flush the series from the TimeSampler +// into a serializer type timeSamplerWorker struct { // parent sampler the timeSamplerWorker is responsible of sampler *TimeSampler diff --git a/pkg/autodiscovery/common/utils/prometheus_apiserver.go b/pkg/autodiscovery/common/utils/prometheus_apiserver.go index ce50ecfa6388b..a3cbc0c1aa039 100644 --- a/pkg/autodiscovery/common/utils/prometheus_apiserver.go +++ b/pkg/autodiscovery/common/utils/prometheus_apiserver.go @@ -34,6 +34,13 @@ func ConfigsForService(pc *types.PrometheusCheck, svc *v1.Service) []integration return configs } + // Ignore headless services because we can't resolve the IP. + // Ref: https://kubernetes.io/docs/concepts/services-networking/service/#headless-services + if svc.Spec.ClusterIP == "None" { + log.Debugf("ignoring Prometheus-annotated headless service: %s", namespacedName) + return configs + } + instances, found := buildInstances(pc, svc.GetAnnotations(), namespacedName) if found { serviceID := apiserver.EntityForService(svc) diff --git a/pkg/autodiscovery/common/utils/prometheus_apiserver_test.go b/pkg/autodiscovery/common/utils/prometheus_apiserver_test.go index 0ef1dc1da87c4..c3924f1525802 100644 --- a/pkg/autodiscovery/common/utils/prometheus_apiserver_test.go +++ b/pkg/autodiscovery/common/utils/prometheus_apiserver_test.go @@ -201,6 +201,23 @@ func TestConfigsForService(t *testing.T) { }, }, }, + { + name: "headless service is ignored", + check: types.DefaultPrometheusCheck, + version: 1, + svc: &corev1.Service{ + ObjectMeta: metav1.ObjectMeta{ + UID: k8stypes.UID("foo-uid"), + Name: "svc-foo", + Annotations: map[string]string{"prometheus.io/scrape": "true"}, + Namespace: "ns", + }, + Spec: corev1.ServiceSpec{ + ClusterIP: "None", + }, + }, + want: nil, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/pkg/autodiscovery/listeners/container.go b/pkg/autodiscovery/listeners/container.go index 9aca9e2d3caf7..cc7fdc502d20b 100644 --- a/pkg/autodiscovery/listeners/container.go +++ b/pkg/autodiscovery/listeners/container.go @@ -189,7 +189,7 @@ func computeContainerServiceIDs(entity string, image string, labels map[string]s ids := []string{entity} // Add Image names (long then short if different) - long, short, _, err := containers.SplitImageName(image) + long, _, short, _, err := containers.SplitImageName(image) if err != nil { log.Warnf("error while spliting image name: %s", err) } diff --git a/pkg/autodiscovery/secrets.go b/pkg/autodiscovery/secrets.go index 5b95e3ca41d37..744ef7d595134 100644 --- a/pkg/autodiscovery/secrets.go +++ b/pkg/autodiscovery/secrets.go @@ -32,12 +32,16 @@ func decryptConfig(conf integration.Config) (integration.Config, error) { } // instances - for idx := range conf.Instances { - conf.Instances[idx], err = secretsDecrypt(conf.Instances[idx], conf.Name) + // we cannot update in place as, being a slice, it would modify the input config as well + instances := make([]integration.Data, 0, len(conf.Instances)) + for _, inputInstance := range conf.Instances { + decryptedInstance, err := secretsDecrypt(inputInstance, conf.Name) if err != nil { return conf, fmt.Errorf("error while decrypting secrets in an instance: %s", err) } + instances = append(instances, decryptedInstance) } + conf.Instances = instances // metrics conf.MetricConfig, err = secretsDecrypt(conf.MetricConfig, conf.Name) diff --git a/pkg/autodiscovery/secrets_test.go b/pkg/autodiscovery/secrets_test.go index 6ffb5c9cf1405..1f6797f9b4c8a 100644 --- a/pkg/autodiscovery/secrets_test.go +++ b/pkg/autodiscovery/secrets_test.go @@ -67,7 +67,6 @@ func (m *MockSecretDecrypt) install() func() { originalSecretsDecrypt := secretsDecrypt secretsDecrypt = m.getDecryptFunc() return func() { secretsDecrypt = originalSecretsDecrypt } - } var sharedTpl = integration.Config{ @@ -114,9 +113,11 @@ func TestSecretDecrypt(t *testing.T) { mockDecrypt := MockSecretDecrypt{t, makeSharedScenarios()} defer mockDecrypt.install()() - _, err := decryptConfig(sharedTpl) + newConfig, err := decryptConfig(sharedTpl) require.NoError(t, err) + assert.NotEqual(t, newConfig.Instances, sharedTpl.Instances) + assert.True(t, mockDecrypt.haveAllScenariosBeenCalled()) } diff --git a/pkg/cli/standalone/doc.go b/pkg/cli/standalone/doc.go index 6e853fe32f506..7d182546f1691 100644 --- a/pkg/cli/standalone/doc.go +++ b/pkg/cli/standalone/doc.go @@ -4,7 +4,6 @@ // Copyright 2016-present Datadog, Inc. /* - Package standalone provides utility functions for Agent CLI commands that set up a new in-process Agent runtime (ex: check, jmx commands), as opposed to CLI commands that query a running Agent's IPC API. diff --git a/pkg/cli/subcommands/check/command.go b/pkg/cli/subcommands/check/command.go index ecdae2924c40d..a0471516df526 100644 --- a/pkg/cli/subcommands/check/command.go +++ b/pkg/cli/subcommands/check/command.go @@ -28,6 +28,7 @@ import ( "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/comp/core/config" "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/comp/core/sysprobeconfig" "github.com/DataDog/datadog-agent/pkg/aggregator" "github.com/DataDog/datadog-agent/pkg/autodiscovery" "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" @@ -57,6 +58,7 @@ type cliParams struct { checkPause int checkName string checkDelay int + instanceFilter string logLevel string formatJSON bool formatTable bool @@ -81,9 +83,10 @@ type cliParams struct { } type GlobalParams struct { - ConfFilePath string - ConfigName string - LoggerName string + ConfFilePath string + SysProbeConfFilePath string + ConfigName string + LoggerName string } // MakeCommand returns a `check` command to be used by agent binaries. @@ -106,8 +109,9 @@ func MakeCommand(globalParamsGetter func() GlobalParams) *cobra.Command { return fxutil.OneShot(run, fx.Supply(cliParams), fx.Supply(core.BundleParams{ - ConfigParams: config.NewAgentParamsWithSecrets(globalParams.ConfFilePath, config.WithConfigName(globalParams.ConfigName)), - LogParams: log.LogForOneShot(globalParams.LoggerName, "off", true)}), + ConfigParams: config.NewAgentParamsWithSecrets(globalParams.ConfFilePath, config.WithConfigName(globalParams.ConfigName)), + SysprobeConfigParams: sysprobeconfig.NewParams(sysprobeconfig.WithSysProbeConfFilePath(globalParams.SysProbeConfFilePath)), + LogParams: log.LogForOneShot(globalParams.LoggerName, "off", true)}), core.Bundle, ) }, @@ -118,6 +122,7 @@ func MakeCommand(globalParamsGetter func() GlobalParams) *cobra.Command { cmd.Flags().IntVar(&cliParams.checkPause, "pause", 0, "pause between multiple runs of the check, in milliseconds") cmd.Flags().StringVarP(&cliParams.logLevel, "log-level", "l", "", "set the log level (default 'off') (deprecated, use the env var DD_LOG_LEVEL instead)") cmd.Flags().IntVarP(&cliParams.checkDelay, "delay", "d", 100, "delay between running the check and grabbing the metrics in milliseconds") + cmd.Flags().StringVarP(&cliParams.instanceFilter, "instance-filter", "", "", "filter instances using jq style syntax, example: --instance-filter '.ip_address == \"127.0.0.51\"'") cmd.Flags().BoolVarP(&cliParams.formatJSON, "json", "", false, "format aggregator and check runner output as json") cmd.Flags().BoolVarP(&cliParams.formatTable, "table", "", false, "format aggregator and check runner output as an ascii table") cmd.Flags().StringVarP(&cliParams.breakPoint, "breakpoint", "b", "", "set a breakpoint at a particular line number (Python checks only)") @@ -148,12 +153,15 @@ func MakeCommand(globalParamsGetter func() GlobalParams) *cobra.Command { return cmd } -func run(log log.Component, config config.Component, cliParams *cliParams) error { +func run(log log.Component, config config.Component, sysprobeconfig sysprobeconfig.Component, cliParams *cliParams) error { previousIntegrationTracing := false previousIntegrationTracingExhaustive := false if cliParams.generateIntegrationTraces { if pkgconfig.Datadog.IsSet("integration_tracing") { previousIntegrationTracing = pkgconfig.Datadog.GetBool("integration_tracing") + + } + if pkgconfig.Datadog.IsSet("integration_tracing_exhaustive") { previousIntegrationTracingExhaustive = pkgconfig.Datadog.GetBool("integration_tracing_exhaustive") } pkgconfig.Datadog.Set("integration_tracing", true) @@ -167,6 +175,10 @@ func run(log log.Component, config config.Component, cliParams *cliParams) error return nil } + // Always disable SBOM collection in `check` command to avoid BoltDB flock issue + // and consuming CPU & Memory for asynchronous scans that would not be shown in `agent check` output. + pkgconfig.Datadog.Set("container_image_collection.sbom.enabled", "false") + hostnameDetected, err := hostname.Get(context.TODO()) if err != nil { fmt.Printf("Cannot get hostname, exiting: %v\n", err) @@ -190,8 +202,12 @@ func run(log log.Component, config config.Component, cliParams *cliParams) error waitCtx, cancelTimeout := context.WithTimeout( context.Background(), time.Duration(cliParams.discoveryTimeout)*time.Second) - allConfigs := common.WaitForConfigsFromAD(waitCtx, []string{cliParams.checkName}, int(cliParams.discoveryMinInstances)) + + allConfigs, err := common.WaitForConfigsFromAD(waitCtx, []string{cliParams.checkName}, int(cliParams.discoveryMinInstances), cliParams.instanceFilter) cancelTimeout() + if err != nil { + return err + } // make sure the checks in cs are not JMX checks for idx := range allConfigs { diff --git a/pkg/cli/subcommands/clusterchecks/command.go b/pkg/cli/subcommands/clusterchecks/command.go new file mode 100644 index 0000000000000..109e55e342e5f --- /dev/null +++ b/pkg/cli/subcommands/clusterchecks/command.go @@ -0,0 +1,135 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package clusterchecks builds a 'clusterchecks' command to be used in binaries. +package clusterchecks + +import ( + "bytes" + "encoding/json" + "fmt" + + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/pkg/api/util" + "github.com/DataDog/datadog-agent/pkg/clusteragent/clusterchecks/types" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/flare" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/fatih/color" + "github.com/spf13/cobra" + "go.uber.org/fx" +) + +const ( + loggerName = "CLUSTER" + defaultLogLevel = "off" +) + +type GlobalParams struct { + ConfFilePath string +} + +type cliParams struct { + checkName string +} + +// MakeCommand returns a `clusterchecks` command to be used by cluster-agent +// binaries. +func MakeCommand(globalParamsGetter func() GlobalParams) *cobra.Command { + cliParams := &cliParams{} + + cmd := &cobra.Command{ + Use: "clusterchecks", + Short: "Prints the active cluster check configurations", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + globalParams := globalParamsGetter() + + return fxutil.OneShot(run, + fx.Supply(cliParams), + fx.Supply(bundleParams(globalParams)), + core.Bundle, + ) + }, + } + + cmd.Flags().StringVarP(&cliParams.checkName, "check", "", "", "the check name to filter for") + + rebalanceCmd := &cobra.Command{ + Use: "rebalance", + Short: "Rebalances cluster checks", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + globalParams := globalParamsGetter() + + return fxutil.OneShot(rebalance, + fx.Supply(bundleParams(globalParams)), + core.Bundle, + ) + }, + } + + cmd.AddCommand(rebalanceCmd) + + return cmd +} + +func bundleParams(globalParams GlobalParams) core.BundleParams { + return core.BundleParams{ + ConfigParams: config.NewClusterAgentParams(globalParams.ConfFilePath, config.WithConfigLoadSecrets(true)), + LogParams: log.LogForOneShot(loggerName, defaultLogLevel, true), + } +} + +func run(log log.Component, config config.Component, cliParams *cliParams) error { + if err := flare.GetClusterChecks(color.Output, cliParams.checkName); err != nil { + return err + } + + return flare.GetEndpointsChecks(color.Output, cliParams.checkName) +} + +func rebalance(log log.Component, config config.Component) error { + fmt.Println("Requesting a cluster check rebalance...") + c := util.GetClient(false) // FIX: get certificates right then make this true + urlstr := fmt.Sprintf("https://localhost:%v/api/v1/clusterchecks/rebalance", pkgconfig.Datadog.GetInt("cluster_agent.cmd_port")) + + // Set session token + err := util.SetAuthToken() + if err != nil { + return err + } + + r, err := util.DoPost(c, urlstr, "application/json", bytes.NewBuffer([]byte{})) + if err != nil { + var errMap = make(map[string]string) + json.Unmarshal(r, &errMap) //nolint:errcheck + // If the error has been marshalled into a json object, check it and return it properly + if e, found := errMap["error"]; found { + err = fmt.Errorf(e) + } + + fmt.Printf(` + Could not reach agent: %v + Make sure the agent is running before requesting the cluster checks rebalancing. + Contact support if you continue having issues.`, err) + + return err + } + + checksMoved := make([]types.RebalanceResponse, 0) + json.Unmarshal(r, &checksMoved) //nolint:errcheck + + fmt.Printf("%d cluster checks rebalanced successfully\n", len(checksMoved)) + + for _, check := range checksMoved { + fmt.Printf("Check %s with weight %d moved from node %s to %s. source diff: %d, dest diff: %d\n", + check.CheckID, check.CheckWeight, check.SourceNodeName, check.DestNodeName, check.SourceDiff, check.DestDiff) + } + + return nil +} diff --git a/pkg/cli/subcommands/clusterchecks/command_test.go b/pkg/cli/subcommands/clusterchecks/command_test.go new file mode 100644 index 0000000000000..ac2ecfccaef2f --- /dev/null +++ b/pkg/cli/subcommands/clusterchecks/command_test.go @@ -0,0 +1,44 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +package clusterchecks + +import ( + "testing" + + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/spf13/cobra" +) + +func TestCommand(t *testing.T) { + commands := []*cobra.Command{ + MakeCommand(func() GlobalParams { + return GlobalParams{} + }), + } + + fxutil.TestOneShotSubcommand(t, + commands, + []string{"clusterchecks"}, + run, + func() {}) +} + +func TestRebalance(t *testing.T) { + commands := []*cobra.Command{ + MakeCommand(func() GlobalParams { + return GlobalParams{} + }), + } + + fxutil.TestOneShotSubcommand(t, + commands, + []string{"clusterchecks", "rebalance"}, + rebalance, + func() {}) +} diff --git a/pkg/cli/subcommands/dcaconfigcheck/command.go b/pkg/cli/subcommands/dcaconfigcheck/command.go new file mode 100644 index 0000000000000..d08decd206f5c --- /dev/null +++ b/pkg/cli/subcommands/dcaconfigcheck/command.go @@ -0,0 +1,58 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package dcaconfigcheck builds a 'configcheck' command to be used in binaries. +package dcaconfigcheck + +import ( + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/pkg/flare" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/fatih/color" + "github.com/spf13/cobra" + "go.uber.org/fx" +) + +type GlobalParams struct { + ConfFilePath string +} + +type cliParams struct { + verbose bool +} + +// MakeCommand returns a `configcheck` command to be used by cluster-agent +// binaries. +func MakeCommand(globalParamsGetter func() GlobalParams) *cobra.Command { + cliParams := &cliParams{} + cmd := &cobra.Command{ + Use: "configcheck", + Aliases: []string{"checkconfig"}, + Short: "Print all configurations loaded & resolved of a running cluster agent", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + globalParams := globalParamsGetter() + + return fxutil.OneShot(run, + fx.Supply(cliParams), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewClusterAgentParams(globalParams.ConfFilePath), + LogParams: log.LogForOneShot("CLUSTER", "off", true), + }), + core.Bundle, + ) + }, + } + + cmd.Flags().BoolVarP(&cliParams.verbose, "verbose", "v", false, "print additional debug info") + + return cmd +} + +func run(log log.Component, config config.Component, cliParams *cliParams) error { + return flare.GetClusterAgentConfigCheck(color.Output, cliParams.verbose) +} diff --git a/pkg/cli/subcommands/dcaconfigcheck/command_test.go b/pkg/cli/subcommands/dcaconfigcheck/command_test.go new file mode 100644 index 0000000000000..c7136be5a09c6 --- /dev/null +++ b/pkg/cli/subcommands/dcaconfigcheck/command_test.go @@ -0,0 +1,30 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows && kubeapiserver +// +build !windows,kubeapiserver + +package dcaconfigcheck + +import ( + "testing" + + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/spf13/cobra" +) + +func TestCommand(t *testing.T) { + commands := []*cobra.Command{ + MakeCommand(func() GlobalParams { + return GlobalParams{} + }), + } + + fxutil.TestOneShotSubcommand(t, + commands, + []string{"configcheck"}, + run, + func() {}) +} diff --git a/pkg/cli/subcommands/taggerlist/command.go b/pkg/cli/subcommands/taggerlist/command.go new file mode 100644 index 0000000000000..98fd9b3897466 --- /dev/null +++ b/pkg/cli/subcommands/taggerlist/command.go @@ -0,0 +1,93 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package taggerlist implements 'agent tagger-list'. +package taggerlist + +import ( + "fmt" + + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/pkg/api/util" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" + tagger_api "github.com/DataDog/datadog-agent/pkg/tagger/api" + "github.com/DataDog/datadog-agent/pkg/util/flavor" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + + "github.com/fatih/color" + "github.com/spf13/cobra" +) + +// cliParams are the command-line arguments for this subcommand +type cliParams struct { + GlobalParams +} + +type GlobalParams struct { + ConfFilePath string + ConfigName string + LoggerName string +} + +// MakeCommand returns a `tagger-list` command to be used by agent binaries. +func MakeCommand(globalParamsGetter func() GlobalParams) *cobra.Command { + cliParams := &cliParams{} + + return &cobra.Command{ + Use: "tagger-list", + Short: "Print the tagger content of a running agent", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + globalParams := globalParamsGetter() + + cliParams.GlobalParams = globalParams + + return fxutil.OneShot(taggerList, + fx.Supply(cliParams), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets( + globalParams.ConfFilePath, + config.WithConfigName(globalParams.ConfigName), + ), + LogParams: log.LogForOneShot(globalParams.LoggerName, "off", true)}), + core.Bundle, + ) + }, + } +} + +func taggerList(log log.Component, config config.Component, cliParams *cliParams) error { + // Set session token + if err := util.SetAuthToken(); err != nil { + return err + } + + url, err := getTaggerURL(config) + if err != nil { + return err + } + + return tagger_api.GetTaggerList(color.Output, url) +} + +func getTaggerURL(config config.Component) (string, error) { + ipcAddress, err := pkgconfig.GetIPCAddress() + if err != nil { + return "", err + } + + var urlstr string + if flavor.GetFlavor() == flavor.ClusterAgent { + urlstr = fmt.Sprintf("https://%v:%v/tagger-list", ipcAddress, pkgconfig.Datadog.GetInt("cluster_agent.cmd_port")) + } else { + urlstr = fmt.Sprintf("https://%v:%v/agent/tagger-list", ipcAddress, pkgconfig.Datadog.GetInt("cmd_port")) + } + + return urlstr, nil +} diff --git a/cmd/agent/subcommands/taggerlist/command_test.go b/pkg/cli/subcommands/taggerlist/command_test.go similarity index 82% rename from cmd/agent/subcommands/taggerlist/command_test.go rename to pkg/cli/subcommands/taggerlist/command_test.go index 47a8258379e89..510c78f06a4bc 100644 --- a/cmd/agent/subcommands/taggerlist/command_test.go +++ b/pkg/cli/subcommands/taggerlist/command_test.go @@ -8,16 +8,22 @@ package taggerlist import ( "testing" + "github.com/spf13/cobra" "github.com/stretchr/testify/require" - "github.com/DataDog/datadog-agent/cmd/agent/command" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/pkg/util/fxutil" ) func TestCommand(t *testing.T) { + commands := []*cobra.Command{ + MakeCommand(func() GlobalParams { + return GlobalParams{} + }), + } + fxutil.TestOneShotSubcommand(t, - Commands(&command.GlobalParams{}), + commands, []string{"tagger-list"}, taggerList, func(cliParams *cliParams, coreParams core.BundleParams) { diff --git a/pkg/cli/subcommands/workloadlist/command.go b/pkg/cli/subcommands/workloadlist/command.go new file mode 100644 index 0000000000000..ff9dd4a651fda --- /dev/null +++ b/pkg/cli/subcommands/workloadlist/command.go @@ -0,0 +1,124 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Package workloadlist implements 'agent workload-list'. +package workloadlist + +import ( + "encoding/json" + "fmt" + + "go.uber.org/fx" + + "github.com/DataDog/datadog-agent/comp/core" + "github.com/DataDog/datadog-agent/comp/core/config" + "github.com/DataDog/datadog-agent/comp/core/log" + "github.com/DataDog/datadog-agent/pkg/api/util" + pkgconfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/util/flavor" + "github.com/DataDog/datadog-agent/pkg/util/fxutil" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" + + "github.com/fatih/color" + "github.com/spf13/cobra" +) + +// cliParams are the command-line arguments for this subcommand +type cliParams struct { + GlobalParams + + verboseList bool +} + +type GlobalParams struct { + ConfFilePath string + ConfigName string + LoggerName string +} + +// MakeCommand returns a `workload-list` command to be used by agent binaries. +func MakeCommand(globalParamsGetter func() GlobalParams) *cobra.Command { + cliParams := &cliParams{} + + workloadListCommand := &cobra.Command{ + Use: "workload-list", + Short: "Print the workload content of a running agent", + Long: ``, + RunE: func(cmd *cobra.Command, args []string) error { + globalParams := globalParamsGetter() + + cliParams.GlobalParams = globalParams + + return fxutil.OneShot(workloadList, + fx.Supply(cliParams), + fx.Supply(core.BundleParams{ + ConfigParams: config.NewAgentParamsWithoutSecrets( + globalParams.ConfFilePath, + config.WithConfigName(globalParams.ConfigName), + ), + LogParams: log.LogForOneShot(globalParams.LoggerName, "off", true)}), + core.Bundle, + ) + }, + } + + workloadListCommand.Flags().BoolVarP(&cliParams.verboseList, "verbose", "v", false, "print out a full dump of the workload store") + + return workloadListCommand +} + +func workloadList(log log.Component, config config.Component, cliParams *cliParams) error { + c := util.GetClient(false) // FIX: get certificates right then make this true + + // Set session token + err := util.SetAuthToken() + if err != nil { + return err + } + + url, err := workloadURL(cliParams.verboseList) + if err != nil { + return err + } + + r, err := util.DoGet(c, url, util.LeaveConnectionOpen) + if err != nil { + if r != nil && string(r) != "" { + fmt.Fprintf(color.Output, "The agent ran into an error while getting the workload store information: %s\n", string(r)) + } else { + fmt.Fprintf(color.Output, "Failed to query the agent (running?): %s\n", err) + } + } + + workload := workloadmeta.WorkloadDumpResponse{} + err = json.Unmarshal(r, &workload) + if err != nil { + return err + } + + workload.Write(color.Output) + + return nil +} + +func workloadURL(verbose bool) (string, error) { + ipcAddress, err := pkgconfig.GetIPCAddress() + if err != nil { + return "", err + } + + var prefix string + if flavor.GetFlavor() == flavor.ClusterAgent { + prefix = fmt.Sprintf("https://%v:%v/workload-list", ipcAddress, pkgconfig.Datadog.GetInt("cluster_agent.cmd_port")) + } else { + prefix = fmt.Sprintf("https://%v:%v/agent/workload-list", ipcAddress, pkgconfig.Datadog.GetInt("cmd_port")) + } + + if verbose { + return prefix + "?verbose=true", nil + } + + return prefix, nil +} diff --git a/cmd/agent/subcommands/workloadlist/command_test.go b/pkg/cli/subcommands/workloadlist/command_test.go similarity index 83% rename from cmd/agent/subcommands/workloadlist/command_test.go rename to pkg/cli/subcommands/workloadlist/command_test.go index 3671c5e6e2a3d..0e51845c4a9d1 100644 --- a/cmd/agent/subcommands/workloadlist/command_test.go +++ b/pkg/cli/subcommands/workloadlist/command_test.go @@ -8,16 +8,22 @@ package workloadlist import ( "testing" + "github.com/spf13/cobra" "github.com/stretchr/testify/require" - "github.com/DataDog/datadog-agent/cmd/agent/command" "github.com/DataDog/datadog-agent/comp/core" "github.com/DataDog/datadog-agent/pkg/util/fxutil" ) func TestCommand(t *testing.T) { + commands := []*cobra.Command{ + MakeCommand(func() GlobalParams { + return GlobalParams{} + }), + } + fxutil.TestOneShotSubcommand(t, - Commands(&command.GlobalParams{}), + commands, []string{"workload-list", "-v"}, workloadList, func(cliParams *cliParams, coreParams core.BundleParams) { diff --git a/pkg/clusteragent/admission/common/const.go b/pkg/clusteragent/admission/common/const.go index 4e6e8727da7c9..cd52814ecf825 100644 --- a/pkg/clusteragent/admission/common/const.go +++ b/pkg/clusteragent/admission/common/const.go @@ -20,4 +20,10 @@ const ( // LibConfigV1AnnotKeyFormat is the format of the library config annotation LibConfigV1AnnotKeyFormat = "admission.datadoghq.com/%s-lib.config.v1" + + // RcIDAnnotKey is the key of the RC ID annotation + RcIDAnnotKey = "admission.datadoghq.com/rc.id" + + // RcRevisionAnnotKey is the key of the RC revision annotation + RcRevisionAnnotKey = "admission.datadoghq.com/rc.rev" ) diff --git a/pkg/clusteragent/admission/common/lib_config.go b/pkg/clusteragent/admission/common/lib_config.go index bf1f56f0aaed3..c91bec5d415b8 100644 --- a/pkg/clusteragent/admission/common/lib_config.go +++ b/pkg/clusteragent/admission/common/lib_config.go @@ -17,21 +17,59 @@ import ( // LibConfig holds the APM library configuration type LibConfig struct { - Version int `yaml:"version,omitempty" json:"version,omitempty"` // config schema version, not config version - ServiceLanguage string `yaml:"service_language,omitempty" json:"service_language,omitempty"` + Language string `yaml:"library_language" json:"library_language"` + Version string `yaml:"library_version" json:"library_version"` - Tracing *bool `yaml:"tracing_enabled,omitempty" json:"tracing_enabled,omitempty"` - LogInjection *bool `yaml:"log_injection_enabled,omitempty" json:"log_injection_enabled,omitempty"` - HealthMetrics *bool `yaml:"health_metrics_enabled,omitempty" json:"health_metrics_enabled,omitempty"` - RuntimeMetrics *bool `yaml:"runtime_metrics_enabled,omitempty" json:"runtime_metrics_enabled,omitempty"` - TracingSamplingRate *float64 `yaml:"tracing_sampling_rate,omitempty" json:"tracing_sampling_rate,omitempty"` - TracingRateLimit *int `yaml:"tracing_rate_limit,omitempty" json:"tracing_rate_limit,omitempty"` - TracingTags []string `yaml:"tracing_tags,omitempty" json:"tracing_tags,omitempty"` + ServiceName *string `yaml:"service_name,omitempty" json:"service_name,omitempty"` + Env *string `yaml:"env,omitempty" json:"env,omitempty"` + + Tracing *bool `yaml:"tracing_enabled,omitempty" json:"tracing_enabled,omitempty"` + LogInjection *bool `yaml:"log_injection_enabled,omitempty" json:"log_injection_enabled,omitempty"` + HealthMetrics *bool `yaml:"health_metrics_enabled,omitempty" json:"health_metrics_enabled,omitempty"` + RuntimeMetrics *bool `yaml:"runtime_metrics_enabled,omitempty" json:"runtime_metrics_enabled,omitempty"` + + TracingSamplingRate *float64 `yaml:"tracing_sampling_rate" json:"tracing_sampling_rate,omitempty"` + TracingRateLimit *int `yaml:"tracing_rate_limit" json:"tracing_rate_limit,omitempty"` + TracingTags []string `yaml:"tracing_tags" json:"tracing_tags,omitempty"` + + TracingServiceMapping []TracingServiceMapEntry `yaml:"tracing_service_mapping" json:"tracing_service_mapping,omitempty"` + TracingAgentTimeout *int `yaml:"tracing_agent_timeout" json:"tracing_agent_timeout,omitempty"` + TracingHeaderTags []TracingHeaderTagEntry `yaml:"tracing_header_tags" json:"tracing_header_tags,omitempty"` + TracingPartialFlushMinSpans *int `yaml:"tracing_partial_flush_min_spans" json:"tracing_partial_flush_min_spans,omitempty"` + TracingDebug *bool `yaml:"tracing_debug" json:"tracing_debug,omitempty"` + TracingLogLevel *string `yaml:"tracing_log_level" json:"tracing_log_level,omitempty"` + TracingMethods []string `yaml:"tracing_methods" json:"tracing_methods,omitempty"` + TracingPropagationStyleInject []string `yaml:"tracing_propagation_style_inject" json:"tracing_propagation_style_inject,omitempty"` + TracingPropagationStyleExtract []string `yaml:"tracing_propagation_style_extract" json:"tracing_propagation_style_extract,omitempty"` +} + +// TracingServiceMapEntry holds service mapping config +type TracingServiceMapEntry struct { + FromKey string `yaml:"from_key" json:"from_key"` + ToName string `yaml:"to_name" json:"to_name"` +} + +// TracingHeaderTagEntry holds header tags config +type TracingHeaderTagEntry struct { + Header string `yaml:"header" json:"header"` + TagName string `yaml:"tag_name" json:"tag_name"` } // ToEnvs converts the config fields into environment variables func (lc LibConfig) ToEnvs() []corev1.EnvVar { var envs []corev1.EnvVar + if lc.ServiceName != nil { + envs = append(envs, corev1.EnvVar{ + Name: "DD_SERVICE", + Value: *lc.ServiceName, + }) + } + if lc.Env != nil { + envs = append(envs, corev1.EnvVar{ + Name: "DD_ENV", + Value: *lc.Env, + }) + } if val, defined := checkFormatVal(lc.Tracing); defined { envs = append(envs, corev1.EnvVar{ Name: "DD_TRACE_ENABLED", @@ -74,6 +112,68 @@ func (lc LibConfig) ToEnvs() []corev1.EnvVar { Value: strings.Join(lc.TracingTags, ","), }) } + if lc.TracingServiceMapping != nil { + pairs := make([]string, 0, len(lc.TracingServiceMapping)) + for _, m := range lc.TracingServiceMapping { + pairs = append(pairs, fmt.Sprintf("%s:%s", m.FromKey, m.ToName)) + } + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_SERVICE_MAPPING", + Value: strings.Join(pairs, ", "), + }) + } + if val, defined := checkFormatVal(lc.TracingAgentTimeout); defined { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_AGENT_TIMEOUT", + Value: val, + }) + } + if lc.TracingHeaderTags != nil { + pairs := make([]string, 0, len(lc.TracingHeaderTags)) + for _, m := range lc.TracingHeaderTags { + pairs = append(pairs, fmt.Sprintf("%s:%s", m.Header, m.TagName)) + } + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_HEADER_TAGS", + Value: strings.Join(pairs, ", "), + }) + } + if val, defined := checkFormatVal(lc.TracingPartialFlushMinSpans); defined { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_PARTIAL_FLUSH_MIN_SPANS", + Value: val, + }) + } + if val, defined := checkFormatVal(lc.TracingDebug); defined { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_DEBUG", + Value: val, + }) + } + if lc.TracingLogLevel != nil { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_LOG_LEVEL", + Value: *lc.TracingLogLevel, + }) + } + if lc.TracingMethods != nil { + envs = append(envs, corev1.EnvVar{ + Name: "DD_TRACE_METHODS", + Value: strings.Join(lc.TracingMethods, ";"), + }) + } + if lc.TracingPropagationStyleInject != nil { + envs = append(envs, corev1.EnvVar{ + Name: "DD_PROPAGATION_STYLE_INJECT", + Value: strings.Join(lc.TracingPropagationStyleInject, ","), + }) + } + if lc.TracingPropagationStyleExtract != nil { + envs = append(envs, corev1.EnvVar{ + Name: "DD_PROPAGATION_STYLE_EXTRACT", + Value: strings.Join(lc.TracingPropagationStyleExtract, ","), + }) + } return envs } diff --git a/pkg/clusteragent/admission/common/lib_config_test.go b/pkg/clusteragent/admission/common/lib_config_test.go new file mode 100644 index 0000000000000..53f46e1ffcf64 --- /dev/null +++ b/pkg/clusteragent/admission/common/lib_config_test.go @@ -0,0 +1,208 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package common + +import ( + "testing" + + "github.com/DataDog/datadog-agent/pkg/util/pointer" + "github.com/stretchr/testify/require" + corev1 "k8s.io/api/core/v1" +) + +func TestLibConfig_ToEnvs(t *testing.T) { + type fields struct { + ServiceName *string + Env *string + Tracing *bool + LogInjection *bool + HealthMetrics *bool + RuntimeMetrics *bool + TracingSamplingRate *float64 + TracingRateLimit *int + TracingTags []string + + TracingServiceMapping []TracingServiceMapEntry + TracingAgentTimeout *int + TracingHeaderTags []TracingHeaderTagEntry + TracingPartialFlushMinSpans *int + TracingDebug *bool + TracingLogLevel *string + TracingMethods []string + TracingPropagationStyleInject []string + TracingPropagationStyleExtract []string + } + tests := []struct { + name string + fields fields + want []corev1.EnvVar + }{ + { + name: "all", + fields: fields{ + ServiceName: pointer.Ptr("svc"), + Env: pointer.Ptr("dev"), + Tracing: pointer.Ptr(true), + LogInjection: pointer.Ptr(true), + HealthMetrics: pointer.Ptr(true), + RuntimeMetrics: pointer.Ptr(true), + TracingSamplingRate: pointer.Ptr(0.5), + TracingRateLimit: pointer.Ptr(50), + TracingTags: []string{"k1:v1", "k2:v2"}, + TracingServiceMapping: []TracingServiceMapEntry{{ + FromKey: "svc1", + ToName: "svc2", + }, { + FromKey: "svc3", + ToName: "svc4", + }, + }, + TracingAgentTimeout: pointer.Ptr(2), + TracingHeaderTags: []TracingHeaderTagEntry{ + { + Header: "X-Test-Header", + TagName: "x.test.header", + }, + { + Header: "X-Test-Other-Header", + TagName: "x.test.other.header", + }, + }, + TracingPartialFlushMinSpans: pointer.Ptr(100), + TracingDebug: pointer.Ptr(true), + TracingLogLevel: pointer.Ptr("DEBUG"), + TracingMethods: []string{"modA.method", "modB.method"}, + TracingPropagationStyleInject: []string{"Datadog", "B3", "W3C"}, + TracingPropagationStyleExtract: []string{"W3C", "B3", "Datadog"}, + }, + want: []corev1.EnvVar{ + { + Name: "DD_SERVICE", + Value: "svc", + }, + { + Name: "DD_ENV", + Value: "dev", + }, + { + Name: "DD_TRACE_ENABLED", + Value: "true", + }, + { + Name: "DD_LOGS_INJECTION", + Value: "true", + }, + { + Name: "DD_TRACE_HEALTH_METRICS_ENABLED", + Value: "true", + }, + { + Name: "DD_RUNTIME_METRICS_ENABLED", + Value: "true", + }, + { + Name: "DD_TRACE_SAMPLE_RATE", + Value: "0.50", + }, + { + Name: "DD_TRACE_RATE_LIMIT", + Value: "50", + }, + { + Name: "DD_TAGS", + Value: "k1:v1,k2:v2", + }, + { + Name: "DD_TRACE_SERVICE_MAPPING", + Value: "svc1:svc2, svc3:svc4", + }, + { + Name: "DD_TRACE_AGENT_TIMEOUT", + Value: "2", + }, + { + Name: "DD_TRACE_HEADER_TAGS", + Value: "X-Test-Header:x.test.header, X-Test-Other-Header:x.test.other.header", + }, + { + Name: "DD_TRACE_PARTIAL_FLUSH_MIN_SPANS", + Value: "100", + }, + { + Name: "DD_TRACE_DEBUG", + Value: "true", + }, + { + Name: "DD_TRACE_LOG_LEVEL", + Value: "DEBUG", + }, + { + Name: "DD_TRACE_METHODS", + Value: "modA.method;modB.method", + }, + { + Name: "DD_PROPAGATION_STYLE_INJECT", + Value: "Datadog,B3,W3C", + }, + { + Name: "DD_PROPAGATION_STYLE_EXTRACT", + Value: "W3C,B3,Datadog", + }, + }, + }, + { + name: "only service and env", + fields: fields{ + ServiceName: pointer.Ptr("svc"), + Env: pointer.Ptr("dev"), + }, + want: []corev1.EnvVar{ + { + Name: "DD_SERVICE", + Value: "svc", + }, + { + Name: "DD_ENV", + Value: "dev", + }, + }, + }, + { + name: "empty", + fields: fields{}, + want: nil, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + lc := LibConfig{ + ServiceName: tt.fields.ServiceName, + Env: tt.fields.Env, + Tracing: tt.fields.Tracing, + LogInjection: tt.fields.LogInjection, + HealthMetrics: tt.fields.HealthMetrics, + RuntimeMetrics: tt.fields.RuntimeMetrics, + TracingSamplingRate: tt.fields.TracingSamplingRate, + TracingRateLimit: tt.fields.TracingRateLimit, + TracingTags: tt.fields.TracingTags, + + TracingServiceMapping: tt.fields.TracingServiceMapping, + TracingAgentTimeout: tt.fields.TracingAgentTimeout, + TracingHeaderTags: tt.fields.TracingHeaderTags, + TracingPartialFlushMinSpans: tt.fields.TracingPartialFlushMinSpans, + TracingDebug: tt.fields.TracingDebug, + TracingLogLevel: tt.fields.TracingLogLevel, + TracingMethods: tt.fields.TracingMethods, + TracingPropagationStyleInject: tt.fields.TracingPropagationStyleInject, + TracingPropagationStyleExtract: tt.fields.TracingPropagationStyleExtract, + } + require.EqualValues(t, tt.want, lc.ToEnvs()) + }) + } +} diff --git a/pkg/clusteragent/admission/mutate/auto_instrumentation.go b/pkg/clusteragent/admission/mutate/auto_instrumentation.go index 1726b739b8110..08c8ffd39bff7 100644 --- a/pkg/clusteragent/admission/mutate/auto_instrumentation.go +++ b/pkg/clusteragent/admission/mutate/auto_instrumentation.go @@ -26,9 +26,8 @@ import ( const ( // Shared config - initContainerName = "datadog-lib-init" - volumeName = "datadog-auto-instrumentation" - mountPath = "/datadog-lib" + volumeName = "datadog-auto-instrumentation" + mountPath = "/datadog-lib" // Java config javaToolOptionsKey = "JAVA_TOOL_OPTIONS" @@ -49,11 +48,15 @@ const ( java language = "java" js language = "js" python language = "python" + + libVersionAnnotationKeyFormat = "admission.datadoghq.com/%s-lib.version" + customLibAnnotationKeyFormat = "admission.datadoghq.com/%s-lib.custom-image" + libVersionAnnotationKeyCtrFormat = "admission.datadoghq.com/%s.%s-lib.version" + customLibAnnotationKeyCtrFormat = "admission.datadoghq.com/%s.%s-lib.custom-image" ) var ( - customLibAnnotationKeyFormat = "admission.datadoghq.com/%s-lib.custom-image" - supportedLanguages = []language{java, js, python} + supportedLanguages = []language{java, js, python} ) // InjectAutoInstrumentation injects APM libraries into pods @@ -61,91 +64,143 @@ func InjectAutoInstrumentation(rawPod []byte, ns string, dc dynamic.Interface) ( return mutate(rawPod, ns, injectAutoInstrumentation, dc) } +func initContainerName(lang language) string { + return fmt.Sprintf("datadog-lib-%s-init", lang) +} + func injectAutoInstrumentation(pod *corev1.Pod, _ string, _ dynamic.Interface) error { if pod == nil { return errors.New("cannot inject lib into nil pod") } - if containsInitContainer(pod, initContainerName) { - // The admission can be reinvocated for the same pod - // Fast return if we injected the library already - log.Debugf("Init container %q already exists in pod %q", initContainerName, podString(pod)) - return nil + for _, lang := range supportedLanguages { + if containsInitContainer(pod, initContainerName(lang)) { + // The admission can be reinvocated for the same pod + // Fast return if we injected the library already + log.Debugf("Init container %q already exists in pod %q", initContainerName(lang), podString(pod)) + return nil + } } - language, image, shouldInject := extractLibInfo(pod, config.Datadog.GetString("admission_controller.auto_instrumentation.container_registry")) - if !shouldInject { + libsToInject := extractLibInfo(pod, config.Datadog.GetString("admission_controller.auto_instrumentation.container_registry")) + if len(libsToInject) == 0 { return nil } - return injectAutoInstruConfig(pod, language, image) + return injectAutoInstruConfig(pod, libsToInject) +} + +type libInfo struct { + ctrName string // empty means all containers + lang language + image string } // extractLibInfo returns the language, the image, // and a boolean indicating whether the library should be injected into the pod -func extractLibInfo(pod *corev1.Pod, containerRegistry string) (language, string, bool) { +func extractLibInfo(pod *corev1.Pod, containerRegistry string) []libInfo { + libInfoList := []libInfo{} podAnnotations := pod.GetAnnotations() for _, lang := range supportedLanguages { customLibAnnotation := strings.ToLower(fmt.Sprintf(customLibAnnotationKeyFormat, lang)) if image, found := podAnnotations[customLibAnnotation]; found { - return lang, image, true + libInfoList = append(libInfoList, libInfo{ + lang: lang, + image: image, + }) } - libVersionAnnotation := strings.ToLower(fmt.Sprintf(common.LibVersionAnnotKeyFormat, lang)) + libVersionAnnotation := strings.ToLower(fmt.Sprintf(libVersionAnnotationKeyFormat, lang)) if version, found := podAnnotations[libVersionAnnotation]; found { image := fmt.Sprintf("%s/dd-lib-%s-init:%s", containerRegistry, lang, version) - return lang, image, true + libInfoList = append(libInfoList, libInfo{ + lang: lang, + image: image, + }) + } + + for _, ctr := range pod.Spec.Containers { + customLibAnnotation := strings.ToLower(fmt.Sprintf(customLibAnnotationKeyCtrFormat, ctr.Name, lang)) + if image, found := podAnnotations[customLibAnnotation]; found { + libInfoList = append(libInfoList, libInfo{ + ctrName: ctr.Name, + lang: lang, + image: image, + }) + } + + libVersionAnnotation := strings.ToLower(fmt.Sprintf(libVersionAnnotationKeyCtrFormat, ctr.Name, lang)) + if version, found := podAnnotations[libVersionAnnotation]; found { + image := fmt.Sprintf("%s/dd-lib-%s-init:%s", containerRegistry, lang, version) + libInfoList = append(libInfoList, libInfo{ + ctrName: ctr.Name, + lang: lang, + image: image, + }) + } } + } - return "", "", false + return libInfoList } -func injectAutoInstruConfig(pod *corev1.Pod, lang language, image string) error { - injected := false - langStr := string(lang) - defer func() { - metrics.LibInjectionAttempts.Inc(langStr, strconv.FormatBool(injected)) - }() - - var langEnvKey string - var langEnvFunc envValFunc - switch lang { - case java: - langEnvKey = javaToolOptionsKey - langEnvFunc = javaEnvValFunc - case js: - langEnvKey = nodeOptionsKey - langEnvFunc = jsEnvValFunc - case python: - langEnvKey = pythonPathKey - langEnvFunc = pythonEnvValFunc - default: - metrics.LibInjectionErrors.Inc(langStr) - return fmt.Errorf("language %q is not supported. Supported languages are %v", lang, supportedLanguages) - } - injectLibInitContainer(pod, image) - err := injectLibRequirements(pod, langEnvKey, langEnvFunc) - if err != nil { - metrics.LibInjectionErrors.Inc(langStr) - return err +func injectAutoInstruConfig(pod *corev1.Pod, libsToInject []libInfo) error { + var lastError error + + initContainerToInject := make(map[language]string) + + for _, lib := range libsToInject { + injected := false + langStr := string(lib.lang) + defer func() { + metrics.LibInjectionAttempts.Inc(langStr, strconv.FormatBool(injected)) + }() + + var err error + switch lib.lang { + case java: + err = injectLibRequirements(pod, lib.ctrName, javaToolOptionsKey, javaEnvValFunc) + case js: + err = injectLibRequirements(pod, lib.ctrName, nodeOptionsKey, jsEnvValFunc) + case python: + err = injectLibRequirements(pod, lib.ctrName, pythonPathKey, pythonEnvValFunc) + default: + metrics.LibInjectionErrors.Inc(langStr) + lastError = fmt.Errorf("language %q is not supported. Supported languages are %v", lib.lang, supportedLanguages) + continue + } + + if err != nil { + metrics.LibInjectionErrors.Inc(langStr) + lastError = err + } + + initContainerToInject[lib.lang] = lib.image + + injected = true } - err = injectLibConfig(pod, lang) - if err != nil { - metrics.LibInjectionErrors.Inc(langStr) - return err + + for lang, image := range initContainerToInject { + injectLibInitContainer(pod, image, lang) + err := injectLibConfig(pod, lang) + if err != nil { + metrics.LibInjectionErrors.Inc(string(lang)) + lastError = err + } } + injectLibVolume(pod) - injected = true - return nil + return lastError } -func injectLibInitContainer(pod *corev1.Pod, image string) { - log.Debugf("Injecting init container named %q with image %q into pod %s", initContainerName, image, podString(pod)) +func injectLibInitContainer(pod *corev1.Pod, image string, lang language) { + initCtrName := initContainerName(lang) + log.Debugf("Injecting init container named %q with image %q into pod %s", initCtrName, image, podString(pod)) pod.Spec.InitContainers = append([]corev1.Container{ { - Name: initContainerName, + Name: initCtrName, Image: image, Command: []string{"sh", "copy-lib.sh", mountPath}, VolumeMounts: []corev1.VolumeMount{ @@ -159,8 +214,12 @@ func injectLibInitContainer(pod *corev1.Pod, image string) { } // injectLibRequirements injects the minimal config requirements to enable instrumentation -func injectLibRequirements(pod *corev1.Pod, envKey string, envVal envValFunc) error { +func injectLibRequirements(pod *corev1.Pod, ctrName string, envKey string, envVal envValFunc) error { for i, ctr := range pod.Spec.Containers { + if ctrName != "" && ctrName != ctr.Name { + continue + } + index := envIndex(ctr.Env, envKey) if index < 0 { pod.Spec.Containers[i].Env = append(pod.Spec.Containers[i].Env, corev1.EnvVar{ @@ -175,7 +234,16 @@ func injectLibRequirements(pod *corev1.Pod, envKey string, envVal envValFunc) er pod.Spec.Containers[i].Env[index].Value = envVal(pod.Spec.Containers[i].Env[index].Value) } - pod.Spec.Containers[i].VolumeMounts = append(pod.Spec.Containers[i].VolumeMounts, corev1.VolumeMount{Name: volumeName, MountPath: mountPath}) + volumeAlreadyMounted := false + for _, vol := range pod.Spec.Containers[i].VolumeMounts { + if vol.Name == volumeName { + volumeAlreadyMounted = true + break + } + } + if !volumeAlreadyMounted { + pod.Spec.Containers[i].VolumeMounts = append(pod.Spec.Containers[i].VolumeMounts, corev1.VolumeMount{Name: volumeName, MountPath: mountPath}) + } } return nil diff --git a/pkg/clusteragent/admission/mutate/auto_instrumentation_test.go b/pkg/clusteragent/admission/mutate/auto_instrumentation_test.go index 2cf3706e549c7..c3f3f71ff5a54 100644 --- a/pkg/clusteragent/admission/mutate/auto_instrumentation_test.go +++ b/pkg/clusteragent/admission/mutate/auto_instrumentation_test.go @@ -9,118 +9,159 @@ package mutate import ( + "fmt" "testing" "github.com/stretchr/testify/require" corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) func TestInjectAutoInstruConfig(t *testing.T) { tests := []struct { name string pod *corev1.Pod - lang language - image string + libsToInject []libInfo expectedEnvKey string expectedEnvVal string wantErr bool }{ { - name: "nominal case: java", - pod: fakePod("java-pod"), - lang: "java", - image: "gcr.io/datadoghq/dd-lib-java-init:v1", + name: "nominal case: java", + pod: fakePod("java-pod"), + libsToInject: []libInfo{ + { + lang: "java", + image: "gcr.io/datadoghq/dd-lib-java-init:v1", + }, + }, expectedEnvKey: "JAVA_TOOL_OPTIONS", expectedEnvVal: " -javaagent:/datadog-lib/dd-java-agent.jar", wantErr: false, }, { - name: "JAVA_TOOL_OPTIONS not empty", - pod: fakePodWithEnvValue("java-pod", "JAVA_TOOL_OPTIONS", "predefined"), - lang: "java", - image: "gcr.io/datadoghq/dd-lib-java-init:v1", + name: "JAVA_TOOL_OPTIONS not empty", + pod: fakePodWithEnvValue("java-pod", "JAVA_TOOL_OPTIONS", "predefined"), + libsToInject: []libInfo{ + { + lang: "java", + image: "gcr.io/datadoghq/dd-lib-java-init:v1", + }, + }, expectedEnvKey: "JAVA_TOOL_OPTIONS", expectedEnvVal: "predefined -javaagent:/datadog-lib/dd-java-agent.jar", wantErr: false, }, { - name: "JAVA_TOOL_OPTIONS set via ValueFrom", - pod: fakePodWithEnvFieldRefValue("java-pod", "JAVA_TOOL_OPTIONS", "path"), - lang: "java", - image: "gcr.io/datadoghq/dd-lib-java-init:v1", + name: "JAVA_TOOL_OPTIONS set via ValueFrom", + pod: fakePodWithEnvFieldRefValue("java-pod", "JAVA_TOOL_OPTIONS", "path"), + libsToInject: []libInfo{ + { + lang: "java", + image: "gcr.io/datadoghq/dd-lib-java-init:v1", + }, + }, wantErr: true, }, { - name: "nominal case: js", - pod: fakePod("js-pod"), - lang: "js", - image: "gcr.io/datadoghq/dd-lib-js-init:v1", + name: "nominal case: js", + pod: fakePod("js-pod"), + libsToInject: []libInfo{ + { + lang: "js", + image: "gcr.io/datadoghq/dd-lib-js-init:v1", + }, + }, expectedEnvKey: "NODE_OPTIONS", expectedEnvVal: " --require=/datadog-lib/node_modules/dd-trace/init", wantErr: false, }, { - name: "NODE_OPTIONS not empty", - pod: fakePodWithEnvValue("js-pod", "NODE_OPTIONS", "predefined"), - lang: "js", - image: "gcr.io/datadoghq/dd-lib-js-init:v1", + name: "NODE_OPTIONS not empty", + pod: fakePodWithEnvValue("js-pod", "NODE_OPTIONS", "predefined"), + libsToInject: []libInfo{ + { + lang: "js", + image: "gcr.io/datadoghq/dd-lib-js-init:v1", + }, + }, expectedEnvKey: "NODE_OPTIONS", expectedEnvVal: "predefined --require=/datadog-lib/node_modules/dd-trace/init", wantErr: false, }, { - name: "NODE_OPTIONS set via ValueFrom", - pod: fakePodWithEnvFieldRefValue("js-pod", "NODE_OPTIONS", "path"), - lang: "js", - image: "gcr.io/datadoghq/dd-lib-js-init:v1", + name: "NODE_OPTIONS set via ValueFrom", + pod: fakePodWithEnvFieldRefValue("js-pod", "NODE_OPTIONS", "path"), + libsToInject: []libInfo{ + { + lang: "js", + image: "gcr.io/datadoghq/dd-lib-js-init:v1", + }, + }, wantErr: true, }, { - name: "nominal case: python", - pod: fakePod("python-pod"), - lang: "python", - image: "gcr.io/datadoghq/dd-lib-python-init:v1", + name: "nominal case: python", + pod: fakePod("python-pod"), + libsToInject: []libInfo{ + { + lang: "python", + image: "gcr.io/datadoghq/dd-lib-python-init:v1", + }, + }, expectedEnvKey: "PYTHONPATH", expectedEnvVal: "/datadog-lib/", wantErr: false, }, { - name: "PYTHONPATH not empty", - pod: fakePodWithEnvValue("python-pod", "PYTHONPATH", "predefined"), - lang: "python", - image: "gcr.io/datadoghq/dd-lib-python-init:v1", + name: "PYTHONPATH not empty", + pod: fakePodWithEnvValue("python-pod", "PYTHONPATH", "predefined"), + libsToInject: []libInfo{ + { + lang: "python", + image: "gcr.io/datadoghq/dd-lib-python-init:v1", + }, + }, expectedEnvKey: "PYTHONPATH", expectedEnvVal: "/datadog-lib/:predefined", wantErr: false, }, { - name: "PYTHONPATH set via ValueFrom", - pod: fakePodWithEnvFieldRefValue("python-pod", "PYTHONPATH", "path"), - lang: "python", - image: "gcr.io/datadoghq/dd-lib-python-init:v1", + name: "PYTHONPATH set via ValueFrom", + pod: fakePodWithEnvFieldRefValue("python-pod", "PYTHONPATH", "path"), + libsToInject: []libInfo{ + { + lang: "python", + image: "gcr.io/datadoghq/dd-lib-python-init:v1", + }, + }, wantErr: true, }, { - name: "Unknown language", - pod: fakePod("unknown-pod"), - lang: "unknown", - image: "gcr.io/datadoghq/dd-lib-unknown-init:v1", + name: "Unknown language", + pod: fakePod("unknown-pod"), + libsToInject: []libInfo{ + { + lang: "unknown", + image: "gcr.io/datadoghq/dd-lib-unknown-init:v1", + }, + }, wantErr: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - err := injectAutoInstruConfig(tt.pod, tt.lang, tt.image) + err := injectAutoInstruConfig(tt.pod, tt.libsToInject) require.False(t, (err != nil) != tt.wantErr) if err != nil { return } - assertLibReq(t, tt.pod, tt.image, tt.expectedEnvKey, tt.expectedEnvVal) + assertLibReq(t, tt.pod, tt.libsToInject[0].lang, tt.libsToInject[0].image, tt.expectedEnvKey, tt.expectedEnvVal) }) } } -func assertLibReq(t *testing.T, pod *corev1.Pod, image, envKey, envVal string) { +func assertLibReq(t *testing.T, pod *corev1.Pod, lang language, image, envKey, envVal string) { // Empty dir volume volumeFound := false for _, volume := range pod.Spec.Volumes { @@ -135,7 +176,7 @@ func assertLibReq(t *testing.T, pod *corev1.Pod, image, envKey, envVal string) { // Init container initContainerFound := false for _, container := range pod.Spec.InitContainers { - if container.Name == "datadog-lib-init" { + if container.Name == fmt.Sprintf("datadog-lib-%s-init", lang) { require.Equal(t, image, container.Image) require.Equal(t, []string{"sh", "copy-lib.sh", "/datadog-lib"}, container.Command) require.Equal(t, "datadog-auto-instrumentation", container.VolumeMounts[0].Name) @@ -166,57 +207,119 @@ func TestExtractLibInfo(t *testing.T) { name string pod *corev1.Pod containerRegistry string - expectedLangauge language - expectedImage string - expectedShouldInject bool + expectedLibsToInject []libInfo }{ { - name: "java", - pod: fakePodWithAnnotation("admission.datadoghq.com/java-lib.version", "v1"), - containerRegistry: "registry", - expectedLangauge: "java", - expectedImage: "registry/dd-lib-java-init:v1", - expectedShouldInject: true, + name: "java", + pod: fakePodWithAnnotation("admission.datadoghq.com/java-lib.version", "v1"), + containerRegistry: "registry", + expectedLibsToInject: []libInfo{ + { + lang: "java", + image: "registry/dd-lib-java-init:v1", + }, + }, }, { - name: "js", - pod: fakePodWithAnnotation("admission.datadoghq.com/js-lib.version", "v1"), - containerRegistry: "registry", - expectedLangauge: "js", - expectedImage: "registry/dd-lib-js-init:v1", - expectedShouldInject: true, + name: "js", + pod: fakePodWithAnnotation("admission.datadoghq.com/js-lib.version", "v1"), + containerRegistry: "registry", + expectedLibsToInject: []libInfo{ + { + lang: "js", + image: "registry/dd-lib-js-init:v1", + }, + }, }, { - name: "python", - pod: fakePodWithAnnotation("admission.datadoghq.com/python-lib.version", "v1"), - containerRegistry: "registry", - expectedLangauge: "python", - expectedImage: "registry/dd-lib-python-init:v1", - expectedShouldInject: true, + name: "python", + pod: fakePodWithAnnotation("admission.datadoghq.com/python-lib.version", "v1"), + containerRegistry: "registry", + expectedLibsToInject: []libInfo{ + { + lang: "python", + image: "registry/dd-lib-python-init:v1", + }, + }, }, { - name: "custom", - pod: fakePodWithAnnotation("admission.datadoghq.com/java-lib.custom-image", "custom/image"), - containerRegistry: "registry", - expectedLangauge: "java", - expectedImage: "custom/image", - expectedShouldInject: true, + name: "custom", + pod: fakePodWithAnnotation("admission.datadoghq.com/java-lib.custom-image", "custom/image"), + containerRegistry: "registry", + expectedLibsToInject: []libInfo{ + { + lang: "java", + image: "custom/image", + }, + }, }, { name: "unknown", pod: fakePodWithAnnotation("admission.datadoghq.com/unknown-lib.version", "v1"), containerRegistry: "registry", - expectedLangauge: "", - expectedImage: "", - expectedShouldInject: false, + expectedLibsToInject: []libInfo{}, + }, + { + name: "java and js", + pod: &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + "admission.datadoghq.com/java-lib.version": "v1", + "admission.datadoghq.com/js-lib.version": "v1", + }, + }, + }, + containerRegistry: "registry", + expectedLibsToInject: []libInfo{ + { + lang: "java", + image: "registry/dd-lib-java-init:v1", + }, + { + lang: "js", + image: "registry/dd-lib-js-init:v1", + }, + }, + }, + { + name: "java and js on specific containers", + pod: &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Annotations: map[string]string{ + "admission.datadoghq.com/java-app.java-lib.version": "v1", + "admission.datadoghq.com/node-app.js-lib.version": "v1", + }, + }, + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: "java-app", + }, + { + Name: "node-app", + }, + }, + }, + }, + containerRegistry: "registry", + expectedLibsToInject: []libInfo{ + { + ctrName: "java-app", + lang: "java", + image: "registry/dd-lib-java-init:v1", + }, + { + ctrName: "node-app", + lang: "js", + image: "registry/dd-lib-js-init:v1", + }, + }, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - lang, image, shouldInject := extractLibInfo(tt.pod, tt.containerRegistry) - require.Equal(t, tt.expectedLangauge, lang) - require.Equal(t, tt.expectedImage, image) - require.Equal(t, tt.expectedShouldInject, shouldInject) + libsToInject := extractLibInfo(tt.pod, tt.containerRegistry) + require.Equal(t, tt.expectedLibsToInject, libsToInject) }) } } diff --git a/pkg/clusteragent/admission/mutate/tags_test.go b/pkg/clusteragent/admission/mutate/tags_test.go index b91a9166a6dd9..8b5f986d6fceb 100644 --- a/pkg/clusteragent/admission/mutate/tags_test.go +++ b/pkg/clusteragent/admission/mutate/tags_test.go @@ -13,6 +13,7 @@ import ( "testing" "github.com/DataDog/datadog-agent/pkg/util/cache" + "github.com/DataDog/datadog-agent/pkg/util/pointer" "github.com/stretchr/testify/assert" corev1 "k8s.io/api/core/v1" @@ -137,8 +138,8 @@ func Test_getOwnerInfo(t *testing.T) { name: "replicaset", owner: metav1.OwnerReference{ APIVersion: "apps/v1", - BlockOwnerDeletion: boolPointer(true), - Controller: boolPointer(true), + BlockOwnerDeletion: pointer.Ptr(true), + Controller: pointer.Ptr(true), Kind: "ReplicaSet", Name: "my-app-547c56f566", UID: "2dfa7d22-245f-4769-8854-bc3b056cd224", @@ -157,8 +158,8 @@ func Test_getOwnerInfo(t *testing.T) { name: "job", owner: metav1.OwnerReference{ APIVersion: "batch/v1", - BlockOwnerDeletion: boolPointer(true), - Controller: boolPointer(true), + BlockOwnerDeletion: pointer.Ptr(true), + Controller: pointer.Ptr(true), Kind: "Job", Name: "my-job", UID: "89e8148c-8601-4c69-b8a6-3fbb176547d0", @@ -177,8 +178,8 @@ func Test_getOwnerInfo(t *testing.T) { name: "invalid APIVersion", owner: metav1.OwnerReference{ APIVersion: "batch/v1/", - BlockOwnerDeletion: boolPointer(true), - Controller: boolPointer(true), + BlockOwnerDeletion: pointer.Ptr(true), + Controller: pointer.Ptr(true), Kind: "Job", Name: "my-job", UID: "89e8148c-8601-4c69-b8a6-3fbb176547d0", diff --git a/pkg/clusteragent/admission/mutate/test_utils.go b/pkg/clusteragent/admission/mutate/test_utils.go index f609d06403f96..0e95ffc294b76 100644 --- a/pkg/clusteragent/admission/mutate/test_utils.go +++ b/pkg/clusteragent/admission/mutate/test_utils.go @@ -124,7 +124,3 @@ func withContainer(pod *corev1.Pod, nameSuffix string) *corev1.Pod { pod.Spec.Containers = append(pod.Spec.Containers, corev1.Container{Name: pod.Name + nameSuffix}) return pod } - -func boolPointer(b bool) *bool { - return &b -} diff --git a/pkg/clusteragent/admission/patch/file_provider.go b/pkg/clusteragent/admission/patch/file_provider.go new file mode 100644 index 0000000000000..3fc9b3d0da40a --- /dev/null +++ b/pkg/clusteragent/admission/patch/file_provider.go @@ -0,0 +1,104 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package patch + +import ( + "encoding/json" + "os" + "time" + + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +// filePatchProvider this is a stub and will be used for e2e testing only +type filePatchProvider struct { + file string + isLeaderNotif <-chan struct{} + pollInterval time.Duration + subscribers map[TargetObjKind]chan PatchRequest + lastSuccessfulRefresh time.Time + clusterName string +} + +var _ patchProvider = &filePatchProvider{} + +func newfileProvider(file string, isLeaderNotif <-chan struct{}, clusterName string) *filePatchProvider { + return &filePatchProvider{ + file: file, + isLeaderNotif: isLeaderNotif, + pollInterval: 15 * time.Second, + subscribers: make(map[TargetObjKind]chan PatchRequest), + clusterName: clusterName, + } +} + +func (fpp *filePatchProvider) subscribe(kind TargetObjKind) chan PatchRequest { + ch := make(chan PatchRequest, 10) + fpp.subscribers[kind] = ch + return ch +} + +func (fpp *filePatchProvider) start(stopCh <-chan struct{}) { + log.Infof("Starting file patch provider: watching %s", fpp.file) + ticker := time.NewTicker(fpp.pollInterval) + defer ticker.Stop() + for { + select { + case <-fpp.isLeaderNotif: + log.Info("Got a leader notification, polling from file") + fpp.process(true) + case <-ticker.C: + fpp.process(false) + case <-stopCh: + log.Info("Shutting down file patch provider") + return + } + } +} + +func (fpp *filePatchProvider) process(forcePoll bool) { + requests, err := fpp.poll(forcePoll) + if err != nil { + log.Errorf("Error refreshing patch requests: %v", err) + return + } + if len(requests) == 0 { + return + } + log.Infof("Got %d updates from local file", len(requests)) + for _, req := range requests { + if err := req.Validate(fpp.clusterName); err != nil { + log.Errorf("Skipping invalid patch request: %s", err) + continue + } + if ch, found := fpp.subscribers[req.K8sTarget.Kind]; found { + log.Infof("Publishing patch request for target %s", req.K8sTarget) + ch <- req + } + } + fpp.lastSuccessfulRefresh = time.Now() +} + +func (fpp *filePatchProvider) poll(forcePoll bool) ([]PatchRequest, error) { + info, err := os.Stat(fpp.file) + if err != nil { + return nil, err + } + if !forcePoll && fpp.lastSuccessfulRefresh.After(info.ModTime()) { + log.Debugf("File %q hasn't changed since the last Successful refresh at %v", fpp.file, fpp.lastSuccessfulRefresh) + return []PatchRequest{}, nil + } + content, err := os.ReadFile(fpp.file) + if err != nil { + return nil, err + } + var requests []PatchRequest + err = json.Unmarshal(content, &requests) + return requests, err +} diff --git a/pkg/clusteragent/admission/patch/file_provider_test.go b/pkg/clusteragent/admission/patch/file_provider_test.go new file mode 100644 index 0000000000000..2b0e27d2e66c3 --- /dev/null +++ b/pkg/clusteragent/admission/patch/file_provider_test.go @@ -0,0 +1,33 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package patch + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestFileProviderProcess(t *testing.T) { + fpp := newfileProvider("testdata/auto-instru.json", make(chan struct{}), "dev") + notifs := fpp.subscribe(KindDeployment) + fpp.process(false) + require.Len(t, notifs, 1) + pr := <-notifs + require.Equal(t, "11777398274940883091", pr.ID) + require.Equal(t, int64(1674236639474287600), pr.Revision) + require.Equal(t, "v1.0.0", pr.SchemaVersion) + require.Equal(t, "java", pr.LibConfig.Language) + require.Equal(t, "v1.4.0", pr.LibConfig.Version) + require.Equal(t, "dev", pr.K8sTarget.Cluster) + require.Equal(t, KindDeployment, pr.K8sTarget.Kind) + require.Equal(t, "my-java-service", pr.K8sTarget.Name) + require.Equal(t, "default", pr.K8sTarget.Namespace) + require.Len(t, notifs, 0) +} diff --git a/pkg/clusteragent/admission/patch/patch_request.go b/pkg/clusteragent/admission/patch/patch_request.go index 5bc242c483594..084484a9b1358 100644 --- a/pkg/clusteragent/admission/patch/patch_request.go +++ b/pkg/clusteragent/admission/patch/patch_request.go @@ -27,34 +27,43 @@ const ( type Action string const ( - // ApplyConfig instructs the patcher to apply the patch request - ApplyConfig Action = "apply" - // DisableInjection instructs the patcher to disable library injection - DisableInjection Action = "disable" + // EnableConfig instructs the patcher to apply the patch request + EnableConfig Action = "enable" + // DisableConfig instructs the patcher to disable library injection + DisableConfig Action = "disable" ) // PatchRequest holds the required data to target a k8s object and apply library configuration type PatchRequest struct { - Action Action `yaml:"action"` - K8sTarget K8sTarget `yaml:"k8s_target"` - LibID LibID `yaml:"lib_id"` - LibConfig common.LibConfig `yaml:"lib_config"` + ID string `json:"id"` + Revision int64 `json:"revision"` + SchemaVersion string `json:"schema_version"` + Action Action `json:"action"` + + // Library parameters + LibConfig common.LibConfig `json:"lib_config"` + + // Target k8s object + K8sTarget K8sTarget `json:"k8s_target"` } // Validate returns whether a patch request is applicable func (pr PatchRequest) Validate(clusterName string) error { - if err := pr.K8sTarget.validate(clusterName); err != nil { - return err + if pr.LibConfig.Language == "" { + return errors.New("library language is empty") } - return pr.LibID.validate() + if pr.LibConfig.Version == "" { + return errors.New("library version is empty") + } + return pr.K8sTarget.validate(clusterName) } // K8sTarget represent the targetet k8s object type K8sTarget struct { - ClusterName string `yaml:"cluster_name"` - Kind TargetObjKind `yaml:"kind"` - Name string `yaml:"name"` - Namespace string `yaml:"namespace"` + Cluster string `json:"cluster"` + Kind TargetObjKind `json:"kind"` + Name string `json:"name"` + Namespace string `json:"namespace"` } // String returns a string representation of the targeted k8s object @@ -63,8 +72,8 @@ func (k K8sTarget) String() string { } func (k K8sTarget) validate(clusterName string) error { - if k.ClusterName != clusterName { - return fmt.Errorf("target cluster name %q is different from the local one %q", k.ClusterName, clusterName) + if k.Cluster != clusterName { + return fmt.Errorf("target cluster name %q is different from the local one %q", k.Cluster, clusterName) } if k.Name == "" { return errors.New("target object name is empty") @@ -79,19 +88,3 @@ func (k K8sTarget) validate(clusterName string) error { } return nil } - -// LibID hold the minimal information to inject a library -type LibID struct { - Language string `yaml:"language"` - Version string `yaml:"version"` -} - -func (li LibID) validate() error { - if li.Language == "" { - return errors.New("library language is empty") - } - if li.Version == "" { - return errors.New("library version is empty") - } - return nil -} diff --git a/pkg/clusteragent/admission/patch/patch_request_test.go b/pkg/clusteragent/admission/patch/patch_request_test.go new file mode 100644 index 0000000000000..df972089db4c8 --- /dev/null +++ b/pkg/clusteragent/admission/patch/patch_request_test.go @@ -0,0 +1,93 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package patch + +import ( + "testing" + + "github.com/DataDog/datadog-agent/pkg/clusteragent/admission/common" + "github.com/stretchr/testify/require" +) + +func TestPatchRequestValidate(t *testing.T) { + tests := []struct { + name string + LibConfig common.LibConfig + K8sTarget K8sTarget + clusterName string + valid bool + }{ + { + name: "valid", + LibConfig: common.LibConfig{Language: "lang", Version: "latest"}, + K8sTarget: K8sTarget{Cluster: "cluster", Kind: "deployment", Name: "name", Namespace: "ns"}, + clusterName: "cluster", + valid: true, + }, + { + name: "empty version", + LibConfig: common.LibConfig{Language: "lang"}, + K8sTarget: K8sTarget{Cluster: "cluster", Kind: "deployment", Name: "name", Namespace: "ns"}, + clusterName: "cluster", + valid: false, + }, + { + name: "empty language", + LibConfig: common.LibConfig{Version: "latest"}, + K8sTarget: K8sTarget{Cluster: "cluster", Kind: "deployment", Name: "name", Namespace: "ns"}, + clusterName: "cluster", + valid: false, + }, + { + name: "empty cluster", + LibConfig: common.LibConfig{Language: "lang", Version: "latest"}, + K8sTarget: K8sTarget{Kind: "deployment", Name: "name", Namespace: "ns"}, + clusterName: "cluster", + valid: false, + }, + { + name: "wrong cluster", + LibConfig: common.LibConfig{Language: "lang", Version: "latest"}, + K8sTarget: K8sTarget{Cluster: "wrong-cluster", Kind: "deployment", Name: "name", Namespace: "ns"}, + clusterName: "cluster", + valid: false, + }, + { + name: "empty kind", + LibConfig: common.LibConfig{Language: "lang", Version: "latest"}, + K8sTarget: K8sTarget{Cluster: "cluster", Name: "name", Namespace: "ns"}, + clusterName: "cluster", + valid: false, + }, + { + name: "empty name", + LibConfig: common.LibConfig{Language: "lang", Version: "latest"}, + K8sTarget: K8sTarget{Cluster: "cluster", Kind: "deployment", Namespace: "ns"}, + clusterName: "cluster", + valid: false, + }, + { + name: "empty namesapce", + LibConfig: common.LibConfig{Language: "lang", Version: "latest"}, + K8sTarget: K8sTarget{Cluster: "cluster", Kind: "deployment", Name: "name"}, + clusterName: "cluster", + valid: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + pr := PatchRequest{ + LibConfig: tt.LibConfig, + K8sTarget: tt.K8sTarget, + } + err := pr.Validate(tt.clusterName) + require.True(t, (err == nil) == tt.valid) + }) + } +} diff --git a/pkg/clusteragent/admission/patch/patcher.go b/pkg/clusteragent/admission/patch/patcher.go index d308b221ae776..c491d9940d284 100644 --- a/pkg/clusteragent/admission/patch/patcher.go +++ b/pkg/clusteragent/admission/patch/patcher.go @@ -17,6 +17,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" jsonpatch "github.com/evanphx/json-patch" + corev1 "k8s.io/api/apps/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/kubernetes" @@ -50,6 +51,7 @@ func (p *patcher) start(stopCh <-chan struct{}) { } } +// patchDeployment applies a patch request to a k8s target deployment func (p *patcher) patchDeployment(req PatchRequest) error { if !p.isLeader() { log.Debug("Not leader, skipping") @@ -63,33 +65,27 @@ func (p *patcher) patchDeployment(req PatchRequest) error { if err != nil { return fmt.Errorf("failed to encode object: %v", err) } - versionAnnotKey := fmt.Sprintf(common.LibVersionAnnotKeyFormat, req.LibID.Language) - configAnnotKey := fmt.Sprintf(common.LibConfigV1AnnotKeyFormat, req.LibID.Language) + revision := fmt.Sprint(req.Revision) + if deploy.Annotations == nil { + deploy.Annotations = make(map[string]string) + } + if deploy.Annotations[common.RcIDAnnotKey] == req.ID && deploy.Annotations[common.RcRevisionAnnotKey] == revision { + log.Infof("Remote Config ID %q with revision %q has already been applied to object %s, skipping", req.ID, revision, req.K8sTarget) + return nil + } + log.Infof("Applying Remote Config ID %q with revision %q to object %s", req.ID, revision, req.K8sTarget) switch req.Action { - case ApplyConfig: - if deploy.Spec.Template.Labels == nil { - deploy.Spec.Template.Labels = make(map[string]string) - } - deploy.Spec.Template.Labels[common.EnabledLabelKey] = "true" - if deploy.Spec.Template.Annotations == nil { - deploy.Spec.Template.Annotations = make(map[string]string) + case EnableConfig: + if err := enableConfig(deploy, req); err != nil { + return err } - deploy.Spec.Template.Annotations[versionAnnotKey] = req.LibID.Version - conf, err := json.Marshal(req.LibConfig) - if err != nil { - return fmt.Errorf("failed to encode library config: %v", err) - } - deploy.Spec.Template.Annotations[configAnnotKey] = string(conf) - case DisableInjection: - if deploy.Spec.Template.Labels == nil { - deploy.Spec.Template.Labels = make(map[string]string) - } - deploy.Spec.Template.Labels[common.EnabledLabelKey] = "false" - delete(deploy.Spec.Template.Annotations, versionAnnotKey) - delete(deploy.Spec.Template.Annotations, configAnnotKey) + case DisableConfig: + disableConfig(deploy, req) default: return fmt.Errorf("unknown action %q", req.Action) } + deploy.Annotations[common.RcIDAnnotKey] = req.ID + deploy.Annotations[common.RcRevisionAnnotKey] = revision newObj, err := json.Marshal(deploy) if err != nil { return fmt.Errorf("failed to encode object: %v", err) @@ -102,3 +98,36 @@ func (p *patcher) patchDeployment(req PatchRequest) error { _, err = p.k8sClient.AppsV1().Deployments(req.K8sTarget.Namespace).Patch(context.TODO(), req.K8sTarget.Name, types.StrategicMergePatchType, patch, metav1.PatchOptions{}) return err } + +func enableConfig(deploy *corev1.Deployment, req PatchRequest) error { + if deploy.Spec.Template.Labels == nil { + deploy.Spec.Template.Labels = make(map[string]string) + } + deploy.Spec.Template.Labels[common.EnabledLabelKey] = "true" + if deploy.Spec.Template.Annotations == nil { + deploy.Spec.Template.Annotations = make(map[string]string) + } + versionAnnotKey := fmt.Sprintf(common.LibVersionAnnotKeyFormat, req.LibConfig.Language) + deploy.Spec.Template.Annotations[versionAnnotKey] = req.LibConfig.Version + conf, err := json.Marshal(req.LibConfig) + if err != nil { + return fmt.Errorf("failed to encode library config: %v", err) + } + configAnnotKey := fmt.Sprintf(common.LibConfigV1AnnotKeyFormat, req.LibConfig.Language) + deploy.Spec.Template.Annotations[configAnnotKey] = string(conf) + return nil +} + +func disableConfig(deploy *corev1.Deployment, req PatchRequest) { + if deploy.Spec.Template.Labels == nil { + deploy.Spec.Template.Labels = make(map[string]string) + } + if val, found := deploy.Spec.Template.Labels[common.EnabledLabelKey]; found { + log.Debugf("Found pod label %q=%q in target %s. Setting it to false", common.EnabledLabelKey, val, req.K8sTarget) + } + deploy.Spec.Template.Labels[common.EnabledLabelKey] = "false" + versionAnnotKey := fmt.Sprintf(common.LibVersionAnnotKeyFormat, req.LibConfig.Language) + delete(deploy.Spec.Template.Annotations, versionAnnotKey) + configAnnotKey := fmt.Sprintf(common.LibConfigV1AnnotKeyFormat, req.LibConfig.Language) + delete(deploy.Spec.Template.Annotations, configAnnotKey) +} diff --git a/pkg/clusteragent/admission/patch/patcher_test.go b/pkg/clusteragent/admission/patch/patcher_test.go index 2f7c643aa206a..2534e6d8b036b 100644 --- a/pkg/clusteragent/admission/patch/patcher_test.go +++ b/pkg/clusteragent/admission/patch/patcher_test.go @@ -41,10 +41,11 @@ func TestPatchDeployment(t *testing.T) { // Apply first patch req := PatchRequest{ - Action: ApplyConfig, + ID: "id", + Revision: 123, + Action: EnableConfig, K8sTarget: K8sTarget{Kind: KindDeployment, Namespace: ns, Name: name}, - LibID: LibID{Language: "java", Version: "latest"}, - LibConfig: common.LibConfig{Version: 1, ServiceLanguage: "java"}, + LibConfig: common.LibConfig{Language: "java", Version: "latest"}, } require.NoError(t, p.patchDeployment(req)) @@ -53,10 +54,13 @@ func TestPatchDeployment(t *testing.T) { require.NoError(t, err) require.Equal(t, got.Spec.Template.Labels["admission.datadoghq.com/enabled"], "true") require.Equal(t, got.Spec.Template.Annotations["admission.datadoghq.com/java-lib.version"], "latest") - require.Equal(t, got.Spec.Template.Annotations["admission.datadoghq.com/java-lib.config.v1"], `{"version":1,"service_language":"java"}`) + require.Equal(t, got.Spec.Template.Annotations["admission.datadoghq.com/java-lib.config.v1"], `{"library_language":"java","library_version":"latest"}`) + require.Equal(t, got.Annotations["admission.datadoghq.com/rc.id"], "id") + require.Equal(t, got.Annotations["admission.datadoghq.com/rc.rev"], "123") // Patch again to disable lib injection (aka revert) - req.Action = DisableInjection + req.Action = DisableConfig + req.Revision = 1234 require.NoError(t, p.patchDeployment(req)) // Check the new patch @@ -65,10 +69,13 @@ func TestPatchDeployment(t *testing.T) { require.Equal(t, got.Spec.Template.Labels["admission.datadoghq.com/enabled"], "false") require.NotContains(t, got.Spec.Template.Annotations, "admission.datadoghq.com/java-lib.version") require.NotContains(t, got.Spec.Template.Annotations, "admission.datadoghq.com/java-lib.config.v1") + require.Equal(t, got.Annotations["admission.datadoghq.com/rc.id"], "id") + require.Equal(t, got.Annotations["admission.datadoghq.com/rc.rev"], "1234") // Apply a new patch with a new config - req.Action = ApplyConfig - req.LibConfig = common.LibConfig{Version: 1, ServiceLanguage: "java", TracingTags: []string{"k1:v1", "k2:v2"}} + req.Action = EnableConfig + req.Revision = 12345 + req.LibConfig = common.LibConfig{Language: "java", Version: "latest", TracingTags: []string{"k1:v1", "k2:v2"}} require.NoError(t, p.patchDeployment(req)) // Check the new patch @@ -76,5 +83,7 @@ func TestPatchDeployment(t *testing.T) { require.NoError(t, err) require.Equal(t, got.Spec.Template.Labels["admission.datadoghq.com/enabled"], "true") require.Equal(t, got.Spec.Template.Annotations["admission.datadoghq.com/java-lib.version"], "latest") - require.Equal(t, got.Spec.Template.Annotations["admission.datadoghq.com/java-lib.config.v1"], `{"version":1,"service_language":"java","tracing_tags":["k1:v1","k2:v2"]}`) + require.Equal(t, got.Spec.Template.Annotations["admission.datadoghq.com/java-lib.config.v1"], `{"library_language":"java","library_version":"latest","tracing_tags":["k1:v1","k2:v2"]}`) + require.Equal(t, got.Annotations["admission.datadoghq.com/rc.id"], "id") + require.Equal(t, got.Annotations["admission.datadoghq.com/rc.rev"], "12345") } diff --git a/pkg/clusteragent/admission/patch/provider.go b/pkg/clusteragent/admission/patch/provider.go index 3c2b2f58f5122..d8cbc87d78415 100644 --- a/pkg/clusteragent/admission/patch/provider.go +++ b/pkg/clusteragent/admission/patch/provider.go @@ -9,12 +9,10 @@ package patch import ( - "os" - "time" + "errors" - "github.com/DataDog/datadog-agent/pkg/util/log" - - "gopkg.in/yaml.v3" + "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/config/remote" ) type patchProvider interface { @@ -22,94 +20,14 @@ type patchProvider interface { subscribe(kind TargetObjKind) chan PatchRequest } -// filePatchProvider this is a stub and will be replaced by a RC patch provider -type filePatchProvider struct { - file string - pollInterval time.Duration - isLeader func() bool - subscribers map[TargetObjKind]chan PatchRequest - lastSuccessfulRefresh time.Time - clusterName string -} - -var _ patchProvider = &filePatchProvider{} - -func newPatchProvider(isLeaderFunc func() bool, clusterName string) patchProvider { - // Only the file-based implementation is available at the moment. - return newfileProvider(isLeaderFunc, clusterName) -} - -func newfileProvider(isLeaderFunc func() bool, clusterName string) *filePatchProvider { - return &filePatchProvider{ - file: "/etc/datadog-agent/auto-instru.yaml", - pollInterval: 15 * time.Second, - isLeader: isLeaderFunc, - subscribers: make(map[TargetObjKind]chan PatchRequest), - clusterName: clusterName, - } -} - -func (fpp *filePatchProvider) subscribe(kind TargetObjKind) chan PatchRequest { - ch := make(chan PatchRequest, 10) - fpp.subscribers[kind] = ch - return ch -} - -func (fpp *filePatchProvider) start(stopCh <-chan struct{}) { - ticker := time.NewTicker(fpp.pollInterval) - defer ticker.Stop() - for { - select { - case <-ticker.C: - if err := fpp.refresh(); err != nil { - log.Errorf(err.Error()) - } - case <-stopCh: - log.Info("Shutting down patch provider") - return - } - } -} - -func (fpp *filePatchProvider) refresh() error { - if !fpp.isLeader() { - log.Debug("Not leader, skipping") - return nil - } - requests, err := fpp.poll() - if err != nil { - return err - } - log.Debugf("Got %d new patch requests", len(requests)) - for _, req := range requests { - if err := req.Validate(fpp.clusterName); err != nil { - log.Errorf("Skipping invalid patch request: %s", err) - continue - } - if ch, found := fpp.subscribers[req.K8sTarget.Kind]; found { - log.Infof("Publishing patch requests for target %s", req.K8sTarget) - ch <- req - } - } - fpp.lastSuccessfulRefresh = time.Now() - return nil -} - -func (fpp *filePatchProvider) poll() ([]PatchRequest, error) { - info, err := os.Stat(fpp.file) - if err != nil { - return nil, err - } - modTime := info.ModTime() - if fpp.lastSuccessfulRefresh.After(modTime) { - log.Debugf("File %q hasn't changed since the last Successful refresh at %v", fpp.file, fpp.lastSuccessfulRefresh) - return []PatchRequest{}, nil +func newPatchProvider(rcClient *remote.Client, isLeaderNotif <-chan struct{}, clusterName string) (patchProvider, error) { + if config.Datadog.GetBool("remote_configuration.enabled") { + return newRemoteConfigProvider(rcClient, isLeaderNotif, clusterName) } - content, err := os.ReadFile(fpp.file) - if err != nil { - return nil, err + if config.Datadog.GetBool("admission_controller.auto_instrumentation.patcher.fallback_to_file_provider") { + // Use the file config provider for e2e testing only (it replaces RC as a source of configs) + file := config.Datadog.GetString("admission_controller.auto_instrumentation.patcher.file_provider_path") + return newfileProvider(file, isLeaderNotif, clusterName), nil } - var requests []PatchRequest - err = yaml.Unmarshal(content, &requests) - return requests, err + return nil, errors.New("remote config is disabled") } diff --git a/pkg/clusteragent/admission/patch/rc_provider.go b/pkg/clusteragent/admission/patch/rc_provider.go new file mode 100644 index 0000000000000..96cb4b52eda96 --- /dev/null +++ b/pkg/clusteragent/admission/patch/rc_provider.go @@ -0,0 +1,86 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package patch + +import ( + "encoding/json" + "errors" + + "github.com/DataDog/datadog-agent/pkg/config/remote" + "github.com/DataDog/datadog-agent/pkg/remoteconfig/state" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +// remoteConfigProvider consumes tracing configs from RC and delivers them to the patcher +type remoteConfigProvider struct { + client *remote.Client + isLeaderNotif <-chan struct{} + subscribers map[TargetObjKind]chan PatchRequest + clusterName string +} + +var _ patchProvider = &remoteConfigProvider{} + +func newRemoteConfigProvider(client *remote.Client, isLeaderNotif <-chan struct{}, clusterName string) (*remoteConfigProvider, error) { + if client == nil { + return nil, errors.New("remote config client not initialized") + } + return &remoteConfigProvider{ + client: client, + isLeaderNotif: isLeaderNotif, + subscribers: make(map[TargetObjKind]chan PatchRequest), + clusterName: clusterName, + }, nil +} + +func (rcp *remoteConfigProvider) start(stopCh <-chan struct{}) { + log.Info("Starting remote-config patch provider") + rcp.client.RegisterAPMTracing(rcp.process) + rcp.client.Start() + for { + select { + case <-rcp.isLeaderNotif: + log.Info("Got a leader notification, polling from remote-config") + rcp.process(rcp.client.APMTracingConfigs()) + case <-stopCh: + log.Info("Shutting down remote-config patch provider") + rcp.client.Close() + return + } + } +} + +func (rcp *remoteConfigProvider) subscribe(kind TargetObjKind) chan PatchRequest { + ch := make(chan PatchRequest, 10) + rcp.subscribers[kind] = ch + return ch +} + +// process is the event handler called by the RC client on config updates +func (rcp *remoteConfigProvider) process(update map[string]state.APMTracingConfig) { + log.Infof("Got %d updates from remote-config", len(update)) + for path, config := range update { + log.Debugf("Parsing config %s from path %s", config.Config, path) + var req PatchRequest + err := json.Unmarshal(config.Config, &req) + if err != nil { + log.Errorf("Error while parsing config: %v", err) + continue + } + log.Debugf("Patch request parsed %+v", req) + if err := req.Validate(rcp.clusterName); err != nil { + log.Errorf("Skipping invalid patch request: %s", err) + continue + } + if ch, found := rcp.subscribers[req.K8sTarget.Kind]; found { + log.Debugf("Publishing patch request for target %s", req.K8sTarget) + ch <- req + } + } +} diff --git a/pkg/clusteragent/admission/patch/rc_provider_test.go b/pkg/clusteragent/admission/patch/rc_provider_test.go new file mode 100644 index 0000000000000..078d3d136a2c6 --- /dev/null +++ b/pkg/clusteragent/admission/patch/rc_provider_test.go @@ -0,0 +1,64 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package patch + +import ( + "fmt" + "testing" + + "github.com/DataDog/datadog-agent/pkg/config/remote" + "github.com/DataDog/datadog-agent/pkg/remoteconfig/state" + "github.com/stretchr/testify/require" +) + +func TestProcess(t *testing.T) { + genConfig := func(cluster, kind string) []byte { + base := ` +{ + "id": "17945471932432318983", + "revision": 1673513604823158800, + "schema_version": "v1.0.0", + "action": "enable", + "lib_config": { + "library_language": "java", + "library_version": "latest" + }, + "k8s_target": { + "cluster": "%s", + "kind": "%s", + "name": "my-java-app", + "namespace": "default" + } +} +` + return []byte(fmt.Sprintf(base, cluster, kind)) + } + rcp, err := newRemoteConfigProvider(&remote.Client{}, make(chan struct{}), "dev") + require.NoError(t, err) + notifs := rcp.subscribe(KindDeployment) + in := map[string]state.APMTracingConfig{ + "path1": {Config: genConfig("dev", "deployment")}, // valid config + "path2": {Config: []byte("invalid")}, // invalid json + "path3": {Config: genConfig("dev", "wrong")}, // kind mismatch + "path4": {Config: genConfig("wrong", "deployment")}, // cluster mismatch + } + rcp.process(in) + require.Len(t, notifs, 1) + pr := <-notifs + require.Equal(t, "17945471932432318983", pr.ID) + require.Equal(t, int64(1673513604823158800), pr.Revision) + require.Equal(t, "v1.0.0", pr.SchemaVersion) + require.Equal(t, "java", pr.LibConfig.Language) + require.Equal(t, "latest", pr.LibConfig.Version) + require.Equal(t, "dev", pr.K8sTarget.Cluster) + require.Equal(t, KindDeployment, pr.K8sTarget.Kind) + require.Equal(t, "my-java-app", pr.K8sTarget.Name) + require.Equal(t, "default", pr.K8sTarget.Namespace) + require.Len(t, notifs, 0) +} diff --git a/pkg/clusteragent/admission/patch/start.go b/pkg/clusteragent/admission/patch/start.go index 4c28c9ceb0851..2a827a3962bab 100644 --- a/pkg/clusteragent/admission/patch/start.go +++ b/pkg/clusteragent/admission/patch/start.go @@ -9,6 +9,7 @@ package patch import ( + "github.com/DataDog/datadog-agent/pkg/config/remote" "github.com/DataDog/datadog-agent/pkg/util/log" "k8s.io/client-go/kubernetes" @@ -16,16 +17,23 @@ import ( // ControllerContext holds necessary context for the patch controller type ControllerContext struct { - IsLeaderFunc func() bool - Client kubernetes.Interface - StopCh chan struct{} + IsLeaderFunc func() bool + LeaderSubscribeFunc func() <-chan struct{} + K8sClient kubernetes.Interface + RcClient *remote.Client + ClusterName string + StopCh chan struct{} } // StartControllers starts the patch controllers -func StartControllers(ctx ControllerContext, clusterName string) { +func StartControllers(ctx ControllerContext) error { log.Info("Starting patch controllers") - provider := newPatchProvider(ctx.IsLeaderFunc, clusterName) - patcher := newPatcher(ctx.Client, ctx.IsLeaderFunc, provider) + provider, err := newPatchProvider(ctx.RcClient, ctx.LeaderSubscribeFunc(), ctx.ClusterName) + if err != nil { + return err + } + patcher := newPatcher(ctx.K8sClient, ctx.IsLeaderFunc, provider) go provider.start(ctx.StopCh) go patcher.start(ctx.StopCh) + return nil } diff --git a/pkg/clusteragent/admission/patch/testdata/auto-instru.json b/pkg/clusteragent/admission/patch/testdata/auto-instru.json new file mode 100644 index 0000000000000..b447c66d15acf --- /dev/null +++ b/pkg/clusteragent/admission/patch/testdata/auto-instru.json @@ -0,0 +1,20 @@ +[ + { + "id": "11777398274940883091", + "revision": 1674236639474287600, + "schema_version": "v1.0.0", + "action": "enable", + "lib_config": { + "library_language": "java", + "library_version": "v1.4.0", + "service_name": "my-java-service", + "env": "dev" + }, + "k8s_target": { + "cluster": "dev", + "kind": "deployment", + "name": "my-java-service", + "namespace": "default" + } + } +] diff --git a/pkg/clusteragent/api/v1/types.go b/pkg/clusteragent/api/v1/types.go index f6f7d99e3eb07..0c47898c82c68 100644 --- a/pkg/clusteragent/api/v1/types.go +++ b/pkg/clusteragent/api/v1/types.go @@ -15,14 +15,15 @@ import ( // namespace and pod name. // // The data is stored in the following schema: -// { -// "namespace1": { -// "pod": { "svc1": {}, "svc2": {}, "svc3": {} ] -// }, -// "namespace2": { -// "pod2": [ "svc1": {}, "svc2": {}, "svc3": {} ] -// } -// } +// +// { +// "namespace1": { +// "pod": { "svc1": {}, "svc2": {}, "svc3": {} ] +// }, +// "namespace2": { +// "pod2": [ "svc1": {}, "svc2": {}, "svc3": {} ] +// } +// } type NamespacesPodsStringsSet map[string]MapStringSet // MapStringSet maps a set of string by a string key diff --git a/pkg/clusteragent/externalmetrics/metrics_retriever.go b/pkg/clusteragent/externalmetrics/metrics_retriever.go index a6375a76c3240..ff1cbe65d09a6 100644 --- a/pkg/clusteragent/externalmetrics/metrics_retriever.go +++ b/pkg/clusteragent/externalmetrics/metrics_retriever.go @@ -18,10 +18,10 @@ import ( ) const ( - invalidMetricBackendErrorMessage string = "Invalid metric (from backend), query: %s" - invalidMetricOutdatedErrorMessage string = "Outdated result from backend, query: %s" - invalidMetricNoDataErrorMessage string = "No data from backend, query: %s" - invalidMetricGlobalErrorMessage string = "Global error (all queries) from backend" + invalidMetricErrorMessage string = "%v, query was: %s" + invalidMetricOutdatedErrorMessage string = "Query returned outdated result, check MaxAge setting, query: %s" + invalidMetricNotFoundErrorMessage string = "Unexpected error, query data not found in result, query: %s" + invalidMetricGlobalErrorMessage string = "Global error (all queries) from backend, invalid syntax in query? Check Cluster Agent leader logs for details" metricRetrieverStoreID string = "mr" ) @@ -70,10 +70,10 @@ func (mr *MetricsRetriever) retrieveMetricsValues() { return } - queries := getUniqueQueries(datadogMetrics) + queries, queriesMaxAge := getUniqueQueries(datadogMetrics) log.Debugf("Starting refreshing external metrics with: %d queries", len(queries)) - results, err := mr.processor.QueryExternalMetric(queries) + results, err := mr.processor.QueryExternalMetric(queries, queriesMaxAge) globalError := false // Check for global failure if len(results) == 0 && err != nil { @@ -87,7 +87,7 @@ func (mr *MetricsRetriever) retrieveMetricsValues() { datadogMetricFromStore := mr.store.LockRead(datadogMetric.ID, false) if datadogMetricFromStore == nil { // This metric is not in the store anymore, discard it - log.Infof("Discarding results for DatadogMetric: %s as not present in store anymore", datadogMetric.ID) + log.Debugf("Discarding results for DatadogMetric: %s as not present in store anymore", datadogMetric.ID) continue } @@ -115,7 +115,7 @@ func (mr *MetricsRetriever) retrieveMetricsValues() { } } else { datadogMetricFromStore.Valid = false - datadogMetricFromStore.Error = fmt.Errorf(invalidMetricBackendErrorMessage, query) + datadogMetricFromStore.Error = fmt.Errorf(invalidMetricErrorMessage, queryResult.Error, query) datadogMetricFromStore.UpdateTime = currentTime } } else { @@ -123,7 +123,9 @@ func (mr *MetricsRetriever) retrieveMetricsValues() { if globalError { datadogMetricFromStore.Error = fmt.Errorf(invalidMetricGlobalErrorMessage) } else { - datadogMetricFromStore.Error = fmt.Errorf(invalidMetricNoDataErrorMessage, query) + // This should never happen as `QueryExternalMetric` is filling all missing series + // if no global error. + datadogMetricFromStore.Error = log.Errorf(invalidMetricNotFoundErrorMessage, query) } datadogMetricFromStore.UpdateTime = currentTime } @@ -132,10 +134,15 @@ func (mr *MetricsRetriever) retrieveMetricsValues() { } } -func getUniqueQueries(datadogMetrics []model.DatadogMetricInternal) []string { +func getUniqueQueries(datadogMetrics []model.DatadogMetricInternal) ([]string, time.Duration) { + var maxAge time.Duration queries := make([]string, 0, len(datadogMetrics)) unique := make(map[string]struct{}, len(queries)) for _, datadogMetric := range datadogMetrics { + if datadogMetric.MaxAge > maxAge { + maxAge = datadogMetric.MaxAge + } + query := datadogMetric.Query() if _, found := unique[query]; !found { unique[query] = struct{}{} @@ -143,5 +150,5 @@ func getUniqueQueries(datadogMetrics []model.DatadogMetricInternal) []string { } } - return queries + return queries, maxAge } diff --git a/pkg/clusteragent/externalmetrics/metrics_retriever_test.go b/pkg/clusteragent/externalmetrics/metrics_retriever_test.go index 5b66fc0ee3672..ecd217b953481 100644 --- a/pkg/clusteragent/externalmetrics/metrics_retriever_test.go +++ b/pkg/clusteragent/externalmetrics/metrics_retriever_test.go @@ -9,6 +9,7 @@ package externalmetrics import ( + "errors" "fmt" "testing" "time" @@ -29,7 +30,7 @@ func (p *mockedProcessor) UpdateExternalMetrics(emList map[string]custommetrics. return nil } -func (p *mockedProcessor) QueryExternalMetric(queries []string) (map[string]autoscalers.Point, error) { +func (p *mockedProcessor) QueryExternalMetric(queries []string, timeWindow time.Duration) (map[string]autoscalers.Point, error) { return p.points, p.err } @@ -341,6 +342,7 @@ func TestRetrieveMetricsErrorCases(t *testing.T) { Value: 0, Timestamp: defaultPreviousUpdateTime.Unix(), Valid: false, + Error: errors.New("some err"), }, }, queryError: nil, @@ -362,7 +364,7 @@ func TestRetrieveMetricsErrorCases(t *testing.T) { Active: true, Value: 11.0, Valid: false, - Error: fmt.Errorf(invalidMetricBackendErrorMessage, "query-metric1"), + Error: fmt.Errorf(invalidMetricErrorMessage, errors.New("some err"), "query-metric1"), // UpdateTime not set as it will not be compared directly }, query: "query-metric1", @@ -476,7 +478,7 @@ func TestRetrieveMetricsErrorCases(t *testing.T) { Active: true, Value: 2.0, Valid: false, - Error: fmt.Errorf(invalidMetricNoDataErrorMessage, "query-metric1"), + Error: fmt.Errorf(invalidMetricNotFoundErrorMessage, "query-metric1"), // UpdateTime not set as it will not be compared directly }, query: "query-metric1", diff --git a/pkg/clusteragent/externalmetrics/model/utils.go b/pkg/clusteragent/externalmetrics/model/utils.go index 0d1d20256aee4..a829e63c5f000 100644 --- a/pkg/clusteragent/externalmetrics/model/utils.go +++ b/pkg/clusteragent/externalmetrics/model/utils.go @@ -40,7 +40,7 @@ var templatedTags = map[string]tagGetter{ if err != nil { return "", err } - return clustername.GetClusterName(ctx, hname), nil + return clustername.GetClusterNameTagValue(ctx, hname), nil }, } diff --git a/pkg/clusteragent/externalmetrics/provider.go b/pkg/clusteragent/externalmetrics/provider.go index 95af91f3b8de1..3437ce4c24a8f 100644 --- a/pkg/clusteragent/externalmetrics/provider.go +++ b/pkg/clusteragent/externalmetrics/provider.go @@ -113,7 +113,6 @@ func NewDatadogMetricProvider(ctx context.Context, apiCl *apiserver.APIClient) ( func (p *datadogMetricProvider) GetExternalMetric(ctx context.Context, namespace string, metricSelector labels.Selector, info provider.ExternalMetricInfo) (*external_metrics.ExternalMetricValueList, error) { res, err := p.getExternalMetric(namespace, metricSelector, info) if err != nil { - log.Errorf("ExternalMetric query failed with error: %v", err) convErr := apierr.NewInternalError(err) if convErr != nil { err = convErr @@ -136,14 +135,14 @@ func (p *datadogMetricProvider) getExternalMetric(namespace string, metricSelect parsed = true } if !parsed { - return nil, fmt.Errorf("ExternalMetric does not follow DatadogMetric format") + return nil, log.Warnf("ExternalMetric does not follow DatadogMetric format: %s", info.Metric) } datadogMetric := p.store.Get(datadogMetricID) - log.Debugf("DatadogMetric from store: %v", datadogMetric) + log.Tracef("DatadogMetric from store: %v", datadogMetric) if datadogMetric == nil { - return nil, fmt.Errorf("DatadogMetric not found for metric name: %s, datadogmetricid: %s", info.Metric, datadogMetricID) + return nil, log.Warnf("DatadogMetric not found for metric name: %s, datadogmetricid: %s", info.Metric, datadogMetricID) } externalMetric, err := datadogMetric.ToExternalMetricFormat(info.Metric) diff --git a/pkg/clusteragent/externalmetrics/provider_test.go b/pkg/clusteragent/externalmetrics/provider_test.go index 400dab9d601c4..2837f3cc5f103 100644 --- a/pkg/clusteragent/externalmetrics/provider_test.go +++ b/pkg/clusteragent/externalmetrics/provider_test.go @@ -175,7 +175,7 @@ func TestGetExternalMetrics(t *testing.T) { }, queryMetricName: "datadogmetric@metric1", expectedExternalMetrics: nil, - expectedError: fmt.Errorf("ExternalMetric does not follow DatadogMetric format"), + expectedError: fmt.Errorf("ExternalMetric does not follow DatadogMetric format: datadogmetric@metric1"), }, { desc: "Test ExternalMetric does not use DatadogMetric format", diff --git a/pkg/collector/corechecks/cluster/doc.go b/pkg/collector/corechecks/cluster/doc.go index 4078090454b88..7782ff5d99921 100644 --- a/pkg/collector/corechecks/cluster/doc.go +++ b/pkg/collector/corechecks/cluster/doc.go @@ -5,6 +5,5 @@ /* Package cluster provides core checks for cluster level checks, used by the Datadog Cluster Agent. - */ package cluster diff --git a/pkg/collector/corechecks/cluster/helm/map_utils.go b/pkg/collector/corechecks/cluster/helm/map_utils.go index 813b6e18aef7e..159e692357877 100644 --- a/pkg/collector/corechecks/cluster/helm/map_utils.go +++ b/pkg/collector/corechecks/cluster/helm/map_utils.go @@ -20,14 +20,16 @@ import ( // returns an error if the provided key is "incomplete", meaning that there's a // value associated for the key, but it is a map. For example, if the input map // is: -// map[string]interface{}{ -// "agents": map[string]interface{}{ -// "image": map[string]string{ -// "tag": "7.39.0", -// "pullPolicy": "IfNotPresent", -// }, -// }, -// } +// +// map[string]interface{}{ +// "agents": map[string]interface{}{ +// "image": map[string]string{ +// "tag": "7.39.0", +// "pullPolicy": "IfNotPresent", +// }, +// }, +// } +// // "agents.image.tag" and "agents.image.pullPolicy" are valid keys, but // "agents.image" is not. func getValue(m map[string]interface{}, dotSeparatedKey string) (string, error) { diff --git a/pkg/collector/corechecks/cluster/ksm/kubernetes_state.go b/pkg/collector/corechecks/cluster/ksm/kubernetes_state.go index cf2e397c2ae47..b3d48840cb77b 100644 --- a/pkg/collector/corechecks/cluster/ksm/kubernetes_state.go +++ b/pkg/collector/corechecks/cluster/ksm/kubernetes_state.go @@ -152,7 +152,8 @@ type KSMCheck struct { telemetry *telemetryCache cancel context.CancelFunc isCLCRunner bool - clusterName string + clusterNameTagValue string + clusterNameRFC1123 string metricNamesMapper map[string]string metricAggregators map[string]metricAggregator metricTransformers map[string]metricTransformerFunc @@ -559,8 +560,8 @@ func (k *KSMCheck) hostnameAndTags(labels map[string]string, labelJoiner *labelJ tag, hostTag := k.buildTag(key, value, lMapperOverride) tags = append(tags, tag) if hostTag != "" { - if k.clusterName != "" { - hostname = hostTag + "-" + k.clusterName + if k.clusterNameRFC1123 != "" { + hostname = hostTag + "-" + k.clusterNameRFC1123 } else { hostname = hostTag } @@ -579,8 +580,8 @@ func (k *KSMCheck) hostnameAndTags(labels map[string]string, labelJoiner *labelJ tag, hostTag := k.buildTag(label.key, label.value, lMapperOverride) tags = append(tags, tag) if hostTag != "" { - if k.clusterName != "" { - hostname = hostTag + "-" + k.clusterName + if k.clusterNameRFC1123 != "" { + hostname = hostTag + "-" + k.clusterNameRFC1123 } else { hostname = hostTag } @@ -697,8 +698,12 @@ func (k *KSMCheck) processLabelsOrAnnotationsAsTags(what string, configStuffAsTa // getClusterName retrieves the name of the cluster, if found func (k *KSMCheck) getClusterName() { hostname, _ := hostnameUtil.Get(context.TODO()) - if clusterName := clustername.GetClusterName(context.TODO(), hostname); clusterName != "" { - k.clusterName = clusterName + if clusterName := clustername.GetRFC1123CompliantClusterName(context.TODO(), hostname); clusterName != "" { + k.clusterNameRFC1123 = clusterName + } + + if clusterName := clustername.GetClusterNameTagValue(context.TODO(), hostname); clusterName != "" { + k.clusterNameTagValue = clusterName } } @@ -710,8 +715,8 @@ func (k *KSMCheck) initTags() { k.instance.Tags = []string{} } - if k.clusterName != "" { - k.instance.Tags = append(k.instance.Tags, "kube_cluster_name:"+k.clusterName) + if k.clusterNameTagValue != "" { + k.instance.Tags = append(k.instance.Tags, "kube_cluster_name:"+k.clusterNameTagValue) } if !k.instance.DisableGlobalTags { diff --git a/pkg/collector/corechecks/cluster/ksm/kubernetes_state_test.go b/pkg/collector/corechecks/cluster/ksm/kubernetes_state_test.go index b517a0d373217..0f4ad9ae94575 100644 --- a/pkg/collector/corechecks/cluster/ksm/kubernetes_state_test.go +++ b/pkg/collector/corechecks/cluster/ksm/kubernetes_state_test.go @@ -1107,7 +1107,7 @@ func TestKSMCheck_hostnameAndTags(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { kubeStateMetricsSCheck := newKSMCheck(core.NewCheckBase(kubeStateMetricsCheckName), tt.config) - kubeStateMetricsSCheck.clusterName = tt.args.clusterName + kubeStateMetricsSCheck.clusterNameRFC1123 = tt.args.clusterName labelJoiner := newLabelJoiner(tt.config.LabelJoins) for _, metricFam := range tt.args.metricsToGet { labelJoiner.insertFamily(metricFam) @@ -1417,14 +1417,15 @@ func TestKSMCheckInitTags(t *testing.T) { expected: []string{"check:tag1", "check:tag2", "kube_cluster_name:clustername"}, }, } + + mockConfig := config.Mock(t) for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - mockConfig := config.Mock(t) k := &KSMCheck{ - instance: tt.fields.instance, - clusterName: tt.fields.clusterName, - agentConfig: mockConfig, + instance: tt.fields.instance, + clusterNameTagValue: tt.fields.clusterName, + agentConfig: mockConfig, } tt.loadFunc(mockConfig) diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/inventory/inventory.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/inventory/inventory.go index b6730019b28fe..4f110e797d8b9 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/collectors/inventory/inventory.go +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/inventory/inventory.go @@ -45,6 +45,7 @@ func NewCollectorInventory() *CollectorInventory { k8sCollectors.NewServiceAccountCollectorVersions(), k8sCollectors.NewStatefulSetCollectorVersions(), k8sCollectors.NewUnassignedPodCollectorVersions(), + k8sCollectors.NewVerticalPodAutoscalerCollectorVersions(), }, } } diff --git a/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/verticalpodautoscaler.go b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/verticalpodautoscaler.go new file mode 100644 index 0000000000000..37e3c5c603a34 --- /dev/null +++ b/pkg/collector/corechecks/cluster/orchestrator/collectors/k8s/verticalpodautoscaler.go @@ -0,0 +1,104 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver && orchestrator +// +build kubeapiserver,orchestrator + +package k8s + +import ( + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/collectors" + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors" + k8sProcessors "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors/k8s" + "github.com/DataDog/datadog-agent/pkg/orchestrator" + + v1Informers "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions/autoscaling.k8s.io/v1" + v1Listers "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/listers/autoscaling.k8s.io/v1" + + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// NewVerticalPodAutoscalerCollectorVersions builds the group of collector versions. +func NewVerticalPodAutoscalerCollectorVersions() collectors.CollectorVersions { + return collectors.NewCollectorVersions( + NewVerticalPodAutoscalerCollector(), + ) +} + +// VerticalPodAutoscalerCollector is a collector for Kubernetes VPAs. +type VerticalPodAutoscalerCollector struct { + informer v1Informers.VerticalPodAutoscalerInformer + lister v1Listers.VerticalPodAutoscalerLister + metadata *collectors.CollectorMetadata + processor *processors.Processor +} + +// NewVerticalPodAutoscalerCollector creates a new collector for the Kubernetes +// VerticalPodAutoscaler resource. +func NewVerticalPodAutoscalerCollector() *VerticalPodAutoscalerCollector { + return &VerticalPodAutoscalerCollector{ + metadata: &collectors.CollectorMetadata{ + IsDefaultVersion: true, + IsStable: false, + IsMetadataProducer: true, + IsManifestProducer: true, + SupportsManifestBuffering: true, + Name: "verticalpodautoscalers", + NodeType: orchestrator.K8sVerticalPodAutoscaler, + Version: "autoscaling.k8s.io/v1", + }, + processor: processors.NewProcessor(new(k8sProcessors.VerticalPodAutoscalerHandlers)), + } +} + +// Informer returns the shared informer. +func (c *VerticalPodAutoscalerCollector) Informer() cache.SharedInformer { + return c.informer.Informer() +} + +// Init is used to initialize the collector. +func (c *VerticalPodAutoscalerCollector) Init(rcfg *collectors.CollectorRunConfig) { + c.informer = rcfg.APIClient.VPAInformerFactory.Autoscaling().V1().VerticalPodAutoscalers() + c.lister = c.informer.Lister() +} + +// IsAvailable returns whether the collector is available. +func (c *VerticalPodAutoscalerCollector) IsAvailable() bool { return true } + +// Metadata is used to access information about the collector. +func (c *VerticalPodAutoscalerCollector) Metadata() *collectors.CollectorMetadata { + return c.metadata +} + +// Run triggers the vpa collection process. +func (c *VerticalPodAutoscalerCollector) Run(rcfg *collectors.CollectorRunConfig) (*collectors.CollectorRunResult, error) { + list, err := c.lister.List(labels.Everything()) + if err != nil { + return nil, collectors.NewListingError(err) + } + + ctx := &processors.ProcessorContext{ + APIClient: rcfg.APIClient, + Cfg: rcfg.Config, + ClusterID: rcfg.ClusterID, + MsgGroupID: rcfg.MsgGroupRef.Inc(), + NodeType: c.metadata.NodeType, + } + + processResult, processed := c.processor.Process(ctx, list) + + if processed == -1 { + return nil, collectors.ErrProcessingPanic + } + + result := &collectors.CollectorRunResult{ + Result: processResult, + ResourcesListed: len(list), + ResourcesProcessed: processed, + } + + return result, nil +} diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/chunking.go b/pkg/collector/corechecks/cluster/orchestrator/processors/chunking.go index fd2e158e17917..67fe8c88b4aea 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/chunking.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/chunking.go @@ -14,117 +14,30 @@ import ( "github.com/DataDog/datadog-agent/pkg/process/util" ) -// orchestratorList is a payload list of orchestrator payloads -type orchestratorList struct { - // We use yaml size as weight indicator - orchestratorYaml []interface{} - // Slice of payloads to be chunked, it's a generic attribute for metadata payloads and manifest payloads - orchestratorPayloads []interface{} - chunker orchestratorChunker -} - -// orchestratorChunker abstracts chunking of orchestrator payloads -type orchestratorChunker interface { - // Accept takes a slice of orchestrator payloads and allocates them to the current chunk - Accept(orchestrator []interface{}, weight int) -} - -func (l *orchestratorList) Len() int { - return len(l.orchestratorPayloads) -} - -func (l *orchestratorList) WeightAt(idx int) int { - if idx >= len(l.orchestratorPayloads) { - return 0 - } - return len(l.orchestratorYaml[idx].(*model.Manifest).Content) -} - -func (l *orchestratorList) ToChunk(start, end int, weight int) { - l.chunker.Accept(l.orchestratorPayloads[start:end], weight) -} - -// chunkProps is used to track weight and size of chunks -type chunkProps struct { - weight int - size int -} - -// chunkPropsTracker tracks weight and size of chunked payloads -type chunkPropsTracker struct { - props []chunkProps - idx int -} - -// TakenSize returns the size allocated to the current chunk -func (c *chunkPropsTracker) TakenSize() int { - if c.idx < len(c.props) { - return c.props[c.idx].size - } - return 0 -} - -// TakenWeight returns the weight allocated to the current chunk -func (c *chunkPropsTracker) TakenWeight() int { - if c.idx < len(c.props) { - return c.props[c.idx].weight - } - return 0 -} - -// Append creates a new chunk at the end (cases when it is known any previously allocated chunks cannot fit the payload) -func (c *chunkPropsTracker) Append() { - c.idx = len(c.props) -} - -// Next moves to the next chunk or allocates a new chunk if the current chunk is the last -func (c *chunkPropsTracker) Next() { - c.idx++ -} - -// collectorProcChunker implements allocation of chunks -type collectorOrchestratorChunker struct { - chunkPropsTracker - collectorOrchestratorList [][]interface{} -} - -// collectorOrchestratorChunker implements both `chunkAllocator` and `orchestratorChunker` -var _ orchestratorChunker = &collectorOrchestratorChunker{} -var _ util.ChunkAllocator = &collectorOrchestratorChunker{} - -func (c *collectorOrchestratorChunker) Accept(orchestratorPayloads []interface{}, weight int) { - if c.idx >= len(c.collectorOrchestratorList) { - // If we are outside of the range of allocated chunks, allocate a new one - c.collectorOrchestratorList = append(c.collectorOrchestratorList, make([]interface{}, 0, 1)) - c.props = append(c.props, chunkProps{}) - } - c.collectorOrchestratorList[c.idx] = append(c.collectorOrchestratorList[c.idx], orchestratorPayloads...) - c.props[c.idx].size += len(orchestratorPayloads) - c.props[c.idx].weight += weight -} -func (c *collectorOrchestratorChunker) setLastChunk() { - c.idx = 0 - if len(c.collectorOrchestratorList) > 1 { - c.idx = len(c.collectorOrchestratorList) - 1 - } -} - // chunkOrchestratorPayloadsBySizeAndWeight chunks orchestrator payloads by max allowed size and max allowed weight of a chunk // We use yaml size as payload weight -func chunkOrchestratorPayloadsBySizeAndWeight(orchestratorPayloads []interface{}, orchestratorYaml []interface{}, maxChunkSize, maxChunkWeight int, chunker *collectorOrchestratorChunker) { +func chunkOrchestratorPayloadsBySizeAndWeight(orchestratorPayloads []interface{}, orchestratorYaml []interface{}, maxChunkSize, maxChunkWeight int) [][]interface{} { if len(orchestratorPayloads) == 0 { - return + return make([][]interface{}, 0) } - // Use the last available chunk as it may have some space for payloads - chunker.setLastChunk() + chunker := &util.ChunkAllocator[[]interface{}, interface{}]{ + AppendToChunk: func(chunk *[]interface{}, payloads []interface{}) { + *chunk = append(*chunk, payloads...) + }, + } - list := &orchestratorList{ - orchestratorPayloads: orchestratorPayloads, - orchestratorYaml: orchestratorYaml, - chunker: chunker, + list := &util.PayloadList[interface{}]{ + Items: orchestratorPayloads, + WeightAt: func(i int) int { + if i >= len(orchestratorYaml) { + return 0 + } + return len(orchestratorYaml[i].(*model.Manifest).Content) + }, } - util.ChunkPayloadsBySizeAndWeight(list, chunker, maxChunkSize, maxChunkWeight) - return + util.ChunkPayloadsBySizeAndWeight[[]interface{}, interface{}](list, chunker, maxChunkSize, maxChunkWeight) + + return *chunker.GetChunks() } diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/verticalpodautoscaler.go b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/verticalpodautoscaler.go new file mode 100644 index 0000000000000..d76388cf8baa1 --- /dev/null +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/k8s/verticalpodautoscaler.go @@ -0,0 +1,85 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build orchestrator +// +build orchestrator + +package k8s + +import ( + model "github.com/DataDog/agent-payload/v5/process" + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors" + k8sTransformers "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s" + "github.com/DataDog/datadog-agent/pkg/orchestrator/redact" + "k8s.io/apimachinery/pkg/types" + v1 "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" +) + +// VerticalPodAutoscalerHandlers implements the Handlers interface for Kuberenetes VPAs +type VerticalPodAutoscalerHandlers struct { + BaseHandlers +} + +// AfterMarshalling is a handler called after resource marshalling. +func (h *VerticalPodAutoscalerHandlers) AfterMarshalling(ctx *processors.ProcessorContext, resource, resourceModel interface{}, yaml []byte) (skip bool) { + m := resourceModel.(*model.VerticalPodAutoscaler) + m.Yaml = yaml + return +} + +// BuildMessageBody is a handler called to build a message body out of a list of +// extracted resources. +func (h *VerticalPodAutoscalerHandlers) BuildMessageBody(ctx *processors.ProcessorContext, resourceModels []interface{}, groupSize int) model.MessageBody { + models := make([]*model.VerticalPodAutoscaler, 0, len(resourceModels)) + + for _, m := range resourceModels { + models = append(models, m.(*model.VerticalPodAutoscaler)) + } + + return &model.CollectorVerticalPodAutoscaler{ + ClusterName: ctx.Cfg.KubeClusterName, + ClusterId: ctx.ClusterID, + GroupId: ctx.MsgGroupID, + GroupSize: int32(groupSize), + VerticalPodAutoscalers: models, + Tags: append(ctx.Cfg.ExtraTags, ctx.ApiGroupVersionTag), + } +} + +// ExtractResource is a handler called to extract the resource model out of a raw resource. +func (h *VerticalPodAutoscalerHandlers) ExtractResource(ctx *processors.ProcessorContext, resource interface{}) (verticalPodAutoscalerModel interface{}) { + r := resource.(*v1.VerticalPodAutoscaler) + return k8sTransformers.ExtractVerticalPodAutoscaler(r) +} + +// ResourceList is a handler called to convert a list passed as a generic +// interface to a list of generic interfaces. +func (h *VerticalPodAutoscalerHandlers) ResourceList(ctx *processors.ProcessorContext, list interface{}) (resources []interface{}) { + resourceList := list.([]*v1.VerticalPodAutoscaler) + resources = make([]interface{}, 0, len(resourceList)) + + for _, resource := range resourceList { + resources = append(resources, resource) + } + + return resources +} + +// ResourceUID is a handler called to retrieve the resource UID. +func (h *VerticalPodAutoscalerHandlers) ResourceUID(ctx *processors.ProcessorContext, resource interface{}) types.UID { + return resource.(*v1.VerticalPodAutoscaler).UID +} + +// ResourceVersion is a handler called to retrieve the resource version. +func (h *VerticalPodAutoscalerHandlers) ResourceVersion(ctx *processors.ProcessorContext, resource, resourceModel interface{}) string { + return resource.(*v1.VerticalPodAutoscaler).ResourceVersion +} + +// ScrubBeforeExtraction is a handler called to redact the raw resource before +// it is extracted as an internal resource model. +func (h *VerticalPodAutoscalerHandlers) ScrubBeforeExtraction(ctx *processors.ProcessorContext, resource interface{}) { + r := resource.(*v1.VerticalPodAutoscaler) + redact.RemoveLastAppliedConfigurationAnnotation(r.Annotations) +} diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/processor.go b/pkg/collector/corechecks/cluster/orchestrator/processors/processor.go index c8b715edf61db..d156c16e9914f 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/processor.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/processor.go @@ -10,12 +10,13 @@ package processors import ( model "github.com/DataDog/agent-payload/v5/process" + jsoniter "github.com/json-iterator/go" + "k8s.io/apimachinery/pkg/types" + "github.com/DataDog/datadog-agent/pkg/orchestrator" "github.com/DataDog/datadog-agent/pkg/orchestrator/config" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/apiserver" "github.com/DataDog/datadog-agent/pkg/util/log" - jsoniter "github.com/json-iterator/go" - "k8s.io/apimachinery/pkg/types" ) // Marshal message to JSON. @@ -188,14 +189,13 @@ func (p *Processor) Process(ctx *ProcessorContext, list interface{}) (processRes func ChunkManifest(ctx *ProcessorContext, buildManifestBody func(ctx *ProcessorContext, resourceManifests []interface{}, groupSize int) model.MessageBody, resourceManifestModels []interface{}) []model.MessageBody { // Chunking resources based on the serialized size of their manifest and maximum messages number // Chunk manifest messages and use itself as weight indicator - manifestChunker := &collectorOrchestratorChunker{} - chunkOrchestratorPayloadsBySizeAndWeight(resourceManifestModels, resourceManifestModels, ctx.Cfg.MaxPerMessage, ctx.Cfg.MaxWeightPerMessageBytes, manifestChunker) + chunks := chunkOrchestratorPayloadsBySizeAndWeight(resourceManifestModels, resourceManifestModels, ctx.Cfg.MaxPerMessage, ctx.Cfg.MaxWeightPerMessageBytes) - chunkCount := len(manifestChunker.collectorOrchestratorList) - manifestMessages := make([]model.MessageBody, 0, len(manifestChunker.collectorOrchestratorList)) + chunkCount := len(chunks) + manifestMessages := make([]model.MessageBody, 0, chunkCount) for i := 0; i < chunkCount; i++ { - manifestMessages = append(manifestMessages, buildManifestBody(ctx, manifestChunker.collectorOrchestratorList[i], chunkCount)) + manifestMessages = append(manifestMessages, buildManifestBody(ctx, chunks[i], chunkCount)) } return manifestMessages @@ -205,13 +205,12 @@ func ChunkManifest(ctx *ProcessorContext, buildManifestBody func(ctx *ProcessorC func ChunkMetadata(ctx *ProcessorContext, p *Processor, resourceMetadataModels, resourceManifestModels []interface{}) []model.MessageBody { // Chunking resources based on the serialized size of their manifest and maximum messages number // Chunk metadata messages and use resourceManifestModels as weight indicator - metadataChunker := &collectorOrchestratorChunker{} - chunkOrchestratorPayloadsBySizeAndWeight(resourceMetadataModels, resourceManifestModels, ctx.Cfg.MaxPerMessage, ctx.Cfg.MaxWeightPerMessageBytes, metadataChunker) + chunks := chunkOrchestratorPayloadsBySizeAndWeight(resourceMetadataModels, resourceManifestModels, ctx.Cfg.MaxPerMessage, ctx.Cfg.MaxWeightPerMessageBytes) - chunkCount := len(metadataChunker.collectorOrchestratorList) - metadataMessages := make([]model.MessageBody, 0, len(metadataChunker.collectorOrchestratorList)) + chunkCount := len(chunks) + metadataMessages := make([]model.MessageBody, 0, chunkCount) for i := 0; i < chunkCount; i++ { - metadataMessages = append(metadataMessages, p.h.BuildMessageBody(ctx, metadataChunker.collectorOrchestratorList[i], chunkCount)) + metadataMessages = append(metadataMessages, p.h.BuildMessageBody(ctx, chunks[i], chunkCount)) } return metadataMessages diff --git a/pkg/collector/corechecks/cluster/orchestrator/processors/processor_test.go b/pkg/collector/corechecks/cluster/orchestrator/processors/processor_test.go index a237171cb7826..306059ead41e8 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/processors/processor_test.go +++ b/pkg/collector/corechecks/cluster/orchestrator/processors/processor_test.go @@ -214,9 +214,8 @@ func TestChunkOrchestratorMetadataBySizeAndWeight(t *testing.T) { for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { - chunker := &collectorOrchestratorChunker{} - chunkOrchestratorPayloadsBySizeAndWeight(tc.orchestratorResources, tc.orchestratorYaml, tc.maxChunkSize, tc.maxChunkWeight, chunker) - assert.Equal(t, tc.expectedChunks, chunker.collectorOrchestratorList) + chunks := chunkOrchestratorPayloadsBySizeAndWeight(tc.orchestratorResources, tc.orchestratorYaml, tc.maxChunkSize, tc.maxChunkWeight) + assert.Equal(t, tc.expectedChunks, chunks) }) } } diff --git a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/common_test.go b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/common_test.go deleted file mode 100644 index cb44c96a44665..0000000000000 --- a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/common_test.go +++ /dev/null @@ -1,25 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build orchestrator -// +build orchestrator - -package k8s - -func boolPtr(v bool) *bool { - return &v -} - -func int32Ptr(v int32) *int32 { - return &v -} - -func int64Ptr(v int64) *int64 { - return &v -} - -func strPtr(v string) *string { - return &v -} diff --git a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/cronjob_v1_test.go b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/cronjob_v1_test.go index 44117c914f882..ccde22a57d0d5 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/cronjob_v1_test.go +++ b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/cronjob_v1_test.go @@ -13,6 +13,7 @@ import ( "time" model "github.com/DataDog/agent-payload/v5/process" + "github.com/DataDog/datadog-agent/pkg/util/pointer" "github.com/stretchr/testify/assert" batchv1 "k8s.io/api/batch/v1" @@ -46,11 +47,11 @@ func TestExtractCronJobV1(t *testing.T) { }, Spec: batchv1.CronJobSpec{ ConcurrencyPolicy: batchv1.ForbidConcurrent, - FailedJobsHistoryLimit: int32Ptr(4), + FailedJobsHistoryLimit: pointer.Ptr(int32(4)), Schedule: "*/5 * * * *", - StartingDeadlineSeconds: int64Ptr(120), - SuccessfulJobsHistoryLimit: int32Ptr(2), - Suspend: boolPtr(false), + StartingDeadlineSeconds: pointer.Ptr(int64(120)), + SuccessfulJobsHistoryLimit: pointer.Ptr(int32(2)), + Suspend: pointer.Ptr(false), }, Status: batchv1.CronJobStatus{ Active: []corev1.ObjectReference{ diff --git a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/cronjob_v1beta1_test.go b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/cronjob_v1beta1_test.go index ad5da89f728cf..e8dcaae135d73 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/cronjob_v1beta1_test.go +++ b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/cronjob_v1beta1_test.go @@ -13,6 +13,7 @@ import ( "time" model "github.com/DataDog/agent-payload/v5/process" + "github.com/DataDog/datadog-agent/pkg/util/pointer" "github.com/stretchr/testify/assert" batchv1 "k8s.io/api/batch/v1" @@ -47,11 +48,11 @@ func TestExtractCronJobV1Beta1(t *testing.T) { }, Spec: batchv1beta1.CronJobSpec{ ConcurrencyPolicy: batchv1beta1.ForbidConcurrent, - FailedJobsHistoryLimit: int32Ptr(4), + FailedJobsHistoryLimit: pointer.Ptr(int32(4)), Schedule: "*/5 * * * *", - StartingDeadlineSeconds: int64Ptr(120), - SuccessfulJobsHistoryLimit: int32Ptr(2), - Suspend: boolPtr(false), + StartingDeadlineSeconds: pointer.Ptr(int64(120)), + SuccessfulJobsHistoryLimit: pointer.Ptr(int32(2)), + Suspend: pointer.Ptr(false), }, Status: batchv1beta1.CronJobStatus{ Active: []corev1.ObjectReference{ diff --git a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/ingress_test.go b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/ingress_test.go index b006f584661c2..a73135885fd4c 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/ingress_test.go +++ b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/ingress_test.go @@ -12,6 +12,7 @@ import ( "testing" model "github.com/DataDog/agent-payload/v5/process" + "github.com/DataDog/datadog-agent/pkg/util/pointer" "github.com/stretchr/testify/assert" v1 "k8s.io/api/core/v1" @@ -59,7 +60,7 @@ func TestExtractIngress(t *testing.T) { }, DefaultBackend: &netv1.IngressBackend{ Resource: &v1.TypedLocalObjectReference{ - APIGroup: strPtr("apiGroup"), + APIGroup: pointer.Ptr("apiGroup"), Kind: "kind", Name: "name", }, @@ -70,7 +71,7 @@ func TestExtractIngress(t *testing.T) { SecretName: "secret", }, }, - IngressClassName: strPtr("ingressClassName"), + IngressClassName: pointer.Ptr("ingressClassName"), }, Status: netv1.IngressStatus{ LoadBalancer: v1.LoadBalancerStatus{ @@ -232,7 +233,7 @@ func TestExtractIngressBackend(t *testing.T) { "with resource": { input: netv1.IngressBackend{ Resource: &v1.TypedLocalObjectReference{ - APIGroup: strPtr("apiGroup"), + APIGroup: pointer.Ptr("apiGroup"), Kind: "kind", Name: "name", }, diff --git a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/job_test.go b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/job_test.go index 4dc5d8a82d8fe..f158f7625b91a 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/job_test.go +++ b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/job_test.go @@ -13,6 +13,7 @@ import ( "time" model "github.com/DataDog/agent-payload/v5/process" + "github.com/DataDog/datadog-agent/pkg/util/pointer" "github.com/stretchr/testify/assert" batchv1 "k8s.io/api/batch/v1" @@ -44,7 +45,7 @@ func TestExtractJob(t *testing.T) { OwnerReferences: []metav1.OwnerReference{ { APIVersion: "batch/v1beta1", - Controller: boolPtr(true), + Controller: pointer.Ptr(true), Kind: "CronJob", Name: "test-job", UID: "d0326ca4-d405-4fe9-99b5-7bfc4a6722b6", @@ -54,9 +55,9 @@ func TestExtractJob(t *testing.T) { UID: types.UID("8893e7a0-fc49-4627-b695-3ed47074ecba"), }, Spec: batchv1.JobSpec{ - BackoffLimit: int32Ptr(6), - Completions: int32Ptr(1), - Parallelism: int32Ptr(1), + BackoffLimit: pointer.Ptr(int32(6)), + Completions: pointer.Ptr(int32(1)), + Parallelism: pointer.Ptr(int32(1)), Selector: &metav1.LabelSelector{ MatchLabels: map[string]string{ "controller-uid": "43739057-c6d7-4a5e-ab63-d0c8844e5272", @@ -116,7 +117,7 @@ func TestExtractJob(t *testing.T) { OwnerReferences: []metav1.OwnerReference{ { APIVersion: "batch/v1beta1", - Controller: boolPtr(true), + Controller: pointer.Ptr(true), Kind: "CronJob", Name: "test-job", UID: "d0326ca4-d405-4fe9-99b5-7bfc4a6722b6", @@ -126,9 +127,9 @@ func TestExtractJob(t *testing.T) { UID: types.UID("8893e7a0-fc49-4627-b695-3ed47074ecba"), }, Spec: batchv1.JobSpec{ - BackoffLimit: int32Ptr(6), - Completions: int32Ptr(1), - Parallelism: int32Ptr(1), + BackoffLimit: pointer.Ptr(int32(6)), + Completions: pointer.Ptr(int32(1)), + Parallelism: pointer.Ptr(int32(1)), Selector: &metav1.LabelSelector{ MatchLabels: map[string]string{ "controller-uid": "43739057-c6d7-4a5e-ab63-d0c8844e5272", @@ -200,7 +201,7 @@ func TestExtractJob(t *testing.T) { OwnerReferences: []metav1.OwnerReference{ { APIVersion: "batch/v1beta1", - Controller: boolPtr(true), + Controller: pointer.Ptr(true), Kind: "CronJob", Name: "test-job", UID: "d0326ca4-d405-4fe9-99b5-7bfc4a6722b6", @@ -210,9 +211,9 @@ func TestExtractJob(t *testing.T) { UID: types.UID("8893e7a0-fc49-4627-b695-3ed47074ecba"), }, Spec: batchv1.JobSpec{ - BackoffLimit: int32Ptr(6), - Completions: int32Ptr(1), - Parallelism: int32Ptr(1), + BackoffLimit: pointer.Ptr(int32(6)), + Completions: pointer.Ptr(int32(1)), + Parallelism: pointer.Ptr(int32(1)), Selector: &metav1.LabelSelector{ MatchLabels: map[string]string{ "controller-uid": "43739057-c6d7-4a5e-ab63-d0c8844e5272", diff --git a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/persistentvolumeclaim_test.go b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/persistentvolumeclaim_test.go index 498ec55e30416..ac82f80ef6ed3 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/persistentvolumeclaim_test.go +++ b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/persistentvolumeclaim_test.go @@ -13,6 +13,7 @@ import ( "time" model "github.com/DataDog/agent-payload/v5/process" + "github.com/DataDog/datadog-agent/pkg/util/pointer" "github.com/stretchr/testify/assert" corev1 "k8s.io/api/core/v1" @@ -59,7 +60,7 @@ func TestExtractPersistentVolumeClaim(t *testing.T) { }, }, VolumeName: "elasticsearch-volume", - StorageClassName: strPtr("gold"), + StorageClassName: pointer.Ptr("gold"), VolumeMode: &filesystem, DataSource: &corev1.TypedLocalObjectReference{ Name: "srcpvc", diff --git a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/serviceaccount_test.go b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/serviceaccount_test.go index a1f5e3e55804d..ceb1b425d0dd1 100644 --- a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/serviceaccount_test.go +++ b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/serviceaccount_test.go @@ -13,6 +13,7 @@ import ( "time" model "github.com/DataDog/agent-payload/v5/process" + "github.com/DataDog/datadog-agent/pkg/util/pointer" "github.com/stretchr/testify/assert" corev1 "k8s.io/api/core/v1" @@ -29,7 +30,7 @@ func TestExtractServiceAccount(t *testing.T) { }{ "standard": { input: corev1.ServiceAccount{ - AutomountServiceAccountToken: boolPtr(true), + AutomountServiceAccountToken: pointer.Ptr(true), ImagePullSecrets: []corev1.LocalObjectReference{ { Name: "registry-key", diff --git a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler.go b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler.go new file mode 100644 index 0000000000000..096c8649c6876 --- /dev/null +++ b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler.go @@ -0,0 +1,137 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build orchestrator +// +build orchestrator + +package k8s + +import ( + model "github.com/DataDog/agent-payload/v5/process" + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/transformers" + corev1 "k8s.io/api/core/v1" + v1 "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" +) + +// ExtractVerticalPodAutoscaler returns the protobuf model corresponding to a Kubernetes Vertical Pod Autoscaler resource. +func ExtractVerticalPodAutoscaler(v *v1.VerticalPodAutoscaler) *model.VerticalPodAutoscaler { + m := &model.VerticalPodAutoscaler{ + Metadata: extractMetadata(&v.ObjectMeta), + Spec: extractVerticalPodAutoscalerSpec(&v.Spec), + Status: extractVerticalPodAutoscalerStatus(&v.Status), + } + m.Tags = append(m.Tags, transformers.RetrieveUnifiedServiceTags(v.ObjectMeta.Labels)...) + return m +} + +// extractVerticalPodAutoscalerSpec converts the Kubernetes spec to our custom one +// https://github.com/kubernetes/autoscaler/blob/master/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1/types.go#L73 +func extractVerticalPodAutoscalerSpec(s *v1.VerticalPodAutoscalerSpec) *model.VerticalPodAutoscalerSpec { + spec := &model.VerticalPodAutoscalerSpec{ + Target: &model.VerticalPodAutoscalerTarget{ + Kind: s.TargetRef.Kind, + Name: s.TargetRef.Name, + }, + ResourcePolicies: extractContainerResourcePolicies(s.ResourcePolicy), + } + if s.UpdatePolicy != nil && s.UpdatePolicy.UpdateMode != nil { + spec.UpdateMode = string(*s.UpdatePolicy.UpdateMode) + } + return spec +} + +// extractContainerResourcePolicy pulls the ContainerResourcePolicy out of PodResourcePolicy +// and converts it to our protobuf model +// https://github.com/kubernetes/autoscaler/blob/master/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1/types.go#L149 +func extractContainerResourcePolicies(p *v1.PodResourcePolicy) []*model.ContainerResourcePolicy { + policies := []*model.ContainerResourcePolicy{} + + for _, policy := range p.ContainerPolicies { + m := model.ContainerResourcePolicy{ + ContainerName: policy.ContainerName, + MinAllowed: extractResourceList(&policy.MinAllowed), + MaxAllowed: extractResourceList(&policy.MaxAllowed), + ControlledResource: extractControlledResources(policy.ControlledResources), + } + if policy.Mode != nil { + m.Mode = string(*policy.Mode) + } + if policy.ControlledValues != nil { + m.ControlledValues = string(*policy.ControlledValues) + } + policies = append(policies, &m) + } + return policies +} + +// extractResourceList converts Kuberentes ResourceLists to our protobuf model +// https://github.com/kubernetes/api/blob/v0.23.8/core/v1/types.go#L5176 +func extractResourceList(rl *corev1.ResourceList) *model.ResourceList { + if rl == nil { + return &model.ResourceList{} + } + + mv := map[string]float64{} + for name, quantity := range *rl { + value, valid := quantity.AsInt64() + if valid { + mv[string(name)] = float64(value) + } else { + mv[string(name)] = quantity.ToDec().AsApproximateFloat64() + } + } + return &model.ResourceList{ + MetricValues: mv, + } +} + +// extractControlledResources converts typed Kuberentes ResourceNames to a slice of strings +// https://github.com/kubernetes/api/blob/v0.23.8/core/v1/types.go#L5147 +func extractControlledResources(rn *[]corev1.ResourceName) []string { + if rn == nil { + return []string{} + } + + names := []string{} + for _, name := range *rn { + names = append(names, string(name)) + } + return names +} + +// extractVerticalPodAutoscalerStatus converts Kubernetes PodAutoscalerStatus to our protobuf model +// https://github.com/kubernetes/autoscaler/blob/master/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1/types.go#L218 +func extractVerticalPodAutoscalerStatus(s *v1.VerticalPodAutoscalerStatus) *model.VerticalPodAutoscalerStatus { + if s == nil { + return &model.VerticalPodAutoscalerStatus{} + } + + status := model.VerticalPodAutoscalerStatus{} + for _, condition := range s.Conditions { + if condition.Type == v1.RecommendationProvided && + condition.Status == corev1.ConditionTrue { + status.LastRecommendedDate = condition.LastTransitionTime.Unix() + } + } + status.Recommendations = extractContainerRecommendations(s.Recommendation.ContainerRecommendations) + return &status +} + +// extractContainerRecommendations converts Kuberentes Recommendations to our protobuf model +// https://github.com/kubernetes/autoscaler/blob/master/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1/types.go#L245 +func extractContainerRecommendations(cr []v1.RecommendedContainerResources) []*model.ContainerRecommendations { + recs := []*model.ContainerRecommendations{} + for _, r := range cr { + rec := model.ContainerRecommendations{ + ContainerName: r.ContainerName, + Target: extractResourceList(&r.Target), + LowerBound: extractResourceList(&r.LowerBound), + UpperBound: extractResourceList(&r.UpperBound), + UncappedTarget: extractResourceList(&r.UncappedTarget), + } + recs = append(recs, &rec) + } + return recs +} diff --git a/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler_test.go b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler_test.go new file mode 100644 index 0000000000000..5c18bf349cb46 --- /dev/null +++ b/pkg/collector/corechecks/cluster/orchestrator/transformers/k8s/verticalpodautoscaler_test.go @@ -0,0 +1,184 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build orchestrator +// +build orchestrator + +package k8s + +import ( + "testing" + "time" + + model "github.com/DataDog/agent-payload/v5/process" + "github.com/stretchr/testify/assert" + autoscaling "k8s.io/api/autoscaling/v1" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + v1 "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/apis/autoscaling.k8s.io/v1" +) + +func TestExtractVerticalPodAutoscaler(t *testing.T) { + exampleTime := metav1.NewTime(time.Date(2021, time.April, 16, 14, 30, 0, 0, time.UTC)) + mode := v1.ContainerScalingModeAuto + updateMode := v1.UpdateModeOff + controlledValues := v1.ContainerControlledValuesRequestsAndLimits + + tests := map[string]struct { + input v1.VerticalPodAutoscaler + expected model.VerticalPodAutoscaler + }{ + "standard": { + input: v1.VerticalPodAutoscaler{ + TypeMeta: metav1.TypeMeta{}, + ObjectMeta: metav1.ObjectMeta{ + Name: "VPATest", + Namespace: "Namespace", + UID: "326331f4-77e2-11ed-a1eb-0242ac120002", + CreationTimestamp: exampleTime, + DeletionTimestamp: &exampleTime, + Labels: map[string]string{ + "app": "my-app", + }, + Annotations: map[string]string{ + "annotation": "my-annotation", + }, + Finalizers: []string{"final", "izers"}, + }, + Spec: v1.VerticalPodAutoscalerSpec{ + TargetRef: &autoscaling.CrossVersionObjectReference{ + Kind: "Deployment", + Name: "My Service", + }, + UpdatePolicy: &v1.PodUpdatePolicy{ + UpdateMode: &updateMode, + }, + ResourcePolicy: &v1.PodResourcePolicy{ + ContainerPolicies: []v1.ContainerResourcePolicy{ + { + ContainerName: "TestContainer", + Mode: &mode, + MinAllowed: map[corev1.ResourceName]resource.Quantity{ + corev1.ResourceCPU: resource.MustParse("12345"), + }, + MaxAllowed: map[corev1.ResourceName]resource.Quantity{ + corev1.ResourceMemory: resource.MustParse("6789"), + }, + ControlledResources: &[]corev1.ResourceName{ + corev1.ResourceCPU, + }, + ControlledValues: &controlledValues, + }, + }, + }, + Recommenders: []*v1.VerticalPodAutoscalerRecommenderSelector{ + { + Name: "Test", + }, + }, + }, + Status: v1.VerticalPodAutoscalerStatus{ + Recommendation: &v1.RecommendedPodResources{ + ContainerRecommendations: []v1.RecommendedContainerResources{ + { + ContainerName: "TestContainer", + Target: map[corev1.ResourceName]resource.Quantity{ + corev1.ResourceCPU: resource.MustParse("2"), + }, + LowerBound: map[corev1.ResourceName]resource.Quantity{ + corev1.ResourceCPU: resource.MustParse("1"), + }, + UpperBound: map[corev1.ResourceName]resource.Quantity{ + corev1.ResourceCPU: resource.MustParse("3"), + }, + UncappedTarget: map[corev1.ResourceName]resource.Quantity{ + corev1.ResourceCPU: resource.MustParse("4"), + }, + }, + }, + }, + Conditions: []v1.VerticalPodAutoscalerCondition{ + { + Type: v1.RecommendationProvided, + Status: corev1.ConditionTrue, + LastTransitionTime: exampleTime, + }, + }, + }, + }, + expected: model.VerticalPodAutoscaler{ + Metadata: &model.Metadata{ + Name: "VPATest", + Namespace: "Namespace", + Uid: "326331f4-77e2-11ed-a1eb-0242ac120002", + CreationTimestamp: exampleTime.Unix(), + DeletionTimestamp: exampleTime.Unix(), + Labels: []string{"app:my-app"}, + Annotations: []string{"annotation:my-annotation"}, + Finalizers: []string{"final", "izers"}, + }, + Spec: &model.VerticalPodAutoscalerSpec{ + Target: &model.VerticalPodAutoscalerTarget{ + Kind: "Deployment", + Name: "My Service", + }, + UpdateMode: string(updateMode), + ResourcePolicies: []*model.ContainerResourcePolicy{ + { + ContainerName: "TestContainer", + Mode: string(mode), + MinAllowed: &model.ResourceList{ + MetricValues: map[string]float64{ + "cpu": float64(12345), + }, + }, + MaxAllowed: &model.ResourceList{ + MetricValues: map[string]float64{ + "memory": float64(6789), + }, + }, + ControlledResource: []string{"cpu"}, + ControlledValues: string(controlledValues), + }, + }, + }, + Status: &model.VerticalPodAutoscalerStatus{ + LastRecommendedDate: exampleTime.Unix(), + Recommendations: []*model.ContainerRecommendations{ + { + ContainerName: "TestContainer", + Target: &model.ResourceList{ + MetricValues: map[string]float64{ + "cpu": float64(2), + }, + }, + LowerBound: &model.ResourceList{ + MetricValues: map[string]float64{ + "cpu": float64(1), + }, + }, + UpperBound: &model.ResourceList{ + MetricValues: map[string]float64{ + "cpu": float64(3), + }, + }, + UncappedTarget: &model.ResourceList{ + MetricValues: map[string]float64{ + "cpu": float64(4), + }, + }, + }, + }, + }, + }, + }, + } + for name, tc := range tests { + t.Run(name, func(t *testing.T) { + assert.Equal(t, &tc.expected, ExtractVerticalPodAutoscaler(&tc.input)) + }) + } +} diff --git a/pkg/collector/corechecks/containerimage/check.go b/pkg/collector/corechecks/containerimage/check.go new file mode 100644 index 0000000000000..71b762f67345a --- /dev/null +++ b/pkg/collector/corechecks/containerimage/check.go @@ -0,0 +1,166 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package containerimage + +import ( + "errors" + "time" + + yaml "gopkg.in/yaml.v2" + + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" + "github.com/DataDog/datadog-agent/pkg/collector/check" + core "github.com/DataDog/datadog-agent/pkg/collector/corechecks" + ddConfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" +) + +const ( + checkName = "container_image" +) + +func init() { + core.RegisterCheck(checkName, CheckFactory) +} + +// Config holds the container_image check configuration +type Config struct { + ChunkSize int `yaml:"chunk_size"` + NewImagesMaxLatencySeconds int `yaml:"new_images_max_latency_seconds"` + PeriodicRefreshSeconds int `yaml:"periodic_refresh_seconds"` +} + +type configValueRange struct { + min int + max int + default_ int +} + +var /* const */ ( + chunkSizeValueRange = &configValueRange{ + min: 1, + max: 100, + default_: 10, + } + + newImagesMaxLatencySecondsValueRange = &configValueRange{ + min: 1, // 1 s + max: 300, // 5 min + default_: 30, // 30 s + } + + periodicRefreshSecondsValueRange = &configValueRange{ + min: 60, // 1 min + max: 86400, // 1 day + default_: 300, // 5 min + } +) + +func validateValue(val *int, range_ *configValueRange) { + if *val == 0 { + *val = range_.default_ + } else if *val < range_.min { + *val = range_.min + } else if *val > range_.max { + *val = range_.max + } +} + +func (c *Config) Parse(data []byte) error { + if err := yaml.Unmarshal(data, c); err != nil { + return err + } + + validateValue(&c.ChunkSize, chunkSizeValueRange) + validateValue(&c.NewImagesMaxLatencySeconds, newImagesMaxLatencySecondsValueRange) + validateValue(&c.PeriodicRefreshSeconds, periodicRefreshSecondsValueRange) + + return nil +} + +// Check reports container images +type Check struct { + core.CheckBase + workloadmetaStore workloadmeta.Store + instance *Config + processor *processor + stopCh chan struct{} +} + +// CheckFactory registers the container_image check +func CheckFactory() check.Check { + return &Check{ + CheckBase: core.NewCheckBase(checkName), + workloadmetaStore: workloadmeta.GetGlobalStore(), + instance: &Config{}, + stopCh: make(chan struct{}), + } +} + +// Configure parses the check configuration and initializes the container_image check +func (c *Check) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { + if !ddConfig.Datadog.GetBool("container_image.enabled") { + return errors.New("collection of container images is disabled") + } + + if err := c.CommonConfigure(integrationConfigDigest, initConfig, config, source); err != nil { + return err + } + + if err := c.instance.Parse(config); err != nil { + return err + } + + sender, err := c.GetSender() + if err != nil { + return err + } + + c.processor = newProcessor(sender, c.instance.ChunkSize, time.Duration(c.instance.NewImagesMaxLatencySeconds)*time.Second) + + return nil +} + +// Run starts the container_image check +func (c *Check) Run() error { + log.Infof("Starting long-running check %q", c.ID()) + defer log.Infof("Shutting down long-running check %q", c.ID()) + + imgEventsCh := c.workloadmetaStore.Subscribe( + checkName, + workloadmeta.NormalPriority, + workloadmeta.NewFilter( + []workloadmeta.Kind{workloadmeta.KindContainerImageMetadata}, + workloadmeta.SourceAll, + workloadmeta.EventTypeSet, // We don’t care about images removal because we just have to wait for them to expire on BE side once we stopped refreshing them periodically. + ), + ) + + imgRefreshTicker := time.NewTicker(time.Duration(c.instance.PeriodicRefreshSeconds) * time.Second) + + for { + select { + case eventBundle := <-imgEventsCh: + c.processor.processEvents(eventBundle) + case <-imgRefreshTicker.C: + c.processor.processRefresh(c.workloadmetaStore.ListImages()) + case <-c.stopCh: + c.processor.stop() + return nil + } + } +} + +// Stop stops the container_image check +func (c *Check) Stop() { + close(c.stopCh) +} + +// Interval returns 0. It makes container_image a long-running check +func (c *Check) Interval() time.Duration { + return 0 +} diff --git a/pkg/collector/corechecks/containerimage/processor.go b/pkg/collector/corechecks/containerimage/processor.go new file mode 100644 index 0000000000000..4287adc5d7029 --- /dev/null +++ b/pkg/collector/corechecks/containerimage/processor.go @@ -0,0 +1,128 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package containerimage + +import ( + "strings" + "time" + + "github.com/DataDog/datadog-agent/pkg/aggregator" + queue "github.com/DataDog/datadog-agent/pkg/util/aggregatingqueue" + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" + + model "github.com/DataDog/agent-payload/v5/contimage" + + "google.golang.org/protobuf/types/known/timestamppb" +) + +type processor struct { + queue chan *model.ContainerImage +} + +func newProcessor(sender aggregator.Sender, maxNbItem int, maxRetentionTime time.Duration) *processor { + return &processor{ + queue: queue.NewQueue(maxNbItem, maxRetentionTime, func(images []*model.ContainerImage) { + sender.ContainerImage([]model.ContainerImagePayload{ + { + Version: "v1", + Images: images, + }, + }) + }), + } +} + +func (p *processor) processEvents(evBundle workloadmeta.EventBundle) { + close(evBundle.Ch) + + log.Tracef("Processing %d events", len(evBundle.Events)) + + for _, event := range evBundle.Events { + p.processImage(event.Entity.(*workloadmeta.ContainerImageMetadata)) + } +} + +func (p *processor) processRefresh(allImages []*workloadmeta.ContainerImageMetadata) { + // So far, the check is refreshing all the images every 5 minutes all together. + for _, img := range allImages { + p.processImage(img) + } +} + +func (p *processor) processImage(img *workloadmeta.ContainerImageMetadata) { + var lastCreated *timestamppb.Timestamp = nil + layers := make([]*model.ContainerImage_ContainerImageLayer, 0, len(img.Layers)) + for _, layer := range img.Layers { + var created *timestamppb.Timestamp = nil + if layer.History.Created != nil { + created = timestamppb.New(*layer.History.Created) + lastCreated = created + } + + layers = append(layers, &model.ContainerImage_ContainerImageLayer{ + Urls: layer.URLs, + MediaType: layer.MediaType, + Digest: layer.Digest, + Size: layer.SizeBytes, + History: &model.ContainerImage_ContainerImageLayer_History{ + Created: created, + CreatedBy: layer.History.CreatedBy, + Author: layer.History.Author, + Comment: layer.History.Comment, + EmptyLayer: layer.History.EmptyLayer, + }, + }) + } + + for _, repoDigest := range img.RepoDigests { + repo := strings.SplitN(repoDigest, "@sha256:", 2)[0] + repoSplitted := strings.Split(repo, "/") + registry := "" + if len(repoSplitted) > 2 { + registry = repoSplitted[0] + } + shortName := repoSplitted[len(repoSplitted)-1] + + id := repo + "@" + img.ID + + tags := make([]string, 0, len(img.RepoTags)) + for _, repoTag := range img.RepoTags { + if strings.HasPrefix(repoTag, repo+":") { + tags = append(tags, strings.SplitN(repoTag, ":", 2)[1]) + } + } + + repoDigests := make([]string, 0, 1) + for _, repoDigest := range img.RepoDigests { + if strings.HasPrefix(repoDigest, repo+"@sha256:") { + repoDigests = append(repoDigests, repoDigest) + } + } + + p.queue <- &model.ContainerImage{ + Id: id, + Name: repo, + Registry: registry, + ShortName: shortName, + Tags: tags, + Digest: img.ID, + Size: img.SizeBytes, + RepoDigests: repoDigests, + Os: &model.ContainerImage_OperatingSystem{ + Name: img.OS, + Version: img.OSVersion, + Architecture: img.Architecture, + }, + Layers: layers, + BuiltAt: lastCreated, + } + } +} + +func (p *processor) stop() { + close(p.queue) +} diff --git a/pkg/collector/corechecks/containerimage/processor_test.go b/pkg/collector/corechecks/containerimage/processor_test.go new file mode 100644 index 0000000000000..3dd306396b3a7 --- /dev/null +++ b/pkg/collector/corechecks/containerimage/processor_test.go @@ -0,0 +1,246 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package containerimage + +import ( + "testing" + "time" + + model "github.com/DataDog/agent-payload/v5/contimage" + "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/collector/check" + "github.com/DataDog/datadog-agent/pkg/util/pointer" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" + + "github.com/golang/protobuf/ptypes/timestamp" + v1 "github.com/opencontainers/image-spec/specs-go/v1" + + "github.com/stretchr/testify/mock" +) + +func TestProcessEvents(t *testing.T) { + sender := mocksender.NewMockSender(check.ID("")) + sender.On("ContainerImage", mock.Anything, mock.Anything).Return() + p := newProcessor(sender, 2, 50*time.Millisecond) + + p.processEvents(workloadmeta.EventBundle{ + Events: []workloadmeta.Event{ + { + Type: workloadmeta.EventTypeSet, + Entity: &workloadmeta.ContainerImageMetadata{ + EntityID: workloadmeta.EntityID{ + Kind: workloadmeta.KindContainerImageMetadata, + ID: "sha256:9634b84c45c6ad220c3d0d2305aaa5523e47d6d43649c9bbeda46ff010b4aacd", + }, + RepoTags: []string{ + "datadog/agent:7-rc", + "datadog/agent:7.41.1-rc.1", + "gcr.io/datadoghq/agent:7-rc", + "gcr.io/datadoghq/agent:7.41.1-rc.1", + "public.ecr.aws/datadog/agent:7-rc", + "public.ecr.aws/datadog/agent:7.41.1-rc.1", + }, + RepoDigests: []string{ + "datadog/agent@sha256:052f1fdf4f9a7117d36a1838ab60782829947683007c34b69d4991576375c409", + "gcr.io/datadoghq/agent@sha256:052f1fdf4f9a7117d36a1838ab60782829947683007c34b69d4991576375c409", + "public.ecr.aws/datadog/agent@sha256:052f1fdf4f9a7117d36a1838ab60782829947683007c34b69d4991576375c409", + }, + SizeBytes: 42, + OS: "DOS", + OSVersion: "6.22", + Architecture: "80486DX", + Layers: []workloadmeta.ContainerImageLayer{ + { + MediaType: "media", + Digest: "digest_layer_1", + SizeBytes: 43, + URLs: []string{"url"}, + History: v1.History{ + Created: pointer.Ptr(time.Unix(42, 43)), + }, + }, + { + MediaType: "media", + Digest: "digest_layer_2", + URLs: []string{"url"}, + SizeBytes: 44, + History: v1.History{ + Created: pointer.Ptr(time.Unix(43, 44)), + }, + }, + }, + }, + }, + }, + Ch: make(chan struct{}), + }) + + sender.AssertNumberOfCalls(t, "ContainerImage", 1) + sender.AssertContainerImage(t, []model.ContainerImagePayload{ + { + Version: "v1", + Images: []*model.ContainerImage{ + { + Id: "datadog/agent@sha256:9634b84c45c6ad220c3d0d2305aaa5523e47d6d43649c9bbeda46ff010b4aacd", + Name: "datadog/agent", + Registry: "", + ShortName: "agent", + Tags: []string{ + "7-rc", + "7.41.1-rc.1", + }, + Digest: "sha256:9634b84c45c6ad220c3d0d2305aaa5523e47d6d43649c9bbeda46ff010b4aacd", + Size: 42, + RepoDigests: []string{"datadog/agent@sha256:052f1fdf4f9a7117d36a1838ab60782829947683007c34b69d4991576375c409"}, + Os: &model.ContainerImage_OperatingSystem{ + Name: "DOS", + Version: "6.22", + Architecture: "80486DX", + }, + Layers: []*model.ContainerImage_ContainerImageLayer{ + { + Urls: []string{"url"}, + MediaType: "media", + Digest: "digest_layer_1", + Size: 43, + History: &model.ContainerImage_ContainerImageLayer_History{ + Created: ×tamp.Timestamp{ + Seconds: 42, + Nanos: 43, + }, + }, + }, + { + Urls: []string{"url"}, + MediaType: "media", + Digest: "digest_layer_2", + Size: 44, + History: &model.ContainerImage_ContainerImageLayer_History{ + Created: ×tamp.Timestamp{ + Seconds: 43, + Nanos: 44, + }, + }, + }, + }, + BuiltAt: ×tamp.Timestamp{ + Seconds: 43, + Nanos: 44, + }, + }, + { + Id: "gcr.io/datadoghq/agent@sha256:9634b84c45c6ad220c3d0d2305aaa5523e47d6d43649c9bbeda46ff010b4aacd", + Name: "gcr.io/datadoghq/agent", + Registry: "gcr.io", + ShortName: "agent", + Tags: []string{ + "7-rc", + "7.41.1-rc.1", + }, + Digest: "sha256:9634b84c45c6ad220c3d0d2305aaa5523e47d6d43649c9bbeda46ff010b4aacd", + Size: 42, + RepoDigests: []string{"gcr.io/datadoghq/agent@sha256:052f1fdf4f9a7117d36a1838ab60782829947683007c34b69d4991576375c409"}, + Os: &model.ContainerImage_OperatingSystem{ + Name: "DOS", + Version: "6.22", + Architecture: "80486DX", + }, + Layers: []*model.ContainerImage_ContainerImageLayer{ + { + Urls: []string{"url"}, + MediaType: "media", + Digest: "digest_layer_1", + Size: 43, + History: &model.ContainerImage_ContainerImageLayer_History{ + Created: ×tamp.Timestamp{ + Seconds: 42, + Nanos: 43, + }, + }, + }, + { + Urls: []string{"url"}, + MediaType: "media", + Digest: "digest_layer_2", + Size: 44, + History: &model.ContainerImage_ContainerImageLayer_History{ + Created: ×tamp.Timestamp{ + Seconds: 43, + Nanos: 44, + }, + }, + }, + }, + BuiltAt: ×tamp.Timestamp{ + Seconds: 43, + Nanos: 44, + }, + }, + }, + }, + }) + + time.Sleep(100 * time.Millisecond) + + sender.AssertNumberOfCalls(t, "ContainerImage", 2) + sender.AssertContainerImage(t, []model.ContainerImagePayload{ + { + Version: "v1", + Images: []*model.ContainerImage{ + { + Id: "public.ecr.aws/datadog/agent@sha256:9634b84c45c6ad220c3d0d2305aaa5523e47d6d43649c9bbeda46ff010b4aacd", + Name: "public.ecr.aws/datadog/agent", + Registry: "public.ecr.aws", + ShortName: "agent", + Tags: []string{ + "7-rc", + "7.41.1-rc.1", + }, + Digest: "sha256:9634b84c45c6ad220c3d0d2305aaa5523e47d6d43649c9bbeda46ff010b4aacd", + Size: 42, + RepoDigests: []string{"public.ecr.aws/datadog/agent@sha256:052f1fdf4f9a7117d36a1838ab60782829947683007c34b69d4991576375c409"}, + Os: &model.ContainerImage_OperatingSystem{ + Name: "DOS", + Version: "6.22", + Architecture: "80486DX", + }, + Layers: []*model.ContainerImage_ContainerImageLayer{ + { + Urls: []string{"url"}, + MediaType: "media", + Digest: "digest_layer_1", + Size: 43, + History: &model.ContainerImage_ContainerImageLayer_History{ + Created: ×tamp.Timestamp{ + Seconds: 42, + Nanos: 43, + }, + }, + }, + { + Urls: []string{"url"}, + MediaType: "media", + Digest: "digest_layer_2", + Size: 44, + History: &model.ContainerImage_ContainerImageLayer_History{ + Created: ×tamp.Timestamp{ + Seconds: 43, + Nanos: 44, + }, + }, + }, + }, + BuiltAt: ×tamp.Timestamp{ + Seconds: 43, + Nanos: 44, + }, + }, + }, + }, + }) + + p.stop() +} diff --git a/pkg/collector/corechecks/containers/containerd/utils.go b/pkg/collector/corechecks/containers/containerd/utils.go index 13f385bc0d838..9bd5c48863dc4 100644 --- a/pkg/collector/corechecks/containers/containerd/utils.go +++ b/pkg/collector/corechecks/containers/containerd/utils.go @@ -27,7 +27,7 @@ func getProcessorFilter(legacyFilter *containers.Filter) generic.ContainerFilter } func getImageTags(imageName string) []string { - long, short, tag, err := containers.SplitImageName(imageName) + long, _, short, tag, err := containers.SplitImageName(imageName) if err != nil { return []string{fmt.Sprintf("image:%s", imageName)} } diff --git a/pkg/collector/corechecks/containers/cri/check_metrics_extension.go b/pkg/collector/corechecks/containers/cri/check_metrics_extension.go index 3b33b8c4aab1d..1344582aac0e1 100644 --- a/pkg/collector/corechecks/containers/cri/check_metrics_extension.go +++ b/pkg/collector/corechecks/containers/cri/check_metrics_extension.go @@ -56,8 +56,8 @@ func (cext *criCustomMetricsExtension) Process(tags []string, container *workloa return } - cext.sender(cext.aggSender.Gauge, "cri.disk.used", pointer.UIntToFloatPtr(criStats.GetWritableLayer().GetUsedBytes().GetValue()), tags) - cext.sender(cext.aggSender.Gauge, "cri.disk.inodes", pointer.UIntToFloatPtr(criStats.GetWritableLayer().GetInodesUsed().GetValue()), tags) + cext.sender(cext.aggSender.Gauge, "cri.disk.used", pointer.Ptr(float64(criStats.GetWritableLayer().GetUsedBytes().GetValue())), tags) + cext.sender(cext.aggSender.Gauge, "cri.disk.inodes", pointer.Ptr(float64(criStats.GetWritableLayer().GetInodesUsed().GetValue())), tags) } // PostProcess is called once during each check run, after all calls to `Process` diff --git a/pkg/collector/corechecks/containers/doc.go b/pkg/collector/corechecks/containers/doc.go index 5dabdf1e866db..86e942c722187 100644 --- a/pkg/collector/corechecks/containers/doc.go +++ b/pkg/collector/corechecks/containers/doc.go @@ -5,6 +5,5 @@ /* Package containers provides core checks for containers and orchestrators - */ package containers diff --git a/pkg/collector/corechecks/containers/docker/check_linux_test.go b/pkg/collector/corechecks/containers/docker/check_linux_test.go index c33d516c824d5..7bd1036a59cf8 100644 --- a/pkg/collector/corechecks/containers/docker/check_linux_test.go +++ b/pkg/collector/corechecks/containers/docker/check_linux_test.go @@ -114,28 +114,28 @@ func TestDockerNetworkExtension(t *testing.T) { NetworkStats: &metrics.ContainerNetworkStats{ Interfaces: map[string]metrics.InterfaceNetStats{ "eth0": { - BytesSent: pointer.Float64Ptr(1), - BytesRcvd: pointer.Float64Ptr(1), - PacketsSent: pointer.Float64Ptr(1), - PacketsRcvd: pointer.Float64Ptr(1), + BytesSent: pointer.Ptr(1.0), + BytesRcvd: pointer.Ptr(1.0), + PacketsSent: pointer.Ptr(1.0), + PacketsRcvd: pointer.Ptr(1.0), }, "docker0": { - BytesSent: pointer.Float64Ptr(2), - BytesRcvd: pointer.Float64Ptr(2), - PacketsSent: pointer.Float64Ptr(2), - PacketsRcvd: pointer.Float64Ptr(2), + BytesSent: pointer.Ptr(2.0), + BytesRcvd: pointer.Ptr(2.0), + PacketsSent: pointer.Ptr(2.0), + PacketsRcvd: pointer.Ptr(2.0), }, "cbr0": { - BytesSent: pointer.Float64Ptr(3), - BytesRcvd: pointer.Float64Ptr(3), - PacketsSent: pointer.Float64Ptr(3), - PacketsRcvd: pointer.Float64Ptr(3), + BytesSent: pointer.Ptr(3.0), + BytesRcvd: pointer.Ptr(3.0), + PacketsSent: pointer.Ptr(3.0), + PacketsRcvd: pointer.Ptr(3.0), }, "vethc71e3170": { - BytesSent: pointer.Float64Ptr(4), - BytesRcvd: pointer.Float64Ptr(4), - PacketsSent: pointer.Float64Ptr(4), - PacketsRcvd: pointer.Float64Ptr(4), + BytesSent: pointer.Ptr(4.0), + BytesRcvd: pointer.Ptr(4.0), + PacketsSent: pointer.Ptr(4.0), + PacketsRcvd: pointer.Ptr(4.0), }, }, }, @@ -166,10 +166,10 @@ func TestDockerNetworkExtension(t *testing.T) { NetworkStats: &metrics.ContainerNetworkStats{ Interfaces: map[string]metrics.InterfaceNetStats{ "eth0": { - BytesSent: pointer.Float64Ptr(5), - BytesRcvd: pointer.Float64Ptr(5), - PacketsSent: pointer.Float64Ptr(5), - PacketsRcvd: pointer.Float64Ptr(5), + BytesSent: pointer.Ptr(5.0), + BytesRcvd: pointer.Ptr(5.0), + PacketsSent: pointer.Ptr(5.0), + PacketsRcvd: pointer.Ptr(5.0), }, }, }, @@ -212,16 +212,16 @@ func TestDockerNetworkExtension(t *testing.T) { NetworkStats: &metrics.ContainerNetworkStats{ Interfaces: map[string]metrics.InterfaceNetStats{ "eth0": { - BytesSent: pointer.Float64Ptr(6), - BytesRcvd: pointer.Float64Ptr(6), - PacketsSent: pointer.Float64Ptr(6), - PacketsRcvd: pointer.Float64Ptr(6), + BytesSent: pointer.Ptr(6.0), + BytesRcvd: pointer.Ptr(6.0), + PacketsSent: pointer.Ptr(6.0), + PacketsRcvd: pointer.Ptr(6.0), }, "eth1": { - BytesSent: pointer.Float64Ptr(7), - BytesRcvd: pointer.Float64Ptr(7), - PacketsSent: pointer.Float64Ptr(7), - PacketsRcvd: pointer.Float64Ptr(7), + BytesSent: pointer.Ptr(7.0), + BytesRcvd: pointer.Ptr(7.0), + PacketsSent: pointer.Ptr(7.0), + PacketsRcvd: pointer.Ptr(7.0), }, }, }, diff --git a/pkg/collector/corechecks/containers/docker/utils.go b/pkg/collector/corechecks/containers/docker/utils.go index b5a449dde440b..49d76d2f77923 100644 --- a/pkg/collector/corechecks/containers/docker/utils.go +++ b/pkg/collector/corechecks/containers/docker/utils.go @@ -42,7 +42,7 @@ func getImageTagsFromContainer(taggerEntityID string, resolvedImageName string, } func getImageTags(imageName string) ([]string, error) { - long, short, tag, err := containers.SplitImageName(imageName) + long, _, short, tag, err := containers.SplitImageName(imageName) if err != nil { return nil, err } diff --git a/pkg/collector/corechecks/containers/generic/processor.go b/pkg/collector/corechecks/containers/generic/processor.go index 23b9f73736676..88dfcc4ea5d5e 100644 --- a/pkg/collector/corechecks/containers/generic/processor.go +++ b/pkg/collector/corechecks/containers/generic/processor.go @@ -135,7 +135,7 @@ func (p *Processor) Run(sender aggregator.Sender, cacheValidity time.Duration) e func (p *Processor) processContainer(sender aggregator.Sender, tags []string, container *workloadmeta.Container, containerStats *metrics.ContainerStats) error { if uptime := time.Since(container.State.StartedAt); uptime >= 0 { - p.sendMetric(sender.Gauge, "container.uptime", pointer.Float64Ptr(uptime.Seconds()), tags) + p.sendMetric(sender.Gauge, "container.uptime", pointer.Ptr(uptime.Seconds()), tags) } if containerStats == nil { @@ -151,7 +151,7 @@ func (p *Processor) processContainer(sender aggregator.Sender, tags []string, co p.sendMetric(sender.Rate, "container.cpu.throttled.periods", containerStats.CPU.ThrottledPeriods, tags) // Convert CPU Limit to nanoseconds to allow easy percentage computation in the App. if containerStats.CPU.Limit != nil { - p.sendMetric(sender.Gauge, "container.cpu.limit", pointer.Float64Ptr(*containerStats.CPU.Limit*float64(time.Second/100)), tags) + p.sendMetric(sender.Gauge, "container.cpu.limit", pointer.Ptr(*containerStats.CPU.Limit*float64(time.Second/100)), tags) } } diff --git a/pkg/collector/corechecks/containers/generic/processor_network_test.go b/pkg/collector/corechecks/containers/generic/processor_network_test.go index 9c2f14041bb77..4a72a63f6871d 100644 --- a/pkg/collector/corechecks/containers/generic/processor_network_test.go +++ b/pkg/collector/corechecks/containers/generic/processor_network_test.go @@ -38,20 +38,20 @@ func TestNetworkProcessorExtension(t *testing.T) { fakeTagger.SetTags(containers.BuildTaggerEntityName(container1.ID), "foo", []string{"low:common"}, []string{"orch:common12"}, []string{"id:container1"}, nil) mockCollector.SetContainerEntry(container1.ID, mock.ContainerEntry{ NetworkStats: &metrics.ContainerNetworkStats{ - BytesSent: pointer.Float64Ptr(12), - BytesRcvd: pointer.Float64Ptr(12), - PacketsSent: pointer.Float64Ptr(12), - PacketsRcvd: pointer.Float64Ptr(12), + BytesSent: pointer.Ptr(12.0), + BytesRcvd: pointer.Ptr(12.0), + PacketsSent: pointer.Ptr(12.0), + PacketsRcvd: pointer.Ptr(12.0), Interfaces: map[string]metrics.InterfaceNetStats{ "eth0": { - BytesSent: pointer.Float64Ptr(12), - BytesRcvd: pointer.Float64Ptr(12), - PacketsSent: pointer.Float64Ptr(12), - PacketsRcvd: pointer.Float64Ptr(12), + BytesSent: pointer.Ptr(12.0), + BytesRcvd: pointer.Ptr(12.0), + PacketsSent: pointer.Ptr(12.0), + PacketsRcvd: pointer.Ptr(12.0), }, }, - NetworkIsolationGroupID: pointer.UInt64Ptr(100), - UsingHostNetwork: pointer.BoolPtr(false), + NetworkIsolationGroupID: pointer.Ptr(uint64(100)), + UsingHostNetwork: pointer.Ptr(false), }, }) @@ -59,20 +59,20 @@ func TestNetworkProcessorExtension(t *testing.T) { fakeTagger.SetTags(containers.BuildTaggerEntityName(container2.ID), "foo", []string{"low:common"}, []string{"orch:common12"}, []string{"id:container2"}, nil) mockCollector.SetContainerEntry(container2.ID, mock.ContainerEntry{ NetworkStats: &metrics.ContainerNetworkStats{ - BytesSent: pointer.Float64Ptr(12), - BytesRcvd: pointer.Float64Ptr(12), - PacketsSent: pointer.Float64Ptr(12), - PacketsRcvd: pointer.Float64Ptr(12), + BytesSent: pointer.Ptr(12.0), + BytesRcvd: pointer.Ptr(12.0), + PacketsSent: pointer.Ptr(12.0), + PacketsRcvd: pointer.Ptr(12.0), Interfaces: map[string]metrics.InterfaceNetStats{ "eth0": { - BytesSent: pointer.Float64Ptr(12), - BytesRcvd: pointer.Float64Ptr(12), - PacketsSent: pointer.Float64Ptr(12), - PacketsRcvd: pointer.Float64Ptr(12), + BytesSent: pointer.Ptr(12.0), + BytesRcvd: pointer.Ptr(12.0), + PacketsSent: pointer.Ptr(12.0), + PacketsRcvd: pointer.Ptr(12.0), }, }, - NetworkIsolationGroupID: pointer.UInt64Ptr(100), - UsingHostNetwork: pointer.BoolPtr(false), + NetworkIsolationGroupID: pointer.Ptr(uint64(100)), + UsingHostNetwork: pointer.Ptr(false), }, }) @@ -80,16 +80,16 @@ func TestNetworkProcessorExtension(t *testing.T) { fakeTagger.SetTags(containers.BuildTaggerEntityName(container3.ID), "foo", []string{"low:common"}, []string{"orch:standalone3"}, []string{"id:container3"}, nil) mockCollector.SetContainerEntry(container3.ID, mock.ContainerEntry{ NetworkStats: &metrics.ContainerNetworkStats{ - BytesSent: pointer.Float64Ptr(3), - BytesRcvd: pointer.Float64Ptr(3), - PacketsSent: pointer.Float64Ptr(3), - PacketsRcvd: pointer.Float64Ptr(3), + BytesSent: pointer.Ptr(3.0), + BytesRcvd: pointer.Ptr(3.0), + PacketsSent: pointer.Ptr(3.0), + PacketsRcvd: pointer.Ptr(3.0), Interfaces: map[string]metrics.InterfaceNetStats{ "eth0": { - BytesSent: pointer.Float64Ptr(3), - BytesRcvd: pointer.Float64Ptr(3), - PacketsSent: pointer.Float64Ptr(3), - PacketsRcvd: pointer.Float64Ptr(3), + BytesSent: pointer.Ptr(3.0), + BytesRcvd: pointer.Ptr(3.0), + PacketsSent: pointer.Ptr(3.0), + PacketsRcvd: pointer.Ptr(3.0), }, }, }, @@ -99,20 +99,20 @@ func TestNetworkProcessorExtension(t *testing.T) { fakeTagger.SetTags(containers.BuildTaggerEntityName(container4.ID), "foo", []string{"low:common"}, []string{"orch:standalone4"}, []string{"id:container4"}, nil) mockCollector.SetContainerEntry(container4.ID, mock.ContainerEntry{ NetworkStats: &metrics.ContainerNetworkStats{ - BytesSent: pointer.Float64Ptr(4), - BytesRcvd: pointer.Float64Ptr(4), - PacketsSent: pointer.Float64Ptr(4), - PacketsRcvd: pointer.Float64Ptr(4), + BytesSent: pointer.Ptr(4.0), + BytesRcvd: pointer.Ptr(4.0), + PacketsSent: pointer.Ptr(4.0), + PacketsRcvd: pointer.Ptr(4.0), Interfaces: map[string]metrics.InterfaceNetStats{ "eth0": { - BytesSent: pointer.Float64Ptr(4), - BytesRcvd: pointer.Float64Ptr(4), - PacketsSent: pointer.Float64Ptr(4), - PacketsRcvd: pointer.Float64Ptr(4), + BytesSent: pointer.Ptr(4.0), + BytesRcvd: pointer.Ptr(4.0), + PacketsSent: pointer.Ptr(4.0), + PacketsRcvd: pointer.Ptr(4.0), }, }, - NetworkIsolationGroupID: pointer.UInt64Ptr(400), - UsingHostNetwork: pointer.BoolPtr(false), + NetworkIsolationGroupID: pointer.Ptr(uint64(400)), + UsingHostNetwork: pointer.Ptr(false), }, }) @@ -120,20 +120,20 @@ func TestNetworkProcessorExtension(t *testing.T) { fakeTagger.SetTags(containers.BuildTaggerEntityName(container5.ID), "foo", []string{"low:common"}, []string{"orch:standalone5"}, []string{"id:container5"}, nil) mockCollector.SetContainerEntry(container5.ID, mock.ContainerEntry{ NetworkStats: &metrics.ContainerNetworkStats{ - BytesSent: pointer.Float64Ptr(5), - BytesRcvd: pointer.Float64Ptr(5), - PacketsSent: pointer.Float64Ptr(5), - PacketsRcvd: pointer.Float64Ptr(5), + BytesSent: pointer.Ptr(5.0), + BytesRcvd: pointer.Ptr(5.0), + PacketsSent: pointer.Ptr(5.0), + PacketsRcvd: pointer.Ptr(5.0), Interfaces: map[string]metrics.InterfaceNetStats{ "eth0": { - BytesSent: pointer.Float64Ptr(5), - BytesRcvd: pointer.Float64Ptr(5), - PacketsSent: pointer.Float64Ptr(5), - PacketsRcvd: pointer.Float64Ptr(5), + BytesSent: pointer.Ptr(5.0), + BytesRcvd: pointer.Ptr(5.0), + PacketsSent: pointer.Ptr(5.0), + PacketsRcvd: pointer.Ptr(5.0), }, }, - NetworkIsolationGroupID: pointer.UInt64Ptr(1), - UsingHostNetwork: pointer.BoolPtr(true), + NetworkIsolationGroupID: pointer.Ptr(uint64(1)), + UsingHostNetwork: pointer.Ptr(true), }, }) diff --git a/pkg/collector/corechecks/ebpf/c/runtime/cgroup.h b/pkg/collector/corechecks/ebpf/c/runtime/cgroup.h index f3f225f553514..3ddc3d994dc2b 100644 --- a/pkg/collector/corechecks/ebpf/c/runtime/cgroup.h +++ b/pkg/collector/corechecks/ebpf/c/runtime/cgroup.h @@ -10,7 +10,7 @@ static __always_inline int get_cgroup_name(char *buf, size_t sz) { if (!bpf_helper_exists(BPF_FUNC_get_current_task)) { - return -1; + return 0; } __builtin_memset(buf, 0, sz); struct task_struct *cur_tsk = (struct task_struct *)bpf_get_current_task(); @@ -25,10 +25,10 @@ static __always_inline int get_cgroup_name(char *buf, size_t sz) { #endif const char *name = BPF_CORE_READ(cur_tsk, cgroups, subsys[cgrp_id], cgroup, kn, name); if (bpf_probe_read_kernel_str(buf, sz, name) < 0) { - return -1; + return 0; } - return 0; + return 1; } #endif /* defined(BPF_CGROUP_H) */ diff --git a/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern-user.h b/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern-user.h index 14b048d23b6a4..5bc7c44c34d4c 100644 --- a/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern-user.h +++ b/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern-user.h @@ -1,7 +1,7 @@ #ifndef TCP_QUEUE_LENGTH_KERN_USER_H #define TCP_QUEUE_LENGTH_KERN_USER_H -#include +#include "ktypes.h" struct stats_key { char cgroup_name[129]; diff --git a/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern.c b/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern.c index 02c0267655d7e..9bacfd2d633cd 100644 --- a/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern.c +++ b/pkg/collector/corechecks/ebpf/c/runtime/tcp-queue-length-kern.c @@ -1,16 +1,21 @@ -#include "kconfig.h" #include "ktypes.h" -#include -#include "bpf_helpers.h" -#include "map-defs.h" -#include "cgroup.h" -#include "tcp-queue-length-kern-user.h" +#ifdef COMPILE_RUNTIME +#include "kconfig.h" +#include #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 8, 0) // 4.8 is the first version where `bpf_get_current_task` is available #error Versions of Linux previous to 4.8.0 are not supported by this probe #endif +#endif + +#include "tcp-queue-length-kern-user.h" +#include "cgroup.h" + +#include "bpf_tracing.h" +#include "bpf_core_read.h" +#include "map-defs.h" /* * The `tcp_queue_stats` map is used to share with the userland program system-probe @@ -26,7 +31,6 @@ BPF_HASH_MAP(who_recvmsg, u64, struct sock *, 100) BPF_HASH_MAP(who_sendmsg, u64, struct sock *, 100) -// TODO: replace all `bpf_probe_read` by `bpf_probe_read_kernel` once we can assume that we have at least kernel 5.5 static __always_inline int check_sock(struct sock *sk) { struct stats_value zero = { .read_buffer_max_usage = 0, @@ -34,7 +38,9 @@ static __always_inline int check_sock(struct sock *sk) { }; struct stats_key k; - get_cgroup_name(k.cgroup_name, sizeof(k.cgroup_name)); + if (!get_cgroup_name(k.cgroup_name, sizeof(k.cgroup_name))) { + return 0; + } bpf_map_update_elem(&tcp_queue_stats, &k, &zero, BPF_NOEXIST); struct stats_value *v = bpf_map_lookup_elem(&tcp_queue_stats, &k); @@ -42,55 +48,55 @@ static __always_inline int check_sock(struct sock *sk) { return 0; } - int rqueue_size, wqueue_size; - bpf_probe_read(&rqueue_size, sizeof(rqueue_size), (void *)&sk->sk_rcvbuf); - bpf_probe_read(&wqueue_size, sizeof(wqueue_size), (void *)&sk->sk_sndbuf); + int rqueue_size = BPF_CORE_READ(sk, sk_rcvbuf); + int wqueue_size = BPF_CORE_READ(sk, sk_sndbuf); - const struct tcp_sock *tp = tcp_sk(sk); - u32 rcv_nxt, copied_seq, write_seq, snd_una; - bpf_probe_read(&rcv_nxt, sizeof(rcv_nxt), (void *)&tp->rcv_nxt); // What we want to receive next - bpf_probe_read(&copied_seq, sizeof(copied_seq), (void *)&tp->copied_seq); // Head of yet unread data - bpf_probe_read(&write_seq, sizeof(write_seq), (void *)&tp->write_seq); // Tail(+1) of data held in tcp send buffer - bpf_probe_read(&snd_una, sizeof(snd_una), (void *)&tp->snd_una); // First byte we want an ack for + const struct tcp_sock *tp = (struct tcp_sock *)sk; + u32 rcv_nxt = BPF_CORE_READ(tp, rcv_nxt); // What we want to receive next + u32 copied_seq = BPF_CORE_READ(tp, copied_seq); // Head of yet unread data + u32 write_seq = BPF_CORE_READ(tp, write_seq); // Tail(+1) of data held in tcp send buffer + u32 snd_una = BPF_CORE_READ(tp, snd_una); // First byte we want an ack for u32 rqueue = rcv_nxt < copied_seq ? 0 : rcv_nxt - copied_seq; - if (rqueue < 0) + if (rqueue < 0) { rqueue = 0; + } u32 wqueue = write_seq - snd_una; u32 rqueue_usage = 1000 * rqueue / rqueue_size; u32 wqueue_usage = 1000 * wqueue / wqueue_size; - if (rqueue_usage > v->read_buffer_max_usage) + if (rqueue_usage > v->read_buffer_max_usage) { v->read_buffer_max_usage = rqueue_usage; - if (wqueue_usage > v->write_buffer_max_usage) + } + if (wqueue_usage > v->write_buffer_max_usage) { v->write_buffer_max_usage = wqueue_usage; + } return 0; } SEC("kprobe/tcp_recvmsg") -int kprobe__tcp_recvmsg(struct pt_regs *ctx) { - struct sock *sk = (struct sock*)PT_REGS_PARM1(ctx); +int BPF_KPROBE(kprobe__tcp_recvmsg, struct sock *sk) { u64 pid_tgid = bpf_get_current_pid_tgid(); bpf_map_update_elem(&who_recvmsg, &pid_tgid, &sk, BPF_ANY); return check_sock(sk); } SEC("kretprobe/tcp_recvmsg") -int kretprobe__tcp_recvmsg(struct pt_regs *ctx) { +int BPF_KRETPROBE(kretprobe__tcp_recvmsg) { u64 pid_tgid = bpf_get_current_pid_tgid(); struct sock **sk = bpf_map_lookup_elem(&who_recvmsg, &pid_tgid); bpf_map_delete_elem(&who_recvmsg, &pid_tgid); - if (sk) + if (sk) { return check_sock(*sk); + } return 0; } SEC("kprobe/tcp_sendmsg") -int kprobe__tcp_sendmsg(struct pt_regs *ctx) { - struct sock *sk = (struct sock*)PT_REGS_PARM1(ctx); +int BPF_KPROBE(kprobe__tcp_sendmsg, struct sock *sk) { u64 pid_tgid = bpf_get_current_pid_tgid(); bpf_map_update_elem(&who_sendmsg, &pid_tgid, &sk, BPF_ANY); @@ -98,17 +104,16 @@ int kprobe__tcp_sendmsg(struct pt_regs *ctx) { } SEC("kretprobe/tcp_sendmsg") -int kretprobe__tcp_sendmsg(struct pt_regs *ctx) { +int BPF_KRETPROBE(kretprobe__tcp_sendmsg) { u64 pid_tgid = bpf_get_current_pid_tgid(); struct sock **sk = bpf_map_lookup_elem(&who_sendmsg, &pid_tgid); bpf_map_delete_elem(&who_sendmsg, &pid_tgid); - if (sk) + if (sk) { return check_sock(*sk); + } return 0; } -// This number will be interpreted by elf-loader to set the current running kernel version -__u32 _version SEC("version") = 0xFFFFFFFE; // NOLINT(bugprone-reserved-identifier) - -char _license[] SEC("license") = "GPL"; // NOLINT(bugprone-reserved-identifier) +__u32 _version SEC("version") = 0xFFFFFFFE; +char _license[] SEC("license") = "GPL"; diff --git a/pkg/collector/corechecks/ebpf/oom_kill.go b/pkg/collector/corechecks/ebpf/oom_kill.go index b47be614b03fd..e87ec26f2678a 100644 --- a/pkg/collector/corechecks/ebpf/oom_kill.go +++ b/pkg/collector/corechecks/ebpf/oom_kill.go @@ -70,7 +70,7 @@ func (c *OOMKillConfig) Parse(data []byte) error { // Configure parses the check configuration and init the check func (m *OOMKillCheck) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { // TODO: Remove that hard-code and put it somewhere else - process_net.SetSystemProbePath(dd_config.Datadog.GetString("system_probe_config.sysprobe_socket")) + process_net.SetSystemProbePath(dd_config.SystemProbe.GetString("system_probe_config.sysprobe_socket")) err := m.CommonConfigure(integrationConfigDigest, initConfig, config, source) if err != nil { diff --git a/pkg/collector/corechecks/ebpf/probe/oom_kill.go b/pkg/collector/corechecks/ebpf/probe/oom_kill.go index 46392b04ee14d..5cf784701b3b5 100644 --- a/pkg/collector/corechecks/ebpf/probe/oom_kill.go +++ b/pkg/collector/corechecks/ebpf/probe/oom_kill.go @@ -45,21 +45,21 @@ type OOMKillProbe struct { func NewOOMKillProbe(cfg *ebpf.Config) (*OOMKillProbe, error) { if cfg.EnableCORE { - probe, err := loadCOREProbe(cfg) + probe, err := loadOOMKillCOREProbe(cfg) if err == nil { - return probe, err + return probe, nil } if !cfg.AllowRuntimeCompiledFallback { - return nil, fmt.Errorf("error loading CO-RE oom-kill probe: %s. set system_probe_config.allow_runtime_compiled_fallback to true to allow fallback to runtime compilation.", err) + return nil, fmt.Errorf("error loading CO-RE oom-kill probe: %s. set system_probe_config.allow_runtime_compiled_fallback to true to allow fallback to runtime compilation", err) } log.Warnf("error loading CO-RE oom-kill probe: %s. falling back to runtime compiled probe", err) } - return loadRuntimeCompiledProbe(cfg) + return loadOOMKillRuntimeCompiledProbe(cfg) } -func loadCOREProbe(cfg *ebpf.Config) (*OOMKillProbe, error) { +func loadOOMKillCOREProbe(cfg *ebpf.Config) (*OOMKillProbe, error) { kv, err := kernel.HostVersion() if err != nil { return nil, fmt.Errorf("error detecting kernel version: %s", err) @@ -81,7 +81,7 @@ func loadCOREProbe(cfg *ebpf.Config) (*OOMKillProbe, error) { return probe, nil } -func loadRuntimeCompiledProbe(cfg *ebpf.Config) (*OOMKillProbe, error) { +func loadOOMKillRuntimeCompiledProbe(cfg *ebpf.Config) (*OOMKillProbe, error) { buf, err := runtime.OomKill.Compile(cfg, getCFlags(cfg), statsd.Client) if err != nil { return nil, err diff --git a/pkg/collector/corechecks/ebpf/probe/oom_kill_test.go b/pkg/collector/corechecks/ebpf/probe/oom_kill_test.go index ebf25ce74691c..f04717d4d26dd 100644 --- a/pkg/collector/corechecks/ebpf/probe/oom_kill_test.go +++ b/pkg/collector/corechecks/ebpf/probe/oom_kill_test.go @@ -23,7 +23,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/ebpf" "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode/runtime" - "github.com/DataDog/datadog-agent/pkg/metadata/host" "github.com/DataDog/datadog-agent/pkg/process/statsd" "github.com/DataDog/datadog-agent/pkg/util/kernel" ) @@ -77,12 +76,6 @@ func TestOOMKillProbe(t *testing.T) { } cfg := testConfig() - - fullKV := host.GetStatusInformation().KernelVersion - if cfg.EnableCORE && (fullKV == "4.18.0-1018-azure" || fullKV == "4.18.0-147.43.1.el8_1.x86_64") { - t.Skipf("Skipping CO-RE tests for kernel version %v due to missing BTFs", fullKV) - } - oomKillProbe, err := NewOOMKillProbe(cfg) if err != nil { t.Fatal(err) diff --git a/pkg/collector/corechecks/ebpf/probe/tcp_queue_length.go b/pkg/collector/corechecks/ebpf/probe/tcp_queue_length.go index 1b09ba1b51924..d3f8042c92f76 100644 --- a/pkg/collector/corechecks/ebpf/probe/tcp_queue_length.go +++ b/pkg/collector/corechecks/ebpf/probe/tcp_queue_length.go @@ -23,8 +23,10 @@ import ( bpflib "github.com/cilium/ebpf" "github.com/DataDog/datadog-agent/pkg/ebpf" + "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode" "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode/runtime" "github.com/DataDog/datadog-agent/pkg/process/statsd" + "github.com/DataDog/datadog-agent/pkg/util/kernel" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -44,12 +46,22 @@ type TCPQueueLengthTracer struct { } func NewTCPQueueLengthTracer(cfg *ebpf.Config) (*TCPQueueLengthTracer, error) { - compiledOutput, err := runtime.TcpQueueLength.Compile(cfg, []string{"-g"}, statsd.Client) - if err != nil { - return nil, err + if cfg.EnableCORE { + probe, err := loadTCPQueueLengthCOREProbe(cfg) + if err != nil { + if !cfg.AllowRuntimeCompiledFallback { + return nil, fmt.Errorf("error loading CO-RE tcp-queue-length probe: %s. set system_probe_config.allow_runtime_compiled_fallback to true to allow fallback to runtime compilation", err) + } + log.Warnf("error loading CO-RE tcp-queue-length probe: %s. falling back to runtime compiled probe", err) + } else { + return probe, nil + } } - defer compiledOutput.Close() + return loadTCPQueueLengthRuntimeCompiledProbe(cfg) +} + +func startTCPQueueLengthProbe(buf bytecode.AssetReader, managerOptions manager.Options) (*TCPQueueLengthTracer, error) { probes := []*manager.Probe{ {ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: "kprobe/tcp_recvmsg", EBPFFuncName: "kprobe__tcp_recvmsg", UID: "tcpq"}}, {ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: "kretprobe/tcp_recvmsg", EBPFFuncName: "kretprobe__tcp_recvmsg", UID: "tcpq"}}, @@ -68,14 +80,12 @@ func NewTCPQueueLengthTracer(cfg *ebpf.Config) (*TCPQueueLengthTracer, error) { Maps: maps, } - managerOptions := manager.Options{ - RLimit: &unix.Rlimit{ - Cur: math.MaxUint64, - Max: math.MaxUint64, - }, + managerOptions.RLimit = &unix.Rlimit{ + Cur: math.MaxUint64, + Max: math.MaxUint64, } - if err := m.InitWithOptions(compiledOutput, managerOptions); err != nil { + if err := m.InitWithOptions(buf, managerOptions); err != nil { return nil, fmt.Errorf("failed to init manager: %w", err) } @@ -145,3 +155,35 @@ func (t *TCPQueueLengthTracer) GetAndFlush() TCPQueueLengthStats { return result } + +func loadTCPQueueLengthCOREProbe(cfg *ebpf.Config) (*TCPQueueLengthTracer, error) { + kv, err := kernel.HostVersion() + if err != nil { + return nil, fmt.Errorf("error detecting kernel version: %s", err) + } + if kv < kernel.VersionCode(4, 8, 0) { + return nil, fmt.Errorf("detected kernel version %s, but tcp-queue-length probe requires a kernel version of at least 4.8.0", kv) + } + + var probe *TCPQueueLengthTracer + err = ebpf.LoadCOREAsset(cfg, "tcp-queue-length.o", func(buf bytecode.AssetReader, opts manager.Options) error { + probe, err = startTCPQueueLengthProbe(buf, opts) + return err + }) + if err != nil { + return nil, err + } + + log.Debugf("successfully loaded CO-RE version of tcp-queue-length probe") + return probe, nil +} + +func loadTCPQueueLengthRuntimeCompiledProbe(cfg *ebpf.Config) (*TCPQueueLengthTracer, error) { + compiledOutput, err := runtime.TcpQueueLength.Compile(cfg, []string{"-g"}, statsd.Client) + if err != nil { + return nil, err + } + defer compiledOutput.Close() + + return startTCPQueueLengthProbe(compiledOutput, manager.Options{}) +} diff --git a/pkg/collector/corechecks/ebpf/probe/tcp_queue_length_test.go b/pkg/collector/corechecks/ebpf/probe/tcp_queue_length_test.go index 9ef2770ff3b33..dbad8c94ba53f 100644 --- a/pkg/collector/corechecks/ebpf/probe/tcp_queue_length_test.go +++ b/pkg/collector/corechecks/ebpf/probe/tcp_queue_length_test.go @@ -47,7 +47,6 @@ func TestTCPQueueLengthTracer(t *testing.T) { } cfg := ebpf.NewConfig() - tcpTracer, err := NewTCPQueueLengthTracer(cfg) if err != nil { t.Fatal(err) diff --git a/pkg/collector/corechecks/ebpf/tcp_queue_length.go b/pkg/collector/corechecks/ebpf/tcp_queue_length.go index cb1c6853cb4c4..97f89820de7dc 100644 --- a/pkg/collector/corechecks/ebpf/tcp_queue_length.go +++ b/pkg/collector/corechecks/ebpf/tcp_queue_length.go @@ -67,7 +67,7 @@ func (t *TCPQueueLengthConfig) Parse(data []byte) error { // Configure parses the check configuration and init the check func (t *TCPQueueLengthCheck) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { // TODO: Remove that hard-code and put it somewhere else - process_net.SetSystemProbePath(dd_config.Datadog.GetString("system_probe_config.sysprobe_socket")) + process_net.SetSystemProbePath(dd_config.SystemProbe.GetString("system_probe_config.sysprobe_socket")) err := t.CommonConfigure(integrationConfigDigest, initConfig, config, source) if err != nil { diff --git a/pkg/collector/corechecks/embed/jmx/check.go b/pkg/collector/corechecks/embed/jmx/check.go index 64bb31517b6e7..3f15ca0ca31eb 100644 --- a/pkg/collector/corechecks/embed/jmx/check.go +++ b/pkg/collector/corechecks/embed/jmx/check.go @@ -18,7 +18,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" ) -// JMXCheck TODO : IML-199 +// JMXCheck represents a JMXFetch check type JMXCheck struct { id check.ID name string @@ -45,7 +45,7 @@ func newJMXCheck(config integration.Config, source string) *JMXCheck { return check } -// Run TODO : IML-199 +// Run schedules this JMXCheck to run func (c *JMXCheck) Run() error { err := state.scheduleCheck(c) if err != nil { @@ -62,68 +62,69 @@ func (c *JMXCheck) Run() error { return nil } -// Stop TODO : IML-199 +// Stop forces the JMXCheck to stop and will unschedule it func (c *JMXCheck) Stop() { close(c.stop) state.unscheduleCheck(c) } -// Cancel TODO : IML-199 +// Cancel is a noop func (c *JMXCheck) Cancel() {} -// String TODO : IML-199 +// String provides a printable version of the JMXCheck func (c *JMXCheck) String() string { return c.name } -// Version TODO : IML-199 +// Version returns the version of the JMXCheck +// (note, returns an empty string) func (c *JMXCheck) Version() string { return "" } -// ConfigSource TODO : IML-199 +// ConfigSource returns the source of the configuration of the JMXCheck func (c *JMXCheck) ConfigSource() string { return c.source } -// InitConfig TODO : IML-199 +// InitConfig returns the init_config in YAML or JSON of the JMXCheck func (c *JMXCheck) InitConfig() string { return c.initConfig } -// InstanceConfig TODO : IML-199 +// InstanceConfig returns the metric config in YAML or JSON of the JMXCheck func (c *JMXCheck) InstanceConfig() string { return c.instanceConfig } -// Configure TODO : IML-199 +// Configure configures this JMXCheck, setting InitConfig and InstanceConfig func (c *JMXCheck) Configure(integrationConfigDigest uint64, config integration.Data, initConfig integration.Data, source string) error { c.initConfig = string(config) c.instanceConfig = string(initConfig) return nil } -// Interval TODO : IML-199 +// Interval returns the scheduling time for the check (0 for JMXCheck) func (c *JMXCheck) Interval() time.Duration { return 0 } -// ID TODO : IML-199 +// ID provides a unique identifier for this JMXCheck instance func (c *JMXCheck) ID() check.ID { return c.id } -// IsTelemetryEnabled TODO : IML-199 +// IsTelemetryEnabled returns if telemetry is enabled for this JMXCheck func (c *JMXCheck) IsTelemetryEnabled() bool { return c.telemetry } -// GetWarnings TODO : IML-199 +// GetWarnings returns the last warning registered by this JMXCheck (currently an empty slice) func (c *JMXCheck) GetWarnings() []error { return []error{} } -// GetSenderStats TODO : IML-199 +// GetSenderStats returns the stats from the last run of this JMXCheck func (c *JMXCheck) GetSenderStats() (check.SenderStats, error) { return check.NewSenderStats(), nil } diff --git a/pkg/collector/corechecks/net/doc.go b/pkg/collector/corechecks/net/doc.go index 245e0d36b4710..6056a14fcb302 100644 --- a/pkg/collector/corechecks/net/doc.go +++ b/pkg/collector/corechecks/net/doc.go @@ -5,6 +5,5 @@ /* Package net provides core checks for networking - */ package net diff --git a/pkg/collector/corechecks/oracle/oracle.go b/pkg/collector/corechecks/oracle/oracle.go index 4b4d3640419e4..f130cf6de5228 100644 --- a/pkg/collector/corechecks/oracle/oracle.go +++ b/pkg/collector/corechecks/oracle/oracle.go @@ -28,6 +28,13 @@ type Check struct { // Run executes the check. func (c *Check) Run() error { + // A dummy metric to test the pipeline. Will be removed after implementing the first real pipeline. + sender, err := c.GetSender() + if err != nil { + return err + } + sender.Gauge("oracle.helloworld", 10, "", nil) + sender.Commit() if c.db == nil { db, err := c.Connect() if err != nil { diff --git a/pkg/collector/corechecks/sbom/check.go b/pkg/collector/corechecks/sbom/check.go new file mode 100644 index 0000000000000..e5dae4abde1ef --- /dev/null +++ b/pkg/collector/corechecks/sbom/check.go @@ -0,0 +1,166 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package sbom + +import ( + "errors" + "time" + + yaml "gopkg.in/yaml.v2" + + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" + "github.com/DataDog/datadog-agent/pkg/collector/check" + core "github.com/DataDog/datadog-agent/pkg/collector/corechecks" + ddConfig "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" +) + +const ( + checkName = "sbom" +) + +func init() { + core.RegisterCheck(checkName, CheckFactory) +} + +// Config holds the container_image check configuration +type Config struct { + ChunkSize int `yaml:"chunk_size"` + NewSBOMMaxLatencySeconds int `yaml:"new_sbom_max_latency_seconds"` + PeriodicRefreshSeconds int `yaml:"periodic_refresh_seconds"` +} + +type configValueRange struct { + min int + max int + default_ int +} + +var /* const */ ( + chunkSizeValueRange = &configValueRange{ + min: 1, + max: 100, + default_: 1, + } + + newSBOMMaxLatencySecondsValueRange = &configValueRange{ + min: 1, // 1 s + max: 300, // 5 min + default_: 30, // 30 s + } + + periodicRefreshSecondsValueRange = &configValueRange{ + min: 60, // 1 min + max: 604800, // 1 week + default_: 3600, // 1h + } +) + +func validateValue(val *int, range_ *configValueRange) { + if *val == 0 { + *val = range_.default_ + } else if *val < range_.min { + *val = range_.min + } else if *val > range_.max { + *val = range_.max + } +} + +func (c *Config) Parse(data []byte) error { + if err := yaml.Unmarshal(data, c); err != nil { + return err + } + + validateValue(&c.ChunkSize, chunkSizeValueRange) + validateValue(&c.NewSBOMMaxLatencySeconds, newSBOMMaxLatencySecondsValueRange) + validateValue(&c.PeriodicRefreshSeconds, periodicRefreshSecondsValueRange) + + return nil +} + +// Check reports SBOM +type Check struct { + core.CheckBase + workloadmetaStore workloadmeta.Store + instance *Config + processor *processor + stopCh chan struct{} +} + +// CheckFactory registers the sbom check +func CheckFactory() check.Check { + return &Check{ + CheckBase: core.NewCheckBase(checkName), + workloadmetaStore: workloadmeta.GetGlobalStore(), + instance: &Config{}, + stopCh: make(chan struct{}), + } +} + +// Configure parses the check configuration and initializes the sbom check +func (c *Check) Configure(integrationConfigDigest uint64, config, initConfig integration.Data, source string) error { + if !ddConfig.Datadog.GetBool("sbom.enabled") { + return errors.New("collection of SBOM is disabled") + } + + if err := c.CommonConfigure(integrationConfigDigest, initConfig, config, source); err != nil { + return err + } + + if err := c.instance.Parse(config); err != nil { + return err + } + + sender, err := c.GetSender() + if err != nil { + return err + } + + c.processor = newProcessor(sender, c.instance.ChunkSize, time.Duration(c.instance.NewSBOMMaxLatencySeconds)*time.Second) + + return nil +} + +// Run starts the sbom check +func (c *Check) Run() error { + log.Infof("Starting long-running check %q", c.ID()) + defer log.Infof("Shutting down long-running check %q", c.ID()) + + imgEventsCh := c.workloadmetaStore.Subscribe( + checkName, + workloadmeta.NormalPriority, + workloadmeta.NewFilter( + []workloadmeta.Kind{workloadmeta.KindContainerImageMetadata}, + workloadmeta.SourceAll, + workloadmeta.EventTypeSet, // We don’t care about SBOM removal because we just have to wait for them to expire on BE side once we stopped refreshing them periodically. + ), + ) + + imgRefreshTicker := time.NewTicker(time.Duration(c.instance.PeriodicRefreshSeconds) * time.Second) + + for { + select { + case eventBundle := <-imgEventsCh: + c.processor.processEvents(eventBundle) + case <-imgRefreshTicker.C: + c.processor.processRefresh(c.workloadmetaStore.ListImages()) + case <-c.stopCh: + c.processor.stop() + return nil + } + } +} + +// Stop stops the sbom check +func (c *Check) Stop() { + close(c.stopCh) +} + +// Interval returns 0. It makes sbom a long-running check +func (c *Check) Interval() time.Duration { + return 0 +} diff --git a/pkg/collector/corechecks/sbom/convert.go b/pkg/collector/corechecks/sbom/convert.go new file mode 100644 index 0000000000000..4b9d38ccea5fa --- /dev/null +++ b/pkg/collector/corechecks/sbom/convert.go @@ -0,0 +1,1014 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package sbom + +import ( + "time" + "unsafe" + + "github.com/DataDog/datadog-agent/pkg/util/pointer" + + "github.com/CycloneDX/cyclonedx-go" + "github.com/DataDog/agent-payload/v5/cyclonedx_v1_4" + "google.golang.org/protobuf/types/known/durationpb" + "google.golang.org/protobuf/types/known/timestamppb" +) + +func stringPtr(in string) *string { + if in == "" { + return nil + } else { + return &in + } +} + +func strSliceDeref(in *[]string) []string { + if in == nil { + return nil + } else { + return *in + } +} + +type inArrayElement interface { + cyclonedx.Advisory | + cyclonedx.AffectedVersions | + cyclonedx.Affects | + cyclonedx.Commit | + cyclonedx.Component | + cyclonedx.Composition | + cyclonedx.Copyright | + cyclonedx.DataClassification | + cyclonedx.Dependency | + cyclonedx.ExternalReference | + cyclonedx.Hash | + cyclonedx.Issue | + cyclonedx.LicenseChoice | + cyclonedx.Note | + cyclonedx.OrganizationalContact | + cyclonedx.OrganizationalEntity | + cyclonedx.Patch | + cyclonedx.Property | + cyclonedx.Service | + cyclonedx.Tool | + cyclonedx.Vulnerability | + cyclonedx.VulnerabilityRating | + cyclonedx.VulnerabilityReference | + string +} + +type outArrayElement interface { + cyclonedx_v1_4.Advisory | + cyclonedx_v1_4.Commit | + cyclonedx_v1_4.Component | + cyclonedx_v1_4.Composition | + cyclonedx_v1_4.DataClassification | + cyclonedx_v1_4.Dependency | + cyclonedx_v1_4.EvidenceCopyright | + cyclonedx_v1_4.ExternalReference | + cyclonedx_v1_4.Hash | + cyclonedx_v1_4.Issue | + cyclonedx_v1_4.LicenseChoice | + cyclonedx_v1_4.Note | + cyclonedx_v1_4.OrganizationalContact | + cyclonedx_v1_4.OrganizationalEntity | + cyclonedx_v1_4.Patch | + cyclonedx_v1_4.Property | + cyclonedx_v1_4.Service | + cyclonedx_v1_4.Tool | + cyclonedx_v1_4.Vulnerability | + cyclonedx_v1_4.VulnerabilityAffectedVersions | + cyclonedx_v1_4.VulnerabilityAffects | + cyclonedx_v1_4.VulnerabilityRating | + cyclonedx_v1_4.VulnerabilityReference +} + +func convertArray[In inArrayElement, Out outArrayElement](in *[]In, convert func(*In) *Out) (out []*Out) { + if in == nil { + return nil + } + + out = make([]*Out, 0, len(*in)) + for _, e := range *in { + out = append(out, convert(&e)) + } + return out +} + +func convertAdvisory(in *cyclonedx.Advisory) *cyclonedx_v1_4.Advisory { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Advisory{ + Title: stringPtr(in.Title), + Url: in.URL, + } +} + +func convertAttachedText(in *cyclonedx.AttachedText) *cyclonedx_v1_4.AttachedText { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.AttachedText{ + ContentType: stringPtr(in.ContentType), + Encoding: stringPtr(in.Encoding), + Value: in.Content, + } +} + +func convertBOM(in *cyclonedx.BOM) *cyclonedx_v1_4.Bom { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Bom{ + SpecVersion: in.SpecVersion.String(), + Version: pointer.Ptr(int32(in.Version)), + SerialNumber: stringPtr(in.SerialNumber), + Metadata: convertMetadata(in.Metadata), + Components: convertArray(in.Components, convertComponent), + Services: convertArray(in.Services, convertService), + ExternalReferences: convertArray(in.ExternalReferences, convertExternalReference), + Dependencies: convertArray(in.Dependencies, convertDependency), + Compositions: convertArray(in.Compositions, convertComposition), + Vulnerabilities: convertArray(in.Vulnerabilities, convertVulnerability), + } +} + +func convertCommit(in *cyclonedx.Commit) *cyclonedx_v1_4.Commit { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Commit{ + Uid: stringPtr(in.UID), + Url: stringPtr(in.URL), + Author: convertIdentifiableAction(in.Author), + Committer: convertIdentifiableAction(in.Committer), + Message: stringPtr(in.Message), + } +} + +func convertComponent(in *cyclonedx.Component) *cyclonedx_v1_4.Component { + if in == nil { + return nil + } + + var evidence []*cyclonedx_v1_4.Evidence + if in.Evidence != nil { + evidence = []*cyclonedx_v1_4.Evidence{convertEvidence(in.Evidence)} + } + + return &cyclonedx_v1_4.Component{ + Type: convertComponentType(in.Type), + MimeType: stringPtr(in.MIMEType), + BomRef: stringPtr(in.BOMRef), + Supplier: convertOrganizationalEntity(in.Supplier), + Author: stringPtr(in.Author), + Publisher: stringPtr(in.Publisher), + Group: stringPtr(in.Group), + Name: in.Name, + Version: in.Version, + Description: stringPtr(in.Description), + Scope: convertScope(in.Scope), + Hashes: convertArray(in.Hashes, convertHash), + Licenses: convertArray(castLicenses(in.Licenses), convertLicenseChoice), + Copyright: stringPtr(in.Copyright), + Cpe: stringPtr(in.CPE), + Purl: stringPtr(in.PackageURL), + Swid: convertSwid(in.SWID), + Modified: in.Modified, + Pedigree: convertPedigree(in.Pedigree), + ExternalReferences: convertArray(in.ExternalReferences, convertExternalReference), + Components: convertArray(in.Components, convertComponent), + Properties: convertArray(in.Properties, convertProperty), + Evidence: evidence, + ReleaseNotes: convertReleaseNotes(in.ReleaseNotes), + } +} + +func convertComponentType(in cyclonedx.ComponentType) cyclonedx_v1_4.Classification { + switch in { + case cyclonedx.ComponentTypeApplication: + return cyclonedx_v1_4.Classification_CLASSIFICATION_APPLICATION + case cyclonedx.ComponentTypeContainer: + return cyclonedx_v1_4.Classification_CLASSIFICATION_CONTAINER + case cyclonedx.ComponentTypeDevice: + return cyclonedx_v1_4.Classification_CLASSIFICATION_DEVICE + case cyclonedx.ComponentTypeFile: + return cyclonedx_v1_4.Classification_CLASSIFICATION_FILE + case cyclonedx.ComponentTypeFirmware: + return cyclonedx_v1_4.Classification_CLASSIFICATION_FIRMWARE + case cyclonedx.ComponentTypeFramework: + return cyclonedx_v1_4.Classification_CLASSIFICATION_FRAMEWORK + case cyclonedx.ComponentTypeLibrary: + return cyclonedx_v1_4.Classification_CLASSIFICATION_LIBRARY + case cyclonedx.ComponentTypeOS: + return cyclonedx_v1_4.Classification_CLASSIFICATION_OPERATING_SYSTEM + default: + return cyclonedx_v1_4.Classification_CLASSIFICATION_NULL + } +} + +func convertComposition(in *cyclonedx.Composition) (out *cyclonedx_v1_4.Composition) { + if in == nil { + return nil + } + + out = &cyclonedx_v1_4.Composition{ + Aggregate: convertCompositionAggregate(in.Aggregate), + } + + if in.Assemblies != nil { + out.Assemblies = *(*[]string)(unsafe.Pointer(in.Assemblies)) + } + + if in.Dependencies != nil { + out.Dependencies = *(*[]string)(unsafe.Pointer(in.Dependencies)) + } + + return out +} + +func convertCompositionAggregate(in cyclonedx.CompositionAggregate) cyclonedx_v1_4.Aggregate { + switch in { + case cyclonedx.CompositionAggregateComplete: + return cyclonedx_v1_4.Aggregate_AGGREGATE_COMPLETE + case cyclonedx.CompositionAggregateIncomplete: + return cyclonedx_v1_4.Aggregate_AGGREGATE_INCOMPLETE + case cyclonedx.CompositionAggregateIncompleteFirstPartyOnly: + return cyclonedx_v1_4.Aggregate_AGGREGATE_INCOMPLETE_FIRST_PARTY_ONLY + case cyclonedx.CompositionAggregateIncompleteThirdPartyOnly: + return cyclonedx_v1_4.Aggregate_AGGREGATE_INCOMPLETE_THIRD_PARTY_ONLY + case cyclonedx.CompositionAggregateUnknown: + return cyclonedx_v1_4.Aggregate_AGGREGATE_UNKNOWN + case cyclonedx.CompositionAggregateNotSpecified: + return cyclonedx_v1_4.Aggregate_AGGREGATE_NOT_SPECIFIED + default: + return cyclonedx_v1_4.Aggregate_AGGREGATE_NOT_SPECIFIED + } +} + +func convertCopyright(in *cyclonedx.Copyright) *cyclonedx_v1_4.EvidenceCopyright { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.EvidenceCopyright{ + Text: in.Text, + } +} + +func convertDataClassification(in *cyclonedx.DataClassification) *cyclonedx_v1_4.DataClassification { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.DataClassification{ + Flow: convertDataFlow(in.Flow), + Value: in.Classification, + } +} + +func convertDataFlow(in cyclonedx.DataFlow) cyclonedx_v1_4.DataFlow { + switch in { + case cyclonedx.DataFlowBidirectional: + return cyclonedx_v1_4.DataFlow_DATA_FLOW_BI_DIRECTIONAL + case cyclonedx.DataFlowInbound: + return cyclonedx_v1_4.DataFlow_DATA_FLOW_INBOUND + case cyclonedx.DataFlowOutbound: + return cyclonedx_v1_4.DataFlow_DATA_FLOW_OUTBOUND + case cyclonedx.DataFlowUnknown: + return cyclonedx_v1_4.DataFlow_DATA_FLOW_UNKNOWN + default: + return cyclonedx_v1_4.DataFlow_DATA_FLOW_NULL + } +} + +func convertDependency(in *cyclonedx.Dependency) *cyclonedx_v1_4.Dependency { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Dependency{ + Ref: in.Ref, + Dependencies: convertArray(in.Dependencies, convertDependencyString), + } +} + +func convertDependencyString(in *string) *cyclonedx_v1_4.Dependency { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Dependency{ + Ref: *in, + } +} + +func convertDiff(in *cyclonedx.Diff) *cyclonedx_v1_4.Diff { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Diff{ + Text: convertAttachedText(in.Text), + Url: stringPtr(in.URL), + } +} + +func convertEvidence(in *cyclonedx.Evidence) *cyclonedx_v1_4.Evidence { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Evidence{ + Licenses: convertArray(castLicenses(in.Licenses), convertLicenseChoice), + Copyright: convertArray(in.Copyright, convertCopyright), + } +} + +func convertExternalReference(in *cyclonedx.ExternalReference) *cyclonedx_v1_4.ExternalReference { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.ExternalReference{ + Type: convertExternalReferenceType(in.Type), + Url: in.URL, + Comment: stringPtr(in.Comment), + Hashes: convertArray(in.Hashes, convertHash), + } +} + +func convertExternalReferenceType(in cyclonedx.ExternalReferenceType) cyclonedx_v1_4.ExternalReferenceType { + switch in { + case cyclonedx.ERTypeAdvisories: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_ADVISORIES + case cyclonedx.ERTypeBOM: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_BOM + case cyclonedx.ERTypeBuildMeta: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_BUILD_META + case cyclonedx.ERTypeBuildSystem: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_BUILD_SYSTEM + case cyclonedx.ERTypeChat: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_CHAT + case cyclonedx.ERTypeDistribution: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_DISTRIBUTION + case cyclonedx.ERTypeDocumentation: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_DOCUMENTATION + case cyclonedx.ERTypeLicense: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_LICENSE + case cyclonedx.ERTypeMailingList: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_MAILING_LIST + case cyclonedx.ERTypeOther: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_OTHER + case cyclonedx.ERTypeIssueTracker: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_ISSUE_TRACKER + case cyclonedx.ERTypeReleaseNotes: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_OTHER // ?? + case cyclonedx.ERTypeSocial: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_SOCIAL + case cyclonedx.ERTypeSupport: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_SUPPORT + case cyclonedx.ERTypeVCS: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_VCS + case cyclonedx.ERTypeWebsite: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_WEBSITE + default: + return cyclonedx_v1_4.ExternalReferenceType_EXTERNAL_REFERENCE_TYPE_OTHER + } +} + +func convertHash(in *cyclonedx.Hash) *cyclonedx_v1_4.Hash { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Hash{ + Alg: convertHashAlgo(in.Algorithm), + Value: in.Value, + } +} + +func convertHashAlgo(in cyclonedx.HashAlgorithm) cyclonedx_v1_4.HashAlg { + switch in { + case cyclonedx.HashAlgoMD5: + return cyclonedx_v1_4.HashAlg_HASH_ALG_MD_5 + case cyclonedx.HashAlgoSHA1: + return cyclonedx_v1_4.HashAlg_HASH_ALG_SHA_1 + case cyclonedx.HashAlgoSHA256: + return cyclonedx_v1_4.HashAlg_HASH_ALG_SHA_256 + case cyclonedx.HashAlgoSHA384: + return cyclonedx_v1_4.HashAlg_HASH_ALG_SHA_384 + case cyclonedx.HashAlgoSHA512: + return cyclonedx_v1_4.HashAlg_HASH_ALG_SHA_512 + case cyclonedx.HashAlgoSHA3_256: + return cyclonedx_v1_4.HashAlg_HASH_ALG_SHA_3_256 + case cyclonedx.HashAlgoSHA3_512: + return cyclonedx_v1_4.HashAlg_HASH_ALG_SHA_3_512 + case cyclonedx.HashAlgoBlake2b_256: + return cyclonedx_v1_4.HashAlg_HASH_ALG_BLAKE_2_B_256 + case cyclonedx.HashAlgoBlake2b_384: + return cyclonedx_v1_4.HashAlg_HASH_ALG_BLAKE_2_B_384 + case cyclonedx.HashAlgoBlake2b_512: + return cyclonedx_v1_4.HashAlg_HASH_ALG_BLAKE_2_B_512 + case cyclonedx.HashAlgoBlake3: + return cyclonedx_v1_4.HashAlg_HASH_ALG_BLAKE_3 + default: + return cyclonedx_v1_4.HashAlg_HASH_ALG_NULL + } +} + +func convertIdentifiableAction(in *cyclonedx.IdentifiableAction) *cyclonedx_v1_4.IdentifiableAction { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.IdentifiableAction{ + Timestamp: convertTimestamp(in.Timestamp), + Name: stringPtr(in.Name), + Email: stringPtr(in.Email), + } +} + +func convertImpactAnalysisJustification(in cyclonedx.ImpactAnalysisJustification) *cyclonedx_v1_4.ImpactAnalysisJustification { + if in == "" { + return nil + } + + switch in { + case cyclonedx.IAJCodeNotPresent: + return pointer.Ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_CODE_NOT_PRESENT) + case cyclonedx.IAJCodeNotReachable: + return pointer.Ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_CODE_NOT_REACHABLE) + case cyclonedx.IAJRequiresConfiguration: + return pointer.Ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_REQUIRES_CONFIGURATION) + case cyclonedx.IAJRequiresDependency: + return pointer.Ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_REQUIRES_DEPENDENCY) + case cyclonedx.IAJRequiresEnvironment: + return pointer.Ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_REQUIRES_ENVIRONMENT) + case cyclonedx.IAJProtectedByCompiler: + return pointer.Ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_PROTECTED_BY_COMPILER) + case cyclonedx.IAJProtectedAtRuntime: + return pointer.Ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_PROTECTED_AT_RUNTIME) + case cyclonedx.IAJProtectedAtPerimeter: + return pointer.Ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_PROTECTED_AT_PERIMETER) + case cyclonedx.IAJProtectedByMitigatingControl: + return pointer.Ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_PROTECTED_BY_MITIGATING_CONTROL) + default: + return pointer.Ptr(cyclonedx_v1_4.ImpactAnalysisJustification_IMPACT_ANALYSIS_JUSTIFICATION_NULL) + } +} + +func convertImpactAnalysisResponse(in cyclonedx.ImpactAnalysisResponse) cyclonedx_v1_4.VulnerabilityResponse { + switch in { + case cyclonedx.IARCanNotFix: + return cyclonedx_v1_4.VulnerabilityResponse_VULNERABILITY_RESPONSE_CAN_NOT_FIX + case cyclonedx.IARWillNotFix: + return cyclonedx_v1_4.VulnerabilityResponse_VULNERABILITY_RESPONSE_WILL_NOT_FIX + case cyclonedx.IARUpdate: + return cyclonedx_v1_4.VulnerabilityResponse_VULNERABILITY_RESPONSE_UPDATE + case cyclonedx.IARRollback: + return cyclonedx_v1_4.VulnerabilityResponse_VULNERABILITY_RESPONSE_ROLLBACK + case cyclonedx.IARWorkaroundAvailable: + return cyclonedx_v1_4.VulnerabilityResponse_VULNERABILITY_RESPONSE_WORKAROUND_AVAILABLE + default: + return cyclonedx_v1_4.VulnerabilityResponse_VULNERABILITY_RESPONSE_NULL + } +} + +func convertImpactAnalysisState(in cyclonedx.ImpactAnalysisState) *cyclonedx_v1_4.ImpactAnalysisState { + if in == "" { + return nil + } + + switch in { + case cyclonedx.IASResolved: + return pointer.Ptr(cyclonedx_v1_4.ImpactAnalysisState_IMPACT_ANALYSIS_STATE_RESOLVED) + case cyclonedx.IASResolvedWithPedigree: + return pointer.Ptr(cyclonedx_v1_4.ImpactAnalysisState_IMPACT_ANALYSIS_STATE_RESOLVED_WITH_PEDIGREE) + case cyclonedx.IASExploitable: + return pointer.Ptr(cyclonedx_v1_4.ImpactAnalysisState_IMPACT_ANALYSIS_STATE_EXPLOITABLE) + case cyclonedx.IASInTriage: + return pointer.Ptr(cyclonedx_v1_4.ImpactAnalysisState_IMPACT_ANALYSIS_STATE_IN_TRIAGE) + case cyclonedx.IASFalsePositive: + return pointer.Ptr(cyclonedx_v1_4.ImpactAnalysisState_IMPACT_ANALYSIS_STATE_FALSE_POSITIVE) + case cyclonedx.IASNotAffected: + return pointer.Ptr(cyclonedx_v1_4.ImpactAnalysisState_IMPACT_ANALYSIS_STATE_NOT_AFFECTED) + default: + return pointer.Ptr(cyclonedx_v1_4.ImpactAnalysisState_IMPACT_ANALYSIS_STATE_NULL) + } +} + +func convertIssue(in *cyclonedx.Issue) *cyclonedx_v1_4.Issue { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Issue{ + Type: convertIssueType(in.Type), + Id: stringPtr(in.ID), + Name: stringPtr(in.Name), + Description: stringPtr(in.Description), + Source: convertSource(in.Source), + References: strSliceDeref(in.References), + } +} + +func convertIssueType(in cyclonedx.IssueType) cyclonedx_v1_4.IssueClassification { + switch in { + case cyclonedx.IssueTypeDefect: + return cyclonedx_v1_4.IssueClassification_ISSUE_CLASSIFICATION_DEFECT + case cyclonedx.IssueTypeEnhancement: + return cyclonedx_v1_4.IssueClassification_ISSUE_CLASSIFICATION_ENHANCEMENT + case cyclonedx.IssueTypeSecurity: + return cyclonedx_v1_4.IssueClassification_ISSUE_CLASSIFICATION_SECURITY + default: + return cyclonedx_v1_4.IssueClassification_ISSUE_CLASSIFICATION_NULL + } +} + +func castLicenses(in *cyclonedx.Licenses) *[]cyclonedx.LicenseChoice { + if in == nil { + return nil + } + + var l []cyclonedx.LicenseChoice = *in + return &l +} + +func convertLicense(in *cyclonedx.License) (out *cyclonedx_v1_4.License) { + if in == nil { + return nil + } + + out = &cyclonedx_v1_4.License{ + Text: convertAttachedText(in.Text), + Url: stringPtr(in.URL), + } + + if in.ID != "" { + out.License = &cyclonedx_v1_4.License_Id{ + Id: in.ID, + } + } + + if in.Name != "" { + out.License = &cyclonedx_v1_4.License_Name{ + Name: in.Name, + } + } + + return out +} + +func convertLicenseChoice(in *cyclonedx.LicenseChoice) *cyclonedx_v1_4.LicenseChoice { + if in == nil { + return nil + } + + if in.License != nil { + return &cyclonedx_v1_4.LicenseChoice{ + Choice: &cyclonedx_v1_4.LicenseChoice_License{ + License: convertLicense(in.License), + }, + } + } + + if in.Expression != "" { + return &cyclonedx_v1_4.LicenseChoice{ + Choice: &cyclonedx_v1_4.LicenseChoice_Expression{ + Expression: in.Expression, + }, + } + } + + return nil +} + +func convertMetadata(in *cyclonedx.Metadata) *cyclonedx_v1_4.Metadata { + if in == nil { + return nil + } + + var licenses *cyclonedx_v1_4.LicenseChoice = nil + if in.Licenses != nil && len(*in.Licenses) > 0 { + licenses = convertLicenseChoice(&(*in.Licenses)[0]) + } + + return &cyclonedx_v1_4.Metadata{ + Timestamp: convertTimestamp(in.Timestamp), + Tools: convertArray(in.Tools, convertTool), + Authors: convertArray(in.Authors, convertOrganizationalContact), + Component: convertComponent(in.Component), + Manufacture: convertOrganizationalEntity(in.Manufacture), + Supplier: convertOrganizationalEntity(in.Supplier), + Licenses: licenses, + Properties: convertArray(in.Properties, convertProperty), + } +} + +func convertNote(in *cyclonedx.Note) *cyclonedx_v1_4.Note { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Note{ + Locale: stringPtr(in.Locale), + Text: convertAttachedText(&in.Text), + } +} + +func convertOrganizationalContact(in *cyclonedx.OrganizationalContact) *cyclonedx_v1_4.OrganizationalContact { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.OrganizationalContact{ + Name: stringPtr(in.Name), + Email: stringPtr(in.Email), + Phone: stringPtr(in.Phone), + } +} + +func convertOrganizationalEntity(in *cyclonedx.OrganizationalEntity) *cyclonedx_v1_4.OrganizationalEntity { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.OrganizationalEntity{ + Name: stringPtr(in.Name), + Url: strSliceDeref(in.URL), + Contact: convertArray(in.Contact, convertOrganizationalContact), + } +} + +func convertPatch(in *cyclonedx.Patch) *cyclonedx_v1_4.Patch { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Patch{ + Type: convertPatchType(in.Type), + Diff: convertDiff(in.Diff), + Resolves: convertArray(in.Resolves, convertIssue), + } +} + +func convertPatchType(in cyclonedx.PatchType) cyclonedx_v1_4.PatchClassification { + switch in { + case cyclonedx.PatchTypeBackport: + return cyclonedx_v1_4.PatchClassification_PATCH_CLASSIFICATION_BACKPORT + case cyclonedx.PatchTypeCherryPick: + return cyclonedx_v1_4.PatchClassification_PATCH_CLASSIFICATION_CHERRY_PICK + case cyclonedx.PatchTypeMonkey: + return cyclonedx_v1_4.PatchClassification_PATCH_CLASSIFICATION_MONKEY + case cyclonedx.PatchTypeUnofficial: + return cyclonedx_v1_4.PatchClassification_PATCH_CLASSIFICATION_UNOFFICIAL + default: + return cyclonedx_v1_4.PatchClassification_PATCH_CLASSIFICATION_NULL + } +} + +func convertPedigree(in *cyclonedx.Pedigree) *cyclonedx_v1_4.Pedigree { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Pedigree{ + Ancestors: convertArray(in.Ancestors, convertComponent), + Descendants: convertArray(in.Descendants, convertComponent), + Variants: convertArray(in.Variants, convertComponent), + Commits: convertArray(in.Commits, convertCommit), + Patches: convertArray(in.Patches, convertPatch), + Notes: stringPtr(in.Notes), + } +} + +func convertProperty(in *cyclonedx.Property) *cyclonedx_v1_4.Property { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Property{ + Name: in.Name, + Value: stringPtr(in.Value), + } +} + +func convertReleaseNotes(in *cyclonedx.ReleaseNotes) *cyclonedx_v1_4.ReleaseNotes { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.ReleaseNotes{ + Type: in.Type, + Title: stringPtr(in.Title), + FeaturedImage: stringPtr(in.FeaturedImage), + SocialImage: stringPtr(in.SocialImage), + Description: stringPtr(in.Description), + Timestamp: convertTimestamp(in.Timestamp), + Aliases: strSliceDeref(in.Aliases), + Tags: strSliceDeref(in.Tags), + Resolves: convertArray(in.Resolves, convertIssue), + Notes: convertArray(in.Notes, convertNote), + Properties: convertArray(in.Properties, convertProperty), + } +} + +func convertScope(in cyclonedx.Scope) *cyclonedx_v1_4.Scope { + if in == "" { + return nil + } + + switch in { + case cyclonedx.ScopeExcluded: + return pointer.Ptr(cyclonedx_v1_4.Scope_SCOPE_EXCLUDED) + case cyclonedx.ScopeOptional: + return pointer.Ptr(cyclonedx_v1_4.Scope_SCOPE_OPTIONAL) + case cyclonedx.ScopeRequired: + return pointer.Ptr(cyclonedx_v1_4.Scope_SCOPE_REQUIRED) + default: + return pointer.Ptr(cyclonedx_v1_4.Scope_SCOPE_UNSPECIFIED) + } +} + +func convertScoringMethod(in cyclonedx.ScoringMethod) *cyclonedx_v1_4.ScoreMethod { + if in == "" { + return nil + } + + switch in { + case cyclonedx.ScoringMethodOther: + return pointer.Ptr(cyclonedx_v1_4.ScoreMethod_SCORE_METHOD_OTHER) + case cyclonedx.ScoringMethodCVSSv2: + return pointer.Ptr(cyclonedx_v1_4.ScoreMethod_SCORE_METHOD_CVSSV2) + case cyclonedx.ScoringMethodCVSSv3: + return pointer.Ptr(cyclonedx_v1_4.ScoreMethod_SCORE_METHOD_CVSSV3) + case cyclonedx.ScoringMethodCVSSv31: + return pointer.Ptr(cyclonedx_v1_4.ScoreMethod_SCORE_METHOD_CVSSV31) + case cyclonedx.ScoringMethodOWASP: + return pointer.Ptr(cyclonedx_v1_4.ScoreMethod_SCORE_METHOD_OWASP) + default: + return pointer.Ptr(cyclonedx_v1_4.ScoreMethod_SCORE_METHOD_NULL) + } +} + +func convertService(in *cyclonedx.Service) *cyclonedx_v1_4.Service { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Service{ + BomRef: stringPtr(in.BOMRef), + Provider: convertOrganizationalEntity(in.Provider), + Group: stringPtr(in.Group), + Name: in.Name, + Version: stringPtr(in.Version), + Description: stringPtr(in.Description), + Endpoints: strSliceDeref(in.Endpoints), + Authenticated: in.Authenticated, + XTrustBoundary: in.CrossesTrustBoundary, + Data: convertArray(in.Data, convertDataClassification), + Licenses: convertArray(castLicenses(in.Licenses), convertLicenseChoice), + ExternalReferences: convertArray(in.ExternalReferences, convertExternalReference), + Services: convertArray(in.Services, convertService), + Properties: convertArray(in.Properties, convertProperty), + ReleaseNotes: convertReleaseNotes(in.ReleaseNotes), + } +} + +func convertSeverity(in cyclonedx.Severity) *cyclonedx_v1_4.Severity { + if in == "" { + return nil + } + + switch in { + case cyclonedx.SeverityUnknown: + return pointer.Ptr(cyclonedx_v1_4.Severity_SEVERITY_UNKNOWN) + case cyclonedx.SeverityNone: + return pointer.Ptr(cyclonedx_v1_4.Severity_SEVERITY_NONE) + case cyclonedx.SeverityInfo: + return pointer.Ptr(cyclonedx_v1_4.Severity_SEVERITY_INFO) + case cyclonedx.SeverityLow: + return pointer.Ptr(cyclonedx_v1_4.Severity_SEVERITY_LOW) + case cyclonedx.SeverityMedium: + return pointer.Ptr(cyclonedx_v1_4.Severity_SEVERITY_MEDIUM) + case cyclonedx.SeverityHigh: + return pointer.Ptr(cyclonedx_v1_4.Severity_SEVERITY_HIGH) + case cyclonedx.SeverityCritical: + return pointer.Ptr(cyclonedx_v1_4.Severity_SEVERITY_CRITICAL) + default: + return pointer.Ptr(cyclonedx_v1_4.Severity_SEVERITY_UNKNOWN) + } +} + +func convertSource(in *cyclonedx.Source) *cyclonedx_v1_4.Source { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Source{ + Name: stringPtr(in.Name), + Url: stringPtr(in.URL), + } +} + +func convertSwid(in *cyclonedx.SWID) *cyclonedx_v1_4.Swid { + if in == nil { + return nil + } + + var tagVersion *int32 = nil + if in.TagVersion != nil { + tagVersion = pointer.Ptr(int32(*in.TagVersion)) + } + + return &cyclonedx_v1_4.Swid{ + TagId: in.TagID, + Name: in.Name, + Version: stringPtr(in.Version), + TagVersion: tagVersion, + Patch: in.Patch, + Text: convertAttachedText(in.Text), + Url: stringPtr(in.URL), + } +} + +func convertTimestamp(in string) *timestamppb.Timestamp { + ts, err := time.Parse(time.RFC3339, in) + if err != nil { + return nil + } else { + return timestamppb.New(ts) + } +} + +func convertDuration(in time.Duration) *durationpb.Duration { + return durationpb.New(in) +} + +func convertTool(in *cyclonedx.Tool) *cyclonedx_v1_4.Tool { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.Tool{ + Vendor: stringPtr(in.Vendor), + Name: stringPtr(in.Name), + Version: stringPtr(in.Version), + Hashes: convertArray(in.Hashes, convertHash), + ExternalReferences: convertArray(in.ExternalReferences, convertExternalReference), + } +} + +func convertVulnerability(in *cyclonedx.Vulnerability) *cyclonedx_v1_4.Vulnerability { + if in == nil { + return nil + } + + var cwes []int32 + if in.CWEs != nil { + cwes = make([]int32, len(*in.CWEs)) + for i := range *in.CWEs { + cwes[i] = int32((*in.CWEs)[i]) + } + } + + return &cyclonedx_v1_4.Vulnerability{ + BomRef: stringPtr(in.BOMRef), + Id: stringPtr(in.ID), + Source: convertSource(in.Source), + References: convertArray(in.References, convertVulnerabilityReference), + Ratings: convertArray(in.Ratings, convertVulnerabilityRating), + Cwes: cwes, + Description: stringPtr(in.Description), + Detail: stringPtr(in.Detail), + Recommendation: stringPtr(in.Recommendation), + Advisories: convertArray(in.Advisories, convertAdvisory), + Created: convertTimestamp(in.Created), + Published: convertTimestamp(in.Published), + Updated: convertTimestamp(in.Updated), + Credits: convertVulnerabilityCredits(in.Credits), + Tools: convertArray(in.Tools, convertTool), + Analysis: convertVulnerabilityAnalysis(in.Analysis), + Affects: convertArray(in.Affects, convertVulnerabilityAffects), + Properties: convertArray(in.Properties, convertProperty), + } +} + +func convertVulnerabilityAffectedStatus(in cyclonedx.VulnerabilityStatus) *cyclonedx_v1_4.VulnerabilityAffectedStatus { + if in == "" { + return nil + } + + switch in { + case cyclonedx.VulnerabilityStatusUnknown: + return pointer.Ptr(cyclonedx_v1_4.VulnerabilityAffectedStatus_VULNERABILITY_AFFECTED_STATUS_UNKNOWN) + case cyclonedx.VulnerabilityStatusAffected: + return pointer.Ptr(cyclonedx_v1_4.VulnerabilityAffectedStatus_VULNERABILITY_AFFECTED_STATUS_AFFECTED) + case cyclonedx.VulnerabilityStatusNotAffected: + return pointer.Ptr(cyclonedx_v1_4.VulnerabilityAffectedStatus_VULNERABILITY_AFFECTED_STATUS_NOT_AFFECTED) + default: + return pointer.Ptr(cyclonedx_v1_4.VulnerabilityAffectedStatus_VULNERABILITY_AFFECTED_STATUS_UNKNOWN) + } +} + +func convertVulnerabilityAffectedVersions(in *cyclonedx.AffectedVersions) (out *cyclonedx_v1_4.VulnerabilityAffectedVersions) { + if in == nil { + return nil + } + + out = &cyclonedx_v1_4.VulnerabilityAffectedVersions{ + Status: convertVulnerabilityAffectedStatus(in.Status), + } + + if in.Version != "" { + out.Choice = &cyclonedx_v1_4.VulnerabilityAffectedVersions_Version{ + Version: in.Version, + } + } + + if in.Range != "" { + out.Choice = &cyclonedx_v1_4.VulnerabilityAffectedVersions_Range{ + Range: in.Range, + } + } + + return out +} + +func convertVulnerabilityAffects(in *cyclonedx.Affects) *cyclonedx_v1_4.VulnerabilityAffects { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.VulnerabilityAffects{ + Ref: in.Ref, + Versions: convertArray(in.Range, convertVulnerabilityAffectedVersions), + } +} + +func convertVulnerabilityAnalysis(in *cyclonedx.VulnerabilityAnalysis) *cyclonedx_v1_4.VulnerabilityAnalysis { + if in == nil { + return nil + } + + var response []cyclonedx_v1_4.VulnerabilityResponse + if in.Response != nil { + response = make([]cyclonedx_v1_4.VulnerabilityResponse, 0, len(*in.Response)) + for _, e := range *in.Response { + response = append(response, convertImpactAnalysisResponse(e)) + } + } + + return &cyclonedx_v1_4.VulnerabilityAnalysis{ + State: convertImpactAnalysisState(in.State), + Justification: convertImpactAnalysisJustification(in.Justification), + Response: response, + Detail: stringPtr(in.Detail), + } +} + +func convertVulnerabilityCredits(in *cyclonedx.Credits) *cyclonedx_v1_4.VulnerabilityCredits { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.VulnerabilityCredits{ + Organizations: convertArray(in.Organizations, convertOrganizationalEntity), + Individuals: convertArray(in.Individuals, convertOrganizationalContact), + } +} + +func convertVulnerabilityRating(in *cyclonedx.VulnerabilityRating) *cyclonedx_v1_4.VulnerabilityRating { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.VulnerabilityRating{ + Source: convertSource(in.Source), + Score: in.Score, + Severity: convertSeverity(in.Severity), + Method: convertScoringMethod(in.Method), + Vector: stringPtr(in.Vector), + Justification: stringPtr(in.Justification), + } +} + +func convertVulnerabilityReference(in *cyclonedx.VulnerabilityReference) *cyclonedx_v1_4.VulnerabilityReference { + if in == nil { + return nil + } + + return &cyclonedx_v1_4.VulnerabilityReference{ + Id: stringPtr(in.ID), + Source: convertSource(in.Source), + } +} diff --git a/pkg/collector/corechecks/sbom/convert_test.go b/pkg/collector/corechecks/sbom/convert_test.go new file mode 100644 index 0000000000000..98438ac93c966 --- /dev/null +++ b/pkg/collector/corechecks/sbom/convert_test.go @@ -0,0 +1,28 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package sbom + +import ( + "testing" + + "github.com/CycloneDX/cyclonedx-go" + fuzz "github.com/google/gofuzz" + "github.com/stretchr/testify/assert" + "google.golang.org/protobuf/proto" +) + +func FuzzConvertBOM(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + f := fuzz.NewFromGoFuzz(data).NilChance(0.8).NumElements(0, 2) + + var bom cyclonedx.BOM + f.Fuzz(&bom) + + pb := convertBOM(&bom) + _, err := proto.Marshal(pb) + assert.Nil(t, err) + }) +} diff --git a/pkg/collector/corechecks/sbom/processor.go b/pkg/collector/corechecks/sbom/processor.go new file mode 100644 index 0000000000000..8c5592961306b --- /dev/null +++ b/pkg/collector/corechecks/sbom/processor.go @@ -0,0 +1,93 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package sbom + +import ( + "strings" + "time" + + "github.com/DataDog/datadog-agent/pkg/aggregator" + queue "github.com/DataDog/datadog-agent/pkg/util/aggregatingqueue" + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" + "google.golang.org/protobuf/types/known/timestamppb" + + "github.com/DataDog/agent-payload/v5/sbom" + model "github.com/DataDog/agent-payload/v5/sbom" +) + +var /* const */ ( + sourceAgent = "agent" +) + +type processor struct { + queue chan *model.SBOMEntity +} + +func newProcessor(sender aggregator.Sender, maxNbItem int, maxRetentionTime time.Duration) *processor { + return &processor{ + queue: queue.NewQueue(maxNbItem, maxRetentionTime, func(entities []*model.SBOMEntity) { + sender.SBOM([]sbom.SBOMPayload{ + { + Version: 1, + Source: &sourceAgent, + Entities: entities, + }, + }) + }), + } +} + +func (p *processor) processEvents(evBundle workloadmeta.EventBundle) { + close(evBundle.Ch) + + log.Tracef("Processing %d events", len(evBundle.Events)) + + for _, event := range evBundle.Events { + p.processSBOM(event.Entity.(*workloadmeta.ContainerImageMetadata)) + } +} + +func (p *processor) processRefresh(allImages []*workloadmeta.ContainerImageMetadata) { + // So far, the check is refreshing all the images every 5 minutes all together. + for _, img := range allImages { + p.processSBOM(img) + } +} + +func (p *processor) processSBOM(img *workloadmeta.ContainerImageMetadata) { + if img.SBOM == nil || img.SBOM.CycloneDXBOM == nil { + return + } + + for _, repoDigest := range img.RepoDigests { + repo := strings.SplitN(repoDigest, "@sha256:", 2)[0] + id := repo + "@" + img.ID + + tags := make([]string, 0, len(img.RepoTags)) + for _, repoTag := range img.RepoTags { + if strings.HasPrefix(repoTag, repo+":") { + tags = append(tags, strings.SplitN(repoTag, ":", 2)[1]) + } + } + + p.queue <- &model.SBOMEntity{ + Type: model.SBOMSourceType_CONTAINER_IMAGE_LAYERS, + Id: id, + GeneratedAt: timestamppb.New(img.SBOM.GenerationTime), + Tags: tags, + InUse: true, // TODO: compute this field + GenerationDuration: convertDuration(img.SBOM.GenerationDuration), + Sbom: &sbom.SBOMEntity_Cyclonedx{ + Cyclonedx: convertBOM(img.SBOM.CycloneDXBOM), + }, + } + } +} + +func (p *processor) stop() { + close(p.queue) +} diff --git a/pkg/collector/corechecks/sbom/processor_test.go b/pkg/collector/corechecks/sbom/processor_test.go new file mode 100644 index 0000000000000..eca8b77356e41 --- /dev/null +++ b/pkg/collector/corechecks/sbom/processor_test.go @@ -0,0 +1,185 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package sbom + +import ( + "testing" + "time" + + "github.com/CycloneDX/cyclonedx-go" + "github.com/DataDog/agent-payload/v5/cyclonedx_v1_4" + model "github.com/DataDog/agent-payload/v5/sbom" + "github.com/DataDog/datadog-agent/pkg/aggregator/mocksender" + "github.com/DataDog/datadog-agent/pkg/collector/check" + "github.com/DataDog/datadog-agent/pkg/util/pointer" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" + "github.com/stretchr/testify/mock" + "google.golang.org/protobuf/types/known/durationpb" + "google.golang.org/protobuf/types/known/timestamppb" +) + +func TestProcessEvents(t *testing.T) { + sender := mocksender.NewMockSender(check.ID("")) + sender.On("SBOM", mock.Anything, mock.Anything).Return() + p := newProcessor(sender, 2, 50*time.Millisecond) + + sbomGenerationTime := time.Now() + + p.processEvents(workloadmeta.EventBundle{ + Events: []workloadmeta.Event{ + { + Type: workloadmeta.EventTypeSet, + Entity: &workloadmeta.ContainerImageMetadata{ + EntityID: workloadmeta.EntityID{ + Kind: workloadmeta.KindContainerImageMetadata, + ID: "sha256:9634b84c45c6ad220c3d0d2305aaa5523e47d6d43649c9bbeda46ff010b4aacd", + }, + RepoTags: []string{ + "datadog/agent:7-rc", + "datadog/agent:7.41.1-rc.1", + "gcr.io/datadoghq/agent:7-rc", + "gcr.io/datadoghq/agent:7.41.1-rc.1", + "public.ecr.aws/datadog/agent:7-rc", + "public.ecr.aws/datadog/agent:7.41.1-rc.1", + }, + RepoDigests: []string{ + "datadog/agent@sha256:052f1fdf4f9a7117d36a1838ab60782829947683007c34b69d4991576375c409", + "gcr.io/datadoghq/agent@sha256:052f1fdf4f9a7117d36a1838ab60782829947683007c34b69d4991576375c409", + "public.ecr.aws/datadog/agent@sha256:052f1fdf4f9a7117d36a1838ab60782829947683007c34b69d4991576375c409", + }, + SBOM: &workloadmeta.SBOM{ + CycloneDXBOM: &cyclonedx.BOM{ + SpecVersion: cyclonedx.SpecVersion1_4, + Version: 42, + Components: &[]cyclonedx.Component{ + { + Name: "Foo", + }, + { + Name: "Bar", + }, + { + Name: "Baz", + }, + }, + }, + GenerationTime: sbomGenerationTime, + GenerationDuration: 10 * time.Second, + }, + }, + }, + }, + Ch: make(chan struct{}), + }) + + sender.AssertNumberOfCalls(t, "SBOM", 1) + sender.AssertSBOM(t, []model.SBOMPayload{ + { + Version: 1, + Source: &sourceAgent, + Entities: []*model.SBOMEntity{ + { + Type: model.SBOMSourceType_CONTAINER_IMAGE_LAYERS, + Id: "datadog/agent@sha256:9634b84c45c6ad220c3d0d2305aaa5523e47d6d43649c9bbeda46ff010b4aacd", + Tags: []string{ + "7-rc", + "7.41.1-rc.1", + }, + InUse: true, + GeneratedAt: timestamppb.New(sbomGenerationTime), + GenerationDuration: durationpb.New(10 * time.Second), + Sbom: &model.SBOMEntity_Cyclonedx{ + Cyclonedx: &cyclonedx_v1_4.Bom{ + SpecVersion: "1.4", + Version: pointer.Ptr(int32(42)), + Components: []*cyclonedx_v1_4.Component{ + { + Name: "Foo", + }, + { + Name: "Bar", + }, + { + Name: "Baz", + }, + }, + }, + }, + }, + { + Type: model.SBOMSourceType_CONTAINER_IMAGE_LAYERS, + Id: "gcr.io/datadoghq/agent@sha256:9634b84c45c6ad220c3d0d2305aaa5523e47d6d43649c9bbeda46ff010b4aacd", + Tags: []string{ + "7-rc", + "7.41.1-rc.1", + }, + InUse: true, + GeneratedAt: timestamppb.New(sbomGenerationTime), + GenerationDuration: durationpb.New(10 * time.Second), + Sbom: &model.SBOMEntity_Cyclonedx{ + Cyclonedx: &cyclonedx_v1_4.Bom{ + SpecVersion: "1.4", + Version: pointer.Ptr(int32(42)), + Components: []*cyclonedx_v1_4.Component{ + { + Name: "Foo", + }, + { + Name: "Bar", + }, + { + Name: "Baz", + }, + }, + }, + }, + }, + }, + }, + }) + + time.Sleep(100 * time.Millisecond) + + sender.AssertNumberOfCalls(t, "SBOM", 2) + sender.AssertSBOM(t, []model.SBOMPayload{ + { + Version: 1, + Source: &sourceAgent, + Entities: []*model.SBOMEntity{ + { + Type: model.SBOMSourceType_CONTAINER_IMAGE_LAYERS, + Id: "public.ecr.aws/datadog/agent@sha256:9634b84c45c6ad220c3d0d2305aaa5523e47d6d43649c9bbeda46ff010b4aacd", + Tags: []string{ + "7-rc", + "7.41.1-rc.1", + }, + InUse: true, + GeneratedAt: timestamppb.New(sbomGenerationTime), + GenerationDuration: durationpb.New(10 * time.Second), + Sbom: &model.SBOMEntity_Cyclonedx{ + Cyclonedx: &cyclonedx_v1_4.Bom{ + SpecVersion: "1.4", + Version: pointer.Ptr(int32(42)), + Components: []*cyclonedx_v1_4.Component{ + { + Name: "Foo", + }, + { + Name: "Bar", + }, + { + Name: "Baz", + }, + }, + }, + }, + }, + }, + }, + }) + + p.stop() +} diff --git a/pkg/collector/corechecks/snmp/common/contants.go b/pkg/collector/corechecks/snmp/common/contants.go index 6d633643ec980..9a1ea9144a9d6 100644 --- a/pkg/collector/corechecks/snmp/common/contants.go +++ b/pkg/collector/corechecks/snmp/common/contants.go @@ -13,3 +13,32 @@ const SnmpIntegrationName = "snmp" // SnmpExternalTagsSourceType is the source id used for external tags const SnmpExternalTagsSourceType = "snmp" + +type IfAdminStatus int + +const ( + AdminStatus_Up IfAdminStatus = 1 + AdminStatus_Down IfAdminStatus = 2 + AdminStatus_Testing IfAdminStatus = 3 +) + +type IfOperStatus int + +const ( + OperStatus_Up IfOperStatus = 1 + OperStatus_Down IfOperStatus = 2 + OperStatus_Testing IfOperStatus = 3 + OperStatus_Unknown IfOperStatus = 4 + OperStatus_Dormant IfOperStatus = 5 + OperStatus_NotPresent IfOperStatus = 6 + OperStatus_LowerLayerDown IfOperStatus = 7 +) + +type InterfaceStatus string + +const ( + InterfaceStatus_Up InterfaceStatus = "up" + InterfaceStatus_Down InterfaceStatus = "down" + InterfaceStatus_Warning InterfaceStatus = "warning" + InterfaceStatus_Off InterfaceStatus = "off" +) diff --git a/pkg/collector/corechecks/snmp/common/utils.go b/pkg/collector/corechecks/snmp/common/utils.go index 29b53fbf141ad..3417dfb3687dc 100644 --- a/pkg/collector/corechecks/snmp/common/utils.go +++ b/pkg/collector/corechecks/snmp/common/utils.go @@ -42,3 +42,11 @@ func CopyStrings(tags []string) []string { func GetAgentVersionTag() string { return "agent_version:" + version.AgentVersion } + +// BoolToFloat64 converts a true/false boolean into a 1.0 or 0.0 float +func BoolToFloat64(val bool) float64 { + if val { + return 1. + } + return 0. +} diff --git a/pkg/collector/corechecks/snmp/common/utils_test.go b/pkg/collector/corechecks/snmp/common/utils_test.go index 8429946e557af..546daf6d3ef1e 100644 --- a/pkg/collector/corechecks/snmp/common/utils_test.go +++ b/pkg/collector/corechecks/snmp/common/utils_test.go @@ -106,3 +106,9 @@ func Test_CopyStrings(t *testing.T) { assert.NotEqual(t, fmt.Sprintf("%p", tags), fmt.Sprintf("%p", newTags)) assert.NotEqual(t, fmt.Sprintf("%p", &tags[0]), fmt.Sprintf("%p", &newTags[0])) } + +func Test_BoolToFloat64(t *testing.T) { + assert.Equal(t, BoolToFloat64(true), 1.0) + assert.Equal(t, BoolToFloat64(false), 0.0) + +} diff --git a/pkg/collector/corechecks/snmp/internal/checkconfig/config_metadata.go b/pkg/collector/corechecks/snmp/internal/checkconfig/config_metadata.go index cc4db1b27662a..6a4fffddc04bc 100644 --- a/pkg/collector/corechecks/snmp/internal/checkconfig/config_metadata.go +++ b/pkg/collector/corechecks/snmp/internal/checkconfig/config_metadata.go @@ -84,6 +84,22 @@ var LegacyMetadataConfig = MetadataConfig{ }, }, }, + "ip_addresses": { + Fields: map[string]MetadataField{ + "if_index": { + Symbol: SymbolConfig{ + OID: "1.3.6.1.2.1.4.20.1.2", + Name: "ipAdEntIfIndex", + }, + }, + "netmask": { + Symbol: SymbolConfig{ + OID: "1.3.6.1.2.1.4.20.1.3", + Name: "ipAdEntNetMask", + }, + }, + }, + }, } var TopologyMetadataConfig = MetadataConfig{ @@ -136,6 +152,16 @@ var TopologyMetadataConfig = MetadataConfig{ // - 1.0.8802.1.1.2.1.4.1.1.12 lldpRemSysCapEnabled }, }, + "lldp_remote_management": { + Fields: map[string]MetadataField{ + "interface_id_type": { + Symbol: SymbolConfig{ + OID: "1.0.8802.1.1.2.1.4.2.1.3", + Name: "lldpRemManAddrIfSubtype", + }, + }, + }, + }, "lldp_local": { Fields: map[string]MetadataField{ "interface_id_type": { diff --git a/pkg/collector/corechecks/snmp/internal/checkconfig/config_test.go b/pkg/collector/corechecks/snmp/internal/checkconfig/config_test.go index 88b02cd9500b2..9ece5bafd9c72 100644 --- a/pkg/collector/corechecks/snmp/internal/checkconfig/config_test.go +++ b/pkg/collector/corechecks/snmp/internal/checkconfig/config_test.go @@ -975,6 +975,8 @@ func Test_snmpConfig_refreshWithProfile(t *testing.T) { "1.2.3.4.7", "1.3.6.1.2.1.2.2.1.99", "1.3.6.1.2.1.31.1.1.1.1", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, }, c.OidConfig) diff --git a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go index 6886d1c3092e8..94d0f84cf06d0 100644 --- a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go +++ b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck.go @@ -32,9 +32,11 @@ import ( ) const ( - snmpLoaderTag = "loader:core" - serviceCheckName = "snmp.can_check" - deviceHostnamePrefix = "device:" + snmpLoaderTag = "loader:core" + serviceCheckName = "snmp.can_check" + deviceReachableMetric = "snmp.device.reachable" + deviceUnreachableMetric = "snmp.device.unreachable" + deviceHostnamePrefix = "device:" ) // define timeNow as variable to make it possible to mock it during test @@ -114,6 +116,9 @@ func (d *DeviceCheck) Run(collectionTime time.Time) error { tags = append(tags, dynamicTags...) d.sender.ServiceCheck(serviceCheckName, metrics.ServiceCheckOK, tags, "") } + d.sender.Gauge(deviceReachableMetric, common.BoolToFloat64(deviceReachable), tags) + d.sender.Gauge(deviceUnreachableMetric, common.BoolToFloat64(!deviceReachable), tags) + if values != nil { d.sender.ReportMetrics(d.config.Metrics, values, tags) } diff --git a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go index a6e39018bfff3..d1bfc62a5798c 100644 --- a/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go +++ b/pkg/collector/corechecks/snmp/internal/devicecheck/devicecheck_test.go @@ -208,7 +208,6 @@ profiles: }, { Variables: []gosnmp.SnmpPDU{ - { Name: "1.3.6.1.2.1.31.1.1.1.1.1", Type: gosnmp.OctetString, @@ -219,7 +218,16 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, - + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, { Name: "1.3.6.1.2.1.31.1.1.1.1.2", Type: gosnmp.OctetString, @@ -230,6 +238,21 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -267,7 +290,7 @@ profiles: "1.3.6.1.4.1.3375.2.1.3.3.3.0", }).Return(&packets[2], nil) sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.13", "1.3.6.1.2.1.2.2.1.14", "1.3.6.1.2.1.2.2.1.6", "1.3.6.1.2.1.2.2.1.7", "1.3.6.1.2.1.2.2.1.8"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[0], nil) - sess.On("GetBulk", []string{"1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) + sess.On("GetBulk", []string{"1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", "1.3.6.1.2.1.4.20.1.2", "1.3.6.1.2.1.4.20.1.3"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) err = deviceCk.Run(time.Now()) assert.Nil(t, err) @@ -500,6 +523,16 @@ experimental_detect_metrics_enabled: true Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, { Name: "1.3.6.1.2.1.2.2.1.8.2", @@ -516,6 +549,27 @@ experimental_detect_metrics_enabled: true Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -571,7 +625,7 @@ experimental_detect_metrics_enabled: true "1.3.6.1.4.1.3375.2.1.1.2.1.44.999", }).Return(&packets[3], nil) sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.13", "1.3.6.1.2.1.2.2.1.14", "1.3.6.1.2.1.2.2.1.2", "1.3.6.1.2.1.2.2.1.6", "1.3.6.1.2.1.2.2.1.7"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[0], nil) - sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) + sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", "1.3.6.1.2.1.4.20.1.2", "1.3.6.1.2.1.4.20.1.3"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) savedAutodetectMetricsTime := deviceCk.nextAutodetectMetrics err = deviceCk.Run(time.Now()) @@ -994,6 +1048,16 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, { Name: "1.3.6.1.2.1.31.1.1.1.1.2", @@ -1005,6 +1069,27 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -1042,7 +1127,7 @@ profiles: "1.3.6.1.4.1.3375.2.1.3.3.3.0", }).Return(&packets[2], nil) sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.13", "1.3.6.1.2.1.2.2.1.14", "1.3.6.1.2.1.2.2.1.6", "1.3.6.1.2.1.2.2.1.7", "1.3.6.1.2.1.2.2.1.8"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[0], nil) - sess.On("GetBulk", []string{"1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) + sess.On("GetBulk", []string{"1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", "1.3.6.1.2.1.4.20.1.2", "1.3.6.1.2.1.4.20.1.3"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) err = deviceCk.Run(time.Now()) assert.Nil(t, err) @@ -1051,13 +1136,17 @@ profiles: "static_tag:from_profile_root", "some_tag:some_tag_value", "prefix:f", "suffix:oo_sys_name"} sender.AssertServiceCheck(t, "snmp.can_check", metrics.ServiceCheckOK, "", snmpTags, "") + sender.AssertMetric(t, "Gauge", deviceReachableMetric, 1., "", snmpTags) + sender.AssertMetric(t, "Gauge", deviceUnreachableMetric, 0., "", snmpTags) assert.Equal(t, false, deviceCk.config.AutodetectProfile) - + sender.ResetCalls() sess.ConnectErr = fmt.Errorf("some error") err = deviceCk.Run(time.Now()) assert.Error(t, err, "some error") sender.Mock.AssertCalled(t, "ServiceCheck", "snmp.can_check", metrics.ServiceCheckCritical, "", mocksender.MatchTagsContains(snmpTags), "snmp connection error: some error") + sender.AssertMetric(t, "Gauge", deviceUnreachableMetric, 1., "", snmpTags) + sender.AssertMetric(t, "Gauge", deviceReachableMetric, 0., "", snmpTags) } func TestRun_sessionCloseError(t *testing.T) { diff --git a/pkg/collector/corechecks/snmp/internal/metadata/payload.go b/pkg/collector/corechecks/snmp/internal/metadata/payload.go index 6fb590c075acd..3e340457499a2 100644 --- a/pkg/collector/corechecks/snmp/internal/metadata/payload.go +++ b/pkg/collector/corechecks/snmp/internal/metadata/payload.go @@ -5,6 +5,8 @@ package metadata +import "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/common" + // PayloadMetadataBatchSize is the number of resources per event payload // Resources are devices, interfaces, etc const PayloadMetadataBatchSize = 100 @@ -22,11 +24,6 @@ const ( type IDType string const ( - // IDTypeNDM is used as IDType value for topology data - // to indicate the ID uses NDM internal type - // e.g. interfaceID of `ndm` type is in this format: `::` - IDTypeNDM = "ndm" - // IDTypeMacAddress represent mac address in `00:00:00:00:00:00` format IDTypeMacAddress = "mac_address" ) @@ -37,6 +34,7 @@ type NetworkDevicesMetadata struct { Namespace string `json:"namespace"` Devices []DeviceMetadata `json:"devices,omitempty"` Interfaces []InterfaceMetadata `json:"interfaces,omitempty"` + IPAddresses []IPAddressMetadata `json:"ip_addresses,omitempty"` Links []TopologyLinkMetadata `json:"links,omitempty"` CollectTimestamp int64 `json:"collect_timestamp"` } @@ -66,27 +64,37 @@ type DeviceMetadata struct { // InterfaceMetadata contains interface metadata type InterfaceMetadata struct { - DeviceID string `json:"device_id"` - IDTags []string `json:"id_tags"` // used to correlate with interface metrics - Index int32 `json:"index"` // IF-MIB ifIndex type is InterfaceIndex (Integer32 (1..2147483647)) - Name string `json:"name,omitempty"` - Alias string `json:"alias,omitempty"` - Description string `json:"description,omitempty"` - MacAddress string `json:"mac_address,omitempty"` - AdminStatus int32 `json:"admin_status,omitempty"` // IF-MIB ifAdminStatus type is INTEGER - OperStatus int32 `json:"oper_status,omitempty"` // IF-MIB ifOperStatus type is INTEGER + DeviceID string `json:"device_id"` + IDTags []string `json:"id_tags"` // used to correlate with interface metrics + Index int32 `json:"index"` // IF-MIB ifIndex type is InterfaceIndex (Integer32 (1..2147483647)) + Name string `json:"name,omitempty"` + Alias string `json:"alias,omitempty"` + Description string `json:"description,omitempty"` + MacAddress string `json:"mac_address,omitempty"` + AdminStatus common.IfAdminStatus `json:"admin_status,omitempty"` // IF-MIB ifAdminStatus type is INTEGER + OperStatus common.IfOperStatus `json:"oper_status,omitempty"` // IF-MIB ifOperStatus type is INTEGER +} + +// IPAddressMetadata contains ip address metadata +type IPAddressMetadata struct { + InterfaceID string `json:"interface_id"` + IPAddress string `json:"ip_address"` + Prefixlen int32 `json:"prefixlen,omitempty"` } // TopologyLinkDevice contain device link data type TopologyLinkDevice struct { + DDID string `json:"dd_id,omitempty"` ID string `json:"id,omitempty"` IDType string `json:"id_type,omitempty"` Name string `json:"name,omitempty"` Description string `json:"description,omitempty"` + IPAddress string `json:"ip_address,omitempty"` } // TopologyLinkInterface contain interface link data type TopologyLinkInterface struct { + DDID string `json:"dd_id,omitempty"` ID string `json:"id"` IDType string `json:"id_type,omitempty"` Description string `json:"description,omitempty"` @@ -100,6 +108,8 @@ type TopologyLinkSide struct { // TopologyLinkMetadata contains topology interface to interface links metadata type TopologyLinkMetadata struct { - Local *TopologyLinkSide `json:"local,omitempty"` - Remote *TopologyLinkSide `json:"remote,omitempty"` + ID string `json:"id"` + SourceType string `json:"source_type"` + Local *TopologyLinkSide `json:"local"` + Remote *TopologyLinkSide `json:"remote"` } diff --git a/pkg/collector/corechecks/snmp/internal/report/report_device_metadata.go b/pkg/collector/corechecks/snmp/internal/report/report_device_metadata.go index 84f2ebc8b9e26..39434f76e2ab3 100644 --- a/pkg/collector/corechecks/snmp/internal/report/report_device_metadata.go +++ b/pkg/collector/corechecks/snmp/internal/report/report_device_metadata.go @@ -7,12 +7,13 @@ package report import ( json "encoding/json" - "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/lldp" "sort" "strconv" "strings" "time" + "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/lldp" + "github.com/DataDog/datadog-agent/pkg/epforwarder" "github.com/DataDog/datadog-agent/pkg/util" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -23,6 +24,9 @@ import ( "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/valuestore" ) +const interfaceStatusMetric = "snmp.interface.status" +const topologyLinkSourceTypeLLDP = "lldp" + // ReportNetworkDeviceMetadata reports device metadata func (ms *MetricSender) ReportNetworkDeviceMetadata(config *checkconfig.CheckConfig, store *valuestore.ResultValueStore, origTags []string, collectTime time.Time, deviceStatus metadata.DeviceStatus) { tags := common.CopyStrings(origTags) @@ -33,9 +37,10 @@ func (ms *MetricSender) ReportNetworkDeviceMetadata(config *checkconfig.CheckCon device := buildNetworkDeviceMetadata(config.DeviceID, config.DeviceIDTags, config, metadataStore, tags, deviceStatus) interfaces := buildNetworkInterfacesMetadata(config.DeviceID, metadataStore) - topologyLinks := buildNetworkTopologyMetadata(config.DeviceID, metadataStore) + ipAddresses := buildNetworkIPAddressesMetadata(config.DeviceID, metadataStore) + topologyLinks := buildNetworkTopologyMetadata(config.DeviceID, metadataStore, interfaces) - metadataPayloads := batchPayloads(config.Namespace, config.ResolvedSubnetName, collectTime, metadata.PayloadMetadataBatchSize, device, interfaces, topologyLinks) + metadataPayloads := batchPayloads(config.Namespace, config.ResolvedSubnetName, collectTime, metadata.PayloadMetadataBatchSize, device, interfaces, ipAddresses, topologyLinks) for _, payload := range metadataPayloads { payloadBytes, err := json.Marshal(payload) @@ -45,6 +50,48 @@ func (ms *MetricSender) ReportNetworkDeviceMetadata(config *checkconfig.CheckCon } ms.sender.EventPlatformEvent(string(payloadBytes), epforwarder.EventTypeNetworkDevicesMetadata) } + + // Telemetry + for _, interfaceStatus := range interfaces { + status := string(computeInterfaceStatus(interfaceStatus.AdminStatus, interfaceStatus.OperStatus)) + interfaceTags := []string{"status:" + status, "interface_index:" + strconv.Itoa(int(interfaceStatus.Index))} + if interfaceStatus.Name != "" { + interfaceTags = append(interfaceTags, "interface:"+interfaceStatus.Name) + } + if interfaceStatus.Alias != "" { + interfaceTags = append(interfaceTags, "interface_alias:"+interfaceStatus.Alias) + } + interfaceTags = append(interfaceTags, tags...) + ms.sender.Gauge(interfaceStatusMetric, 1, "", interfaceTags) + } +} + +func computeInterfaceStatus(adminStatus common.IfAdminStatus, operStatus common.IfOperStatus) common.InterfaceStatus { + if adminStatus == common.AdminStatus_Up { + switch { + case operStatus == common.OperStatus_Up: + return common.InterfaceStatus_Up + case operStatus == common.OperStatus_Down: + return common.InterfaceStatus_Down + } + return common.InterfaceStatus_Warning + } + if adminStatus == common.AdminStatus_Down { + switch { + case operStatus == common.OperStatus_Up: + return common.InterfaceStatus_Down + case operStatus == common.OperStatus_Down: + return common.InterfaceStatus_Off + } + return common.InterfaceStatus_Warning + } + if adminStatus == common.AdminStatus_Testing { + switch { + case operStatus != common.OperStatus_Down: + return common.InterfaceStatus_Warning + } + } + return common.InterfaceStatus_Down } func buildMetadataStore(metadataConfigs checkconfig.MetadataConfig, values *valuestore.ResultValueStore) *metadata.Store { @@ -182,8 +229,8 @@ func buildNetworkInterfacesMetadata(deviceID string, store *metadata.Store) []me Alias: store.GetColumnAsString("interface.alias", strIndex), Description: store.GetColumnAsString("interface.description", strIndex), MacAddress: store.GetColumnAsString("interface.mac_address", strIndex), - AdminStatus: int32(store.GetColumnAsFloat("interface.admin_status", strIndex)), - OperStatus: int32(store.GetColumnAsFloat("interface.oper_status", strIndex)), + AdminStatus: common.IfAdminStatus((store.GetColumnAsFloat("interface.admin_status", strIndex))), + OperStatus: common.IfOperStatus((store.GetColumnAsFloat("interface.oper_status", strIndex))), IDTags: ifIDTags, } interfaces = append(interfaces, networkInterface) @@ -191,12 +238,43 @@ func buildNetworkInterfacesMetadata(deviceID string, store *metadata.Store) []me return interfaces } -func buildNetworkTopologyMetadata(deviceID string, store *metadata.Store) []metadata.TopologyLinkMetadata { +func buildNetworkIPAddressesMetadata(deviceID string, store *metadata.Store) []metadata.IPAddressMetadata { if store == nil { // it's expected that the value store is nil if we can't reach the device // in that case, we just return a nil slice. return nil } + indexes := store.GetColumnIndexes("ip_addresses.if_index") + if len(indexes) == 0 { + log.Debugf("Unable to build ip addresses metadata: no ip_addresses.if_index found") + return nil + } + sort.Strings(indexes) + var ipAddresses []metadata.IPAddressMetadata + for _, strIndex := range indexes { + index := store.GetColumnAsString("ip_addresses.if_index", strIndex) + Netmask := store.GetColumnAsString("ip_addresses.netmask", strIndex) + ipAddress := metadata.IPAddressMetadata{ + InterfaceID: deviceID + ":" + index, + IPAddress: strIndex, + Prefixlen: int32(netmaskToPrefixlen(Netmask)), + } + ipAddresses = append(ipAddresses, ipAddress) + } + return ipAddresses +} + +func buildNetworkTopologyMetadata(deviceID string, store *metadata.Store, interfaces []metadata.InterfaceMetadata) []metadata.TopologyLinkMetadata { + if store == nil { + // it's expected that the value store is nil if we can't reach the device + // in that case, we just return a nil slice. + return nil + } + + interfaceIndexByIDType := buildInterfaceIndexByIDType(interfaces) + + remManAddrByLLDPRemIndex := getRemManIPAddrByLLDPRemIndex(store.GetColumnIndexes("lldp_remote_management.interface_id_type")) + indexes := store.GetColumnIndexes("lldp_remote.interface_id") // using `lldp_remote.interface_id` to get indexes since it's expected to be always present if len(indexes) == 0 { log.Debugf("Unable to build links metadata: no lldp_remote indexes found") @@ -216,6 +294,7 @@ func buildNetworkTopologyMetadata(deviceID string, store *metadata.Store) []meta // See https://www.rfc-editor.org/rfc/rfc2021 localPortNum := indexElems[1] + lldpRemIndex := indexElems[2] remoteDeviceIDType := lldp.ChassisIDSubtypeMap[store.GetColumnAsString("lldp_remote.chassis_id_type", strIndex)] remoteDeviceID := formatID(remoteDeviceIDType, store, "lldp_remote.chassis_id", strIndex) @@ -226,13 +305,22 @@ func buildNetworkTopologyMetadata(deviceID string, store *metadata.Store) []meta localInterfaceIDType := lldp.PortIDSubTypeMap[store.GetColumnAsString("lldp_local.interface_id_type", localPortNum)] localInterfaceID := formatID(localInterfaceIDType, store, "lldp_local.interface_id", localPortNum) + resolvedLocalInterfaceID := resolveLocalInterface(deviceID, interfaceIndexByIDType, localInterfaceIDType, localInterfaceID) + + // remEntryUniqueID: The combination of localPortNum and lldpRemIndex is expected to be unique for each entry in + // lldpRemTable. We don't include lldpRemTimeMark (used for filtering only recent data) since it can change often. + remEntryUniqueID := localPortNum + "." + lldpRemIndex + newLink := metadata.TopologyLinkMetadata{ + ID: deviceID + ":" + remEntryUniqueID, + SourceType: topologyLinkSourceTypeLLDP, Remote: &metadata.TopologyLinkSide{ Device: &metadata.TopologyLinkDevice{ Name: store.GetColumnAsString("lldp_remote.device_name", strIndex), Description: store.GetColumnAsString("lldp_remote.device_desc", strIndex), ID: remoteDeviceID, IDType: remoteDeviceIDType, + IPAddress: remManAddrByLLDPRemIndex[lldpRemIndex], }, Interface: &metadata.TopologyLinkInterface{ ID: remoteInterfaceID, @@ -242,13 +330,12 @@ func buildNetworkTopologyMetadata(deviceID string, store *metadata.Store) []meta }, Local: &metadata.TopologyLinkSide{ Interface: &metadata.TopologyLinkInterface{ + DDID: resolvedLocalInterfaceID, ID: localInterfaceID, IDType: localInterfaceIDType, - // TODO: We can possibly resolve locally to ifIndex to avoid having to resolve on backend side }, Device: &metadata.TopologyLinkDevice{ - ID: deviceID, - IDType: metadata.IDTypeNDM, + DDID: deviceID, }, }, } @@ -257,6 +344,87 @@ func buildNetworkTopologyMetadata(deviceID string, store *metadata.Store) []meta return links } +func resolveLocalInterface(deviceID string, interfaceIndexByIDType map[string]map[string][]int32, localInterfaceIDType string, localInterfaceID string) string { + if localInterfaceID == "" { + return "" + } + + var typesToTry []string + if localInterfaceIDType == "" { + // "smart resolution" by multiple types when localInterfaceIDType is not provided (which is often the case). + // CAVEAT: In case the smart resolution returns false positives, the solution is to configure the device to provide a proper localInterfaceIDType. + // The order of `typesToTry` has been arbitrary define (not sure if there is an order that can lead to lower false positive). + typesToTry = []string{"mac_address", "interface_name", "interface_alias", "interface_index"} + } else { + typesToTry = []string{localInterfaceIDType} + } + matchedIfIndexesMap := make(map[int32]struct{}) + for _, idType := range typesToTry { + interfaceIndexByIDValue, ok := interfaceIndexByIDType[idType] + if ok { + ifIndexes, ok := interfaceIndexByIDValue[localInterfaceID] + if ok { + for _, ifIndex := range ifIndexes { + matchedIfIndexesMap[ifIndex] = struct{}{} + } + } + } + } + if len(matchedIfIndexesMap) == 1 { + var matchedIfIndexes []int32 + for key := range matchedIfIndexesMap { + matchedIfIndexes = append(matchedIfIndexes, key) + } + return deviceID + ":" + strconv.Itoa(int(matchedIfIndexes[0])) + } + return "" +} + +func buildInterfaceIndexByIDType(interfaces []metadata.InterfaceMetadata) map[string]map[string][]int32 { + interfaceIndexByIDType := make(map[string]map[string][]int32) // map[ID_TYPE]map[ID_VALUE]IF_INDEX + for _, idType := range []string{"mac_address", "interface_name", "interface_alias", "interface_index"} { + interfaceIndexByIDType[idType] = make(map[string][]int32) + } + for _, devInterface := range interfaces { + interfaceIndexByIDType["mac_address"][devInterface.MacAddress] = append(interfaceIndexByIDType["mac_address"][devInterface.MacAddress], devInterface.Index) + interfaceIndexByIDType["interface_name"][devInterface.Name] = append(interfaceIndexByIDType["interface_name"][devInterface.Name], devInterface.Index) + interfaceIndexByIDType["interface_alias"][devInterface.Alias] = append(interfaceIndexByIDType["interface_alias"][devInterface.Alias], devInterface.Index) + + // interface_index is not a type defined by LLDP, it's used in local interface "smart resolution" when the idType is not present + strIndex := strconv.Itoa(int(devInterface.Index)) + interfaceIndexByIDType["interface_index"][strIndex] = append(interfaceIndexByIDType["interface_index"][strIndex], devInterface.Index) + } + return interfaceIndexByIDType +} + +func getRemManIPAddrByLLDPRemIndex(remManIndexes []string) map[string]string { + remManAddrByRemIndex := make(map[string]string) + for _, fullIndex := range remManIndexes { + indexElems := strings.Split(fullIndex, ".") + if len(indexElems) < 9 { + // We expect the index to be at least 9 elements (IPv4) + // 1 lldpRemTimeMark + // 1 lldpRemLocalPortNum + // 1 lldpRemIndex + // 1 lldpRemManAddrSubtype (1 for IPv4, 2 for IPv6) + // 5|17 lldpRemManAddr (4 for IPv4 and 17 for IPv6) + // the first elements is the IP type e.g. 4 for IPv4 + continue + } + lldpRemIndex := indexElems[2] + lldpRemManAddrSubtype := indexElems[3] + ipAddrType := indexElems[4] + lldpRemManAddr := indexElems[5:] + + // We only support IPv4 for the moment + // TODO: Support IPv6 + if lldpRemManAddrSubtype == "1" && ipAddrType == "4" { + remManAddrByRemIndex[lldpRemIndex] = strings.Join(lldpRemManAddr, ".") + } + } + return remManAddrByRemIndex +} + func formatID(idType string, store *metadata.Store, field string, strIndex string) string { var remoteDeviceID string if idType == metadata.IDTypeMacAddress { @@ -267,7 +435,7 @@ func formatID(idType string, store *metadata.Store, field string, strIndex strin return remoteDeviceID } -func batchPayloads(namespace string, subnet string, collectTime time.Time, batchSize int, device metadata.DeviceMetadata, interfaces []metadata.InterfaceMetadata, topologyLinks []metadata.TopologyLinkMetadata) []metadata.NetworkDevicesMetadata { +func batchPayloads(namespace string, subnet string, collectTime time.Time, batchSize int, device metadata.DeviceMetadata, interfaces []metadata.InterfaceMetadata, ipAddresses []metadata.IPAddressMetadata, topologyLinks []metadata.TopologyLinkMetadata) []metadata.NetworkDevicesMetadata { var payloads []metadata.NetworkDevicesMetadata var resourceCount int payload := metadata.NetworkDevicesMetadata{ @@ -294,6 +462,20 @@ func batchPayloads(namespace string, subnet string, collectTime time.Time, batch payload.Interfaces = append(payload.Interfaces, interfaceMetadata) } + for _, ipAddress := range ipAddresses { + if resourceCount == batchSize { + payloads = append(payloads, payload) + payload = metadata.NetworkDevicesMetadata{ + Subnet: subnet, + Namespace: namespace, + CollectTimestamp: collectTime.Unix(), + } + resourceCount = 0 + } + resourceCount++ + payload.IPAddresses = append(payload.IPAddresses, ipAddress) + } + for _, linkMetadata := range topologyLinks { if resourceCount == batchSize { payloads = append(payloads, payload) diff --git a/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go b/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go index fa52141ee4978..5ff044d3d7ddf 100644 --- a/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go +++ b/pkg/collector/corechecks/snmp/internal/report/report_device_metadata_test.go @@ -237,10 +237,15 @@ func Test_metricSender_reportNetworkDeviceMetadata_withInterfaces(t *testing.T) "1": valuestore.ResultValue{Value: float64(21)}, "2": valuestore.ResultValue{Value: float64(22)}, }, + "1.3.6.1.2.1.31.1.1.1.18": { + "1": valuestore.ResultValue{Value: "ifAlias1"}, + "2": valuestore.ResultValue{Value: ""}, + }, }, } sender := mocksender.NewMockSender("testID") // required to initiate aggregator sender.On("EventPlatformEvent", mock.Anything, mock.Anything).Return() + sender.On("Gauge", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return() ms := &MetricSender{ sender: sender, } @@ -260,6 +265,12 @@ func Test_metricSender_reportNetworkDeviceMetadata_withInterfaces(t *testing.T) Name: "ifName", }, }, + "alias": { + Symbol: checkconfig.SymbolConfig{ + OID: "1.3.6.1.2.1.31.1.1.1.18", + Name: "ifAlias", + }, + }, }, IDTags: checkconfig.MetricTagConfigList{ checkconfig.MetricTagConfig{ @@ -280,6 +291,11 @@ func Test_metricSender_reportNetworkDeviceMetadata_withInterfaces(t *testing.T) assert.NoError(t, err) ms.ReportNetworkDeviceMetadata(config, storeWithIfName, []string{"tag1", "tag2"}, collectTime, metadata.DeviceStatusReachable) + ifTags1 := []string{"tag1", "tag2", "status:down", "interface:21", "interface_alias:ifAlias1", "interface_index:1"} + ifTags2 := []string{"tag1", "tag2", "status:down", "interface:22", "interface_index:2"} + + sender.AssertMetric(t, "Gauge", interfaceStatusMetric, 1., "", ifTags1) + sender.AssertMetric(t, "Gauge", interfaceStatusMetric, 1., "", ifTags2) // language=json event := []byte(` { @@ -307,7 +323,8 @@ func Test_metricSender_reportNetworkDeviceMetadata_withInterfaces(t *testing.T) "interface:21" ], "index": 1, - "name": "21" + "name": "21", + "alias": "ifAlias1" }, { "device_id": "1234", @@ -406,6 +423,10 @@ func Test_batchPayloads(t *testing.T) { for i := 0; i < 350; i++ { interfaces = append(interfaces, metadata.InterfaceMetadata{DeviceID: deviceID, Index: int32(i)}) } + var ipAddresses []metadata.IPAddressMetadata + for i := 0; i < 100; i++ { + ipAddresses = append(ipAddresses, metadata.IPAddressMetadata{InterfaceID: deviceID + ":1", IPAddress: "1.2.3.4", Prefixlen: 24}) + } var topologyLinks []metadata.TopologyLinkMetadata for i := 0; i < 100; i++ { topologyLinks = append(topologyLinks, metadata.TopologyLinkMetadata{ @@ -413,9 +434,9 @@ func Test_batchPayloads(t *testing.T) { Remote: &metadata.TopologyLinkSide{Interface: &metadata.TopologyLinkInterface{ID: "b"}}, }) } - payloads := batchPayloads("my-ns", "127.0.0.0/30", collectTime, 100, device, interfaces, topologyLinks) + payloads := batchPayloads("my-ns", "127.0.0.0/30", collectTime, 100, device, interfaces, ipAddresses, topologyLinks) - assert.Equal(t, 5, len(payloads)) + assert.Equal(t, 6, len(payloads)) assert.Equal(t, "my-ns", payloads[0].Namespace) assert.Equal(t, "127.0.0.0/30", payloads[0].Subnet) @@ -436,12 +457,263 @@ func Test_batchPayloads(t *testing.T) { assert.Equal(t, 0, len(payloads[3].Devices)) assert.Equal(t, 51, len(payloads[3].Interfaces)) - assert.Equal(t, 49, len(payloads[3].Links)) + assert.Equal(t, 49, len(payloads[3].IPAddresses)) assert.Equal(t, interfaces[299:350], payloads[3].Interfaces) - assert.Equal(t, topologyLinks[:49], payloads[3].Links) + assert.Equal(t, ipAddresses[:49], payloads[3].IPAddresses) assert.Equal(t, 0, len(payloads[4].Devices)) - assert.Equal(t, 0, len(payloads[4].Interfaces)) - assert.Equal(t, 51, len(payloads[4].Links)) - assert.Equal(t, topologyLinks[49:100], payloads[4].Links) + assert.Equal(t, 51, len(payloads[4].IPAddresses)) + assert.Equal(t, 49, len(payloads[4].Links)) + assert.Equal(t, ipAddresses[49:], payloads[4].IPAddresses) + assert.Equal(t, topologyLinks[:49], payloads[4].Links) + + assert.Equal(t, 0, len(payloads[5].Devices)) + assert.Equal(t, 0, len(payloads[5].Interfaces)) + assert.Equal(t, 51, len(payloads[5].Links)) + assert.Equal(t, topologyLinks[49:100], payloads[5].Links) +} + +func TestComputeInterfaceStatus(t *testing.T) { + type testCase struct { + ifAdminStatus common.IfAdminStatus + ifOperStatus common.IfOperStatus + status common.InterfaceStatus + } + + // Test the method with only valid input for ifAdminStatus and ifOperStatus + allTests := []testCase{ + // Valid test cases + {common.AdminStatus_Up, common.OperStatus_Up, common.InterfaceStatus_Up}, + {common.AdminStatus_Up, common.OperStatus_Down, common.InterfaceStatus_Down}, + {common.AdminStatus_Up, common.OperStatus_Testing, common.InterfaceStatus_Warning}, + {common.AdminStatus_Up, common.OperStatus_Unknown, common.InterfaceStatus_Warning}, + {common.AdminStatus_Up, common.OperStatus_Dormant, common.InterfaceStatus_Warning}, + {common.AdminStatus_Up, common.OperStatus_NotPresent, common.InterfaceStatus_Warning}, + {common.AdminStatus_Up, common.OperStatus_LowerLayerDown, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, common.OperStatus_Up, common.InterfaceStatus_Down}, + {common.AdminStatus_Down, common.OperStatus_Down, common.InterfaceStatus_Off}, + {common.AdminStatus_Down, common.OperStatus_Testing, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, common.OperStatus_Unknown, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, common.OperStatus_Dormant, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, common.OperStatus_NotPresent, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, common.OperStatus_LowerLayerDown, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, common.OperStatus_Up, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, common.OperStatus_Down, common.InterfaceStatus_Down}, + {common.AdminStatus_Testing, common.OperStatus_Testing, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, common.OperStatus_Unknown, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, common.OperStatus_Dormant, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, common.OperStatus_NotPresent, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, common.OperStatus_LowerLayerDown, common.InterfaceStatus_Warning}, + + // Invalid ifOperStatus + {common.AdminStatus_Up, 0, common.InterfaceStatus_Warning}, + {common.AdminStatus_Up, 8, common.InterfaceStatus_Warning}, + {common.AdminStatus_Up, 100, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, 0, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, 8, common.InterfaceStatus_Warning}, + {common.AdminStatus_Down, 100, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, 0, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, 8, common.InterfaceStatus_Warning}, + {common.AdminStatus_Testing, 100, common.InterfaceStatus_Warning}, + + // Invalid ifAdminStatus + {0, common.OperStatus_Unknown, common.InterfaceStatus_Down}, + {0, common.OperStatus_Down, common.InterfaceStatus_Down}, + {0, common.OperStatus_Up, common.InterfaceStatus_Down}, + {4, common.OperStatus_Up, common.InterfaceStatus_Down}, + {4, common.OperStatus_Down, common.InterfaceStatus_Down}, + {4, common.OperStatus_Testing, common.InterfaceStatus_Down}, + {100, common.OperStatus_Up, common.InterfaceStatus_Down}, + {100, common.OperStatus_Down, common.InterfaceStatus_Down}, + {100, common.OperStatus_Testing, common.InterfaceStatus_Down}, + } + for _, test := range allTests { + assert.Equal(t, test.status, computeInterfaceStatus(test.ifAdminStatus, test.ifOperStatus)) + } +} + +func Test_getRemManIPAddrByLLDPRemIndex(t *testing.T) { + indexes := []string{ + // IPv4 + "0.102.2.1.4.10.250.0.7", + "0.102.99.1.4.10.250.0.8", + + // IPv6 + "370.5.1.2.16.254.128.0.0.0.0.0.0.26.146.164.255.254.48.12.1", + + // Invalid + "0.102.2.1.4.10.250", // too short, ignored + } + remManIPAddrByLLDPRemIndex := getRemManIPAddrByLLDPRemIndex(indexes) + expectedResult := map[string]string{ + "2": "10.250.0.7", + "99": "10.250.0.8", + } + assert.Equal(t, expectedResult, remManIPAddrByLLDPRemIndex) +} + +func Test_resolveLocalInterface(t *testing.T) { + interfaceIndexByIDType := map[string]map[string][]int32{ + "mac_address": { + "00:00:00:00:00:01": []int32{1}, + "00:00:00:00:00:02": []int32{2}, + "00:00:00:00:00:03": []int32{3, 4}, + }, + "interface_name": { + "eth1": []int32{1}, + "eth2": []int32{2}, + "eth3": []int32{3}, // eth3 is both a name and alias, and reference the same interface + "eth4": []int32{4}, // eth4 is both a name and alias, and reference two different interfaces + }, + "interface_alias": { + "alias1": []int32{1}, + "alias2": []int32{2}, + "eth3": []int32{3}, + "eth4": []int32{44}, + }, + "interface_index": { + "1": []int32{1}, + "2": []int32{2}, + }, + } + deviceID := "default:1.2.3.4" + + tests := []struct { + name string + localIDType string + localID string + expectedID string + }{ + { + name: "mac_address", + localIDType: "mac_address", + localID: "00:00:00:00:00:01", + expectedID: "default:1.2.3.4:1", + }, + { + name: "mac_address cannot resolve due to multiple results", + localIDType: "mac_address", + localID: "00:00:00:00:00:03", + expectedID: "", + }, + { + name: "interface_name", + localIDType: "interface_name", + localID: "eth2", + expectedID: "default:1.2.3.4:2", + }, + { + name: "interface_alias", + localIDType: "interface_alias", + localID: "alias2", + expectedID: "default:1.2.3.4:2", + }, + { + name: "mac_address by trying", + localIDType: "", + localID: "00:00:00:00:00:01", + expectedID: "default:1.2.3.4:1", + }, + { + name: "interface_name by trying", + localIDType: "", + localID: "eth2", + expectedID: "default:1.2.3.4:2", + }, + { + name: "interface_alias by trying", + localIDType: "", + localID: "alias2", + expectedID: "default:1.2.3.4:2", + }, + { + name: "interface_alias+interface_name match with same interface should resolve", + localIDType: "", + localID: "eth3", + expectedID: "default:1.2.3.4:3", + }, + { + name: "interface_alias+interface_name match with different interface should not resolve", + localIDType: "", + localID: "eth4", + expectedID: "", + }, + { + name: "interface_index by trying", + localIDType: "", + localID: "2", + expectedID: "default:1.2.3.4:2", + }, + { + name: "mac_address not found", + localIDType: "mac_address", + localID: "00:00:00:00:00:99", + expectedID: "", + }, + { + name: "invalid", + localIDType: "invalid_type", + localID: "invalidID", + expectedID: "", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + assert.Equal(t, tt.expectedID, resolveLocalInterface(deviceID, interfaceIndexByIDType, tt.localIDType, tt.localID)) + }) + } +} + +func Test_buildInterfaceIndexByIDType(t *testing.T) { + // Arrange + interfaces := []metadata.InterfaceMetadata{ + { + DeviceID: "default:1.2.3.4", + Index: 1, + MacAddress: "00:00:00:00:00:01", + Name: "eth1", + Alias: "alias1", + }, + { + DeviceID: "default:1.2.3.4", + Index: 2, + MacAddress: "00:00:00:00:00:02", + Name: "eth2", + Alias: "alias2", + }, + { + DeviceID: "default:1.2.3.4", + Index: 3, + MacAddress: "00:00:00:00:00:02", + Name: "eth3", + Alias: "alias3", + }, + } + + // Act + interfaceIndexByIDType := buildInterfaceIndexByIDType(interfaces) + + // Assert + expectedInterfaceIndexByIDType := map[string]map[string][]int32{ + "mac_address": { + "00:00:00:00:00:01": []int32{1}, + "00:00:00:00:00:02": []int32{2, 3}, + }, + "interface_name": { + "eth1": []int32{1}, + "eth2": []int32{2}, + "eth3": []int32{3}, + }, + "interface_alias": { + "alias1": []int32{1}, + "alias2": []int32{2}, + "alias3": []int32{3}, + }, + "interface_index": { + "1": []int32{1}, + "2": []int32{2}, + "3": []int32{3}, + }, + } + assert.Equal(t, expectedInterfaceIndexByIDType, interfaceIndexByIDType) } diff --git a/pkg/collector/corechecks/snmp/internal/report/report_utils.go b/pkg/collector/corechecks/snmp/internal/report/report_utils.go index e9160d75eb323..c2fba033d2797 100644 --- a/pkg/collector/corechecks/snmp/internal/report/report_utils.go +++ b/pkg/collector/corechecks/snmp/internal/report/report_utils.go @@ -7,6 +7,7 @@ package report import ( "fmt" + "net" "strings" "github.com/DataDog/datadog-agent/pkg/collector/corechecks/snmp/internal/checkconfig" @@ -147,3 +148,9 @@ func transformIndex(indexes []string, transformRules []checkconfig.MetricIndexTr } return newIndex } + +func netmaskToPrefixlen(netmask string) int { + stringMask := net.IPMask(net.ParseIP(netmask).To4()) + length, _ := stringMask.Size() + return length +} diff --git a/pkg/collector/corechecks/snmp/internal/report/report_utils_test.go b/pkg/collector/corechecks/snmp/internal/report/report_utils_test.go index 0072dab3f7cd0..2af2bd865639f 100644 --- a/pkg/collector/corechecks/snmp/internal/report/report_utils_test.go +++ b/pkg/collector/corechecks/snmp/internal/report/report_utils_test.go @@ -689,3 +689,41 @@ metric_tags: }) } } + +func Test_netmaskToPrefixlen(t *testing.T) { + assert.Equal(t, 0, netmaskToPrefixlen("")) + assert.Equal(t, 0, netmaskToPrefixlen("invalid")) + assert.Equal(t, 32, netmaskToPrefixlen("255.255.255.255")) + assert.Equal(t, 31, netmaskToPrefixlen("255.255.255.254")) + assert.Equal(t, 30, netmaskToPrefixlen("255.255.255.252")) + assert.Equal(t, 29, netmaskToPrefixlen("255.255.255.248")) + assert.Equal(t, 28, netmaskToPrefixlen("255.255.255.240")) + assert.Equal(t, 27, netmaskToPrefixlen("255.255.255.224")) + assert.Equal(t, 26, netmaskToPrefixlen("255.255.255.192")) + assert.Equal(t, 25, netmaskToPrefixlen("255.255.255.128")) + assert.Equal(t, 24, netmaskToPrefixlen("255.255.255.0")) + assert.Equal(t, 23, netmaskToPrefixlen("255.255.254.0")) + assert.Equal(t, 22, netmaskToPrefixlen("255.255.252.0")) + assert.Equal(t, 21, netmaskToPrefixlen("255.255.248.0")) + assert.Equal(t, 20, netmaskToPrefixlen("255.255.240.0")) + assert.Equal(t, 19, netmaskToPrefixlen("255.255.224.0")) + assert.Equal(t, 18, netmaskToPrefixlen("255.255.192.0")) + assert.Equal(t, 17, netmaskToPrefixlen("255.255.128.0")) + assert.Equal(t, 16, netmaskToPrefixlen("255.255.0.0")) + assert.Equal(t, 15, netmaskToPrefixlen("255.254.0.0")) + assert.Equal(t, 14, netmaskToPrefixlen("255.252.0.0")) + assert.Equal(t, 13, netmaskToPrefixlen("255.248.0.0")) + assert.Equal(t, 12, netmaskToPrefixlen("255.240.0.0")) + assert.Equal(t, 11, netmaskToPrefixlen("255.224.0.0")) + assert.Equal(t, 10, netmaskToPrefixlen("255.192.0.0")) + assert.Equal(t, 9, netmaskToPrefixlen("255.128.0.0")) + assert.Equal(t, 8, netmaskToPrefixlen("255.0.0.0")) + assert.Equal(t, 7, netmaskToPrefixlen("254.0.0.0")) + assert.Equal(t, 6, netmaskToPrefixlen("252.0.0.0")) + assert.Equal(t, 5, netmaskToPrefixlen("248.0.0.0")) + assert.Equal(t, 4, netmaskToPrefixlen("240.0.0.0")) + assert.Equal(t, 3, netmaskToPrefixlen("224.0.0.0")) + assert.Equal(t, 2, netmaskToPrefixlen("192.0.0.0")) + assert.Equal(t, 1, netmaskToPrefixlen("128.0.0.0")) + assert.Equal(t, 0, netmaskToPrefixlen("0.0.0.0")) +} diff --git a/pkg/collector/corechecks/snmp/profile_test.go b/pkg/collector/corechecks/snmp/profile_metadata_test.go similarity index 86% rename from pkg/collector/corechecks/snmp/profile_test.go rename to pkg/collector/corechecks/snmp/profile_metadata_test.go index 47c9ae6663f95..d8092aadb270f 100644 --- a/pkg/collector/corechecks/snmp/profile_test.go +++ b/pkg/collector/corechecks/snmp/profile_metadata_test.go @@ -145,7 +145,7 @@ profiles: { Name: "1.0.8802.1.1.2.1.3.7.1.3.101", Type: gosnmp.OctetString, - Value: []byte{0x01, 0x00, 0x00, 0x00, 0x01, 0x03}, + Value: []byte{0x82, 0xa5, 0x6e, 0xa5, 0xc9, 0x01}, }, { Name: "1.0.8802.1.1.2.1.4.1.1.10.0.101.1", @@ -182,6 +182,11 @@ profiles: Type: gosnmp.OctetString, Value: []byte("RemoteDev1-Name"), }, + { + Name: "1.0.8802.1.1.2.1.4.2.1.3.0.101.1.1.4.10.250.0.6", + Type: gosnmp.OctetString, + Value: []byte("RemoteDev2-Name"), + }, { Name: "1.3.6.1.2.1.2.2.1.13.1", Type: gosnmp.Integer, @@ -222,6 +227,17 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + { Name: "1.0.8802.1.1.2.1.3.7.1.2.102", Type: gosnmp.Integer, @@ -230,7 +246,7 @@ profiles: { Name: "1.0.8802.1.1.2.1.3.7.1.3.102", Type: gosnmp.OctetString, - Value: []byte{0x01, 0x00, 0x00, 0x00, 0x02, 0x03}, + Value: []byte{0x82, 0xa5, 0x6e, 0xa5, 0xc9, 0x02}, }, { Name: "1.0.8802.1.1.2.1.4.1.1.10.0.102.2", @@ -267,6 +283,11 @@ profiles: Type: gosnmp.OctetString, Value: []byte("RemoteDev2-Name"), }, + { + Name: "1.0.8802.1.1.2.1.4.2.1.3.0.102.2.1.4.10.250.0.7", + Type: gosnmp.OctetString, + Value: []byte("RemoteDev2-Name"), + }, { Name: "1.3.6.1.2.1.2.2.1.13.2", Type: gosnmp.Integer, @@ -307,6 +328,32 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -426,6 +473,7 @@ profiles: "1.0.8802.1.1.2.1.4.1.1.7", "1.0.8802.1.1.2.1.4.1.1.8", "1.0.8802.1.1.2.1.4.1.1.9", + "1.0.8802.1.1.2.1.4.2.1.3", "1.3.6.1.2.1.2.2.1.13", "1.3.6.1.2.1.2.2.1.14", "1.3.6.1.2.1.2.2.1.2", @@ -434,6 +482,8 @@ profiles: "1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPacket, nil) err = chk.Run() @@ -500,15 +550,29 @@ profiles: "oper_status": 1 } ], + "ip_addresses": [ + { + "interface_id": "profile-metadata:1.2.3.4:1", + "ip_address": "10.0.0.1", + "prefixlen": 24 + }, + { + "interface_id": "profile-metadata:1.2.3.4:1", + "ip_address": "10.0.0.2", + "prefixlen": 24 + } + ], "links": [ { + "id": "profile-metadata:1.2.3.4:101.1", + "source_type": "lldp", "local": { "device": { - "id": "profile-metadata:1.2.3.4", - "id_type": "ndm" + "dd_id": "profile-metadata:1.2.3.4" }, "interface": { - "id": "01:00:00:00:01:03", + "dd_id": "profile-metadata:1.2.3.4:1", + "id": "82:a5:6e:a5:c9:01", "id_type": "mac_address" } }, @@ -517,7 +581,8 @@ profiles: "id": "01:00:00:00:01:02", "id_type": "mac_address", "name": "RemoteDev1-Name", - "description": "RemoteDev1-Description" + "description": "RemoteDev1-Description", + "ip_address": "10.250.0.6" }, "interface": { "id": "01:00:00:00:01:01", @@ -527,13 +592,15 @@ profiles: } }, { + "id": "profile-metadata:1.2.3.4:102.2", + "source_type": "lldp", "local": { "device": { - "id": "profile-metadata:1.2.3.4", - "id_type": "ndm" + "dd_id": "profile-metadata:1.2.3.4" }, "interface": { - "id": "01:00:00:00:02:03", + "dd_id": "profile-metadata:1.2.3.4:2", + "id": "82:a5:6e:a5:c9:02", "id_type": "mac_address" } }, @@ -542,7 +609,8 @@ profiles: "id": "01:00:00:00:02:02", "id_type": "mac_address", "name": "RemoteDev2-Name", - "description": "RemoteDev2-Description" + "description": "RemoteDev2-Description", + "ip_address": "10.250.0.7" }, "interface": { "id": "01:00:00:00:02:01", diff --git a/pkg/collector/corechecks/snmp/snmp_test.go b/pkg/collector/corechecks/snmp/snmp_test.go index 0dcea196cf7d4..7da2129093b84 100644 --- a/pkg/collector/corechecks/snmp/snmp_test.go +++ b/pkg/collector/corechecks/snmp/snmp_test.go @@ -218,6 +218,17 @@ tags: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + { Name: "1.3.6.1.2.1.2.2.1.8.2", Type: gosnmp.Integer, @@ -233,6 +244,16 @@ tags: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, }, } @@ -251,6 +272,14 @@ tags: Name: "999", Type: gosnmp.NoSuchObject, }, + { + Name: "999", + Type: gosnmp.NoSuchObject, + }, + { + Name: "999", + Type: gosnmp.NoSuchObject, + }, }, } @@ -259,8 +288,8 @@ tags: sess.On("Get", mock.Anything).Return(&packet, nil) sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.14", "1.3.6.1.2.1.2.2.1.2", "1.3.6.1.2.1.2.2.1.20", "1.3.6.1.2.1.2.2.1.6", "1.3.6.1.2.1.2.2.1.7"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkBatch1Packet1, nil) sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.14.2", "1.3.6.1.2.1.2.2.1.2.2", "1.3.6.1.2.1.2.2.1.20.2", "1.3.6.1.2.1.2.2.1.6.2", "1.3.6.1.2.1.2.2.1.7.2"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkBatch1Packet2, nil) - sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkBatch2Packet1, nil) - sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.8.2", "1.3.6.1.2.1.31.1.1.1.1.2", "1.3.6.1.2.1.31.1.1.1.18.2"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkBatch2Packe2, nil) + sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", "1.3.6.1.2.1.4.20.1.2", "1.3.6.1.2.1.4.20.1.3"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkBatch2Packet1, nil) + sess.On("GetBulk", []string{"1.3.6.1.2.1.2.2.1.8.2", "1.3.6.1.2.1.31.1.1.1.1.2", "1.3.6.1.2.1.31.1.1.1.18.2", "1.3.6.1.2.1.4.20.1.2.10.0.0.2", "1.3.6.1.2.1.4.20.1.3.10.0.0.2"}, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkBatch2Packe2, nil) err = chk.Run() assert.Nil(t, err) @@ -497,6 +526,17 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + { Name: "1.3.6.1.2.1.2.2.1.13.2", Type: gosnmp.Integer, @@ -532,6 +572,27 @@ profiles: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -598,6 +659,8 @@ profiles: "1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPacket, nil) err = chk.Run() @@ -685,6 +748,18 @@ profiles: "oper_status": 1 } ], + "ip_addresses": [ + { + "interface_id": "default:1.2.3.4:1", + "ip_address": "10.0.0.1", + "prefixlen": 24 + }, + { + "interface_id": "default:1.2.3.4:1", + "ip_address": "10.0.0.2", + "prefixlen": 24 + } + ], "collect_timestamp":946684800 } `, version.AgentVersion)) @@ -1135,6 +1210,17 @@ tags: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + { Name: "1.3.6.1.2.1.2.2.1.2.2", Type: gosnmp.OctetString, @@ -1165,6 +1251,27 @@ tags: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -1216,6 +1323,8 @@ tags: "1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPacket, nil) err = chk.Run() @@ -1277,6 +1386,18 @@ tags: "oper_status": 1 } ], + "ip_addresses": [ + { + "interface_id": "default:1.2.3.4:1", + "ip_address": "10.0.0.1", + "prefixlen": 24 + }, + { + "interface_id": "default:1.2.3.4:1", + "ip_address": "10.0.0.2", + "prefixlen": 24 + } + ], "collect_timestamp":946684800 } `, version.AgentVersion)) @@ -1488,6 +1609,17 @@ metric_tags: Type: gosnmp.OctetString, Value: []byte("descRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + { Name: "1.3.6.1.2.1.2.2.1.2.2", Type: gosnmp.OctetString, @@ -1518,6 +1650,27 @@ metric_tags: Type: gosnmp.OctetString, Value: []byte("descRow2"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.2", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.2", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -1569,6 +1722,8 @@ metric_tags: "1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPacket, nil) deviceMap := []struct { @@ -1647,9 +1802,21 @@ metric_tags: "oper_status": 1 } ], + "ip_addresses": [ + { + "interface_id": "%s:1", + "ip_address": "10.0.0.1", + "prefixlen": 24 + }, + { + "interface_id": "%s:1", + "ip_address": "10.0.0.2", + "prefixlen": 24 + } + ], "collect_timestamp":946684800 } -`, deviceData.deviceID, deviceData.ipAddress, version.AgentVersion, deviceData.ipAddress, deviceData.ipAddress, deviceData.deviceID, deviceData.deviceID)) +`, deviceData.deviceID, deviceData.ipAddress, version.AgentVersion, deviceData.ipAddress, deviceData.ipAddress, deviceData.deviceID, deviceData.deviceID, deviceData.deviceID, deviceData.deviceID)) compactEvent := new(bytes.Buffer) err = json.Compact(compactEvent, event) assert.NoError(t, err) @@ -1853,6 +2020,27 @@ use_device_id_as_hostname: true Type: gosnmp.OctetString, Value: []byte("ifDescRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -1866,6 +2054,8 @@ use_device_id_as_hostname: true }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[0], nil) sess.On("GetBulk", []string{ "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPackets[1], nil) err = chk.Run() @@ -2010,6 +2200,27 @@ metrics: Type: gosnmp.OctetString, Value: []byte("ifDescRow1"), }, + { + Name: "1.3.6.1.2.1.4.20.1.2.10.0.0.1", + Type: gosnmp.Integer, + Value: 1, + }, + { + Name: "1.3.6.1.2.1.4.20.1.3.10.0.0.1", + Type: gosnmp.IPAddress, + Value: "255.255.255.0", + }, + + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, + { + Name: "9", // exit table + Type: gosnmp.Integer, + Value: 999, + }, { Name: "9", // exit table Type: gosnmp.Integer, @@ -2043,7 +2254,14 @@ metrics: }, } sess.On("GetBulk", []string{ - "1.3.6.1.2.1.2.2.1.2", "1.3.6.1.2.1.2.2.1.6", "1.3.6.1.2.1.2.2.1.7", "1.3.6.1.2.1.2.2.1.8", "1.3.6.1.2.1.31.1.1.1.1", "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.2.2.1.2", + "1.3.6.1.2.1.2.2.1.6", + "1.3.6.1.2.1.2.2.1.7", + "1.3.6.1.2.1.2.2.1.8", + "1.3.6.1.2.1.31.1.1.1.1", + "1.3.6.1.2.1.31.1.1.1.18", + "1.3.6.1.2.1.4.20.1.2", + "1.3.6.1.2.1.4.20.1.3", }, checkconfig.DefaultBulkMaxRepetitions).Return(&bulkPacket, nil) deviceMap := []struct { diff --git a/pkg/collector/corechecks/system/doc.go b/pkg/collector/corechecks/system/doc.go index c84d7eb0427ae..45c60c9af72a9 100644 --- a/pkg/collector/corechecks/system/doc.go +++ b/pkg/collector/corechecks/system/doc.go @@ -5,6 +5,5 @@ /* Package system provides core checks for OS-level system metrics - */ package system diff --git a/pkg/collector/corechecks/systemd/systemd.go b/pkg/collector/corechecks/systemd/systemd.go index 139eb0e4d4e57..d94085442f93e 100644 --- a/pkg/collector/corechecks/systemd/systemd.go +++ b/pkg/collector/corechecks/systemd/systemd.go @@ -364,7 +364,7 @@ func (c *SystemdCheck) submitBasicUnitMetrics(sender aggregator.Sender, conn *db unitProperties, err := c.stats.GetUnitTypeProperties(conn, unit.Name, dbusTypeMap[typeUnit]) if err != nil { - log.Warnf("Error getting unit unitProperties: %s", unit.Name) + log.Warnf("Error getting unit unitProperties: %s: %v", unit.Name, err) return } activeEnterTimestamp, err := getPropertyUint64(unitProperties, "ActiveEnterTimestamp") diff --git a/pkg/collector/internal/middleware/check_wrapper.go b/pkg/collector/internal/middleware/check_wrapper.go index 640821429d404..e9789798bbbe4 100644 --- a/pkg/collector/internal/middleware/check_wrapper.go +++ b/pkg/collector/internal/middleware/check_wrapper.go @@ -15,11 +15,14 @@ import ( ) // CheckWrapper cleans up the check sender after a check was -// descheduled, taking care to postpone it until Run returns if it is -// running. +// descheduled, taking care that Run is not executing during or after +// that. type CheckWrapper struct { inner check.Check - wg sync.WaitGroup + // done is true when the check was cancelled and must not run. + done bool + // Locked while check is running. + runM sync.Mutex } // NewCheckWrapper returns a wrapped check. @@ -31,8 +34,11 @@ func NewCheckWrapper(inner check.Check) *CheckWrapper { // Run implements Check#Run func (c *CheckWrapper) Run() error { - c.wg.Add(1) - defer c.wg.Done() + c.runM.Lock() + defer c.runM.Unlock() + if c.done { + return nil + } return c.inner.Run() } @@ -43,7 +49,10 @@ func (c *CheckWrapper) Cancel() { } func (c *CheckWrapper) destroySender() { - c.wg.Wait() + // Done must happen before Wait + c.runM.Lock() + defer c.runM.Unlock() + c.done = true aggregator.DestroySender(c.ID()) } diff --git a/pkg/collector/internal/middleware/test_utils.go b/pkg/collector/internal/middleware/test_utils.go index 2b1d043bc37e8..e849bd86e1443 100644 --- a/pkg/collector/internal/middleware/test_utils.go +++ b/pkg/collector/internal/middleware/test_utils.go @@ -20,5 +20,6 @@ func (c *CheckWrapper) Inner() check.Check { // Wait blocks until Run() finishes execution in another // goroutine. Does not block if Run() is not executing. func (c *CheckWrapper) Wait() { - c.wg.Wait() + c.runM.Lock() + defer c.runM.Unlock() } diff --git a/pkg/collector/python/aggregator.go b/pkg/collector/python/aggregator.go index baa8602c519c7..7faeaa2efbd3b 100644 --- a/pkg/collector/python/aggregator.go +++ b/pkg/collector/python/aggregator.go @@ -24,6 +24,7 @@ import ( import "C" // SubmitMetric is the method exposed to Python scripts to submit metrics +// //export SubmitMetric func SubmitMetric(checkID *C.char, metricType C.metric_type_t, metricName *C.char, value C.double, tags **C.char, hostname *C.char, flushFirstValue C.bool) { goCheckID := C.GoString(checkID) @@ -59,6 +60,7 @@ func SubmitMetric(checkID *C.char, metricType C.metric_type_t, metricName *C.cha } // SubmitServiceCheck is the method exposed to Python scripts to submit service checks +// //export SubmitServiceCheck func SubmitServiceCheck(checkID *C.char, scName *C.char, status C.int, tags **C.char, hostname *C.char, message *C.char) { goCheckID := C.GoString(checkID) @@ -87,6 +89,7 @@ func eventParseString(value *C.char, fieldName string) string { } // SubmitEvent is the method exposed to Python scripts to submit events +// //export SubmitEvent func SubmitEvent(checkID *C.char, event *C.event_t) { goCheckID := C.GoString(checkID) @@ -114,6 +117,7 @@ func SubmitEvent(checkID *C.char, event *C.event_t) { } // SubmitHistogramBucket is the method exposed to Python scripts to submit metrics +// //export SubmitHistogramBucket func SubmitHistogramBucket(checkID *C.char, metricName *C.char, value C.longlong, lowerBound C.float, upperBound C.float, monotonic C.int, hostname *C.char, tags **C.char, flushFirstValue C.bool) { goCheckID := C.GoString(checkID) @@ -136,6 +140,7 @@ func SubmitHistogramBucket(checkID *C.char, metricName *C.char, value C.longlong } // SubmitEventPlatformEvent is the method exposed to Python scripts to submit event platform events +// //export SubmitEventPlatformEvent func SubmitEventPlatformEvent(checkID *C.char, rawEvent *C.char, eventType *C.char) { _checkID := C.GoString(checkID) diff --git a/pkg/collector/python/containers.go b/pkg/collector/python/containers.go index 13c16c2a9edab..5d8039bb105bd 100644 --- a/pkg/collector/python/containers.go +++ b/pkg/collector/python/containers.go @@ -26,6 +26,7 @@ var filter *containers.Filter // IsContainerExcluded returns whether a container should be excluded, // based on it's name, image name and namespace. Exclusion patterns are configured // via the global options (ac_include/ac_exclude/exclude_pause_container) +// //export IsContainerExcluded func IsContainerExcluded(name, image, namespace *C.char) C.int { // If init failed, fallback to False diff --git a/pkg/collector/python/datadog_agent.go b/pkg/collector/python/datadog_agent.go index 31a010b213dfa..54cf491c5fd96 100644 --- a/pkg/collector/python/datadog_agent.go +++ b/pkg/collector/python/datadog_agent.go @@ -40,6 +40,7 @@ import ( ) // GetVersion exposes the version of the agent to Python checks. +// //export GetVersion func GetVersion(agentVersion **C.char) { av, _ := version.Agent() @@ -48,6 +49,7 @@ func GetVersion(agentVersion **C.char) { } // GetHostname exposes the current hostname of the agent to Python checks. +// //export GetHostname func GetHostname(hostname **C.char) { goHostname, err := hostnameUtil.Get(context.TODO()) @@ -60,21 +62,24 @@ func GetHostname(hostname **C.char) { } // GetClusterName exposes the current clustername (if it exists) of the agent to Python checks. +// //export GetClusterName func GetClusterName(clusterName **C.char) { goHostname, _ := hostnameUtil.Get(context.TODO()) - goClusterName := clustername.GetClusterName(context.TODO(), goHostname) + goClusterName := clustername.GetRFC1123CompliantClusterName(context.TODO(), goHostname) // clusterName will be free by rtloader when it's done with it *clusterName = TrackedCString(goClusterName) } // TracemallocEnabled exposes the tracemalloc configuration of the agent to Python checks. +// //export TracemallocEnabled func TracemallocEnabled() C.bool { return C.bool(config.Datadog.GetBool("tracemalloc_debug")) } // Headers returns a basic set of HTTP headers that can be used by clients in Python checks. +// //export Headers func Headers(yamlPayload **C.char) { h := util.HTTPHeaders() @@ -91,6 +96,7 @@ func Headers(yamlPayload **C.char) { // GetConfig returns a value from the agent configuration. // Indirectly used by the C function `get_config` that's mapped to `datadog_agent.get_config`. +// //export GetConfig func GetConfig(key *C.char, yamlPayload **C.char) { goKey := C.GoString(key) @@ -112,6 +118,7 @@ func GetConfig(key *C.char, yamlPayload **C.char) { // LogMessage logs a message from python through the agent logger (see // https://docs.python.org/2.7/library/logging.html#logging-levels) +// //export LogMessage func LogMessage(message *C.char, logLevel C.int) { goMsg := C.GoString(message) @@ -140,6 +147,7 @@ func LogMessage(message *C.char, logLevel C.int) { // SetExternalTags adds a set of tags for a given hostname to the External Host // Tags metadata provider cache. +// //export SetExternalTags func SetExternalTags(hostname *C.char, sourceType *C.char, tags **C.char) { hname := C.GoString(hostname) @@ -162,6 +170,7 @@ func SetExternalTags(hostname *C.char, sourceType *C.char, tags **C.char) { // SetCheckMetadata updates a metadata value for one check instance in the cache. // Indirectly used by the C function `set_check_metadata` that's mapped to `datadog_agent.set_check_metadata`. +// //export SetCheckMetadata func SetCheckMetadata(checkID, name, value *C.char) { cid := C.GoString(checkID) @@ -173,6 +182,7 @@ func SetCheckMetadata(checkID, name, value *C.char) { // WritePersistentCache stores a value for one check instance // Indirectly used by the C function `write_persistent_cache` that's mapped to `datadog_agent.write_persistent_cache`. +// //export WritePersistentCache func WritePersistentCache(key, value *C.char) { keyName := C.GoString(key) @@ -182,6 +192,7 @@ func WritePersistentCache(key, value *C.char) { // ReadPersistentCache retrieves a value for one check instance // Indirectly used by the C function `read_persistent_cache` that's mapped to `datadog_agent.read_persistent_cache`. +// //export ReadPersistentCache func ReadPersistentCache(key *C.char) *C.char { keyName := C.GoString(key) @@ -244,6 +255,7 @@ type sqlConfig struct { // ObfuscateSQL obfuscates & normalizes the provided SQL query, writing the error into errResult if the operation // fails. An optional configuration may be passed to change the behavior of the obfuscator. +// //export ObfuscateSQL func ObfuscateSQL(rawQuery, opts *C.char, errResult **C.char) *C.char { optStr := C.GoString(opts) @@ -287,6 +299,7 @@ func ObfuscateSQL(rawQuery, opts *C.char, errResult **C.char) *C.char { // ObfuscateSQLExecPlan obfuscates the provided json query execution plan, writing the error into errResult if the // operation fails +// //export ObfuscateSQLExecPlan func ObfuscateSQLExecPlan(jsonPlan *C.char, normalize C.bool, errResult **C.char) *C.char { obfuscatedJSONPlan, err := lazyInitObfuscator().ObfuscateSQLExecPlan( diff --git a/pkg/collector/python/helpers.go b/pkg/collector/python/helpers.go index 7aff69b161daa..a7af417dc28b8 100644 --- a/pkg/collector/python/helpers.go +++ b/pkg/collector/python/helpers.go @@ -50,14 +50,14 @@ type stickyLock struct { locked *atomic.Bool } -//PythonStatsEntry are entries for specific object type memory usage +// PythonStatsEntry are entries for specific object type memory usage type PythonStatsEntry struct { Reference string NObjects int Size int } -//PythonStats contains python memory statistics +// PythonStats contains python memory statistics type PythonStats struct { Type string NObjects int diff --git a/pkg/collector/python/init.go b/pkg/collector/python/init.go index b62bc0cad1c68..77165995a58ab 100644 --- a/pkg/collector/python/init.go +++ b/pkg/collector/python/init.go @@ -16,12 +16,14 @@ import ( "runtime" "strings" "sync" + "time" "unsafe" "github.com/DataDog/datadog-agent/pkg/aggregator" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/metrics" "github.com/DataDog/datadog-agent/pkg/tagset" + "github.com/DataDog/datadog-agent/pkg/telemetry" "github.com/DataDog/datadog-agent/pkg/util/cache" "github.com/DataDog/datadog-agent/pkg/util/executable" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -403,6 +405,10 @@ func Initialize(paths ...string) error { return err } + if config.Datadog.GetBool("telemetry.enabled") && config.Datadog.GetBool("telemetry.python_memory") { + initPymemTelemetry() + } + // Set the PYTHONPATH if needed. for _, p := range paths { // bounded but never released allocations with CString @@ -458,3 +464,24 @@ func Initialize(paths ...string) error { func GetRtLoader() *C.rtloader_t { return rtloader } + +func initPymemTelemetry() { + C.init_pymem_stats(rtloader) + + // "alloc" for consistency with go memstats and mallochook metrics. + alloc := telemetry.NewSimpleCounter("pymem", "alloc", "Total number of bytes allocated by the python interpreter since the start of the agent.") + inuse := telemetry.NewSimpleGauge("pymem", "inuse", "Number of bytes currently allocated by the python interpreter.") + + go func() { + t := time.NewTicker(1 * time.Second) + var prevAlloc C.size_t + + for range t.C { + var s C.pymem_stats_t + C.get_pymem_stats(rtloader, &s) + inuse.Set(float64(s.inuse)) + alloc.Add(float64(s.alloc - prevAlloc)) + prevAlloc = s.alloc + } + }() +} diff --git a/pkg/collector/python/kubeutil.go b/pkg/collector/python/kubeutil.go index 32241f0759ddc..11f2059ba1667 100644 --- a/pkg/collector/python/kubeutil.go +++ b/pkg/collector/python/kubeutil.go @@ -53,6 +53,7 @@ func getConnections() map[string]string { // GetKubeletConnectionInfo returns a dict containing url and credentials to connect to the kubelet. // The dict is empty if the kubelet was not detected. The call to kubeutil is cached for 5 minutes. // See the documentation of kubelet.GetRawConnectionInfo for dict contents. +// //export GetKubeletConnectionInfo func GetKubeletConnectionInfo(payload **C.char) { var creds string diff --git a/pkg/collector/python/memory.go b/pkg/collector/python/memory.go index 37a9d03a5a90c..545eabb9ddc6e 100644 --- a/pkg/collector/python/memory.go +++ b/pkg/collector/python/memory.go @@ -70,6 +70,7 @@ func init() { } // MemoryTracker is the method exposed to the RTLoader for memory tracking +// //export MemoryTracker func MemoryTracker(ptr unsafe.Pointer, sz C.size_t, op C.rtloader_mem_ops_t) { // run sync for reliability reasons diff --git a/pkg/collector/python/memory_linux.go b/pkg/collector/python/memory_linux.go index f482cede4f7fd..2d4365f7fc8b3 100644 --- a/pkg/collector/python/memory_linux.go +++ b/pkg/collector/python/memory_linux.go @@ -3,12 +3,12 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build python -// +build python +//go:build python && linux +// +build python,linux package python import ( // Makes backtraces include Cgo frames. Linux-only due to https://github.com/golang/go/issues/45558 - _ "github.com/benesch/cgosymbolizer" + _ "github.com/ianlancetaylor/cgosymbolizer" ) diff --git a/pkg/collector/python/tagger.go b/pkg/collector/python/tagger.go index 6f3d8298ac6ec..4e85696378071 100644 --- a/pkg/collector/python/tagger.go +++ b/pkg/collector/python/tagger.go @@ -31,6 +31,7 @@ var ( ) // Tags bridges towards tagger.Tag to retrieve container tags +// //export Tags func Tags(id *C.char, cardinality C.int) **C.char { goID := C.GoString(id) diff --git a/pkg/collector/python/util.go b/pkg/collector/python/util.go index 424b90a51de5e..bf4e7c9ac7c2d 100644 --- a/pkg/collector/python/util.go +++ b/pkg/collector/python/util.go @@ -25,6 +25,7 @@ import ( // GetSubprocessOutput runs the subprocess and returns the output // Indirectly used by the C function `get_subprocess_output` that's mapped to `_util.get_subprocess_output`. +// //export GetSubprocessOutput func GetSubprocessOutput(argv **C.char, env **C.char, cStdout **C.char, cStderr **C.char, cRetCode *C.int, exception **C.char) { subprocessArgs := cStringArrayToSlice(argv) diff --git a/pkg/compliance/agent/agent_test.go b/pkg/compliance/agent/agent_test.go index b17d788b343ca..9416de1640c0e 100644 --- a/pkg/compliance/agent/agent_test.go +++ b/pkg/compliance/agent/agent_test.go @@ -137,10 +137,6 @@ func TestRunK8s(t *testing.T) { kubeClient := &mocks.KubeClient{} kubeClient.On("Resource", mock.Anything).Return(nil) - nodeLabels := map[string]string{ - "node-role.kubernetes.io/worker": "", - } - agent, err := New( reporter, scheduler, @@ -148,7 +144,6 @@ func TestRunK8s(t *testing.T) { &config.Endpoints{}, checks.WithHostname("the-host"), checks.WithHostRootMount(e.dir), - checks.WithNodeLabels(nodeLabels), checks.WithKubernetesClient(kubeClient, "kube_system_uuid"), ) assert.NoError(err) @@ -345,17 +340,12 @@ func TestRunChecksFromFile(t *testing.T) { kubeClient := &mocks.KubeClient{} - nodeLabels := map[string]string{ - "node-role.kubernetes.io/worker": "", - } - err := RunChecksFromFile( reporter, filepath.Join(e.dir, "cis-kubernetes.yaml"), checks.WithHostname("the-host"), checks.WithHostRootMount(e.dir), checks.WithDockerClient(dockerClient), - checks.WithNodeLabels(nodeLabels), checks.WithKubernetesClient(kubeClient, "kube_system_uuid"), ) assert.NoError(err) diff --git a/pkg/compliance/agent/node_labels.go b/pkg/compliance/agent/node_labels.go deleted file mode 100644 index 2474356a593f5..0000000000000 --- a/pkg/compliance/agent/node_labels.go +++ /dev/null @@ -1,63 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package agent - -import ( - "context" - "fmt" - "math" - "time" - - "github.com/DataDog/datadog-agent/pkg/util/kubernetes/hostinfo" - "github.com/DataDog/datadog-agent/pkg/util/log" - - "github.com/cenkalti/backoff/v4" -) - -const ( - nodeLabelsCheckInitialInterval = time.Second - nodeLabelsCheckMaxInterval = 10 * time.Second - nodeLabelsCheckMultiplier = 2.0 - nodeLabelsCheckMaxElapsedTime = 1 * time.Minute -) - -// WaitGetNodeLabels waits for node labels to become available using a backoff retrier -func WaitGetNodeLabels() (map[string]string, error) { - fetcher := &labelsFetcher{} - exp := backoff.NewExponentialBackOff() - exp.InitialInterval = nodeLabelsCheckInitialInterval - exp.RandomizationFactor = 0 - exp.Multiplier = nodeLabelsCheckMultiplier - exp.MaxInterval = nodeLabelsCheckMaxInterval - exp.MaxElapsedTime = nodeLabelsCheckMaxElapsedTime - exp.Reset() - - err := backoff.RetryNotify(fetcher.fetch, exp, notifyFetchNodeLabels()) - return fetcher.nodeLabels, err -} - -type labelsFetcher struct { - nodeLabels map[string]string -} - -func (f *labelsFetcher) fetch() error { - nodeInfo, err := hostinfo.NewNodeInfo() - if err != nil { - return fmt.Errorf("unable to instantiate NodeInfo, err: %w", err) - } - f.nodeLabels, err = nodeInfo.GetNodeLabels(context.TODO()) - return err -} - -func notifyFetchNodeLabels() backoff.Notify { - attempt := 0 - return func(err error, delay time.Duration) { - attempt++ - mins := int(delay.Minutes()) - secs := int(math.Mod(delay.Seconds(), 60)) - log.Warnf("Failed to get node labels (attempt=%d): will retry in %dm%ds: %v", attempt, mins, secs, err) - } -} diff --git a/pkg/compliance/agent/testdata/configs/cis-kubernetes.yaml b/pkg/compliance/agent/testdata/configs/cis-kubernetes.yaml index 68313a77664fb..4c097eacc71b4 100644 --- a/pkg/compliance/agent/testdata/configs/cis-kubernetes.yaml +++ b/pkg/compliance/agent/testdata/configs/cis-kubernetes.yaml @@ -7,7 +7,6 @@ rules: - id: cis-kubernetes-1 scope: - kubernetesNode - hostSelector: node.label("kubernetes.io/role") in ["worker"] input: - file: path: /files/kube-apiserver.yaml diff --git a/pkg/compliance/checks/builder.go b/pkg/compliance/checks/builder.go index e1857235bdc01..74b2c6a8740bc 100644 --- a/pkg/compliance/checks/builder.go +++ b/pkg/compliance/checks/builder.go @@ -35,7 +35,6 @@ import ( fileutils "github.com/DataDog/datadog-agent/pkg/compliance/utils/file" processutils "github.com/DataDog/datadog-agent/pkg/compliance/utils/process" "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/util/kubernetes/hostinfo" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-go/v5/statsd" ) @@ -229,18 +228,6 @@ func MayFail(o BuilderOption) BuilderOption { } } -// WithNodeLabels configures a builder to use specified Kubernetes node labels -func WithNodeLabels(nodeLabels map[string]string) BuilderOption { - return func(b *builder) error { - b.nodeLabels = map[string]string{} - for k, v := range nodeLabels { - k, v := hostinfo.LabelPreprocessor(k, v) - b.nodeLabels[k] = v - } - return nil - } -} - // WithRegoInput configures a builder to provide rego input based on the content // of a file instead of the current environment func WithRegoInput(regoInputPath string) BuilderOption { @@ -318,7 +305,6 @@ type builder struct { hostname string pathMapper *fileutils.PathMapper etcGroupPath string - nodeLabels map[string]string suiteMatcher SuiteMatcher ruleMatcher RuleMatcher @@ -448,153 +434,39 @@ func (b *builder) checkFromRegoRule(meta *compliance.SuiteMeta, rule *compliance return nil, err } - // skip host match check if rego input is overridden + // skip the scope checks if rego inputs were provided via CLI if b.regoInputOverride == nil { - eligible, err := b.hostMatcher(ruleScope, rule.ID, rule.HostSelector, rule.SkipOnK8s) - if err != nil { - return nil, err - } - - if !eligible { - log.Debugf("rule %s/%s discarded by hostMatcher", meta.Framework, rule.ID) - return nil, ErrRuleDoesNotApply - } - } - - return b.newRegoCheck(meta, ruleScope, rule, fallthroughReporter) -} - -func fallthroughReporter(report *compliance.Report) compliance.ReportResource { - return report.Resource -} - -func getRuleScope(meta *compliance.SuiteMeta, scopeList compliance.RuleScopeList) (compliance.RuleScope, error) { - switch { - case scopeList.Includes(compliance.DockerScope): - return compliance.DockerScope, nil - case scopeList.Includes(compliance.KubernetesNodeScope): - return compliance.KubernetesNodeScope, nil - case scopeList.Includes(compliance.KubernetesClusterScope): - return compliance.KubernetesClusterScope, nil - case scopeList.Includes(compliance.Unscoped): - return compliance.Unscoped, nil - default: - return "", ErrRuleScopeNotSupported - } -} - -func (b *builder) hostMatcher(scope compliance.RuleScope, ruleID string, hostSelector string, skipOnK8s bool) (bool, error) { - switch scope { - case compliance.DockerScope: - if skipOnK8s && config.IsKubernetes() { - log.Infof("rule %s skipped - running on a Kubernetes environment", ruleID) - return false, nil - } + switch ruleScope { + case compliance.DockerScope: + if rule.SkipOnK8s && config.IsKubernetes() { + log.Infof("rule %s skipped - running on a Kubernetes environment", rule.ID) + return nil, ErrRuleDoesNotApply + } - if b.dockerClient == nil { - log.Infof("rule %s skipped - not running in a docker environment", ruleID) - return false, nil - } - case compliance.KubernetesClusterScope: - if b.kubeClient == nil { - log.Infof("rule %s skipped - not running as Cluster Agent", ruleID) - return false, nil - } - case compliance.KubernetesNodeScope: - if config.IsKubernetes() { - ignoreHostSelectors := config.Datadog.GetBool("compliance_config.ignore_host_selectors") - if ignoreHostSelectors { - return true, nil + if b.dockerClient == nil { + log.Infof("rule %s skipped - not running in a docker environment", rule.ID) + return nil, ErrRuleDoesNotApply + } + case compliance.KubernetesClusterScope: + if b.kubeClient == nil { + log.Infof("rule %s skipped - not running as Cluster Agent", rule.ID) + return nil, ErrRuleDoesNotApply + } + case compliance.KubernetesNodeScope: + if !config.IsKubernetes() { + log.Infof("rule %s skipped - not running on a Kubernetes node", rule.ID) + return nil, ErrRuleDoesNotApply } - return b.isKubernetesNodeEligible(hostSelector) } - log.Infof("rule %s skipped - not running on a Kubernetes node", ruleID) - return false, nil - } - - return true, nil -} - -func (b *builder) isKubernetesNodeEligible(hostSelector string) (bool, error) { - if hostSelector == "" { - return true, nil - } - - expr, err := eval.ParseExpression(hostSelector) - if err != nil { - return false, err - } - - labelKeys := b.nodeLabelKeys() - nodeInstance := eval.NewInstance( - eval.VarMap{ - "node.labels": labelKeys, - }, - eval.FunctionMap{ - "node.hasLabel": b.nodeHasLabel, - "node.label": b.nodeLabel, - }, - eval.RegoInputMap{ - "labels": labelKeys, - }, - ) - - result, err := expr.Evaluate(nodeInstance) - if err != nil { - return false, err } - eligible, ok := result.(bool) - if !ok { - return false, fmt.Errorf("hostSelector %q does not evaluate to a boolean value", hostSelector) - } - - return eligible, nil -} - -func (b *builder) getNodeLabel(args ...interface{}) (string, bool, error) { - if len(args) == 0 { - return "", false, errors.New(`expecting one argument for label`) - } - label, ok := args[0].(string) - if !ok { - return "", false, fmt.Errorf(`expecting string value for label argument`) - } - if b.nodeLabels == nil { - return "", false, nil - } - v, ok := b.nodeLabels[label] - return v, ok, nil -} - -func (b *builder) nodeHasLabel(_ eval.Instance, args ...interface{}) (interface{}, error) { - _, ok, err := b.getNodeLabel(args...) - return ok, err -} - -func (b *builder) nodeLabel(_ eval.Instance, args ...interface{}) (interface{}, error) { - v, _, err := b.getNodeLabel(args...) - return v, err -} - -func (b *builder) nodeLabelKeys() []string { - var keys []string - for k := range b.nodeLabels { - keys = append(keys, k) - } - return keys -} - -func (b *builder) newRegoCheck(meta *compliance.SuiteMeta, ruleScope compliance.RuleScope, rule *compliance.RegoRule, handler resourceReporter) (compliance.Check, error) { var m metrics.Metrics - m = newRegoTelemetry() if config.Datadog.GetBool("compliance_config.opa.metrics.enabled") { m = newRegoMetrics(m, b.statsdClient) } regoCheck := rego.NewCheck(rule) - if err := regoCheck.CompileRule(rule, ruleScope, meta, m); err != nil { return nil, err } @@ -614,7 +486,7 @@ func (b *builder) newRegoCheck(meta *compliance.SuiteMeta, ruleScope compliance. suiteMeta: meta, - resourceHandler: handler, + resourceHandler: fallthroughReporter, scope: ruleScope, checkable: regoCheck, @@ -622,6 +494,25 @@ func (b *builder) newRegoCheck(meta *compliance.SuiteMeta, ruleScope compliance. }, nil } +func fallthroughReporter(report *compliance.Report) compliance.ReportResource { + return report.Resource +} + +func getRuleScope(meta *compliance.SuiteMeta, scopeList compliance.RuleScopeList) (compliance.RuleScope, error) { + switch { + case scopeList.Includes(compliance.DockerScope): + return compliance.DockerScope, nil + case scopeList.Includes(compliance.KubernetesNodeScope): + return compliance.KubernetesNodeScope, nil + case scopeList.Includes(compliance.KubernetesClusterScope): + return compliance.KubernetesClusterScope, nil + case scopeList.Includes(compliance.Unscoped): + return compliance.Unscoped, nil + default: + return "", ErrRuleScopeNotSupported + } +} + func (b *builder) Reporter() event.Reporter { return b.reporter } @@ -683,10 +574,6 @@ func (b *builder) IsLeader() bool { return true } -func (b *builder) NodeLabels() map[string]string { - return b.nodeLabels -} - func (b *builder) EvaluateFromCache(ev eval.Evaluatable) (interface{}, error) { instance := eval.NewInstance( nil, diff --git a/pkg/compliance/checks/builder_test.go b/pkg/compliance/checks/builder_test.go index 76b479b6d85b5..d91e37433cc75 100644 --- a/pkg/compliance/checks/builder_test.go +++ b/pkg/compliance/checks/builder_test.go @@ -20,95 +20,6 @@ import ( assert "github.com/stretchr/testify/require" ) -func TestKubernetesNodeEligible(t *testing.T) { - tests := []struct { - name string - selector string - labels map[string]string - expectEligible bool - expectError error - }{ - { - name: "empty selector", - selector: "", - expectEligible: true, - }, - { - name: "role only", - selector: `node.label("kubernetes.io/role") in ["master"]`, - labels: map[string]string{ - "node-role.kubernetes.io/master": "", - "foo": "bar", - }, - expectEligible: true, - }, - { - name: "role and another label", - selector: `node.label("kubernetes.io/role") == "master" && node.label("foo") == "bar"`, - labels: map[string]string{ - "node-role.kubernetes.io/master": "", - "foo": "bar", - }, - expectEligible: true, - }, - { - name: "role and missing label", - selector: `node.label("kubernetes.io/role") == "master" && node.label("foo") == "bar"`, - labels: map[string]string{ - "node-role.kubernetes.io/master": "", - "foo": "bazbar", - }, - expectEligible: false, - }, - { - name: "role and label name", - selector: `node.label("kubernetes.io/role") == "master" && "foo" in node.labels`, - labels: map[string]string{ - "node-role.kubernetes.io/master": "", - "foo": "bazbar", - }, - expectEligible: true, - }, - { - name: "not boolean", - selector: `node.label("kubernetes.io/role")`, - labels: map[string]string{ - "node-role.kubernetes.io/master": "", - "foo": "bazbar", - }, - expectEligible: false, - expectError: errors.New(`hostSelector "node.label(\"kubernetes.io/role\")" does not evaluate to a boolean value`), - }, - { - name: "bad expression", - selector: `¯\_(ツ)_/¯`, - labels: map[string]string{ - "node-role.kubernetes.io/master": "", - "foo": "bazbar", - }, - expectEligible: false, - expectError: errors.New(`1:1: no match found for ¯`), - }, - { - name: "nil labels", - selector: `node.label("kubernetes.io/role") != "master" && "foo" in node.labels`, - expectEligible: false, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - builder := &builder{} - WithNodeLabels(tt.labels)(builder) - eligible, err := builder.isKubernetesNodeEligible(tt.selector) - assert.Equal(t, tt.expectEligible, eligible) - if tt.expectError != nil { - assert.EqualError(t, err, tt.expectError.Error()) - } - }) - } -} - func TestResolveValueFrom(t *testing.T) { assert := assert.New(t) @@ -149,7 +60,7 @@ func TestResolveValueFrom(t *testing.T) { setup: func(t *testing.T) { processutils.Fetcher = func() (processutils.Processes, error) { return processutils.Processes{ - 42: processutils.NewCheckedFakeProcess(42, "buddy", []string{"--path=/home/root/hiya-buddy.txt"}), + 42: processutils.NewCheckedFakeProcess(42, "buddy", []string{"--path=/home/root/hiya-buddy.txt"}, nil), }, nil } }, @@ -171,7 +82,7 @@ func TestResolveValueFrom(t *testing.T) { setup: func(t *testing.T) { processutils.Fetcher = func() (processutils.Processes, error) { return processutils.Processes{ - 42: processutils.NewCheckedFakeProcess(42, "buddy", nil), + 42: processutils.NewCheckedFakeProcess(42, "buddy", nil, nil), }, nil } }, diff --git a/pkg/compliance/checks/check.go b/pkg/compliance/checks/check.go index c274f935cf08f..6bc1bd1fde23d 100644 --- a/pkg/compliance/checks/check.go +++ b/pkg/compliance/checks/check.go @@ -6,6 +6,7 @@ package checks import ( + "sort" "time" "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" @@ -126,6 +127,8 @@ func (c *complianceCheck) Run() error { var err error reports := c.checkable.Check(c) + sort.Stable(reports) + resourceQuadIDs := make(map[resourceQuadID]bool) for _, report := range reports { diff --git a/pkg/compliance/checks/checkable.go b/pkg/compliance/checks/checkable.go index 4b4250aa8655e..b6876a11560ac 100644 --- a/pkg/compliance/checks/checkable.go +++ b/pkg/compliance/checks/checkable.go @@ -12,5 +12,5 @@ import ( // Checkable abstracts a resource check type Checkable interface { - Check(env env.Env) []*compliance.Report + Check(env env.Env) compliance.Reports } diff --git a/pkg/compliance/checks/env/env.go b/pkg/compliance/checks/env/env.go index 005a516e50a9e..69f0b9f7a0d4b 100644 --- a/pkg/compliance/checks/env/env.go +++ b/pkg/compliance/checks/env/env.go @@ -41,5 +41,4 @@ type Configuration interface { RelativeToHostRoot(path string) string EvaluateFromCache(e eval.Evaluatable) (interface{}, error) IsLeader() bool - NodeLabels() map[string]string } diff --git a/pkg/compliance/checks/mock_checkable_test.go b/pkg/compliance/checks/mock_checkable_test.go index 2ff2c4a8c3a4d..f5a8d49a283e4 100644 --- a/pkg/compliance/checks/mock_checkable_test.go +++ b/pkg/compliance/checks/mock_checkable_test.go @@ -16,7 +16,7 @@ type mockCheckable struct { mock.Mock } -func (m *mockCheckable) Check(env env.Env) []*compliance.Report { +func (m *mockCheckable) Check(env env.Env) compliance.Reports { args := m.Called(env) reports := args.Get(0).([]*compliance.Report) return reports diff --git a/pkg/compliance/mocks/audit_client.go b/pkg/compliance/mocks/audit_client.go index 98c279bdf55c4..6d16a1de05b57 100644 --- a/pkg/compliance/mocks/audit_client.go +++ b/pkg/compliance/mocks/audit_client.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/builder.go b/pkg/compliance/mocks/builder.go index 34b0dbdddb4f9..9118ed23681cf 100644 --- a/pkg/compliance/mocks/builder.go +++ b/pkg/compliance/mocks/builder.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/clients.go b/pkg/compliance/mocks/clients.go index 47a349921ef8b..a6b2070bae258 100644 --- a/pkg/compliance/mocks/clients.go +++ b/pkg/compliance/mocks/clients.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/configuration.go b/pkg/compliance/mocks/configuration.go index 4ccc49903f3ed..5fb622d5eae4c 100644 --- a/pkg/compliance/mocks/configuration.go +++ b/pkg/compliance/mocks/configuration.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks @@ -91,22 +91,6 @@ func (_m *Configuration) MaxEventsPerRun() int { return r0 } -// NodeLabels provides a mock function with given fields: -func (_m *Configuration) NodeLabels() map[string]string { - ret := _m.Called() - - var r0 map[string]string - if rf, ok := ret.Get(0).(func() map[string]string); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(map[string]string) - } - } - - return r0 -} - // NormalizeToHostRoot provides a mock function with given fields: path func (_m *Configuration) NormalizeToHostRoot(path string) string { ret := _m.Called(path) diff --git a/pkg/compliance/mocks/docker_client.go b/pkg/compliance/mocks/docker_client.go index 673e31d4881d1..c2267856c4bac 100644 --- a/pkg/compliance/mocks/docker_client.go +++ b/pkg/compliance/mocks/docker_client.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks @@ -23,8 +23,6 @@ import ( swarm "github.com/docker/docker/api/types/swarm" - time "time" - types "github.com/docker/docker/api/types" v1 "github.com/opencontainers/image-spec/specs-go/v1" @@ -233,14 +231,14 @@ func (_m *DockerClient) ContainerCommit(ctx context.Context, _a1 string, options } // ContainerCreate provides a mock function with given fields: ctx, config, hostConfig, networkingConfig, platform, containerName -func (_m *DockerClient) ContainerCreate(ctx context.Context, config *container.Config, hostConfig *container.HostConfig, networkingConfig *network.NetworkingConfig, platform *v1.Platform, containerName string) (container.ContainerCreateCreatedBody, error) { +func (_m *DockerClient) ContainerCreate(ctx context.Context, config *container.Config, hostConfig *container.HostConfig, networkingConfig *network.NetworkingConfig, platform *v1.Platform, containerName string) (container.CreateResponse, error) { ret := _m.Called(ctx, config, hostConfig, networkingConfig, platform, containerName) - var r0 container.ContainerCreateCreatedBody - if rf, ok := ret.Get(0).(func(context.Context, *container.Config, *container.HostConfig, *network.NetworkingConfig, *v1.Platform, string) container.ContainerCreateCreatedBody); ok { + var r0 container.CreateResponse + if rf, ok := ret.Get(0).(func(context.Context, *container.Config, *container.HostConfig, *network.NetworkingConfig, *v1.Platform, string) container.CreateResponse); ok { r0 = rf(ctx, config, hostConfig, networkingConfig, platform, containerName) } else { - r0 = ret.Get(0).(container.ContainerCreateCreatedBody) + r0 = ret.Get(0).(container.CreateResponse) } var r1 error @@ -557,13 +555,13 @@ func (_m *DockerClient) ContainerResize(ctx context.Context, _a1 string, options return r0 } -// ContainerRestart provides a mock function with given fields: ctx, _a1, timeout -func (_m *DockerClient) ContainerRestart(ctx context.Context, _a1 string, timeout *time.Duration) error { - ret := _m.Called(ctx, _a1, timeout) +// ContainerRestart provides a mock function with given fields: ctx, _a1, options +func (_m *DockerClient) ContainerRestart(ctx context.Context, _a1 string, options container.StopOptions) error { + ret := _m.Called(ctx, _a1, options) var r0 error - if rf, ok := ret.Get(0).(func(context.Context, string, *time.Duration) error); ok { - r0 = rf(ctx, _a1, timeout) + if rf, ok := ret.Get(0).(func(context.Context, string, container.StopOptions) error); ok { + r0 = rf(ctx, _a1, options) } else { r0 = ret.Error(0) } @@ -648,13 +646,13 @@ func (_m *DockerClient) ContainerStatsOneShot(ctx context.Context, _a1 string) ( return r0, r1 } -// ContainerStop provides a mock function with given fields: ctx, _a1, timeout -func (_m *DockerClient) ContainerStop(ctx context.Context, _a1 string, timeout *time.Duration) error { - ret := _m.Called(ctx, _a1, timeout) +// ContainerStop provides a mock function with given fields: ctx, _a1, options +func (_m *DockerClient) ContainerStop(ctx context.Context, _a1 string, options container.StopOptions) error { + ret := _m.Called(ctx, _a1, options) var r0 error - if rf, ok := ret.Get(0).(func(context.Context, string, *time.Duration) error); ok { - r0 = rf(ctx, _a1, timeout) + if rf, ok := ret.Get(0).(func(context.Context, string, container.StopOptions) error); ok { + r0 = rf(ctx, _a1, options) } else { r0 = ret.Error(0) } @@ -719,15 +717,15 @@ func (_m *DockerClient) ContainerUpdate(ctx context.Context, _a1 string, updateC } // ContainerWait provides a mock function with given fields: ctx, _a1, condition -func (_m *DockerClient) ContainerWait(ctx context.Context, _a1 string, condition container.WaitCondition) (<-chan container.ContainerWaitOKBody, <-chan error) { +func (_m *DockerClient) ContainerWait(ctx context.Context, _a1 string, condition container.WaitCondition) (<-chan container.WaitResponse, <-chan error) { ret := _m.Called(ctx, _a1, condition) - var r0 <-chan container.ContainerWaitOKBody - if rf, ok := ret.Get(0).(func(context.Context, string, container.WaitCondition) <-chan container.ContainerWaitOKBody); ok { + var r0 <-chan container.WaitResponse + if rf, ok := ret.Get(0).(func(context.Context, string, container.WaitCondition) <-chan container.WaitResponse); ok { r0 = rf(ctx, _a1, condition) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(<-chan container.ContainerWaitOKBody) + r0 = ret.Get(0).(<-chan container.WaitResponse) } } @@ -808,20 +806,20 @@ func (_m *DockerClient) CopyToContainer(ctx context.Context, _a1 string, path st return r0 } -// DiskUsage provides a mock function with given fields: ctx -func (_m *DockerClient) DiskUsage(ctx context.Context) (types.DiskUsage, error) { - ret := _m.Called(ctx) +// DiskUsage provides a mock function with given fields: ctx, options +func (_m *DockerClient) DiskUsage(ctx context.Context, options types.DiskUsageOptions) (types.DiskUsage, error) { + ret := _m.Called(ctx, options) var r0 types.DiskUsage - if rf, ok := ret.Get(0).(func(context.Context) types.DiskUsage); ok { - r0 = rf(ctx) + if rf, ok := ret.Get(0).(func(context.Context, types.DiskUsageOptions) types.DiskUsage); ok { + r0 = rf(ctx, options) } else { r0 = ret.Get(0).(types.DiskUsage) } var r1 error - if rf, ok := ret.Get(1).(func(context.Context) error); ok { - r1 = rf(ctx) + if rf, ok := ret.Get(1).(func(context.Context, types.DiskUsageOptions) error); ok { + r1 = rf(ctx, options) } else { r1 = ret.Error(1) } @@ -1492,18 +1490,18 @@ func (_m *DockerClient) ServerVersion(ctx context.Context) (types.Version, error } // VolumeCreate provides a mock function with given fields: ctx, options -func (_m *DockerClient) VolumeCreate(ctx context.Context, options volume.VolumeCreateBody) (types.Volume, error) { +func (_m *DockerClient) VolumeCreate(ctx context.Context, options volume.CreateOptions) (volume.Volume, error) { ret := _m.Called(ctx, options) - var r0 types.Volume - if rf, ok := ret.Get(0).(func(context.Context, volume.VolumeCreateBody) types.Volume); ok { + var r0 volume.Volume + if rf, ok := ret.Get(0).(func(context.Context, volume.CreateOptions) volume.Volume); ok { r0 = rf(ctx, options) } else { - r0 = ret.Get(0).(types.Volume) + r0 = ret.Get(0).(volume.Volume) } var r1 error - if rf, ok := ret.Get(1).(func(context.Context, volume.VolumeCreateBody) error); ok { + if rf, ok := ret.Get(1).(func(context.Context, volume.CreateOptions) error); ok { r1 = rf(ctx, options) } else { r1 = ret.Error(1) @@ -1513,14 +1511,14 @@ func (_m *DockerClient) VolumeCreate(ctx context.Context, options volume.VolumeC } // VolumeInspect provides a mock function with given fields: ctx, volumeID -func (_m *DockerClient) VolumeInspect(ctx context.Context, volumeID string) (types.Volume, error) { +func (_m *DockerClient) VolumeInspect(ctx context.Context, volumeID string) (volume.Volume, error) { ret := _m.Called(ctx, volumeID) - var r0 types.Volume - if rf, ok := ret.Get(0).(func(context.Context, string) types.Volume); ok { + var r0 volume.Volume + if rf, ok := ret.Get(0).(func(context.Context, string) volume.Volume); ok { r0 = rf(ctx, volumeID) } else { - r0 = ret.Get(0).(types.Volume) + r0 = ret.Get(0).(volume.Volume) } var r1 error @@ -1534,14 +1532,14 @@ func (_m *DockerClient) VolumeInspect(ctx context.Context, volumeID string) (typ } // VolumeInspectWithRaw provides a mock function with given fields: ctx, volumeID -func (_m *DockerClient) VolumeInspectWithRaw(ctx context.Context, volumeID string) (types.Volume, []byte, error) { +func (_m *DockerClient) VolumeInspectWithRaw(ctx context.Context, volumeID string) (volume.Volume, []byte, error) { ret := _m.Called(ctx, volumeID) - var r0 types.Volume - if rf, ok := ret.Get(0).(func(context.Context, string) types.Volume); ok { + var r0 volume.Volume + if rf, ok := ret.Get(0).(func(context.Context, string) volume.Volume); ok { r0 = rf(ctx, volumeID) } else { - r0 = ret.Get(0).(types.Volume) + r0 = ret.Get(0).(volume.Volume) } var r1 []byte @@ -1564,14 +1562,14 @@ func (_m *DockerClient) VolumeInspectWithRaw(ctx context.Context, volumeID strin } // VolumeList provides a mock function with given fields: ctx, filter -func (_m *DockerClient) VolumeList(ctx context.Context, filter filters.Args) (volume.VolumeListOKBody, error) { +func (_m *DockerClient) VolumeList(ctx context.Context, filter filters.Args) (volume.ListResponse, error) { ret := _m.Called(ctx, filter) - var r0 volume.VolumeListOKBody - if rf, ok := ret.Get(0).(func(context.Context, filters.Args) volume.VolumeListOKBody); ok { + var r0 volume.ListResponse + if rf, ok := ret.Get(0).(func(context.Context, filters.Args) volume.ListResponse); ok { r0 = rf(ctx, filter) } else { - r0 = ret.Get(0).(volume.VolumeListOKBody) + r0 = ret.Get(0).(volume.ListResponse) } var r1 error @@ -1598,6 +1596,20 @@ func (_m *DockerClient) VolumeRemove(ctx context.Context, volumeID string, force return r0 } +// VolumeUpdate provides a mock function with given fields: ctx, volumeID, version, options +func (_m *DockerClient) VolumeUpdate(ctx context.Context, volumeID string, version swarm.Version, options volume.UpdateOptions) error { + ret := _m.Called(ctx, volumeID, version, options) + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, string, swarm.Version, volume.UpdateOptions) error); ok { + r0 = rf(ctx, volumeID, version, options) + } else { + r0 = ret.Error(0) + } + + return r0 +} + // VolumesPrune provides a mock function with given fields: ctx, pruneFilter func (_m *DockerClient) VolumesPrune(ctx context.Context, pruneFilter filters.Args) (types.VolumesPruneReport, error) { ret := _m.Called(ctx, pruneFilter) diff --git a/pkg/compliance/mocks/env.go b/pkg/compliance/mocks/env.go index 3bd38b2a4b7a4..051c887817d7f 100644 --- a/pkg/compliance/mocks/env.go +++ b/pkg/compliance/mocks/env.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks @@ -157,22 +157,6 @@ func (_m *Env) MaxEventsPerRun() int { return r0 } -// NodeLabels provides a mock function with given fields: -func (_m *Env) NodeLabels() map[string]string { - ret := _m.Called() - - var r0 map[string]string - if rf, ok := ret.Get(0).(func() map[string]string); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(map[string]string) - } - } - - return r0 -} - // NormalizeToHostRoot provides a mock function with given fields: path func (_m *Env) NormalizeToHostRoot(path string) string { ret := _m.Called(path) diff --git a/pkg/compliance/mocks/evaluatable.go b/pkg/compliance/mocks/evaluatable.go index 03921d992e512..d08e7fae32625 100644 --- a/pkg/compliance/mocks/evaluatable.go +++ b/pkg/compliance/mocks/evaluatable.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/iterator.go b/pkg/compliance/mocks/iterator.go index 21146f405ee9c..78b9085e796c4 100644 --- a/pkg/compliance/mocks/iterator.go +++ b/pkg/compliance/mocks/iterator.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/kube_client.go b/pkg/compliance/mocks/kube_client.go index 930dbf709f14d..bbd81265a1136 100644 --- a/pkg/compliance/mocks/kube_client.go +++ b/pkg/compliance/mocks/kube_client.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/rego_configuration.go b/pkg/compliance/mocks/rego_configuration.go index d361332686c31..8d45a868b972b 100644 --- a/pkg/compliance/mocks/rego_configuration.go +++ b/pkg/compliance/mocks/rego_configuration.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/reporter.go b/pkg/compliance/mocks/reporter.go index ce6418c49ec58..0b9c4fc2d36ab 100644 --- a/pkg/compliance/mocks/reporter.go +++ b/pkg/compliance/mocks/reporter.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/mocks/scheduler.go b/pkg/compliance/mocks/scheduler.go index ab0ba281388af..5166e5e20b049 100644 --- a/pkg/compliance/mocks/scheduler.go +++ b/pkg/compliance/mocks/scheduler.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/compliance/rego/rego_check.go b/pkg/compliance/rego/rego_check.go index c70afedb3299b..2fb8ffea5f877 100644 --- a/pkg/compliance/rego/rego_check.go +++ b/pkg/compliance/rego/rego_check.go @@ -432,9 +432,6 @@ func (r *regoCheck) buildContextInput(env env.Env) eval.RegoInputMap { if r.ruleScope == compliance.KubernetesClusterScope { context["kubernetes_cluster"], _ = env.KubeClient().ClusterID() } - if r.ruleScope == compliance.KubernetesNodeScope { - context["kubernetes_node_labels"] = env.NodeLabels() - } mappedInputs := buildMappedInputs(r.inputs) if mappedInputs != nil { @@ -495,7 +492,7 @@ func findingsToReports(findings []regoFinding) []*compliance.Report { return reports } -func (r *regoCheck) Check(env env.Env) []*compliance.Report { +func (r *regoCheck) Check(env env.Env) compliance.Reports { r.evalLock.Lock() defer r.evalLock.Unlock() diff --git a/pkg/compliance/rego/rego_check_input_test.go b/pkg/compliance/rego/rego_check_input_test.go index bdd1431a6e201..01ad5f0a87e2f 100644 --- a/pkg/compliance/rego/rego_check_input_test.go +++ b/pkg/compliance/rego/rego_check_input_test.go @@ -110,6 +110,7 @@ func TestRegoInputCheck(t *testing.T) { ResourceCommon: compliance.ResourceCommon{ Process: &compliance.Process{ Name: "proc1", + Envs: []string{"FOO"}, }, }, TagName: "processes", @@ -117,7 +118,7 @@ func TestRegoInputCheck(t *testing.T) { }, }, processes: processutils.Processes{ - 42: processutils.NewCheckedFakeProcess(42, "proc1", []string{"arg1", "--path=foo"}), + 42: processutils.NewCheckedFakeProcess(42, "proc1", []string{"arg1", "--path=foo"}, []string{"FOO=foo", "BAR=bar"}), }, expectedInput: ` { @@ -127,7 +128,8 @@ func TestRegoInputCheck(t *testing.T) { "input": { "processes": { "process": { - "name": "proc1" + "name": "proc1", + "envs": ["FOO"] }, "tag": "processes", "type": "array" @@ -140,6 +142,9 @@ func TestRegoInputCheck(t *testing.T) { "arg1", "--path=foo" ], + "envs": { + "FOO": "foo" + }, "exe": "", "flags": { "--path": "foo", diff --git a/pkg/compliance/rego/rego_check_test.go b/pkg/compliance/rego/rego_check_test.go index a767b148ca942..dd766a6674d9c 100644 --- a/pkg/compliance/rego/rego_check_test.go +++ b/pkg/compliance/rego/rego_check_test.go @@ -25,7 +25,7 @@ type regoFixture struct { findings string processes processutils.Processes - expectReports []*compliance.Report + expectReports compliance.Reports } func (f *regoFixture) newRegoCheck() (*regoCheck, error) { @@ -116,7 +116,7 @@ func TestRegoCheck(t *testing.T) { } `, findings: "data.test.findings", - expectReports: []*compliance.Report{ + expectReports: compliance.Reports{ { Passed: true, Data: event.Data{ @@ -132,7 +132,7 @@ func TestRegoCheck(t *testing.T) { }, }, processes: processutils.Processes{ - 42: processutils.NewCheckedFakeProcess(42, "proc1", []string{"arg1", "--path=foo"}), + 42: processutils.NewCheckedFakeProcess(42, "proc1", []string{"arg1", "--path=foo"}, nil), }, }, { @@ -176,9 +176,9 @@ func TestRegoCheck(t *testing.T) { `, findings: "data.test.findings", processes: processutils.Processes{ - 42: processutils.NewCheckedFakeProcess(42, "proc1", []string{"arg1", "--path=foo"}), + 42: processutils.NewCheckedFakeProcess(42, "proc1", []string{"arg1", "--path=foo"}, nil), }, - expectReports: []*compliance.Report{ + expectReports: compliance.Reports{ { Passed: true, Data: event.Data{ @@ -230,9 +230,9 @@ func TestRegoCheck(t *testing.T) { `, findings: "data.test.findings", processes: processutils.Processes{ - 42: processutils.NewCheckedFakeProcess(42, "proc1", []string{"arg1", "--path=foo"}), + 42: processutils.NewCheckedFakeProcess(42, "proc1", []string{"arg1", "--path=foo"}, nil), }, - expectReports: []*compliance.Report{ + expectReports: compliance.Reports{ { Passed: false, Data: event.Data{ @@ -275,9 +275,9 @@ func TestRegoCheck(t *testing.T) { `, findings: "data.test.findings", processes: processutils.Processes{ - 42: processutils.NewCheckedFakeProcess(42, "proc1", []string{"arg1", "--path=foo"}), + 42: processutils.NewCheckedFakeProcess(42, "proc1", []string{"arg1", "--path=foo"}, nil), }, - expectReports: []*compliance.Report{ + expectReports: compliance.Reports{ { Passed: false, Data: nil, @@ -318,7 +318,7 @@ func TestRegoCheck(t *testing.T) { `, findings: "data.test.findings", processes: processutils.Processes{ - 42: processutils.NewCheckedFakeProcess(42, "proc1", []string{"arg1", "--path=foo"}), + 42: processutils.NewCheckedFakeProcess(42, "proc1", []string{"arg1", "--path=foo"}, nil), }, expectReports: nil, }, diff --git a/pkg/compliance/report.go b/pkg/compliance/report.go index 9e442e245eb65..dbaf4739213de 100644 --- a/pkg/compliance/report.go +++ b/pkg/compliance/report.go @@ -32,3 +32,14 @@ type ReportResource struct { ID string Type string } + +// Reports aggregates compliance reports +type Reports []*Report + +func isFailing(r *Report) bool { + return !r.Passed && r.Error == nil +} + +func (r Reports) Len() int { return len(r) } +func (r Reports) Less(i, j int) bool { return isFailing(r[i]) && !isFailing(r[j]) } +func (r Reports) Swap(i, j int) { r[i], r[j] = r[j], r[i] } diff --git a/pkg/compliance/resource.go b/pkg/compliance/resource.go index 218eeed8d14a2..5a67cd44dd077 100644 --- a/pkg/compliance/resource.go +++ b/pkg/compliance/resource.go @@ -129,7 +129,8 @@ const ( // Process describes a process resource type Process struct { - Name string `yaml:"name"` + Name string `yaml:"name"` + Envs []string `yaml:"envs,omitempty"` } // Fields & functions available for KubernetesResource diff --git a/pkg/compliance/resources/file/file_check_test.go b/pkg/compliance/resources/file/file_check_test.go index 1b2c7c7ad4c3b..b057bfd6c749d 100644 --- a/pkg/compliance/resources/file/file_check_test.go +++ b/pkg/compliance/resources/file/file_check_test.go @@ -341,7 +341,7 @@ func TestFileCheck(t *testing.T) { Transform: `h.file_process_flag("--config-file")`, }, processes: processutils.Processes{ - 42: processutils.NewCheckedFakeProcess(42, "dockerd", []string{"dockerd", "--config-file=/etc/docker/daemon.json"}), + 42: processutils.NewCheckedFakeProcess(42, "dockerd", []string{"dockerd", "--config-file=/etc/docker/daemon.json"}, nil), }, module: fmt.Sprintf(objectModule, `file.content["experimental"] == false`), setup: func(t *testing.T, env *mocks.Env, file *compliance.File) { @@ -426,7 +426,7 @@ func TestFileCheck(t *testing.T) { }, expectError: errors.New(`failed to resolve path`), processes: processutils.Processes{ - 42: processutils.NewCheckedFakeProcess(42, "dockerd", []string{"dockerd", "--config-file=/etc/docker/daemon.json"}), + 42: processutils.NewCheckedFakeProcess(42, "dockerd", []string{"dockerd", "--config-file=/etc/docker/daemon.json"}, nil), }, }, { diff --git a/pkg/compliance/resources/process/process_check.go b/pkg/compliance/resources/process/process_check.go index 1608e2881ac74..d3516d4889a08 100644 --- a/pkg/compliance/resources/process/process_check.go +++ b/pkg/compliance/resources/process/process_check.go @@ -53,6 +53,10 @@ func resolve(_ context.Context, e env.Env, id string, res compliance.ResourceCom exe := mp.Exe() cmdLine := mp.CmdlineSlice() flagValues := processutils.ParseProcessCmdLine(cmdLine) + envs, err := mp.EnvsMap(res.Process.Envs) + if err != nil { + return nil, err + } instance := eval.NewInstance( eval.VarMap{ @@ -71,6 +75,7 @@ func resolve(_ context.Context, e env.Env, id string, res compliance.ResourceCom "cmdLine": cmdLine, "flags": flagValues, "pid": mp.Pid(), + "envs": envs, }, ) instances = append(instances, resources.NewResolvedInstance(instance, strconv.Itoa(int(mp.Pid())), "process")) diff --git a/pkg/compliance/resources/process/process_check_test.go b/pkg/compliance/resources/process/process_check_test.go index bebba9035e498..62f43792ffcd2 100644 --- a/pkg/compliance/resources/process/process_check_test.go +++ b/pkg/compliance/resources/process/process_check_test.go @@ -121,7 +121,7 @@ func TestProcessCheck(t *testing.T) { }, module: fmt.Sprintf(processModule, `process.flags["--path"] == "foo"`), processes: processutils.Processes{ - 42: processutils.NewCheckedFakeProcess(42, "proc1", []string{"arg1", "--path=foo"}), + 42: processutils.NewCheckedFakeProcess(42, "proc1", []string{"arg1", "--path=foo"}, nil), }, expectReport: &compliance.Report{ Passed: true, @@ -151,8 +151,8 @@ func TestProcessCheck(t *testing.T) { }, module: fmt.Sprintf(processModule, `process.flags["--path"] == "foo"`), processes: processutils.Processes{ - 42: processutils.NewCheckedFakeProcess(42, "proc2", []string{"arg1", "--path=foo"}), - 43: processutils.NewCheckedFakeProcess(43, "proc3", []string{"arg1", "--path=foo"}), + 42: processutils.NewCheckedFakeProcess(42, "proc2", []string{"arg1", "--path=foo"}, nil), + 43: processutils.NewCheckedFakeProcess(43, "proc3", []string{"arg1", "--path=foo"}, nil), }, expectReport: &compliance.Report{ Passed: false, @@ -176,7 +176,7 @@ func TestProcessCheck(t *testing.T) { }, module: fmt.Sprintf(processModule, `process.flags["--path"] == "foo"`), processes: processutils.Processes{ - 42: processutils.NewCheckedFakeProcess(42, "proc1", []string{"arg1", "--paths=foo"}), + 42: processutils.NewCheckedFakeProcess(42, "proc1", []string{"arg1", "--paths=foo"}, nil), }, expectReport: &compliance.Report{ Passed: false, @@ -216,7 +216,7 @@ func TestProcessCheckCache(t *testing.T) { }, module: fmt.Sprintf(processModule, `process.flags["--path"] == "foo"`), processes: processutils.Processes{ - 42: processutils.NewCheckedFakeProcess(42, "proc1", []string{"arg1", "--path=foo"}), + 42: processutils.NewCheckedFakeProcess(42, "proc1", []string{"arg1", "--path=foo"}, nil), }, expectReport: &compliance.Report{ Passed: true, diff --git a/pkg/compliance/rule.go b/pkg/compliance/rule.go index e1d85f468e2a9..80ee795f74776 100644 --- a/pkg/compliance/rule.go +++ b/pkg/compliance/rule.go @@ -16,11 +16,10 @@ type Rule interface { // RuleCommon defines the base fields of a rule in a compliance config type RuleCommon struct { - ID string `yaml:"id"` - Description string `yaml:"description,omitempty"` - Scope RuleScopeList `yaml:"scope,omitempty"` - HostSelector string `yaml:"hostSelector,omitempty"` - SkipOnK8s bool `yaml:"skipOnKubernetes,omitempty"` + ID string `yaml:"id"` + Description string `yaml:"description,omitempty"` + Scope RuleScopeList `yaml:"scope,omitempty"` + SkipOnK8s bool `yaml:"skipOnKubernetes,omitempty"` } // RegoRule defines a rule in a compliance config diff --git a/pkg/compliance/suite_test.go b/pkg/compliance/suite_test.go index 7a0646be43afd..335facfd512cf 100644 --- a/pkg/compliance/suite_test.go +++ b/pkg/compliance/suite_test.go @@ -34,9 +34,8 @@ func TestParseSuite(t *testing.T) { RegoRules: []RegoRule{ { RuleCommon: RuleCommon{ - ID: "cis-docker-1", - Scope: RuleScopeList{DockerScope}, - HostSelector: `"foo" in node.labels`, + ID: "cis-docker-1", + Scope: RuleScopeList{DockerScope}, }, Inputs: []RegoInput{ { diff --git a/pkg/compliance/testdata/cis-docker.yaml b/pkg/compliance/testdata/cis-docker.yaml index 0f328cfdc7365..9a54ba7a01d07 100644 --- a/pkg/compliance/testdata/cis-docker.yaml +++ b/pkg/compliance/testdata/cis-docker.yaml @@ -7,7 +7,6 @@ rules: - id: cis-docker-1 scope: - docker - hostSelector: '"foo" in node.labels' input: - file: path: /etc/docker/daemon.json diff --git a/pkg/compliance/utils/process/process_utils.go b/pkg/compliance/utils/process/process_utils.go index 102182693b864..c53bc4d7ce4f4 100644 --- a/pkg/compliance/utils/process/process_utils.go +++ b/pkg/compliance/utils/process/process_utils.go @@ -25,6 +25,7 @@ type CheckedProcess struct { name string exe string cmdLineSlice []string + envsSlice []string } // NewCheckedProcess returns a new checked process, based on a real process object @@ -38,12 +39,13 @@ func NewCheckedProcess(p *process.Process) *CheckedProcess { } // NewCheckedFakeProcess returns a new checked process, based on a fake object -func NewCheckedFakeProcess(pid int32, name string, cmdLineSlice []string) *CheckedProcess { +func NewCheckedFakeProcess(pid int32, name string, cmdLineSlice []string, envsSlice []string) *CheckedProcess { return &CheckedProcess{ inner: nil, pid: pid, name: name, cmdLineSlice: cmdLineSlice, + envsSlice: envsSlice, } } @@ -101,6 +103,32 @@ func (p *CheckedProcess) CmdlineSlice() []string { return innerCmdLine } +// EnvsMap returns a map of the requested environment variables in this checked process +func (p *CheckedProcess) EnvsMap(envs []string) (map[string]string, error) { + envsMap := make(map[string]string, len(envs)) + if len(envs) == 0 { + return envsMap, nil + } + if p.envsSlice == nil && p.inner != nil { + innerEnvSlice, err := p.inner.Environ() + if err != nil { + return nil, err + } + p.envsSlice = innerEnvSlice + } + for _, envValue := range p.envsSlice { + for _, envName := range envs { + prefix := envName + "=" + if strings.HasPrefix(envValue, prefix) { + envsMap[envName] = strings.TrimPrefix(envValue, prefix) + } else if envValue == envName { + envsMap[envName] = "" + } + } + } + return envsMap, nil +} + // Processes holds process info indexed per PID type Processes map[int32]*CheckedProcess diff --git a/pkg/config/config.go b/pkg/config/config.go index 582784a181f60..9aabee4b72970 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -99,6 +99,7 @@ const ( // Datadog is the global configuration object var ( Datadog Config + SystemProbe Config proxies *Proxy overrideFuncs = make([]func(Config), 0) ) @@ -219,8 +220,10 @@ func init() { osinit() // Configure Datadog global configuration Datadog = NewConfig("datadog", "DD", strings.NewReplacer(".", "_")) + SystemProbe = NewConfig("system-probe", "DD", strings.NewReplacer(".", "_")) // Configuration defaults InitConfig(Datadog) + InitSystemProbeConfig(SystemProbe) } // InitConfig initializes the config defaults on a config @@ -365,6 +368,7 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("cluster_name", "") config.BindEnvAndSetDefault("disable_cluster_name_tag_key", false) + config.BindEnvAndSetDefault("enabled_rfc1123_compliant_cluster_name_tag", true) // secrets backend config.BindEnvAndSetDefault("secret_backend_command", "") @@ -373,7 +377,6 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("secret_backend_timeout", 30) config.BindEnvAndSetDefault("secret_backend_command_allow_group_exec_perm", false) config.BindEnvAndSetDefault("secret_backend_skip_checks", false) - config.BindEnvAndSetDefault("secret_backend_command_sha256", "") // Use to output logs in JSON format config.BindEnvAndSetDefault("log_format_json", false) @@ -717,6 +720,10 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("cluster_agent.max_leader_connections", 100) config.BindEnvAndSetDefault("cluster_agent.client_reconnect_period_seconds", 1200) config.BindEnvAndSetDefault("cluster_agent.collect_kubernetes_tags", false) + config.BindEnvAndSetDefault("cluster_agent.kubernetes_resources_collection.pod_annotations_exclude", []string{ + `^kubectl\.kubernetes\.io\/last-applied-configuration$`, + `^ad\.datadoghq\.com\/([[:alnum:]]+\.)?(checks|check_names|init_configs|instances)$`, + }) config.BindEnvAndSetDefault("metrics_port", "5000") // Metadata endpoints @@ -733,6 +740,7 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("ec2_metadata_token_lifetime", 21600) // value in seconds config.BindEnvAndSetDefault("ec2_prefer_imdsv2", false) config.BindEnvAndSetDefault("ec2_prioritize_instance_id_as_hostname", false) // used to bypass the hostname detection logic and force the EC2 instance ID as a hostname. + config.BindEnvAndSetDefault("ec2_use_dmi", true) // should the agent leverage DMI information to know if it's running on EC2 or not. config.BindEnvAndSetDefault("collect_ec2_tags", false) config.BindEnvAndSetDefault("collect_ec2_tags_use_imds", false) config.BindEnvAndSetDefault("exclude_ec2_tags", []string{}) @@ -821,6 +829,7 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("internal_profiling.block_profile_rate", 0) config.BindEnvAndSetDefault("internal_profiling.mutex_profile_fraction", 0) config.BindEnvAndSetDefault("internal_profiling.enable_goroutine_stacktraces", false) + config.BindEnvAndSetDefault("internal_profiling.delta_profiles", true) config.BindEnvAndSetDefault("internal_profiling.capture_all_allocations", false) @@ -1019,12 +1028,15 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("admission_controller.auto_instrumentation.endpoint", "/injectlib") config.BindEnvAndSetDefault("admission_controller.auto_instrumentation.container_registry", "gcr.io/datadoghq") config.BindEnvAndSetDefault("admission_controller.auto_instrumentation.patcher.enabled", false) + config.BindEnvAndSetDefault("admission_controller.auto_instrumentation.patcher.fallback_to_file_provider", false) // to be enabled only in e2e tests + config.BindEnvAndSetDefault("admission_controller.auto_instrumentation.patcher.file_provider_path", "/etc/datadog-agent/patch/auto-instru.json") // to be used only in e2e tests // Telemetry // Enable telemetry metrics on the internals of the Agent. // This create a lot of billable custom metrics. config.BindEnvAndSetDefault("telemetry.enabled", false) config.BindEnvAndSetDefault("telemetry.dogstatsd_origin", false) + config.BindEnvAndSetDefault("telemetry.python_memory", true) config.BindEnv("telemetry.checks") // We're using []string as a default instead of []float64 because viper can only parse list of string from the environment // @@ -1054,10 +1066,10 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("orchestrator_explorer.collector_discovery.enabled", true) config.BindEnv("orchestrator_explorer.max_per_message") config.BindEnv("orchestrator_explorer.max_message_bytes") - config.BindEnv("orchestrator_explorer.orchestrator_dd_url") - config.BindEnv("orchestrator_explorer.orchestrator_additional_endpoints") + config.BindEnv("orchestrator_explorer.orchestrator_dd_url", "DD_ORCHESTRATOR_EXPLORER_ORCHESTRATOR_DD_URL", "DD_ORCHESTRATOR_URL") + config.BindEnv("orchestrator_explorer.orchestrator_additional_endpoints", "DD_ORCHESTRATOR_EXPLORER_ORCHESTRATOR_ADDITIONAL_ENDPOINTS", "DD_ORCHESTRATOR_ADDITIONAL_ENDPOINTS") config.BindEnv("orchestrator_explorer.use_legacy_endpoint") - config.BindEnvAndSetDefault("orchestrator_explorer.manifest_collection.enabled", false) + config.BindEnvAndSetDefault("orchestrator_explorer.manifest_collection.enabled", true) config.BindEnvAndSetDefault("orchestrator_explorer.manifest_collection.buffer_manifest", true) config.BindEnvAndSetDefault("orchestrator_explorer.manifest_collection.buffer_flush_interval", 20*time.Second) @@ -1066,6 +1078,16 @@ func InitConfig(config Config) { config.BindEnv("container_lifecycle.dd_url") config.BindEnv("container_lifecycle.additional_endpoints") + // Container image configuration + config.BindEnvAndSetDefault("container_image.enabled", false) + config.BindEnv("container_image.dd_url") + config.BindEnv("container_image.additional_endpoints") + + // SBOM configuration + config.BindEnvAndSetDefault("sbom.enabled", false) + config.BindEnv("sbom.dd_url") + config.BindEnv("sbom.additional_endpoints") + // Orchestrator Explorer - process agent // DEPRECATED in favor of `orchestrator_explorer.orchestrator_dd_url` setting. If both are set `orchestrator_explorer.orchestrator_dd_url` will take precedence. config.BindEnv("process_config.orchestrator_dd_url", "DD_PROCESS_CONFIG_ORCHESTRATOR_DD_URL", "DD_PROCESS_AGENT_ORCHESTRATOR_DD_URL") @@ -1085,6 +1107,14 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("inventories_max_interval", DefaultInventoriesMaxInterval) // integer seconds config.BindEnvAndSetDefault("inventories_min_interval", DefaultInventoriesMinInterval) // integer seconds + // container_image_collection + config.BindEnvAndSetDefault("container_image_collection.metadata.enabled", false) + config.BindEnvAndSetDefault("container_image_collection.sbom.enabled", false) + config.BindEnvAndSetDefault("container_image_collection.sbom.use_mount", false) + config.BindEnvAndSetDefault("container_image_collection.sbom.scan_interval", 0) // Integer seconds + config.BindEnvAndSetDefault("container_image_collection.sbom.scan_timeout", 10*60) // Integer seconds + config.BindEnvAndSetDefault("container_image_collection.sbom.analyzers", []string{"os"}) + // Datadog security agent (common) config.BindEnvAndSetDefault("security_agent.cmd_port", 5010) config.BindEnvAndSetDefault("security_agent.expvar_port", 5011) @@ -1111,73 +1141,13 @@ func InitConfig(config Config) { config.BindEnvAndSetDefault("compliance_config.run_path", defaultRunPath) config.BindEnv("compliance_config.run_commands_as") bindEnvAndSetLogsConfigKeys(config, "compliance_config.endpoints.") - config.BindEnvAndSetDefault("compliance_config.ignore_host_selectors", true) config.BindEnvAndSetDefault("compliance_config.opa.metrics.enabled", false) // Datadog security agent (runtime) config.BindEnvAndSetDefault("runtime_security_config.enabled", false) - config.BindEnvAndSetDefault("runtime_security_config.fim_enabled", false) - config.BindEnvAndSetDefault("runtime_security_config.event_monitoring.enabled", false) - config.BindEnvAndSetDefault("runtime_security_config.erpc_dentry_resolution_enabled", true) - config.BindEnvAndSetDefault("runtime_security_config.map_dentry_resolution_enabled", true) - config.BindEnvAndSetDefault("runtime_security_config.dentry_cache_size", 1024) - config.BindEnvAndSetDefault("runtime_security_config.policies.dir", DefaultRuntimePoliciesDir) - config.BindEnvAndSetDefault("runtime_security_config.policies.watch_dir", false) - config.BindEnvAndSetDefault("runtime_security_config.policies.monitor.enabled", false) config.BindEnvAndSetDefault("runtime_security_config.socket", "/opt/datadog-agent/run/runtime-security.sock") - config.BindEnvAndSetDefault("runtime_security_config.enable_approvers", true) - config.BindEnvAndSetDefault("runtime_security_config.enable_kernel_filters", true) - config.BindEnvAndSetDefault("runtime_security_config.flush_discarder_window", 3) - config.BindEnvAndSetDefault("runtime_security_config.runtime_monitor.enabled", false) - config.BindEnvAndSetDefault("runtime_security_config.events_stats.polling_interval", 20) - config.BindEnvAndSetDefault("runtime_security_config.events_stats.tags_cardinality", "high") config.BindEnvAndSetDefault("runtime_security_config.run_path", defaultRunPath) - config.BindEnvAndSetDefault("runtime_security_config.event_server.burst", 40) - config.BindEnvAndSetDefault("runtime_security_config.event_server.retention", 6) - config.BindEnvAndSetDefault("runtime_security_config.event_server.rate", 10) - config.BindEnvAndSetDefault("runtime_security_config.load_controller.events_count_threshold", 20000) - config.BindEnvAndSetDefault("runtime_security_config.load_controller.discarder_timeout", 60) - config.BindEnvAndSetDefault("runtime_security_config.load_controller.control_period", 2) - config.BindEnvAndSetDefault("runtime_security_config.pid_cache_size", 10000) - config.BindEnvAndSetDefault("runtime_security_config.cookie_cache_size", 100) - config.BindEnvAndSetDefault("runtime_security_config.agent_monitoring_events", true) - config.BindEnvAndSetDefault("runtime_security_config.custom_sensitive_words", []string{}) - config.BindEnvAndSetDefault("runtime_security_config.remote_tagger", true) - config.BindEnvAndSetDefault("runtime_security_config.log_patterns", []string{}) - config.BindEnvAndSetDefault("runtime_security_config.log_tags", []string{}) bindEnvAndSetLogsConfigKeys(config, "runtime_security_config.endpoints.") - config.BindEnvAndSetDefault("runtime_security_config.self_test.enabled", true) - config.BindEnvAndSetDefault("runtime_security_config.self_test.send_report", true) - config.BindEnvAndSetDefault("runtime_security_config.runtime_compilation.enabled", false) - config.BindEnv("runtime_security_config.runtime_compilation.compiled_constants_enabled") - config.BindEnvAndSetDefault("runtime_security_config.network.enabled", true) - config.BindEnvAndSetDefault("runtime_security_config.network.lazy_interface_prefixes", []string{}) - config.BindEnvAndSetDefault("runtime_security_config.network.classifier_priority", 10) - config.BindEnvAndSetDefault("runtime_security_config.network.classifier_handle", 0) - config.BindEnvAndSetDefault("runtime_security_config.remote_configuration.enabled", false) - config.BindEnvAndSetDefault("runtime_security_config.activity_dump.enabled", false) - config.BindEnvAndSetDefault("runtime_security_config.activity_dump.cleanup_period", 30) - config.BindEnvAndSetDefault("runtime_security_config.activity_dump.tags_resolution_period", 60) - config.BindEnvAndSetDefault("runtime_security_config.activity_dump.load_controller_period", 1) - config.BindEnvAndSetDefault("runtime_security_config.activity_dump.max_dump_size", 1750) - config.BindEnvAndSetDefault("runtime_security_config.activity_dump.path_merge.enabled", false) - config.BindEnvAndSetDefault("runtime_security_config.activity_dump.traced_cgroups_count", 5) - config.BindEnvAndSetDefault("runtime_security_config.activity_dump.traced_event_types", []string{"exec", "open", "dns"}) - config.BindEnvAndSetDefault("runtime_security_config.activity_dump.cgroup_dump_timeout", 30) - config.BindEnvAndSetDefault("runtime_security_config.activity_dump.rate_limiter", 500) - config.BindEnvAndSetDefault("runtime_security_config.activity_dump.cgroup_wait_list_timeout", 75) - config.BindEnvAndSetDefault("runtime_security_config.activity_dump.cgroup_differentiate_args", true) - config.BindEnvAndSetDefault("runtime_security_config.activity_dump.local_storage.max_dumps_count", 100) - config.BindEnvAndSetDefault("runtime_security_config.activity_dump.local_storage.output_directory", "/tmp/activity_dumps/") - config.BindEnvAndSetDefault("runtime_security_config.activity_dump.local_storage.formats", []string{}) - config.BindEnvAndSetDefault("runtime_security_config.activity_dump.local_storage.compression", true) - config.BindEnvAndSetDefault("runtime_security_config.activity_dump.remote_storage.formats", []string{"protobuf"}) - config.BindEnvAndSetDefault("runtime_security_config.activity_dump.remote_storage.compression", true) - config.BindEnvAndSetDefault("runtime_security_config.activity_dump.syscall_monitor.period", 60) - bindEnvAndSetLogsConfigKeys(config, "runtime_security_config.activity_dump.remote_storage.endpoints.") - config.BindEnvAndSetDefault("runtime_security_config.event_stream.use_ring_buffer", false) - config.BindEnv("runtime_security_config.event_stream.buffer_size") - config.BindEnvAndSetDefault("runtime_security_config.envs_with_value", []string{"LD_PRELOAD", "LD_LIBRARY_PATH", "PATH", "HISTSIZE", "HISTFILESIZE"}) // Serverless Agent config.SetDefault("serverless.enabled", false) @@ -1227,6 +1197,9 @@ func InitConfig(config Config) { bindVectorOptions(config, Metrics) bindVectorOptions(config, Logs) + // Datadog Agent Manager System Tray + config.BindEnvAndSetDefault("system_tray.log_file", "") + setupAPM(config) SetupOTLP(config) setupProcesses(config) @@ -1332,12 +1305,12 @@ func LoadProxyFromEnv(config Config) { // Load reads configs files and initializes the config module func Load() (*Warnings, error) { - return load(Datadog, "datadog.yaml", true) + return LoadDatadogCustom(Datadog, "datadog.yaml", true) } // LoadWithoutSecret reads configs files, initializes the config module without decrypting any secrets func LoadWithoutSecret() (*Warnings, error) { - return load(Datadog, "datadog.yaml", false) + return LoadDatadogCustom(Datadog, "datadog.yaml", false) } func findUnknownKeys(config Config) []string { @@ -1462,9 +1435,8 @@ func checkConflictingOptions(config Config) error { return nil } -func load(config Config, origin string, loadSecret bool) (*Warnings, error) { - warnings := Warnings{} - +// LoadDatadogCustom has several datadog.yaml customizations that other configs may not need with LoadCusto +func LoadDatadogCustom(config Config, origin string, loadSecret bool) (*Warnings, error) { // Feature detection running in a defer func as it always need to run (whether config load has been successful or not) // Because some Agents (e.g. trace-agent) will run even if config file does not exist defer func() { @@ -1474,6 +1446,39 @@ func load(config Config, origin string, loadSecret bool) (*Warnings, error) { applyOverrideFuncs(config) }() + warnings, err := LoadCustom(config, origin, loadSecret) + if err != nil { + return warnings, err + } + + err = checkConflictingOptions(config) + if err != nil { + return warnings, err + } + + // If this variable is set to true, we'll use DefaultPython for the Python version, + // ignoring the python_version configuration value. + if ForceDefaultPython == "true" && config.IsKnown("python_version") { + pv := config.GetString("python_version") + if pv != DefaultPython { + log.Warnf("Python version has been forced to %s", DefaultPython) + } + + AddOverride("python_version", DefaultPython) + } + + LoadProxyFromEnv(config) + SanitizeAPIKeyConfig(config, "api_key") + // setTracemallocEnabled *must* be called before setNumWorkers + warnings.TraceMallocEnabledWithPy2 = setTracemallocEnabled(config) + setNumWorkers(config) + return warnings, setupFipsEndpoints(config) +} + +// LoadCustom reads config into the provided config object +func LoadCustom(config Config, origin string, loadSecret bool) (*Warnings, error) { + warnings := Warnings{} + if err := config.ReadInConfig(); err != nil { if IsServerless() { log.Debug("No config file detected, using environment variable based configuration only") @@ -1510,29 +1515,8 @@ func load(config Config, origin string, loadSecret bool) (*Warnings, error) { log.Warnf("'DD_URL' and 'DD_DD_URL' variables are both set in environment. Using 'DD_DD_URL' value") } - err := checkConflictingOptions(config) - if err != nil { - return &warnings, err - } - - // If this variable is set to true, we'll use DefaultPython for the Python version, - // ignoring the python_version configuration value. - if ForceDefaultPython == "true" { - pv := config.GetString("python_version") - if pv != DefaultPython { - log.Warnf("Python version has been forced to %s", DefaultPython) - } - - AddOverride("python_version", DefaultPython) - } - useHostEtc(config) - LoadProxyFromEnv(config) - SanitizeAPIKeyConfig(config, "api_key") - // setTracemallocEnabled *must* be called before setNumWorkers - warnings.TraceMallocEnabledWithPy2 = setTracemallocEnabled(config) - setNumWorkers(config) - return &warnings, setupFipsEndpoints(config) + return &warnings, nil } // setupFipsEndpoints overwrites the Agent endpoint for outgoing data to be sent to the local FIPS proxy. The local FIPS @@ -1553,6 +1537,8 @@ func setupFipsEndpoints(config Config) error { // port_range_start + 9: network devices snmp traps (unused) // port_range_start + 10: instrumentation telemetry // port_range_start + 11: appsec events (unused) + // port_range_start + 12: orchestrator explorer + // port_range_start + 13: runtime security if !config.GetBool("fips.enabled") { log.Debug("FIPS mode is disabled") @@ -1572,6 +1558,8 @@ func setupFipsEndpoints(config Config) error { networkDevicesSnmpTraps = 9 instrumentationTelemetry = 10 appsecEvents = 11 + orchestratorExplorer = 12 + runtimeSecurity = 13 ) localAddress, err := isLocalAddress(config.GetString("fips.local_address")) @@ -1601,6 +1589,9 @@ func setupFipsEndpoints(config Config) error { // Metrics config.Set("dd_url", protocol+urlFor(metrics)) + // Logs + setupFipsLogsConfig(config, "logs_config.", urlFor(logs)) + // APM config.Set("apm_config.apm_dd_url", protocol+urlFor(traces)) // Adding "/api/v2/profile" because it's not added to the 'apm_config.profiling_dd_url' value by the Agent @@ -1610,14 +1601,6 @@ func setupFipsEndpoints(config Config) error { // Processes config.Set("process_config.process_dd_url", protocol+urlFor(processes)) - // Logs - config.Set("logs_config.use_http", true) - config.Set("logs_config.logs_no_ssl", true) - if config.GetBool("fips.https") { - config.Set("logs_config.logs_no_ssl", false) - } - config.Set("logs_config.logs_dd_url", urlFor(logs)) - // Database monitoring config.Set("database_monitoring.metrics.dd_url", urlFor(databasesMonitoringMetrics)) config.Set("database_monitoring.activity.dd_url", urlFor(databasesMonitoringMetrics)) @@ -1626,9 +1609,21 @@ func setupFipsEndpoints(config Config) error { // Network devices config.Set("network_devices.metadata.dd_url", urlFor(networkDevicesMetadata)) + // Orchestrator Explorer + config.Set("orchestrator_explorer.orchestrator_dd_url", protocol+urlFor(orchestratorExplorer)) + + // CWS + setupFipsLogsConfig(config, "runtime_security_config.endpoints.", urlFor(runtimeSecurity)) + return nil } +func setupFipsLogsConfig(config Config, configPrefix string, url string) { + config.Set(configPrefix+"use_http", true) + config.Set(configPrefix+"logs_no_ssl", !config.GetBool("fips.https")) + config.Set(configPrefix+"logs_dd_url", url) +} + // ResolveSecrets merges all the secret values from origin into config. Secret values // are identified by a value of the form "ENC[key]" where key is the secret key. // See: https://github.com/DataDog/datadog-agent/blob/main/docs/agent/secrets.md @@ -1641,8 +1636,6 @@ func ResolveSecrets(config Config, origin string) error { config.GetInt("secret_backend_timeout"), config.GetInt("secret_backend_output_max_size"), config.GetBool("secret_backend_command_allow_group_exec_perm"), - config.GetString("secret_backend_command_sha256"), - config.ConfigFileUsed(), ) if config.GetString("secret_backend_command") != "" { @@ -1677,11 +1670,18 @@ func EnvVarAreSetAndNotEqual(lhsName string, rhsName string) bool { // SanitizeAPIKeyConfig strips newlines and other control characters from a given key. func SanitizeAPIKeyConfig(config Config, key string) { + if !config.IsKnown(key) { + return + } config.Set(key, SanitizeAPIKey(config.GetString(key))) } // sanitizeExternalMetricsProviderChunkSize ensures the value of `external_metrics_provider.chunk_size` is within an acceptable range func sanitizeExternalMetricsProviderChunkSize(config Config) { + if !config.IsKnown("external_metrics_provider.chunk_size") { + return + } + chunkSize := config.GetInt("external_metrics_provider.chunk_size") if chunkSize <= 0 { log.Warnf("external_metrics_provider.chunk_size cannot be negative: %d", chunkSize) @@ -1930,6 +1930,10 @@ func pathExists(path string) bool { // setTracemallocEnabled is a helper to get the effective tracemalloc // configuration. func setTracemallocEnabled(config Config) bool { + if !config.IsKnown("tracemalloc_debug") { + return false + } + pyVersion := config.GetString("python_version") wTracemalloc := config.GetBool("tracemalloc_debug") traceMallocEnabledWithPy2 := false @@ -1947,6 +1951,10 @@ func setTracemallocEnabled(config Config) bool { // setNumWorkers is a helper to set the effective number of workers for // a given config. func setNumWorkers(config Config) { + if !config.IsKnown("check_runners") { + return + } + wTracemalloc := config.GetBool("tracemalloc_debug") numWorkers := config.GetInt("check_runners") if wTracemalloc { diff --git a/pkg/config/config_change_checker.go b/pkg/config/config_change_checker.go index 074b1ba341af2..69d049a10e07f 100644 --- a/pkg/config/config_change_checker.go +++ b/pkg/config/config_change_checker.go @@ -12,17 +12,17 @@ import ( ) // ChangeChecker checks the state of `config.Datadog` did not change -// between `NewChangeChecker()`` and `HasChanged()`. It is +// between `NewChangeChecker()“ and `HasChanged()`. It is // designed to be used in `TestMain` function as follow: // -// func TestMain(m *testing.M) { -// checker := testutil.NewConfigChangeChecker() -// exit := m.Run() -// if checker.HasChanged() { -// os.Exit(1) -// } -// os.Exit(exit) -// } +// func TestMain(m *testing.M) { +// checker := testutil.NewConfigChangeChecker() +// exit := m.Run() +// if checker.HasChanged() { +// os.Exit(1) +// } +// os.Exit(exit) +// } type ChangeChecker struct { configSettings map[string]interface{} } diff --git a/pkg/config/config_overrides.go b/pkg/config/config_overrides.go index fc28bf6bb875b..4aca127858bea 100644 --- a/pkg/config/config_overrides.go +++ b/pkg/config/config_overrides.go @@ -41,6 +41,8 @@ func applyOverrideFuncs(config Config) { func applyOverrideVars(config Config) { for k, v := range overrideVars { - config.Set(k, v) + if config.IsKnown(k) { + config.Set(k, v) + } } } diff --git a/pkg/config/config_template.yaml b/pkg/config/config_template.yaml index 7a74d1743d1c5..5fd07133403f1 100644 --- a/pkg/config/config_template.yaml +++ b/pkg/config/config_template.yaml @@ -711,17 +711,6 @@ api_key: # # secret_backend_skip_checks: false -## @param secret_backend_command_sha256 - string - optional -## @env DD_SECRET_BACKEND_COMMAND_SHA256 - string - optional -## `secret_backend_command_sha256` is the expected SHA256 of the backend command executable. -## If `secret_backend_command_sha256` is used, the following restrictions are in place: -## - Value specified in the `secret_backend_command` setting must be an absolute path. -## - Permissions for the datadog.yaml config file must disallow write access by unprivileged accounts. -## The agent will refuse to start if the actual SHA256 of 'secret_backend_command' executable is different -## from the one specified by `secret_backend_command_sha256`. -# -# secret_backend_command_sha256: - ## @param snmp_listener - custom object - optional ## Creates and schedules a listener to automatically discover your SNMP devices. ## Discovered devices can then be monitored with the SNMP integration by using @@ -1539,6 +1528,20 @@ api_key: {{ end -}} +{{- if .UniversalServiceMonitoringModule }} + +############################################################# +## System Probe Universal Service monitoring Configuration ## +############################################################# + +# service_monitoring_config: +## @param enabled - boolean - optional - default: false +## Set to true to enable the Universal Service Monitoring Module of the System Probe +# +# enabled: false + +{{ end -}} + {{- if .SecurityModule }} ########################################## @@ -1612,6 +1615,40 @@ api_key: # - HISTSIZE # - HISTFILESIZE + ## @param activity_dump - custom object - optional + ## Activity dump section configures if/how the Agent sends activity dumps to Datadog + # + # activity_dump: + + ## @param enabled - boolean - optional - default: false + ## @env DD_RUNTIME_SECURITY_CONFIG_ACTIVITY_DUMP_ENABLED - boolean - optional - default: false + ## Set to true to activate the security profiles feature. + # + # enabled: false + + ## @param traced_cgroups_count - integer - optional - default: 5 + ## @env DD_RUNTIME_SECURITY_CONFIG_ACTIVITY_DUMP_TRACED_CGROUPS_COUNT - integer - optional - default: 5 + ## Defines the number of concurrent cgroups to be traced. + # + # traced_cgroups_count: 5 + + ## @param cgroup_dump_timeout - integer - optional - default: 30 + ## @env DD_RUNTIME_SECURITY_CONFIG_ACTIVITY_DUMP_CGROUP_DUMP_TIMEOUT - integer - optional - default: 30 + ## Defines the duration of cgroups learning phase in minutes. Minimum value is 10. + # + # cgroup_dump_timeout: 30 + + ## @param network - custom object - optional + ## Network section is used to configure Cloud Workload Security (CWS) network features. + # + # network: + + ## @param enabled - boolean - optional - default: true + ## @env DD_RUNTIME_SECURITY_CONFIG_NETWORK_ENABLED - boolean - optional - default: true + ## Set to true to activate the CWS network detections. + # + # enabled: true + {{ end -}} {{ end -}} @@ -2056,6 +2093,7 @@ api_key: ############################## ## @param autoconf_template_dir - string - optional - default: /datadog/check_configs +## @env DD_AUTOCONF_TEMPLATE_DIR - string - optional - default: /datadog/check_configs ## Directory containing configuration templates for Autoconfig. # # autoconf_template_dir: /datadog/check_configs @@ -2129,6 +2167,7 @@ api_key: # - clusterchecks ## @param autoconfig_exclude_features - list of comma separated strings - optional +## @env DD_AUTOCONFIG_EXCLUDE_FEATURES - list of space separated strings - optional ## Exclude features automatically detected and enabled by environment autodiscovery. ## Supported syntax is a list of `(:)`. Currently only the `name` attribute is supported. ## When no attribute is present, it defaults to `name:` attribute. @@ -2144,6 +2183,7 @@ api_key: # - orchestratorexplorer ## @param autoconfig_include_features - list of comma separated strings - optional +## @env DD_AUTOCONFIG_INCLUDE_FEATURES - list of space separated strings - optional ## Force activation of features (as if they were discovered by environment autodiscovery). # # autoconfig_include_features: @@ -2239,11 +2279,13 @@ api_key: # cloud_foundry_garden: ## @param listen_network - string - optional - default: unix + ## @env DD_CLOUD_FOUNDRY_GARDEN_LISTEN_NETWORK - string - optional - default: unix ## The network on which the garden API is listening. Possible values are `unix` or `tcp` # # listen_network: unix ## @param listen_address - string - optional - default: /var/vcap/data/garden/garden.sock + ## @env DD_CLOUD_FOUNDRY_GARDEN_LISTEN_ADDRESS - string - optional - default: /var/vcap/data/garden/garden.sock ## The address on which the garden API is listening. # # listen_address: /var/vcap/data/garden/garden.sock @@ -2622,12 +2664,15 @@ api_key: # DD_KUBERNETES_POD_ANNOTATIONS_AS_TAGS='{"ANNOTATION_NAME":"tag_key"}' ## @param kubernetes_namespace_labels_as_tags - map - optional +## @env DD_KUBERNETES_NAMESPACE_LABELS_AS_TAGS - json - optional ## The Agent can extract namespace label values and set them as metric tags values associated to a . ## If you prefix your tag name with +, it will only be added to high cardinality metrics. # # kubernetes_namespace_labels_as_tags: # : # : + +# +# DD_KUBERNETES_NAMESPACE_LABELS_AS_TAGS='{"": ""}' ## @param container_env_as_tags - map - optional ## @env DD_CONTAINER_ENV_AS_TAGS - map - optional @@ -2677,11 +2722,13 @@ api_key: # ecs_collect_resource_tags_ec2: false ## @param ecs_resource_tags_replace_colon - boolean - optional - default: false +## @env DD_ECS_RESOURCE_TAGS_REPLACE_COLON - boolean - optional - default: false ## The Agent replaces colon `:` characters in the ECS resource tag keys by underscores `_`. # # ecs_resource_tags_replace_colon: false ## @param ecs_metadata_timeout - integer - optional - default: 500 +## @env DD_ECS_METADATA_TIMEOUT - integer - optional - default: 500 ## Timeout in milliseconds on calls to the AWS ECS metadata endpoints. # # ecs_metadata_timeout: 500 @@ -2872,6 +2919,7 @@ api_key: # kubernetes_kubeconfig_path: "" ## @param kubernetes_apiserver_ca_path - string - optional - default: "" +## @env DD_KUBERNETES_APISERVER_CA_PATH - string - optional - default: "" ## When running in a pod, the Agent automatically uses the pod's service account CA. ## Use this option to keep using the InCluster config but overriding the default CA Path. ## This parameter has no effect if `kubernetes_kubeconfig_path` is set. @@ -2879,6 +2927,7 @@ api_key: # kubernetes_apiserver_ca_path: "" ## @param kubernetes_apiserver_tls_verify - boolean - optional - default: true +## @env DD_KUBERNETES_APISERVER_TLS_VERIFY - boolean - optional - default: true ## When running in a pod, the Agent automatically uses the pod's service account CA. ## Use this option to keep using the InCluster config but deactivating TLS verification (in case APIServer CA is not ServiceAccount CA) ## This parameter has no effect if `kubernetes_kubeconfig_path` is set. @@ -2984,6 +3033,7 @@ api_key: # cluster_name: ## @param disable_cluster_name_tag_key - boolean - optional - default: false +## @env DD_DISABLE_CLUSTER_NAME_TAG_KEY - boolean - optional - default: false ## Disable using the 'cluster_name' tag key to submit orchestrator cluster name tag. ## The Agent will continue sending the cluster name tag with 'kube|ecs_cluster_name' key ## regardless of the value of this parameter. @@ -3060,11 +3110,13 @@ api_key: # # key_file: "" - ## @param env_include - List of strings - optional - default: [] + ## @param env_include - list of strings - optional - default: [] + ## @env DD_CLOUD_FOUNDRY_BBS_ENV_INCLUDE - list of strings - optional ## List of regular expressions to allow a set of environment variables to be included as container tags # # env_include: [] - ## @param env_exclude - List of strings - optional - default: [] + ## @param env_exclude - list of strings - optional - default: [] + ## @env DD_CLOUD_FOUNDRY_BBS_ENV_EXCLUDE - list of strings - optional ## List of regular expressions to forbid a set of environment variables to be included as container tags # # env_exclude: [] @@ -3082,32 +3134,38 @@ api_key: # cloud_foundry_cc: ## @param url - string - optional - default: https://cloud-controller-ng.service.cf.internal:9024 + ## @env DD_CLOUD_FOUNDRY_CC_URL - string - optional - default: https://cloud-controller-ng.service.cf.internal:9024 ## URL of the CC API. # # url: https://cloud-controller-ng.service.cf.internal:9024 ## @param client_id - string - optional + ## @env DD_CLOUD_FOUNDRY_CC_CLIENT_ID ## Client ID for oauth with UAA to get a token to access the CC API. # # client_id: ## @param client_secret - string - optional - ## Client ID for oauth with UAA to get a token to access the CC API. + ## @env DD_CLOUD_FOUNDRY_CC_CLIENT_SECRET + ## Client secrect for oauth with UAA to get a token to access the CC API. # # client_secret: - ## @param skip_ssl_validation - bool - optional - default: false + ## @param skip_ssl_validation - boolean - optional - default: false + ## @env DD_CLOUD_FOUNDRY_CC_SKIP_SSL_VALIDATION ## Whether or not to skip SSL validation when interacting with CC API. # # skip_ssl_validation: false ## @param poll_interval - integer - optional - default: 60 + ## @env DD_CLOUD_FOUNDRY_CC_POLL_INTERVAL ## Refresh rate of CC API, in seconds. Values lower than 10 might influence ## performance of other operations in the cluster. # # poll_interval: 60 ## @param apps_batch_size - integer - optional - default: 5000 + ## @env DD_CLOUD_FOUNDRY_CC_APPS_BATCH_SIZE ## Number of apps per page to collect when calling the list apps endpoint of the CC API. Max 5000. # # apps_batch_size: 5000 @@ -3145,6 +3203,7 @@ api_key: # enabled: false ## @param port - integer - optional - default: 9162 + ## @env DD_SNMP_TRAPS_CONFIG_PORT - integer - optional - default: 9162 ## The UDP port to use when listening for incoming trap packets. ## Because the Datadog Agent does not run as root, the port cannot be below 1024. ## However, if you run `sudo setcap 'cap_net_bind_service=+ep' /opt/datadog-agent/bin/agent/agent`, @@ -3447,3 +3506,18 @@ api_key: # # verbosity: normal {{end -}} +{{- if (eq .OS "windows")}} +##################################################### +## Datadog Agent Manager System Tray Configuration ## +##################################################### + +## @param system_tray - custom object - optional +## This section configures the Datadog Agent Manager System Tray +# +# system_tray: + ## @param log_file - string - optional - default: %ProgramData%\Datadog\logs\ddtray.log + ## @env DD_TRAY_LOG_FILE - string - optional + ## The full path to the file where Datadog Agent Manager System Tray logs are written. + # + # log_file: +{{end -}} diff --git a/pkg/config/config_test.go b/pkg/config/config_test.go index 363f5aeb5d865..86ed5ae3c45ed 100644 --- a/pkg/config/config_test.go +++ b/pkg/config/config_test.go @@ -61,8 +61,9 @@ func TestDefaults(t *testing.T) { // Testing process-agent defaults assert.Equal(t, map[string]interface{}{ - "enabled": true, - "interval": 4 * time.Hour, + "enabled": true, + "hint_frequency": 60, + "interval": 4 * time.Hour, }, config.GetStringMap("process_config.process_discovery")) } @@ -906,7 +907,7 @@ func TestSecretBackendWithMultipleEndpoints(t *testing.T) { conf := setupConf() conf.SetConfigFile("./tests/datadog_secrets.yaml") // load the configuration - _, err := load(conf, "datadog_secrets.yaml", true) + _, err := LoadDatadogCustom(conf, "datadog_secrets.yaml", true) assert.NoError(t, err) expectedKeysPerDomain := map[string][]string{ @@ -1159,6 +1160,13 @@ network_devices: metadata: dd_url: somehost:1234 +orchestrator_explorer: + orchestrator_dd_url: https://somehost:1234 + +runtime_security_config: + endpoints: + logs_dd_url: somehost:1234 + proxy: http: http://localhost:1234 https: https://localhost:1234 @@ -1173,6 +1181,8 @@ proxy: assertFipsProxyExpectedConfig(t, expectedHTTPURL, expectedURL, false, testConfig) assert.Equal(t, false, testConfig.GetBool("logs_config.use_http")) assert.Equal(t, false, testConfig.GetBool("logs_config.logs_no_ssl")) + assert.Equal(t, false, testConfig.GetBool("runtime_security_config.endpoints.use_http")) + assert.Equal(t, false, testConfig.GetBool("runtime_security_config.endpoints.logs_no_ssl")) assert.NotNil(t, GetProxies()) // reseting proxies proxies = nil @@ -1195,6 +1205,8 @@ fips: assertFipsProxyExpectedConfig(t, expectedHTTPURL, expectedURL, true, testConfig) assert.Equal(t, true, testConfig.GetBool("logs_config.use_http")) assert.Equal(t, true, testConfig.GetBool("logs_config.logs_no_ssl")) + assert.Equal(t, true, testConfig.GetBool("runtime_security_config.endpoints.use_http")) + assert.Equal(t, true, testConfig.GetBool("runtime_security_config.endpoints.logs_no_ssl")) assert.Nil(t, GetProxies()) datadogYamlFips = datadogYaml + ` @@ -1216,6 +1228,8 @@ fips: assertFipsProxyExpectedConfig(t, expectedHTTPURL, expectedURL, true, testConfig) assert.Equal(t, true, testConfig.GetBool("logs_config.use_http")) assert.Equal(t, false, testConfig.GetBool("logs_config.logs_no_ssl")) + assert.Equal(t, true, testConfig.GetBool("runtime_security_config.endpoints.use_http")) + assert.Equal(t, false, testConfig.GetBool("runtime_security_config.endpoints.logs_no_ssl")) assert.Equal(t, true, testConfig.GetBool("skip_ssl_validation")) assert.Nil(t, GetProxies()) @@ -1241,6 +1255,9 @@ func assertFipsProxyExpectedConfig(t *testing.T, expectedBaseHTTPURL, expectedBa assert.Equal(t, expectedBaseURL+"06", c.GetString("database_monitoring.activity.dd_url")) assert.Equal(t, expectedBaseURL+"07", c.GetString("database_monitoring.samples.dd_url")) assert.Equal(t, expectedBaseURL+"08", c.GetString("network_devices.metadata.dd_url")) + assert.Equal(t, expectedBaseHTTPURL+"12", c.GetString("orchestrator_explorer.orchestrator_dd_url")) + assert.Equal(t, expectedBaseURL+"13", c.GetString("runtime_security_config.endpoints.logs_dd_url")) + } else { assert.Equal(t, expectedBaseHTTPURL, c.GetString("dd_url")) assert.Equal(t, expectedBaseHTTPURL, c.GetString("apm_config.apm_dd_url")) @@ -1252,6 +1269,8 @@ func assertFipsProxyExpectedConfig(t *testing.T, expectedBaseHTTPURL, expectedBa assert.Equal(t, expectedBaseURL, c.GetString("database_monitoring.activity.dd_url")) assert.Equal(t, expectedBaseURL, c.GetString("database_monitoring.samples.dd_url")) assert.Equal(t, expectedBaseURL, c.GetString("network_devices.metadata.dd_url")) + assert.Equal(t, expectedBaseHTTPURL, c.GetString("orchestrator_explorer.orchestrator_dd_url")) + assert.Equal(t, expectedBaseURL, c.GetString("runtime_security_config.endpoints.logs_dd_url")) } } diff --git a/pkg/config/environment.go b/pkg/config/environment.go index 59ce13c20425c..944f13dba6930 100644 --- a/pkg/config/environment.go +++ b/pkg/config/environment.go @@ -44,6 +44,20 @@ func IsKubernetes() bool { return false } +func IsECS() bool { + if os.Getenv("AWS_EXECUTION_ENV") == "AWS_ECS_EC2" { + return true + } + + if IsECSFargate() { + return false + } + + return os.Getenv("AWS_CONTAINER_CREDENTIALS_RELATIVE_URI") != "" || + os.Getenv("ECS_CONTAINER_METADATA_URI") != "" || + os.Getenv("ECS_CONTAINER_METADATA_URI_V4") != "" +} + // IsECSFargate returns whether the Agent is running in ECS Fargate func IsECSFargate() bool { return os.Getenv("ECS_FARGATE") != "" || os.Getenv("AWS_EXECUTION_ENV") == "AWS_ECS_FARGATE" diff --git a/pkg/config/environment_container_features.go b/pkg/config/environment_container_features.go index bff6fae36206d..e4cb7c5d1d284 100644 --- a/pkg/config/environment_container_features.go +++ b/pkg/config/environment_container_features.go @@ -15,6 +15,8 @@ const ( Cri Feature = "cri" // Kubernetes environment Kubernetes Feature = "kubernetes" + // ECSEC2 environment + ECSEC2 Feature = "ecsec2" // ECSFargate environment ECSFargate Feature = "ecsfargate" // EKSFargate environment diff --git a/pkg/config/environment_containers.go b/pkg/config/environment_containers.go index 4219aee2a333f..508b5d3a05b7c 100644 --- a/pkg/config/environment_containers.go +++ b/pkg/config/environment_containers.go @@ -38,6 +38,7 @@ func init() { registerFeature(Containerd) registerFeature(Cri) registerFeature(Kubernetes) + registerFeature(ECSEC2) registerFeature(ECSFargate) registerFeature(EKSFargate) registerFeature(KubeOrchestratorExplorer) @@ -51,6 +52,7 @@ func IsAnyContainerFeaturePresent() bool { IsFeaturePresent(Containerd) || IsFeaturePresent(Cri) || IsFeaturePresent(Kubernetes) || + IsFeaturePresent(ECSEC2) || IsFeaturePresent(ECSFargate) || IsFeaturePresent(EKSFargate) || IsFeaturePresent(CloudFoundry) || @@ -61,7 +63,7 @@ func detectContainerFeatures(features FeatureMap) { detectKubernetes(features) detectDocker(features) detectContainerd(features) - detectFargate(features) + detectAWSEnvironments(features) detectCloudFoundry(features) detectPodman(features) } @@ -155,7 +157,7 @@ func isCriSupported() bool { return IsKubernetes() } -func detectFargate(features FeatureMap) { +func detectAWSEnvironments(features FeatureMap) { if IsECSFargate() { features[ECSFargate] = struct{}{} return @@ -164,6 +166,11 @@ func detectFargate(features FeatureMap) { if Datadog.GetBool("eks_fargate") { features[EKSFargate] = struct{}{} features[Kubernetes] = struct{}{} + return + } + + if IsECS() { + features[ECSEC2] = struct{}{} } } diff --git a/pkg/config/environment_detection.go b/pkg/config/environment_detection.go index c17b32cd77177..027aea8e7dccc 100644 --- a/pkg/config/environment_detection.go +++ b/pkg/config/environment_detection.go @@ -114,7 +114,7 @@ func DetectFeatures() { } } - log.Infof("Features detected from environment: %v", newFeatures) + log.Infof("%d Features detected from environment: %v", len(newFeatures), newFeatures) } else { log.Warnf("Deactivating Autoconfig will disable most components. It's recommended to use autoconfig_exclude_features and autoconfig_include_features to activate/deactivate features selectively") } diff --git a/pkg/config/log_nix.go b/pkg/config/log_nix.go index bf2cae278590f..c1dd173f47fb5 100644 --- a/pkg/config/log_nix.go +++ b/pkg/config/log_nix.go @@ -11,8 +11,13 @@ package config // GetSyslogURI returns the configured/default syslog uri. // Returns an empty string when syslog is disabled. func GetSyslogURI() string { - enabled := Datadog.GetBool("log_to_syslog") - uri := Datadog.GetString("syslog_uri") + return GetSyslogURIFromConfig(Datadog) +} + +// GetSyslogURIFromConfig is like GetSyslogURI but reads from the provided config +func GetSyslogURIFromConfig(cfg Config) string { + enabled := cfg.GetBool("log_to_syslog") + uri := cfg.GetString("syslog_uri") if !enabled { return "" diff --git a/pkg/config/log_windows.go b/pkg/config/log_windows.go index c1a477add893c..6c0789d98bba9 100644 --- a/pkg/config/log_windows.go +++ b/pkg/config/log_windows.go @@ -11,7 +11,12 @@ import ( // GetSyslogURI returns the configured/default syslog uri func GetSyslogURI() string { - enabled := Datadog.GetBool("log_to_syslog") + return GetSyslogURIFromConfig(Datadog) +} + +// GetSyslogURIFromConfig is like GetSyslogURI but reads from the provided config +func GetSyslogURIFromConfig(cfg Config) string { + enabled := cfg.GetBool("log_to_syslog") if enabled { log.Infof("logging to syslog is not available on windows.") diff --git a/pkg/config/mock.go b/pkg/config/mock.go index 6e4450dfab6f0..ee69fc6b59432 100644 --- a/pkg/config/mock.go +++ b/pkg/config/mock.go @@ -12,8 +12,9 @@ import ( ) var ( - isConfigMocked = false - m = sync.Mutex{} + isConfigMocked = false + isSystemProbeConfigMocked = false + m = sync.Mutex{} ) // MockConfig should only be used in tests @@ -55,3 +56,33 @@ func Mock(t *testing.T) *MockConfig { InitConfig(Datadog) return &MockConfig{Datadog} } + +// MockSystemProbe is creating and returning a mock system-probe config +func MockSystemProbe(t *testing.T) *MockConfig { + // We only check isConfigMocked when registering a cleanup function. 'isConfigMocked' avoids nested calls to + // Mock to reset the config to a blank state. This way we have only one mock per test and test helpers can call + // Mock. + if t != nil { + m.Lock() + defer m.Unlock() + if isSystemProbeConfigMocked { + // The configuration is already mocked. + return &MockConfig{SystemProbe} + } + + isSystemProbeConfigMocked = true + originalConfig := SystemProbe + t.Cleanup(func() { + m.Lock() + defer m.Unlock() + isSystemProbeConfigMocked = false + SystemProbe = originalConfig + }) + } + + // Configure Datadog global configuration + SystemProbe = NewConfig("system-probe", "DD", strings.NewReplacer(".", "_")) + // Configuration defaults + InitSystemProbeConfig(SystemProbe) + return &MockConfig{SystemProbe} +} diff --git a/pkg/config/process.go b/pkg/config/process.go index 725e3246e183f..c3260159dfa78 100644 --- a/pkg/config/process.go +++ b/pkg/config/process.go @@ -67,6 +67,9 @@ const ( // DefaultProcessEventsCheckInterval is the default interval used by the process_events check DefaultProcessEventsCheckInterval = 10 * time.Second + + // DefaultProcessDiscoveryHintFrequency is the default frequency in terms of number of checks which we send a process discovery hint + DefaultProcessDiscoveryHintFrequency = 60 ) // setupProcesses is meant to be called multiple times for different configs, but overrides apply to all configs, so @@ -176,6 +179,8 @@ func setupProcesses(config Config) { ) procBindEnvAndSetDefault(config, "process_config.process_discovery.interval", 4*time.Hour) + procBindEnvAndSetDefault(config, "process_config.process_discovery.hint_frequency", DefaultProcessDiscoveryHintFrequency) + procBindEnvAndSetDefault(config, "process_config.drop_check_payloads", []string{}) // Process Lifecycle Events diff --git a/pkg/config/remote/client.go b/pkg/config/remote/client.go index 9fee5137919df..af2f3797c7032 100644 --- a/pkg/config/remote/client.go +++ b/pkg/config/remote/client.go @@ -14,6 +14,7 @@ import ( "time" "github.com/pkg/errors" + "google.golang.org/grpc" "google.golang.org/grpc/metadata" "github.com/DataDog/datadog-agent/pkg/api/security" @@ -22,7 +23,10 @@ import ( "github.com/DataDog/datadog-agent/pkg/proto/pbgo" "github.com/DataDog/datadog-agent/pkg/remoteconfig/state" "github.com/DataDog/datadog-agent/pkg/util/backoff" - "github.com/DataDog/datadog-agent/pkg/util/grpc" + "github.com/DataDog/datadog-agent/pkg/util/flavor" + ddgrpc "github.com/DataDog/datadog-agent/pkg/util/grpc" + "github.com/DataDog/datadog-agent/pkg/util/hostname" + "github.com/DataDog/datadog-agent/pkg/util/kubernetes/clustername" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -31,6 +35,8 @@ const ( maximalMaxBackoffTime = 90 * time.Second minBackoffFactor = 2.0 recoveryInterval = 2 + + maxMessageSize = 1024 * 1024 * 110 // 110MB, current backend limit ) // ConfigUpdater defines the interface that an agent client uses to get config updates @@ -53,6 +59,8 @@ type Client struct { agentVersion string products []string + clusterName string + pollInterval time.Duration lastUpdateError error backoffPolicy backoff.Policy @@ -63,9 +71,10 @@ type Client struct { state *state.Repository // Listeners - apmListeners []func(update map[string]state.APMSamplingConfig) - cwsListeners []func(update map[string]state.ConfigCWSDD) - cwsCustomListeners []func(update map[string]state.ConfigCWSCustom) + apmListeners []func(update map[string]state.APMSamplingConfig) + cwsListeners []func(update map[string]state.ConfigCWSDD) + cwsCustomListeners []func(update map[string]state.ConfigCWSCustom) + apmTracingListeners []func(update map[string]state.APMTracingConfig) } // agentGRPCConfigFetcher defines how to retrieve config updates over a @@ -74,8 +83,11 @@ type agentGRPCConfigFetcher struct { client pbgo.AgentSecureClient } -func newAgentGRPCConfigFetcher() (*agentGRPCConfigFetcher, error) { - c, err := grpc.GetDDAgentSecureClient(context.Background()) +// NewAgentGRPCConfigFetcher returns a gRPC config fetcher using the secure agent client +func NewAgentGRPCConfigFetcher() (*agentGRPCConfigFetcher, error) { + c, err := ddgrpc.GetDDAgentSecureClient(context.Background(), grpc.WithDefaultCallOptions( + grpc.MaxCallRecvMsgSize(maxMessageSize), + )) if err != nil { return nil, err } @@ -110,7 +122,7 @@ func NewClient(agentName string, updater ConfigUpdater, agentVersion string, pro // NewGRPCClient creates a new client that retrieves updates over the datadog-agent's secure GRPC client func NewGRPCClient(agentName string, agentVersion string, products []data.Product, pollInterval time.Duration) (*Client, error) { - grpcClient, err := newAgentGRPCConfigFetcher() + grpcClient, err := NewAgentGRPCConfigFetcher() if err != nil { return nil, err } @@ -120,7 +132,7 @@ func NewGRPCClient(agentName string, agentVersion string, products []data.Produc // NewUnverifiedClient creates a new client that does not perform any TUF verification func NewUnverifiedClient(agentName string, agentVersion string, products []data.Product, pollInterval time.Duration) (*Client, error) { - grpcClient, err := newAgentGRPCConfigFetcher() + grpcClient, err := NewAgentGRPCConfigFetcher() if err != nil { return nil, err } @@ -151,23 +163,37 @@ func newClient(agentName string, updater ConfigUpdater, doTufVerification bool, backoffPolicy := backoff.NewPolicy(minBackoffFactor, pollInterval.Seconds(), maximalMaxBackoffTime.Seconds(), recoveryInterval, false) + // If we're the cluster agent, we want to report our cluster name and cluster ID in order to allow products + // relying on remote config to identify this RC client to be able to write predicates for config routing + clusterName := "" + if flavor.GetFlavor() == flavor.ClusterAgent { + hname, err := hostname.Get(context.TODO()) + if err != nil { + log.Warnf("Error while getting hostname, needed for retrieving cluster-name: cluster-name won't be set for remote-config") + } else { + clusterName = clustername.GetClusterName(context.TODO(), hname) + } + } + ctx, close := context.WithCancel(context.Background()) return &Client{ - ID: generateID(), - startupSync: sync.Once{}, - ctx: ctx, - close: close, - agentName: agentName, - agentVersion: agentVersion, - products: data.ProductListToString(products), - state: repository, - pollInterval: pollInterval, - backoffPolicy: backoffPolicy, - apmListeners: make([]func(update map[string]state.APMSamplingConfig), 0), - cwsListeners: make([]func(update map[string]state.ConfigCWSDD), 0), - cwsCustomListeners: make([]func(update map[string]state.ConfigCWSCustom), 0), - updater: updater, + ID: generateID(), + startupSync: sync.Once{}, + ctx: ctx, + close: close, + agentName: agentName, + agentVersion: agentVersion, + clusterName: clusterName, + products: data.ProductListToString(products), + state: repository, + pollInterval: pollInterval, + backoffPolicy: backoffPolicy, + apmListeners: make([]func(update map[string]state.APMSamplingConfig), 0), + cwsListeners: make([]func(update map[string]state.ConfigCWSDD), 0), + cwsCustomListeners: make([]func(update map[string]state.ConfigCWSCustom), 0), + apmTracingListeners: make([]func(update map[string]state.APMTracingConfig), 0), + updater: updater, }, nil } @@ -258,6 +284,11 @@ func (c *Client) update() error { listener(c.state.CWSCustomConfigs()) } } + if containsProduct(changedProducts, state.ProductAPMTracing) { + for _, listener := range c.apmTracingListeners { + listener(c.state.APMTracingConfigs()) + } + } return nil } @@ -299,6 +330,22 @@ func (c *Client) RegisterCWSCustomUpdate(fn func(update map[string]state.ConfigC fn(c.state.CWSCustomConfigs()) } +// RegisterAPMTracing registers a callback function to be called after a successful client update that will +// contain the current state of the APMTracing product. +func (c *Client) RegisterAPMTracing(fn func(update map[string]state.APMTracingConfig)) { + c.m.Lock() + defer c.m.Unlock() + c.apmTracingListeners = append(c.apmTracingListeners, fn) + fn(c.state.APMTracingConfigs()) +} + +// APMTracingConfigs returns the current set of valid APM Tracing configs +func (c *Client) APMTracingConfigs() map[string]state.APMTracingConfig { + c.m.Lock() + defer c.m.Unlock() + return c.state.APMTracingConfigs() +} + func (c *Client) applyUpdate(pbUpdate *pbgo.ClientGetConfigsResponse) ([]string, error) { fileMap := make(map[string][]byte, len(pbUpdate.TargetFiles)) for _, f := range pbUpdate.TargetFiles { @@ -369,8 +416,9 @@ func (c *Client) newUpdateRequest() (*pbgo.ClientGetConfigsRequest, error) { IsAgent: true, IsTracer: false, ClientAgent: &pbgo.ClientAgent{ - Name: c.agentName, - Version: c.agentVersion, + Name: c.agentName, + Version: c.agentVersion, + ClusterName: c.clusterName, }, }, CachedTargetFiles: pbCachedFiles, diff --git a/pkg/config/remote/data/product.go b/pkg/config/remote/data/product.go index cf66b3bb9e833..3810629ca91b3 100644 --- a/pkg/config/remote/data/product.go +++ b/pkg/config/remote/data/product.go @@ -15,6 +15,8 @@ const ( ProductCWSDD Product = "CWS_DD" // ProductCWSCustom is the cloud workload security product ProductCWSCustom Product = "CWS_CUSTOM" + // ProductAPMTracing is the apm tracing product + ProductAPMTracing Product = "APM_TRACING" // ProductTesting1 is a testing product ProductTesting1 Product = "TESTING1" ) diff --git a/pkg/config/remote/service/service.go b/pkg/config/remote/service/service.go index 800254d8e70f2..61809860b09b8 100644 --- a/pkg/config/remote/service/service.go +++ b/pkg/config/remote/service/service.go @@ -84,6 +84,7 @@ type uptaneClient interface { Update(response *pbgo.LatestConfigsResponse) error State() (uptane.State, error) DirectorRoot(version uint64) ([]byte, error) + StoredOrgUUID() (string, error) Targets() (data.TargetFiles, error) TargetFile(path string) ([]byte, error) TargetsMeta() ([]byte, error) @@ -267,7 +268,12 @@ func (s *Service) refresh() error { if err != nil { log.Warnf("could not get previous backend client state: %v", err) } - request := buildLatestConfigsRequest(s.hostname, s.traceAgentEnv, previousState, activeClients, s.products, s.newProducts, s.lastUpdateErr, clientState) + orgUUID, err := s.uptane.StoredOrgUUID() + if err != nil { + return err + } + + request := buildLatestConfigsRequest(s.hostname, s.traceAgentEnv, orgUUID, previousState, activeClients, s.products, s.newProducts, s.lastUpdateErr, clientState) s.Unlock() ctx := context.Background() response, err := s.api.Fetch(ctx, request) @@ -362,15 +368,35 @@ func (s *Service) ClientGetConfigs(ctx context.Context, request *pbgo.ClientGetC } if !s.clients.active(request.Client) { + // Trigger a bypass to directly get configurations from the agent. + // This will timeout to avoid blocking the tracer if: + // - The previous request is still pending + // - The triggered request takes too long + s.clients.seen(request.Client) s.Unlock() + response := make(chan struct{}) - s.newActiveClients.requests <- response + bypassStart := time.Now() + + // Timeout in case the previous request is still pending + // and we can't request another one select { - case <-response: + case s.newActiveClients.requests <- response: case <-time.After(newClientBlockTTL): + // No need to add telemetry here, it'll be done in the second + // timeout case that will automatically be triggered + } + + partialNewClientBlockTTL := newClientBlockTTL - time.Since(bypassStart) + + // Timeout if the response is taking too long + select { + case <-response: + case <-time.After(partialNewClientBlockTTL): telemetry.CacheBypassTimeout.Inc() } + s.Lock() } diff --git a/pkg/config/remote/service/service_test.go b/pkg/config/remote/service/service_test.go index e4112b23f39c0..2687036c26679 100644 --- a/pkg/config/remote/service/service_test.go +++ b/pkg/config/remote/service/service_test.go @@ -66,6 +66,11 @@ func (m *mockUptane) DirectorRoot(version uint64) ([]byte, error) { return args.Get(0).([]byte), args.Error(1) } +func (m *mockUptane) StoredOrgUUID() (string, error) { + args := m.Called() + return args.Get(0).(string), args.Error(1) +} + func (m *mockUptane) Targets() (data.TargetFiles, error) { args := m.Called() return args.Get(0).(data.TargetFiles), args.Error(1) @@ -133,7 +138,9 @@ func TestServiceBackoffFailure(t *testing.T) { CurrentDirectorRootVersion: 0, Products: []string{}, NewProducts: []string{}, + OrgUuid: "abcdef", }).Return(lastConfigResponse, errors.New("simulated HTTP error")) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TUFVersionState").Return(uptane.TUFVersions{}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) uptaneClient.On("TargetsCustom").Return([]byte{}, nil) @@ -158,7 +165,9 @@ func TestServiceBackoffFailure(t *testing.T) { NewProducts: []string{}, HasError: true, Error: httpError, + OrgUuid: "abcdef", }).Return(lastConfigResponse, errors.New("simulated HTTP error")) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TUFVersionState").Return(uptane.TUFVersions{}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) uptaneClient.On("TargetsCustom").Return([]byte{}, nil) @@ -208,7 +217,9 @@ func TestServiceBackoffFailureRecovery(t *testing.T) { CurrentDirectorRootVersion: 0, Products: []string{}, NewProducts: []string{}, + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TUFVersionState").Return(uptane.TUFVersions{}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) uptaneClient.On("TargetsCustom").Return([]byte{}, nil) @@ -334,7 +345,9 @@ func TestService(t *testing.T) { CurrentDirectorRootVersion: 0, Products: []string{}, NewProducts: []string{}, + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TUFVersionState").Return(uptane.TUFVersions{}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) uptaneClient.On("TargetsCustom").Return([]byte{}, nil) @@ -368,6 +381,7 @@ func TestService(t *testing.T) { } fileAPM1 := []byte(`testapm1`) fileAPM2 := []byte(`testapm2`) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TargetsMeta").Return(targets, nil) uptaneClient.On("TargetsCustom").Return(testTargetsCustom, nil) @@ -417,6 +431,7 @@ func TestService(t *testing.T) { BackendClientState: []byte(`test_state`), HasError: false, Error: "", + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) service.clients.seen(client) // Avoid blocking on channel sending when nothing is at the other end @@ -476,6 +491,7 @@ func TestServiceClientPredicates(t *testing.T) { AppVersion: "1", }, } + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TargetsMeta").Return([]byte(`{"signed": "testtargets"}`), nil) uptaneClient.On("TargetsCustom").Return([]byte(`{"opaque_backend_state":"dGVzdF9zdGF0ZQ=="}`), nil) @@ -523,6 +539,7 @@ func TestServiceClientPredicates(t *testing.T) { BackendClientState: []byte(`test_state`), HasError: false, Error: "", + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) service.clients.seen(client) // Avoid blocking on channel sending when nothing is at the other end @@ -561,10 +578,12 @@ func TestServiceGetRefreshIntervalNone(t *testing.T) { Products: []string{}, NewProducts: []string{}, BackendClientState: []byte("test_state"), + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) // No explicit refresh interval is provided by the backend testTargetsCustomNoOverride := []byte(`{"opaque_backend_state":"dGVzdF9zdGF0ZQ=="}`) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TUFVersionState").Return(uptane.TUFVersions{}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) uptaneClient.On("TargetsCustom").Return(testTargetsCustomNoOverride, nil) @@ -596,10 +615,12 @@ func TestServiceGetRefreshIntervalValid(t *testing.T) { Products: []string{}, NewProducts: []string{}, BackendClientState: []byte("test_state"), + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) // An acceptable refresh interval is provided by the backend testTargetsCustomOk := []byte(`{"opaque_backend_state":"dGVzdF9zdGF0ZQ==", "agent_refresh_interval": 42}`) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TUFVersionState").Return(uptane.TUFVersions{}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) uptaneClient.On("TargetsCustom").Return(testTargetsCustomOk, nil) @@ -631,10 +652,12 @@ func TestServiceGetRefreshIntervalTooSmall(t *testing.T) { Products: []string{}, NewProducts: []string{}, BackendClientState: []byte("test_state"), + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) // A too small refresh interval is provided by the backend (the refresh interval should not change) testTargetsCustomOverrideOutOfRangeSmall := []byte(`{"opaque_backend_state":"dGVzdF9zdGF0ZQ==", "agent_refresh_interval": -1}`) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TUFVersionState").Return(uptane.TUFVersions{}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) uptaneClient.On("TargetsCustom").Return(testTargetsCustomOverrideOutOfRangeSmall, nil) @@ -666,10 +689,12 @@ func TestServiceGetRefreshIntervalTooBig(t *testing.T) { Products: []string{}, NewProducts: []string{}, BackendClientState: []byte("test_state"), + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) // A too large refresh interval is provided by the backend (the refresh interval should not change) testTargetsCustomOverrideOutOfRangeBig := []byte(`{"opaque_backend_state":"dGVzdF9zdGF0ZQ==", "agent_refresh_interval": 500}`) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TUFVersionState").Return(uptane.TUFVersions{}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) uptaneClient.On("TargetsCustom").Return(testTargetsCustomOverrideOutOfRangeBig, nil) @@ -704,10 +729,12 @@ func TestServiceGetRefreshIntervalNoOverrideAllowed(t *testing.T) { Products: []string{}, NewProducts: []string{}, BackendClientState: []byte("test_state"), + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) // An interval is provided, but it should not be applied testTargetsCustomOk := []byte(`{"opaque_backend_state":"dGVzdF9zdGF0ZQ==", "agent_refresh_interval": 42}`) + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TUFVersionState").Return(uptane.TUFVersions{}, nil) uptaneClient.On("Update", lastConfigResponse).Return(nil) uptaneClient.On("TargetsCustom").Return(testTargetsCustomOk, nil) @@ -752,6 +779,7 @@ func TestConfigExpiration(t *testing.T) { AppVersion: "1", }, } + uptaneClient.On("StoredOrgUUID").Return("abcdef", nil) uptaneClient.On("TargetsMeta").Return([]byte(`{"signed": "testtargets"}`), nil) uptaneClient.On("TargetsCustom").Return([]byte(`{"opaque_backend_state":"dGVzdF9zdGF0ZQ=="}`), nil) uptaneClient.On("Targets").Return(data.TargetFiles{ @@ -783,6 +811,7 @@ func TestConfigExpiration(t *testing.T) { BackendClientState: []byte(`test_state`), HasError: false, Error: "", + OrgUuid: "abcdef", }).Return(lastConfigResponse, nil) service.clients.seen(client) // Avoid blocking on channel sending when nothing is at the other end diff --git a/pkg/config/remote/service/util.go b/pkg/config/remote/service/util.go index d3c30681e13ad..8aa465c109b28 100644 --- a/pkg/config/remote/service/util.go +++ b/pkg/config/remote/service/util.go @@ -154,7 +154,7 @@ func getRemoteConfigAuthKeys(apiKey string, rcKey string) (remoteConfigAuthKeys, }, nil } -func buildLatestConfigsRequest(hostname string, traceAgentEnv string, state uptane.TUFVersions, activeClients []*pbgo.Client, products map[data.Product]struct{}, newProducts map[data.Product]struct{}, lastUpdateErr error, clientState []byte) *pbgo.LatestConfigsRequest { +func buildLatestConfigsRequest(hostname string, traceAgentEnv string, orgUUID string, state uptane.TUFVersions, activeClients []*pbgo.Client, products map[data.Product]struct{}, newProducts map[data.Product]struct{}, lastUpdateErr error, clientState []byte) *pbgo.LatestConfigsRequest { productsList := make([]data.Product, len(products)) i := 0 for k := range products { @@ -185,6 +185,7 @@ func buildLatestConfigsRequest(hostname string, traceAgentEnv string, state upta HasError: lastUpdateErr != nil, Error: lastUpdateErrString, TraceAgentEnv: traceAgentEnv, + OrgUuid: orgUUID, } } diff --git a/pkg/config/remote/uptane/client.go b/pkg/config/remote/uptane/client.go index 62f82777ccf6f..e28740906d596 100644 --- a/pkg/config/remote/uptane/client.go +++ b/pkg/config/remote/uptane/client.go @@ -249,7 +249,8 @@ func (c *Client) verify() error { return nil } -func (c *Client) storedOrgUUID() (string, error) { +// StoredOrgUUID returns the org UUID given by the backend +func (c *Client) StoredOrgUUID() (string, error) { // This is an important block of code : to avoid being locked out // of the agent in case of a wrong uuid being stored, we link an // org UUID storage to a root version. What this means in practice @@ -289,7 +290,7 @@ func (c *Client) verifyOrg() error { // we can remove the orgUUID from the snapshot and they'll work // again. This being said, this is last resort. if custom.OrgUUID != nil { - orgUUID, err := c.storedOrgUUID() + orgUUID, err := c.StoredOrgUUID() if err != nil { return fmt.Errorf("could not obtain stored/remote orgUUID: %v", err) } diff --git a/pkg/config/render_config.go b/pkg/config/render_config.go index c115ce4382b7e..c2ab9d1f9c11f 100644 --- a/pkg/config/render_config.go +++ b/pkg/config/render_config.go @@ -19,41 +19,42 @@ import ( // context contains the context used to render the config file template type context struct { - OS string - Common bool - Agent bool - Python bool // Sub-option of Agent - BothPythonPresent bool // Sub-option of Agent - Python - Metadata bool - InternalProfiling bool - Dogstatsd bool - LogsAgent bool - JMX bool - Autoconfig bool - Logging bool - Autodiscovery bool - DockerTagging bool - Kubelet bool - KubernetesTagging bool - ECS bool - Containerd bool - CRI bool - ProcessAgent bool - SystemProbe bool - KubeApiServer bool - TraceAgent bool - ClusterAgent bool - ClusterChecks bool - AdmissionController bool - CloudFoundryBBS bool - CloudFoundryCC bool - Compliance bool - SNMP bool - SecurityModule bool - SecurityAgent bool - NetworkModule bool // Sub-module of System Probe - PrometheusScrape bool - OTLP bool + OS string + Common bool + Agent bool + Python bool // Sub-option of Agent + BothPythonPresent bool // Sub-option of Agent - Python + Metadata bool + InternalProfiling bool + Dogstatsd bool + LogsAgent bool + JMX bool + Autoconfig bool + Logging bool + Autodiscovery bool + DockerTagging bool + Kubelet bool + KubernetesTagging bool + ECS bool + Containerd bool + CRI bool + ProcessAgent bool + SystemProbe bool + KubeApiServer bool + TraceAgent bool + ClusterAgent bool + ClusterChecks bool + AdmissionController bool + CloudFoundryBBS bool + CloudFoundryCC bool + Compliance bool + SNMP bool + SecurityModule bool + SecurityAgent bool + NetworkModule bool // Sub-module of System Probe + UniversalServiceMonitoringModule bool // Sub-module of System Probe + PrometheusScrape bool + OTLP bool } func mkContext(buildType string) context { @@ -104,9 +105,10 @@ func mkContext(buildType string) context { } case "system-probe": return context{ - SystemProbe: true, - NetworkModule: true, - SecurityModule: true, + SystemProbe: true, + NetworkModule: true, + UniversalServiceMonitoringModule: true, + SecurityModule: true, } case "dogstatsd": return context{ diff --git a/pkg/config/settings/http/server.go b/pkg/config/settings/http/server.go index e7299b9b333cf..be78bf3f22b17 100644 --- a/pkg/config/settings/http/server.go +++ b/pkg/config/settings/http/server.go @@ -21,18 +21,26 @@ import ( // Server offers functions that implement the standard runtime settings HTTP API var Server = struct { - GetFull func(...string) http.HandlerFunc - GetValue http.HandlerFunc - SetValue http.HandlerFunc - ListConfigurable http.HandlerFunc + GetFullDatadogConfig func(...string) http.HandlerFunc + GetFullSystemProbeConfig func(...string) http.HandlerFunc + GetValue http.HandlerFunc + SetValue http.HandlerFunc + ListConfigurable http.HandlerFunc }{ - GetFull: getFullConfig, - GetValue: getConfigValue, - SetValue: setConfigValue, - ListConfigurable: listConfigurableSettings, + GetFullDatadogConfig: getGlobalFullConfig(ddconfig.Datadog), + GetFullSystemProbeConfig: getGlobalFullConfig(ddconfig.SystemProbe), + GetValue: getConfigValue, + SetValue: setConfigValue, + ListConfigurable: listConfigurableSettings, } -func getFullConfig(namespaces ...string) http.HandlerFunc { +func getGlobalFullConfig(cfg ddconfig.Config) func(...string) http.HandlerFunc { + return func(namespaces ...string) http.HandlerFunc { + return getFullConfig(cfg, namespaces...) + } +} + +func getFullConfig(cfg ddconfig.Config, namespaces ...string) http.HandlerFunc { requiresUniqueNs := len(namespaces) == 1 && namespaces[0] != "" requiresAllNamespaces := len(namespaces) == 0 @@ -47,7 +55,7 @@ func getFullConfig(namespaces ...string) http.HandlerFunc { } return func(w http.ResponseWriter, _ *http.Request) { nsSettings := map[string]interface{}{} - allSettings := ddconfig.Datadog.AllSettings() + allSettings := cfg.AllSettings() if !requiresAllNamespaces { for ns := range uniqueNamespaces { if val, ok := allSettings[ns]; ok { diff --git a/pkg/config/settings/runtime_setting_activity_dump.go b/pkg/config/settings/runtime_setting_activity_dump.go index 5946701727526..ba6f4a02ac2a9 100644 --- a/pkg/config/settings/runtime_setting_activity_dump.go +++ b/pkg/config/settings/runtime_setting_activity_dump.go @@ -41,13 +41,13 @@ func (l ActivityDumpRuntimeSetting) Name() string { // Get returns the current value of the runtime setting func (l ActivityDumpRuntimeSetting) Get() (interface{}, error) { - val := config.Datadog.Get(l.ConfigKey) + val := config.SystemProbe.Get(l.ConfigKey) return val, nil } func (l ActivityDumpRuntimeSetting) setMaxDumpSize(v interface{}) { intVar, _ := strconv.Atoi(v.(string)) - config.Datadog.Set(l.ConfigKey, intVar) + config.SystemProbe.Set(l.ConfigKey, intVar) } // Set changes the value of the runtime setting diff --git a/pkg/config/settings/runtime_setting_log_level.go b/pkg/config/settings/runtime_setting_log_level.go index 5f171704625ab..1f36e16e1b1a3 100644 --- a/pkg/config/settings/runtime_setting_log_level.go +++ b/pkg/config/settings/runtime_setting_log_level.go @@ -13,7 +13,8 @@ import ( // LogLevelRuntimeSetting wraps operations to change log level at runtime. type LogLevelRuntimeSetting struct { - ConfigKey string + ConfigRoot config.Config + ConfigKey string } // Description returns the runtime setting's description @@ -51,7 +52,11 @@ func (l LogLevelRuntimeSetting) Set(v interface{}) error { if l.ConfigKey != "" { key = l.ConfigKey } - config.Datadog.Set(key, logLevel) + cfg := config.Datadog + if l.ConfigRoot != nil { + cfg = l.ConfigRoot + } + cfg.Set(key, logLevel) // we trigger a new inventory metadata payload since the configuration was updated by the user. inventories.Refresh() return nil diff --git a/pkg/config/settings/runtime_setting_profiling.go b/pkg/config/settings/runtime_setting_profiling.go index 3e863c234c560..80da9644efe6e 100644 --- a/pkg/config/settings/runtime_setting_profiling.go +++ b/pkg/config/settings/runtime_setting_profiling.go @@ -10,13 +10,15 @@ import ( "strings" "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/util/flavor" "github.com/DataDog/datadog-agent/pkg/util/profiling" "github.com/DataDog/datadog-agent/pkg/version" ) // ProfilingRuntimeSetting wraps operations to change log level at runtime -type ProfilingRuntimeSetting string +type ProfilingRuntimeSetting struct { + SettingName string + Service string +} // Description returns the runtime setting's description func (l ProfilingRuntimeSetting) Description() string { @@ -30,7 +32,7 @@ func (l ProfilingRuntimeSetting) Hidden() bool { // Name returns the name of the runtime setting func (l ProfilingRuntimeSetting) Name() string { - return string(l) + return l.SettingName } // Get returns the current value of the runtime setting @@ -72,10 +74,7 @@ func (l ProfilingRuntimeSetting) Set(v interface{}) error { // Note that we must derive a new profiling.Settings on every // invocation, as many of these settings may have changed at runtime. v, _ := version.Agent() - service := "datadog-agent" - if flavor.GetFlavor() == flavor.ClusterAgent { - service = "datadog-cluster-agent" - } + service := l.Service settings := profiling.Settings{ ProfilingURL: site, @@ -85,6 +84,7 @@ func (l ProfilingRuntimeSetting) Set(v interface{}) error { MutexProfileFraction: profiling.GetMutexProfileFraction(), BlockProfileRate: profiling.GetBlockProfileRate(), WithGoroutineProfile: config.Datadog.GetBool("internal_profiling.enable_goroutine_stacktraces"), + WithDeltaProfiles: config.Datadog.GetBool("internal_profiling.delta_profiles"), Tags: []string{fmt.Sprintf("version:%v", v)}, } err := profiling.Start(settings) diff --git a/pkg/config/settings/runtime_settings_test.go b/pkg/config/settings/runtime_settings_test.go index 8e0aecad92a90..6bf1c5a00202d 100644 --- a/pkg/config/settings/runtime_settings_test.go +++ b/pkg/config/settings/runtime_settings_test.go @@ -107,8 +107,9 @@ func TestProfiling(t *testing.T) { cleanRuntimeSetting() setupConf() - ll := ProfilingRuntimeSetting("internal_profiling") + ll := ProfilingRuntimeSetting{SettingName: "internal_profiling", Service: "datadog-agent"} assert.Equal(t, "internal_profiling", ll.Name()) + assert.Equal(t, "datadog-agent", ll.Service) err := ll.Set("false") assert.Nil(t, err) @@ -119,6 +120,12 @@ func TestProfiling(t *testing.T) { err = ll.Set("on") assert.NotNil(t, err) + + ll = ProfilingRuntimeSetting{SettingName: "internal_profiling", Service: "process-agent"} + assert.Equal(t, "process-agent", ll.Service) + + ll = ProfilingRuntimeSetting{SettingName: "internal_profiling", Service: "datadog-cluster-agent"} + assert.Equal(t, "datadog-cluster-agent", ll.Service) } func TestGetInt(t *testing.T) { diff --git a/pkg/config/system_probe.go b/pkg/config/system_probe.go index 89bee70be734d..8eeac0dffdb94 100644 --- a/pkg/config/system_probe.go +++ b/pkg/config/system_probe.go @@ -12,6 +12,7 @@ import ( "strings" "time" + "github.com/DataDog/datadog-agent/pkg/secrets" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -19,12 +20,19 @@ const ( spNS = "system_probe_config" netNS = "network_config" smNS = "service_monitoring_config" + evNS = "event_monitoring_config" defaultConnsMessageBatchSize = 600 // defaultSystemProbeBPFDir is the default path for eBPF programs defaultSystemProbeBPFDir = "/opt/datadog-agent/embedded/share/system-probe/ebpf" + // defaultSystemProbeJavaDir is the default path for java agent program + defaultSystemProbeJavaDir = "/opt/datadog-agent/embedded/share/system-probe/java" + + // defaultServiceMonitoringJavaAgentArgs is default arguments that are passing to the injected java USM agent + defaultServiceMonitoringJavaAgentArgs = "dd.appsec.enabled=false dd.trace.enabled=false dd.usm.enabled=true" + // defaultRuntimeCompilerOutputDir is the default path for output from the system-probe runtime compiler defaultRuntimeCompilerOutputDir = "/var/tmp/datadog-agent/system-probe/build" @@ -43,20 +51,38 @@ const ( defaultOffsetThreshold = 400 ) -func isSystemProbeConfigInit(cfg Config) bool { - keys := cfg.GetKnownKeys() - _, ok := keys[join(spNS, "enabled")] - return ok -} - // InitSystemProbeConfig declares all the configuration values normally read from system-probe.yaml. -// This function should not be called before ResolveSecrets, -// unless you call `cmd/system-probe/config.New` or `cmd/system-probe/config.Merge` in-between. -// This is to prevent the in-memory values from being fixed before the file-based values have had a chance to be read. func InitSystemProbeConfig(cfg Config) { - if isSystemProbeConfigInit(cfg) { - return - } + cfg.BindEnvAndSetDefault("ignore_host_etc", false) + cfg.BindEnvAndSetDefault("go_core_dump", false) + + // Auto exit configuration + cfg.BindEnvAndSetDefault("auto_exit.validation_period", 60) + cfg.BindEnvAndSetDefault("auto_exit.noprocess.enabled", false) + cfg.BindEnvAndSetDefault("auto_exit.noprocess.excluded_processes", []string{}) + + // statsd + cfg.BindEnv("bind_host") + cfg.BindEnvAndSetDefault("dogstatsd_port", 8125) + + // logging + cfg.SetKnown(join(spNS, "log_file")) + cfg.SetKnown(join(spNS, "log_level")) + cfg.BindEnvAndSetDefault("log_file", defaultSystemProbeLogFilePath) + cfg.BindEnvAndSetDefault("log_level", "info", "DD_LOG_LEVEL", "LOG_LEVEL") + cfg.BindEnvAndSetDefault("syslog_uri", "") + cfg.BindEnvAndSetDefault("syslog_rfc", false) + cfg.BindEnvAndSetDefault("log_to_syslog", false) + cfg.BindEnvAndSetDefault("log_to_console", true) + cfg.BindEnvAndSetDefault("log_format_json", false) + + // secrets backend + cfg.BindEnvAndSetDefault("secret_backend_command", "") + cfg.BindEnvAndSetDefault("secret_backend_arguments", []string{}) + cfg.BindEnvAndSetDefault("secret_backend_output_max_size", secrets.SecretBackendOutputMaxSize) + cfg.BindEnvAndSetDefault("secret_backend_timeout", 30) + cfg.BindEnvAndSetDefault("secret_backend_command_allow_group_exec_perm", false) + cfg.BindEnvAndSetDefault("secret_backend_skip_checks", false) // settings for system-probe in general cfg.BindEnvAndSetDefault(join(spNS, "enabled"), false, "DD_SYSTEM_PROBE_ENABLED") @@ -65,14 +91,9 @@ func InitSystemProbeConfig(cfg Config) { cfg.BindEnvAndSetDefault(join(spNS, "sysprobe_socket"), defaultSystemProbeAddress, "DD_SYSPROBE_SOCKET") cfg.BindEnvAndSetDefault(join(spNS, "max_conns_per_message"), defaultConnsMessageBatchSize) - cfg.BindEnvAndSetDefault(join(spNS, "log_file"), defaultSystemProbeLogFilePath) - cfg.BindEnvAndSetDefault(join(spNS, "log_level"), "info", "DD_LOG_LEVEL", "LOG_LEVEL") cfg.BindEnvAndSetDefault(join(spNS, "debug_port"), 0) cfg.BindEnvAndSetDefault(join(spNS, "telemetry_enabled"), true, "DD_TELEMETRY_ENABLED") - cfg.BindEnvAndSetDefault(join(spNS, "dogstatsd_host"), "127.0.0.1") - cfg.BindEnvAndSetDefault(join(spNS, "dogstatsd_port"), 8125) - cfg.BindEnvAndSetDefault(join(spNS, "internal_profiling.enabled"), false, "DD_SYSTEM_PROBE_INTERNAL_PROFILING_ENABLED") cfg.BindEnvAndSetDefault(join(spNS, "internal_profiling.site"), DefaultSite, "DD_SYSTEM_PROBE_INTERNAL_PROFILING_SITE", "DD_SITE") cfg.BindEnvAndSetDefault(join(spNS, "internal_profiling.profile_dd_url"), "", "DD_SYSTEM_PROBE_INTERNAL_PROFILING_DD_URL", "DD_APM_INTERNAL_PROFILING_DD_URL") @@ -92,6 +113,7 @@ func InitSystemProbeConfig(cfg Config) { // ebpf general settings cfg.BindEnvAndSetDefault(join(spNS, "bpf_debug"), false) cfg.BindEnvAndSetDefault(join(spNS, "bpf_dir"), defaultSystemProbeBPFDir, "DD_SYSTEM_PROBE_BPF_DIR") + cfg.BindEnvAndSetDefault(join(spNS, "java_dir"), defaultSystemProbeJavaDir, "DD_SYSTEM_PROBE_JAVA_DIR") cfg.BindEnvAndSetDefault(join(spNS, "excluded_linux_versions"), []string{}) cfg.BindEnvAndSetDefault(join(spNS, "enable_tracepoints"), false) cfg.BindEnvAndSetDefault(join(spNS, "enable_co_re"), true, "DD_ENABLE_CO_RE") @@ -118,6 +140,7 @@ func InitSystemProbeConfig(cfg Config) { cfg.BindEnvAndSetDefault(join(spNS, "max_tracked_connections"), 65536) cfg.BindEnv(join(spNS, "max_closed_connections_buffered")) + cfg.BindEnvAndSetDefault(join(spNS, "closed_connection_flush_threshold"), 0) cfg.BindEnvAndSetDefault(join(spNS, "closed_channel_size"), 500) cfg.BindEnvAndSetDefault(join(spNS, "max_connection_state_buffered"), 75000) @@ -145,7 +168,10 @@ func InitSystemProbeConfig(cfg Config) { cfg.BindEnv(join(netNS, "enable_http_monitoring"), "DD_SYSTEM_PROBE_NETWORK_ENABLE_HTTP_MONITORING") cfg.BindEnv(join(netNS, "enable_https_monitoring"), "DD_SYSTEM_PROBE_NETWORK_ENABLE_HTTPS_MONITORING") - cfg.BindEnvAndSetDefault(join(spNS, "enable_go_tls_support"), false) + cfg.BindEnvAndSetDefault(join(smNS, "enable_go_tls_support"), false) + + cfg.BindEnvAndSetDefault(join(smNS, "enable_java_tls_support"), false) + cfg.BindEnvAndSetDefault(join(smNS, "java_agent_args"), defaultServiceMonitoringJavaAgentArgs) cfg.BindEnvAndSetDefault(join(netNS, "enable_gateway_lookup"), true, "DD_SYSTEM_PROBE_NETWORK_ENABLE_GATEWAY_LOOKUP") cfg.BindEnvAndSetDefault(join(netNS, "max_http_stats_buffered"), 100000, "DD_SYSTEM_PROBE_NETWORK_MAX_HTTP_STATS_BUFFERED") @@ -182,8 +208,78 @@ func InitSystemProbeConfig(cfg Config) { cfg.BindEnvAndSetDefault(join(smNS, "enabled"), false, "DD_SYSTEM_PROBE_SERVICE_MONITORING_ENABLED") cfg.BindEnvAndSetDefault(join(smNS, "process_service_inference", "enabled"), false, "DD_SYSTEM_PROBE_PROCESS_SERVICE_INFERENCE_ENABLED") + // event monitoring + cfg.BindEnvAndSetDefault(join(evNS, "process", "enabled"), false, "DD_SYSTEM_PROBE_EVENT_MONITORING_PROCESS_ENABLED") + cfg.BindEnvAndSetDefault(join(evNS, "network_process", "enabled"), false, "DD_SYSTEM_PROBE_EVENT_MONITORING_NETWORK_PROCESS_ENABLED") + + // process event monitoring data limits for network tracer + cfg.BindEnv(join(evNS, "network_process.max_processes_tracked")) + // enable/disable use of root net namespace cfg.BindEnvAndSetDefault(join(netNS, "enable_root_netns"), true) + + // CWS + cfg.BindEnvAndSetDefault("runtime_security_config.enabled", false) + cfg.BindEnvAndSetDefault("runtime_security_config.fim_enabled", false) + cfg.BindEnvAndSetDefault("runtime_security_config.erpc_dentry_resolution_enabled", true) + cfg.BindEnvAndSetDefault("runtime_security_config.map_dentry_resolution_enabled", true) + cfg.BindEnvAndSetDefault("runtime_security_config.dentry_cache_size", 1024) + cfg.BindEnvAndSetDefault("runtime_security_config.policies.dir", DefaultRuntimePoliciesDir) + cfg.BindEnvAndSetDefault("runtime_security_config.policies.watch_dir", false) + cfg.BindEnvAndSetDefault("runtime_security_config.policies.monitor.enabled", false) + cfg.BindEnvAndSetDefault("runtime_security_config.socket", "/opt/datadog-agent/run/runtime-security.sock") + cfg.BindEnvAndSetDefault("runtime_security_config.enable_approvers", true) + cfg.BindEnvAndSetDefault("runtime_security_config.enable_kernel_filters", true) + cfg.BindEnvAndSetDefault("runtime_security_config.flush_discarder_window", 3) + cfg.BindEnvAndSetDefault("runtime_security_config.runtime_monitor.enabled", false) + cfg.BindEnvAndSetDefault("runtime_security_config.events_stats.polling_interval", 20) + cfg.BindEnvAndSetDefault("runtime_security_config.events_stats.tags_cardinality", "high") + cfg.BindEnvAndSetDefault("runtime_security_config.event_server.burst", 40) + cfg.BindEnvAndSetDefault("runtime_security_config.event_server.retention", 6) + cfg.BindEnvAndSetDefault("runtime_security_config.event_server.rate", 10) + cfg.BindEnvAndSetDefault("runtime_security_config.load_controller.events_count_threshold", 20000) + cfg.BindEnvAndSetDefault("runtime_security_config.load_controller.discarder_timeout", 60) + cfg.BindEnvAndSetDefault("runtime_security_config.load_controller.control_period", 2) + cfg.BindEnvAndSetDefault("runtime_security_config.pid_cache_size", 10000) + cfg.BindEnvAndSetDefault("runtime_security_config.cookie_cache_size", 100) + cfg.BindEnvAndSetDefault("runtime_security_config.agent_monitoring_events", true) + cfg.BindEnvAndSetDefault("runtime_security_config.custom_sensitive_words", []string{}) + cfg.BindEnvAndSetDefault("runtime_security_config.remote_tagger", true) + cfg.BindEnvAndSetDefault("runtime_security_config.log_patterns", []string{}) + cfg.BindEnvAndSetDefault("runtime_security_config.log_tags", []string{}) + cfg.BindEnvAndSetDefault("runtime_security_config.self_test.enabled", true) + cfg.BindEnvAndSetDefault("runtime_security_config.self_test.send_report", true) + cfg.BindEnvAndSetDefault("runtime_security_config.runtime_compilation.enabled", false) + cfg.BindEnv("runtime_security_config.runtime_compilation.compiled_constants_enabled") + cfg.BindEnvAndSetDefault("runtime_security_config.network.enabled", true) + cfg.BindEnvAndSetDefault("runtime_security_config.network.lazy_interface_prefixes", []string{}) + cfg.BindEnvAndSetDefault("runtime_security_config.network.classifier_priority", 10) + cfg.BindEnvAndSetDefault("runtime_security_config.network.classifier_handle", 0) + cfg.BindEnvAndSetDefault("runtime_security_config.remote_configuration.enabled", false) + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.enabled", false) + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.cleanup_period", 30) + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.tags_resolution_period", 60) + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.load_controller_period", 1) + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.max_dump_size", 1750) + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.path_merge.enabled", false) + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.traced_cgroups_count", 5) + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.traced_event_types", []string{"exec", "open", "dns"}) + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.cgroup_dump_timeout", 30) + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.rate_limiter", 500) + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.cgroup_wait_list_timeout", 75) + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.cgroup_differentiate_args", true) + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.local_storage.max_dumps_count", 100) + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.local_storage.output_directory", "/tmp/activity_dumps/") + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.local_storage.formats", []string{}) + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.local_storage.compression", true) + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.remote_storage.formats", []string{"protobuf"}) + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.remote_storage.compression", true) + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.syscall_monitor.period", 60) + cfg.BindEnvAndSetDefault("runtime_security_config.activity_dump.max_dump_count_per_workload", 25) + bindEnvAndSetLogsConfigKeys(cfg, "runtime_security_config.activity_dump.remote_storage.endpoints.") + cfg.BindEnvAndSetDefault("runtime_security_config.event_stream.use_ring_buffer", true) + cfg.BindEnv("runtime_security_config.event_stream.buffer_size") + cfg.BindEnvAndSetDefault("runtime_security_config.envs_with_value", []string{"LD_PRELOAD", "LD_LIBRARY_PATH", "PATH", "HISTSIZE", "HISTFILESIZE"}) } func join(pieces ...string) string { diff --git a/pkg/config/types.go b/pkg/config/types.go index 041c2eade633b..e28e98519a3bb 100644 --- a/pkg/config/types.go +++ b/pkg/config/types.go @@ -15,21 +15,8 @@ import ( "github.com/spf13/pflag" ) -// Config represents an object that can load and store configuration parameters -// coming from different kind of sources: -// - defaults -// - files -// - environment variables -// - flags -type Config interface { - - // API implemented by viper.Viper - - Set(key string, value interface{}) - SetDefault(key string, value interface{}) - SetFs(fs afero.Fs) - IsSet(key string) bool - +// ConfigReader is a subset of Config that only allows reading of configuration +type ConfigReader interface { Get(key string) interface{} GetString(key string) string GetBool(key string) bool @@ -46,6 +33,45 @@ type Config interface { GetStringMapStringSlice(key string) map[string][]string GetSizeInBytes(key string) uint + ConfigFileUsed() string + + AllSettings() map[string]interface{} + AllSettingsWithoutDefault() map[string]interface{} + AllKeys() []string + + IsSet(key string) bool + + // IsKnown returns whether this key is known + IsKnown(key string) bool + + // GetKnownKeys returns all the keys that meet at least one of these criteria: + // 1) have a default, 2) have an environment variable binded, 3) are an alias or 4) have been SetKnown() + GetKnownKeys() map[string]interface{} + + // GetEnvVars returns a list of the env vars that the config supports. + // These have had the EnvPrefix applied, as well as the EnvKeyReplacer. + GetEnvVars() []string + + // IsSectionSet checks if a given section is set by checking if any of + // its subkeys is set. + IsSectionSet(section string) bool +} + +type ConfigWriter interface { + Set(key string, value interface{}) +} + +type ConfigReaderWriter interface { + ConfigReader + ConfigWriter +} + +type ConfigLoader interface { + // API implemented by viper.Viper + + SetDefault(key string, value interface{}) + SetFs(fs afero.Fs) + SetEnvPrefix(in string) BindEnv(input ...string) SetEnvKeyReplacer(r *strings.Replacer) @@ -60,23 +86,15 @@ type Config interface { MergeConfig(in io.Reader) error MergeConfigOverride(in io.Reader) error - AllSettings() map[string]interface{} - AllSettingsWithoutDefault() map[string]interface{} - AllKeys() []string - AddConfigPath(in string) SetConfigName(in string) SetConfigFile(in string) SetConfigType(in string) - ConfigFileUsed() string BindPFlag(key string, flag *pflag.Flag) error // SetKnown adds a key to the set of known valid config keys SetKnown(key string) - // GetKnownKeys returns all the keys that meet at least one of these criteria: - // 1) have a default, 2) have an environment variable binded, 3) are an alias or 4) have been SetKnown() - GetKnownKeys() map[string]interface{} // API not implemented by viper.Viper and that have proven useful for our config usage @@ -86,12 +104,15 @@ type Config interface { // If env is provided, it will override the name of the environment variable used for this // config key BindEnvAndSetDefault(key string, val interface{}, env ...string) +} - // GetEnvVars returns a list of the env vars that the config supports. - // These have had the EnvPrefix applied, as well as the EnvKeyReplacer. - GetEnvVars() []string - - // IsSectionSet checks if a given section is set by checking if any of - // its subkeys is set. - IsSectionSet(section string) bool +// Config represents an object that can load and store configuration parameters +// coming from different kind of sources: +// - defaults +// - files +// - environment variables +// - flags +type Config interface { + ConfigReaderWriter + ConfigLoader } diff --git a/pkg/config/viper.go b/pkg/config/viper.go index c862412096579..4e2cd7a8cc707 100644 --- a/pkg/config/viper.go +++ b/pkg/config/viper.go @@ -55,6 +55,16 @@ func (c *safeConfig) SetKnown(key string) { c.Viper.SetKnown(key) } +// IsKnown adds a key to the set of known valid config keys +func (c *safeConfig) IsKnown(key string) bool { + c.Lock() + defer c.Unlock() + + keys := c.Viper.GetKnownKeys() + _, ok := keys[key] + return ok +} + // GetKnownKeys returns all the keys that meet at least one of these criteria: // 1) have a default, 2) have an environment variable binded or 3) have been SetKnown() func (c *safeConfig) GetKnownKeys() map[string]interface{} { diff --git a/pkg/containerimage/forwarder.go b/pkg/containerimage/forwarder.go new file mode 100644 index 0000000000000..8d358f76416bb --- /dev/null +++ b/pkg/containerimage/forwarder.go @@ -0,0 +1,59 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package containerimage + +import ( + "fmt" + "net/url" + + "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/config/resolver" + "github.com/DataDog/datadog-agent/pkg/forwarder" + "github.com/DataDog/datadog-agent/pkg/util/flavor" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +func buildKeysPerDomains(conf config.Config) (map[string][]string, error) { + mainURL := config.GetMainEndpointWithConfig(conf, "https://contimage-intake.", "container_image.dd_url") + if _, err := url.Parse(mainURL); err != nil { + return nil, fmt.Errorf("could not parse contimage main endpoint: %w", err) + } + + keysPerDomain := map[string][]string{ + mainURL: { + conf.GetString("api_key"), + }, + } + + if !conf.IsSet("container_image.additional_endpoints") { + return keysPerDomain, nil + } + + additionalEndpoints := conf.GetStringMapStringSlice("container_image.additional_endpoints") + + return config.MergeAdditionalEndpoints(keysPerDomain, additionalEndpoints) +} + +// NewForwarder returns a forwarder for container images events +func NewForwarder() *forwarder.DefaultForwarder { + if !config.Datadog.GetBool("container_image.enabled") { + return nil + } + + if flavor.GetFlavor() != flavor.DefaultAgent { + return nil + } + + keysPerDomain, err := buildKeysPerDomains(config.Datadog) + if err != nil { + log.Errorf("Cannot build keys per domains: %v", err) + return nil + } + + options := forwarder.NewOptionsWithResolvers(resolver.NewSingleDomainResolvers(keysPerDomain)) + + return forwarder.NewDefaultForwarder(options) +} diff --git a/pkg/diagnose/connectivity/hooks.go b/pkg/diagnose/connectivity/hooks.go index faa9b0f620f7b..32579a95d739f 100644 --- a/pkg/diagnose/connectivity/hooks.go +++ b/pkg/diagnose/connectivity/hooks.go @@ -88,16 +88,17 @@ func (writer *connectivityHooks) connectDoneHook(network, addr string, err error // getConnHook is called before getting a new connection. // This is called before : -// - Creating a new connection : getConnHook ---> connectStartHook -// - Retrieving an existing connection : getConnHook ---> gotConnHook +// - Creating a new connection : getConnHook ---> connectStartHook +// - Retrieving an existing connection : getConnHook ---> gotConnHook func (writer *connectivityHooks) getConnHook(hostPort string) { fmt.Fprintf(writer.w, "=== Retrieving or creating a new connection ===\n") } // gotConnHook is called after a successful connection is obtained. // It can be called after : -// - New connection created : connectDoneHook ---> gotDoneHook -// - Previous connection retrieved : getConnHook ---> gotConnHook +// - New connection created : connectDoneHook ---> gotDoneHook +// - Previous connection retrieved : getConnHook ---> gotConnHook +// // This function only displays when a connection is retrieved. // Information about new connection are reported by connectDoneHook func (writer *connectivityHooks) gotConnHook(gci httptrace.GotConnInfo) { diff --git a/pkg/dogstatsd/enrich.go b/pkg/dogstatsd/enrich.go index 999073c28bca3..e7dde4a97bee5 100644 --- a/pkg/dogstatsd/enrich.go +++ b/pkg/dogstatsd/enrich.go @@ -42,15 +42,18 @@ type enrichConfig struct { // originFromMsg is the origin sent by the client via the container field (non-prefixed container ID). // entityIDPrecedenceEnabled refers to the dogstatsd_entity_id_precedence parameter. // -// --------------------------------------------------------------------------------- +// --------------------------------------------------------------------------------- +// // | originFromUDS | originFromTag | entityIDPrecedenceEnabled || Result: udsOrigin | // |---------------|---------------|---------------------------||--------------------| // | any | any | false || originFromUDS | // | any | any | true || empty | // | any | empty | any || originFromUDS | -// --------------------------------------------------------------------------------- // -// --------------------------------------------------------------------------------- +// --------------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------------- +// // | originFromTag | originFromMsg || Result: originFromClient | // |------------------------|-----------------||-------------------------------------| // | not empty && not none | any || pod prefix + originFromTag | @@ -58,7 +61,8 @@ type enrichConfig struct { // | none | empty || empty | // | empty | not empty || container prefix + originFromMsg | // | none | not empty || container prefix + originFromMsg | -// --------------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------------- func extractTagsMetadata(tags []string, originFromUDS string, originFromMsg []byte, conf enrichConfig) ([]string, string, string, string, string) { host := conf.defaultHostname diff --git a/pkg/dogstatsd/replay/file.go b/pkg/dogstatsd/replay/file.go index b621fe12f161e..306f9e6309783 100644 --- a/pkg/dogstatsd/replay/file.go +++ b/pkg/dogstatsd/replay/file.go @@ -6,8 +6,8 @@ package replay import ( - "bufio" "fmt" + "io" "github.com/h2non/filetype" "github.com/h2non/filetype/matchers" @@ -17,7 +17,8 @@ var ( datadogType = filetype.NewType("dog", "datadog/capture") // DATADOG0F1FF0000 in HEX (D474D060F1FF0000); (F0 | datadogFileVersion) for different file versions support // 00 to terminate header - datadogHeader = []byte{0xD4, 0x74, 0xD0, 0x60, 0xF0, 0xFF, 0x00, 0x00} + datadogHeader = []byte{0xD4, 0x74, 0xD0, 0x60, 0xF0, 0xFF, 0x00, 0x00} + ErrHeaderWrite = fmt.Errorf("capture file header could not be fully written to buffer") ) const ( @@ -68,18 +69,21 @@ func fileVersion(buf []byte) (int, error) { } // WriteHeader writes the datadog header to the Writer argument to conform to the .dog file format. -func WriteHeader(w *bufio.Writer) error { +func WriteHeader(w io.Writer) error { hdr := make([]byte, len(datadogHeader)) copy(hdr, datadogHeader) hdr[versionIndex] |= datadogFileVersion //Write header - if n, err := w.Write(hdr); err != nil || n < len(datadogHeader) { - if err != nil { - return fmt.Errorf("Capture file header could not be fully written to buffer") - } + n, err := w.Write(hdr) + + if err != nil { return err } + if n < len(datadogHeader) { + return ErrHeaderWrite + } + return nil } diff --git a/pkg/dogstatsd/replay/file_test.go b/pkg/dogstatsd/replay/file_test.go index 32bcb3694b191..c0e711b3c1538 100644 --- a/pkg/dogstatsd/replay/file_test.go +++ b/pkg/dogstatsd/replay/file_test.go @@ -8,6 +8,8 @@ package replay import ( "bufio" "bytes" + "io" + "io/fs" "testing" "github.com/stretchr/testify/assert" @@ -18,7 +20,7 @@ func TestHeaderFormat(t *testing.T) { contents := bufio.NewWriter(buff) err := WriteHeader(contents) - assert.Nil(t, err) + assert.NoError(t, err) // let's make sure these are written to the underlying byte buffer contents.Flush() @@ -29,7 +31,7 @@ func TestHeaderFormat(t *testing.T) { // look at version v, err := fileVersion(b) - assert.Nil(t, err) + assert.NoError(t, err) assert.Equal(t, v, int(datadogFileVersion)) // let's inspect the header @@ -42,6 +44,44 @@ func TestHeaderFormat(t *testing.T) { } } +func TestHeaderFormatError(t *testing.T) { + tests := []struct { + name string + contents io.Writer + expected error + }{ + { + name: "No error but less bytes written than datadogHeader", + contents: &errorWriter{1, nil}, + expected: ErrHeaderWrite, + }, + { + name: "Error and less bytes written than datadogHeader", + contents: &errorWriter{1, fs.ErrInvalid}, + expected: fs.ErrInvalid, + }, + { + name: "Error and more bytes written than datadogHeader", + contents: &errorWriter{500, fs.ErrInvalid}, + expected: fs.ErrInvalid, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + assert.ErrorIs(t, WriteHeader(tt.contents), tt.expected, tt.name) + }) + } +} + +type errorWriter struct { + n int + err error +} + +func (e *errorWriter) Write(_ []byte) (n int, err error) { + return e.n, e.err +} + func TestFormatMatcher(t *testing.T) { assert.True(t, datadogMatcher(datadogHeader)) diff --git a/pkg/ebpf/bytecode/runtime/all_helpers.go b/pkg/ebpf/bytecode/runtime/all_helpers.go new file mode 100644 index 0000000000000..561560c4d2722 --- /dev/null +++ b/pkg/ebpf/bytecode/runtime/all_helpers.go @@ -0,0 +1,219 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf + +package runtime + +// updated as of Linux v6.0 commit 4fe89d07dcc2804c8b562f6c7896a45643d34b2f +var allHelpers = []string{ + "BPF_FUNC_map_lookup_elem", + "BPF_FUNC_map_update_elem", + "BPF_FUNC_map_delete_elem", + "BPF_FUNC_probe_read", + "BPF_FUNC_ktime_get_ns", + "BPF_FUNC_trace_printk", + "BPF_FUNC_get_prandom_u32", + "BPF_FUNC_get_smp_processor_id", + "BPF_FUNC_skb_store_bytes", + "BPF_FUNC_l3_csum_replace", + "BPF_FUNC_l4_csum_replace", + "BPF_FUNC_tail_call", + "BPF_FUNC_clone_redirect", + "BPF_FUNC_get_current_pid_tgid", + "BPF_FUNC_get_current_uid_gid", + "BPF_FUNC_get_current_comm", + "BPF_FUNC_get_cgroup_classid", + "BPF_FUNC_skb_vlan_push", + "BPF_FUNC_skb_vlan_pop", + "BPF_FUNC_skb_get_tunnel_key", + "BPF_FUNC_skb_set_tunnel_key", + "BPF_FUNC_perf_event_read", + "BPF_FUNC_redirect", + "BPF_FUNC_get_route_realm", + "BPF_FUNC_perf_event_output", + "BPF_FUNC_skb_load_bytes", + "BPF_FUNC_get_stackid", + "BPF_FUNC_csum_diff", + "BPF_FUNC_skb_get_tunnel_opt", + "BPF_FUNC_skb_set_tunnel_opt", + "BPF_FUNC_skb_change_proto", + "BPF_FUNC_skb_change_type", + "BPF_FUNC_skb_under_cgroup", + "BPF_FUNC_get_hash_recalc", + "BPF_FUNC_get_current_task", + "BPF_FUNC_probe_write_user", + "BPF_FUNC_current_task_under_cgroup", + "BPF_FUNC_skb_change_tail", + "BPF_FUNC_skb_pull_data", + "BPF_FUNC_csum_update", + "BPF_FUNC_set_hash_invalid", + "BPF_FUNC_get_numa_node_id", + "BPF_FUNC_skb_change_head", + "BPF_FUNC_xdp_adjust_head", + "BPF_FUNC_probe_read_str", + "BPF_FUNC_get_socket_cookie", + "BPF_FUNC_get_socket_uid", + "BPF_FUNC_set_hash", + "BPF_FUNC_setsockopt", + "BPF_FUNC_skb_adjust_room", + "BPF_FUNC_redirect_map", + "BPF_FUNC_sk_redirect_map", + "BPF_FUNC_sock_map_update", + "BPF_FUNC_xdp_adjust_meta", + "BPF_FUNC_perf_event_read_value", + "BPF_FUNC_perf_prog_read_value", + "BPF_FUNC_getsockopt", + "BPF_FUNC_override_return", + "BPF_FUNC_sock_ops_cb_flags_set", + "BPF_FUNC_msg_redirect_map", + "BPF_FUNC_msg_apply_bytes", + "BPF_FUNC_msg_cork_bytes", + "BPF_FUNC_msg_pull_data", + "BPF_FUNC_bind", + "BPF_FUNC_xdp_adjust_tail", + "BPF_FUNC_skb_get_xfrm_state", + "BPF_FUNC_get_stack", + "BPF_FUNC_skb_load_bytes_relative", + "BPF_FUNC_fib_lookup", + "BPF_FUNC_sock_hash_update", + "BPF_FUNC_msg_redirect_hash", + "BPF_FUNC_sk_redirect_hash", + "BPF_FUNC_lwt_push_encap", + "BPF_FUNC_lwt_seg6_store_bytes", + "BPF_FUNC_lwt_seg6_adjust_srh", + "BPF_FUNC_lwt_seg6_action", + "BPF_FUNC_rc_repeat", + "BPF_FUNC_rc_keydown", + "BPF_FUNC_skb_cgroup_id", + "BPF_FUNC_get_current_cgroup_id", + "BPF_FUNC_get_local_storage", + "BPF_FUNC_sk_select_reuseport", + "BPF_FUNC_skb_ancestor_cgroup_id", + "BPF_FUNC_sk_lookup_tcp", + "BPF_FUNC_sk_lookup_udp", + "BPF_FUNC_sk_release", + "BPF_FUNC_map_push_elem", + "BPF_FUNC_map_pop_elem", + "BPF_FUNC_map_peek_elem", + "BPF_FUNC_msg_push_data", + "BPF_FUNC_msg_pop_data", + "BPF_FUNC_rc_pointer_rel", + "BPF_FUNC_spin_lock", + "BPF_FUNC_spin_unlock", + "BPF_FUNC_sk_fullsock", + "BPF_FUNC_tcp_sock", + "BPF_FUNC_skb_ecn_set_ce", + "BPF_FUNC_get_listener_sock", + "BPF_FUNC_skc_lookup_tcp", + "BPF_FUNC_tcp_check_syncookie", + "BPF_FUNC_sysctl_get_name", + "BPF_FUNC_sysctl_get_current_value", + "BPF_FUNC_sysctl_get_new_value", + "BPF_FUNC_sysctl_set_new_value", + "BPF_FUNC_strtol", + "BPF_FUNC_strtoul", + "BPF_FUNC_sk_storage_get", + "BPF_FUNC_sk_storage_delete", + "BPF_FUNC_send_signal", + "BPF_FUNC_tcp_gen_syncookie", + "BPF_FUNC_skb_output", + "BPF_FUNC_probe_read_user", + "BPF_FUNC_probe_read_kernel", + "BPF_FUNC_probe_read_user_str", + "BPF_FUNC_probe_read_kernel_str", + "BPF_FUNC_tcp_send_ack", + "BPF_FUNC_send_signal_thread", + "BPF_FUNC_jiffies64", + "BPF_FUNC_read_branch_records", + "BPF_FUNC_get_ns_current_pid_tgid", + "BPF_FUNC_xdp_output", + "BPF_FUNC_get_netns_cookie", + "BPF_FUNC_get_current_ancestor_cgroup_id", + "BPF_FUNC_sk_assign", + "BPF_FUNC_ktime_get_boot_ns", + "BPF_FUNC_seq_printf", + "BPF_FUNC_seq_write", + "BPF_FUNC_sk_cgroup_id", + "BPF_FUNC_sk_ancestor_cgroup_id", + "BPF_FUNC_ringbuf_output", + "BPF_FUNC_ringbuf_reserve", + "BPF_FUNC_ringbuf_submit", + "BPF_FUNC_ringbuf_discard", + "BPF_FUNC_ringbuf_query", + "BPF_FUNC_csum_level", + "BPF_FUNC_skc_to_tcp6_sock", + "BPF_FUNC_skc_to_tcp_sock", + "BPF_FUNC_skc_to_tcp_timewait_sock", + "BPF_FUNC_skc_to_tcp_request_sock", + "BPF_FUNC_skc_to_udp6_sock", + "BPF_FUNC_get_task_stack", + "BPF_FUNC_load_hdr_opt", + "BPF_FUNC_store_hdr_opt", + "BPF_FUNC_reserve_hdr_opt", + "BPF_FUNC_inode_storage_get", + "BPF_FUNC_inode_storage_delete", + "BPF_FUNC_d_path", + "BPF_FUNC_copy_from_user", + "BPF_FUNC_snprintf_btf", + "BPF_FUNC_seq_printf_btf", + "BPF_FUNC_skb_cgroup_classid", + "BPF_FUNC_redirect_neigh", + "BPF_FUNC_per_cpu_ptr", + "BPF_FUNC_this_cpu_ptr", + "BPF_FUNC_redirect_peer", + "BPF_FUNC_task_storage_get", + "BPF_FUNC_task_storage_delete", + "BPF_FUNC_get_current_task_btf", + "BPF_FUNC_bprm_opts_set", + "BPF_FUNC_ktime_get_coarse_ns", + "BPF_FUNC_ima_inode_hash", + "BPF_FUNC_sock_from_file", + "BPF_FUNC_check_mtu", + "BPF_FUNC_for_each_map_elem", + "BPF_FUNC_snprintf", + "BPF_FUNC_sys_bpf", + "BPF_FUNC_btf_find_by_name_kind", + "BPF_FUNC_sys_close", + "BPF_FUNC_timer_init", + "BPF_FUNC_timer_set_callback", + "BPF_FUNC_timer_start", + "BPF_FUNC_timer_cancel", + "BPF_FUNC_get_func_ip", + "BPF_FUNC_get_attach_cookie", + "BPF_FUNC_task_pt_regs", + "BPF_FUNC_get_branch_snapshot", + "BPF_FUNC_trace_vprintk", + "BPF_FUNC_skc_to_unix_sock", + "BPF_FUNC_kallsyms_lookup_name", + "BPF_FUNC_find_vma", + "BPF_FUNC_loop", + "BPF_FUNC_strncmp", + "BPF_FUNC_get_func_arg", + "BPF_FUNC_get_func_ret", + "BPF_FUNC_get_func_arg_cnt", + "BPF_FUNC_get_retval", + "BPF_FUNC_set_retval", + "BPF_FUNC_xdp_get_buff_len", + "BPF_FUNC_xdp_load_bytes", + "BPF_FUNC_xdp_store_bytes", + "BPF_FUNC_copy_from_user_task", + "BPF_FUNC_skb_set_tstamp", + "BPF_FUNC_ima_file_hash", + "BPF_FUNC_kptr_xchg", + "BPF_FUNC_map_lookup_percpu_elem", + "BPF_FUNC_skc_to_mptcp_sock", + "BPF_FUNC_dynptr_from_mem", + "BPF_FUNC_ringbuf_reserve_dynptr", + "BPF_FUNC_ringbuf_submit_dynptr", + "BPF_FUNC_ringbuf_discard_dynptr", + "BPF_FUNC_dynptr_read", + "BPF_FUNC_dynptr_write", + "BPF_FUNC_dynptr_data", + "BPF_FUNC_tcp_raw_gen_syncookie_ipv4", + "BPF_FUNC_tcp_raw_gen_syncookie_ipv6", + "BPF_FUNC_tcp_raw_check_syncookie_ipv4", + "BPF_FUNC_tcp_raw_check_syncookie_ipv6", +} diff --git a/pkg/ebpf/bytecode/runtime/asset.go b/pkg/ebpf/bytecode/runtime/asset.go index bea7bb6f838ef..123f72d792e92 100644 --- a/pkg/ebpf/bytecode/runtime/asset.go +++ b/pkg/ebpf/bytecode/runtime/asset.go @@ -53,7 +53,15 @@ func (a *asset) Compile(config *ebpf.Config, additionalFlags []string, client st } }() - kernelHeaders := kernel.GetKernelHeaders(config, client) + opts := kernel.KernelHeaderOptions{ + DownloadEnabled: config.EnableKernelHeaderDownload, + Dirs: config.KernelHeadersDirs, + DownloadDir: config.KernelHeadersDownloadDir, + AptConfigDir: config.AptConfigDir, + YumReposDir: config.YumReposDir, + ZypperReposDir: config.ZypperReposDir, + } + kernelHeaders := kernel.GetKernelHeaders(opts, client) if len(kernelHeaders) == 0 { a.tm.compilationResult = headerFetchErr return nil, fmt.Errorf("unable to find kernel headers") diff --git a/pkg/ebpf/bytecode/runtime/conntrack.go b/pkg/ebpf/bytecode/runtime/conntrack.go deleted file mode 100644 index 433c1f38e6d73..0000000000000 --- a/pkg/ebpf/bytecode/runtime/conntrack.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -//go:build linux_bpf -// +build linux_bpf - -package runtime - -var Conntrack = newAsset("conntrack.c", "8e130122b7e22b800941bed99eacc2f0f53c5d4bb5965568b3d3d4a6a91215e6") diff --git a/pkg/ebpf/bytecode/runtime/generated_asset.go b/pkg/ebpf/bytecode/runtime/generated_asset.go index ed6d22b041d85..155be42670bbd 100644 --- a/pkg/ebpf/bytecode/runtime/generated_asset.go +++ b/pkg/ebpf/bytecode/runtime/generated_asset.go @@ -49,7 +49,15 @@ func (a *generatedAsset) Compile(config *ebpf.Config, inputCode string, addition } }() - kernelHeaders := kernel.GetKernelHeaders(config, client) + opts := kernel.KernelHeaderOptions{ + DownloadEnabled: config.EnableKernelHeaderDownload, + Dirs: config.KernelHeadersDirs, + DownloadDir: config.KernelHeadersDownloadDir, + AptConfigDir: config.AptConfigDir, + YumReposDir: config.YumReposDir, + ZypperReposDir: config.ZypperReposDir, + } + kernelHeaders := kernel.GetKernelHeaders(opts, client) if len(kernelHeaders) == 0 { a.tm.compilationResult = headerFetchErr return nil, fmt.Errorf("unable to find kernel headers") diff --git a/pkg/ebpf/bytecode/runtime/helpers.go b/pkg/ebpf/bytecode/runtime/helpers.go new file mode 100644 index 0000000000000..c2c39c00d5d82 --- /dev/null +++ b/pkg/ebpf/bytecode/runtime/helpers.go @@ -0,0 +1,109 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf + +package runtime + +import ( + "bufio" + "bytes" + "fmt" + "io" + "os" + "strings" + "text/template" + + "github.com/DataDog/datadog-agent/pkg/ebpf/compiler" +) + +const listGenSource = ` +#include + +#define __BPF_ENUM_FN(x) BPF_FUNC_ ## x +__BPF_FUNC_MAPPER(__BPF_ENUM_FN) +#undef __BPF_ENUM_FN +` + +const defineTemplate = ` +#ifndef __BPF_CROSS_COMPILE_DYNAMIC__ +#define __BPF_CROSS_COMPILE_DYNAMIC__ + +{{ range $index, $fn := .AllFuncs -}} +#define __E_{{ $fn }} {{ mapexists $fn $.AvailableFuncs }} +{{ end -}} +#endif +` + +func includeHelperAvailability(kernelHeaders []string) (string, error) { + fns, err := getAvailableHelpers(kernelHeaders) + if err != nil { + return "", fmt.Errorf("get available helpers: %w", err) + } + + f, err := os.CreateTemp(os.TempDir(), "bpf_cross_compile_dynamic.*.h") + if err != nil { + return "", fmt.Errorf("temp define file: %w", err) + } + defer f.Close() + + if err := generateHelperDefines(fns, allHelpers, f); err != nil { + return "", fmt.Errorf("generate helper defines: %w", err) + } + return f.Name(), nil +} + +type helperData struct { + AllFuncs []string + AvailableFuncs map[string]struct{} +} + +func generateHelperDefines(availableFns []string, allFns []string, out io.Writer) error { + tmpl, err := template.New("helperexist").Funcs(map[string]any{ + "mapexists": func(k string, m map[string]struct{}) bool { + _, ok := m[k] + return ok + }, + }).Parse(defineTemplate) + if err != nil { + return fmt.Errorf("helper define template parse: %w", err) + } + + data := &helperData{ + AllFuncs: allFns, + AvailableFuncs: make(map[string]struct{}), + } + + for _, f := range availableFns { + data.AvailableFuncs[f] = struct{}{} + } + return tmpl.Execute(out, data) +} + +func getAvailableHelpers(kernelHeaders []string) ([]string, error) { + clangOut := &bytes.Buffer{} + if err := compiler.Preprocess(bytes.NewBufferString(listGenSource), clangOut, nil, kernelHeaders); err != nil { + return nil, fmt.Errorf("preprocess helpers: %w", err) + } + + var lastLine []byte + scanner := bufio.NewScanner(clangOut) + for scanner.Scan() { + lastLine = scanner.Bytes() + } + if len(lastLine) == 0 { + return nil, fmt.Errorf("empty output") + } + + funcs := strings.Split(string(lastLine), ", ") + if len(funcs) < 2 || funcs[0] != "BPF_FUNC_unspec" { + return nil, fmt.Errorf("invalid preprocess output: %s", lastLine) + } + + // remove BPF_FUNC_unspec + funcs = funcs[1:] + funcs[len(funcs)-1] = strings.TrimSuffix(funcs[len(funcs)-1], ",") + return funcs, nil +} diff --git a/pkg/ebpf/bytecode/runtime/helpers_test.go b/pkg/ebpf/bytecode/runtime/helpers_test.go new file mode 100644 index 0000000000000..87bacedc21822 --- /dev/null +++ b/pkg/ebpf/bytecode/runtime/helpers_test.go @@ -0,0 +1,70 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf + +package runtime + +import ( + "bytes" + "strings" + "testing" + + "github.com/DataDog/gopsutil/host" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/pkg/ebpf" + "github.com/DataDog/datadog-agent/pkg/util/kernel" +) + +func TestGetAvailableHelpers(t *testing.T) { + kv, err := kernel.HostVersion() + require.NoError(t, err) + _, family, _, err := host.PlatformInformation() + require.NoError(t, err) + if kv < kernel.VersionCode(4, 10, 0) && family != "rhel" { + t.Skip("__BPF_FUNC_MAPPER macro not available on vanilla kernels < 4.10.0") + } + + cfg := ebpf.NewConfig() + opts := kernel.KernelHeaderOptions{ + DownloadEnabled: cfg.EnableKernelHeaderDownload, + Dirs: cfg.KernelHeadersDirs, + DownloadDir: cfg.KernelHeadersDownloadDir, + AptConfigDir: cfg.AptConfigDir, + YumReposDir: cfg.YumReposDir, + ZypperReposDir: cfg.ZypperReposDir, + } + kernelHeaders := kernel.GetKernelHeaders(opts, nil) + fns, err := getAvailableHelpers(kernelHeaders) + require.NoError(t, err) + assert.NotEmpty(t, fns, "number of available helpers") + + for _, f := range fns { + assert.NotEqual(t, "BPF_FUNC_unspec", f) + assert.False(t, strings.HasSuffix(f, ",")) + t.Log(f) + } +} + +func TestGenerateHelperDefines(t *testing.T) { + allfns := []string{"BPF_FUNC_map_lookup_elem", "BPF_FUNC_map_update_elem", "BPF_FUNC_map_delete_elem"} + availfns := []string{"BPF_FUNC_map_lookup_elem", "BPF_FUNC_map_update_elem"} + buf := &bytes.Buffer{} + err := generateHelperDefines(availfns, allfns, buf) + require.NoError(t, err) + + const exp = ` +#ifndef __BPF_CROSS_COMPILE_DYNAMIC__ +#define __BPF_CROSS_COMPILE_DYNAMIC__ + +#define __E_BPF_FUNC_map_lookup_elem true +#define __E_BPF_FUNC_map_update_elem true +#define __E_BPF_FUNC_map_delete_elem false +#endif +` + assert.Equal(t, exp, buf.String()) +} diff --git a/pkg/ebpf/bytecode/runtime/http.go b/pkg/ebpf/bytecode/runtime/http.go deleted file mode 100644 index 7c20cf0bf60ef..0000000000000 --- a/pkg/ebpf/bytecode/runtime/http.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -//go:build linux_bpf -// +build linux_bpf - -package runtime - -var Http = newAsset("http.c", "3048216f28dc5d68fc7fc0cea4cc6d720d5baf1fef3206e9d2a3fcce7173f4a4") diff --git a/pkg/ebpf/bytecode/runtime/oom-kill.go b/pkg/ebpf/bytecode/runtime/oom-kill.go deleted file mode 100644 index ec6c945bf7ec9..0000000000000 --- a/pkg/ebpf/bytecode/runtime/oom-kill.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -//go:build linux_bpf -// +build linux_bpf - -package runtime - -var OomKill = newAsset("oom-kill.c", "0a6f954a0086e405947f0a4db65f869a72a091b4bf118fe08b6e816ad7fedb08") diff --git a/pkg/ebpf/bytecode/runtime/runtime-security.go b/pkg/ebpf/bytecode/runtime/runtime-security.go index d4d85e3f40fc6..f7a60841fcbdb 100644 --- a/pkg/ebpf/bytecode/runtime/runtime-security.go +++ b/pkg/ebpf/bytecode/runtime/runtime-security.go @@ -4,4 +4,4 @@ package runtime -var RuntimeSecurity = newAsset("runtime-security.c", "871228962c5fcbc5e86eee892dbbe5a729a3189c8bae3f9f77db3f9732ab56c6") +var RuntimeSecurity = newAsset("runtime-security.c", "1e551a249259dfdc98b380b64d91c7ba1e34039b6e2fae669015a60e6bbfb22d") diff --git a/pkg/ebpf/bytecode/runtime/runtime_compilation_helpers.go b/pkg/ebpf/bytecode/runtime/runtime_compilation_helpers.go index 6db2a84c9183f..732daa29a9312 100644 --- a/pkg/ebpf/bytecode/runtime/runtime_compilation_helpers.go +++ b/pkg/ebpf/bytecode/runtime/runtime_compilation_helpers.go @@ -17,10 +17,12 @@ import ( "path/filepath" "strings" + "github.com/DataDog/gopsutil/host" "golang.org/x/sys/unix" "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode" "github.com/DataDog/datadog-agent/pkg/ebpf/compiler" + "github.com/DataDog/datadog-agent/pkg/util/kernel" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -71,6 +73,26 @@ func compileToObjectFile(in io.Reader, outputDir, filename, inHash string, addit return nil, outputFileErr, fmt.Errorf("error stat-ing output file %s: %w", outputFile, err) } + kv, err := kernel.HostVersion() + if err != nil { + return nil, kernelVersionErr, fmt.Errorf("unable to get kernel version: %w", err) + } + _, family, _, err := host.PlatformInformation() + if err != nil { + return nil, kernelVersionErr, fmt.Errorf("unable to get kernel family: %w", err) + } + + // RHEL platforms back-ported the __BPF_FUNC_MAPPER macro, so we can always use the dynamic method there + if kv >= kernel.VersionCode(4, 10, 0) || family == "rhel" { + var helperPath string + helperPath, err = includeHelperAvailability(kernelHeaders) + if err != nil { + return nil, compilationErr, fmt.Errorf("error getting helper availability: %w", err) + } + defer os.Remove(helperPath) + flags = append(flags, fmt.Sprintf("-include%s", helperPath)) + } + if err := compiler.CompileToObjectFile(in, outputFile, flags, kernelHeaders); err != nil { return nil, compilationErr, fmt.Errorf("failed to compile runtime version of %s: %s", filename, err) } @@ -95,9 +117,10 @@ func compileToObjectFile(in io.Reader, outputDir, filename, inHash string, addit } func computeFlagsAndHash(additionalFlags []string) ([]string, string) { - flags := make([]string, len(defaultFlags)+len(additionalFlags)) - copy(flags, defaultFlags) - copy(flags[len(defaultFlags):], additionalFlags) + flags := make([]string, 0, len(defaultFlags)+len(additionalFlags)+1) + flags = append(flags, fmt.Sprintf("-D__TARGET_ARCH_%s", kernel.Arch())) + flags = append(flags, defaultFlags...) + flags = append(flags, additionalFlags...) hasher := sha256.New() for _, f := range flags { diff --git a/pkg/ebpf/bytecode/runtime/tcp-queue-length.go b/pkg/ebpf/bytecode/runtime/tcp-queue-length.go deleted file mode 100644 index 46ddeb3475d8d..0000000000000 --- a/pkg/ebpf/bytecode/runtime/tcp-queue-length.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -//go:build linux_bpf -// +build linux_bpf - -package runtime - -var TcpQueueLength = newAsset("tcp-queue-length.c", "a343a5f32414ef815a930b767694069c968db37b3ce0e53754394b1f455ac8bd") diff --git a/pkg/ebpf/bytecode/runtime/telemetry.go b/pkg/ebpf/bytecode/runtime/telemetry.go index ce52b47058f12..c6acc217eabab 100644 --- a/pkg/ebpf/bytecode/runtime/telemetry.go +++ b/pkg/ebpf/bytecode/runtime/telemetry.go @@ -28,7 +28,7 @@ type CompilationResult int const ( notAttempted CompilationResult = iota compilationSuccess - kernelVersionErr // nolint:deadcode,unused + kernelVersionErr verificationError outputDirErr outputFileErr diff --git a/pkg/ebpf/bytecode/runtime/tracer.go b/pkg/ebpf/bytecode/runtime/tracer.go deleted file mode 100644 index 67acacb2d427d..0000000000000 --- a/pkg/ebpf/bytecode/runtime/tracer.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -//go:build linux_bpf -// +build linux_bpf - -package runtime - -var Tracer = newAsset("tracer.c", "f58211220193137df3f3e0809486b02bbcdd9a4102b8d176f5c92a2dd6d8262d") diff --git a/pkg/ebpf/c/bpf_cross_compile.h b/pkg/ebpf/c/bpf_cross_compile.h index 62156298e740b..58da862ed1342 100644 --- a/pkg/ebpf/c/bpf_cross_compile.h +++ b/pkg/ebpf/c/bpf_cross_compile.h @@ -6,30 +6,164 @@ #endif #ifdef COMPILE_RUNTIME - +#include #include +#if !defined(__BPF_FUNC_MAPPER) +#define __E_BPF_FUNC_map_lookup_elem false +#define __E_BPF_FUNC_map_update_elem false +#define __E_BPF_FUNC_map_delete_elem false +#define __E_BPF_FUNC_probe_read false +#define __E_BPF_FUNC_ktime_get_ns false +#define __E_BPF_FUNC_trace_printk false +#define __E_BPF_FUNC_get_prandom_u32 false +#define __E_BPF_FUNC_get_smp_processor_id false +#define __E_BPF_FUNC_skb_store_bytes false +#define __E_BPF_FUNC_l3_csum_replace false +#define __E_BPF_FUNC_l4_csum_replace false +#define __E_BPF_FUNC_tail_call false +#define __E_BPF_FUNC_clone_redirect false +#define __E_BPF_FUNC_get_current_pid_tgid false +#define __E_BPF_FUNC_get_current_uid_gid false #define __E_BPF_FUNC_get_current_comm false +#define __E_BPF_FUNC_get_cgroup_classid false +#define __E_BPF_FUNC_skb_vlan_push false +#define __E_BPF_FUNC_skb_vlan_pop false +#define __E_BPF_FUNC_skb_get_tunnel_key false +#define __E_BPF_FUNC_skb_set_tunnel_key false +#define __E_BPF_FUNC_perf_event_read false +#define __E_BPF_FUNC_redirect false +#define __E_BPF_FUNC_get_route_realm false +#define __E_BPF_FUNC_perf_event_output false +#define __E_BPF_FUNC_skb_load_bytes false +#define __E_BPF_FUNC_get_stackid false +#define __E_BPF_FUNC_csum_diff false +#define __E_BPF_FUNC_skb_get_tunnel_opt false +#define __E_BPF_FUNC_skb_set_tunnel_opt false +#define __E_BPF_FUNC_skb_change_proto false +#define __E_BPF_FUNC_skb_change_type false +#define __E_BPF_FUNC_skb_under_cgroup false +#define __E_BPF_FUNC_get_hash_recalc false #define __E_BPF_FUNC_get_current_task false -#define __E_BPF_FUNC_probe_read_str false +#define __E_BPF_FUNC_probe_write_user false +#define __E_BPF_FUNC_current_task_under_cgroup false +#define __E_BPF_FUNC_skb_change_tail false +#define __E_BPF_FUNC_skb_pull_data false +#define __E_BPF_FUNC_csum_update false +#define __E_BPF_FUNC_set_hash_invalid false + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) +#undef __E_BPF_FUNC_map_lookup_elem +#define __E_BPF_FUNC_map_lookup_elem true +#undef __E_BPF_FUNC_map_update_elem +#define __E_BPF_FUNC_map_update_elem true +#undef __E_BPF_FUNC_map_delete_elem +#define __E_BPF_FUNC_map_delete_elem true +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0) +#undef __E_BPF_FUNC_probe_read +#define __E_BPF_FUNC_probe_read true +#undef __E_BPF_FUNC_ktime_get_ns +#define __E_BPF_FUNC_ktime_get_ns true +#undef __E_BPF_FUNC_trace_printk +#define __E_BPF_FUNC_trace_printk true +#undef __E_BPF_FUNC_get_prandom_u32 +#define __E_BPF_FUNC_get_prandom_u32 true +#undef __E_BPF_FUNC_get_smp_processor_id +#define __E_BPF_FUNC_get_smp_processor_id true +#undef __E_BPF_FUNC_skb_store_bytes +#define __E_BPF_FUNC_skb_store_bytes true +#undef __E_BPF_FUNC_l3_csum_replace +#define __E_BPF_FUNC_l3_csum_replace true +#undef __E_BPF_FUNC_l4_csum_replace +#define __E_BPF_FUNC_l4_csum_replace true +#endif -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0) +#undef __E_BPF_FUNC_tail_call +#define __E_BPF_FUNC_tail_call true +#undef __E_BPF_FUNC_clone_redirect +#define __E_BPF_FUNC_clone_redirect true +#undef __E_BPF_FUNC_get_current_pid_tgid +#define __E_BPF_FUNC_get_current_pid_tgid true +#undef __E_BPF_FUNC_get_current_uid_gid +#define __E_BPF_FUNC_get_current_uid_gid true #undef __E_BPF_FUNC_get_current_comm #define __E_BPF_FUNC_get_current_comm true #endif -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,8,0) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) +#undef __E_BPF_FUNC_get_cgroup_classid +#define __E_BPF_FUNC_get_cgroup_classid true +#undef __E_BPF_FUNC_skb_vlan_push +#define __E_BPF_FUNC_skb_vlan_push true +#undef __E_BPF_FUNC_skb_vlan_pop +#define __E_BPF_FUNC_skb_vlan_pop true +#undef __E_BPF_FUNC_skb_get_tunnel_key +#define __E_BPF_FUNC_skb_get_tunnel_key true +#undef __E_BPF_FUNC_skb_set_tunnel_key +#define __E_BPF_FUNC_skb_set_tunnel_key true +#undef __E_BPF_FUNC_perf_event_read +#define __E_BPF_FUNC_perf_event_read true +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0) +#undef __E_BPF_FUNC_redirect +#define __E_BPF_FUNC_redirect true +#undef __E_BPF_FUNC_get_route_realm +#define __E_BPF_FUNC_get_route_realm true +#undef __E_BPF_FUNC_perf_event_output +#define __E_BPF_FUNC_perf_event_output true +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 0) +#undef __E_BPF_FUNC_skb_load_bytes +#define __E_BPF_FUNC_skb_load_bytes true +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0) +#undef __E_BPF_FUNC_get_stackid +#define __E_BPF_FUNC_get_stackid true +#undef __E_BPF_FUNC_csum_diff +#define __E_BPF_FUNC_csum_diff true +#undef __E_BPF_FUNC_skb_get_tunnel_opt +#define __E_BPF_FUNC_skb_get_tunnel_opt true +#undef __E_BPF_FUNC_skb_set_tunnel_opt +#define __E_BPF_FUNC_skb_set_tunnel_opt true +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) +#undef __E_BPF_FUNC_skb_change_proto +#define __E_BPF_FUNC_skb_change_proto true +#undef __E_BPF_FUNC_skb_change_type +#define __E_BPF_FUNC_skb_change_type true +#undef __E_BPF_FUNC_skb_under_cgroup +#define __E_BPF_FUNC_skb_under_cgroup true +#undef __E_BPF_FUNC_get_hash_recalc +#define __E_BPF_FUNC_get_hash_recalc true #undef __E_BPF_FUNC_get_current_task #define __E_BPF_FUNC_get_current_task true +#undef __E_BPF_FUNC_probe_write_user +#define __E_BPF_FUNC_probe_write_user true #endif -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0) -#undef __E_BPF_FUNC_probe_read_str -#define __E_BPF_FUNC_probe_read_str true +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0) +#undef __E_BPF_FUNC_current_task_under_cgroup +#define __E_BPF_FUNC_current_task_under_cgroup true +#undef __E_BPF_FUNC_skb_change_tail +#define __E_BPF_FUNC_skb_change_tail true +#undef __E_BPF_FUNC_skb_pull_data +#define __E_BPF_FUNC_skb_pull_data true +#undef __E_BPF_FUNC_csum_update +#define __E_BPF_FUNC_csum_update true +#undef __E_BPF_FUNC_set_hash_invalid +#define __E_BPF_FUNC_set_hash_invalid true #endif -#define bpf_helper_exists(x) __E_ ## x +#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) */ +#define bpf_helper_exists(x) __E_ ## x #endif /* defined(COMPILE_RUNTIME) */ #endif /* defined(__BPF_CROSS_COMPILE__) */ diff --git a/pkg/ebpf/co_re.go b/pkg/ebpf/co_re.go index 60c7f2b8e50cf..819b25d089e12 100644 --- a/pkg/ebpf/co_re.go +++ b/pkg/ebpf/co_re.go @@ -37,6 +37,7 @@ func LoadCOREAsset(cfg *Config, filename string, startFn func(bytecode.AssetRead if btfData == nil { return fmt.Errorf("could not find BTF data on host") } + defer btf.FlushKernelSpec() buf, err := bytecode.GetReader(filepath.Join(cfg.BPFDir, "co-re"), filename) if err != nil { diff --git a/pkg/ebpf/compiler/compiler.go b/pkg/ebpf/compiler/compiler.go index ff79bcd695ae8..3c5fc4fe98994 100644 --- a/pkg/ebpf/compiler/compiler.go +++ b/pkg/ebpf/compiler/compiler.go @@ -17,7 +17,6 @@ import ( "os" "os/exec" "path/filepath" - "runtime" "time" "github.com/DataDog/datadog-agent/pkg/util/kernel" @@ -35,55 +34,78 @@ var ( const compilationStepTimeout = 60 * time.Second +func writeStdarg() (string, error) { + tmpIncludeDir, err := os.MkdirTemp(os.TempDir(), "include-") + if err != nil { + return "", fmt.Errorf("error creating temporary include directory: %s", err.Error()) + } + + if err = os.WriteFile(filepath.Join(tmpIncludeDir, "stdarg.h"), stdargHData, 0644); err != nil { + return "", fmt.Errorf("error writing data to stdarg.h: %s", err.Error()) + } + return tmpIncludeDir, nil +} + +func kernelHeaderPaths(headerDirs []string) []string { + arch := kernel.Arch() + var paths []string + for _, d := range headerDirs { + paths = append(paths, + fmt.Sprintf("%s/arch/%s/include", d, arch), + fmt.Sprintf("%s/arch/%s/include/generated", d, arch), + fmt.Sprintf("%s/include", d), + fmt.Sprintf("%s/arch/%s/include/uapi", d, arch), + fmt.Sprintf("%s/arch/%s/include/generated/uapi", d, arch), + fmt.Sprintf("%s/include/uapi", d), + fmt.Sprintf("%s/include/generated/uapi", d), + ) + } + return paths +} + // CompileToObjectFile compiles an eBPF program func CompileToObjectFile(in io.Reader, outputFile string, cflags []string, headerDirs []string) error { if len(headerDirs) == 0 { return fmt.Errorf("unable to find kernel headers") } - arch := kernel.Arch() - if arch == "" { - return fmt.Errorf("unable to get kernel arch for %s", runtime.GOARCH) - } - - tmpIncludeDir, err := os.MkdirTemp(os.TempDir(), "include-") + tmpIncludeDir, err := writeStdarg() if err != nil { - return fmt.Errorf("error creating temporary include directory: %s", err.Error()) + return err } defer os.RemoveAll(tmpIncludeDir) + cflags = append(cflags, fmt.Sprintf("-isystem%s", tmpIncludeDir)) - if err = os.WriteFile(filepath.Join(tmpIncludeDir, "stdarg.h"), stdargHData, 0644); err != nil { - return fmt.Errorf("error writing data to stdarg.h: %s", err.Error()) + kps := kernelHeaderPaths(headerDirs) + for _, p := range kps { + cflags = append(cflags, fmt.Sprintf("-isystem%s", p)) } - for _, d := range headerDirs { - cflags = append(cflags, - fmt.Sprintf("-isystem%s/arch/%s/include", d, arch), - fmt.Sprintf("-isystem%s/arch/%s/include/generated", d, arch), - fmt.Sprintf("-isystem%s/include", d), - fmt.Sprintf("-isystem%s/arch/%s/include/uapi", d, arch), - fmt.Sprintf("-isystem%s/arch/%s/include/generated/uapi", d, arch), - fmt.Sprintf("-isystem%s/include/uapi", d), - fmt.Sprintf("-isystem%s/include/generated/uapi", d), - ) - } - cflags = append(cflags, fmt.Sprintf("-isystem%s", tmpIncludeDir)) cflags = append(cflags, "-c", "-x", "c", "-o", "-", "-") + clangOut := &bytes.Buffer{} + if err := clang(in, clangOut, cflags); err != nil { + return fmt.Errorf("compiling asset to bytecode: %w", err) + } + if err := llc(clangOut, outputFile); err != nil { + return fmt.Errorf("error compiling bytecode to object file: %w", err) + } + return nil +} - var clangOut, clangErr, llcErr bytes.Buffer +func clang(in io.Reader, out io.Writer, cflags []string) error { + var clangErr bytes.Buffer clangCtx, clangCancel := context.WithTimeout(context.Background(), compilationStepTimeout) defer clangCancel() compileToBC := exec.CommandContext(clangCtx, clangBinPath, cflags...) compileToBC.Stdin = in - compileToBC.Stdout = &clangOut + compileToBC.Stdout = out compileToBC.Stderr = &clangErr - log.Debugf("compiling asset to bytecode: %v", compileToBC.Args) - - err = compileToBC.Run() + log.Debugf("running clang: %v", compileToBC.Args) + err := compileToBC.Run() if err != nil { var errMsg string if clangCtx.Err() == context.DeadlineExceeded { @@ -93,24 +115,28 @@ func CompileToObjectFile(in io.Reader, outputFile string, cflags []string, heade } else { errMsg = err.Error() } - return fmt.Errorf("error compiling asset to bytecode: %s", errMsg) + return fmt.Errorf("clang: %s", errMsg) } if len(clangErr.String()) > 0 { log.Debugf("%s", clangErr.String()) } + return nil +} +func llc(in io.Reader, outputFile string) error { + var llcErr bytes.Buffer llcCtx, llcCancel := context.WithTimeout(context.Background(), compilationStepTimeout) defer llcCancel() bcToObj := exec.CommandContext(llcCtx, llcBinPath, "-march=bpf", "-filetype=obj", "-o", outputFile, "-") - bcToObj.Stdin = &clangOut + bcToObj.Stdin = in bcToObj.Stdout = nil bcToObj.Stderr = &llcErr - log.Debugf("compiling bytecode to object file: %v", bcToObj.Args) + log.Debugf("running llc: %v", bcToObj.Args) - err = bcToObj.Run() + err := bcToObj.Run() if err != nil { var errMsg string if llcCtx.Err() == context.DeadlineExceeded { @@ -120,12 +146,29 @@ func CompileToObjectFile(in io.Reader, outputFile string, cflags []string, heade } else { errMsg = err.Error() } - return fmt.Errorf("error compiling bytecode to object file: %s", errMsg) + return fmt.Errorf("llc: %s", errMsg) } if len(llcErr.String()) > 0 { - log.Debugf("%s", clangErr.String()) + log.Debugf("%s", llcErr.String()) } - return nil } + +// Preprocess runs the clang preprocessor on `in` and writes the output to `out` +func Preprocess(in io.Reader, out io.Writer, cflags []string, headerDirs []string) error { + tmpIncludeDir, err := writeStdarg() + if err != nil { + return err + } + defer os.RemoveAll(tmpIncludeDir) + cflags = append(cflags, fmt.Sprintf("-isystem%s", tmpIncludeDir)) + + kps := kernelHeaderPaths(headerDirs) + for _, p := range kps { + cflags = append(cflags, fmt.Sprintf("-isystem%s", p)) + } + + cflags = append(cflags, "-E", "-x", "c", "-o", "-", "-") + return clang(in, out, cflags) +} diff --git a/pkg/ebpf/config.go b/pkg/ebpf/config.go index 410b24a448818..1deb407942849 100644 --- a/pkg/ebpf/config.go +++ b/pkg/ebpf/config.go @@ -24,6 +24,9 @@ type Config struct { // BPFDir is the directory to load the eBPF program from BPFDir string + // JavaDir is the directory to load the java agent program from + JavaDir string + // ExcludedBPFLinuxVersions lists Linux kernel versions that should not use BPF features ExcludedBPFLinuxVersions []string @@ -79,12 +82,11 @@ func key(pieces ...string) string { // NewConfig creates a config with ebpf-related settings func NewConfig() *Config { - cfg := aconfig.Datadog - aconfig.InitSystemProbeConfig(cfg) - + cfg := aconfig.SystemProbe return &Config{ BPFDebug: cfg.GetBool(key(spNS, "bpf_debug")), BPFDir: cfg.GetString(key(spNS, "bpf_dir")), + JavaDir: cfg.GetString(key(spNS, "java_dir")), ExcludedBPFLinuxVersions: cfg.GetStringSlice(key(spNS, "excluded_linux_versions")), EnableTracepoints: cfg.GetBool(key(spNS, "enable_tracepoints")), ProcRoot: util.GetProcRoot(), diff --git a/pkg/ebpf/debuglog_dumper.go b/pkg/ebpf/debuglog_dumper.go index 6b6cf19a4dc22..1a2ee84a5c9fe 100644 --- a/pkg/ebpf/debuglog_dumper.go +++ b/pkg/ebpf/debuglog_dumper.go @@ -23,7 +23,8 @@ const ( // DumpDebugLog is a utility to write the debug log of the running application to a given writer. // To enable it, you need to enabled BPF DEBUG log in the configuration, and add the following code snippet: -// ctx, cancel := context.WithCancel(context.Background()) +// +// ctx, cancel := context.WithCancel(context.Background()) // defer cancel() // ebpf.DumpDebugLog(ctx, os.Stdout) func DumpDebugLog(ctx context.Context, writer io.Writer) error { diff --git a/pkg/epforwarder/epforwarder.go b/pkg/epforwarder/epforwarder.go index d448e43bc8238..7cba6f6acbbab 100644 --- a/pkg/epforwarder/epforwarder.go +++ b/pkg/epforwarder/epforwarder.go @@ -42,11 +42,11 @@ var passthroughPipelineDescs = []passthroughPipelineDesc{ { eventType: eventTypeDBMSamples, endpointsConfigPrefix: "database_monitoring.samples.", - hostnameEndpointPrefix: "dbquery-intake.", + hostnameEndpointPrefix: "dbm-metrics-intake.", intakeTrackType: "databasequery", // raise the default batch_max_concurrent_send from 0 to 10 to ensure this pipeline is able to handle 4k events/s defaultBatchMaxConcurrentSend: 10, - defaultBatchMaxContentSize: pkgconfig.DefaultBatchMaxContentSize, + defaultBatchMaxContentSize: 10e6, defaultBatchMaxSize: pkgconfig.DefaultBatchMaxSize, defaultInputChanSize: pkgconfig.DefaultInputChanSize, }, @@ -138,7 +138,7 @@ func (s *defaultEventPlatformForwarder) SendEventPlatformEvent(e *message.Messag case p.in <- e: return nil default: - return fmt.Errorf("event platform forwarder pipeline channel is full for eventType=%s. consider increasing batch_max_concurrent_send", eventType) + return fmt.Errorf("event platform forwarder pipeline channel is full for eventType=%s. Channel capacity is %d. consider increasing batch_max_concurrent_send", eventType, cap(p.in)) } } @@ -162,7 +162,11 @@ func (s *defaultEventPlatformForwarder) Purge() map[string][]*message.Message { defer s.purgeMx.Unlock() result := make(map[string][]*message.Message) for eventType, p := range s.pipelines { - result[eventType] = purgeChan(p.in) + res := purgeChan(p.in) + result[eventType] = res + if eventType == eventTypeDBMActivity || eventType == eventTypeDBMMetrics || eventType == eventTypeDBMSamples { + log.Debugf("purged DBM channel %s: %d events", eventType, len(res)) + } } return result } diff --git a/pkg/flare/archive.go b/pkg/flare/archive.go index 5406d75da531f..defef9722b0f6 100644 --- a/pkg/flare/archive.go +++ b/pkg/flare/archive.go @@ -149,7 +149,7 @@ func createArchive(fb flarehelpers.FlareBuilder, confSearchPaths SearchPaths, lo fb.AddFileFromFunc("status.log", status.GetAndFormatStatus) fb.AddFileFromFunc("config-check.log", getConfigCheck) fb.AddFileFromFunc("tagger-list.json", getAgentTaggerList) - fb.AddFileFromFunc("workload-list.log", getWorkloadList) + fb.AddFileFromFunc("workload-list.log", getAgentWorkloadList) fb.AddFileFromFunc("process-agent_tagger-list.json", getProcessAgentTaggerList) getProcessChecks(fb, config.GetProcessAPIAddressPort) @@ -163,7 +163,7 @@ func createArchive(fb flarehelpers.FlareBuilder, confSearchPaths SearchPaths, lo } addSystemProbePlatformSpecificEntries(fb) - if config.Datadog.GetBool("system_probe_config.enabled") { + if config.SystemProbe.GetBool("system_probe_config.enabled") { fb.AddFileFromFunc(filepath.Join("expvar", "system-probe"), getSystemProbeStats) } @@ -207,7 +207,7 @@ func createArchive(fb flarehelpers.FlareBuilder, confSearchPaths SearchPaths, lo } func getVersionHistory(fb flarehelpers.FlareBuilder) { - fb.CopyFileTo(config.Datadog.GetString("run_path"), "version-history.json") + fb.CopyFile(filepath.Join(config.Datadog.GetString("run_path"), "version-history.json")) } func getPerformanceProfile(fb flarehelpers.FlareBuilder, pdata ProfileData) { @@ -217,7 +217,7 @@ func getPerformanceProfile(fb flarehelpers.FlareBuilder, pdata ProfileData) { } func getRegistryJSON(fb flarehelpers.FlareBuilder) { - fb.CopyFile(filepath.Join(config.Datadog.GetString("logs_config.run_path"))) + fb.CopyFile(filepath.Join(config.Datadog.GetString("logs_config.run_path"), "registry.json")) } func getMetadataV5() ([]byte, error) { @@ -296,7 +296,7 @@ func getExpVar(fb flarehelpers.FlareBuilder) error { } func getSystemProbeStats() ([]byte, error) { - sysProbeStats := status.GetSystemProbeStats(config.Datadog.GetString("system_probe_config.sysprobe_socket")) + sysProbeStats := status.GetSystemProbeStats(config.SystemProbe.GetString("system_probe_config.sysprobe_socket")) sysProbeBuf, err := yaml.Marshal(sysProbeStats) if err != nil { return nil, err @@ -320,7 +320,7 @@ func getProcessAgentFullConfig() ([]byte, error) { func getConfigFiles(fb flarehelpers.FlareBuilder, confSearchPaths SearchPaths) { for prefix, filePath := range confSearchPaths { - fb.CopyDirTo(filePath, prefix, func(path string) bool { + fb.CopyDirTo(filePath, filepath.Join("etc", "confd", prefix), func(path string) bool { // ignore .example file if filepath.Ext(path) == ".example" { return false @@ -340,7 +340,7 @@ func getConfigFiles(fb flarehelpers.FlareBuilder, confSearchPaths SearchPaths) { confDir := filepath.Dir(mainConfpath) // zip up the config file that was actually used, if one exists - fb.CopyFileTo(mainConfpath, filepath.Join("etc", "datadog-agent.yaml")) + fb.CopyFileTo(mainConfpath, filepath.Join("etc", "datadog.yaml")) // figure out system-probe file path based on main config path, and use best effort to include // system-probe.yaml to the flare @@ -450,17 +450,19 @@ func getTaggerList(remoteURL string) ([]byte, error) { return b.Bytes(), nil } -func getWorkloadList() ([]byte, error) { +func getAgentWorkloadList() ([]byte, error) { ipcAddress, err := config.GetIPCAddress() if err != nil { return nil, err } - workloadListURL := fmt.Sprintf("https://%v:%v/agent/workload-list/verbose", ipcAddress, config.Datadog.GetInt("cmd_port")) + return getWorkloadList(fmt.Sprintf("https://%v:%v/agent/workload-list?verbose=true", ipcAddress, config.Datadog.GetInt("cmd_port"))) +} +func getWorkloadList(url string) ([]byte, error) { c := apiutil.GetClient(false) // FIX: get certificates right then make this true - r, err := apiutil.DoGet(c, workloadListURL, apiutil.LeaveConnectionOpen) + r, err := apiutil.DoGet(c, url, apiutil.LeaveConnectionOpen) if err != nil { return nil, err } diff --git a/pkg/flare/archive_dca.go b/pkg/flare/archive_dca.go index 0ab1107cabf7c..c44ad253d4285 100644 --- a/pkg/flare/archive_dca.go +++ b/pkg/flare/archive_dca.go @@ -62,6 +62,8 @@ func createDCAArchive(fb flarehelpers.FlareBuilder, local bool, confSearchPaths getClusterAgentDiagnose(fb) //nolint:errcheck fb.AddFileFromFunc("envvars.log", getEnvVars) fb.AddFileFromFunc("telemetry.log", QueryDCAMetrics) + fb.AddFileFromFunc("tagger-list.json", getDCATaggerList) + fb.AddFileFromFunc("workload-list.log", getDCAWorkloadList) if config.Datadog.GetBool("external_metrics_provider.enabled") { getHPAStatus(fb) //nolint:errcheck @@ -154,3 +156,23 @@ func getClusterAgentDiagnose(fb flarehelpers.FlareBuilder) error { return fb.AddFile("diagnose.log", b.Bytes()) } + +func getDCATaggerList() ([]byte, error) { + ipcAddress, err := config.GetIPCAddress() + if err != nil { + return nil, err + } + + taggerListURL := fmt.Sprintf("https://%v:%v/tagger-list", ipcAddress, config.Datadog.GetInt("cluster_agent.cmd_port")) + + return getTaggerList(taggerListURL) +} + +func getDCAWorkloadList() ([]byte, error) { + ipcAddress, err := config.GetIPCAddress() + if err != nil { + return nil, err + } + + return getWorkloadList(fmt.Sprintf("https://%v:%v/workload-list?verbose=true", ipcAddress, config.Datadog.GetInt("cluster_agent.cmd_port"))) +} diff --git a/pkg/flare/archive_security.go b/pkg/flare/archive_security.go index 65fc835f4d36d..8c9c8f54e52c3 100644 --- a/pkg/flare/archive_security.go +++ b/pkg/flare/archive_security.go @@ -69,7 +69,7 @@ func getComplianceFiles(fb flarehelpers.FlareBuilder) error { } func getRuntimeFiles(fb flarehelpers.FlareBuilder) error { - runtimeDir := config.Datadog.GetString("runtime_security_config.policies.dir") + runtimeDir := config.SystemProbe.GetString("runtime_security_config.policies.dir") return fb.CopyDirTo(runtimeDir, "runtime-security.d", func(path string) bool { f, err := os.Lstat(path) diff --git a/pkg/flare/archive_test.go b/pkg/flare/archive_test.go index 612a0c39d6331..9a5b95b7536a5 100644 --- a/pkg/flare/archive_test.go +++ b/pkg/flare/archive_test.go @@ -52,7 +52,7 @@ func TestIncludeSystemProbeConfig(t *testing.T) { mock := flarehelpers.NewFlareBuilderMock(t) getConfigFiles(mock.Fb, SearchPaths{"": "./test/confd"}) - mock.AssertFileExists("etc", "datadog-agent.yaml") + mock.AssertFileExists("etc", "datadog.yaml") mock.AssertFileExists("etc", "system-probe.yaml") } @@ -62,9 +62,20 @@ func TestIncludeConfigFiles(t *testing.T) { mock := flarehelpers.NewFlareBuilderMock(t) getConfigFiles(mock.Fb, SearchPaths{"": "./test/confd"}) - mock.AssertFileExists("test.yaml") - mock.AssertFileExists("test.Yml") - mock.AssertNoFileExists("not_included.conf") + mock.AssertFileExists("etc/confd/test.yaml") + mock.AssertFileExists("etc/confd/test.Yml") + mock.AssertNoFileExists("etc/confd/not_included.conf") +} + +func TestIncludeConfigFilesWithPrefix(t *testing.T) { + common.SetupConfig("./test") + + mock := flarehelpers.NewFlareBuilderMock(t) + getConfigFiles(mock.Fb, SearchPaths{"prefix": "./test/confd"}) + + mock.AssertFileExists("etc/confd/prefix/test.yaml") + mock.AssertFileExists("etc/confd/prefix/test.Yml") + mock.AssertNoFileExists("etc/confd/prefix/not_included.conf") } func createTestFile(t *testing.T, filename string) string { @@ -77,7 +88,7 @@ func TestRegistryJSON(t *testing.T) { srcDir := createTestFile(t, "registry.json") confMock := config.Mock(t) - confMock.Set("logs_config.run_path", srcDir) + confMock.Set("logs_config.run_path", filepath.Dir(srcDir)) mock := flarehelpers.NewFlareBuilderMock(t) getRegistryJSON(mock.Fb) @@ -147,7 +158,7 @@ func TestGetWorkloadList(t *testing.T) { setupIPCAddress(t, s.URL) - content, err := getWorkloadList() + content, err := getAgentWorkloadList() require.NoError(t, err) assert.Contains(t, string(content), "kind_id") @@ -175,7 +186,7 @@ func TestVersionHistory(t *testing.T) { srcDir := createTestFile(t, "version-history.json") confMock := config.Mock(t) - confMock.Set("run_path", srcDir) + confMock.Set("run_path", filepath.Dir(srcDir)) mock := flarehelpers.NewFlareBuilderMock(t) getVersionHistory(mock.Fb) diff --git a/pkg/forwarder/endpoints/endpoints.go b/pkg/forwarder/endpoints/endpoints.go index bef40361f22b1..34b0ae55a4e4c 100644 --- a/pkg/forwarder/endpoints/endpoints.go +++ b/pkg/forwarder/endpoints/endpoints.go @@ -56,4 +56,8 @@ var ( OrchestratorManifestEndpoint = transaction.Endpoint{Route: "/api/v2/orchmanif", Name: "orchmanifest"} // ContainerLifecycleEndpoint is an event platform endpoint used to send container lifecycle events ContainerLifecycleEndpoint = transaction.Endpoint{Route: "/api/v2/contlcycle", Name: "contlcycle"} + // ContainerImageEndpoint is an event platform endpoint used to send container images + ContainerImageEndpoint = transaction.Endpoint{Route: "/api/v2/contimage", Name: "contimage"} + // SBOMEndpoint is an event platform endpoint used to send SBOM + SBOMEndpoint = transaction.Endpoint{Route: "/api/v2/sbom", Name: "sbom"} ) diff --git a/pkg/forwarder/forwarder.go b/pkg/forwarder/forwarder.go index 40499abbd0a3a..a2affdb15b3a6 100644 --- a/pkg/forwarder/forwarder.go +++ b/pkg/forwarder/forwarder.go @@ -75,6 +75,8 @@ type Forwarder interface { SubmitOrchestratorChecks(payload transaction.BytesPayloads, extra http.Header, payloadType int) (chan Response, error) SubmitOrchestratorManifests(payload transaction.BytesPayloads, extra http.Header) (chan Response, error) SubmitContainerLifecycleEvents(payload transaction.BytesPayloads, extra http.Header) error + SubmitContainerImages(payload transaction.BytesPayloads, extra http.Header) error + SubmitSBOM(payload transaction.BytesPayloads, extra http.Header) error } // Compile-time check to ensure that DefaultForwarder implements the Forwarder interface @@ -419,11 +421,11 @@ func (f *DefaultForwarder) State() uint32 { return f.internalState.Load() } -func (f *DefaultForwarder) createHTTPTransactions(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, apiKeyInQueryString bool, extra http.Header) []*transaction.HTTPTransaction { - return f.createAdvancedHTTPTransactions(endpoint, payloads, apiKeyInQueryString, extra, transaction.TransactionPriorityNormal, true) +func (f *DefaultForwarder) createHTTPTransactions(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, extra http.Header) []*transaction.HTTPTransaction { + return f.createAdvancedHTTPTransactions(endpoint, payloads, extra, transaction.TransactionPriorityNormal, true) } -func (f *DefaultForwarder) createAdvancedHTTPTransactions(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, apiKeyInQueryString bool, extra http.Header, priority transaction.Priority, storableOnDisk bool) []*transaction.HTTPTransaction { +func (f *DefaultForwarder) createAdvancedHTTPTransactions(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, extra http.Header, priority transaction.Priority, storableOnDisk bool) []*transaction.HTTPTransaction { transactions := make([]*transaction.HTTPTransaction, 0, len(payloads)*len(f.domainForwarders)) allowArbitraryTags := config.Datadog.GetBool("allow_arbitrary_tags") @@ -433,9 +435,6 @@ func (f *DefaultForwarder) createAdvancedHTTPTransactions(endpoint transaction.E t := transaction.NewHTTPTransaction() t.Domain, _ = dr.Resolve(endpoint) t.Endpoint = endpoint - if apiKeyInQueryString { - t.Endpoint.Route = fmt.Sprintf("%s?api_key=%s", endpoint.Route, apiKey) - } t.Payload = payload t.Priority = priority t.StorableOnDisk = storableOnDisk @@ -513,53 +512,53 @@ func (f *DefaultForwarder) sendHTTPTransactions(transactions []*transaction.HTTP // SubmitSketchSeries will send payloads to Datadog backend - PROTOTYPE FOR PERCENTILE func (f *DefaultForwarder) SubmitSketchSeries(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.createHTTPTransactions(endpoints.SketchSeriesEndpoint, payload, false, extra) + transactions := f.createHTTPTransactions(endpoints.SketchSeriesEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } // SubmitHostMetadata will send a host_metadata tag type payload to Datadog backend. func (f *DefaultForwarder) SubmitHostMetadata(payload transaction.BytesPayloads, extra http.Header) error { return f.submitV1IntakeWithTransactionsFactory(payload, extra, - func(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, apiKeyInQueryString bool, extra http.Header) []*transaction.HTTPTransaction { + func(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, extra http.Header) []*transaction.HTTPTransaction { // Host metadata contains the API KEY and should not be stored on disk. storableOnDisk := false - return f.createAdvancedHTTPTransactions(endpoint, payloads, apiKeyInQueryString, extra, transaction.TransactionPriorityHigh, storableOnDisk) + return f.createAdvancedHTTPTransactions(endpoint, payloads, extra, transaction.TransactionPriorityHigh, storableOnDisk) }) } // SubmitAgentChecksMetadata will send a agentchecks_metadata tag type payload to Datadog backend. func (f *DefaultForwarder) SubmitAgentChecksMetadata(payload transaction.BytesPayloads, extra http.Header) error { return f.submitV1IntakeWithTransactionsFactory(payload, extra, - func(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, apiKeyInQueryString bool, extra http.Header) []*transaction.HTTPTransaction { + func(endpoint transaction.Endpoint, payloads transaction.BytesPayloads, extra http.Header) []*transaction.HTTPTransaction { // Agentchecks metadata contains the API KEY and should not be stored on disk. storableOnDisk := false - return f.createAdvancedHTTPTransactions(endpoint, payloads, apiKeyInQueryString, extra, transaction.TransactionPriorityNormal, storableOnDisk) + return f.createAdvancedHTTPTransactions(endpoint, payloads, extra, transaction.TransactionPriorityNormal, storableOnDisk) }) } // SubmitMetadata will send a metadata type payload to Datadog backend. func (f *DefaultForwarder) SubmitMetadata(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.createHTTPTransactions(endpoints.V1MetadataEndpoint, payload, false, extra) + transactions := f.createHTTPTransactions(endpoints.V1MetadataEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } // SubmitV1Series will send timeserie to v1 endpoint (this will be remove once // the backend handles v2 endpoints). func (f *DefaultForwarder) SubmitV1Series(payloads transaction.BytesPayloads, extra http.Header) error { - transactions := f.createHTTPTransactions(endpoints.V1SeriesEndpoint, payloads, true, extra) + transactions := f.createHTTPTransactions(endpoints.V1SeriesEndpoint, payloads, extra) return f.sendHTTPTransactions(transactions) } // SubmitSeries will send timeseries to the v2 endpoint func (f *DefaultForwarder) SubmitSeries(payloads transaction.BytesPayloads, extra http.Header) error { - transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payloads, false, extra) + transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payloads, extra) return f.sendHTTPTransactions(transactions) } // SubmitV1CheckRuns will send service checks to v1 endpoint (this will be removed once // the backend handles v2 endpoints). func (f *DefaultForwarder) SubmitV1CheckRuns(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.createHTTPTransactions(endpoints.V1CheckRunsEndpoint, payload, true, extra) + transactions := f.createHTTPTransactions(endpoints.V1CheckRunsEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } @@ -571,8 +570,8 @@ func (f *DefaultForwarder) SubmitV1Intake(payload transaction.BytesPayloads, ext func (f *DefaultForwarder) submitV1IntakeWithTransactionsFactory( payload transaction.BytesPayloads, extra http.Header, - createHTTPTransactions func(endpoint transaction.Endpoint, payload transaction.BytesPayloads, apiKeyInQueryString bool, extra http.Header) []*transaction.HTTPTransaction) error { - transactions := createHTTPTransactions(endpoints.V1IntakeEndpoint, payload, true, extra) + createHTTPTransactions func(endpoint transaction.Endpoint, payload transaction.BytesPayloads, extra http.Header) []*transaction.HTTPTransaction) error { + transactions := createHTTPTransactions(endpoints.V1IntakeEndpoint, payload, extra) // the intake endpoint requires the Content-Type header to be set for _, t := range transactions { @@ -636,12 +635,24 @@ func (f *DefaultForwarder) SubmitOrchestratorManifests(payload transaction.Bytes // SubmitContainerLifecycleEvents sends container lifecycle events func (f *DefaultForwarder) SubmitContainerLifecycleEvents(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.createHTTPTransactions(endpoints.ContainerLifecycleEndpoint, payload, false, extra) + transactions := f.createHTTPTransactions(endpoints.ContainerLifecycleEndpoint, payload, extra) + return f.sendHTTPTransactions(transactions) +} + +// SubmitContainerImages sends container image +func (f *DefaultForwarder) SubmitContainerImages(payload transaction.BytesPayloads, extra http.Header) error { + transactions := f.createHTTPTransactions(endpoints.ContainerImageEndpoint, payload, extra) + return f.sendHTTPTransactions(transactions) +} + +// SubmitSBOM sends SBOM +func (f *DefaultForwarder) SubmitSBOM(payload transaction.BytesPayloads, extra http.Header) error { + transactions := f.createHTTPTransactions(endpoints.SBOMEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } func (f *DefaultForwarder) submitProcessLikePayload(ep transaction.Endpoint, payload transaction.BytesPayloads, extra http.Header, retryable bool) (chan Response, error) { - transactions := f.createHTTPTransactions(ep, payload, false, extra) + transactions := f.createHTTPTransactions(ep, payload, extra) results := make(chan Response, len(transactions)) internalResults := make(chan Response, len(transactions)) expectedResponses := len(transactions) diff --git a/pkg/forwarder/forwarder_test.go b/pkg/forwarder/forwarder_test.go index cceabc44cc092..b385dda342863 100644 --- a/pkg/forwarder/forwarder_test.go +++ b/pkg/forwarder/forwarder_test.go @@ -10,7 +10,6 @@ import ( "io" "net/http" "net/http/httptest" - "strings" "sync" "testing" "time" @@ -130,6 +129,9 @@ func TestSubmitIfStopped(t *testing.T) { assert.NotNil(t, forwarder.SubmitSeries(nil, make(http.Header))) assert.NotNil(t, forwarder.SubmitV1Intake(nil, make(http.Header))) assert.NotNil(t, forwarder.SubmitV1CheckRuns(nil, make(http.Header))) + assert.NotNil(t, forwarder.SubmitContainerLifecycleEvents(nil, make(http.Header))) + assert.NotNil(t, forwarder.SubmitContainerImages(nil, make(http.Header))) + assert.NotNil(t, forwarder.SubmitSBOM(nil, make(http.Header))) } func TestCreateHTTPTransactions(t *testing.T) { @@ -141,7 +143,7 @@ func TestCreateHTTPTransactions(t *testing.T) { headers := make(http.Header) headers.Set("HTTP-MAGIC", "foo") - transactions := forwarder.createHTTPTransactions(endpoint, payloads, false, headers) + transactions := forwarder.createHTTPTransactions(endpoint, payloads, headers) require.Len(t, transactions, 4) assert.Equal(t, testVersionDomain, transactions[0].Domain) assert.Equal(t, testVersionDomain, transactions[1].Domain) @@ -161,13 +163,6 @@ func TestCreateHTTPTransactions(t *testing.T) { assert.Equal(t, p1, transactions[1].Payload.GetContent()) assert.Equal(t, p2, transactions[2].Payload.GetContent()) assert.Equal(t, p2, transactions[3].Payload.GetContent()) - - transactions = forwarder.createHTTPTransactions(endpoint, payloads, true, headers) - require.Len(t, transactions, 4) - assert.Contains(t, transactions[0].Endpoint.Route, "api_key=api-key-1") - assert.Contains(t, transactions[1].Endpoint.Route, "api_key=api-key-2") - assert.Contains(t, transactions[2].Endpoint.Route, "api_key=api-key-1") - assert.Contains(t, transactions[3].Endpoint.Route, "api_key=api-key-2") } func TestCreateHTTPTransactionsWithMultipleDomains(t *testing.T) { @@ -178,7 +173,7 @@ func TestCreateHTTPTransactionsWithMultipleDomains(t *testing.T) { headers := make(http.Header) headers.Set("HTTP-MAGIC", "foo") - transactions := forwarder.createHTTPTransactions(endpoint, payloads, true, headers) + transactions := forwarder.createHTTPTransactions(endpoint, payloads, headers) require.Len(t, transactions, 3, "should contain 3 transactions, contains %d", len(transactions)) var txNormal, txBar []*transaction.HTTPTransaction @@ -194,14 +189,15 @@ func TestCreateHTTPTransactionsWithMultipleDomains(t *testing.T) { assert.Equal(t, len(txNormal), 2, "Two transactions should target the normal domain") assert.Equal(t, len(txBar), 1, "One transactions should target the normal domain") - if strings.HasSuffix(txNormal[0].Endpoint.Route, "api-key-1") { - assert.Equal(t, txNormal[0].Endpoint.Route, "/api/foo?api_key=api-key-1") - assert.Equal(t, txNormal[1].Endpoint.Route, "/api/foo?api_key=api-key-2") + if txNormal[0].Headers.Get("DD-Api-Key") == "api-key-1" { + assert.Equal(t, txNormal[0].Headers.Get("DD-Api-Key"), "api-key-1") + assert.Equal(t, txNormal[1].Headers.Get("DD-Api-Key"), "api-key-2") } else { - assert.Equal(t, txNormal[0].Endpoint.Route, "/api/foo?api_key=api-key-2") - assert.Equal(t, txNormal[1].Endpoint.Route, "/api/foo?api_key=api-key-1") + assert.Equal(t, txNormal[0].Headers.Get("DD-Api-Key"), "api-key-2") + assert.Equal(t, txNormal[1].Headers.Get("DD-Api-Key"), "api-key-1") } - assert.Equal(t, txBar[0].Endpoint.Route, "/api/foo?api_key=api-key-3") + + assert.Equal(t, txBar[0].Headers.Get("DD-Api-Key"), "api-key-3") } func TestCreateHTTPTransactionsWithDifferentResolvers(t *testing.T) { @@ -216,7 +212,7 @@ func TestCreateHTTPTransactionsWithDifferentResolvers(t *testing.T) { headers := make(http.Header) headers.Set("HTTP-MAGIC", "foo") - transactions := forwarder.createHTTPTransactions(endpoint, payloads, true, headers) + transactions := forwarder.createHTTPTransactions(endpoint, payloads, headers) require.Len(t, transactions, 4, "should contain 4 transactions, contains %d", len(transactions)) var txNormal, txBar, txVector []*transaction.HTTPTransaction @@ -235,15 +231,15 @@ func TestCreateHTTPTransactionsWithDifferentResolvers(t *testing.T) { assert.Equal(t, len(txNormal), 2, "Two transactions should target the normal domain") assert.Equal(t, len(txBar), 1, "One transactions should target the normal domain") - if strings.HasSuffix(txNormal[0].Endpoint.Route, "api-key-1") { - assert.Equal(t, txNormal[0].Endpoint.Route, "/api/foo?api_key=api-key-1") - assert.Equal(t, txNormal[1].Endpoint.Route, "/api/foo?api_key=api-key-2") + if txNormal[0].Headers.Get("DD-Api-Key") == "api-key-1" { + assert.Equal(t, txNormal[0].Headers.Get("DD-Api-Key"), "api-key-1") + assert.Equal(t, txNormal[1].Headers.Get("DD-Api-Key"), "api-key-2") } else { - assert.Equal(t, txNormal[0].Endpoint.Route, "/api/foo?api_key=api-key-2") - assert.Equal(t, txNormal[1].Endpoint.Route, "/api/foo?api_key=api-key-1") + assert.Equal(t, txNormal[0].Headers.Get("DD-Api-Key"), "api-key-2") + assert.Equal(t, txNormal[1].Headers.Get("DD-Api-Key"), "api-key-1") } - assert.Equal(t, txBar[0].Endpoint.Route, "/api/foo?api_key=api-key-3") - assert.Equal(t, txVector[0].Endpoint.Route, "/api/foo?api_key=api-key-4") + assert.Equal(t, txBar[0].Headers.Get("DD-Api-Key"), "api-key-3") + assert.Equal(t, txVector[0].Headers.Get("DD-Api-Key"), "api-key-4") } func TestCreateHTTPTransactionsWithOverrides(t *testing.T) { @@ -259,17 +255,17 @@ func TestCreateHTTPTransactionsWithOverrides(t *testing.T) { headers := make(http.Header) headers.Set("HTTP-MAGIC", "foo") - transactions := forwarder.createHTTPTransactions(endpoint, payloads, true, headers) + transactions := forwarder.createHTTPTransactions(endpoint, payloads, headers) require.Len(t, transactions, 1, "should contain 1 transaction, contains %d", len(transactions)) - assert.Equal(t, transactions[0].Endpoint.Route, "/api/foo?api_key=api-key-1") + assert.Equal(t, transactions[0].Endpoint.Route, "/api/foo") assert.Equal(t, transactions[0].Domain, testVersionDomain) endpoint.Name = "diverted" - transactions = forwarder.createHTTPTransactions(endpoint, payloads, true, headers) + transactions = forwarder.createHTTPTransactions(endpoint, payloads, headers) require.Len(t, transactions, 1, "should contain 1 transaction, contains %d", len(transactions)) - assert.Equal(t, transactions[0].Endpoint.Route, "/api/foo?api_key=api-key-1") + assert.Equal(t, transactions[0].Endpoint.Route, "/api/foo") assert.Equal(t, transactions[0].Domain, "vector.tld") } @@ -283,7 +279,7 @@ func TestArbitraryTagsHTTPHeader(t *testing.T) { payload := []byte("A payload") headers := make(http.Header) - transactions := forwarder.createHTTPTransactions(endpoint, transaction.NewBytesPayloadsWithoutMetaData([]*[]byte{&payload}), false, headers) + transactions := forwarder.createHTTPTransactions(endpoint, transaction.NewBytesPayloadsWithoutMetaData([]*[]byte{&payload}), headers) require.True(t, len(transactions) > 0) assert.Equal(t, "true", transactions[0].Headers.Get(arbitraryTagHTTPHeaderKey)) } @@ -294,7 +290,7 @@ func TestSendHTTPTransactions(t *testing.T) { p1 := []byte("A payload") payloads := transaction.NewBytesPayloadsWithoutMetaData([]*[]byte{&p1}) headers := make(http.Header) - tr := forwarder.createHTTPTransactions(endpoint, payloads, false, headers) + tr := forwarder.createHTTPTransactions(endpoint, payloads, headers) // fw is stopped, we should get an error err := forwarder.sendHTTPTransactions(tr) @@ -391,6 +387,15 @@ func TestForwarderEndtoEnd(t *testing.T) { assert.Nil(t, f.SubmitMetadata(payload, headers)) numReqs += 4 + assert.Nil(t, f.SubmitContainerLifecycleEvents(payload, headers)) + numReqs += 4 + + assert.Nil(t, f.SubmitContainerImages(payload, headers)) + numReqs += 4 + + assert.Nil(t, f.SubmitSBOM(payload, headers)) + numReqs += 4 + // let's wait a second for every channel communication to trigger <-time.After(1 * time.Second) @@ -424,7 +429,7 @@ func TestTransactionEventHandlers(t *testing.T) { headers := http.Header{} headers.Set("key", "value") - transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, false, headers) + transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, headers) require.Len(t, transactions, 1) attempts := atomic.NewInt64(0) @@ -482,7 +487,7 @@ func TestTransactionEventHandlersOnRetry(t *testing.T) { headers := http.Header{} headers.Set("key", "value") - transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, false, headers) + transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, headers) require.Len(t, transactions, 1) attempts := atomic.NewInt64(0) @@ -536,7 +541,7 @@ func TestTransactionEventHandlersNotRetryable(t *testing.T) { headers := http.Header{} headers.Set("key", "value") - transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, false, headers) + transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, headers) require.Len(t, transactions, 1) attempts := atomic.NewInt64(0) @@ -595,7 +600,7 @@ func TestProcessLikePayloadResponseTimeout(t *testing.T) { headers := http.Header{} headers.Set("key", "value") - transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, false, headers) + transactions := f.createHTTPTransactions(endpoints.SeriesEndpoint, payload, headers) require.Len(t, transactions, 1) responses, err := f.submitProcessLikePayload(endpoints.SeriesEndpoint, payload, headers, true) diff --git a/pkg/forwarder/internal/retry/queue_duration_capacity.go b/pkg/forwarder/internal/retry/queue_duration_capacity.go index 72381354cfb35..f2c622f1b36bd 100644 --- a/pkg/forwarder/internal/retry/queue_duration_capacity.go +++ b/pkg/forwarder/internal/retry/queue_duration_capacity.go @@ -16,7 +16,7 @@ import ( // the in-memory retry queue and the disk storage retry queue can store. // For each domain, the capacity in bytes is the sum of: // - the in-memory retry queue capacity. We assume there is enough memory for all in-memory retry queues (one by domain) -// - the available disk storage * `domain relative speed`` where `domain relative speed` is the number of +// - the available disk storage * `domain relative speed` where `domain relative speed` is the number of // bytes per second for this domain, divided by the total number of bytes per second for all domains. If a domain receives // twice the traffic compared to anoter one, twice disk storage capacity is allocated to this domain. Disk storage is shared // across domain. diff --git a/pkg/forwarder/noop_forwarder.go b/pkg/forwarder/noop_forwarder.go index 49433d3369d4e..1f1ca7a25a295 100644 --- a/pkg/forwarder/noop_forwarder.go +++ b/pkg/forwarder/noop_forwarder.go @@ -105,6 +105,16 @@ func (f NoopForwarder) SubmitContainerLifecycleEvents(payload transaction.BytesP return nil } +// SubmitContainerImages does nothing. +func (f NoopForwarder) SubmitContainerImages(payload transaction.BytesPayloads, extra http.Header) error { + return nil +} + +// SubmitSBOM does nothing. +func (f NoopForwarder) SubmitSBOM(payload transaction.BytesPayloads, extra http.Header) error { + return nil +} + // SubmitOrchestratorManifests does nothing. func (f NoopForwarder) SubmitOrchestratorManifests(payload transaction.BytesPayloads, extra http.Header) (chan Response, error) { return nil, nil diff --git a/pkg/forwarder/sync_forwarder.go b/pkg/forwarder/sync_forwarder.go index cef6b475dc536..f0d2f1b4c6214 100644 --- a/pkg/forwarder/sync_forwarder.go +++ b/pkg/forwarder/sync_forwarder.go @@ -64,19 +64,19 @@ func (f *SyncForwarder) sendHTTPTransactions(transactions []*transaction.HTTPTra // SubmitV1Series will send timeserie to v1 endpoint (this will be remove once // the backend handles v2 endpoints). func (f *SyncForwarder) SubmitV1Series(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.defaultForwarder.createHTTPTransactions(endpoints.V1SeriesEndpoint, payload, true, extra) + transactions := f.defaultForwarder.createHTTPTransactions(endpoints.V1SeriesEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } // SubmitSeries will send timeseries to the v2 endpoint func (f *SyncForwarder) SubmitSeries(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.defaultForwarder.createHTTPTransactions(endpoints.SeriesEndpoint, payload, true, extra) + transactions := f.defaultForwarder.createHTTPTransactions(endpoints.SeriesEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } // SubmitV1Intake will send payloads to the universal `/intake/` endpoint used by Agent v.5 func (f *SyncForwarder) SubmitV1Intake(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.defaultForwarder.createHTTPTransactions(endpoints.V1IntakeEndpoint, payload, true, extra) + transactions := f.defaultForwarder.createHTTPTransactions(endpoints.V1IntakeEndpoint, payload, extra) // the intake endpoint requires the Content-Type header to be set for _, t := range transactions { t.Headers.Set("Content-Type", "application/json") @@ -87,13 +87,13 @@ func (f *SyncForwarder) SubmitV1Intake(payload transaction.BytesPayloads, extra // SubmitV1CheckRuns will send service checks to v1 endpoint (this will be removed once // the backend handles v2 endpoints). func (f *SyncForwarder) SubmitV1CheckRuns(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.defaultForwarder.createHTTPTransactions(endpoints.V1CheckRunsEndpoint, payload, true, extra) + transactions := f.defaultForwarder.createHTTPTransactions(endpoints.V1CheckRunsEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } // SubmitSketchSeries will send payloads to Datadog backend - PROTOTYPE FOR PERCENTILE func (f *SyncForwarder) SubmitSketchSeries(payload transaction.BytesPayloads, extra http.Header) error { - transactions := f.defaultForwarder.createHTTPTransactions(endpoints.SketchSeriesEndpoint, payload, true, extra) + transactions := f.defaultForwarder.createHTTPTransactions(endpoints.SketchSeriesEndpoint, payload, extra) return f.sendHTTPTransactions(transactions) } @@ -161,3 +161,13 @@ func (f *SyncForwarder) SubmitOrchestratorManifests(payload transaction.BytesPay func (f *SyncForwarder) SubmitContainerLifecycleEvents(payload transaction.BytesPayloads, extra http.Header) error { return f.defaultForwarder.SubmitContainerLifecycleEvents(payload, extra) } + +// SubmitContainerImages sends container image +func (f *SyncForwarder) SubmitContainerImages(payload transaction.BytesPayloads, extra http.Header) error { + return f.defaultForwarder.SubmitContainerImages(payload, extra) +} + +// SubmitSBOM sends SBOM +func (f *SyncForwarder) SubmitSBOM(payload transaction.BytesPayloads, extra http.Header) error { + return f.defaultForwarder.SubmitSBOM(payload, extra) +} diff --git a/pkg/forwarder/test_common.go b/pkg/forwarder/test_common.go index 2525e78050d3b..765bf901cd155 100644 --- a/pkg/forwarder/test_common.go +++ b/pkg/forwarder/test_common.go @@ -183,3 +183,13 @@ func (tf *MockedForwarder) SubmitOrchestratorManifests(payload transaction.Bytes func (tf *MockedForwarder) SubmitContainerLifecycleEvents(payload transaction.BytesPayloads, extra http.Header) error { return tf.Called(payload, extra).Error(0) } + +// SubmitContainerImages mock +func (tf *MockedForwarder) SubmitContainerImages(payload transaction.BytesPayloads, extra http.Header) error { + return tf.Called(payload, extra).Error(0) +} + +// SubmitSBOM mock +func (tf *MockedForwarder) SubmitSBOM(payload transaction.BytesPayloads, extra http.Header) error { + return tf.Called(payload, extra).Error(0) +} diff --git a/pkg/forwarder/transaction/transaction.go b/pkg/forwarder/transaction/transaction.go index 751c31f553227..5fbad4756d427 100644 --- a/pkg/forwarder/transaction/transaction.go +++ b/pkg/forwarder/transaction/transaction.go @@ -300,7 +300,7 @@ func (t *HTTPTransaction) internalProcess(ctx context.Context, client *http.Clie transactionEndpointName := t.GetEndpointName() logURL := scrubber.ScrubLine(url) // sanitized url that can be logged - req, err := http.NewRequest("POST", url, reader) + req, err := http.NewRequestWithContext(ctx, "POST", url, reader) if err != nil { log.Errorf("Could not create request for transaction to invalid URL %q (dropping transaction): %s", logURL, err) transactionsErrors.Add(1) @@ -308,7 +308,6 @@ func (t *HTTPTransaction) internalProcess(ctx context.Context, client *http.Clie transactionsSentRequestErrors.Add(1) return 0, nil, nil } - req = req.WithContext(ctx) req.Header = t.Headers resp, err := client.Do(req) diff --git a/pkg/jmxfetch/jmxfetch.go b/pkg/jmxfetch/jmxfetch.go index f956ccecda5de..567c382196740 100644 --- a/pkg/jmxfetch/jmxfetch.go +++ b/pkg/jmxfetch/jmxfetch.go @@ -108,7 +108,7 @@ type checkInitCfg struct { JavaOptions string `yaml:"java_options,omitempty"` } -// Monitor TODO : IML-199 +// Monitor monitors this JMXFetch instance, waiting for JMX to stop. Gracefully handles restarting the JMXFetch process. func (j *JMXFetch) Monitor() { limiter := newRestartLimiter(config.Datadog.GetInt("jmx_max_restarts"), float64(config.Datadog.GetInt("jmx_restart_interval"))) ticker := time.NewTicker(500 * time.Millisecond) diff --git a/pkg/logs/client/http/destination.go b/pkg/logs/client/http/destination.go index d2b6f80461592..e2891d96b31c1 100644 --- a/pkg/logs/client/http/destination.go +++ b/pkg/logs/client/http/destination.go @@ -14,6 +14,7 @@ import ( "io" "net/http" "net/url" + "strconv" "sync" "time" @@ -206,9 +207,10 @@ func (d *Destination) sendAndRetry(payload *message.Payload, output chan *messag for { d.retryLock.Lock() - d.blockedUntil = time.Now().Add(d.backoff.GetBackoffDuration(d.nbErrors)) + backoffDuration := d.backoff.GetBackoffDuration(d.nbErrors) + d.blockedUntil = time.Now().Add(backoffDuration) if d.blockedUntil.After(time.Now()) { - log.Debugf("%s: sleeping until %v before retrying", d.url, d.blockedUntil) + log.Debugf("%s: sleeping until %v before retrying. Backoff duration %s due to %d errors", d.url, d.blockedUntil, backoffDuration.String(), d.nbErrors) d.waitForBackoff() } d.retryLock.Unlock() @@ -218,11 +220,11 @@ func (d *Destination) sendAndRetry(payload *message.Payload, output chan *messag if err != nil { metrics.DestinationErrors.Add(1) metrics.TlmDestinationErrors.Inc() + log.Warnf("Could not send payload: %v", err) } if err == context.Canceled { d.updateRetryState(nil, isRetrying) - log.Warnf("Could not send payload: %v", err) return } @@ -295,8 +297,13 @@ func (d *Destination) unconditionalSend(payload *message.Payload) (err error) { if err != nil { // the read failed because the server closed or terminated the connection // *after* serving the request. + log.Debugf("Server closed or terminated the connection after serving the request with err %v", err) return err } + + metrics.DestinationHttpRespByStatusAndUrl.Add(strconv.Itoa(resp.StatusCode), 1) + metrics.TlmDestinationHttpRespByStatusAndUrl.Inc(strconv.Itoa(resp.StatusCode), d.url) + if resp.StatusCode >= http.StatusBadRequest { log.Warnf("failed to post http payload. code=%d host=%s response=%s", resp.StatusCode, d.host, string(response)) } diff --git a/pkg/logs/config/endpoints_test.go b/pkg/logs/config/endpoints_test.go index c1b2461a75e14..64f3f06562997 100644 --- a/pkg/logs/config/endpoints_test.go +++ b/pkg/logs/config/endpoints_test.go @@ -237,7 +237,7 @@ func (suite *EndpointsTestSuite) TestBuildEndpointsShouldFallbackOnDefaultWithIn } } -//When migrating the agent v5 to v6, logs_dd_url is set to empty. Default to the dd_url/site already set instead. +// When migrating the agent v5 to v6, logs_dd_url is set to empty. Default to the dd_url/site already set instead. func (suite *EndpointsTestSuite) TestBuildEndpointsShouldSucceedWhenMigratingToAgentV6() { suite.config.Set("logs_config.logs_dd_url", "") endpoints, err := BuildEndpoints(HTTPConnectivityFailure, "test-track", "test-proto", "test-source") diff --git a/pkg/logs/internal/launchers/container/tailerfactory/tailers/socket.go b/pkg/logs/internal/launchers/container/tailerfactory/tailers/socket.go index 5c9b97034f5bd..67197f5ee6f07 100644 --- a/pkg/logs/internal/launchers/container/tailerfactory/tailers/socket.go +++ b/pkg/logs/internal/launchers/container/tailerfactory/tailers/socket.go @@ -149,7 +149,17 @@ func (t *DockerSocketTailer) run( case <-t.ctx.Done(): // the launcher has requested that the tailer stop if inner != nil { + // Ensure any pending errors are cleared when we try to stop the tailer. Since erroredContainerID + // is unbuffered, any pending writes to this channel could cause a deadlock as the tailers stop + // condition is managed in the same goroutine in dockerTailerPkg. + go func() { + for range erroredContainerID { + } + }() stopTailer(inner) + if erroredContainerID != nil { + close(erroredContainerID) + } } return diff --git a/pkg/logs/internal/launchers/container/tailerfactory/tailers/socket_test.go b/pkg/logs/internal/launchers/container/tailerfactory/tailers/socket_test.go index baf7690b33d30..df1e551af3a40 100644 --- a/pkg/logs/internal/launchers/container/tailerfactory/tailers/socket_test.go +++ b/pkg/logs/internal/launchers/container/tailerfactory/tailers/socket_test.go @@ -84,6 +84,43 @@ func TestDockerSocketTailer_run_erroredContainer(t *testing.T) { require.Equal(t, int32(3), tailerStopped.Load()) } +func TestDockerSocketTailer_run_canStopWithError(t *testing.T) { + dst := &DockerSocketTailer{} + dst.ctx, dst.cancel = context.WithCancel(context.Background()) + dst.stopped = make(chan struct{}) + + tailerStarted := atomic.NewInt32(0) + tailerStopped := atomic.NewInt32(0) + + // emulate dst.Start(), but with fake tryStartTailer and stopTailer + erroredContainerID := make(chan string) + go dst.run( + func() (*dockerTailerPkg.Tailer, chan string, error) { + tailerStarted.Inc() + return &dockerTailerPkg.Tailer{}, erroredContainerID, nil + }, + func(*dockerTailerPkg.Tailer) { + // Simulate an error occurring at the same time as as the tailer is trying to stop. + // This can happen in the real socket tailer implementation as these errors are handled by + // the same goroutine that manages the tailer shutdown. This test ensures any pending errors + // do not prevent the tailer from being stopped. + erroredContainerID <- "abcd" + tailerStopped.Inc() + }) + + // wait until the inner tailer has started + for tailerStarted.Load() < 1 { + time.Sleep(1 * time.Millisecond) + } + + // stop the tailer - this should not block. + dst.Stop() + + // check that the tailer was started and subsequently stopped + require.Equal(t, int32(1), tailerStarted.Load()) + require.Equal(t, int32(1), tailerStopped.Load()) +} + func TestDockerSocketTailer_run_error_starting(t *testing.T) { backoffInitialDuration = 1 * time.Millisecond defer func() { backoffInitialDuration = 1 * time.Second }() diff --git a/pkg/logs/internal/launchers/docker/container.go b/pkg/logs/internal/launchers/docker/container.go index 1b637a5af8f45..16c0080358973 100644 --- a/pkg/logs/internal/launchers/docker/container.go +++ b/pkg/logs/internal/launchers/docker/container.go @@ -90,7 +90,7 @@ func (c *Container) getShortImageName(ctx context.Context) (string, error) { log.Debugf("Could not resolve image name %s: %s", imageName, err) return shortName, err } - _, shortName, _, err = containers.SplitImageName(imageName) + _, _, shortName, _, err = containers.SplitImageName(imageName) if err != nil { log.Debugf("Cannot parse image name: %v", err) } diff --git a/pkg/logs/internal/metrics/metrics.go b/pkg/logs/internal/metrics/metrics.go index 64255bccc035c..e7d65cfc9817d 100644 --- a/pkg/logs/internal/metrics/metrics.go +++ b/pkg/logs/internal/metrics/metrics.go @@ -59,7 +59,8 @@ var ( // DestinationExpVars a map of sender utilization metrics for each http destination DestinationExpVars = expvar.Map{} // TODO: Add LogsCollected for the total number of collected logs. - + DestinationHttpRespByStatusAndUrl = expvar.Map{} + TlmDestinationHttpRespByStatusAndUrl = telemetry.NewCounter("logs", "destination_http_resp", []string{"status_code", "url"}, "Count of http responses by status code and destination url") ) func init() { diff --git a/pkg/logs/internal/parsers/dockerfile/docker_file.go b/pkg/logs/internal/parsers/dockerfile/docker_file.go index 735739fffbb71..ccfb1c12dac9b 100644 --- a/pkg/logs/internal/parsers/dockerfile/docker_file.go +++ b/pkg/logs/internal/parsers/dockerfile/docker_file.go @@ -19,16 +19,16 @@ import ( // // For example: // -// `{"log":"a message","stream":"stderr","time":"2019-06-06T16:35:55.930852911Z"}` +// `{"log":"a message","stream":"stderr","time":"2019-06-06T16:35:55.930852911Z"}` // // returns: // -// parsers.Message { -// Content: []byte("a message"), -// Status: "error", -// Timestamp: "2019-06-06T16:35:55.930852911Z", -// IsPartial: false, -// } +// parsers.Message { +// Content: []byte("a message"), +// Status: "error", +// Timestamp: "2019-06-06T16:35:55.930852911Z", +// IsPartial: false, +// } func New() parsers.Parser { return &dockerFileFormat{} } diff --git a/pkg/logs/internal/parsers/dockerstream/docker_stream.go b/pkg/logs/internal/parsers/dockerstream/docker_stream.go index e79d6c7a6976a..135f452c2b2f4 100644 --- a/pkg/logs/internal/parsers/dockerstream/docker_stream.go +++ b/pkg/logs/internal/parsers/dockerstream/docker_stream.go @@ -123,9 +123,12 @@ func getDockerSeverity(msg []byte) string { // For example, a message that is 35kb will be of the form: `H M1H M2H M3` where "H" is what pre-pends each 16 Kb section. // This function removes the "H " between two partial messages sections while leaving the very first "H ". // Input: -// H M1H M2H M3 +// +// H M1H M2H M3 +// // Output: -// H M1M2M3 +// +// H M1M2M3 func removePartialDockerMetadata(msgToClean []byte) []byte { msg := []byte{} metadataLen := getDockerMetadataLength(msgToClean) diff --git a/pkg/logs/internal/tailers/docker/tailer.go b/pkg/logs/internal/tailers/docker/tailer.go index 104fe2ccdfbf8..d934ba238010b 100644 --- a/pkg/logs/internal/tailers/docker/tailer.go +++ b/pkg/logs/internal/tailers/docker/tailer.go @@ -42,9 +42,9 @@ type dockerContainerLogInterface interface { // To multiplex logs, docker adds a header to all logs with format '[SEV][TS] [MSG]'. // // This tailer contains three components, communicating with channels: -// - readForever -// - decoder -// - message forwarder +// - readForever +// - decoder +// - message forwarder type Tailer struct { // ContainerID is the ID of the container this tailer is tailing. ContainerID string diff --git a/pkg/logs/internal/tailers/journald/tailer.go b/pkg/logs/internal/tailers/journald/tailer.go index 2ef705172f529..f9fa5042c5f3a 100644 --- a/pkg/logs/internal/tailers/journald/tailer.go +++ b/pkg/logs/internal/tailers/journald/tailer.go @@ -274,20 +274,20 @@ func (t *Tailer) toMessage(entry *sdjournal.JournalEntry) *message.Message { // getContent returns all the fields of the entry as a json-string, // remapping "MESSAGE" into "message" and bundling all the other keys in a "journald" attribute. // ex: -// * journal-entry: -// { -// "MESSAGE": "foo", -// "_SYSTEMD_UNIT": "foo", -// ... -// } -// * message-content: -// { -// "message": "foo", -// "journald": { -// "_SYSTEMD_UNIT": "foo", -// ... -// } -// } +// - journal-entry: +// { +// "MESSAGE": "foo", +// "_SYSTEMD_UNIT": "foo", +// ... +// } +// - message-content: +// { +// "message": "foo", +// "journald": { +// "_SYSTEMD_UNIT": "foo", +// ... +// } +// } func (t *Tailer) getContent(entry *sdjournal.JournalEntry) []byte { payload := make(map[string]interface{}) fields := entry.Fields diff --git a/pkg/logs/internal/tailers/windowsevent/tailer.go b/pkg/logs/internal/tailers/windowsevent/tailer.go index 4e78fda6929e2..bbf13eb19c859 100644 --- a/pkg/logs/internal/tailers/windowsevent/tailer.go +++ b/pkg/logs/internal/tailers/windowsevent/tailer.go @@ -146,11 +146,17 @@ func (t *Tailer) toMessage(re *richEvent) (*message.Message, error) { //nolint:u } // EventID sometimes comes in like 7036 -// which mxj will transform to "EventID":"7036" +// +// which mxj will transform to "EventID":"7036" +// // other times it comes in like 7036 -// which mxj will transform to "EventID":{"value":"7036","Qualifiers":"16384"} +// +// which mxj will transform to "EventID":{"value":"7036","Qualifiers":"16384"} +// // We want to normalize this so the resulting JSON is consistent -// "EventID":"7036","EventIDQualifier":"16384" +// +// "EventID":"7036","EventIDQualifier":"16384" +// // Format definition: https://learn.microsoft.com/en-us/windows/win32/wes/eventschema-systempropertiestype-complextype func normalizeEventID(mv mxj.Map) error { values, err := mv.ValuesForPath(eventIDPath) diff --git a/pkg/logs/internal/util/containersorpods/containers_or_pods.go b/pkg/logs/internal/util/containersorpods/containers_or_pods.go index 9b3b00b85ec22..2e4002432d5f1 100644 --- a/pkg/logs/internal/util/containersorpods/containers_or_pods.go +++ b/pkg/logs/internal/util/containersorpods/containers_or_pods.go @@ -51,17 +51,17 @@ func (lw LogWhat) String() string { // // The decision is rather complex: // -// - if any of the container features (docker, containerd, cri, podman) are -// present and kubernetes is not, wait for the dockerutil service to start and -// return LogContainers -// - if the kubernetes feature is available and no container features are -// available, wait for the kubelet service to start, and return LogPods -// - if none of the features are available, LogNothing -// - if at least one container feature _and_ the kubernetes feature are available, -// then wait for either of the dockerutil service or the kubelet service to start. -// This always tries both at the same time, and if both are available will -// return LogPods if `logs_config.k8s_container_use_file` is true or -// LogContainers if the configuration setting is false. +// - if any of the container features (docker, containerd, cri, podman) are +// present and kubernetes is not, wait for the dockerutil service to start and +// return LogContainers +// - if the kubernetes feature is available and no container features are +// available, wait for the kubelet service to start, and return LogPods +// - if none of the features are available, LogNothing +// - if at least one container feature _and_ the kubernetes feature are available, +// then wait for either of the dockerutil service or the kubelet service to start. +// This always tries both at the same time, and if both are available will +// return LogPods if `logs_config.k8s_container_use_file` is true or +// LogContainers if the configuration setting is false. // // If this function returns LogPods, then the caller may assume the kubelet // service is available. Similarly, if this function returns LogContainers, diff --git a/pkg/logs/sender/batch_strategy.go b/pkg/logs/sender/batch_strategy.go index d1f24ed901da2..6c12b82af47e5 100644 --- a/pkg/logs/sender/batch_strategy.go +++ b/pkg/logs/sender/batch_strategy.go @@ -129,12 +129,17 @@ func (s *batchStrategy) flushBuffer(outputChan chan *message.Payload) { } messages := s.buffer.GetMessages() s.buffer.Clear() + // Logging specifically for DBM pipelines, which seem to fail to send more often than other pipelines. + // pipelineName comes from epforwarder.passthroughPipelineDescs.eventType, and these names are constants in the epforwarder package. + if s.pipelineName == "dbm-samples" || s.pipelineName == "dbm-metrics" || s.pipelineName == "dbm-activity" { + log.Debugf("Flushing buffer and sending %d messages for pipeline %s", len(messages), s.pipelineName) + } s.sendMessages(messages, outputChan) } func (s *batchStrategy) sendMessages(messages []*message.Message, outputChan chan *message.Payload) { serializedMessage := s.serializer.Serialize(messages) - log.Debugf("Send messages (msg_count:%d, content_size=%d, avg_msg_size=%.2f)", len(messages), len(serializedMessage), float64(len(serializedMessage))/float64(len(messages))) + log.Debugf("Send messages for pipeline %s (msg_count:%d, content_size=%d, avg_msg_size=%.2f)", s.pipelineName, len(messages), len(serializedMessage), float64(len(serializedMessage))/float64(len(messages))) encodedPayload, err := s.contentEncoding.encode(serializedMessage) if err != nil { diff --git a/pkg/logs/sources/source.go b/pkg/logs/sources/source.go index b7edef904f901..3015d7e2addaa 100644 --- a/pkg/logs/sources/source.go +++ b/pkg/logs/sources/source.go @@ -66,6 +66,7 @@ func NewLogSource(name string, cfg *config.LogsConfig) *LogSource { hiddenFromStatus: false, } source.RegisterInfo(source.BytesRead) + source.RegisterInfo(source.LatencyStats) return source } diff --git a/pkg/logs/status/builder.go b/pkg/logs/status/builder.go index 3768f15dac6f9..e9226aae1de1c 100644 --- a/pkg/logs/status/builder.go +++ b/pkg/logs/status/builder.go @@ -8,7 +8,6 @@ package status import ( "expvar" "strings" - "time" "go.uber.org/atomic" @@ -86,16 +85,12 @@ func (b *Builder) getIntegrations() []Integration { var sources []Source for _, source := range logSources { sources = append(sources, Source{ - AllTimeAvgLatency: source.LatencyStats.AllTimeAvg() / int64(time.Millisecond), - AllTimePeakLatency: source.LatencyStats.AllTimePeak() / int64(time.Millisecond), - RecentAvgLatency: source.LatencyStats.MovingAvg() / int64(time.Millisecond), - RecentPeakLatency: source.LatencyStats.MovingPeak() / int64(time.Millisecond), - Type: source.Config.Type, - Configuration: b.toDictionary(source.Config), - Status: b.toString(source.Status), - Inputs: source.GetInputs(), - Messages: source.Messages.GetMessages(), - Info: source.GetInfoStatus(), + Type: source.Config.Type, + Configuration: b.toDictionary(source.Config), + Status: b.toString(source.Status), + Inputs: source.GetInputs(), + Messages: source.Messages.GetMessages(), + Info: source.GetInfoStatus(), }) } integrations = append(integrations, Integration{ diff --git a/pkg/logs/status/status.go b/pkg/logs/status/status.go index ffa26cb5a96cc..56e0373a329c8 100644 --- a/pkg/logs/status/status.go +++ b/pkg/logs/status/status.go @@ -37,16 +37,12 @@ var ( // Source provides some information about a logs source. type Source struct { - AllTimeAvgLatency int64 `json:"all_time_avg_latency"` - AllTimePeakLatency int64 `json:"all_time_peak_latency"` - RecentAvgLatency int64 `json:"recent_avg_latency"` - RecentPeakLatency int64 `json:"recent_peak_latency"` - Type string `json:"type"` - Configuration map[string]interface{} `json:"configuration"` - Status string `json:"status"` - Inputs []string `json:"inputs"` - Messages []string `json:"messages"` - Info map[string][]string `json:"info"` + Type string `json:"type"` + Configuration map[string]interface{} `json:"configuration"` + Status string `json:"status"` + Inputs []string `json:"inputs"` + Messages []string `json:"messages"` + Info map[string][]string `json:"info"` } // Integration provides some information about a logs integration. diff --git a/pkg/metadata/externalhost/doc.go b/pkg/metadata/externalhost/doc.go index 3fbb58215bb88..e7e1758ce94ff 100644 --- a/pkg/metadata/externalhost/doc.go +++ b/pkg/metadata/externalhost/doc.go @@ -4,7 +4,6 @@ // Copyright 2016-present Datadog, Inc. /* - Package externalhost implements the External Host Tags metadata provider. In older versions of the Agent, it was the general metadata collector to invoke diff --git a/pkg/metadata/host/host.go b/pkg/metadata/host/host.go index 17b85170df6b4..2ba1680b05b11 100644 --- a/pkg/metadata/host/host.go +++ b/pkg/metadata/host/host.go @@ -7,7 +7,6 @@ package host import ( "context" - "errors" "os" "path" "sync" @@ -27,8 +26,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/metadata/host/container" - "github.com/DataDog/datadog-agent/pkg/util/cloudproviders/azure" - "github.com/DataDog/datadog-agent/pkg/util/cloudproviders/gce" "github.com/DataDog/datadog-agent/pkg/util/ec2" httputils "github.com/DataDog/datadog-agent/pkg/util/http" @@ -104,24 +101,6 @@ func GetPythonVersion() string { return "n/a" } -func getPublicIPv4(ctx context.Context) (string, error) { - publicIPFetcher := map[string]func(context.Context) (string, error){ - "EC2": ec2.GetPublicIPv4, - "GCE": gce.GetPublicIPv4, - "Azure": azure.GetPublicIPv4, - } - for name, fetcher := range publicIPFetcher { - publicIPv4, err := fetcher(ctx) - if err == nil { - log.Debugf("%s public IP = %s", name, publicIPv4) - return publicIPv4, nil - } - log.Debugf("could not fetch %s public IPv4: %s", name, err) - } - log.Infof("No public IPv4 address found") - return "", errors.New("No public IPv4 address found") -} - // getMeta grabs the information and refreshes the cache func getMeta(ctx context.Context, hostnameData hostname.Data) *Meta { osHostname, _ := os.Hostname() @@ -165,7 +144,7 @@ func getNetworkMeta(ctx context.Context) *NetworkMeta { networkMeta := &NetworkMeta{ID: nid} - publicIPv4, err := getPublicIPv4(ctx) + publicIPv4, err := cloudproviders.GetPublicIPv4(ctx) if err == nil { log.Infof("Adding public IPv4 %s to network metadata", publicIPv4) networkMeta.PublicIPv4 = publicIPv4 diff --git a/pkg/metadata/host/host_tags.go b/pkg/metadata/host/host_tags.go index 58edb37ef8034..b6c009a61e151 100644 --- a/pkg/metadata/host/host_tags.go +++ b/pkg/metadata/host/host_tags.go @@ -93,7 +93,7 @@ func GetHostTags(ctx context.Context, cached bool) *Tags { } hname, _ := hostname.Get(ctx) - clusterName := clustername.GetClusterName(ctx, hname) + clusterName := clustername.GetClusterNameTagValue(ctx, hname) if len(clusterName) != 0 { clusterNameTags := []string{"kube_cluster_name:" + clusterName} if !config.Datadog.GetBool("disable_cluster_name_tag_key") { diff --git a/pkg/metadata/host/host_windows.go b/pkg/metadata/host/host_windows.go index 1183922d6c996..8adbbd7437719 100644 --- a/pkg/metadata/host/host_windows.go +++ b/pkg/metadata/host/host_windows.go @@ -52,7 +52,7 @@ type InfoStat struct { } type osVersion [2]string -//Set the OS to "win32" instead of the runtime.GOOS of "windows" for the in app icon +// Set the OS to "win32" instead of the runtime.GOOS of "windows" for the in app icon const osName = "win32" // Collect at init time diff --git a/pkg/metadata/inventories/README.md b/pkg/metadata/inventories/README.md index 218deab63b8c2..82378912adaf4 100644 --- a/pkg/metadata/inventories/README.md +++ b/pkg/metadata/inventories/README.md @@ -91,9 +91,10 @@ The payload is a JSON dict with the following fields (see: `process_config.container_collection.enabled`) - `feature_networks_enabled` - **bool**: True if the Network Performance Monitoring is enabled (see: `network_config.enabled` config option in `system-probe.yaml`). - - `feature_networks_http_enabled` - **bool**: True if HTTP monitoring is enabled for Network Performance Monitoring (see: `network_config.enable_http_monitoring` config option in `system-proble.yaml`). - - `feature_networks_https_enabled` - **bool**: True if HTTPS monitoring is enabled for Network Performance Monitoring (see: `network_config.enable_https_monitoring` config option in `system-proble.yaml`). - - `feature_networks_gotls_enabled` - **bool**: True if HTTPS monitoring through GoTLS is enabled for Network Performance Monitoring (see: `system_probe_config.enable_go_tls_support` config option in `system-proble.yaml`). + - `feature_networks_http_enabled` - **bool**: True if HTTP monitoring is enabled for Network Performance Monitoring (see: `network_config.enable_http_monitoring` config option in `system-probe.yaml`). + - `feature_networks_https_enabled` - **bool**: True if HTTPS monitoring is enabled for Network Performance Monitoring (see: `network_config.enable_https_monitoring` config option in `system-probe.yaml`). + - `feature_usm_java_tls_enabled` - **bool**: True if HTTPS monitoring through java TLS is enabled for Universal Service Monitoring (see: `service_monitoring_config.enable_java_tls_support` config option in `system-probe.yaml`). + - `feature_usm_go_tls_enabled` - **bool**: True if HTTPS monitoring through GoTLS is enabled for Universal Service Monitoring (see: `service_monitoring_config.enable_go_tls_support` config option in `system-probe.yaml`). - `feature_logs_enabled` - **bool**: True if the logs collection is enabled (see: `logs_enabled` config option). - `feature_cspm_enabled` - **bool**: True if the Cloud Security Posture Management is enabled (see: `compliance_config.enabled` config option). @@ -128,6 +129,14 @@ The payload is a JSON dict with the following fields - `mac_address` - **string**: the MAC address for the host. - `agent_version` - **string**: the version of the Agent that sent this payload. - `cloud_provider` - **string**: the name of the cloud provider detected by the Agent. + - `cloud_provider_source` - **string**: the data source used to know that the Agent is running on `cloud_provider`. + This is different for each cloud provider. For now ony AWS is supported. + Values on AWS: + - `IMDSv2`: The Agent successfully contacted IMDSv2 metadata endpoint. + - `IMDSv1`: The Agent successfully contacted IMDSv1 metadata endpoint. + - `DMI`: The Agent successfully used DMI information to fetch the instance ID (only work on EC2 Nitro instances). + - `UUID`: The hypervisor or product UUID has the EC2 prefix. The Agent knows it's running on EC2 but don't know on + which instance. - `hypervisor_guest_uuid` - **string**: the hypervisor guest UUID (Unix only, empty string on Windows or if we can't read the data). On `ec2` instance this might start by "ec2". This was introduce in `7.41.0`/`6.41.0`. - `dmi_product_uuid` - **string**: the DMI product UUID (Unix only, empty string on Windows or if we can't read the diff --git a/pkg/metadata/inventories/host_metadata.go b/pkg/metadata/inventories/host_metadata.go index b7a205336cf23..79acdb119ed83 100644 --- a/pkg/metadata/inventories/host_metadata.go +++ b/pkg/metadata/inventories/host_metadata.go @@ -11,16 +11,16 @@ import ( "github.com/DataDog/gohai/network" "github.com/DataDog/gohai/platform" + "github.com/DataDog/datadog-agent/pkg/util/dmi" "github.com/DataDog/datadog-agent/pkg/version" ) // for testing purpose var ( - cpuGet = cpu.Get - memoryGet = memory.Get - networkGet = network.Get - platformGet = platform.Get - systemSpecificHosttMetadataGet = getSystemSpecificHosttMetadata + cpuGet = cpu.Get + memoryGet = memory.Get + networkGet = network.Get + platformGet = platform.Get ) // HostMetadata contains metadata about the host @@ -53,9 +53,10 @@ type HostMetadata struct { MacAddress string `json:"mac_address"` // from the agent itself - AgentVersion string `json:"agent_version"` - CloudProvider string `json:"cloud_provider"` - OsVersion string `json:"os_version"` + AgentVersion string `json:"agent_version"` + CloudProvider string `json:"cloud_provider"` + CloudProviderSource string `json:"cloud_provider_source"` + OsVersion string `json:"os_version"` // From file system HypervisorGuestUUID string `json:"hypervisor_guest_uuid"` @@ -71,6 +72,18 @@ func logWarnings(warnings []string) { } } +func fetchFromMetadata(key string, metadata AgentMetadata) string { + if value, ok := metadata[key]; ok { + if stringValue, ok := value.(string); ok { + return stringValue + } + logErrorf("'%s' is not a string in metadata cache", key) //nolint:errcheck + return "" + } + logInfof("'%s' not found in metadata cache", key) + return "" +} + // getHostMetadata returns the metadata show in the 'host' table func getHostMetadata() *HostMetadata { metadata := &HostMetadata{} @@ -128,27 +141,14 @@ func getHostMetadata() *HostMetadata { metadata.AgentVersion = version.AgentVersion - if value, ok := agentMetadata[string(AgentCloudProvider)]; ok { - if stringValue, ok := value.(string); ok { - metadata.CloudProvider = stringValue - } else { - logErrorf("cloud provider is not a string in agent metadata cache") //nolint:errcheck - } - } else { - logInfof("cloud provider not found in agent metadata cache") - } - - if value, ok := hostMetadata[string(HostOSVersion)]; ok { - if stringValue, ok := value.(string); ok { - metadata.OsVersion = stringValue - } else { - logErrorf("OS version is not a string in host metadata cache") //nolint:errcheck - } - } else { - logErrorf("OS version not found in agent metadata cache") //nolint:errcheck - } + metadata.CloudProvider = fetchFromMetadata(string(HostCloudProvider), agentMetadata) + metadata.CloudProviderSource = fetchFromMetadata(string(HostCloudProviderSource), hostMetadata) + metadata.OsVersion = fetchFromMetadata(string(HostOSVersion), hostMetadata) - systemSpecificHosttMetadataGet(metadata) + metadata.HypervisorGuestUUID = dmi.GetHypervisorUUID() + metadata.DmiProductUUID = dmi.GetProductUUID() + metadata.DmiBoardAssetTag = dmi.GetBoardAssetTag() + metadata.DmiBoardVendor = dmi.GetBoardVendor() return metadata } diff --git a/pkg/metadata/inventories/host_metadata_nix_test.go b/pkg/metadata/inventories/host_metadata_nix_test.go deleted file mode 100644 index 0f1d3a886fe45..0000000000000 --- a/pkg/metadata/inventories/host_metadata_nix_test.go +++ /dev/null @@ -1,59 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !windows -// +build !windows - -package inventories - -import ( - "os" - "path/filepath" - "testing" - - "github.com/stretchr/testify/assert" -) - -func resetSysPath() { - hypervisorUUIDPath = "/sys/hypervisor/uuid" - dmiProductUUIDPath = "/sys/devices/virtual/dmi/id/product_uuid" - dmiBoardAssetTagPath = "/sys/devices/virtual/dmi/id/board_asset_tag" - dmiBoardVendorPath = "/sys/devices/virtual/dmi/id/board_vendor" -} - -func TestGetSystemSpecificHosttMetadata(t *testing.T) { - tempDir := t.TempDir() - defer resetSysPath() - - setTestFile := func(data string, name string) string { - tempPath := filepath.Join(tempDir, name) - os.WriteFile(tempPath, []byte(data), os.ModePerm) - return tempPath - } - - hypervisorUUIDPath = setTestFile("a404eff4-bacf-4839-a33c-619c3a06abd1\n", "hypervisor_uuid") - dmiProductUUIDPath = setTestFile("a404eff4-bacf-4839-a33c-619c3a06abd1\n", "product_uuid") - dmiBoardAssetTagPath = setTestFile("i-test\n", "board_asset_tag") - dmiBoardVendorPath = setTestFile("test vendor\n", "board_vendor") - - metadata := &HostMetadata{} - getSystemSpecificHosttMetadata(metadata) - assert.Equal(t, "a404eff4-bacf-4839-a33c-619c3a06abd1", metadata.HypervisorGuestUUID) - assert.Equal(t, "a404eff4-bacf-4839-a33c-619c3a06abd1", metadata.DmiProductUUID) - assert.Equal(t, "i-test", metadata.DmiBoardAssetTag) - assert.Equal(t, "test vendor", metadata.DmiBoardVendor) - - hypervisorUUIDPath = "does not exist" - dmiProductUUIDPath = "does not exist" - dmiBoardAssetTagPath = "does not exist" - dmiBoardVendorPath = "does not exist" - - metadata = &HostMetadata{} - getSystemSpecificHosttMetadata(metadata) - assert.Equal(t, "", metadata.HypervisorGuestUUID) - assert.Equal(t, "", metadata.DmiProductUUID) - assert.Equal(t, "", metadata.DmiBoardAssetTag) - assert.Equal(t, "", metadata.DmiBoardVendor) -} diff --git a/pkg/metadata/inventories/host_metadata_test.go b/pkg/metadata/inventories/host_metadata_test.go index 1d4b4c4b1c881..f3bf7db016350 100644 --- a/pkg/metadata/inventories/host_metadata_test.go +++ b/pkg/metadata/inventories/host_metadata_test.go @@ -15,6 +15,7 @@ import ( "github.com/DataDog/gohai/platform" "github.com/stretchr/testify/assert" + "github.com/DataDog/datadog-agent/pkg/util/dmi" "github.com/DataDog/datadog-agent/pkg/version" ) @@ -42,10 +43,10 @@ var ( AgentVersion: version.AgentVersion, CloudProvider: "some_cloud_provider", OsVersion: "testOS", - HypervisorGuestUUID: "", - DmiProductUUID: "", - DmiBoardAssetTag: "", - DmiBoardVendor: "", + HypervisorGuestUUID: "hypervisorUUID", + DmiProductUUID: "dmiUUID", + DmiBoardAssetTag: "boardTag", + DmiBoardVendor: "boardVendor", } ) @@ -100,35 +101,31 @@ func platformMock() (*platform.Platform, []string, error) { }, nil, nil } -func setupHostMetadataMock() func() { - reset := func() { +func setupHostMetadataMock(t *testing.T) { + t.Cleanup(func() { cpuGet = cpu.Get memoryGet = memory.Get networkGet = network.Get platformGet = platform.Get - systemSpecificHosttMetadataGet = getSystemSpecificHosttMetadata inventoryMutex.Lock() - delete(agentMetadata, string(AgentCloudProvider)) + delete(agentMetadata, string(HostCloudProvider)) delete(hostMetadata, string(HostOSVersion)) inventoryMutex.Unlock() - } + }) cpuGet = cpuMock memoryGet = memoryMock networkGet = networkMock platformGet = platformMock - systemSpecificHosttMetadataGet = func(*HostMetadata) {} + dmi.SetupMock(t, "hypervisorUUID", "dmiUUID", "boardTag", "boardVendor") - SetAgentMetadata(AgentCloudProvider, "some_cloud_provider") + SetAgentMetadata(HostCloudProvider, "some_cloud_provider") SetHostMetadata(HostOSVersion, "testOS") - - return reset } func TestGetHostMetadata(t *testing.T) { - resetFunc := setupHostMetadataMock() - defer resetFunc() + setupHostMetadataMock(t) m := getHostMetadata() assert.Equal(t, expectedMetadata, m) @@ -139,26 +136,23 @@ func memoryErrorMock() (*memory.Memory, []string, error) { return nil, nil func networkErrorMock() (*network.Network, []string, error) { return nil, nil, fmt.Errorf("err") } func platformErrorMock() (*platform.Platform, []string, error) { return nil, nil, fmt.Errorf("err") } -func setupHostMetadataErrorMock() func() { - reset := func() { +func setupHostMetadataErrorMock(t *testing.T) { + t.Cleanup(func() { cpuGet = cpu.Get memoryGet = memory.Get networkGet = network.Get platformGet = platform.Get - systemSpecificHosttMetadataGet = getSystemSpecificHosttMetadata - } + }) cpuGet = cpuErrorMock memoryGet = memoryErrorMock networkGet = networkErrorMock platformGet = platformErrorMock - systemSpecificHosttMetadataGet = func(*HostMetadata) {} - return reset + dmi.SetupMock(t, "", "", "", "") } func TestGetHostMetadataError(t *testing.T) { - resetFunc := setupHostMetadataErrorMock() - defer resetFunc() + setupHostMetadataErrorMock(t) m := getHostMetadata() expected := &HostMetadata{AgentVersion: version.AgentVersion} diff --git a/pkg/metadata/inventories/inventories.go b/pkg/metadata/inventories/inventories.go index 70ae009c24a08..d44f00bd924ba 100644 --- a/pkg/metadata/inventories/inventories.go +++ b/pkg/metadata/inventories/inventories.go @@ -68,7 +68,6 @@ type AgentMetadataName string // pkg/metadata/inventories/README.md and any additions should // be updated there as well. const ( - AgentCloudProvider AgentMetadataName = "cloud_provider" AgentHostnameSource AgentMetadataName = "hostname_source" AgentVersion AgentMetadataName = "agent_version" AgentFlavor AgentMetadataName = "flavor" @@ -92,7 +91,8 @@ const ( AgentNetworksEnabled AgentMetadataName = "feature_networks_enabled" AgentNetworksHTTPEnabled AgentMetadataName = "feature_networks_http_enabled" AgentNetworksHTTPSEnabled AgentMetadataName = "feature_networks_https_enabled" - AgentNetworksGoTLSEnabled AgentMetadataName = "feature_networks_gotls_enabled" + AgentUSMJavaTLSEnabled AgentMetadataName = "feature_usm_java_tls_enabled" + AgentUSMGoTLSEnabled AgentMetadataName = "feature_usm_go_tls_enabled" AgentLogsEnabled AgentMetadataName = "feature_logs_enabled" AgentCSPMEnabled AgentMetadataName = "feature_cspm_enabled" AgentAPMEnabled AgentMetadataName = "feature_apm_enabled" @@ -102,7 +102,9 @@ const ( agentFullConf AgentMetadataName = "full_configuration" // key for the host metadata cache. See host_metadata.go - HostOSVersion AgentMetadataName = "os_version" + HostOSVersion AgentMetadataName = "os_version" + HostCloudProvider AgentMetadataName = "cloud_provider" + HostCloudProviderSource AgentMetadataName = "cloud_provider_source" ) // Refresh signals that some data has been updated and a new payload should be sent (ex: when configuration is changed @@ -407,13 +409,14 @@ func initializeConfig(cfg config.Config) { SetAgentMetadata(AgentConfigProcessDDURL, clean(cfg.GetString("process_config.process_dd_url"))) SetAgentMetadata(AgentConfigProxyHTTP, clean(cfg.GetString("proxy.http"))) SetAgentMetadata(AgentConfigProxyHTTPS, clean(cfg.GetString("proxy.https"))) - SetAgentMetadata(AgentCWSEnabled, config.Datadog.GetBool("runtime_security_config.enabled")) + SetAgentMetadata(AgentCWSEnabled, config.SystemProbe.GetBool("runtime_security_config.enabled")) SetAgentMetadata(AgentProcessEnabled, config.Datadog.GetBool("process_config.process_collection.enabled")) SetAgentMetadata(AgentProcessesContainerEnabled, config.Datadog.GetBool("process_config.container_collection.enabled")) - SetAgentMetadata(AgentNetworksEnabled, config.Datadog.GetBool("network_config.enabled")) - SetAgentMetadata(AgentNetworksHTTPEnabled, config.Datadog.GetBool("network_config.enable_http_monitoring")) - SetAgentMetadata(AgentNetworksHTTPSEnabled, config.Datadog.GetBool("network_config.enable_https_monitoring")) - SetAgentMetadata(AgentNetworksGoTLSEnabled, config.Datadog.GetBool("system_probe_config.enable_go_tls_support")) + SetAgentMetadata(AgentNetworksEnabled, config.SystemProbe.GetBool("network_config.enabled")) + SetAgentMetadata(AgentNetworksHTTPEnabled, config.SystemProbe.GetBool("network_config.enable_http_monitoring")) + SetAgentMetadata(AgentNetworksHTTPSEnabled, config.SystemProbe.GetBool("network_config.enable_https_monitoring")) + SetAgentMetadata(AgentUSMJavaTLSEnabled, config.SystemProbe.GetBool("service_monitoring_config.enable_java_tls_support")) + SetAgentMetadata(AgentUSMGoTLSEnabled, config.SystemProbe.GetBool("service_monitoring_config.enable_go_tls_support")) SetAgentMetadata(AgentLogsEnabled, config.Datadog.GetBool("logs_enabled")) SetAgentMetadata(AgentCSPMEnabled, config.Datadog.GetBool("compliance_config.enabled")) SetAgentMetadata(AgentAPMEnabled, config.Datadog.GetBool("apm_config.enabled")) diff --git a/pkg/metadata/inventories/inventories_test.go b/pkg/metadata/inventories/inventories_test.go index 415aef630949e..fbc73ebac8b76 100644 --- a/pkg/metadata/inventories/inventories_test.go +++ b/pkg/metadata/inventories/inventories_test.go @@ -199,8 +199,7 @@ func TestGetPayload(t *testing.T) { startNow = startNow.Add(1000 * time.Second) SetCheckMetadata("check1_instance1", "check_provided_key1", 456) - resetFunc := setupHostMetadataMock() - defer resetFunc() + setupHostMetadataMock(t) p = GetPayload(ctx, "testHostname", coll, true) @@ -296,11 +295,12 @@ func TestGetPayload(t *testing.T) { "mac_address": "00:0c:29:b6:d2:32", "agent_version": "%v", "cloud_provider": "some_cloud_provider", + "cloud_provider_source": "", "os_version": "testOS", - "hypervisor_guest_uuid": "", - "dmi_product_uuid": "", - "dmi_board_asset_tag": "", - "dmi_board_vendor": "" + "hypervisor_guest_uuid": "hypervisorUUID", + "dmi_product_uuid": "dmiUUID", + "dmi_board_asset_tag": "boardTag", + "dmi_board_vendor": "boardVendor" } }` jsonString = fmt.Sprintf(jsonString, startNow.UnixNano(), version.AgentVersion) diff --git a/pkg/metrics/context_metrics.go b/pkg/metrics/context_metrics.go index ba1dea336d4e3..7a344c7c275a9 100644 --- a/pkg/metrics/context_metrics.go +++ b/pkg/metrics/context_metrics.go @@ -124,16 +124,17 @@ func flushToSeries( // is called with each Metric in term, while `contextKeyChanged` is called after the // last Metric with each context key is processed. The last argument of the callback is the index // of the contextMetrics in contextMetricsCollection. -// For example: -// callback(key1, metric1, 0) -// callback(key1, metric2, 1) -// callback(key1, metric3, 2) -// contextKeyChanged() -// callback(key2, metric4, 0) -// contextKeyChanged() -// callback(key3, metric5, 0) -// callback(key3, metric6, 1) -// contextKeyChanged() +// +// For example: +// callback(key1, metric1, 0) +// callback(key1, metric2, 1) +// callback(key1, metric3, 2) +// contextKeyChanged() +// callback(key2, metric4, 0) +// contextKeyChanged() +// callback(key3, metric5, 0) +// callback(key3, metric6, 1) +// contextKeyChanged() func aggregateContextMetricsByContextKey( contextMetricsCollection []ContextMetrics, callback func(ckey.ContextKey, Metric, int), diff --git a/pkg/metrics/monotonic_count.go b/pkg/metrics/monotonic_count.go index 8ef262a896c63..cf1b14aee508b 100644 --- a/pkg/metrics/monotonic_count.go +++ b/pkg/metrics/monotonic_count.go @@ -9,8 +9,9 @@ package metrics // Samples that have a lower value than the previous sample are ignored (since it usually // means that the underlying raw counter has been reset). // Example: -// submitting samples 2, 3, 6, 7 returns 5 (i.e. 7-2) on flush ; -// then submitting samples 10, 11 on the same MonotonicCount returns 4 (i.e. 11-7) on flush +// +// submitting samples 2, 3, 6, 7 returns 5 (i.e. 7-2) on flush ; +// then submitting samples 10, 11 on the same MonotonicCount returns 4 (i.e. 11-7) on flush type MonotonicCount struct { previousSample float64 currentSample float64 diff --git a/pkg/metrics/series.go b/pkg/metrics/series.go index 5b32be02c775b..86df527906d9b 100644 --- a/pkg/metrics/series.go +++ b/pkg/metrics/series.go @@ -83,7 +83,7 @@ func (serie Serie) String() string { // PopulateDeviceField removes any `device:` tag in the series tags and uses the value to // populate the Serie.Device field -//FIXME(olivier v): remove this as soon as the v1 API can handle `device` as a regular tag +// FIXME(olivier v): remove this as soon as the v1 API can handle `device` as a regular tag func (serie *Serie) PopulateDeviceField() { if !serie.hasDeviceTag() { return diff --git a/pkg/netflow/enrichment/ether_type.go b/pkg/netflow/enrichment/ether_type.go index b2908fc54b506..70d6fb397246e 100644 --- a/pkg/netflow/enrichment/ether_type.go +++ b/pkg/netflow/enrichment/ether_type.go @@ -6,10 +6,11 @@ package enrichment // Currently mapping only IPv4 and IPv6 since those are the main case defined in goflow2 -// - For NetFlow5/9/IPFIX, ether type can take other values if dataLinkFrameSection is defined. -// https://github.com/netsampler/goflow2/blob/614539b9543548179fd3f168e7273c5269ec09b4/producer/producer_nf.go#L390-L391 -// - For SFlow, ether type can take other values if the protocol is Ethernet -// https://github.com/netsampler/goflow2/blob/615b9f697cc23c22a2181adfde1005c471f62347/producer/producer_sf.go#L227-L230 +// - For NetFlow5/9/IPFIX, ether type can take other values if dataLinkFrameSection is defined. +// https://github.com/netsampler/goflow2/blob/614539b9543548179fd3f168e7273c5269ec09b4/producer/producer_nf.go#L390-L391 +// - For SFlow, ether type can take other values if the protocol is Ethernet +// https://github.com/netsampler/goflow2/blob/615b9f697cc23c22a2181adfde1005c471f62347/producer/producer_sf.go#L227-L230 +// // Support for other kind of ether type can be implemented later. var etherTypeMap = map[uint32]string{ 0x0800: "IPv4", diff --git a/pkg/network/config/config.go b/pkg/network/config/config.go index 0618d691adb32..0220cd15aafc4 100644 --- a/pkg/network/config/config.go +++ b/pkg/network/config/config.go @@ -6,6 +6,7 @@ package config import ( + "runtime" "strings" "time" @@ -19,12 +20,15 @@ const ( spNS = "system_probe_config" netNS = "network_config" smNS = "service_monitoring_config" + evNS = "event_monitoring_config" defaultUDPTimeoutSeconds = 30 defaultUDPStreamTimeoutSeconds = 120 defaultOffsetThreshold = 400 maxOffsetThreshold = 3000 + + defaultMaxProcessesTracked = 1024 ) // Config stores all flags used by the network eBPF tracer @@ -79,6 +83,10 @@ type Config struct { // traffic done through Go's standard library's TLS implementation EnableGoTLSSupport bool + // EnableJavaTLSSupport specifies whether the tracer should monitor HTTPS + // traffic done through Java's TLS implementation + EnableJavaTLSSupport bool + // MaxTrackedHTTPConnections max number of http(s) flows that will be concurrently tracked. // value is currently Windows only MaxTrackedHTTPConnections int64 @@ -91,6 +99,9 @@ type Config struct { // Currently Windows only HTTPMaxRequestFragment int64 + // JavaAgentArgs arguments pass through injected USM agent + JavaAgentArgs string + // UDPConnTimeout determines the length of traffic inactivity between two // (IP, port)-pairs before declaring a UDP connection as inactive. This is // set to /proc/sys/net/netfilter/nf_conntrack_udp_timeout on Linux by @@ -118,6 +129,10 @@ type Config struct { // get flushed on every client request (default 30s check interval) MaxClosedConnectionsBuffered int + // ClosedConnectionFlushThreshold represents the number of closed connections stored before signalling + // the agent to flush the connections. This value only valid on Windows + ClosedConnectionFlushThreshold int + // MaxDNSStatsBuffered represents the maximum number of DNS stats we'll buffer in memory. These stats // get flushed on every client request (default 30s check interval) MaxDNSStatsBuffered int @@ -181,6 +196,12 @@ type Config struct { // HTTP replace rules HTTPReplaceRules []*ReplaceRule + // EnableProcessEventMonitoring enables consuming CWS process monitoring events from the runtime security module + EnableProcessEventMonitoring bool + + // MaxProcessesTracked is the maximum number of processes whose information is stored in the network module + MaxProcessesTracked int + // EnableRootNetNs disables using the network namespace of the root process (1) // for things like creating netlink sockets for conntrack updates, etc. EnableRootNetNs bool @@ -202,8 +223,7 @@ func join(pieces ...string) string { // New creates a config for the network tracer func New() *Config { - cfg := ddconfig.Datadog - ddconfig.InitSystemProbeConfig(cfg) + cfg := ddconfig.SystemProbe c := &Config{ Config: *ebpf.NewConfig(), @@ -224,11 +244,12 @@ func New() *Config { ExcludedSourceConnections: cfg.GetStringMapStringSlice(join(spNS, "source_excludes")), ExcludedDestinationConnections: cfg.GetStringMapStringSlice(join(spNS, "dest_excludes")), - MaxTrackedConnections: uint(cfg.GetInt(join(spNS, "max_tracked_connections"))), - MaxClosedConnectionsBuffered: cfg.GetInt(join(spNS, "max_closed_connections_buffered")), - ClosedChannelSize: cfg.GetInt(join(spNS, "closed_channel_size")), - MaxConnectionsStateBuffered: cfg.GetInt(join(spNS, "max_connection_state_buffered")), - ClientStateExpiry: 2 * time.Minute, + MaxTrackedConnections: uint(cfg.GetInt(join(spNS, "max_tracked_connections"))), + MaxClosedConnectionsBuffered: cfg.GetInt(join(spNS, "max_closed_connections_buffered")), + ClosedConnectionFlushThreshold: cfg.GetInt(join(spNS, "closed_connection_flush_threshold")), + ClosedChannelSize: cfg.GetInt(join(spNS, "closed_channel_size")), + MaxConnectionsStateBuffered: cfg.GetInt(join(spNS, "max_connection_state_buffered")), + ClientStateExpiry: 2 * time.Minute, DNSInspection: !cfg.GetBool(join(spNS, "disable_dns_inspection")), CollectDNSStats: cfg.GetBool(join(spNS, "collect_dns_stats")), @@ -242,7 +263,6 @@ func New() *Config { EnableHTTPMonitoring: cfg.GetBool(join(netNS, "enable_http_monitoring")), EnableHTTPSMonitoring: cfg.GetBool(join(netNS, "enable_https_monitoring")), - EnableGoTLSSupport: cfg.GetBool(join(spNS, "enable_go_tls_support")), MaxHTTPStatsBuffered: cfg.GetInt(join(netNS, "max_http_stats_buffered")), MaxTrackedHTTPConnections: cfg.GetInt64(join(netNS, "max_tracked_http_connections")), @@ -263,12 +283,28 @@ func New() *Config { RecordedQueryTypes: cfg.GetStringSlice(join(netNS, "dns_recorded_query_types")), + EnableProcessEventMonitoring: cfg.GetBool(join(evNS, "network_process", "enabled")), + MaxProcessesTracked: cfg.GetInt(join(evNS, "network_process", "max_processes_tracked")), + EnableRootNetNs: cfg.GetBool(join(netNS, "enable_root_netns")), HTTPMapCleanerInterval: time.Duration(cfg.GetInt(join(spNS, "http_map_cleaner_interval_in_s"))) * time.Second, HTTPIdleConnectionTTL: time.Duration(cfg.GetInt(join(spNS, "http_idle_connection_ttl_in_s"))) * time.Second, + + // Service Monitoring + EnableJavaTLSSupport: cfg.GetBool(join(smNS, "enable_java_tls_support")), + JavaAgentArgs: cfg.GetString(join(smNS, "java_agent_args")), + EnableGoTLSSupport: cfg.GetBool(join(smNS, "enable_go_tls_support")), } + if runtime.GOOS == "windows" { + if cfg.IsSet(join(spNS, "closed_connection_flush_threshold")) && c.ClosedConnectionFlushThreshold < 1024 { + log.Warnf("Closed connection notification threshold set to invalid value %d. Resetting to default.", c.ClosedConnectionFlushThreshold) + + // 0 will allow the underlying driver interface mechanism to choose appropriately + c.ClosedConnectionFlushThreshold = 0 + } + } if !cfg.IsSet(join(spNS, "max_closed_connections_buffered")) { // make sure max_closed_connections_buffered is equal to // max_tracked_connections, since the former is not set. @@ -337,6 +373,14 @@ func New() *Config { } } + if c.EnableProcessEventMonitoring { + log.Info("network process event monitoring enabled") + + if c.MaxProcessesTracked <= 0 { + c.MaxProcessesTracked = defaultMaxProcessesTracked + } + } + if !c.EnableRootNetNs { c.EnableConntrackAllNamespaces = false } diff --git a/pkg/network/config/config_linux_test.go b/pkg/network/config/config_linux_test.go index 1b7f4f91d5da6..f524e851ff3d3 100644 --- a/pkg/network/config/config_linux_test.go +++ b/pkg/network/config/config_linux_test.go @@ -16,8 +16,8 @@ import ( ) func TestDisableRootNetNamespace(t *testing.T) { - newConfig() - config.Datadog.Set("network_config.enable_root_netns", false) + newConfig(t) + config.SystemProbe.Set("network_config.enable_root_netns", false) cfg := New() require.False(t, cfg.EnableConntrackAllNamespaces) diff --git a/pkg/network/config/config_test.go b/pkg/network/config/config_test.go index 1ef918117abad..b1c4f2780236b 100644 --- a/pkg/network/config/config_test.go +++ b/pkg/network/config/config_test.go @@ -20,21 +20,18 @@ import ( "github.com/DataDog/datadog-agent/pkg/config" ) -var originalConfig = config.Datadog - -func restoreGlobalConfig() { - config.Datadog = originalConfig -} - -func newConfig() { - config.Datadog = config.NewConfig("datadog", "DD", strings.NewReplacer(".", "_")) - config.InitConfig(config.Datadog) +func newConfig(t *testing.T) { + originalConfig := config.SystemProbe + t.Cleanup(func() { + config.SystemProbe = originalConfig + }) + config.SystemProbe = config.NewConfig("system-probe", "DD", strings.NewReplacer(".", "_")) + config.InitSystemProbeConfig(config.SystemProbe) } func TestDisablingDNSInspection(t *testing.T) { t.Run("via YAML", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() + newConfig(t) _, err := sysconfig.New("./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-DisableDNS.yaml") require.NoError(t, err) cfg := New() @@ -43,9 +40,7 @@ func TestDisablingDNSInspection(t *testing.T) { }) t.Run("via ENV variable", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - + newConfig(t) t.Setenv("DD_DISABLE_DNS_INSPECTION", "true") _, err := sysconfig.New("") require.NoError(t, err) @@ -57,8 +52,7 @@ func TestDisablingDNSInspection(t *testing.T) { func TestDisablingProtocolClassification(t *testing.T) { t.Run("via YAML", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() + newConfig(t) _, err := sysconfig.New("./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-NoPRTCLClassifying.yaml") require.NoError(t, err) cfg := New() @@ -67,11 +61,8 @@ func TestDisablingProtocolClassification(t *testing.T) { }) t.Run("via ENV variable", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - os.Setenv("DD_ENABLE_PROTOCOL_CLASSIFICATION", "false") - defer os.Unsetenv("DD_ENABLE_PROTOCOL_CLASSIFICATION") + newConfig(t) + t.Setenv("DD_ENABLE_PROTOCOL_CLASSIFICATION", "false") _, err := sysconfig.New("") require.NoError(t, err) cfg := New() @@ -82,9 +73,7 @@ func TestDisablingProtocolClassification(t *testing.T) { func TestEnableGoTLSSupport(t *testing.T) { t.Run("via YAML", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - + newConfig(t) _, err := sysconfig.New("./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-EnableGoTLS.yaml") require.NoError(t, err) cfg := New() @@ -93,10 +82,8 @@ func TestEnableGoTLSSupport(t *testing.T) { }) t.Run("via ENV variable", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - t.Setenv("DD_SYSTEM_PROBE_CONFIG_ENABLE_GO_TLS_SUPPORT", "true") + newConfig(t) + t.Setenv("DD_SERVICE_MONITORING_CONFIG_ENABLE_GO_TLS_SUPPORT", "true") _, err := sysconfig.New("") require.NoError(t, err) cfg := New() @@ -107,9 +94,7 @@ func TestEnableGoTLSSupport(t *testing.T) { func TestEnableHTTPMonitoring(t *testing.T) { t.Run("via YAML", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - + newConfig(t) _, err := sysconfig.New("./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-EnableHTTP.yaml") require.NoError(t, err) cfg := New() @@ -118,9 +103,7 @@ func TestEnableHTTPMonitoring(t *testing.T) { }) t.Run("via ENV variable", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - + newConfig(t) t.Setenv("DD_SYSTEM_PROBE_NETWORK_ENABLE_HTTP_MONITORING", "true") _, err := sysconfig.New("") @@ -131,11 +114,42 @@ func TestEnableHTTPMonitoring(t *testing.T) { }) } -func TestDisableGatewayLookup(t *testing.T) { +func TestEnableJavaTLSSupport(t *testing.T) { t.Run("via YAML", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() + newConfig(t) + + _, err := sysconfig.New("./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-EnableJavaTLS.yaml") + require.NoError(t, err) + cfg := New() + + assert.True(t, cfg.EnableJavaTLSSupport) + }) + + t.Run("via ENV variable", func(t *testing.T) { + newConfig(t) + + t.Setenv("DD_SERVICE_MONITORING_CONFIG_ENABLE_JAVA_TLS_SUPPORT", "true") + _, err := sysconfig.New("") + require.NoError(t, err) + cfg := New() + + assert.True(t, cfg.EnableJavaTLSSupport) + }) +} +func TestDefaultDisabledJavaTLSSupport(t *testing.T) { + newConfig(t) + + _, err := sysconfig.New("") + require.NoError(t, err) + cfg := New() + + assert.False(t, cfg.EnableJavaTLSSupport) +} + +func TestDisableGatewayLookup(t *testing.T) { + t.Run("via YAML", func(t *testing.T) { + newConfig(t) // default config _, err := sysconfig.New("") require.NoError(t, err) @@ -143,7 +157,7 @@ func TestDisableGatewayLookup(t *testing.T) { assert.True(t, cfg.EnableGatewayLookup) - newConfig() + newConfig(t) _, err = sysconfig.New("./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-DisableGwLookup.yaml") require.NoError(t, err) cfg = New() @@ -152,9 +166,7 @@ func TestDisableGatewayLookup(t *testing.T) { }) t.Run("via ENV variable", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - + newConfig(t) t.Setenv("DD_SYSTEM_PROBE_NETWORK_ENABLE_GATEWAY_LOOKUP", "false") _, err := sysconfig.New("") require.NoError(t, err) @@ -166,9 +178,7 @@ func TestDisableGatewayLookup(t *testing.T) { func TestIgnoreConntrackInitFailure(t *testing.T) { t.Run("via YAML", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - + newConfig(t) _, err := sysconfig.New("./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-IgnoreCTInitFailure.yaml") require.NoError(t, err) cfg := New() @@ -177,9 +187,7 @@ func TestIgnoreConntrackInitFailure(t *testing.T) { }) t.Run("via ENV variable", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - + newConfig(t) t.Setenv("DD_SYSTEM_PROBE_NETWORK_IGNORE_CONNTRACK_INIT_FAILURE", "true") _, err := sysconfig.New("") require.NoError(t, err) @@ -192,9 +200,7 @@ func TestIgnoreConntrackInitFailure(t *testing.T) { func TestEnablingDNSStatsCollection(t *testing.T) { t.Run("via YAML", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - + newConfig(t) _, err := sysconfig.New("./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-EnableDNSStats.yaml") require.NoError(t, err) cfg := New() @@ -203,9 +209,7 @@ func TestEnablingDNSStatsCollection(t *testing.T) { }) t.Run("via ENV variable", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - + newConfig(t) t.Setenv("DD_COLLECT_DNS_STATS", "false") _, err := sysconfig.New("") require.NoError(t, err) @@ -213,7 +217,7 @@ func TestEnablingDNSStatsCollection(t *testing.T) { assert.False(t, cfg.CollectDNSStats) - newConfig() + newConfig(t) t.Setenv("DD_COLLECT_DNS_STATS", "true") _, err = sysconfig.New("") require.NoError(t, err) @@ -225,9 +229,7 @@ func TestEnablingDNSStatsCollection(t *testing.T) { func TestDisablingDNSDomainCollection(t *testing.T) { t.Run("via YAML", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - + newConfig(t) _, err := sysconfig.New("./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-DisableDNSDomains.yaml") require.NoError(t, err) cfg := New() @@ -236,9 +238,7 @@ func TestDisablingDNSDomainCollection(t *testing.T) { }) t.Run("via ENV variable", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - + newConfig(t) t.Setenv("DD_COLLECT_DNS_DOMAINS", "false") _, err := sysconfig.New("") require.NoError(t, err) @@ -246,7 +246,7 @@ func TestDisablingDNSDomainCollection(t *testing.T) { assert.False(t, cfg.CollectDNSDomains) - newConfig() + newConfig(t) t.Setenv("DD_COLLECT_DNS_DOMAINS", "true") _, err = sysconfig.New("") require.NoError(t, err) @@ -258,9 +258,7 @@ func TestDisablingDNSDomainCollection(t *testing.T) { func TestSettingMaxDNSStats(t *testing.T) { t.Run("via YAML", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - + newConfig(t) _, err := sysconfig.New("./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-DisableDNSDomains.yaml") require.NoError(t, err) cfg := New() @@ -269,10 +267,7 @@ func TestSettingMaxDNSStats(t *testing.T) { }) t.Run("via ENV variable", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - newConfig() + newConfig(t) os.Unsetenv("DD_SYSTEM_PROBE_CONFIG_MAX_DNS_STATS") _, err := sysconfig.New("") require.NoError(t, err) @@ -280,7 +275,7 @@ func TestSettingMaxDNSStats(t *testing.T) { assert.Equal(t, 20000, cfg.MaxDNSStats) // default value - newConfig() + newConfig(t) t.Setenv("DD_SYSTEM_PROBE_CONFIG_MAX_DNS_STATS", "10000") _, err = sysconfig.New("") require.NoError(t, err) @@ -309,9 +304,7 @@ func TestHTTPReplaceRules(t *testing.T) { } t.Run("via YAML", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - + newConfig(t) _, err := sysconfig.New("./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-HTTPReplaceRules.yaml") require.NoError(t, err) cfg := New() @@ -323,9 +316,7 @@ func TestHTTPReplaceRules(t *testing.T) { }) t.Run("via ENV variable", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - + newConfig(t) t.Setenv("DD_SYSTEM_PROBE_NETWORK_HTTP_REPLACE_RULES", ` [ { @@ -357,9 +348,7 @@ func TestMaxClosedConnectionsBuffered(t *testing.T) { maxTrackedConnections := New().MaxTrackedConnections t.Run("value set", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - + newConfig(t) t.Setenv("DD_SYSTEM_PROBE_CONFIG_MAX_CLOSED_CONNECTIONS_BUFFERED", fmt.Sprintf("%d", maxTrackedConnections-1)) cfg := New() @@ -367,9 +356,7 @@ func TestMaxClosedConnectionsBuffered(t *testing.T) { }) t.Run("value not set", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - + newConfig(t) cfg := New() require.Equal(t, int(cfg.MaxTrackedConnections), cfg.MaxClosedConnectionsBuffered) }) @@ -377,9 +364,7 @@ func TestMaxClosedConnectionsBuffered(t *testing.T) { func TestMaxHTTPStatsBuffered(t *testing.T) { t.Run("value set through env var", func(t *testing.T) { - newConfig() - t.Cleanup(restoreGlobalConfig) - + newConfig(t) t.Setenv("DD_SYSTEM_PROBE_NETWORK_MAX_HTTP_STATS_BUFFERED", "50000") cfg := New() @@ -387,9 +372,7 @@ func TestMaxHTTPStatsBuffered(t *testing.T) { }) t.Run("value set through yaml", func(t *testing.T) { - newConfig() - t.Cleanup(restoreGlobalConfig) - + newConfig(t) cfg := configurationFromYAML(t, ` network_config: max_http_stats_buffered: 30000 @@ -417,6 +400,10 @@ func TestNetworkConfigEnabled(t *testing.T) { {sysIn: &ys, npmIn: &ys, usmIn: &ys, npmEnabled: true, usmEnabled: true}, } { t.Run(strconv.Itoa(i), func(t *testing.T) { + f, err := os.CreateTemp(t.TempDir(), "emptyconfig*.yaml") + require.NoError(t, err) + t.Cleanup(func() { f.Close() }) + if tc.sysIn != nil { t.Setenv("DD_SYSTEM_PROBE_ENABLED", strconv.FormatBool(*tc.sysIn)) } @@ -427,10 +414,8 @@ func TestNetworkConfigEnabled(t *testing.T) { t.Setenv("DD_SYSTEM_PROBE_SERVICE_MONITORING_ENABLED", strconv.FormatBool(*tc.usmIn)) } - newConfig() - t.Cleanup(restoreGlobalConfig) - - _, err := sysconfig.New("") + newConfig(t) + _, err = sysconfig.New(f.Name()) require.NoError(t, err) cfg := New() assert.Equal(t, tc.npmEnabled, cfg.NPMEnabled, "npm state") diff --git a/pkg/network/config/replace_rules.go b/pkg/network/config/replace_rules.go index fca366597fddc..db836c7dcb960 100644 --- a/pkg/network/config/replace_rules.go +++ b/pkg/network/config/replace_rules.go @@ -27,7 +27,7 @@ type ReplaceRule struct { } func parseReplaceRules(cfg ddconfig.Config, key string) ([]*ReplaceRule, error) { - if !config.Datadog.IsSet(key) { + if !config.SystemProbe.IsSet(key) { return nil, nil } diff --git a/pkg/network/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-EnableGoTLS.yaml b/pkg/network/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-EnableGoTLS.yaml index 8aa41095d586d..9806efbe41949 100644 --- a/pkg/network/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-EnableGoTLS.yaml +++ b/pkg/network/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-EnableGoTLS.yaml @@ -1,2 +1,2 @@ -system_probe_config: +service_monitoring_config: enable_go_tls_support: true diff --git a/pkg/network/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-EnableJavaTLS.yaml b/pkg/network/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-EnableJavaTLS.yaml new file mode 100644 index 0000000000000..5b71d8ee0d5c3 --- /dev/null +++ b/pkg/network/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-EnableJavaTLS.yaml @@ -0,0 +1,2 @@ +service_monitoring_config: + enable_java_tls_support: true diff --git a/pkg/network/dns/ebpf.go b/pkg/network/dns/ebpf.go index 2f06aa085ed9a..bc41d834f79ce 100644 --- a/pkg/network/dns/ebpf.go +++ b/pkg/network/dns/ebpf.go @@ -39,7 +39,7 @@ func newEBPFProgram(c *config.Config) (*ebpfProgram, error) { Probes: []*manager.Probe{ { ProbeIdentificationPair: manager.ProbeIdentificationPair{ - EBPFSection: string(probes.SocketDNSFilter), + EBPFSection: probes.SocketDNSFilter, EBPFFuncName: funcName, UID: probeUID, }, @@ -77,7 +77,7 @@ func (e *ebpfProgram) Init() error { ActivatedProbes: []manager.ProbesSelector{ &manager.ProbeSelector{ ProbeIdentificationPair: manager.ProbeIdentificationPair{ - EBPFSection: string(probes.SocketDNSFilter), + EBPFSection: probes.SocketDNSFilter, EBPFFuncName: funcName, UID: probeUID, }, diff --git a/pkg/network/dns/monitor_linux.go b/pkg/network/dns/monitor_linux.go index e96c8b618ee95..64023b8c38bff 100644 --- a/pkg/network/dns/monitor_linux.go +++ b/pkg/network/dns/monitor_linux.go @@ -59,7 +59,7 @@ func NewReverseDNS(cfg *config.Config) (ReverseDNS, error) { return nil, fmt.Errorf("error initializing ebpf programs: %w", err) } - filter, _ = p.GetProbe(manager.ProbeIdentificationPair{EBPFSection: string(probes.SocketDNSFilter), EBPFFuncName: funcName, UID: probeUID}) + filter, _ = p.GetProbe(manager.ProbeIdentificationPair{EBPFSection: probes.SocketDNSFilter, EBPFFuncName: funcName, UID: probeUID}) if filter == nil { return nil, fmt.Errorf("error retrieving socket filter") } diff --git a/pkg/network/driver/ddnpmapi.h b/pkg/network/driver/ddnpmapi.h index d4d976b033d54..1e6c6d3534297 100644 --- a/pkg/network/driver/ddnpmapi.h +++ b/pkg/network/driver/ddnpmapi.h @@ -16,7 +16,7 @@ typedef __int64 LONG64; typedef unsigned char uint8_t; // define a version signature so that the driver won't load out of date structures, etc. -#define DD_NPMDRIVER_VERSION 0x14 +#define DD_NPMDRIVER_VERSION 0x15 #define DD_NPMDRIVER_SIGNATURE ((uint64_t)0xDDFD << 32 | DD_NPMDRIVER_VERSION) // for more information on defining control codes, see @@ -89,12 +89,12 @@ typedef unsigned char uint8_t; #define DDNPMDRIVER_IOCTL_GET_OPEN_FLOWS CTL_CODE(FILE_DEVICE_NETWORK, \ 0x80D, \ - METHOD_BUFFERED,\ + METHOD_OUT_DIRECT,\ FILE_ANY_ACCESS) #define DDNPMDRIVER_IOCTL_GET_CLOSED_FLOWS CTL_CODE(FILE_DEVICE_NETWORK, \ 0x80E, \ - METHOD_BUFFERED,\ + METHOD_OUT_DIRECT,\ FILE_ANY_ACCESS) #define DDNPMDRIVER_IOCTL_SET_CLOSED_FLOWS_NOTIFY CTL_CODE(FILE_DEVICE_NETWORK, \ @@ -220,24 +220,32 @@ typedef struct _filterDefinition uint64_t interfaceIndex; } FILTER_DEFINITION; -/*! - * PACKET_HEADER structure - * - * provided by the driver during the upcall with implementation specific - * information in the header. - */ typedef struct _udpFlowData { uint64_t reserved; } UDP_FLOW_DATA; -typedef struct _tcpFlowData { +typedef enum _ConnectionStatus { + CONN_STAT_UNKNOWN, + CONN_STAT_ATTEMPTED, + CONN_STAT_ESTABLISHED, + CONN_STAT_ACKRST, + CONN_STAT_TIMEOUT +} CONNECTION_STATUS; + +typedef struct _tcpFlowData { uint64_t iRTT; // initial RTT uint64_t sRTT; // smoothed RTT uint64_t rttVariance; uint64_t retransmitCount; + CONNECTION_STATUS connectionStatus; } TCP_FLOW_DATA; -typedef struct _perFlowData { + +/** _userFlowData + * + * This structure holds the state that will be passed up to user space (system probe). +*/ +typedef struct _userFlowData { uint64_t flowHandle; uint64_t processId; uint16_t addressFamily; // AF_INET or AF_INET6 @@ -254,7 +262,7 @@ typedef struct _perFlowData { uint64_t packetsOut; uint64_t monotonicSentBytes; // total bytes including ip header uint64_t transportBytesOut; // payload (not including ip or transport header) - +//80 uint64_t packetsIn; uint64_t monotonicRecvBytes; uint64_t transportBytesIn; @@ -276,12 +284,13 @@ typedef struct _perFlowData { uint16_t tls_version_chosen; uint64_t tls_alpn_requested; uint64_t tls_alpn_chosen; +//64 144 // stats unique to a particular transport union { - TCP_FLOW_DATA tcp; + TCP_FLOW_DATA tcp; //36 UDP_FLOW_DATA udp; } protocol_u; -} PER_FLOW_DATA; +} USER_FLOW_DATA; #define CLASSIFICATION_UNCLASSIFIED (0) #define CLASSIFICATION_CLASSIFIED (CLASSIFICATION_UNCLASSIFIED + 1) diff --git a/pkg/network/driver/types.go b/pkg/network/driver/types.go index 1298c82ed54cb..5da0ccf291c80 100644 --- a/pkg/network/driver/types.go +++ b/pkg/network/driver/types.go @@ -31,6 +31,9 @@ const ( FlushPendingHttpTxnsIOCTL = C.DDNPMDRIVER_IOCTL_FLUSH_PENDING_HTTP_TRANSACTIONS EnableHttpIOCTL = C.DDNPMDRIVER_IOCTL_ENABLE_HTTP EnableClassifyIOCTL = C.DDNPMDRIVER_IOCTL_SET_CLASSIFY + SetClosedFlowsLimitIOCTL = C.DDNPMDRIVER_IOCTL_SET_CLOSED_FLOWS_NOTIFY + GetOpenFlowsIOCTL = C.DDNPMDRIVER_IOCTL_GET_OPEN_FLOWS + GetClosedFlowsIOCTL = C.DDNPMDRIVER_IOCTL_GET_CLOSED_FLOWS ) type FilterAddress C.struct__filterAddress @@ -50,11 +53,11 @@ type Stats C.struct__stats const StatsSize = C.sizeof_struct__stats -type PerFlowData C.struct__perFlowData +type PerFlowData C.struct__userFlowData type TCPFlowData C.struct__tcpFlowData type UDPFlowData C.struct__udpFlowData -const PerFlowDataSize = C.sizeof_struct__perFlowData +const PerFlowDataSize = C.sizeof_struct__userFlowData const ( FlowDirectionMask = C.FLOW_DIRECTION_MASK @@ -81,6 +84,11 @@ type ConnTupleType C.struct__ConnTupleType type HttpMethodType C.enum__HttpMethodType type ClassificationSettings C.struct__ClassificationConfigurationSettings +type TcpConnectionStatus C.enum__ConnectionStatus + +const ( + TcpStatusEstablished = C.CONN_STAT_ESTABLISHED +) const ( HttpTransactionTypeSize = C.sizeof_struct__HttpTransactionType HttpSettingsTypeSize = C.sizeof_struct__HttpConfigurationSettings diff --git a/pkg/network/driver/types_windows.go b/pkg/network/driver/types_windows.go index e2e5a259729e6..534d0474f3983 100644 --- a/pkg/network/driver/types_windows.go +++ b/pkg/network/driver/types_windows.go @@ -3,7 +3,7 @@ package driver -const Signature = 0xddfd00000014 +const Signature = 0xddfd00000015 const ( GetStatsIOCTL = 0x122004 @@ -15,6 +15,9 @@ const ( FlushPendingHttpTxnsIOCTL = 0x122020 EnableHttpIOCTL = 0x122030 EnableClassifyIOCTL = 0x122040 + SetClosedFlowsLimitIOCTL = 0x12203c + GetOpenFlowsIOCTL = 0x122036 + GetClosedFlowsIOCTL = 0x12203a ) type FilterAddress struct { @@ -122,19 +125,20 @@ type PerFlowData struct { Tls_version_chosen uint16 Tls_alpn_requested uint64 Tls_alpn_chosen uint64 - Protocol_u [32]byte + Protocol_u [36]byte } type TCPFlowData struct { - IRTT uint64 - SRTT uint64 - RttVariance uint64 - RetransmitCount uint64 + IRTT uint64 + SRTT uint64 + RttVariance uint64 + RetransmitCount uint64 + ConnectionStatus uint32 } type UDPFlowData struct { Reserved uint64 } -const PerFlowDataSize = 0xb0 +const PerFlowDataSize = 0xb4 const ( FlowDirectionMask = 0x300 @@ -185,6 +189,11 @@ type ClassificationSettings struct { Enabled uint64 } +type TcpConnectionStatus uint32 + +const ( + TcpStatusEstablished = 0x2 +) const ( HttpTransactionTypeSize = 0x50 HttpSettingsTypeSize = 0x14 diff --git a/pkg/network/driver_interface.go b/pkg/network/driver_interface.go index c49e8a974e546..d26ca5f6dffc4 100644 --- a/pkg/network/driver_interface.go +++ b/pkg/network/driver_interface.go @@ -46,25 +46,43 @@ const ( // DriverExpvarNames is a list of all the DriverExpvar names returned from GetStats var DriverExpvarNames = []DriverExpvar{totalFlowStats, flowHandleStats, flowStats, driverStats} +type driverReadBuffer []uint8 + +type driverResizeResult int + +const ( + ResizedDecreased driverResizeResult = -1 + ResizedUnchanged driverResizeResult = 0 + ResizedIncreased driverResizeResult = 1 +) + // DriverInterface holds all necessary information for interacting with the windows driver type DriverInterface struct { - totalFlows *atomic.Int64 - closedFlows *atomic.Int64 - openFlows *atomic.Int64 - moreDataErrors *atomic.Int64 - bufferSize *atomic.Int64 - nBufferIncreases *atomic.Int64 - nBufferDecreases *atomic.Int64 + totalFlows *atomic.Int64 + closedFlows *atomic.Int64 + openFlows *atomic.Int64 + moreDataErrors *atomic.Int64 + + nOpenBufferIncreases *atomic.Int64 + nOpenBufferDecreases *atomic.Int64 - maxOpenFlows uint64 - maxClosedFlows uint64 + nClosedBufferIncreases *atomic.Int64 + nClosedBufferDecreases *atomic.Int64 + + maxOpenFlows uint64 + maxClosedFlows uint64 + closedFlowsSignalLimit uint64 driverFlowHandle driver.Handle + closeFlowEvent windows.Handle enableMonotonicCounts bool - bufferLock sync.Mutex - readBuffer []uint8 + openBufferLock sync.Mutex + openBuffer driverReadBuffer + + closedBufferLock sync.Mutex + closedBuffer driverReadBuffer cfg *config.Config } @@ -77,19 +95,22 @@ type HandleCreateFn func(flags uint32, handleType driver.HandleType) (driver.Han // NewDriverInterface returns a DriverInterface struct for interacting with the driver func NewDriverInterface(cfg *config.Config, handleFunc HandleCreateFn) (*DriverInterface, error) { dc := &DriverInterface{ - totalFlows: atomic.NewInt64(0), - closedFlows: atomic.NewInt64(0), - openFlows: atomic.NewInt64(0), - moreDataErrors: atomic.NewInt64(0), - bufferSize: atomic.NewInt64(defaultDriverBufferSize), - nBufferIncreases: atomic.NewInt64(0), - nBufferDecreases: atomic.NewInt64(0), - - cfg: cfg, - enableMonotonicCounts: cfg.EnableMonotonicCount, - readBuffer: make([]byte, defaultDriverBufferSize), - maxOpenFlows: uint64(cfg.MaxTrackedConnections), - maxClosedFlows: uint64(cfg.MaxClosedConnectionsBuffered), + totalFlows: atomic.NewInt64(0), + closedFlows: atomic.NewInt64(0), + openFlows: atomic.NewInt64(0), + moreDataErrors: atomic.NewInt64(0), + nOpenBufferIncreases: atomic.NewInt64(0), + nOpenBufferDecreases: atomic.NewInt64(0), + nClosedBufferIncreases: atomic.NewInt64(0), + nClosedBufferDecreases: atomic.NewInt64(0), + + cfg: cfg, + enableMonotonicCounts: cfg.EnableMonotonicCount, + openBuffer: make([]byte, defaultDriverBufferSize), + closedBuffer: make([]byte, defaultDriverBufferSize), + maxOpenFlows: uint64(cfg.MaxTrackedConnections), + maxClosedFlows: uint64(cfg.MaxClosedConnectionsBuffered), + closedFlowsSignalLimit: uint64(cfg.ClosedConnectionFlushThreshold), } h, err := handleFunc(0, driver.FlowHandle) @@ -112,8 +133,13 @@ func NewDriverInterface(cfg *config.Config, handleFunc HandleCreateFn) (*DriverI // Close shuts down the driver interface func (di *DriverInterface) Close() error { if err := di.driverFlowHandle.Close(); err != nil { - return fmt.Errorf("error closing flow file handle: %w", err) + log.Warnf("error closing flow file handle: %v", err) + } + windows.SetEvent(di.closeFlowEvent) + if err := windows.CloseHandle(di.closeFlowEvent); err != nil { + log.Warnf("Error closing closed flow wait handle") } + di.closeFlowEvent = windows.Handle(0) return nil } @@ -136,6 +162,25 @@ func (di *DriverInterface) setupFlowHandle() error { return err } + // open the event handle for getting notifications that it's time + // to go get the closed flows + u16eventname, err := windows.UTF16PtrFromString("Global\\DDNPMClosedFlowsReadyEvent") + if err != nil { + return err + } + h, err := windows.CreateEvent(nil, 1, 0, u16eventname) + if err != nil { + if err == windows.ERROR_ALREADY_EXISTS && h != windows.Handle(0) { + // ERROR_ALREADY_EXISTS is expected, because the driver will open + // the event on fh creation; we're just opening a different handle + // to the same event + di.closeFlowEvent = h + } else { + return fmt.Errorf("Failed to create closed flow event %v", err) + } + } else { + di.closeFlowEvent = h + } // Set up the maximum amount of connections err = di.setFlowParams() if err != nil { @@ -193,9 +238,19 @@ func (di *DriverInterface) GetStats() (map[DriverExpvar]interface{}, error) { openFlows := di.openFlows.Swap(0) closedFlows := di.closedFlows.Swap(0) moreDataErrors := di.moreDataErrors.Swap(0) - bufferSize := di.bufferSize.Load() - nBufferIncreases := di.nBufferIncreases.Load() - nBufferDecreases := di.nBufferDecreases.Load() + di.closedBufferLock.Lock() + closedBufferSize := int64(cap(di.closedBuffer)) + di.closedBufferLock.Unlock() + + nClosedBufferIncreases := di.nClosedBufferIncreases.Load() + nClosedBufferDecreases := di.nClosedBufferDecreases.Load() + + di.openBufferLock.Lock() + openBufferSize := int64(cap(di.openBuffer)) + di.openBufferLock.Unlock() + + nOpenBufferIncreases := di.nOpenBufferIncreases.Load() + nOpenBufferDecreases := di.nOpenBufferDecreases.Load() return map[DriverExpvar]interface{}{ flowHandleStats: stats["handle"], @@ -205,10 +260,13 @@ func (di *DriverInterface) GetStats() (map[DriverExpvar]interface{}, error) { "closed": closedFlows, }, driverStats: map[string]int64{ - "more_data_errors": moreDataErrors, - "buffer_size": bufferSize, - "buffer_increases": nBufferIncreases, - "buffer_decreases": nBufferDecreases, + "more_data_errors": moreDataErrors, + "closed_buffer_size": closedBufferSize, + "closed_buffer_increases": nClosedBufferIncreases, + "closed_buffer_decreases": nClosedBufferDecreases, + "open_buffer_size": openBufferSize, + "open_buffer_increases": nOpenBufferIncreases, + "open_buffer_decreases": nOpenBufferDecreases, }, }, nil } @@ -228,84 +286,119 @@ func printClassification(fd *driver.PerFlowData) { } } -// GetConnectionStats will read all flows from the driver and convert them into ConnectionStats. -// It returns the count of connections added to the active and closed buffers, respectively. -func (di *DriverInterface) GetConnectionStats(activeBuf *ConnectionBuffer, closedBuf *ConnectionBuffer, filter func(*ConnectionStats) bool) (int, int, error) { - di.bufferLock.Lock() - defer di.bufferLock.Unlock() +func (di *DriverInterface) getFlowConnectionStats(ioctl uint32, connbuffer *driverReadBuffer, outbuffer *ConnectionBuffer, filter func(*ConnectionStats) bool) (int, error, int, int) { - startActive, startClosed := activeBuf.Len(), closedBuf.Len() + start := outbuffer.Len() + increases := int(0) + decreases := int(0) var bytesRead uint32 var totalBytesRead uint32 + // keep reading while driver says there is more data available for err := error(windows.ERROR_MORE_DATA); err == windows.ERROR_MORE_DATA; { - err = di.driverFlowHandle.ReadFile(di.readBuffer, &bytesRead, nil) + err = di.driverFlowHandle.DeviceIoControl(ioctl, nil, 0, + (*byte)(unsafe.Pointer(&((*connbuffer)[0]))), + uint32(len(*connbuffer)), + &bytesRead, nil) if err != nil { if err == windows.ERROR_NO_MORE_ITEMS { break } if err != windows.ERROR_MORE_DATA { - return 0, 0, fmt.Errorf("ReadFile: %w", err) + return 0, fmt.Errorf("ReadFile: %w", err), 0, 0 } - di.moreDataErrors.Inc() } - // Windows driver hashmap implementation could return this if the // provided buffer is too small to contain all entries in one of // the hashmap's linkedlists if bytesRead == 0 && err == windows.ERROR_MORE_DATA { - di.resizeDriverBuffer(cap(di.readBuffer) * 2) + //log.Warnf("Buffer not large enough for hash bucket") + //return 0, fmt.Errorf("Buffer not large enough for hash bucket"), 0, 0 + connbuffer.resizeDriverBuffer(len(*connbuffer) * 2) + increases++ continue } totalBytesRead += bytesRead var buf []byte for bytesUsed := uint32(0); bytesUsed < bytesRead; bytesUsed += driver.PerFlowDataSize { - buf = di.readBuffer[bytesUsed:] + buf = (*connbuffer)[bytesUsed:] pfd := (*driver.PerFlowData)(unsafe.Pointer(&(buf[0]))) - - //printClassification(pfd) - if isFlowClosed(pfd.Flags) { - c := closedBuf.Next() - FlowToConnStat(c, pfd, di.enableMonotonicCounts) - if !filter(c) { - closedBuf.Reclaim(1) - continue - } - } else { - c := activeBuf.Next() - FlowToConnStat(c, pfd, di.enableMonotonicCounts) - if !filter(c) { - activeBuf.Reclaim(1) - continue - } + c := outbuffer.Next() + FlowToConnStat(c, pfd, di.enableMonotonicCounts) + if !filter(c) { + outbuffer.Reclaim(1) + continue } } - di.resizeDriverBuffer(int(totalBytesRead)) + resized := connbuffer.resizeDriverBuffer(int(totalBytesRead)) + switch resized { + case ResizedIncreased: + increases++ + case ResizedDecreased: + decreases++ + case ResizedUnchanged: + fallthrough + default: + // do nothing + break + } } + count := outbuffer.Len() - start + return count, nil, increases, decreases +} + +// GetConnectionStats will read all open flows from the driver and convert them into ConnectionStats. +// It returns the count of connections added to the active and closed buffers, respectively. +func (di *DriverInterface) GetOpenConnectionStats(openBuf *ConnectionBuffer, filter func(*ConnectionStats) bool) (int, error) { + di.openBufferLock.Lock() + defer di.openBufferLock.Unlock() + + count, err, increases, decreases := di.getFlowConnectionStats(driver.GetOpenFlowsIOCTL, &(di.openBuffer), openBuf, filter) + if err != nil { + return 0, err + } + di.openFlows.Add(int64(count)) + di.totalFlows.Add(int64(count)) - activeCount := activeBuf.Len() - startActive - closedCount := closedBuf.Len() - startClosed - di.openFlows.Add(int64(activeCount)) - di.closedFlows.Add(int64(closedCount)) - di.totalFlows.Add(int64(activeCount + closedCount)) + di.nOpenBufferIncreases.Add(int64(increases)) + di.nOpenBufferDecreases.Add(int64(decreases)) + return count, err - return activeCount, closedCount, nil } -func (di *DriverInterface) resizeDriverBuffer(compareSize int) { +// GetConnectionStats will read all closed from the driver and convert them into ConnectionStats. +// It returns the count of connections added to the active and closed buffers, respectively. +func (di *DriverInterface) GetClosedConnectionStats(closedBuf *ConnectionBuffer, filter func(*ConnectionStats) bool) (int, error) { + di.closedBufferLock.Lock() + defer di.closedBufferLock.Unlock() + + count, err, increases, decreases := di.getFlowConnectionStats(driver.GetClosedFlowsIOCTL, &(di.closedBuffer), closedBuf, filter) + if err != nil { + return 0, err + } + di.closedFlows.Add(int64(count)) + di.totalFlows.Add(int64(count)) + di.nClosedBufferIncreases.Add(int64(increases)) + di.nClosedBufferDecreases.Add(int64(decreases)) + + return count, err +} + +func (db *driverReadBuffer) resizeDriverBuffer(compareSize int) driverResizeResult { // Explicitly setting len to 0 causes the ReadFile syscall to break, so allocate buffer with cap = len - if compareSize >= cap(di.readBuffer)*2 { - di.readBuffer = make([]uint8, cap(di.readBuffer)*2) - di.nBufferIncreases.Inc() - di.bufferSize.Store(int64(len(di.readBuffer))) - } else if compareSize <= cap(di.readBuffer)/2 { - // Take the max of di.readBuffer/2 and compareSize to limit future array resizes - di.readBuffer = make([]uint8, int(math.Max(float64(cap(di.readBuffer)/2), float64(compareSize)))) - di.nBufferDecreases.Inc() - di.bufferSize.Store(int64(len(di.readBuffer))) + origcap := cap(*db) + if compareSize >= origcap*2 { + *db = make([]uint8, origcap*2) + return ResizedIncreased + } else if compareSize <= origcap/2 { + // Take the max of driverReadBuffer/2 and compareSize to limit future array resizes + *db = make([]uint8, int(math.Max(float64(origcap/2), float64(compareSize)))) + return ResizedDecreased } + // else + return ResizedUnchanged } func minUint64(a, b uint64) uint64 { @@ -346,6 +439,20 @@ func (di *DriverInterface) setFlowParams() error { if err != nil { log.Warnf("Failed to set max number of closed flows to %v %v", maxClosedFlows, err) } + + threshold := di.closedFlowsSignalLimit + if 0 == threshold { + threshold = maxClosedFlows / 2 + } + err = di.driverFlowHandle.DeviceIoControl( + driver.SetClosedFlowsLimitIOCTL, + (*byte)(unsafe.Pointer(&threshold)), + uint32(unsafe.Sizeof(threshold)), + nil, + uint32(0), nil, nil) + if err != nil { + log.Warnf("Failed to set closed flows threshold to %v %v", maxClosedFlows, err) + } return err } @@ -432,3 +539,10 @@ func (di *DriverInterface) createFlowHandleFilters() ([]driver.FilterDefinition, return filters, nil } + +// GetClosedFlowsEvent returns the base Windows handle for the event +// that gets signalled whenever the number of closed flows exceeds +// the configured amount. +func (di *DriverInterface) GetClosedFlowsEvent() windows.Handle { + return di.closeFlowEvent +} diff --git a/pkg/network/driver_interface_test.go b/pkg/network/driver_interface_test.go index 850d0e9942a09..61020695e41e2 100644 --- a/pkg/network/driver_interface_test.go +++ b/pkg/network/driver_interface_test.go @@ -72,7 +72,11 @@ func TestConnectionStatsInfiniteLoop(t *testing.T) { }) require.NoError(t, err, "Failed to create new driver interface") - _, _, err = di.GetConnectionStats(activeBuf, closedBuf, func(c *ConnectionStats) bool { + _, err = di.GetClosedConnectionStats(closedBuf, func(c *ConnectionStats) bool { + return true + }) + require.NoError(t, err, "Failed to get connection stats") + _, err = di.GetOpenConnectionStats(activeBuf, func(c *ConnectionStats) bool { return true }) require.NoError(t, err, "Failed to get connection stats") diff --git a/pkg/network/ebpf/c/prebuilt/http.c b/pkg/network/ebpf/c/prebuilt/http.c index 93f76aceb15e0..e418ca283a5eb 100644 --- a/pkg/network/ebpf/c/prebuilt/http.c +++ b/pkg/network/ebpf/c/prebuilt/http.c @@ -9,12 +9,12 @@ #include "sock.h" #include "sockfd.h" #include "port_range.h" -#include "protocols/http.h" -#include "protocols/https.h" -#include "protocols/http-buffer.h" -#include "protocols/tags-types.h" -#include "protocols/protocol-dispatcher-helpers.h" +#include "protocols/classification/dispatcher-helpers.h" +#include "protocols/http/http.h" +#include "protocols/http/buffer.h" +#include "protocols/tls/https.h" +#include "protocols/tls/tags-types.h" #define SO_SUFFIX_SIZE 3 diff --git a/pkg/network/ebpf/c/prebuilt/tracer.c b/pkg/network/ebpf/c/prebuilt/tracer.c index b1c8d6fef5163..2db88a4dc1c78 100644 --- a/pkg/network/ebpf/c/prebuilt/tracer.c +++ b/pkg/network/ebpf/c/prebuilt/tracer.c @@ -3,20 +3,20 @@ #include "bpf_builtins.h" #include "bpf_tracing.h" #include "tracer.h" - -#include "protocols/protocol-classification-helpers.h" #include "tracer-events.h" #include "tracer-maps.h" #include "tracer-stats.h" #include "tracer-telemetry.h" #include "sockfd.h" #include "tcp-recv.h" - #include "bpf_endian.h" #include "ip.h" #include "ipv6.h" #include "port.h" +#include "protocols/classification/tracer-maps.h" +#include "protocols/classification/protocol-classification.h" + #include #include #include @@ -30,6 +30,16 @@ #include "sock.h" #include "skb.h" +// This entry point is needed to bypass a memory limit on socket filters. +// There is a limitation on number of instructions can be attached to a socket filter, +// as we classify more protocols, we reached that limit, thus we workaround it +// by using tail call. +SEC("socket/classifier_entry") +int socket__classifier_entry(struct __sk_buff *skb) { + bpf_tail_call_compat(skb, &classification_progs, CLASSIFICATION_PROG); + return 0; +} + // The entrypoint for all packets. SEC("socket/classifier") int socket__classifier(struct __sk_buff *skb) { @@ -609,27 +619,12 @@ static __always_inline int sys_enter_bind(struct socket *sock, struct sockaddr * return 0; } - u16 sin_port = 0; - sa_family_t family = 0; - bpf_probe_read_kernel_with_telemetry(&family, sizeof(sa_family_t), &addr->sa_family); - if (family == AF_INET) { - bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in *)addr)->sin_port)); - } else if (family == AF_INET6) { - bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in6 *)addr)->sin6_port)); - } - - sin_port = ntohs(sin_port); - if (sin_port == 0) { - log_debug("ERR(sys_enter_bind): sin_port is 0\n"); - return 0; - } - // write to pending_binds so the retprobe knows we can mark this as binding. bind_syscall_args_t args = {}; - args.port = sin_port; - + bpf_probe_read_kernel_with_telemetry(&args.sk, sizeof(args.sk), (char*)sock + offset_socket_sk()); + args.addr = addr; bpf_map_update_with_telemetry(pending_bind, &tid, &args, BPF_ANY); - log_debug("sys_enter_bind: started a bind on UDP port=%d sock=%llx tid=%u\n", sin_port, sock, tid); + log_debug("sys_enter_bind: started a bind on UDP sock=%llx tid=%u\n", sock, tid); return 0; } @@ -658,8 +653,7 @@ static __always_inline int sys_exit_bind(__s64 ret) { __u64 tid = bpf_get_current_pid_tgid(); // bail if this bind() is not the one we're instrumenting - bind_syscall_args_t *args; - args = bpf_map_lookup_elem(&pending_bind, &tid); + bind_syscall_args_t *args = bpf_map_lookup_elem(&pending_bind, &tid); log_debug("sys_exit_bind: tid=%u, ret=%d\n", tid, ret); @@ -668,13 +662,33 @@ static __always_inline int sys_exit_bind(__s64 ret) { return 0; } - __u16 sin_port = args->port; + struct sock * sk = args->sk; + struct sockaddr *addr = args->addr; bpf_map_delete_elem(&pending_bind, &tid); if (ret != 0) { return 0; } + u16 sin_port = 0; + sa_family_t family = 0; + bpf_probe_read_kernel_with_telemetry(&family, sizeof(sa_family_t), &addr->sa_family); + if (family == AF_INET) { + bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in *)addr)->sin_port)); + } else if (family == AF_INET6) { + bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in6 *)addr)->sin6_port)); + } + + sin_port = ntohs(sin_port); + if (sin_port == 0) { + sin_port = read_sport(sk); + } + + if (sin_port == 0) { + log_debug("ERR(sys_exit_bind): sin_port is 0\n"); + return 0; + } + port_binding_t pb = {}; pb.netns = 0; // don't have net ns info in this context pb.port = sin_port; diff --git a/pkg/network/ebpf/c/prebuilt/usm_events_test.c b/pkg/network/ebpf/c/prebuilt/usm_events_test.c new file mode 100644 index 0000000000000..2810c33becae9 --- /dev/null +++ b/pkg/network/ebpf/c/prebuilt/usm_events_test.c @@ -0,0 +1,52 @@ +#include "kconfig.h" +#include +#include + +#include "bpf_helpers.h" +#include "bpf_builtins.h" +#include "map-defs.h" +#include "protocols/events.h" + +// -------------------------------------------------------- +// this is a test program for pkg/networks/protocols/events +// -------------------------------------------------------- + +#define BATCH_SIZE 15 + +typedef struct { + __u32 expected_pid; + __u64 expected_fd; + __u64 event_id; +} test_ctx_t; + +BPF_LRU_MAP(test, __u32, test_ctx_t, 1); +USM_EVENTS_INIT(test, u64, BATCH_SIZE); + +// source /sys/kernel/debug/tracing/events/syscalls/sys_enter_write/format +struct syscalls_enter_write_args { + unsigned long long unused; + long syscall_nr; + unsigned long long fd; + const char* buf; + size_t count; +}; + +SEC("tracepoint/syscalls/sys_enter_write") +int tracepoint__syscalls__sys_enter_write(struct syscalls_enter_write_args *ctx) { + __u32 zero = 0; + __u32 pid = bpf_get_current_pid_tgid() >> 32; + test_ctx_t *test_ctx = bpf_map_lookup_elem(&test, &zero); + if (!test_ctx || test_ctx->expected_fd != ctx->fd || test_ctx->expected_pid != pid) + return 0; + + // we're echoing to userspace whatever we read from the eBPF map + __u64 event = test_ctx->event_id; + + // these functions are dynamically defined by `USM_EVENTS_INIT` + test_batch_enqueue(&event); + test_flush_batch((void*)ctx); + return 0; +} + +__u32 _version SEC("version") = 0xFFFFFFFE; // NOLINT(bugprone-reserved-identifier) +char _license[] SEC("license") = "GPL"; // NOLINT(bugprone-reserved-identifier) diff --git a/pkg/network/ebpf/c/protocols/amqp/defs.h b/pkg/network/ebpf/c/protocols/amqp/defs.h new file mode 100644 index 0000000000000..329d0673c0be7 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/amqp/defs.h @@ -0,0 +1,33 @@ +#ifndef __AMQP_DEFS_H +#define __AMQP_DEFS_H + +#define AMQP_PREFACE "AMQP" + +// RabbitMQ supported classes. +// Ref: https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf +#define AMQP_CONNECTION_CLASS 10 +#define AMQP_BASIC_CLASS 60 +#define AMQP_CHANNEL_CLASS 20 + +#define AMQP_METHOD_CLOSE_OK 40 +#define AMQP_METHOD_CLOSE 41 + +// RabbitMQ supported connections. +#define AMQP_METHOD_CONNECTION_START 10 +#define AMQP_METHOD_CONNECTION_START_OK 11 + +// RabbitMQ supported methods types. +#define AMQP_METHOD_CONSUME 20 +#define AMQP_METHOD_PUBLISH 40 +#define AMQP_METHOD_DELIVER 60 +#define AMQP_FRAME_METHOD_TYPE 1 + +#define AMQP_MIN_FRAME_LENGTH 8 +#define AMQP_MIN_PAYLOAD_LENGTH 11 + +typedef struct { + __u16 class_id; + __u16 method_id; +} amqp_header; + +#endif diff --git a/pkg/network/ebpf/c/protocols/amqp/helpers.h b/pkg/network/ebpf/c/protocols/amqp/helpers.h new file mode 100644 index 0000000000000..8704adc6a8606 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/amqp/helpers.h @@ -0,0 +1,76 @@ +#ifndef __AMQP_HELPERS_H +#define __AMQP_HELPERS_H + +#include "bpf_endian.h" + +#include "protocols/amqp/defs.h" +#include "protocols/classification/common.h" + +// The method checks if the given buffer includes the protocol header which must be sent in the start of a new connection. +// Ref: https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf +static __always_inline bool is_amqp_protocol_header(const char* buf, __u32 buf_size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, AMQP_MIN_FRAME_LENGTH); + + bool match = !bpf_memcmp(buf, AMQP_PREFACE, sizeof(AMQP_PREFACE)-1); + + return match; +} + +// The method checks if the given buffer is an AMQP message. +// Ref: https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf +static __always_inline bool is_amqp(const char* buf, __u32 buf_size) { + // New connection should start with protocol header of AMQP. + // Ref https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf. + if (is_amqp_protocol_header(buf, buf_size)) { + return true; + } + + // Validate that we will be able to get from the buffer the class and method ids. + if (buf_size < AMQP_MIN_PAYLOAD_LENGTH) { + return false; + } + + __u8 frame_type = buf[0]; + // Check only for method frame type. + if (frame_type != AMQP_FRAME_METHOD_TYPE) { + return false; + } + + // We extract the class id and method id by big endian from the buffer. + // Ref https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf. + amqp_header *hdr = (amqp_header *)(buf+7); + __u16 class_id = bpf_ntohs(hdr->class_id); + __u16 method_id = bpf_ntohs(hdr->method_id); + + switch (class_id) { + case AMQP_CONNECTION_CLASS: + switch (method_id) { + case AMQP_METHOD_CONNECTION_START: + case AMQP_METHOD_CONNECTION_START_OK: + return true; + default: + return false; + } + case AMQP_BASIC_CLASS: + switch (method_id) { + case AMQP_METHOD_PUBLISH: + case AMQP_METHOD_DELIVER: + case AMQP_METHOD_CONSUME: + return true; + default: + return false; + } + case AMQP_CHANNEL_CLASS: + switch (method_id) { + case AMQP_METHOD_CLOSE_OK: + case AMQP_METHOD_CLOSE: + return true; + default: + return false; + } + default: + return false; + } +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/classification/common.h b/pkg/network/ebpf/c/protocols/classification/common.h new file mode 100644 index 0000000000000..59f675fb9af09 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/classification/common.h @@ -0,0 +1,99 @@ +#ifndef __PROTOCOL_CLASSIFICATION_COMMON_H +#define __PROTOCOL_CLASSIFICATION_COMMON_H + +#include + +#include "bpf_builtins.h" +#include "bpf_telemetry.h" + +// Patch to support old kernels that don't contain bpf_skb_load_bytes, by adding a dummy implementation to bypass runtime compilation. +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0) +long bpf_skb_load_bytes_with_telemetry(const void *skb, u32 offset, void *to, u32 len) {return 0;} +#endif + +#define CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, min_buff_size) \ + do { \ + if (buf_size < min_buff_size) { \ + return false; \ + } \ + \ + if (buf == NULL) { \ + return false; \ + } \ + } while (0) + +// Returns true if the packet is TCP. +static __always_inline bool is_tcp(conn_tuple_t *tup) { + return tup->metadata & CONN_TYPE_TCP; +} + +// Returns true if the payload is empty. +static __always_inline bool is_payload_empty(struct __sk_buff *skb, skb_info_t *skb_info) { + return skb_info->data_off == skb->len; +} + +// The method is used to read the data buffer from the __sk_buf struct. Similar implementation as `read_into_buffer_skb` +// from http parsing, but uses a different constant (CLASSIFICATION_MAX_BUFFER). +static __always_inline void read_into_buffer_for_classification(char *buffer, struct __sk_buff *skb, skb_info_t *info) { + u64 offset = (u64)info->data_off; + +#define BLK_SIZE (16) + const u32 len = CLASSIFICATION_MAX_BUFFER < (skb->len - (u32)offset) ? (u32)offset + CLASSIFICATION_MAX_BUFFER : skb->len; + + unsigned i = 0; + +#pragma unroll(CLASSIFICATION_MAX_BUFFER / BLK_SIZE) + for (; i < (CLASSIFICATION_MAX_BUFFER / BLK_SIZE); i++) { + if (offset + BLK_SIZE - 1 >= len) { break; } + + bpf_skb_load_bytes_with_telemetry(skb, offset, &buffer[i * BLK_SIZE], BLK_SIZE); + offset += BLK_SIZE; + } + + // This part is very hard to write in a loop and unroll it. + // Indeed, mostly because of older kernel verifiers, we want to make sure the offset into the buffer is not + // stored on the stack, so that the verifier is able to verify that we're not doing out-of-bound on + // the stack. + // Basically, we should get a register from the code block above containing an fp relative address. As + // we are doing `buffer[0]` here, there is not dynamic computation on that said register after this, + // and thus the verifier is able to ensure that we are in-bound. + void *buf = &buffer[i * BLK_SIZE]; + // Check that we have enough room in the request fragment buffer. Even + // though that's not strictly needed here, the verifier does not know that, + // so this check makes it happy. + if (i * BLK_SIZE >= CLASSIFICATION_MAX_BUFFER) { + return; + } else if (offset + 14 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 15); + } else if (offset + 13 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 14); + } else if (offset + 12 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 13); + } else if (offset + 11 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 12); + } else if (offset + 10 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 11); + } else if (offset + 9 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 10); + } else if (offset + 8 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 9); + } else if (offset + 7 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 8); + } else if (offset + 6 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 7); + } else if (offset + 5 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 6); + } else if (offset + 4 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 5); + } else if (offset + 3 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 4); + } else if (offset + 2 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 3); + } else if (offset + 1 < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 2); + } else if (offset < len) { + bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 1); + } +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/protocol-classification-defs.h b/pkg/network/ebpf/c/protocols/classification/defs.h similarity index 55% rename from pkg/network/ebpf/c/protocols/protocol-classification-defs.h rename to pkg/network/ebpf/c/protocols/classification/defs.h index b7ef5953b33a1..9026bd2e171f9 100644 --- a/pkg/network/ebpf/c/protocols/protocol-classification-defs.h +++ b/pkg/network/ebpf/c/protocols/classification/defs.h @@ -3,38 +3,18 @@ #include +#include "protocols/amqp/defs.h" +#include "protocols/http/classification-defs.h" +#include "protocols/http2/defs.h" +#include "protocols/mongo/defs.h" +#include "protocols/redis/defs.h" +#include "protocols/sql/defs.h" + // Represents the max buffer size required to classify protocols . // We need to round it to be multiplication of 16 since we are reading blocks of 16 bytes in read_into_buffer_skb_all_kernels. // ATM, it is HTTP2_MARKER_SIZE + 8 bytes for padding, #define CLASSIFICATION_MAX_BUFFER (HTTP2_MARKER_SIZE + 8) -// Checkout https://datatracker.ietf.org/doc/html/rfc7540 under "HTTP/2 Connection Preface" section -#define HTTP2_MARKER_SIZE 24 - -// The minimal HTTP response has 17 characters: HTTP/1.1 200 OK\r\n -// The minimal HTTP request has 16 characters: GET x HTTP/1.1\r\n -#define HTTP_MIN_SIZE 16 - -// RabbitMQ supported classes. -// Ref: https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf -#define AMQP_CONNECTION_CLASS 10 -#define AMQP_BASIC_CLASS 60 - -// RabbitMQ supported connections. -#define AMQP_METHOD_CONNECTION_START 10 -#define AMQP_METHOD_CONNECTION_START_OK 11 - -// RabbitMQ supported methods types. -#define AMQP_METHOD_CONSUME 20 -#define AMQP_METHOD_PUBLISH 40 -#define AMQP_METHOD_DELIVER 60 -#define AMQP_FRAME_METHOD_TYPE 1 - -#define AMQP_MIN_FRAME_LENGTH 8 -#define AMQP_MIN_PAYLOAD_LENGTH 11 - -#define REDIS_MIN_FRAME_LENGTH 3 - // The enum below represents all different protocols we know to classify. // We set the size of the enum to be 8 bits, by adding max value (max uint8 which is 255) and // `__attribute__ ((packed))` to tell the compiler to use as minimum bits as needed. Due to our max @@ -45,6 +25,8 @@ typedef enum { PROTOCOL_HTTP, PROTOCOL_HTTP2, PROTOCOL_TLS, + PROTOCOL_MONGO = 6, + PROTOCOL_POSTGRES = 7, PROTOCOL_AMQP = 8, PROTOCOL_REDIS = 9, // Add new protocols before that line. diff --git a/pkg/network/ebpf/c/protocols/protocol-dispatcher-helpers.h b/pkg/network/ebpf/c/protocols/classification/dispatcher-helpers.h similarity index 78% rename from pkg/network/ebpf/c/protocols/protocol-dispatcher-helpers.h rename to pkg/network/ebpf/c/protocols/classification/dispatcher-helpers.h index c7c70a073da4a..27077574ed008 100644 --- a/pkg/network/ebpf/c/protocols/protocol-dispatcher-helpers.h +++ b/pkg/network/ebpf/c/protocols/classification/dispatcher-helpers.h @@ -3,10 +3,15 @@ #include -#include "protocol-dispatcher-maps.h" -#include "protocol-classification-helpers.h" #include "ip.h" +#include "protocols/classification/defs.h" +#include "protocols/classification/maps.h" +#include "protocols/classification/structs.h" +#include "protocols/classification/dispatcher-maps.h" +#include "protocols/http/classification-helpers.h" +#include "protocols/http2/helpers.h" + // Returns true if the payload represents a TCP termination by checking if the tcp flags contains TCPHDR_FIN or TCPHDR_RST. static __always_inline bool is_tcp_termination(skb_info_t *skb_info) { return skb_info->tcp_flags & (TCPHDR_FIN | TCPHDR_RST); @@ -35,6 +40,24 @@ static __always_inline bool has_sequence_seen_before(conn_tuple_t *tup, skb_info return false; } +// Determines the protocols of the given buffer. If we already classified the payload (a.k.a protocol out param +// has a known protocol), then we do nothing. +static __always_inline void classify_protocol_for_dispatcher(protocol_t *protocol, conn_tuple_t *tup, const char *buf, __u32 size) { + if (protocol == NULL || *protocol != PROTOCOL_UNKNOWN) { + return; + } + + if (is_http(buf, size)) { + *protocol = PROTOCOL_HTTP; + } else if (is_http2(buf, size)) { + *protocol = PROTOCOL_HTTP2; + } else { + *protocol = PROTOCOL_UNKNOWN; + } + + log_debug("[protocol_dispatcher_classifier]: Classified protocol as %d %d; %s\n", *protocol, size, buf); +} + // A shared implementation for the runtime & prebuilt socket filter that classifies & dispatches the protocols of the connections. static __always_inline void protocol_dispatcher_entrypoint(struct __sk_buff *skb) { skb_info_t skb_info = {0}; @@ -66,7 +89,7 @@ static __always_inline void protocol_dispatcher_entrypoint(struct __sk_buff *skb read_into_buffer_for_classification((char *)request_fragment, skb, &skb_info); const size_t payload_length = skb->len - skb_info.data_off; const size_t final_fragment_size = payload_length < CLASSIFICATION_MAX_BUFFER ? payload_length : CLASSIFICATION_MAX_BUFFER; - classify_protocol(&cur_fragment_protocol, request_fragment, final_fragment_size); + classify_protocol_for_dispatcher(&cur_fragment_protocol, &skb_tup, request_fragment, final_fragment_size); log_debug("[protocol_dispatcher_entrypoint]: %p Classifying protocol as: %d\n", skb, cur_fragment_protocol); // If there has been a change in the classification, save the new protocol. if (cur_fragment_protocol != PROTOCOL_UNKNOWN) { diff --git a/pkg/network/ebpf/c/protocols/protocol-dispatcher-maps.h b/pkg/network/ebpf/c/protocols/classification/dispatcher-maps.h similarity index 72% rename from pkg/network/ebpf/c/protocols/protocol-dispatcher-maps.h rename to pkg/network/ebpf/c/protocols/classification/dispatcher-maps.h index 604a2a277b1ff..547f0b0b4ef64 100644 --- a/pkg/network/ebpf/c/protocols/protocol-dispatcher-maps.h +++ b/pkg/network/ebpf/c/protocols/classification/dispatcher-maps.h @@ -1,12 +1,17 @@ #ifndef __PROTOCOL_DISPATCHER_MAPS_H #define __PROTOCOL_DISPATCHER_MAPS_H -#include "protocol-classification-defs.h" #include "map-defs.h" +#include "protocols/classification/defs.h" + +// Maps a connection tuple to latest tcp segment we've processed. Helps to detect same packets that travels multiple +// interfaces or retransmissions. +BPF_HASH_MAP(connection_states, conn_tuple_t, u32, 0) + // Maps a connection tuple to its classified protocol. Used to reduce redundant classification procedures on the same // connection. Assumption: each connection has a single protocol. -BPF_LRU_MAP(dispatcher_connection_protocol, conn_tuple_t, protocol_t, 1024) +BPF_LRU_MAP(dispatcher_connection_protocol, conn_tuple_t, protocol_t, 0) // Map used to store the sub program actually used by the socket filter. // This is done to avoid memory limitation when attaching a filter to diff --git a/pkg/network/ebpf/c/protocols/classification/maps.h b/pkg/network/ebpf/c/protocols/classification/maps.h new file mode 100644 index 0000000000000..c5ac895992986 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/classification/maps.h @@ -0,0 +1,26 @@ +#ifndef __PROTOCOL_CLASSIFICATION_MAPS_H +#define __PROTOCOL_CLASSIFICATION_MAPS_H + +#include "map-defs.h" + +#include "protocols/classification/defs.h" +#include "protocols/classification/structs.h" + +// Kernels before 4.7 do not know about per-cpu array maps. +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0) + +// A per-cpu buffer used to read requests fragments during protocol +// classification and avoid allocating a buffer on the stack. Some protocols +// requires us to read at offset that are not aligned. Such reads are forbidden +// if done on the stack and will make the verifier complain about it, but they +// are allowed on map elements, hence the need for this map. +BPF_PERCPU_ARRAY_MAP(classification_buf, __u32, char [CLASSIFICATION_MAX_BUFFER], 1) +#else +BPF_ARRAY_MAP(classification_buf, __u8, 1) +#endif + +// A set (map from a key to a const bool value, we care only if the key exists in the map, and not its value) to +// mark if we've seen a specific mongo request, so we can eliminate false-positive classification on responses. +BPF_HASH_MAP(mongo_request_id, mongo_key, bool, 1024) + +#endif diff --git a/pkg/network/ebpf/c/protocols/classification/protocol-classification.h b/pkg/network/ebpf/c/protocols/classification/protocol-classification.h new file mode 100644 index 0000000000000..16cdc54606000 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/classification/protocol-classification.h @@ -0,0 +1,91 @@ +#ifndef __PROTOCOL_CLASSIFICATION_H +#define __PROTOCOL_CLASSIFICATION_H + +#include "bpf_builtins.h" +#include "bpf_telemetry.h" +#include "ip.h" + +#include "protocols/amqp/helpers.h" +#include "protocols/classification/common.h" +#include "protocols/classification/defs.h" +#include "protocols/classification/maps.h" +#include "protocols/classification/structs.h" +#include "protocols/http/classification-helpers.h" +#include "protocols/http2/helpers.h" +#include "protocols/mongo/helpers.h" +#include "protocols/redis/helpers.h" +#include "protocols/postgres/helpers.h" + +// Determines the protocols of the given buffer. If we already classified the payload (a.k.a protocol out param +// has a known protocol), then we do nothing. +static __always_inline void classify_protocol(protocol_t *protocol, conn_tuple_t *tup, const char *buf, __u32 size) { + if (protocol == NULL || *protocol != PROTOCOL_UNKNOWN) { + return; + } + + if (is_http(buf, size)) { + *protocol = PROTOCOL_HTTP; + } else if (is_http2(buf, size)) { + *protocol = PROTOCOL_HTTP2; + } else if (is_amqp(buf, size)) { + *protocol = PROTOCOL_AMQP; + } else if (is_redis(buf, size)) { + *protocol = PROTOCOL_REDIS; + } else if (is_mongo(tup, buf, size)) { + *protocol = PROTOCOL_MONGO; + } else if (is_postgres(buf, size)) { + *protocol = PROTOCOL_POSTGRES; + } else { + *protocol = PROTOCOL_UNKNOWN; + } + + log_debug("[protocol classification]: Classified protocol as %d %d; %s\n", *protocol, size, buf); +} + +// A shared implementation for the runtime & prebuilt socket filter that classifies the protocols of the connections. +static __always_inline void protocol_classifier_entrypoint(struct __sk_buff *skb) { + skb_info_t skb_info = {0}; + conn_tuple_t skb_tup = {0}; + + // Exporting the conn tuple from the skb, alongside couple of relevant fields from the skb. + if (!read_conn_tuple_skb(skb, &skb_info, &skb_tup)) { + return; + } + + // We support non empty TCP payloads for classification at the moment. + if (!is_tcp(&skb_tup) || is_payload_empty(skb, &skb_info)) { + return; + } + + protocol_t *cur_fragment_protocol_ptr = bpf_map_lookup_elem(&connection_protocol, &skb_tup); + if (cur_fragment_protocol_ptr) { + return; + } + + protocol_t cur_fragment_protocol = PROTOCOL_UNKNOWN; + + // Get the buffer the fragment will be read into from a per-cpu array map. + // This will avoid doing unaligned stack access while parsing the protocols, + // which is forbidden and will make the verifier fail. + const u32 key = 0; + char *request_fragment = bpf_map_lookup_elem(&classification_buf, &key); + if (request_fragment == NULL) { + log_debug("could not get classification buffer from map"); + return; + } + + bpf_memset(request_fragment, 0, sizeof(request_fragment)); + read_into_buffer_for_classification((char *)request_fragment, skb, &skb_info); + const size_t payload_length = skb->len - skb_info.data_off; + const size_t final_fragment_size = payload_length < CLASSIFICATION_MAX_BUFFER ? payload_length : CLASSIFICATION_MAX_BUFFER; + classify_protocol(&cur_fragment_protocol, &skb_tup, request_fragment, final_fragment_size); + // If there has been a change in the classification, save the new protocol. + if (cur_fragment_protocol != PROTOCOL_UNKNOWN) { + bpf_map_update_with_telemetry(connection_protocol, &skb_tup, &cur_fragment_protocol, BPF_NOEXIST); + conn_tuple_t inverse_skb_conn_tup = skb_tup; + flip_tuple(&inverse_skb_conn_tup); + bpf_map_update_with_telemetry(connection_protocol, &inverse_skb_conn_tup, &cur_fragment_protocol, BPF_NOEXIST); + } +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/classification/structs.h b/pkg/network/ebpf/c/protocols/classification/structs.h new file mode 100644 index 0000000000000..6548ee91b87f2 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/classification/structs.h @@ -0,0 +1,21 @@ +#ifndef __PROTOCOL_CLASSIFICATION_STRUCTS_H +#define __PROTOCOL_CLASSIFICATION_STRUCTS_H + +#include + +#include "tracer.h" + +typedef struct { + __s32 message_length; // total message size, including this + __s32 request_id; // identifier for this message + __s32 response_to; // requestID from the original request (used in responses from db) + __s32 op_code; // request type - see table below for details +} mongo_msg_header; + +// The key used in mongo_request_id set. +typedef struct { + conn_tuple_t tup; + __s32 req_id; +} mongo_key; + +#endif diff --git a/pkg/network/ebpf/c/protocols/protocol-classification-maps.h b/pkg/network/ebpf/c/protocols/classification/tracer-maps.h similarity index 71% rename from pkg/network/ebpf/c/protocols/protocol-classification-maps.h rename to pkg/network/ebpf/c/protocols/classification/tracer-maps.h index 5214bd3fdac17..c1a8b58c38dc9 100644 --- a/pkg/network/ebpf/c/protocols/protocol-classification-maps.h +++ b/pkg/network/ebpf/c/protocols/classification/tracer-maps.h @@ -1,13 +1,8 @@ -#ifndef __PROTOCOL_CLASSIFICATION_MAPS_H -#define __PROTOCOL_CLASSIFICATION_MAPS_H +#ifndef __PROTOCOL_CLASSIFICATION_TRACER_MAPS_H +#define __PROTOCOL_CLASSIFICATION_TRACER_MAPS_H -#include "protocol-classification-defs.h" #include "map-defs.h" -// Maps a connection tuple to its classified protocol. Used to reduce redundant classification procedures on the same -// connection. Assumption: each connection has a single protocol. -BPF_HASH_MAP(connection_protocol, conn_tuple_t, protocol_t, 1024) - // Maps skb connection tuple to socket connection tuple. // On ingress, skb connection tuple is pre NAT, and socket connection tuple is post NAT, and on egress, the opposite. // We track the lifecycle of socket using tracepoint net/net_dev_queue. @@ -16,10 +11,10 @@ BPF_HASH_MAP(connection_protocol, conn_tuple_t, protocol_t, 1024) // one we extract from the sock object, and then we are not able to correctly classify those protocols. // To overcome those problems, we save two maps that translates from conn tuple of sk_buff to conn tuple of sock* and vice // versa (the vice versa is used for cleanup purposes). -BPF_HASH_MAP(conn_tuple_to_socket_skb_conn_tuple, conn_tuple_t, conn_tuple_t, 1024) +BPF_HASH_MAP(conn_tuple_to_socket_skb_conn_tuple, conn_tuple_t, conn_tuple_t, 0) -// Maps a connection tuple to latest tcp segment we've processed. Helps to detect same packets that travels multiple -// interfaces or retransmissions. -BPF_HASH_MAP(connection_states, conn_tuple_t, u32, 1024) +// Maps a connection tuple to its classified protocol. Used to reduce redundant classification procedures on the same +// connection. Assumption: each connection has a single protocol. +BPF_HASH_MAP(connection_protocol, conn_tuple_t, protocol_t, 0) #endif diff --git a/pkg/network/ebpf/c/protocols/events-types.h b/pkg/network/ebpf/c/protocols/events-types.h new file mode 100644 index 0000000000000..bd48a10a19ddf --- /dev/null +++ b/pkg/network/ebpf/c/protocols/events-types.h @@ -0,0 +1,36 @@ +#ifndef __USM_EVENTS_TYPES_H +#define __USM_EVENTS_TYPES_H + +#include + +#define BATCH_BUFFER_SIZE (4*1024) +#define BATCH_PAGES_PER_CPU 3 + +typedef struct { + // idx is a monotonic counter used for uniquely determining a batch within a CPU core + // this is useful for detecting race conditions that result in a batch being overwritten + // before it gets consumed from userspace + __u64 idx; + // idx_to_flush is used to track which batches were flushed to userspace + // * if idx_to_flush == idx, the current index is still being appended to; + // * if idx_to_flush < idx, the batch at idx_to_flush needs to be sent to userspace; + // (note that idx will never be less than idx_to_flush); + __u64 idx_to_flush; +} batch_state_t; + +// this struct is used in the map lookup that returns the active batch for a certain CPU core +typedef struct { + __u32 cpu; + // page_num can be obtained from (batch_state_t->idx % BATCHES_PER_CPU) + __u32 page_num; +} batch_key_t; + +typedef struct { + __u64 idx; + __u16 len; + __u16 cap; + __u16 event_size; + char data[BATCH_BUFFER_SIZE]; +} batch_data_t; + +#endif diff --git a/pkg/network/ebpf/c/protocols/events.h b/pkg/network/ebpf/c/protocols/events.h new file mode 100644 index 0000000000000..e8d2a20a4fd01 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/events.h @@ -0,0 +1,119 @@ +#ifndef __USM_EVENTS_H +#define __USM_EVENTS_H + +#include "bpf_telemetry.h" + +#include "protocols/events-types.h" + +/* USM_EVENTS_INIT defines two functions used for the purposes of buffering and sending + data to userspace: + 1) _batch_enqueue + 1) _flush_batch + For more information of this please refer to + pkg/networks/protocols/events/README.md */ +#define USM_EVENTS_INIT(name, value, batch_size) \ + _Static_assert((sizeof(value)*batch_size) <= BATCH_BUFFER_SIZE, \ + _STR(name)" batch is too large"); \ + \ + BPF_PERCPU_ARRAY_MAP(name##_batch_state, __u32, batch_state_t, 1) \ + BPF_PERF_EVENT_ARRAY_MAP(name##_batch_events, __u32, 0) \ + BPF_HASH_MAP(name##_batches, batch_key_t, batch_data_t, 0) \ + \ + static __always_inline bool name##_batch_full(batch_data_t *batch) { \ + return batch && batch->len == batch_size; \ + } \ + \ + static __always_inline void name##_flush_batch(struct pt_regs *ctx) { \ + u32 zero = 0; \ + batch_state_t *batch_state = bpf_map_lookup_elem(&name##_batch_state, &zero); \ + if (!batch_state || batch_state->idx_to_flush == batch_state->idx) { \ + /* batch is not ready to be flushed */ \ + return; \ + } \ + \ + batch_key_t key = get_batch_key(batch_state->idx_to_flush); \ + batch_data_t *batch = bpf_map_lookup_elem(&name##_batches, &key); \ + if (!batch) { \ + return; \ + } \ + \ + long ret = bpf_perf_event_output_with_telemetry(ctx, \ + &name##_batch_events, key.cpu, \ + batch, sizeof(batch_data_t)); \ + if (ret < 0) { \ + _LOG(name, "batch flush error: cpu: %d idx: %d err:%d", \ + key.cpu, batch->idx, ret); \ + return; \ + } \ + \ + _LOG(name, "batch flushed: cpu: %d idx: %d", key.cpu, batch->idx); \ + batch->len = 0; \ + batch_state->idx_to_flush++; \ + } \ + \ + static __always_inline void name##_batch_enqueue(value *event) { \ + u32 zero = 0; \ + batch_state_t *batch_state = bpf_map_lookup_elem(&name##_batch_state, &zero); \ + if (batch_state == NULL) { \ + return; \ + } \ + \ + batch_key_t key = get_batch_key(batch_state->idx); \ + batch_data_t *batch = bpf_map_lookup_elem(&name##_batches, &key); \ + if (batch == NULL) { \ + return; \ + } \ + \ + /* if this happens it indicates that _flush_batch is not + executing often enough and/or that BATCH_PAGES_PER_CPU is not large + enough */ \ + if (name##_batch_full(batch)) { \ + _LOG(name, "enqueue error: dropping event because batch is full.", \ + bpf_get_smp_processor_id(), batch->idx); \ + return; \ + } \ + \ + /* this will copy the given event into an eBPF map entry representing the + current active batch */ \ + if (!__enqueue_event((void *)batch, event, sizeof(value))) \ + return; \ + \ + /* annotate batch with metadata used by userspace */ \ + batch->cap = batch_size; \ + batch->event_size = sizeof(value); \ + batch->idx = batch_state->idx; \ + \ + _LOG(name, "event enqueued: cpu: %d batch_idx: %d len: %d", \ + key.cpu, batch_state->idx, batch->len); \ + /* if we have filled up the batch we move to the next one. + notice the batch will be sent "asynchronously" to userspace during the + next call of _flush_batch */ \ + if (name##_batch_full(batch)) { \ + batch_state->idx++; \ + } \ + } \ + +static __always_inline batch_key_t get_batch_key(u64 batch_idx) { + batch_key_t key = { 0 }; + key.cpu = bpf_get_smp_processor_id(); + key.page_num = batch_idx % BATCH_PAGES_PER_CPU; + return key; +} + +static __always_inline bool __enqueue_event(batch_data_t *batch, void *event, size_t event_size) { + /* bounds check to make eBPF verifier happy */ + u32 offset = batch->len*event_size; + if (offset < 0 || offset+event_size>sizeof(batch->data)) { + return false; + } + + bpf_memcpy(&batch->data[offset], event, event_size); + batch->len++; + return true; +} + +#define _STR(x) #x +#define _LOG(protocol, message, args...) \ + log_debug(_STR(protocol) " " message "\n", args); + +#endif diff --git a/pkg/network/ebpf/c/protocols/http-buffer.h b/pkg/network/ebpf/c/protocols/http/buffer.h similarity index 99% rename from pkg/network/ebpf/c/protocols/http-buffer.h rename to pkg/network/ebpf/c/protocols/http/buffer.h index c1a98425cb47f..f1beee986221e 100644 --- a/pkg/network/ebpf/c/protocols/http-buffer.h +++ b/pkg/network/ebpf/c/protocols/http/buffer.h @@ -2,9 +2,11 @@ #define __HTTP_BUFFER_H #include + #include "bpf_builtins.h" #include "bpf_telemetry.h" -#include "http-types.h" + +#include "protocols/http/types.h" // This function reads a constant number of bytes into the fragment buffer of the http // transaction object, and returns the number of bytes of the valid data. The number of diff --git a/pkg/network/ebpf/c/protocols/http/classification-defs.h b/pkg/network/ebpf/c/protocols/http/classification-defs.h new file mode 100644 index 0000000000000..2626012708774 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/http/classification-defs.h @@ -0,0 +1,8 @@ +#ifndef __HTTP_CLASSIFICATION_DEFS_H +#define __HTTP_CLASSIFICATION_DEFS_H + +// The minimal HTTP response has 17 characters: HTTP/1.1 200 OK\r\n +// The minimal HTTP request has 16 characters: GET x HTTP/1.1\r\n +#define HTTP_MIN_SIZE 16 + +#endif diff --git a/pkg/network/ebpf/c/protocols/http/classification-helpers.h b/pkg/network/ebpf/c/protocols/http/classification-helpers.h new file mode 100644 index 0000000000000..3cf25906f7a63 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/http/classification-helpers.h @@ -0,0 +1,37 @@ +#ifndef __HTTP_HELPERS_H +#define __HTTP_HELPERS_H + +#include "protocols/classification/common.h" + +// Checks if the given buffers start with `HTTP` prefix (represents a response) or starts with ` /` which represents +// a request, where is one of: GET, POST, PUT, DELETE, HEAD, OPTIONS, or PATCH. +static __always_inline bool is_http(const char *buf, __u32 size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, size, HTTP_MIN_SIZE); + +#define HTTP "HTTP/" +#define GET "GET /" +#define POST "POST /" +#define PUT "PUT /" +#define DELETE "DELETE /" +#define HEAD "HEAD /" +#define OPTIONS1 "OPTIONS /" +#define OPTIONS2 "OPTIONS *" +#define PATCH "PATCH /" + + // memcmp returns + // 0 when s1 == s2, + // !0 when s1 != s2. + bool http = !(bpf_memcmp(buf, HTTP, sizeof(HTTP)-1) + && bpf_memcmp(buf, GET, sizeof(GET)-1) + && bpf_memcmp(buf, POST, sizeof(POST)-1) + && bpf_memcmp(buf, PUT, sizeof(PUT)-1) + && bpf_memcmp(buf, DELETE, sizeof(DELETE)-1) + && bpf_memcmp(buf, HEAD, sizeof(HEAD)-1) + && bpf_memcmp(buf, OPTIONS1, sizeof(OPTIONS1)-1) + && bpf_memcmp(buf, OPTIONS2, sizeof(OPTIONS2)-1) + && bpf_memcmp(buf, PATCH, sizeof(PATCH)-1)); + + return http; +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/http.h b/pkg/network/ebpf/c/protocols/http/http.h similarity index 73% rename from pkg/network/ebpf/c/protocols/http.h rename to pkg/network/ebpf/c/protocols/http/http.h index 767c1800f623d..290c763948c7b 100644 --- a/pkg/network/ebpf/c/protocols/http.h +++ b/pkg/network/ebpf/c/protocols/http/http.h @@ -1,91 +1,23 @@ #ifndef __HTTP_H #define __HTTP_H +#include + #include "bpf_builtins.h" #include "bpf_telemetry.h" #include "tracer.h" -#include "http-types.h" -#include "http-maps.h" -#include "https.h" - -#include - -static __always_inline http_batch_key_t http_get_batch_key(u64 batch_idx) { - http_batch_key_t key = { 0 }; - key.cpu = bpf_get_smp_processor_id(); - key.page_num = batch_idx % HTTP_BATCH_PAGES; - return key; -} - -static __always_inline void http_flush_batch(struct pt_regs *ctx) { - u32 zero = 0; - http_batch_state_t *batch_state = bpf_map_lookup_elem(&http_batch_state, &zero); - if (batch_state == NULL || batch_state->idx_to_flush == batch_state->idx) { - // batch is not ready to be flushed - return; - } - http_batch_key_t key = http_get_batch_key(batch_state->idx_to_flush); - http_batch_t *batch = bpf_map_lookup_elem(&http_batches, &key); - if (batch == NULL) { - return; - } +#include "protocols/events.h" +#include "protocols/http/types.h" +#include "protocols/http/maps.h" +#include "protocols/tls/https.h" - bpf_perf_event_output_with_telemetry(ctx, &http_batch_events, key.cpu, batch, sizeof(http_batch_t)); - log_debug("http batch flushed: cpu: %d idx: %d\n", key.cpu, batch->idx); - batch->pos = 0; - batch_state->idx_to_flush++; -} +USM_EVENTS_INIT(http, http_transaction_t, HTTP_BATCH_SIZE); static __always_inline int http_responding(http_transaction_t *http) { return (http != NULL && http->response_status_code != 0); } - -static __always_inline bool http_batch_full(http_batch_t *batch) { - return batch && batch->pos == HTTP_BATCH_SIZE; -} - -static __always_inline void http_enqueue(http_transaction_t *http) { - // Retrieve the active batch number for this CPU - u32 zero = 0; - http_batch_state_t *batch_state = bpf_map_lookup_elem(&http_batch_state, &zero); - if (batch_state == NULL) { - return; - } - - // Retrieve the batch object - http_batch_key_t key = http_get_batch_key(batch_state->idx); - http_batch_t *batch = bpf_map_lookup_elem(&http_batches, &key); - if (batch == NULL) { - return; - } - - if (http_batch_full(batch)) { - // this scenario should never happen and indicates a bug - // TODO: turn this into telemetry for release 7.41 - log_debug("http_enqueue error: dropping request because batch is full. cpu=%d batch_idx=%d\n", bpf_get_smp_processor_id(), batch->idx); - return; - } - - // Bounds check to make verifier happy - if (batch->pos < 0 || batch->pos >= HTTP_BATCH_SIZE) { - return; - } - - bpf_memcpy(&batch->txs[batch->pos], http, sizeof(http_transaction_t)); - log_debug("http_enqueue: htx=%llx path=%s\n", http, http->request_fragment); - log_debug("http transaction enqueued: cpu: %d batch_idx: %d pos: %d\n", key.cpu, batch_state->idx, batch->pos); - batch->pos++; - batch->idx = batch_state->idx; - - // If we have filled the batch we move to the next one - // Notice that we don't flush it directly because we can't do so from socket filter programs. - if (http_batch_full(batch)) { - batch_state->idx++; - } -} - static __always_inline void http_begin_request(http_transaction_t *http, http_method_t method, char *buffer) { http->request_method = method; http->request_started = bpf_ktime_get_ns(); @@ -197,7 +129,7 @@ static __always_inline int http_process(http_transaction_t *http_stack, skb_info } if (http_should_flush_previous_state(http, packet_type)) { - http_enqueue(http); + http_batch_enqueue(http); bpf_memcpy(http, http_stack, sizeof(http_transaction_t)); } @@ -217,7 +149,7 @@ static __always_inline int http_process(http_transaction_t *http_stack, skb_info } if (http_closed(http, skb_info, http_stack->owned_by_src_port)) { - http_enqueue(http); + http_batch_enqueue(http); bpf_map_delete_elem(&http_in_flight, &http_stack->tup); } diff --git a/pkg/network/ebpf/c/protocols/http-maps.h b/pkg/network/ebpf/c/protocols/http/maps.h similarity index 74% rename from pkg/network/ebpf/c/protocols/http-maps.h rename to pkg/network/ebpf/c/protocols/http/maps.h index e58aab15f33af..d1c45504dd9aa 100644 --- a/pkg/network/ebpf/c/protocols/http-maps.h +++ b/pkg/network/ebpf/c/protocols/http/maps.h @@ -1,27 +1,16 @@ #ifndef __HTTP_MAPS_H #define __HTTP_MAPS_H -#include "tracer.h" #include "bpf_helpers.h" -#include "http-types.h" -#include "go-tls-types.h" #include "map-defs.h" +#include "tracer.h" + +#include "protocols/http/types.h" +#include "protocols/tls/go-tls-types.h" /* This map is used to keep track of in-flight HTTP transactions for each TCP connection */ BPF_LRU_MAP(http_in_flight, conn_tuple_t, http_transaction_t, 0) -/* This map used for flush complete HTTP batches to userspace */ -BPF_PERF_EVENT_ARRAY_MAP(http_batch_events, __u32, 0) - -/* - This map stores finished HTTP transactions in batches so they can be consumed by userspace - Size is set dynamically during runtime and must be equal to CPUs*HTTP_BATCH_PAGES - */ -BPF_HASH_MAP(http_batches, http_batch_key_t, http_batch_t, 0) - -/* This map holds one entry per CPU storing state associated to current http batch*/ -BPF_PERCPU_ARRAY_MAP(http_batch_state, __u32, http_batch_state_t, 1) - BPF_LRU_MAP(ssl_sock_by_ctx, void *, ssl_sock_t, 1) BPF_LRU_MAP(ssl_read_args, u64, ssl_read_args_t, 1024) @@ -52,8 +41,10 @@ BPF_HASH_MAP(go_tls_read_args, go_tls_function_args_key_t, go_tls_read_args_data BPF_HASH_MAP(go_tls_write_args, go_tls_function_args_key_t, go_tls_write_args_data_t, 1024) /* This map associates crypto/tls.(*Conn) values to the corresponding conn_tuple_t* value. - It is used to implement a simplified version of tup_from_ssl_ctx from http.c */ -BPF_HASH_MAP(conn_tup_by_tls_conn, __u32, conn_tuple_t, 1024) + It is used to implement a simplified version of tup_from_ssl_ctx from http.c + Map size is set to 1 as goTLS is optional, this will be overwritten to MaxTrackedConnections + if goTLS is enabled. */ +BPF_HASH_MAP(conn_tup_by_go_tls_conn, __u32, conn_tuple_t, 1) /* thread_struct id too big for allocation on stack in eBPF function, we use an array as a heap allocator */ BPF_PERCPU_ARRAY_MAP(task_thread, __u32, struct thread_struct, 1) diff --git a/pkg/network/ebpf/c/protocols/http-types.h b/pkg/network/ebpf/c/protocols/http/types.h similarity index 64% rename from pkg/network/ebpf/c/protocols/http-types.h rename to pkg/network/ebpf/c/protocols/http/types.h index 9aedc62ff1e93..a99263e43c77f 100644 --- a/pkg/network/ebpf/c/protocols/http-types.h +++ b/pkg/network/ebpf/c/protocols/http/types.h @@ -7,10 +7,6 @@ #define HTTP_BUFFER_SIZE (8 * 20) // This controls the number of HTTP transactions read from userspace at a time #define HTTP_BATCH_SIZE 15 -// HTTP_BATCH_PAGES controls how many `http_batch_t` instances exist for each CPU core -// It's desirable to set this >= 1 to allow batch insertion and flushing to happen idependently -// without risk of overriding data. -#define HTTP_BATCH_PAGES 3 // HTTP/1.1 XXX // _________^ @@ -39,13 +35,6 @@ typedef enum HTTP_PATCH } http_method_t; -// This struct is used in the map lookup that returns the active batch for a certain CPU core -typedef struct { - __u32 cpu; - // page_num can be obtained from (http_batch_state_t->idx % HTTP_BATCHES_PER_CPU) - __u32 page_num; -} http_batch_key_t; - // HTTP transaction information associated to a certain socket (tuple_t) typedef struct { conn_tuple_t tup; @@ -68,24 +57,6 @@ typedef struct { __u64 tags; } http_transaction_t; -typedef struct { - // idx is a monotonic counter used for uniquely determinng a batch within a CPU core - // this is useful for detecting race conditions that result in a batch being overrriden - // before it gets consumed from userspace - __u64 idx; - // idx_to_flush is used to track which batches were flushed to userspace - // * if idx_to_flush == idx, the current index is still being appended to; - // * if idx_to_flush < idx, the batch at idx_to_notify needs to be sent to userspace; - // (note that idx will never be less than idx_to_flush); - __u64 idx_to_flush; -} http_batch_state_t; - -typedef struct { - __u64 idx; - __u8 pos; - http_transaction_t txs[HTTP_BATCH_SIZE]; -} http_batch_t; - // OpenSSL types typedef struct { void *ctx; diff --git a/pkg/network/ebpf/c/protocols/http2.h b/pkg/network/ebpf/c/protocols/http2.h deleted file mode 100644 index 16c1b87237c15..0000000000000 --- a/pkg/network/ebpf/c/protocols/http2.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef __HTTP2_H -#define __HTTP2_H - -// Checkout https://datatracker.ietf.org/doc/html/rfc7540 under "Frame Format" section -#define HTTP2_FRAME_HEADER_SIZE 9 -#define HTTP2_SETTINGS_SIZE 6 - -// All types of http2 frames exist in the protocol. -// Checkout https://datatracker.ietf.org/doc/html/rfc7540 under "Frame Type Registry" section. -typedef enum { - kDataFrame = 0, - kHeadersFrame = 1, - kPriorityFrame = 2, - kRSTStreamFrame = 3, - kSettingsFrame = 4, - kPushPromiseFrame = 5, - kPingFrame = 6, - kGoAwayFrame = 7, - kWindowUpdateFrame = 8, - kContinuationFrame = 9, -} __attribute__ ((packed)) frame_type_t; - -// Struct which represent the http2 frame by its fields. -// Checkout https://datatracker.ietf.org/doc/html/rfc7540#section-4.1 for frame format. -struct http2_frame { - uint32_t length : 24; - frame_type_t type; - uint8_t flags; - uint8_t reserved : 1; - uint32_t stream_id : 31; -} __attribute__ ((packed)); - -// This function checks if the http2 frame header is empty. -static __always_inline bool is_empty_frame_header(const char *frame) { -#define EMPTY_FRAME_HEADER "\0\0\0\0\0\0\0\0\0" - - return !bpf_memcmp(frame, EMPTY_FRAME_HEADER, sizeof(EMPTY_FRAME_HEADER) - 1); -} - -// This function reads the http2 frame header and validate the frame. -static __always_inline bool read_http2_frame_header(const char *buf, size_t buf_size, struct http2_frame *out) { - if (buf == NULL) { - return false; - } - - if (buf_size < HTTP2_FRAME_HEADER_SIZE) { - return false; - } - - if (is_empty_frame_header(buf)) { - return false; - } - - // We extract the frame by its shape to fields. - // See: https://datatracker.ietf.org/doc/html/rfc7540#section-4.1 - *out = *((struct http2_frame*)buf); - out->length = bpf_ntohl(out->length << 8); - out->stream_id = bpf_ntohl(out->stream_id << 1); - - return true; -} - -#endif diff --git a/pkg/network/ebpf/c/protocols/http2/defs.h b/pkg/network/ebpf/c/protocols/http2/defs.h new file mode 100644 index 0000000000000..798078e01f97c --- /dev/null +++ b/pkg/network/ebpf/c/protocols/http2/defs.h @@ -0,0 +1,38 @@ +#ifndef __HTTP2_DEFS_H +#define __HTTP2_DEFS_H + +#include + +// Checkout https://datatracker.ietf.org/doc/html/rfc7540 under "HTTP/2 Connection Preface" section +#define HTTP2_MARKER_SIZE 24 + +// Checkout https://datatracker.ietf.org/doc/html/rfc7540 under "Frame Format" section +#define HTTP2_FRAME_HEADER_SIZE 9 +#define HTTP2_SETTINGS_SIZE 6 + +// All types of http2 frames exist in the protocol. +// Checkout https://datatracker.ietf.org/doc/html/rfc7540 under "Frame Type Registry" section. +typedef enum { + kDataFrame = 0, + kHeadersFrame = 1, + kPriorityFrame = 2, + kRSTStreamFrame = 3, + kSettingsFrame = 4, + kPushPromiseFrame = 5, + kPingFrame = 6, + kGoAwayFrame = 7, + kWindowUpdateFrame = 8, + kContinuationFrame = 9, +} __attribute__ ((packed)) frame_type_t; + +// Struct which represent the http2 frame by its fields. +// Checkout https://datatracker.ietf.org/doc/html/rfc7540#section-4.1 for frame format. +struct http2_frame { + __u32 length : 24; + frame_type_t type; + __u8 flags; + __u8 reserved : 1; + __u32 stream_id : 31; +} __attribute__ ((packed)); + +#endif diff --git a/pkg/network/ebpf/c/protocols/http2/helpers.h b/pkg/network/ebpf/c/protocols/http2/helpers.h new file mode 100644 index 0000000000000..997dc0fc4b94a --- /dev/null +++ b/pkg/network/ebpf/c/protocols/http2/helpers.h @@ -0,0 +1,71 @@ +#ifndef __HTTP2_HELPERS_H +#define __HTTP2_HELPERS_H + +#include "bpf_endian.h" + +#include "protocols/http2/defs.h" + +// This function checks if the http2 frame header is empty. +static __always_inline bool is_empty_frame_header(const char *frame) { +#define EMPTY_FRAME_HEADER "\0\0\0\0\0\0\0\0\0" + + return !bpf_memcmp(frame, EMPTY_FRAME_HEADER, sizeof(EMPTY_FRAME_HEADER) - 1); +} + +// This function reads the http2 frame header and validate the frame. +static __always_inline bool read_http2_frame_header(const char *buf, size_t buf_size, struct http2_frame *out) { + if (buf == NULL) { + return false; + } + + if (buf_size < HTTP2_FRAME_HEADER_SIZE) { + return false; + } + + if (is_empty_frame_header(buf)) { + return false; + } + + // We extract the frame by its shape to fields. + // See: https://datatracker.ietf.org/doc/html/rfc7540#section-4.1 + *out = *((struct http2_frame*)buf); + out->length = bpf_ntohl(out->length << 8); + out->stream_id = bpf_ntohl(out->stream_id << 1); + + return true; +} + +// The method checks if the given buffer starts with the HTTP2 marker as defined in https://datatracker.ietf.org/doc/html/rfc7540. +// We check that the given buffer is not empty and its size is at least 24 bytes. +static __always_inline bool is_http2_preface(const char* buf, __u32 buf_size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, HTTP2_MARKER_SIZE); + +#define HTTP2_PREFACE "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n" + + bool match = !bpf_memcmp(buf, HTTP2_PREFACE, sizeof(HTTP2_PREFACE)-1); + + return match; +} + +// According to the https://www.rfc-editor.org/rfc/rfc7540#section-3.5 +// an HTTP2 server must reply with a settings frame to the preface of HTTP2. +// The settings frame must not be related to the connection (stream_id == 0) and the length should be a multiplication +// of 6 bytes. +static __always_inline bool is_http2_server_settings(const char* buf, __u32 buf_size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, HTTP2_FRAME_HEADER_SIZE); + + struct http2_frame frame_header; + if (!read_http2_frame_header(buf, buf_size, &frame_header)) { + return false; + } + + return frame_header.type == kSettingsFrame && frame_header.stream_id == 0 && frame_header.length % HTTP2_SETTINGS_SIZE == 0; +} + +// The method checks if the given buffer starts with the HTTP2 marker as defined in https://datatracker.ietf.org/doc/html/rfc7540. +// We check that the given buffer is not empty and its size is at least 24 bytes. +static __always_inline bool is_http2(const char* buf, __u32 buf_size) { + return is_http2_preface(buf, buf_size) || is_http2_server_settings(buf, buf_size); +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/mongo/defs.h b/pkg/network/ebpf/c/protocols/mongo/defs.h new file mode 100644 index 0000000000000..8e11ff3bfa734 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/mongo/defs.h @@ -0,0 +1,21 @@ +#ifndef __MONGO_DEFS_H +#define __MONGO_DEFS_H + +// Reference: +// https://docs.mongodb.com/manual/reference/mongodb-wire-protocol/#std-label-wp-request-opcodes. +// Note: Response side inference for Mongo is not robust, and is not attempted to avoid +// confusion with other protocols, especially MySQL. +#define MONGO_OP_REPLY 1 +#define MONGO_OP_UPDATE 2001 +#define MONGO_OP_INSERT 2002 +#define MONGO_OP_RESERVED 2003 +#define MONGO_OP_QUERY 2004 +#define MONGO_OP_GET_MORE 2005 +#define MONGO_OP_DELETE 2006 +#define MONGO_OP_KILL_CURSORS 2007 +#define MONGO_OP_COMPRESSED 2012 +#define MONGO_OP_MSG 2013 + +#define MONGO_HEADER_LENGTH 16 + +#endif diff --git a/pkg/network/ebpf/c/protocols/mongo/helpers.h b/pkg/network/ebpf/c/protocols/mongo/helpers.h new file mode 100644 index 0000000000000..80cb961e37030 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/mongo/helpers.h @@ -0,0 +1,71 @@ +#ifndef __MONGO_HELPERS_H +#define __MONGO_HELPERS_H + +#include "protocols/classification/common.h" +#include "protocols/mongo/defs.h" + +static __always_inline void mongo_handle_request(conn_tuple_t *tup, __s32 request_id) { + // mongo_request_id acts as a set, and we only check for existence in that set. + // Thus, the val = true is just a dummy value, as we ignore the value. + const bool val = true; + mongo_key key = {}; + key.tup = *tup; + key.req_id = request_id; + bpf_map_update_elem(&mongo_request_id, &key, &val, BPF_ANY); +} + +static __always_inline bool mongo_have_seen_request(conn_tuple_t *tup, __s32 response_to) { + mongo_key key = {}; + key.tup = *tup; + key.req_id = response_to; + void *exists = bpf_map_lookup_elem(&mongo_request_id, &key); + bpf_map_delete_elem(&mongo_request_id, &key); + return exists != NULL; +} + +// Checks if the given buffer represents a mongo request or a response. +static __always_inline bool is_mongo(conn_tuple_t *tup, const char *buf, __u32 size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, size, MONGO_HEADER_LENGTH); + + mongo_msg_header header = *((mongo_msg_header*)buf); + + // The message length should contain the size of headers + if (header.message_length < MONGO_HEADER_LENGTH) { + return false; + } + + if (header.request_id < 0) { + return false; + } + + switch (header.op_code) { + case MONGO_OP_UPDATE: + case MONGO_OP_INSERT: + case MONGO_OP_DELETE: + // If the response_to is not 0, then it is not a valid mongo request by the RFC. + return header.response_to == 0; + case MONGO_OP_REPLY: + // If the message is a reply, make sure we've seen the request of the response. + // If will eliminate false positives. + return mongo_have_seen_request(tup, header.response_to); + case MONGO_OP_QUERY: + case MONGO_OP_GET_MORE: + if (header.response_to == 0) { + mongo_handle_request(tup, header.request_id); + return true; + } + return false; + case MONGO_OP_COMPRESSED: + case MONGO_OP_MSG: + // If the response_to is not 0, then it is not a valid mongo request by the RFC. + if (header.response_to == 0) { + mongo_handle_request(tup, header.request_id); + return true; + } + return mongo_have_seen_request(tup, header.response_to); + } + + return false; +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/postgres/defs.h b/pkg/network/ebpf/c/protocols/postgres/defs.h new file mode 100644 index 0000000000000..eaca5769d7dda --- /dev/null +++ b/pkg/network/ebpf/c/protocols/postgres/defs.h @@ -0,0 +1,50 @@ +#ifndef __POSTGRES_DEFS_H +#define __POSTGRES_DEFS_H + +// The minimum size we want to be able to check for a startup message. This size includes: +// - The length field: 4 bytes +// - The protocol major version: 2 bytes +// - The protocol minor version: 2 bytes +// - The "user" string, as the first connection parameter name: 5 bytes +#define POSTGRES_STARTUP_MIN_LEN 13 + +// Postgres protocol version, in big endian, as described in the protocol +// specification. This is version "3.0". +#define PG_STARTUP_VERSION 196608 +#define PG_STARTUP_USER_PARAM "user" + +// From https://www.postgresql.org/docs/current/protocol-overview.html: +// The first byte of a message identifies the message type, and the next four +// bytes specify the length of the rest of the message (this length count +// includes itself, but not the message-type byte). The remaining contents of +// the message are determined by the message type. Some messages do not have +// a payload at all, so the minimum size, including the length itself, is +// 4 bytes. +#define POSTGRES_MIN_PAYLOAD_LEN 4 +// Assume typical query message size is below an artificial limit. +// 30000 is copied from postgres code base: +// https://github.com/postgres/postgres/tree/master/src/interfaces/libpq/fe-protocol3.c#L94 +#define POSTGRES_MAX_PAYLOAD_LEN 30000 + +#define POSTGRES_QUERY_MAGIC_BYTE 'Q' +#define POSTGRES_COMMAND_COMPLETE_MAGIC_BYTE 'C' + +// Regular format of postgres message: | byte tag | int32_t len | string payload | +// From https://www.postgresql.org/docs/current/protocol-overview.html: +// The first byte of a message identifies the message type, and the next four +// bytes specify the length of the rest of the message (this length count +// includes itself, but not the message-type byte). The remaining contents of +// the message are determined by the message type +struct pg_message_header { + __u8 message_tag; + __u32 message_len; // Big-endian: use bpf_ntohl to read this field +} __attribute__((packed)); + +// Postgres Startup Message (used when a client connects to the server) differs +// from other messages by not having a message tag. +struct pg_startup_header { + __u32 message_len; // Big-endian: use bpf_ntohl to read this field + __u32 version; // Big-endian: use bpf_ntohl to read this field +}; + +#endif // __POSTGRES_DEFS_H diff --git a/pkg/network/ebpf/c/protocols/postgres/helpers.h b/pkg/network/ebpf/c/protocols/postgres/helpers.h new file mode 100644 index 0000000000000..973eefc6f82ea --- /dev/null +++ b/pkg/network/ebpf/c/protocols/postgres/helpers.h @@ -0,0 +1,45 @@ +#ifndef __POSTGRES_HELPERS_H +#define __POSTGRES_HELPERS_H + +#include "defs.h" +#include "protocols/sql/helpers.h" + +// is_postgres_connect checks if the buffer is a Postgres startup message. +static __always_inline bool is_postgres_connect(const char *buf, __u32 buf_size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, POSTGRES_STARTUP_MIN_LEN); + + struct pg_startup_header *hdr = (struct pg_startup_header *)buf; + + if (bpf_ntohl(hdr->version) != PG_STARTUP_VERSION) { + return false; + } + + // Check if we can find the user param. Postgres uses C-style strings, so + // we also check for the terminating null byte. + return !bpf_memcmp(buf + sizeof(*hdr), PG_STARTUP_USER_PARAM, sizeof(PG_STARTUP_USER_PARAM)); +} + +// is_postgres_query checks if the buffer is a regular Postgres message. +static __always_inline bool is_postgres_query(const char *buf, __u32 buf_size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, sizeof(struct pg_message_header)); + + struct pg_message_header *hdr = (struct pg_message_header *)buf; + + // We only classify queries for now + if (hdr->message_tag != POSTGRES_QUERY_MAGIC_BYTE && hdr->message_tag != POSTGRES_COMMAND_COMPLETE_MAGIC_BYTE) { + return false; + } + + __u32 message_len = bpf_ntohl(hdr->message_len); + if (message_len < POSTGRES_MIN_PAYLOAD_LEN || message_len > POSTGRES_MAX_PAYLOAD_LEN) { + return false; + } + + return is_sql_command(buf + sizeof(*hdr), buf_size - sizeof(*hdr)); +} + +static __always_inline bool is_postgres(const char *buf, __u32 buf_size) { + return is_postgres_query(buf, buf_size) || is_postgres_connect(buf, buf_size); +} + +#endif // __POSTGRES_HELPERS_H diff --git a/pkg/network/ebpf/c/protocols/protocol-classification-helpers.h b/pkg/network/ebpf/c/protocols/protocol-classification-helpers.h deleted file mode 100644 index 97ef5fc7b3096..0000000000000 --- a/pkg/network/ebpf/c/protocols/protocol-classification-helpers.h +++ /dev/null @@ -1,351 +0,0 @@ -#ifndef __PROTOCOL_CLASSIFICATION_HELPERS_H -#define __PROTOCOL_CLASSIFICATION_HELPERS_H - -#include - -#include "protocol-classification-defs.h" -#include "protocol-classification-maps.h" -#include "bpf_builtins.h" -#include "bpf_telemetry.h" -#include "ip.h" -#include "http2.h" - -// Patch to support old kernels that don't contain bpf_skb_load_bytes, by adding a dummy implementation to bypass runtime compilation. -#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0) -long bpf_skb_load_bytes_with_telemetry(const void *skb, u32 offset, void *to, u32 len) {return 0;} -#endif - -#define CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, min_buff_size) \ - if (buf_size < min_buff_size) { \ - return false; \ - } \ - \ - if (buf == NULL) { \ - return false; \ - } \ - -// The method checks if the given buffer starts with the HTTP2 marker as defined in https://datatracker.ietf.org/doc/html/rfc7540. -// We check that the given buffer is not empty and its size is at least 24 bytes. -static __always_inline bool is_http2_preface(const char* buf, __u32 buf_size) { - CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, HTTP2_MARKER_SIZE) - -#define HTTP2_PREFACE "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n" - - bool match = !bpf_memcmp(buf, HTTP2_PREFACE, sizeof(HTTP2_PREFACE)-1); - - return match; -} - -// According to the https://www.rfc-editor.org/rfc/rfc7540#section-3.5 -// an HTTP2 server must reply with a settings frame to the preface of HTTP2. -// The settings frame must not be related to the connection (stream_id == 0) and the length should be a multiplication -// of 6 bytes. -static __always_inline bool is_http2_server_settings(const char* buf, __u32 buf_size) { - CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, HTTP2_FRAME_HEADER_SIZE) - - struct http2_frame frame_header; - if (!read_http2_frame_header(buf, buf_size, &frame_header)) { - return false; - } - - return frame_header.type == kSettingsFrame && frame_header.stream_id == 0 && frame_header.length % HTTP2_SETTINGS_SIZE == 0; -} - -// The method checks if the given buffer starts with the HTTP2 marker as defined in https://datatracker.ietf.org/doc/html/rfc7540. -// We check that the given buffer is not empty and its size is at least 24 bytes. -static __always_inline bool is_http2(const char* buf, __u32 buf_size) { - return is_http2_preface(buf, buf_size) || is_http2_server_settings(buf, buf_size); -} - -// The method checks if the given buffer includes the protocol header which must be sent in the start of a new connection. -// Ref: https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf -static __always_inline bool is_amqp_protocol_header(const char* buf, __u32 buf_size) { - CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, AMQP_MIN_FRAME_LENGTH) - -#define AMQP_PREFACE "AMQP" - - bool match = !bpf_memcmp(buf, AMQP_PREFACE, sizeof(AMQP_PREFACE)-1); - - return match; -} - -// The method checks if the given buffer is an AMQP message. -// Ref: https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf -static __always_inline bool is_amqp(const char* buf, __u32 buf_size) { - // New connection should start with protocol header of AMQP. - // Ref https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf. - if (is_amqp_protocol_header(buf, buf_size)) { - return true; - } - - // Validate that we will be able to get from the buffer the class and method ids. - if (buf_size < AMQP_MIN_PAYLOAD_LENGTH) { - return false; - } - - uint8_t frame_type = buf[0]; - // Check only for method frame type. - if (frame_type != AMQP_FRAME_METHOD_TYPE) { - return false; - } - - // We extract the class id and method id by big indian from the buffer. - // Ref https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf. - __u16 class_id = buf[7] << 8 | buf[8]; - __u16 method_id = buf[9] << 8 | buf[10]; - - // ConnectionStart, ConnectionStartOk, BasicPublish, BasicDeliver, BasicConsume are the most likely methods to - // consider for the classification. - if (class_id == AMQP_CONNECTION_CLASS) { - return method_id == AMQP_METHOD_CONNECTION_START || method_id == AMQP_METHOD_CONNECTION_START_OK; - } - - if (class_id == AMQP_BASIC_CLASS) { - return method_id == AMQP_METHOD_PUBLISH || method_id == AMQP_METHOD_DELIVER || method_id == AMQP_METHOD_CONSUME; - } - - return false; -} - -// Checks if the given buffers start with `HTTP` prefix (represents a response) or starts with ` /` which represents -// a request, where is one of: GET, POST, PUT, DELETE, HEAD, OPTIONS, or PATCH. -static __always_inline bool is_http(const char *buf, __u32 size) { - CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, size, HTTP_MIN_SIZE) - -#define HTTP "HTTP/" -#define GET "GET /" -#define POST "POST /" -#define PUT "PUT /" -#define DELETE "DELETE /" -#define HEAD "HEAD /" -#define OPTIONS1 "OPTIONS /" -#define OPTIONS2 "OPTIONS *" -#define PATCH "PATCH /" - - // memcmp returns - // 0 when s1 == s2, - // !0 when s1 != s2. - bool http = !(bpf_memcmp(buf, HTTP, sizeof(HTTP)-1) - && bpf_memcmp(buf, GET, sizeof(GET)-1) - && bpf_memcmp(buf, POST, sizeof(POST)-1) - && bpf_memcmp(buf, PUT, sizeof(PUT)-1) - && bpf_memcmp(buf, DELETE, sizeof(DELETE)-1) - && bpf_memcmp(buf, HEAD, sizeof(HEAD)-1) - && bpf_memcmp(buf, OPTIONS1, sizeof(OPTIONS1)-1) - && bpf_memcmp(buf, OPTIONS2, sizeof(OPTIONS2)-1) - && bpf_memcmp(buf, PATCH, sizeof(PATCH)-1)); - - return http; -} - -// Checks the buffer represent a standard response (OK) or any of redis commands -// https://redis.io/commands/ -static __always_inline bool check_supported_ascii_and_crlf(const char* buf, __u32 buf_size, int index_to_start_from) { - bool found_cr = false; - char current_char; - int i = index_to_start_from; -#pragma unroll(CLASSIFICATION_MAX_BUFFER) - for (; i < CLASSIFICATION_MAX_BUFFER; i++) { - current_char = buf[i]; - if (current_char == '\r') { - found_cr = true; - break; - } else if ('A' <= current_char && current_char <= 'Z') { - continue; - } else if ('a' <= current_char && current_char <= 'z') { - continue; - } else if (current_char == '.' || current_char == ' ' || current_char == '-' || current_char == '_') { - continue; - } - return false; - } - - if (!found_cr || i+1 >= buf_size) { - return false; - } - return buf[i+1] == '\n'; -} - -// Checks the buffer represents an error according to https://redis.io/docs/reference/protocol-spec/#resp-errors -static __always_inline bool check_err_prefix(const char* buf, __u32 buf_size) { -#define ERR "-ERR " -#define WRONGTYPE "-WRONGTYPE " - - // memcmp returns - // 0 when s1 == s2, - // !0 when s1 != s2. - bool match = !(bpf_memcmp(buf, ERR, sizeof(ERR)-1) - && bpf_memcmp(buf, WRONGTYPE, sizeof(WRONGTYPE)-1)); - - return match; -} - -static __always_inline bool check_integer_and_crlf(const char* buf, __u32 buf_size, int index_to_start_from) { - bool found_cr = false; - char current_char; - int i = index_to_start_from; -#pragma unroll(CLASSIFICATION_MAX_BUFFER) - for (; i < CLASSIFICATION_MAX_BUFFER; i++) { - current_char = buf[i]; - if (current_char == '\r') { - found_cr = true; - break; - } else if ('0' <= current_char && current_char <= '9') { - continue; - } - - return false; - } - - if (!found_cr || i+1 >= buf_size) { - return false; - } - return buf[i+1] == '\n'; -} - -static __always_inline bool is_redis(const char* buf, __u32 buf_size) { - CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, REDIS_MIN_FRAME_LENGTH) - - char first_char = buf[0]; - switch (first_char) { - case '+': - return check_supported_ascii_and_crlf(buf, buf_size, 1); - case '-': - return check_err_prefix(buf, buf_size); - case ':': - case '$': - case '*': - return check_integer_and_crlf(buf, buf_size, 1); - default: - return false; - } -} - -// Determines the protocols of the given buffer. If we already classified the payload (a.k.a protocol out param -// has a known protocol), then we do nothing. -static __always_inline void classify_protocol(protocol_t *protocol, const char *buf, __u32 size) { - if (protocol == NULL || *protocol != PROTOCOL_UNKNOWN) { - return; - } - - if (is_http(buf, size)) { - *protocol = PROTOCOL_HTTP; - } else if (is_http2(buf, size)) { - *protocol = PROTOCOL_HTTP2; - } else if (is_amqp(buf, size)) { - *protocol = PROTOCOL_AMQP; - } else if (is_redis(buf, size)) { - *protocol = PROTOCOL_REDIS; - } else { - *protocol = PROTOCOL_UNKNOWN; - } - - log_debug("[protocol classification]: Classified protocol as %d %d; %s\n", *protocol, size, buf); -} - -// Returns true if the packet is TCP. -static __always_inline bool is_tcp(conn_tuple_t *tup) { - return tup->metadata & CONN_TYPE_TCP; -} - -// Returns true if the payload is empty. -static __always_inline bool is_payload_empty(struct __sk_buff *skb, skb_info_t *skb_info) { - return skb_info->data_off == skb->len; -} - -// The method is used to read the data buffer from the __sk_buf struct. Similar implementation as `read_into_buffer_skb` -// from http parsing, but uses a different constant (CLASSIFICATION_MAX_BUFFER). -static __always_inline void read_into_buffer_for_classification(char *buffer, struct __sk_buff *skb, skb_info_t *info) { - u64 offset = (u64)info->data_off; - -#define BLK_SIZE (16) - const u32 len = CLASSIFICATION_MAX_BUFFER < (skb->len - (u32)offset) ? (u32)offset + CLASSIFICATION_MAX_BUFFER : skb->len; - - unsigned i = 0; - -#pragma unroll(CLASSIFICATION_MAX_BUFFER / BLK_SIZE) - for (; i < (CLASSIFICATION_MAX_BUFFER / BLK_SIZE); i++) { - if (offset + BLK_SIZE - 1 >= len) { break; } - - bpf_skb_load_bytes_with_telemetry(skb, offset, &buffer[i * BLK_SIZE], BLK_SIZE); - offset += BLK_SIZE; - } - - // This part is very hard to write in a loop and unroll it. - // Indeed, mostly because of older kernel verifiers, we want to make sure the offset into the buffer is not - // stored on the stack, so that the verifier is able to verify that we're not doing out-of-bound on - // the stack. - // Basically, we should get a register from the code block above containing an fp relative address. As - // we are doing `buffer[0]` here, there is not dynamic computation on that said register after this, - // and thus the verifier is able to ensure that we are in-bound. - void *buf = &buffer[i * BLK_SIZE]; - if (offset + 14 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 15); - } else if (offset + 13 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 14); - } else if (offset + 12 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 13); - } else if (offset + 11 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 12); - } else if (offset + 10 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 11); - } else if (offset + 9 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 10); - } else if (offset + 8 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 9); - } else if (offset + 7 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 8); - } else if (offset + 6 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 7); - } else if (offset + 5 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 6); - } else if (offset + 4 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 5); - } else if (offset + 3 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 4); - } else if (offset + 2 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 3); - } else if (offset + 1 < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 2); - } else if (offset < len) { - bpf_skb_load_bytes_with_telemetry(skb, offset, buf, 1); - } -} - -// A shared implementation for the runtime & prebuilt socket filter that classifies the protocols of the connections. -static __always_inline void protocol_classifier_entrypoint(struct __sk_buff *skb) { - skb_info_t skb_info = {0}; - conn_tuple_t skb_tup = {0}; - - // Exporting the conn tuple from the skb, alongside couple of relevant fields from the skb. - if (!read_conn_tuple_skb(skb, &skb_info, &skb_tup)) { - return; - } - - // We support non empty TCP payloads for classification at the moment. - if (!is_tcp(&skb_tup) || is_payload_empty(skb, &skb_info)) { - return; - } - - protocol_t *cur_fragment_protocol_ptr = bpf_map_lookup_elem(&connection_protocol, &skb_tup); - if (cur_fragment_protocol_ptr) { - return; - } - - protocol_t cur_fragment_protocol = PROTOCOL_UNKNOWN; - char request_fragment[CLASSIFICATION_MAX_BUFFER]; - bpf_memset(request_fragment, 0, sizeof(request_fragment)); - read_into_buffer_for_classification((char *)request_fragment, skb, &skb_info); - const size_t payload_length = skb->len - skb_info.data_off; - const size_t final_fragment_size = payload_length < CLASSIFICATION_MAX_BUFFER ? payload_length : CLASSIFICATION_MAX_BUFFER; - classify_protocol(&cur_fragment_protocol, request_fragment, final_fragment_size); - // If there has been a change in the classification, save the new protocol. - if (cur_fragment_protocol != PROTOCOL_UNKNOWN) { - bpf_map_update_with_telemetry(connection_protocol, &skb_tup, &cur_fragment_protocol, BPF_NOEXIST); - conn_tuple_t inverse_skb_conn_tup = skb_tup; - flip_tuple(&inverse_skb_conn_tup); - bpf_map_update_with_telemetry(connection_protocol, &inverse_skb_conn_tup, &cur_fragment_protocol, BPF_NOEXIST); - } -} - -#endif diff --git a/pkg/network/ebpf/c/protocols/redis/defs.h b/pkg/network/ebpf/c/protocols/redis/defs.h new file mode 100644 index 0000000000000..68232fb4414f8 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/redis/defs.h @@ -0,0 +1,6 @@ +#ifndef __REDIS_DEFS_H +#define __REDIS_DEFS_H + +#define REDIS_MIN_FRAME_LENGTH 3 + +#endif diff --git a/pkg/network/ebpf/c/protocols/redis/helpers.h b/pkg/network/ebpf/c/protocols/redis/helpers.h new file mode 100644 index 0000000000000..ab26f110cba64 --- /dev/null +++ b/pkg/network/ebpf/c/protocols/redis/helpers.h @@ -0,0 +1,90 @@ +#ifndef __REDIS_HELPERS_H +#define __REDIS_HELPERS_H + +#include "protocols/classification/common.h" +#include "protocols/redis/defs.h" + +// Checks the buffer represent a standard response (OK) or any of redis commands +// https://redis.io/commands/ +static __always_inline bool check_supported_ascii_and_crlf(const char* buf, __u32 buf_size, int index_to_start_from) { + bool found_cr = false; + char current_char; + int i = index_to_start_from; +#pragma unroll(CLASSIFICATION_MAX_BUFFER) + for (; i < CLASSIFICATION_MAX_BUFFER; i++) { + current_char = buf[i]; + if (current_char == '\r') { + found_cr = true; + break; + } else if ('A' <= current_char && current_char <= 'Z') { + continue; + } else if ('a' <= current_char && current_char <= 'z') { + continue; + } else if (current_char == '.' || current_char == ' ' || current_char == '-' || current_char == '_') { + continue; + } + return false; + } + + if (!found_cr || i+1 >= buf_size) { + return false; + } + return buf[i+1] == '\n'; +} + +// Checks the buffer represents an error according to https://redis.io/docs/reference/protocol-spec/#resp-errors +static __always_inline bool check_err_prefix(const char* buf, __u32 buf_size) { +#define ERR "-ERR " +#define WRONGTYPE "-WRONGTYPE " + + // memcmp returns + // 0 when s1 == s2, + // !0 when s1 != s2. + bool match = !(bpf_memcmp(buf, ERR, sizeof(ERR)-1) + && bpf_memcmp(buf, WRONGTYPE, sizeof(WRONGTYPE)-1)); + + return match; +} + +static __always_inline bool check_integer_and_crlf(const char* buf, __u32 buf_size, int index_to_start_from) { + bool found_cr = false; + char current_char; + int i = index_to_start_from; +#pragma unroll(CLASSIFICATION_MAX_BUFFER) + for (; i < CLASSIFICATION_MAX_BUFFER; i++) { + current_char = buf[i]; + if (current_char == '\r') { + found_cr = true; + break; + } else if ('0' <= current_char && current_char <= '9') { + continue; + } + + return false; + } + + if (!found_cr || i+1 >= buf_size) { + return false; + } + return buf[i+1] == '\n'; +} + +static __always_inline bool is_redis(const char* buf, __u32 buf_size) { + CHECK_PRELIMINARY_BUFFER_CONDITIONS(buf, buf_size, REDIS_MIN_FRAME_LENGTH); + + char first_char = buf[0]; + switch (first_char) { + case '+': + return check_supported_ascii_and_crlf(buf, buf_size, 1); + case '-': + return check_err_prefix(buf, buf_size); + case ':': + case '$': + case '*': + return check_integer_and_crlf(buf, buf_size, 1); + default: + return false; + } +} + +#endif diff --git a/pkg/network/ebpf/c/protocols/sql/defs.h b/pkg/network/ebpf/c/protocols/sql/defs.h new file mode 100644 index 0000000000000..011768c183c4f --- /dev/null +++ b/pkg/network/ebpf/c/protocols/sql/defs.h @@ -0,0 +1,14 @@ +#ifndef __SQL_DEFS_H +#define __SQL_DEFS_H + +#define SQL_COMMAND_MAX_SIZE 6 + +#define SQL_ALTER "ALTER" +#define SQL_CREATE "CREATE" +#define SQL_DELETE "DELETE" +#define SQL_DROP "DROP" +#define SQL_INSERT "INSERT" +#define SQL_SELECT "SELECT" +#define SQL_UPDATE "UPDATE" + +#endif /*__SQL_DEFS_H*/ diff --git a/pkg/network/ebpf/c/protocols/sql/helpers.h b/pkg/network/ebpf/c/protocols/sql/helpers.h new file mode 100644 index 0000000000000..11952c4363d1d --- /dev/null +++ b/pkg/network/ebpf/c/protocols/sql/helpers.h @@ -0,0 +1,39 @@ +#ifndef __SQL_HELPERS_H +#define __SQL_HELPERS_H + +#include "bpf_builtins.h" + +#include "protocols/sql/defs.h" + +// Check that we can read the amount of memory we want, then to the comparison. +// Note: we use `sizeof(command) - 1` to *not* compare with the null-terminator of +// the strings. +#define check_command(buf, command, buf_size) \ + (!bpf_memcmp((buf), &(command), sizeof(command) - 1)) + +// is_sql_command check that there is an SQL query in buf. We only check the +// most commonly used SQL queries +static __always_inline bool is_sql_command(const char *buf, __u32 buf_size) { + char tmp[SQL_COMMAND_MAX_SIZE]; + + // Convert what would be the query to uppercase to match queries like + // 'select * from table' +#pragma unroll (SQL_COMMAND_MAX_SIZE) + for (int i = 0; i < SQL_COMMAND_MAX_SIZE; i++) { + if ('a' <= buf[i] && buf[i] <= 'z') { + tmp[i] = buf[i] - 'a' +'A'; + } else { + tmp[i] = buf[i]; + } + } + + return check_command(tmp, SQL_ALTER, buf_size) + || check_command(tmp, SQL_CREATE, buf_size) + || check_command(tmp, SQL_DELETE, buf_size) + || check_command(tmp, SQL_DROP, buf_size) + || check_command(tmp, SQL_INSERT, buf_size) + || check_command(tmp, SQL_SELECT, buf_size) + || check_command(tmp, SQL_UPDATE, buf_size); +} + +#endif // __SQL_HELPERS_H diff --git a/pkg/network/ebpf/c/protocols/go-tls-conn.h b/pkg/network/ebpf/c/protocols/tls/go-tls-conn.h similarity index 90% rename from pkg/network/ebpf/c/protocols/go-tls-conn.h rename to pkg/network/ebpf/c/protocols/tls/go-tls-conn.h index bf45a8639287d..75c7f30780c91 100644 --- a/pkg/network/ebpf/c/protocols/go-tls-conn.h +++ b/pkg/network/ebpf/c/protocols/tls/go-tls-conn.h @@ -2,11 +2,12 @@ #define __GO_TLS_CONN_H #include "bpf_helpers.h" -#include "go-tls-types.h" -#include "http-maps.h" #include "ip.h" #include "port_range.h" +#include "protocols/http/maps.h" +#include "protocols/tls/go-tls-types.h" + // Implemented either in c/runtime/conn-tuple.h or from c/sockfd.h static int read_conn_tuple(conn_tuple_t *t, struct sock *skp, u64 pid_tgid, metadata_mask_t type); @@ -37,7 +38,7 @@ static __always_inline int get_conn_fd(tls_conn_layout_t* cl, void* tls_conn_ptr } static __always_inline conn_tuple_t* conn_tup_from_tls_conn(tls_offsets_data_t* pd, void* conn, uint64_t pid_tgid) { - conn_tuple_t* tup = bpf_map_lookup_elem(&conn_tup_by_tls_conn, &conn); + conn_tuple_t* tup = bpf_map_lookup_elem(&conn_tup_by_go_tls_conn, &conn); if (tup != NULL) { return tup; } @@ -75,8 +76,8 @@ static __always_inline conn_tuple_t* conn_tup_from_tls_conn(tls_offsets_data_t* flip_tuple(&conn_tuple); } - bpf_map_update_elem(&conn_tup_by_tls_conn, &conn, &conn_tuple, BPF_ANY); - return bpf_map_lookup_elem(&conn_tup_by_tls_conn, &conn); + bpf_map_update_elem(&conn_tup_by_go_tls_conn, &conn, &conn_tuple, BPF_ANY); + return bpf_map_lookup_elem(&conn_tup_by_go_tls_conn, &conn); } #endif //__GO_TLS_CONN_H diff --git a/pkg/network/ebpf/c/protocols/go-tls-goid.h b/pkg/network/ebpf/c/protocols/tls/go-tls-goid.h similarity index 95% rename from pkg/network/ebpf/c/protocols/go-tls-goid.h rename to pkg/network/ebpf/c/protocols/tls/go-tls-goid.h index 77c9f02d81a21..51ec439fa43f3 100644 --- a/pkg/network/ebpf/c/protocols/go-tls-goid.h +++ b/pkg/network/ebpf/c/protocols/tls/go-tls-goid.h @@ -5,9 +5,11 @@ #include #include "bpf_helpers.h" -#include "go-tls-types.h" -#include "go-tls-location.h" -#include "http-maps.h" + +#include "protocols/http/maps.h" + +#include "protocols/tls/go-tls-types.h" +#include "protocols/tls/go-tls-location.h" // Implemented either in c/runtime/runtime-get-tls-base.h or in ____ (TODO add offset-guessed version) static void* get_tls_base(struct task_struct* task); diff --git a/pkg/network/ebpf/c/protocols/go-tls-location.h b/pkg/network/ebpf/c/protocols/tls/go-tls-location.h similarity index 100% rename from pkg/network/ebpf/c/protocols/go-tls-location.h rename to pkg/network/ebpf/c/protocols/tls/go-tls-location.h diff --git a/pkg/network/ebpf/c/protocols/go-tls-types.h b/pkg/network/ebpf/c/protocols/tls/go-tls-types.h similarity index 100% rename from pkg/network/ebpf/c/protocols/go-tls-types.h rename to pkg/network/ebpf/c/protocols/tls/go-tls-types.h diff --git a/pkg/network/ebpf/c/protocols/https.h b/pkg/network/ebpf/c/protocols/tls/https.h similarity index 94% rename from pkg/network/ebpf/c/protocols/https.h rename to pkg/network/ebpf/c/protocols/tls/https.h index 0203f820f2d4f..aedf0676aab83 100644 --- a/pkg/network/ebpf/c/protocols/https.h +++ b/pkg/network/ebpf/c/protocols/tls/https.h @@ -7,16 +7,17 @@ #include #include "bpf_builtins.h" -#include "go-tls-types.h" -#include "http-buffer.h" -#include "http-types.h" -#include "http-maps.h" -#include "http.h" #include "port_range.h" #include "sockfd.h" -#include "tags-types.h" -#include "protocol-classification-helpers.h" -#include "protocol-dispatcher-maps.h" + +#include "protocols/classification/dispatcher-helpers.h" +#include "protocols/classification/dispatcher-maps.h" +#include "protocols/http/buffer.h" +#include "protocols/http/types.h" +#include "protocols/http/maps.h" +#include "protocols/http/http.h" +#include "protocols/tls/tags-types.h" +#include "protocols/tls/go-tls-types.h" #define HTTPS_PORT 443 @@ -41,7 +42,7 @@ static __always_inline void https_process(conn_tuple_t *t, void *buffer, size_t // try classifying the protocol if no prior identification exists if (cur_fragment_protocol_ptr == NULL) { - classify_protocol(&cur_fragment_protocol, http.request_fragment, len); + classify_protocol_for_dispatcher(&cur_fragment_protocol, &http.tup, http.request_fragment, len); // If there has been a change in the classification, save the new protocol. if (cur_fragment_protocol != PROTOCOL_UNKNOWN) { bpf_map_update_with_telemetry(dispatcher_connection_protocol, &http.tup, &cur_fragment_protocol, BPF_NOEXIST); diff --git a/pkg/network/ebpf/c/protocols/tags-types.h b/pkg/network/ebpf/c/protocols/tls/tags-types.h similarity index 100% rename from pkg/network/ebpf/c/protocols/tags-types.h rename to pkg/network/ebpf/c/protocols/tls/tags-types.h diff --git a/pkg/network/ebpf/c/runtime/http.c b/pkg/network/ebpf/c/runtime/http.c index d9f2d8c4f77cd..542b2737a4ed8 100644 --- a/pkg/network/ebpf/c/runtime/http.c +++ b/pkg/network/ebpf/c/runtime/http.c @@ -9,15 +9,16 @@ #include "sockfd.h" #include "conn-tuple.h" #include "port_range.h" -#include "protocols/http.h" -#include "protocols/http-buffer.h" -#include "protocols/https.h" -#include "protocols/go-tls-types.h" -#include "protocols/go-tls-goid.h" -#include "protocols/go-tls-location.h" -#include "protocols/go-tls-conn.h" -#include "protocols/tags-types.h" -#include "protocols/protocol-dispatcher-helpers.h" + +#include "protocols/classification/dispatcher-helpers.h" +#include "protocols/http/http.h" +#include "protocols/http/buffer.h" +#include "protocols/tls/https.h" +#include "protocols/tls/go-tls-types.h" +#include "protocols/tls/go-tls-goid.h" +#include "protocols/tls/go-tls-location.h" +#include "protocols/tls/go-tls-conn.h" +#include "protocols/tls/tags-types.h" #define SO_SUFFIX_SIZE 3 @@ -836,7 +837,7 @@ int uprobe__crypto_tls_Conn_Close(struct pt_regs *ctx) { https_finish(t); // Clear the element in the map since this connection is closed - bpf_map_delete_elem(&conn_tup_by_tls_conn, &conn_pointer); + bpf_map_delete_elem(&conn_tup_by_go_tls_conn, &conn_pointer); return 0; } diff --git a/pkg/network/ebpf/c/runtime/tracer.c b/pkg/network/ebpf/c/runtime/tracer.c index 9a39d4bd7afb4..e8d3f53324199 100644 --- a/pkg/network/ebpf/c/runtime/tracer.c +++ b/pkg/network/ebpf/c/runtime/tracer.c @@ -4,7 +4,6 @@ #include "bpf_tracing.h" #include "tracer.h" -#include "protocols/protocol-classification-helpers.h" #include "tracer-events.h" #include "tracer-maps.h" #include "tracer-stats.h" @@ -17,6 +16,9 @@ #include "port.h" #include "tcp-recv.h" +#include "protocols/classification/tracer-maps.h" +#include "protocols/classification/protocol-classification.h" + #ifdef FEATURE_IPV6_ENABLED #include "ipv6.h" #endif @@ -39,6 +41,16 @@ #include "conn-tuple.h" #include "sock.h" +// This entry point is needed to bypass a memory limit on socket filters. +// There is a limitation on number of instructions can be attached to a socket filter, +// as we classify more protocols, we reached that limit, thus we workaround it +// by using tail call. +SEC("socket/classifier_entry") +int socket__classifier_entry(struct __sk_buff *skb) { + bpf_tail_call_compat(skb, &classification_progs, CLASSIFICATION_PROG); + return 0; +} + // The entrypoint for all packets. SEC("socket/classifier") int socket__classifier(struct __sk_buff *skb) { @@ -563,27 +575,13 @@ static __always_inline int sys_enter_bind(struct socket *sock, struct sockaddr * return 0; } - u16 sin_port = 0; - sa_family_t family = 0; - bpf_probe_read_kernel_with_telemetry(&family, sizeof(sa_family_t), &addr->sa_family); - if (family == AF_INET) { - bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in *)addr)->sin_port)); - } else if (family == AF_INET6) { - bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in6 *)addr)->sin6_port)); - } - - sin_port = bpf_ntohs(sin_port); - if (sin_port == 0) { - log_debug("ERR(sys_enter_bind): sin_port is 0\n"); - return 0; - } - // write to pending_binds so the retprobe knows we can mark this as binding. bind_syscall_args_t args = {}; - args.port = sin_port; + bpf_probe_read_kernel_with_telemetry(&args.sk, sizeof(args.sk), &sock->sk); + args.addr = addr; bpf_map_update_with_telemetry(pending_bind, &tid, &args, BPF_ANY); - log_debug("sys_enter_bind: started a bind on UDP port=%d sock=%llx tid=%u\n", sin_port, sock, tid); + log_debug("sys_enter_bind: started a bind on UDP sock=%llx tid=%u\n", sock, tid); return 0; } @@ -612,8 +610,7 @@ static __always_inline int sys_exit_bind(__s64 ret) { __u64 tid = bpf_get_current_pid_tgid(); // bail if this bind() is not the one we're instrumenting - bind_syscall_args_t *args; - args = bpf_map_lookup_elem(&pending_bind, &tid); + bind_syscall_args_t *args = bpf_map_lookup_elem(&pending_bind, &tid); log_debug("sys_exit_bind: tid=%u, ret=%d\n", tid, ret); @@ -621,13 +618,34 @@ static __always_inline int sys_exit_bind(__s64 ret) { log_debug("sys_exit_bind: was not a UDP bind, will not process\n"); return 0; } - __u16 sin_port = args->port; + + struct sock * sk = args->sk; + struct sockaddr *addr = args->addr; bpf_map_delete_elem(&pending_bind, &tid); if (ret != 0) { return 0; } + u16 sin_port = 0; + sa_family_t family = 0; + bpf_probe_read_kernel_with_telemetry(&family, sizeof(sa_family_t), &addr->sa_family); + if (family == AF_INET) { + bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in *)addr)->sin_port)); + } else if (family == AF_INET6) { + bpf_probe_read_kernel_with_telemetry(&sin_port, sizeof(u16), &(((struct sockaddr_in6 *)addr)->sin6_port)); + } + + sin_port = bpf_ntohs(sin_port); + if (sin_port == 0) { + sin_port = read_sport(sk); + } + + if (sin_port == 0) { + log_debug("ERR(sys_exit_bind): sin_port is 0\n"); + return 0; + } + port_binding_t pb = {}; pb.netns = 0; // don't have net ns info in this context pb.port = sin_port; diff --git a/pkg/network/ebpf/c/tracer-events.h b/pkg/network/ebpf/c/tracer-events.h index b9dd2890897b5..599310102e355 100644 --- a/pkg/network/ebpf/c/tracer-events.h +++ b/pkg/network/ebpf/c/tracer-events.h @@ -2,7 +2,7 @@ #define __TRACER_EVENTS_H #include "tracer.h" - +#include "ip.h" #include "tracer-maps.h" #include "tracer-telemetry.h" #include "tcp_states.h" @@ -12,6 +12,8 @@ #include "bpf_telemetry.h" #include "bpf_builtins.h" +#include "protocols/classification/tracer-maps.h" + static __always_inline int get_proto(conn_tuple_t *t) { return (t->metadata & CONN_TYPE_TCP) ? CONN_TYPE_TCP : CONN_TYPE_UDP; } diff --git a/pkg/network/ebpf/c/tracer-maps.h b/pkg/network/ebpf/c/tracer-maps.h index 133db02bd428d..0b843346bc0fd 100644 --- a/pkg/network/ebpf/c/tracer-maps.h +++ b/pkg/network/ebpf/c/tracer-maps.h @@ -92,4 +92,11 @@ BPF_HASH_MAP(do_sendfile_args, __u64, struct sock *, 1024) // corresponding kretprobes BPF_HASH_MAP(ip_make_skb_args, __u64, ip_make_skb_args_t, 1024) +// This entry point is needed to bypass a memory limit on socket filters. +// There is a limitation on number of instructions can be attached to a socket filter, +// as we classify more protocols, we reached that limit, thus we workaround it +// by using tail call. +#define CLASSIFICATION_PROG 0 +BPF_PROG_ARRAY(classification_progs, 1) + #endif diff --git a/pkg/network/ebpf/c/tracer.h b/pkg/network/ebpf/c/tracer.h index 128a223cdb795..09ae0c0c80bf2 100644 --- a/pkg/network/ebpf/c/tracer.h +++ b/pkg/network/ebpf/c/tracer.h @@ -3,7 +3,7 @@ #include -#include "protocols/protocol-classification-defs.h" +#include "protocols/classification/defs.h" #define bool _Bool #define true 1 @@ -145,7 +145,8 @@ typedef struct { } telemetry_t; typedef struct { - __u16 port; + struct sockaddr *addr; + struct sock *sk; } bind_syscall_args_t; typedef struct { diff --git a/pkg/network/ebpf/kprobe_types.go b/pkg/network/ebpf/kprobe_types.go index 077ea727f3282..d8427ad141ad3 100644 --- a/pkg/network/ebpf/kprobe_types.go +++ b/pkg/network/ebpf/kprobe_types.go @@ -29,6 +29,7 @@ type BindSyscallArgs C.bind_syscall_args_t // udp_recv_sock_t have *sock and *msghdr struct members, we make them opaque here type _Ctype_struct_sock uint64 type _Ctype_struct_msghdr uint64 +type _Ctype_struct_sockaddr uint64 type TCPState uint8 diff --git a/pkg/network/ebpf/kprobe_types_linux.go b/pkg/network/ebpf/kprobe_types_linux.go index 54f017d880e9a..cd0709c6e2b7d 100644 --- a/pkg/network/ebpf/kprobe_types_linux.go +++ b/pkg/network/ebpf/kprobe_types_linux.go @@ -69,11 +69,13 @@ type UDPRecvSock struct { Msg *_Ctype_struct_msghdr } type BindSyscallArgs struct { - Port uint16 + Addr *_Ctype_struct_sockaddr + Sk *_Ctype_struct_sock } type _Ctype_struct_sock uint64 type _Ctype_struct_msghdr uint64 +type _Ctype_struct_sockaddr uint64 type TCPState uint8 diff --git a/pkg/network/ebpf/probes/probes.go b/pkg/network/ebpf/probes/probes.go index 5d4d4667425af..5d60821d33b81 100644 --- a/pkg/network/ebpf/probes/probes.go +++ b/pkg/network/ebpf/probes/probes.go @@ -8,10 +8,8 @@ package probes -import "fmt" - // ProbeName stores the name of the kernel probes setup for tracing -type ProbeName string +type ProbeName = string const ( // InetCskListenStop traces the inet_csk_listen_stop system call (called for both ipv4 and ipv6) @@ -27,7 +25,9 @@ const ( // TCPv6ConnectReturn traces the return value for the v6 connect() system call TCPv6ConnectReturn ProbeName = "kretprobe/tcp_v6_connect" - // ProtocolClassifierSocketFilter runs a classifier algorithm as a socket filer + // ProtocolClassifierEntrySocketFilter runs a classifier algorithm as a socket filter + ProtocolClassifierEntrySocketFilter ProbeName = "socket/classifier_entry" + // ProtocolClassifierSocketFilter runs a classifier algorithm as a socket filter ProtocolClassifierSocketFilter ProbeName = "socket/classifier" // NetDevQueue runs a tracepoint that allows us to correlate __sk_buf (in a socket filter) with the `struct sock*` @@ -62,7 +62,7 @@ const ( // TCPRecvMsgPre410 traces the tcp_recvmsg() system call on kernels prior to 4.1.0. This is created because // we need to load a different kprobe implementation TCPRecvMsgPre410 ProbeName = "kprobe/tcp_recvmsg/pre_4_1_0" - // TCPRecvMsgreturn traces the return for the tcp_recvmsg() kernel function + // TCPRecvMsgReturn traces the return for the tcp_recvmsg() kernel function TCPRecvMsgReturn ProbeName = "kretprobe/tcp_recvmsg" // TCPReadSock traces the tcp_read_sock() kernel function TCPReadSock ProbeName = "kprobe/tcp_read_sock" @@ -137,7 +137,7 @@ const ( // ConntrackHashInsert is the probe for new conntrack entries ConntrackHashInsert ProbeName = "kprobe/__nf_conntrack_hash_insert" - // ConntrackFillInfo is the probe for for dumping existing conntrack entries + // ConntrackFillInfo is the probe for dumping existing conntrack entries ConntrackFillInfo ProbeName = "kprobe/ctnetlink_fill_info" // SockFDLookup is the kprobe used for mapping socket FDs to kernel sock structs @@ -154,34 +154,32 @@ const ( ) // BPFMapName stores the name of the BPF maps storing statistics and other info -type BPFMapName string +type BPFMapName = string // constants for the map names const ( - ConnMap BPFMapName = "conn_stats" - TCPStatsMap BPFMapName = "tcp_stats" - TCPConnectSockPidMap BPFMapName = "tcp_ongoing_connect_pid" - ConnCloseEventMap BPFMapName = "conn_close_event" - TracerStatusMap BPFMapName = "tracer_status" - PortBindingsMap BPFMapName = "port_bindings" - UDPPortBindingsMap BPFMapName = "udp_port_bindings" - TelemetryMap BPFMapName = "telemetry" - ConnCloseBatchMap BPFMapName = "conn_close_batch" - ConntrackMap BPFMapName = "conntrack" - ConntrackTelemetryMap BPFMapName = "conntrack_telemetry" - SockFDLookupArgsMap BPFMapName = "sockfd_lookup_args" - DoSendfileArgsMap BPFMapName = "do_sendfile_args" - SockByPidFDMap BPFMapName = "sock_by_pid_fd" - PidFDBySockMap BPFMapName = "pid_fd_by_sock" - TagsMap BPFMapName = "conn_tags" - TcpSendMsgArgsMap BPFMapName = "tcp_sendmsg_args" - IpMakeSkbArgsMap BPFMapName = "ip_make_skb_args" - MapErrTelemetryMap BPFMapName = "map_err_telemetry_map" - HelperErrTelemetryMap BPFMapName = "helper_err_telemetry_map" - TcpRecvMsgArgsMap BPFMapName = "tcp_recvmsg_args" + ConnMap BPFMapName = "conn_stats" + TCPStatsMap BPFMapName = "tcp_stats" + TCPConnectSockPidMap BPFMapName = "tcp_ongoing_connect_pid" + ConnCloseEventMap BPFMapName = "conn_close_event" + TracerStatusMap BPFMapName = "tracer_status" + PortBindingsMap BPFMapName = "port_bindings" + UDPPortBindingsMap BPFMapName = "udp_port_bindings" + TelemetryMap BPFMapName = "telemetry" + ConnCloseBatchMap BPFMapName = "conn_close_batch" + ConntrackMap BPFMapName = "conntrack" + ConntrackTelemetryMap BPFMapName = "conntrack_telemetry" + SockFDLookupArgsMap BPFMapName = "sockfd_lookup_args" + DoSendfileArgsMap BPFMapName = "do_sendfile_args" + SockByPidFDMap BPFMapName = "sock_by_pid_fd" + PidFDBySockMap BPFMapName = "pid_fd_by_sock" + TcpSendMsgArgsMap BPFMapName = "tcp_sendmsg_args" + IpMakeSkbArgsMap BPFMapName = "ip_make_skb_args" + MapErrTelemetryMap BPFMapName = "map_err_telemetry_map" + HelperErrTelemetryMap BPFMapName = "helper_err_telemetry_map" + TcpRecvMsgArgsMap BPFMapName = "tcp_recvmsg_args" + ProtocolClassificationBufMap BPFMapName = "classification_buf" + ConnectionProtocolMap BPFMapName = "connection_protocol" + ConnectionTupleToSocketSKBConnMap BPFMapName = "conn_tuple_to_socket_skb_conn_tuple" + ClassificationProgsMap BPFMapName = "classification_progs" ) - -// SectionName returns the SectionName for the given BPF map -func (b BPFMapName) SectionName() string { - return fmt.Sprintf("maps/%s", b) -} diff --git a/pkg/network/encoding/dns.go b/pkg/network/encoding/dns.go index 4df060d22bcd6..0cb44a36b3138 100644 --- a/pkg/network/encoding/dns.go +++ b/pkg/network/encoding/dns.go @@ -38,8 +38,8 @@ func newDNSFormatter(conns *network.Connections, ipc ipCache) *dnsFormatter { ipc: ipc, domainSet: make(map[string]int), seen: make(map[dns.Key]struct{}), - queryTypeEnabled: config.Datadog.GetBool("network_config.enable_dns_by_querytype"), - dnsDomainsEnabled: config.Datadog.GetBool("system_probe_config.collect_dns_domains"), + queryTypeEnabled: config.SystemProbe.GetBool("network_config.enable_dns_by_querytype"), + dnsDomainsEnabled: config.SystemProbe.GetBool("system_probe_config.collect_dns_domains"), } } diff --git a/pkg/network/encoding/dns_test.go b/pkg/network/encoding/dns_test.go index 369a435afec9b..f06a4e01bea03 100644 --- a/pkg/network/encoding/dns_test.go +++ b/pkg/network/encoding/dns_test.go @@ -54,8 +54,8 @@ func TestFormatConnectionDNS(t *testing.T) { } t.Run("DNS with collect_domains_enabled=true,enable_dns_by_querytype=false", func(t *testing.T) { - config.Datadog.Set("system_probe_config.collect_dns_domains", true) - config.Datadog.Set("network_config.enable_dns_by_querytype", false) + config.SystemProbe.Set("system_probe_config.collect_dns_domains", true) + config.SystemProbe.Set("network_config.enable_dns_by_querytype", false) ipc := make(ipCache) formatter := newDNSFormatter(payload, ipc) @@ -82,8 +82,8 @@ func TestFormatConnectionDNS(t *testing.T) { }) t.Run("DNS with collect_domains_enabled=true,enable_dns_by_querytype=true", func(t *testing.T) { - config.Datadog.Set("system_probe_config.collect_dns_domains", true) - config.Datadog.Set("network_config.enable_dns_by_querytype", true) + config.SystemProbe.Set("system_probe_config.collect_dns_domains", true) + config.SystemProbe.Set("network_config.enable_dns_by_querytype", true) ipc := make(ipCache) formatter := newDNSFormatter(payload, ipc) @@ -157,8 +157,8 @@ func TestDNSPIDCollision(t *testing.T) { }, } - config.Datadog.Set("system_probe_config.collect_dns_domains", true) - config.Datadog.Set("network_config.enable_dns_by_querytype", false) + config.SystemProbe.Set("system_probe_config.collect_dns_domains", true) + config.SystemProbe.Set("network_config.enable_dns_by_querytype", false) ipc := make(ipCache) formatter := newDNSFormatter(payload, ipc) diff --git a/pkg/network/encoding/encoding.go b/pkg/network/encoding/encoding.go index ce49727539fe9..6b7617f5ceb2a 100644 --- a/pkg/network/encoding/encoding.go +++ b/pkg/network/encoding/encoding.go @@ -63,8 +63,8 @@ func GetUnmarshaler(ctype string) Unmarshaler { func modelConnections(conns *network.Connections) *model.Connections { cfgOnce.Do(func() { agentCfg = &model.AgentConfiguration{ - NpmEnabled: config.Datadog.GetBool("network_config.enabled"), - TsmEnabled: config.Datadog.GetBool("service_monitoring_config.enabled"), + NpmEnabled: config.SystemProbe.GetBool("network_config.enabled"), + UsmEnabled: config.SystemProbe.GetBool("service_monitoring_config.enabled"), } }) diff --git a/pkg/network/encoding/encoding_test.go b/pkg/network/encoding/encoding_test.go index 972ba349b94fa..40a6957412a74 100644 --- a/pkg/network/encoding/encoding_test.go +++ b/pkg/network/encoding/encoding_test.go @@ -34,16 +34,15 @@ const ( tagOpenSSL connTag = 2 // netebpf.OpenSSL ) -var originalConfig = config.Datadog - -func restoreGlobalConfig() { - config.Datadog = originalConfig +func newConfig(t *testing.T) { + originalConfig := config.SystemProbe + t.Cleanup(func() { + config.SystemProbe = originalConfig + }) + config.SystemProbe = config.NewConfig("system-probe", "DD", strings.NewReplacer(".", "_")) + config.InitSystemProbeConfig(config.SystemProbe) } -func newConfig() { - config.Datadog = config.NewConfig("datadog", "DD", strings.NewReplacer(".", "_")) - config.InitConfig(config.Datadog) -} func getExpectedConnections(encodedWithQueryType bool, httpOutBlob []byte) *model.Connections { var dnsByDomain map[int32]*model.DNSStats var dnsByDomainByQuerytype map[int32]*model.DNSStatsByQueryType @@ -133,7 +132,7 @@ func getExpectedConnections(encodedWithQueryType bool, httpOutBlob []byte) *mode }, AgentConfiguration: &model.AgentConfiguration{ NpmEnabled: false, - TsmEnabled: false, + UsmEnabled: false, }, Tags: network.GetStaticTags(1), } @@ -187,15 +186,15 @@ func TestSerialization(t *testing.T) { Protocol: network.ProtocolHTTP, }, { - Source: util.AddressFromString("10.1.1.1"), - Dest: util.AddressFromString("8.8.8.8"), - SPort: 1000, - DPort: 53, - Type: network.UDP, - Family: network.AFINET6, - Direction: network.LOCAL, - Tags: uint64(1), - Protocol: network.ProtocolHTTP2, + Source: util.AddressFromString("10.1.1.1"), + Dest: util.AddressFromString("8.8.8.8"), + SPort: 1000, + DPort: 53, + Type: network.UDP, + Family: network.AFINET6, + Direction: network.LOCAL, + StaticTags: uint64(1), + Protocol: network.ProtocolHTTP2, }, }, }, @@ -270,9 +269,8 @@ func TestSerialization(t *testing.T) { require.NoError(t, err) t.Run("requesting application/json serialization (no query types)", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - config.Datadog.Set("system_probe_config.collect_dns_domains", false) + newConfig(t) + config.SystemProbe.Set("system_probe_config.collect_dns_domains", false) out := getExpectedConnections(false, httpOutBlob) assert := assert.New(t) marshaler := GetMarshaler("application/json") @@ -294,10 +292,9 @@ func TestSerialization(t *testing.T) { assert.Equal(out, result) }) t.Run("requesting application/json serialization (with query types)", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - config.Datadog.Set("system_probe_config.collect_dns_domains", false) - config.Datadog.Set("network_config.enable_dns_by_querytype", true) + newConfig(t) + config.SystemProbe.Set("system_probe_config.collect_dns_domains", false) + config.SystemProbe.Set("network_config.enable_dns_by_querytype", true) out := getExpectedConnections(true, httpOutBlob) assert := assert.New(t) marshaler := GetMarshaler("application/json") @@ -320,9 +317,8 @@ func TestSerialization(t *testing.T) { }) t.Run("requesting empty serialization", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - config.Datadog.Set("system_probe_config.collect_dns_domains", false) + newConfig(t) + config.SystemProbe.Set("system_probe_config.collect_dns_domains", false) out := getExpectedConnections(false, httpOutBlob) assert := assert.New(t) marshaler := GetMarshaler("") @@ -346,9 +342,8 @@ func TestSerialization(t *testing.T) { }) t.Run("requesting unsupported serialization format", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - config.Datadog.Set("system_probe_config.collect_dns_domains", false) + newConfig(t) + config.SystemProbe.Set("system_probe_config.collect_dns_domains", false) out := getExpectedConnections(false, httpOutBlob) assert := assert.New(t) @@ -402,9 +397,8 @@ func TestSerialization(t *testing.T) { }) t.Run("requesting application/protobuf serialization (no query types)", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - config.Datadog.Set("system_probe_config.collect_dns_domains", false) + newConfig(t) + config.SystemProbe.Set("system_probe_config.collect_dns_domains", false) out := getExpectedConnections(false, httpOutBlob) assert := assert.New(t) @@ -421,10 +415,9 @@ func TestSerialization(t *testing.T) { assert.Equal(out, result) }) t.Run("requesting application/protobuf serialization (with query types)", func(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - config.Datadog.Set("system_probe_config.collect_dns_domains", false) - config.Datadog.Set("network_config.enable_dns_by_querytype", true) + newConfig(t) + config.SystemProbe.Set("system_probe_config.collect_dns_domains", false) + config.SystemProbe.Set("network_config.enable_dns_by_querytype", true) out := getExpectedConnections(true, httpOutBlob) assert := assert.New(t) @@ -521,7 +514,7 @@ func TestHTTPSerializationWithLocalhostTraffic(t *testing.T) { }, AgentConfiguration: &model.AgentConfiguration{ NpmEnabled: false, - TsmEnabled: false, + UsmEnabled: false, }, } diff --git a/pkg/network/encoding/format.go b/pkg/network/encoding/format.go index fcdf112154395..734932f815629 100644 --- a/pkg/network/encoding/format.go +++ b/pkg/network/encoding/format.go @@ -11,10 +11,10 @@ import ( "sync" "unsafe" - model "github.com/DataDog/agent-payload/v5/process" "github.com/gogo/protobuf/proto" "github.com/twmb/murmur3" + model "github.com/DataDog/agent-payload/v5/process" "github.com/DataDog/datadog-agent/pkg/network" "github.com/DataDog/datadog-agent/pkg/process/util" ) @@ -56,8 +56,12 @@ func FormatConnection( ) *model.Connection { c := connPool.Get().(*model.Connection) c.Pid = int32(conn.Pid) - c.Laddr = formatAddr(conn.Source, conn.SPort, ipc) - c.Raddr = formatAddr(conn.Dest, conn.DPort, ipc) + var containerID string + if conn.ContainerID != nil { + containerID = *conn.ContainerID + } + c.Laddr = formatAddr(conn.Source, conn.SPort, containerID, ipc) + c.Raddr = formatAddr(conn.Dest, conn.DPort, "", ipc) c.Family = formatFamily(conn.Family) c.Type = formatType(conn.Type) c.IsLocalPortEphemeral = formatEphemeralType(conn.SPortIsEphemeral) @@ -84,7 +88,7 @@ func FormatConnection( c.HttpAggregations, _ = proto.Marshal(httpStats) } - conn.Tags |= staticTags + conn.StaticTags |= staticTags c.Tags, c.TagsChecksum = formatTags(tagsSet, conn, dynamicTags) return c @@ -147,12 +151,12 @@ func returnToPool(c *model.Connections) { } } -func formatAddr(addr util.Address, port uint16, ipc ipCache) *model.Addr { +func formatAddr(addr util.Address, port uint16, containerID string, ipc ipCache) *model.Addr { if addr.IsZero() { return nil } - return &model.Addr{Ip: ipc.Get(addr), Port: int32(port)} + return &model.Addr{Ip: ipc.Get(addr), Port: int32(port), ContainerId: containerID} } func formatFamily(f network.ConnectionFamily) model.ConnectionFamily { @@ -248,7 +252,7 @@ func routeKey(v *network.Via) string { func formatTags(tagsSet *network.TagsSet, c network.ConnectionStats, connDynamicTags map[string]struct{}) (tagsIdx []uint32, checksum uint32) { mm := murmur3.New32() - for _, tag := range network.GetStaticTags(c.Tags) { + for _, tag := range network.GetStaticTags(c.StaticTags) { mm.Reset() _, _ = mm.Write(unsafeStringSlice(tag)) checksum ^= mm.Sum32() @@ -263,6 +267,14 @@ func formatTags(tagsSet *network.TagsSet, c network.ConnectionStats, connDynamic tagsIdx = append(tagsIdx, tagsSet.Add(tag)) } + // other tags, e.g., from process env vars like DD_ENV, etc. + for tag := range c.Tags { + mm.Reset() + _, _ = mm.Write(unsafeStringSlice(tag)) + checksum ^= mm.Sum32() + tagsIdx = append(tagsIdx, tagsSet.Add(tag)) + } + return } diff --git a/pkg/network/encoding/format_usm_test.go b/pkg/network/encoding/format_usm_test.go index b3e15cef7998b..5df0344a3a1d3 100644 --- a/pkg/network/encoding/format_usm_test.go +++ b/pkg/network/encoding/format_usm_test.go @@ -6,9 +6,10 @@ package encoding import ( - "github.com/stretchr/testify/assert" "testing" + "github.com/stretchr/testify/assert" + model "github.com/DataDog/agent-payload/v5/process" "github.com/DataDog/datadog-agent/pkg/network" ) @@ -64,6 +65,15 @@ func TestFormatProtocols(t *testing.T) { }, }, }, + { + name: "mongo protocol", + protocol: network.ProtocolMongo, + want: &model.ProtocolStack{ + Stack: []model.ProtocolType{ + model.ProtocolType_protocolMongo, + }, + }, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/pkg/network/ephemeral_linux.go b/pkg/network/ephemeral_linux.go index d23c2e8a8ab49..5da974b0a0fff 100644 --- a/pkg/network/ephemeral_linux.go +++ b/pkg/network/ephemeral_linux.go @@ -10,8 +10,8 @@ import ( "sync" "time" - "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/network/config/sysctl" + "github.com/DataDog/datadog-agent/pkg/process/util" ) var ( @@ -25,23 +25,18 @@ var ( // IsPortInEphemeralRange returns whether the port is ephemeral based on the OS-specific configuration. func IsPortInEphemeralRange(p uint16) EphemeralPortType { initEphemeralIntPair.Do(func() { - procfsPath := "/proc" - if config.Datadog.IsSet("procfs_path") { - procfsPath = config.Datadog.GetString("procfs_path") + ephemeralIntPair = sysctl.NewIntPair(util.GetProcRoot(), "net/ipv4/ip_local_port_range", time.Hour) + low, hi, err := ephemeralIntPair.Get() + if err == nil { + if low > 0 && low <= math.MaxUint16 { + ephemeralLow = uint16(low) + } + if hi > 0 && hi <= math.MaxUint16 { + ephemeralHigh = uint16(hi) + } } - ephemeralIntPair = sysctl.NewIntPair(procfsPath, "net/ipv4/ip_local_port_range", time.Hour) }) - - low, hi, err := ephemeralIntPair.Get() - if err == nil { - if low > 0 && low <= math.MaxUint16 { - ephemeralLow = uint16(low) - } - if hi > 0 && hi <= math.MaxUint16 { - ephemeralHigh = uint16(hi) - } - } - if err != nil || ephemeralLow == 0 || ephemeralHigh == 0 { + if ephemeralLow == 0 || ephemeralHigh == 0 { return EphemeralUnknown } if p >= ephemeralLow && p <= ephemeralHigh { diff --git a/pkg/network/event_common.go b/pkg/network/event_common.go index 9ababb3eb6bf2..c8230cdd22423 100644 --- a/pkg/network/event_common.go +++ b/pkg/network/event_common.go @@ -18,6 +18,13 @@ import ( "github.com/DataDog/datadog-agent/pkg/process/util" ) +const ( + // 100Gbps * 30s = 375GB + maxByteCountChange uint64 = 375 << 30 + // use typical small MTU size, 1300, to get max packet count + maxPacketCountChange uint64 = maxByteCountChange / 1300 +) + // ConnectionType will be either TCP or UDP type ConnectionType uint8 @@ -237,11 +244,15 @@ type ConnectionStats struct { Family ConnectionFamily Direction ConnectionDirection SPortIsEphemeral EphemeralPortType - Tags uint64 + StaticTags uint64 + Tags map[string]struct{} IntraHost bool IsAssured bool - Protocol ProtocolType + + ContainerID *string + + Protocol ProtocolType } // Via has info about the routing decision for a flow @@ -274,8 +285,9 @@ func (c ConnectionStats) IsExpired(now uint64, timeout uint64) bool { // ByteKey returns a unique key for this connection represented as a byte slice // It's as following: // -// 4B 2B 2B .5B .5B 4/16B 4/16B = 17/41B -// 32b 16b 16b 4b 4b 32/128b 32/128b +// 4B 2B 2B .5B .5B 4/16B 4/16B = 17/41B +// 32b 16b 16b 4b 4b 32/128b 32/128b +// // | PID | SPORT | DPORT | Family | Type | SrcAddr | DestAddr func (c ConnectionStats) ByteKey(buf []byte) []byte { return generateConnectionKey(c, buf, false) @@ -431,38 +443,6 @@ func generateConnectionKey(c ConnectionStats, buf []byte, useNAT bool) []byte { return buf[:n] } -// Sub returns s-other -func (s StatCounters) Sub(other StatCounters) (sc StatCounters, underflow bool) { - if s.RecvBytes < other.RecvBytes || - s.RecvPackets < other.RecvPackets || - (s.Retransmits < other.Retransmits && s.Retransmits > 0) || - s.SentBytes < other.SentBytes || - s.SentPackets < other.SentPackets || - (s.TCPClosed < other.TCPClosed && s.TCPClosed > 0) || - (s.TCPEstablished < other.TCPEstablished && s.TCPEstablished > 0) { - return sc, true - } - - sc = StatCounters{ - RecvBytes: s.RecvBytes - other.RecvBytes, - RecvPackets: s.RecvPackets - other.RecvPackets, - SentBytes: s.SentBytes - other.SentBytes, - SentPackets: s.SentPackets - other.SentPackets, - } - - if s.Retransmits > 0 { - sc.Retransmits = s.Retransmits - other.Retransmits - } - if s.TCPEstablished > 0 { - sc.TCPEstablished = s.TCPEstablished - other.TCPEstablished - } - if s.TCPClosed > 0 { - sc.TCPClosed = s.TCPClosed - other.TCPClosed - } - - return sc, false -} - // Add returns s+other func (s StatCounters) Add(other StatCounters) StatCounters { return StatCounters{ @@ -504,3 +484,13 @@ func (s StatCounters) Max(other StatCounters) StatCounters { TCPEstablished: maxUint32(s.TCPEstablished, other.TCPEstablished), } } + +// isUnderflow checks if a metric has "underflowed", i.e. +// the most recent value is less than what was seen +// previously. We distinguish between an "underflow" and +// an integer overflow if the change is greater than +// some preset max value; if the change is greater, then +// its an underflow +func isUnderflow(previous, current, maxChange uint64) bool { + return current < previous && (current-previous) > maxChange +} diff --git a/pkg/network/event_common_linux.go b/pkg/network/event_common_linux.go new file mode 100644 index 0000000000000..ade5038e95156 --- /dev/null +++ b/pkg/network/event_common_linux.go @@ -0,0 +1,53 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux +// +build linux + +package network + +// Sub returns s-other. +// +// This implementation is different from the implementation on +// other platforms as packet counts are actually sampled from the kernel +// as uint32's, but stored in StatCounters as uint64's. To detect overflows +// in these counts correctly, a simple subtraction will not do, and they +// need to be treated differently (see below) +func (s StatCounters) Sub(other StatCounters) (sc StatCounters, underflow bool) { + if s.Retransmits < other.Retransmits && s.Retransmits > 0 || + (s.TCPClosed < other.TCPClosed && s.TCPClosed > 0) || + (s.TCPEstablished < other.TCPEstablished && s.TCPEstablished > 0) || + isUnderflow(other.RecvBytes, s.RecvBytes, maxByteCountChange) || + isUnderflow(other.SentBytes, s.SentBytes, maxByteCountChange) { + return sc, true + } + + sc = StatCounters{ + RecvBytes: s.RecvBytes - other.RecvBytes, + SentBytes: s.SentBytes - other.SentBytes, + } + + // on linux, sent and recv packets are collected + // as uint32's, but StatCounters stores them as uint64, + // so we need to treat them as uint32 to detect underflows + sc.RecvPackets = uint64(uint32(s.RecvPackets) - uint32(other.RecvPackets)) + sc.SentPackets = uint64(uint32(s.SentPackets) - uint32(other.SentPackets)) + if (s.RecvPackets < other.RecvPackets && sc.RecvPackets > maxPacketCountChange) || + (s.SentPackets < other.SentPackets && sc.SentPackets > maxPacketCountChange) { + return StatCounters{}, true + } + + if s.Retransmits > 0 { + sc.Retransmits = s.Retransmits - other.Retransmits + } + if s.TCPEstablished > 0 { + sc.TCPEstablished = s.TCPEstablished - other.TCPEstablished + } + if s.TCPClosed > 0 { + sc.TCPClosed = s.TCPClosed - other.TCPClosed + } + + return sc, false +} diff --git a/pkg/network/event_common_notlinux.go b/pkg/network/event_common_notlinux.go new file mode 100644 index 0000000000000..0f66612c53976 --- /dev/null +++ b/pkg/network/event_common_notlinux.go @@ -0,0 +1,44 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !linux +// +build !linux + +package network + +// Sub returns s-other +// +// Note: there is separate implementation for this function on Linux; +// see event_common_linux.go in this folder +func (s StatCounters) Sub(other StatCounters) (sc StatCounters, underflow bool) { + if (s.Retransmits < other.Retransmits && s.Retransmits > 0) || + (s.TCPClosed < other.TCPClosed && s.TCPClosed > 0) || + (s.TCPEstablished < other.TCPEstablished && s.TCPEstablished > 0) || + isUnderflow(other.RecvBytes, s.RecvBytes, maxByteCountChange) || + isUnderflow(other.SentBytes, s.SentBytes, maxByteCountChange) || + isUnderflow(other.RecvPackets, s.RecvPackets, maxPacketCountChange) || + isUnderflow(other.SentPackets, s.SentPackets, maxPacketCountChange) { + return sc, true + } + + sc = StatCounters{ + RecvBytes: s.RecvBytes - other.RecvBytes, + RecvPackets: s.RecvPackets - other.RecvPackets, + SentBytes: s.SentBytes - other.SentBytes, + SentPackets: s.SentPackets - other.SentPackets, + } + + if s.Retransmits > 0 { + sc.Retransmits = s.Retransmits - other.Retransmits + } + if s.TCPEstablished > 0 { + sc.TCPEstablished = s.TCPEstablished - other.TCPEstablished + } + if s.TCPClosed > 0 { + sc.TCPClosed = s.TCPClosed - other.TCPClosed + } + + return sc, false +} diff --git a/pkg/network/event_usm_common.go b/pkg/network/event_usm_common.go index 4f13fe996e40d..5667112797e70 100644 --- a/pkg/network/event_usm_common.go +++ b/pkg/network/event_usm_common.go @@ -5,15 +5,42 @@ package network +import ( + model "github.com/DataDog/agent-payload/v5/process" +) + type ProtocolType uint16 const ( - ProtocolUnclassified ProtocolType = iota - ProtocolUnknown - ProtocolHTTP - ProtocolHTTP2 - ProtocolTLS - ProtocolAMQP = 8 - ProtocolRedis = 9 - MaxProtocols = 10 + ProtocolUnclassified = ProtocolType(model.ProtocolType_protocolUnclassified) + ProtocolUnknown = ProtocolType(model.ProtocolType_protocolUnknown) + ProtocolHTTP = ProtocolType(model.ProtocolType_protocolHTTP) + ProtocolHTTP2 = ProtocolType(model.ProtocolType_protocolHTTP2) + ProtocolTLS = ProtocolType(model.ProtocolType_protocolTLS) + ProtocolKafka = ProtocolType(model.ProtocolType_protocolKafka) + ProtocolMongo = ProtocolType(model.ProtocolType_protocolMongo) + ProtocolPostgres = ProtocolType(model.ProtocolType_protocolPostgres) + ProtocolAMQP = ProtocolType(model.ProtocolType_protocolAMQP) + ProtocolRedis = ProtocolType(model.ProtocolType_protocolRedis) ) + +var ( + supportedProtocols = map[ProtocolType]struct{}{ + ProtocolUnclassified: {}, + ProtocolUnknown: {}, + ProtocolHTTP: {}, + ProtocolHTTP2: {}, + ProtocolTLS: {}, + ProtocolKafka: {}, + ProtocolMongo: {}, + ProtocolPostgres: {}, + ProtocolAMQP: {}, + ProtocolRedis: {}, + } +) + +// IsValidProtocolValue checks if a given value is a valid protocol. +func IsValidProtocolValue(val uint8) bool { + _, ok := supportedProtocols[ProtocolType(val)] + return ok +} diff --git a/pkg/network/event_windows.go b/pkg/network/event_windows.go index 7fd69636aac61..8465d368be5ca 100644 --- a/pkg/network/event_windows.go +++ b/pkg/network/event_windows.go @@ -46,8 +46,15 @@ func isFlowClosed(flags uint32) bool { return (flags & driver.FlowClosedMask) == driver.FlowClosedMask } -func isTCPFlowEstablished(flags uint32) bool { - return (flags & driver.TCPFlowEstablishedMask) == driver.TCPFlowEstablishedMask +func isTCPFlowEstablished(flow *driver.PerFlowData) bool { + //return (flags & driver.TCPFlowEstablishedMask) == driver.TCPFlowEstablishedMask + tcpdata := flow.TCPFlow() + if nil != tcpdata { + if tcpdata.ConnectionStatus == driver.TcpStatusEstablished { + return true + } + } + return false } func convertV4Addr(addr [16]uint8) util.Address { @@ -116,7 +123,7 @@ func FlowToConnStat(cs *ConnectionStats, flow *driver.PerFlowData, enableMonoton cs.RTTVar = uint32(tf.RttVariance) } - if isTCPFlowEstablished(flow.Flags) { + if isTCPFlowEstablished(flow) { cs.Monotonic.TCPEstablished = 1 } if isFlowClosed(flow.Flags) { diff --git a/pkg/network/events/monitor.go b/pkg/network/events/monitor.go new file mode 100644 index 0000000000000..e719b36b0f84b --- /dev/null +++ b/pkg/network/events/monitor.go @@ -0,0 +1,115 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux +// +build linux + +package events + +import ( + "sync" + + "go.uber.org/atomic" + + "github.com/DataDog/datadog-agent/pkg/security/events" + sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" + "github.com/DataDog/datadog-agent/pkg/security/secl/rules" +) + +var theMonitor atomic.Value +var once sync.Once +var initErr error + +// Init initializes the events package +func Init() error { + once.Do(func() { + var m *eventMonitor + m, initErr = newEventMonitor() + if initErr == nil { + theMonitor.Store(m) + } + }) + + return initErr +} + +// HandlerFunc is the prototype for an event handler callback for process events +type HandlerFunc func(*model.ProcessCacheEntry) + +// RegisterHandler registers a handler function for getting process events +func RegisterHandler(handler HandlerFunc) { + m := theMonitor.Load().(*eventMonitor) + m.RegisterHandler(handler) +} + +type eventHandlerWrapper struct{} + +func (h *eventHandlerWrapper) HandleEvent(ev *model.Event) { + m := theMonitor.Load() + if m != nil { + m.(*eventMonitor).HandleEvent(ev) + } +} + +func (h *eventHandlerWrapper) HandleCustomEvent(rule *rules.Rule, event *events.CustomEvent) { + m := theMonitor.Load() + if m != nil { + m.(*eventMonitor).HandleCustomEvent(rule, event) + } +} + +var _eventHandlerWrapper = &eventHandlerWrapper{} + +// Handler returns an event handler to handle events from the runtime security module +func Handler() sprobe.EventHandler { + return _eventHandlerWrapper +} + +type eventMonitor struct { + sync.Mutex + + handlers []HandlerFunc +} + +func newEventMonitor() (*eventMonitor, error) { + return &eventMonitor{}, nil +} + +func (e *eventMonitor) HandleEvent(ev *model.Event) { + if ev.Type == uint32(model.ExitEventType) { + return + } + + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.ProcessContext.Process) + + entry, ok := ev.ResolveProcessCacheEntry() + if !ok { + return + } + + e.Lock() + defer e.Unlock() + + for _, h := range e.handlers { + h(entry) + } + +} + +func (e *eventMonitor) HandleCustomEvent(rule *rules.Rule, event *events.CustomEvent) { +} + +func (e *eventMonitor) RegisterHandler(handler HandlerFunc) { + if handler == nil { + return + } + + e.Lock() + defer e.Unlock() + + e.handlers = append(e.handlers, handler) + +} diff --git a/pkg/network/go/asmscan/scan.go b/pkg/network/go/asmscan/scan.go index ff302041e555f..0a858d07895fa 100644 --- a/pkg/network/go/asmscan/scan.go +++ b/pkg/network/go/asmscan/scan.go @@ -31,10 +31,10 @@ import ( // for the purpose of then attaching eBPF uprobes to these locations. // This is needed because uretprobes don't work well with Go. // See the following links for more info: -// - https://github.com/iovisor/bcc/issues/1320 -// - https://github.com/iovisor/bcc/issues/1320#issuecomment-407927542 -// (which describes how this approach works as a workaround) -// - https://github.com/golang/go/issues/22008 +// - https://github.com/iovisor/bcc/issues/1320 +// - https://github.com/iovisor/bcc/issues/1320#issuecomment-407927542 +// (which describes how this approach works as a workaround) +// - https://github.com/golang/go/issues/22008 func ScanFunction(textSection *elf.Section, sym elf.Symbol, functionOffset uint64, scanInstructions func(data []byte) ([]uint64, error)) ([]uint64, error) { // Determine the offset in the section that the function starts at lowPC := sym.Value diff --git a/pkg/network/go/bininspect/symbols.go b/pkg/network/go/bininspect/symbols.go index b15a6abaa356a..1ffb260e19006 100644 --- a/pkg/network/go/bininspect/symbols.go +++ b/pkg/network/go/bininspect/symbols.go @@ -184,7 +184,7 @@ func getSymbols(f *elf.File, typ elf.SectionType, wanted map[string]struct{}) ([ func GetAllSymbolsByName(elfFile *elf.File, symbolSet common.StringSet) (map[string]elf.Symbol, error) { regularSymbols, regularSymbolsErr := getSymbols(elfFile, elf.SHT_SYMTAB, symbolSet) if regularSymbolsErr != nil { - log.Debugf("Failed getting regular symbols of elf file: %s", regularSymbolsErr) + log.Tracef("Failed getting regular symbols of elf file: %s", regularSymbolsErr) } var dynamicSymbols []elf.Symbol @@ -192,7 +192,7 @@ func GetAllSymbolsByName(elfFile *elf.File, symbolSet common.StringSet) (map[str if len(regularSymbols) != len(symbolSet) { dynamicSymbols, dynamicSymbolsErr = getSymbols(elfFile, elf.SHT_DYNSYM, symbolSet) if dynamicSymbolsErr != nil { - log.Debugf("Failed getting dynamic symbols of elf file: %s", dynamicSymbolsErr) + log.Tracef("Failed getting dynamic symbols of elf file: %s", dynamicSymbolsErr) } } diff --git a/pkg/network/go/bininspect/types.go b/pkg/network/go/bininspect/types.go index 0362b04e323f9..8c166446b3f0c 100644 --- a/pkg/network/go/bininspect/types.go +++ b/pkg/network/go/bininspect/types.go @@ -172,9 +172,10 @@ type FunctionMetadata struct { // has been successful in getting the expected values from eBPF. // // TODO: look into cases where a middle piece of a parameter has been eliminated -// (such as the length of a slice), -// and make sure result is expected/handled well. -// Then, document such cases. +// +// (such as the length of a slice), +// and make sure result is expected/handled well. +// Then, document such cases. type ParameterMetadata struct { // Total size in bytes. TotalSize int64 diff --git a/pkg/network/go/lutgen/function.go b/pkg/network/go/lutgen/function.go index fe658c3e63ef7..6d5a368713070 100644 --- a/pkg/network/go/lutgen/function.go +++ b/pkg/network/go/lutgen/function.go @@ -30,23 +30,23 @@ type LookupFunction struct { // (map of architecture,version pairs to inspection results) // to the template arguments, ready to render the lookup table implementation. // To do this, it: -// - converts each result to the specific "value" for the function -// by running the "ExtractValue" function, if given. -// If used, this lets a single run of the matrix runner -// generate multiple lookup functions, each working with different values -// that get derived from the inspection result values. -// - bin the results by architecture, -// since the lookup tables are generated with a top-level "switch...case" -// on the architectures. -// - for each architecture, sort the values by the Go version -// and drop any non-unique values. -// Then, reverse the list of Go version, value pairs -// to generate the list of cases used to render the lookup table. -// This works because the lookup table generates a list of -// "if $inputVersion > $caseVersion { return $caseValue }" statements for each case, -// so by reverse-sorting the list of cases, the appropriate case will always be taken. -// This has the added benefit of gracefully handling unknown/newer Go versions -// than the lookup table was generated with; they will take the first branch. +// - converts each result to the specific "value" for the function +// by running the "ExtractValue" function, if given. +// If used, this lets a single run of the matrix runner +// generate multiple lookup functions, each working with different values +// that get derived from the inspection result values. +// - bin the results by architecture, +// since the lookup tables are generated with a top-level "switch...case" +// on the architectures. +// - for each architecture, sort the values by the Go version +// and drop any non-unique values. +// Then, reverse the list of Go version, value pairs +// to generate the list of cases used to render the lookup table. +// This works because the lookup table generates a list of +// "if $inputVersion > $caseVersion { return $caseValue }" statements for each case, +// so by reverse-sorting the list of cases, the appropriate case will always be taken. +// This has the added benefit of gracefully handling unknown/newer Go versions +// than the lookup table was generated with; they will take the first branch. func (f *LookupFunction) argsFromResultTable(resultTable map[architectureVersion]interface{}) lookupFunctionTemplateArgs { valueTable := f.convertResultToValueTable(resultTable) architectureValueSets := f.binArchitectures(valueTable) diff --git a/pkg/network/java/agent-usm.jar b/pkg/network/java/agent-usm.jar new file mode 100644 index 0000000000000..f632d42f4073c --- /dev/null +++ b/pkg/network/java/agent-usm.jar @@ -0,0 +1 @@ +fake agent-usm.jar will be overwritten in next PR diff --git a/pkg/network/java/hotspot.go b/pkg/network/java/hotspot.go new file mode 100644 index 0000000000000..8c22c012f3033 --- /dev/null +++ b/pkg/network/java/hotspot.go @@ -0,0 +1,393 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux +// +build linux + +package java + +import ( + "bufio" + "bytes" + "errors" + "fmt" + "io" + "io/fs" + "net" + "os" + "path/filepath" + "runtime" + "strconv" + "strings" + "syscall" + "time" + + "github.com/DataDog/datadog-agent/pkg/process/util" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +// Hotspot java has a specific protocol, described here: +// +// o touch .attach_pid +// o kill -SIGQUIT +// o java process check if .attach_pid exit +// o then create an unix socket .java_pid +// o we can write command through the unix socket +// refers to the namespaced pid of the process. +// +// Public documentation https://openjdk.org/groups/hotspot/docs/Serviceability.html#battach +type Hotspot struct { + pid int + nsPid int + root string + cwd string // viewed by the process + conn *net.UnixConn + + socketPath string + uid int + gid int +} + +// NewHotspot create an object to connect to a JVM hotspot +// pid (host pid) and nsPid (within the namespace pid) +// +// NSPid field was introduced in kernel >= 4.1 +// So we can't support container on Centos 7 (kernel 3.10) +func NewHotspot(pid int, nsPid int) (*Hotspot, error) { + h := &Hotspot{ + pid: pid, + nsPid: nsPid, + } + // Centos 7 workaround to support host environment + if h.nsPid == 0 { + h.nsPid = pid + } + + var err error + procPath := fmt.Sprintf("%s/%d", util.HostProc(), pid) + h.root = procPath + "/root" + h.cwd, err = os.Readlink(procPath + "/cwd") + if err != nil { + return nil, err + } + h.socketPath = fmt.Sprintf("%s/.java_pid%d", h.tmpPath(), h.nsPid) + return h, nil +} + +func (h *Hotspot) tmpPath() string { + return fmt.Sprintf("%s/tmp", h.root) +} + +func (h *Hotspot) isSocketExists() bool { + mode, err := os.Stat(h.socketPath) + return err == nil && (mode.Mode()&fs.ModeSocket > 0) +} + +// getPathOwner return the uid/gid pointed by the path +func getPathOwner(path string) (uint32, uint32, error) { + mode, err := os.Stat(path) + if err != nil { + return 0, 0, err + } + stat, ok := mode.Sys().(*syscall.Stat_t) + if stat == nil || !ok { + return 0, 0, fmt.Errorf("stat cast issue on path %s %T", path, mode.Sys()) + } + return stat.Uid, stat.Gid, nil +} + +// copyAgent copy the agent-usm.jar to a directory where the running java process can load it. +// the agent-usm.jar file must be readable from java process point of view +// copyAgent return : +// +// o dstPath is path to the copy of agent-usm.jar (from container perspective), this would be pass to the hotspot command +// o cleanup must be called to remove the created file +func (h *Hotspot) copyAgent(agent string, uid int, gid int) (dstPath string, cleanup func(), err error) { + dstPath = h.cwd + "/" + filepath.Base(agent) + // path from the host point of view pointing to the process root namespace (/proc/pid/root/usr/...) + nsDstPath := h.root + dstPath + if dst, err := os.Stat(nsDstPath); err == nil { + // if the destination file already exist + // check if it's not the source agent file + if src, err := os.Stat(agent); err == nil { + s, oks := src.Sys().(*syscall.Stat_t) + d, okd := dst.Sys().(*syscall.Stat_t) + if s == nil || d == nil || !oks || !okd { + return "", nil, fmt.Errorf("stat cast issue on path %s %T %s %T", agent, src.Sys(), nsDstPath, dst.Sys()) + } + if s.Dev == d.Dev && s.Ino == d.Ino { + return "", func() {}, nil + } + } + } + + srcAgent, err := os.Open(agent) + if err != nil { + return "", nil, err + } + defer srcAgent.Close() + + dst, err := os.OpenFile(nsDstPath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, os.FileMode(0444)) + if err != nil { + return "", nil, err + } + _, err = io.Copy(dst, srcAgent) + dst.Close() // we are closing the file here as Chown will be call just after on the same path + if err != nil { + return "", nil, err + } + if err := syscall.Chown(nsDstPath, uid, gid); err != nil { + os.Remove(nsDstPath) + return "", nil, err + } + + return dstPath, func() { + os.Remove(nsDstPath) + }, nil +} + +func (h *Hotspot) dialunix(raddr *net.UnixAddr, withCredential bool) (*net.UnixConn, error) { + // Hotspot reject connection credentials by checking uid/gid of the client calling connect() + // via getsockopt(SOL_SOCKET/SO_PEERCRED). + // but older hotspot JRE (1.8.0) accept only the same uid/gid and reject root + // + // For go, during the connect() syscall we don't want to fork() and stay on the same pthread + // to avoid side effect (pollution) of set effective uid/gid. + if withCredential { + runtime.LockOSThread() + syscall.ForkLock.Lock() + origeuid := syscall.Geteuid() + origegid := syscall.Getegid() + defer func() { + _ = syscall.Seteuid(origeuid) + _ = syscall.Setegid(origegid) + syscall.ForkLock.Unlock() + runtime.UnlockOSThread() + }() + + if err := syscall.Setegid(h.gid); err != nil { + return nil, err + } + if err := syscall.Seteuid(h.uid); err != nil { + return nil, err + } + } + return net.DialUnix("unix", nil, raddr) +} + +// connect to the previously created hotspot unix socket +// return close function must be call when finished +func (h *Hotspot) connect(withCredential bool) (close func(), err error) { + h.conn = nil + addr, err := net.ResolveUnixAddr("unix", h.socketPath) + if err != nil { + return nil, err + } + conn, err := h.dialunix(addr, withCredential) + if err != nil { + return nil, err + } + + if err := conn.SetDeadline(time.Now().Add(3 * time.Second)); err != nil { + conn.Close() + return nil, err + } + h.conn = conn + return func() { + if h.conn != nil { + h.conn.Close() + } + }, nil +} + +// parseResponse parse the response from the hotspot command +// JVM will return a command error code and some command have a specific return code +// the response will contain the full message +func (h *Hotspot) parseResponse(buf []byte) (returnCommand int, returnCode int, response string, err error) { + line := 0 + scanner := bufio.NewScanner(bytes.NewReader(buf)) + for scanner.Scan() { + s := string(scanner.Bytes()) + switch line { + case 0: + returnCommand, err = strconv.Atoi(s) + if err != nil { + return 0, 0, "", fmt.Errorf("parsing hotspot response failed %d %s", line, s) + } + case 1: + if strings.HasPrefix(s, "return code: ") { + returnCode, err = strconv.Atoi(s[len("return code: "):]) + if err != nil { + return 0, 0, "", fmt.Errorf("parsing hotspot response failed %d %s", line, s) + } + } + default: + break + } + line++ + } + return returnCommand, returnCode, string(buf), nil +} + +// command: tailingNull is necessary here to flush command +// +// otherwise the JVM is blocked and waiting for more bytes +// This applies only for some command like : 'load agent.so true' +func (h *Hotspot) command(cmd string, tailingNull bool) error { + hasRetried := false +retry: + if err := h.commandWriteRead(cmd, tailingNull); err != nil { + // if we receive EPIPE (write) or ECONNRESET (read) from the kernel may from old hotspot JVM + // let's retry with credentials, see dialunix() for more info + if !hasRetried && (errors.Is(err, syscall.EPIPE) || errors.Is(err, syscall.ECONNRESET)) { + log.Debugf("java attach hotspot pid %d/%d old hotspot JVM detected, requires credentials", h.pid, h.nsPid) + hasRetried = true + h.conn.Close() + _, err = h.connect(true) // we don't need to propagate the cleanConn() callback as it's doing the same thing. + if err != nil { + return err + } + goto retry + } + return err + } + return nil +} + +// commandWriteRead: tailingNull is necessary here to flush command +// +// otherwise the JVM is blocked and waiting for more bytes +// This applies only for some command like : 'load agent.so true' +func (h *Hotspot) commandWriteRead(cmd string, tailingNull bool) error { + if _, err := h.conn.Write([]byte{'1', 0}); err != nil { // Protocol version + return err + } + + // We split by space for at most 4 words, since our longest command is "load instrument false " which is 4 words + for _, c := range strings.SplitN(cmd, " ", 4) { + cmd := append([]byte(c), 0) + if _, err := h.conn.Write(cmd); err != nil { + return err + } + } + if tailingNull { + if _, err := h.conn.Write([]byte{0}); err != nil { + return err + } + } + + buf := make([]byte, 8192) + if _, err := h.conn.Read(buf); err != nil { + return err + } + returnCommand, returnCode, responseText, err := h.parseResponse(buf) + if err != nil { + return err + } + + if returnCommand != 0 { + return fmt.Errorf("command sent to hotspot JVM '%s' return %d and return code %d, response text:\n%s\n", cmd, returnCommand, returnCode, responseText) + } + return nil +} + +// attachJVMProtocol use this (short) protocol : +// +// o create a file .attach_pid%d +// o send a SIGQUIT signal +// o wait for socket file to be created by the java process +func (h *Hotspot) attachJVMProtocol(uid int, gid int) error { + attachPIDPath := func(root string) string { + return fmt.Sprintf("%s/.attach_pid%d", root, h.nsPid) + } + + attachPath := attachPIDPath(h.root + h.cwd) + hook, err := os.OpenFile(attachPath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0660) + hookUID := uint32(0) + var ownerErr error + if err == nil { + hook.Close() + // we don't check Chown() return error here as it can fail on some filesystems (read below) + _ = syscall.Chown(attachPath, uid, gid) + hookUID, _, ownerErr = getPathOwner(attachPath) + } + if err != nil || ownerErr != nil || hookUID != uint32(uid) { + // We are trying an alternative attach path (in /tmp) + // o if we can't create one in the cwd of the java process (probably read only filesystem) + // o the filesystem changed the owner (id mapped mounts, like nfs force_uid, ...) + + if ownerErr == nil { + os.Remove(attachPath) + } + + attachPath = attachPIDPath(h.tmpPath()) + hook, err = os.OpenFile(attachPath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0660) + if err != nil { + return err + } + hook.Close() + } + defer os.Remove(attachPath) + + process, _ := os.FindProcess(h.pid) // os.FindProcess() will never fail on linux + if err := process.Signal(syscall.SIGQUIT); err != nil { + return fmt.Errorf("process %d/%d SIGQUIT failed : %s", h.pid, h.nsPid, err) + } + + end := time.Now().Add(6 * time.Second) + for end.After(time.Now()) { + time.Sleep(200 * time.Millisecond) + if h.isSocketExists() { + return nil + } + } + return fmt.Errorf("the java process %d/%d didn't create a socket file", h.pid, h.nsPid) +} + +// Attach an agent to the hotspot, uid/gid must be accessible read-only by the targeted hotspot +func (h *Hotspot) Attach(agentPath string, args string, uid int, gid int) error { + if !h.isSocketExists() { + // ask JVM to create a socket to communicate + if err := h.attachJVMProtocol(uid, gid); err != nil { + return err + } + } + + // copy the agent in the cwd of the process and change his owner/group + dstAgentPath, agentCleanup, err := h.copyAgent(agentPath, uid, gid) + if err != nil { + return err + } + defer agentCleanup() + + h.uid = uid + h.gid = gid + // connect and ask to load the agent .jar or .so + cleanConn, err := h.connect(false) + if err != nil { + return err + } + defer cleanConn() + + var loadCommand string + isJar := strings.HasSuffix(agentPath, ".jar") + if isJar { // agent is a .jar + loadCommand = fmt.Sprintf("load instrument false %s", dstAgentPath) + if args != "" { + loadCommand += "=" + args + } + } else { + loadCommand = fmt.Sprintf("load %s true", dstAgentPath) + if args != "" { + loadCommand += " " + args + } + } + + if err := h.command(loadCommand, !isJar); err != nil { + log.Debugf("java attach hotspot pid %d/%d command '%s' failed isJar=%v : %s", h.pid, h.nsPid, loadCommand, isJar, err) + return err + } + return nil +} diff --git a/pkg/network/java/jattach.go b/pkg/network/java/jattach.go new file mode 100644 index 0000000000000..2c18dece8bbcb --- /dev/null +++ b/pkg/network/java/jattach.go @@ -0,0 +1,70 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux +// +build linux + +package java + +import ( + "time" + + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/gopsutil/process" +) + +// MINIMUM_JAVA_AGE_MS is the minimum age of a java process to be able to attach it +// else the java process would crash if he receive the SIGQUIT too early ("Signal Dispatch" thread is not ready) +// In other words that the only reliable safety thing we could check to assume a java process started (System.main execution) +// Looking a proc/pid/status.Thread numbers is not reliable as it depend on numbers of cores and JRE version/implementation +// +// The issue is describe here https://bugs.openjdk.org/browse/JDK-8186709 see Kevin Walls comment +// if java received a SIGQUIT and the JVM is not started yet, java will print 'quit (core dumped)' +// SIGQUIT is sent as part of the hotspot protocol handshake +const MINIMUM_JAVA_AGE_TO_ATTACH_MS = 10000 + +func injectAttach(pid int, agent string, args string, nsPid int, fsUid int, fsGid int) error { + h, err := NewHotspot(pid, nsPid) + if err != nil { + return err + } + + return h.Attach(agent, args, fsUid, fsGid) +} + +func InjectAgent(pid int, agent string, args string) error { + proc, err := process.NewProcess(int32(pid)) + if err != nil { + return err + } + uids, err := proc.Uids() + if err != nil { + return err + } + gids, err := proc.Gids() + if err != nil { + return err + } + // we return the process uid and gid from the filesystem point of view + // as attach file need to be created with uid/gid accessible from the java hotspot + // index 3 here point to the 4th columns of /proc/pid/status Uid/Gid => filesystem uid/gid + fsUID, fsGID := int(uids[3]), int(gids[3]) + + ctime, _ := proc.CreateTime() + age_ms := time.Now().UnixMilli() - ctime + if age_ms < MINIMUM_JAVA_AGE_TO_ATTACH_MS { + log.Debug("java attach pid %d will be delayed by %s ms", pid, MINIMUM_JAVA_AGE_TO_ATTACH_MS-age_ms) + // wait and inject the agent asynchronously + go func() { + time.Sleep(time.Duration(MINIMUM_JAVA_AGE_TO_ATTACH_MS-age_ms) * time.Millisecond) + if err := injectAttach(pid, agent, args, int(proc.NsPid), fsUID, fsGID); err != nil { + log.Errorf("java attach pid %d failed %s", pid, err) + } + }() + return nil + } + + return injectAttach(pid, agent, args, int(proc.NsPid), fsUID, fsGID) +} diff --git a/pkg/network/java/jattach_test.go b/pkg/network/java/jattach_test.go new file mode 100644 index 0000000000000..020b3153fd646 --- /dev/null +++ b/pkg/network/java/jattach_test.go @@ -0,0 +1,132 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux +// +build linux + +package java + +import ( + "io/ioutil" + "os" + "strings" + "syscall" + "testing" + "time" + + "github.com/DataDog/datadog-agent/pkg/network/testutil" + "github.com/DataDog/datadog-agent/pkg/process/util" + "github.com/DataDog/datadog-agent/pkg/util/kernel" + "github.com/DataDog/gopsutil/process" + "github.com/stretchr/testify/require" +) + +func findJustWait(t *testing.T) (retpid int) { + fn := func(pid int) error { + proc, err := process.NewProcess(int32(pid)) + if err != nil { + return nil // ignore process that didn't exist anymore + } + + name, err := proc.Name() + if err == nil && name == "java" { + cmdline, err := proc.Cmdline() + if err == nil && strings.Contains(cmdline, "JustWait") { + retpid = pid + } + } + return nil + } + + err := util.WithAllProcs(util.HostProc(), fn) + if err != nil { + t.Fatalf("%v\n", err) + } + return retpid +} + +func testInject(t *testing.T, prefix string) { + go func() { + o, err := testutil.RunCommand(prefix + "java -cp testdata JustWait") + if err != nil { + t.Logf("%v\n", err) + } + t.Log(o) + }() + time.Sleep(time.Second) // give a chance to spawn java + + pid := findJustWait(t) + require.NotEqual(t, pid, 0, "Can't find java JustWait process") + t.Log(pid) + + defer func() { + process, _ := os.FindProcess(pid) + process.Signal(syscall.SIGKILL) + time.Sleep(200 * time.Millisecond) // give a chance to the process to give his report/output + }() + + tfile, err := ioutil.TempFile("", "TestAgentLoaded.agentmain.*") + require.NoError(t, err) + tfile.Close() + os.Remove(tfile.Name()) + defer os.Remove(tfile.Name()) + + // equivalent to jattach load instrument false testdata/TestAgentLoaded.jar= + err = InjectAgent(pid, "testdata/TestAgentLoaded.jar", tfile.Name()) + require.NoError(t, err) + + time.Sleep((MINIMUM_JAVA_AGE_TO_ATTACH_MS + 200) * time.Millisecond) // wait java process to be old enough to be injected + + // check if agent was loaded + _, err = os.Stat(tfile.Name()) + require.NoError(t, err) + + t.Log("=== Test Success ===") +} + +// We test injection on a java hotspot running +// +// o on the host +// o in the container, _simulated_ by running java in his own PID namespace +func TestInject(t *testing.T) { + currKernelVersion, err := kernel.HostVersion() + if err != nil { + t.Skip("Can't detect kernel version on this platform") + } + pre410Kernel := currKernelVersion < kernel.VersionCode(4, 1, 0) + if pre410Kernel { + t.Skip("Kernel < 4.1.0 are not supported as /proc/pid/status doesn't report NSpid") + } + + javaVersion, err := testutil.RunCommand("java -version") + if err != nil { + t.Fatal("java is not installed", javaVersion, err) + } + t.Log(javaVersion) + + // flush the caches to slow start java + testutil.RunCommand("sudo sysctl -w vm.drop_caches=3") + t.Run("host", func(t *testing.T) { + testInject(t, "") + }) + if t.Failed() { + t.Fatal("host failed") + } + + p := "unshare -p --fork " + _, err = testutil.RunCommand(p + "id") + if err != nil { + t.Skipf("unshare not supported on this platform %s", err) + } + + // flush the caches to slow start java + testutil.RunCommand("sudo sysctl -w vm.drop_caches=3") + t.Run("PIDnamespace", func(t *testing.T) { + // running the tagert process in a new PID namespace + // and testing if the test/plaform give enough permission to do that + testInject(t, p) + }) + +} diff --git a/pkg/network/java/testdata/JustWait.class b/pkg/network/java/testdata/JustWait.class new file mode 100644 index 0000000000000..634debaea7b8a Binary files /dev/null and b/pkg/network/java/testdata/JustWait.class differ diff --git a/pkg/network/java/testdata/JustWait.java b/pkg/network/java/testdata/JustWait.java new file mode 100644 index 0000000000000..0d51eff1ef782 --- /dev/null +++ b/pkg/network/java/testdata/JustWait.java @@ -0,0 +1,19 @@ +// Need to be compiled with java7 + +import java.lang.Thread; +import java.lang.management.ManagementFactory; + +class JustWait { + public static void main(String[] args) { + String pid = ManagementFactory.getRuntimeMXBean().getName(); + System.out.println("JustWait pid "+ pid); + try { + for(;;) { + Thread.sleep(1000); + } + } catch (Exception ex) { + System.out.println(ex); + } + System.out.println("JustWait pid "+pid+" ended"); + } +} diff --git a/pkg/network/java/testdata/META-INF/MANIFEST.MF b/pkg/network/java/testdata/META-INF/MANIFEST.MF new file mode 100644 index 0000000000000..100c917d77a73 --- /dev/null +++ b/pkg/network/java/testdata/META-INF/MANIFEST.MF @@ -0,0 +1,6 @@ +Manifest-Version: 1.0 +Can-Redefine-Classes: true +Can-Retransform-Classes: true +Agent-Class: TestAgentLoaded +Premain-Class: TestAgentLoaded +Created-By: 1.2.3.4 (Private Build) diff --git a/pkg/network/java/testdata/TestAgentLoaded.class b/pkg/network/java/testdata/TestAgentLoaded.class new file mode 100644 index 0000000000000..2188201143a2d Binary files /dev/null and b/pkg/network/java/testdata/TestAgentLoaded.class differ diff --git a/pkg/network/java/testdata/TestAgentLoaded.jar b/pkg/network/java/testdata/TestAgentLoaded.jar new file mode 100644 index 0000000000000..0178638df6535 Binary files /dev/null and b/pkg/network/java/testdata/TestAgentLoaded.jar differ diff --git a/pkg/network/java/testdata/TestAgentLoaded.java b/pkg/network/java/testdata/TestAgentLoaded.java new file mode 100644 index 0000000000000..10293c7a6850b --- /dev/null +++ b/pkg/network/java/testdata/TestAgentLoaded.java @@ -0,0 +1,22 @@ +/* +Need to be compiled with java7 + +javac TestAgentLoaded.java +jar cvmf META-INF/MANIFEST.MF TestAgentLoaded.jar TestAgentLoaded.class + */ + +import java.lang.instrument.Instrumentation; +import java.io.FileOutputStream; + +public class TestAgentLoaded { + + public static void agentmain(String agentArgs, Instrumentation inst) { + System.out.println("loading TestAgentLoaded.agentmain("+agentArgs+")"); + try { + new FileOutputStream(agentArgs).close(); + } catch (Exception ex) { + System.out.println(ex); + } + } + +} diff --git a/pkg/network/netlink/align.go b/pkg/network/netlink/align.go index 2051c7fe8925e..a43318930e04a 100644 --- a/pkg/network/netlink/align.go +++ b/pkg/network/netlink/align.go @@ -28,12 +28,14 @@ func nlmsgAlign(len int) int { } // #define NLMSG_LENGTH(len) ((len) + NLMSG_HDRLEN) +// //nolint:unused,deadcode func nlmsgLength(len int) int { return len + nlmsgHeaderLen } // #define NLMSG_HDRLEN ((int) NLMSG_ALIGN(sizeof(struct nlmsghdr))) +// //nolint:unused var nlmsgHeaderLen = nlmsgAlign(int(unsafe.Sizeof(netlink.Header{}))) diff --git a/pkg/network/protocols/amqp/client.go b/pkg/network/protocols/amqp/client.go index b69d336bf4488..4f76ee8edcd3f 100644 --- a/pkg/network/protocols/amqp/client.go +++ b/pkg/network/protocols/amqp/client.go @@ -6,18 +6,24 @@ package amqp import ( + "encoding/json" "fmt" - "github.com/streadway/amqp" + "net" + "net/http" "sync" + + "github.com/streadway/amqp" ) type Options struct { ServerAddress string Username string Password string + Dialer *net.Dialer } type Client struct { + opts Options PublishConn *amqp.Connection PublishChannel *amqp.Channel ConsumeConn *amqp.Connection @@ -25,17 +31,20 @@ type Client struct { } func NewClient(opts Options) (*Client, error) { - user := opts.Username - if user == "" { - user = User + if opts.Username == "" { + opts.Username = User + } + + if opts.Password == "" { + opts.Password = Pass } - pass := opts.Password - if pass == "" { - pass = Pass + dialOptions := amqp.Config{} + if opts.Dialer != nil { + dialOptions.Dial = opts.Dialer.Dial } - publishConn, err := amqp.Dial(fmt.Sprintf("amqp://%s:%s@%s/", user, pass, opts.ServerAddress)) + publishConn, err := amqp.DialConfig(fmt.Sprintf("amqp://%s:%s@%s/", opts.Username, opts.Password, opts.ServerAddress), dialOptions) if err != nil { return nil, err } @@ -43,7 +52,7 @@ func NewClient(opts Options) (*Client, error) { if err != nil { return nil, err } - consumeConn, err := amqp.Dial(fmt.Sprintf("amqp://%s:%s@%s/", user, pass, opts.ServerAddress)) + consumeConn, err := amqp.DialConfig(fmt.Sprintf("amqp://%s:%s@%s/", opts.Username, opts.Password, opts.ServerAddress), dialOptions) if err != nil { return nil, err } @@ -52,6 +61,7 @@ func NewClient(opts Options) (*Client, error) { return nil, err } return &Client{ + opts: opts, PublishConn: publishConn, PublishChannel: publishCh, ConsumeConn: consumeConn, @@ -59,6 +69,37 @@ func NewClient(opts Options) (*Client, error) { }, nil } +type Queue struct { + Name string +} + +func (c *Client) DeleteQueues() error { + host, _, _ := net.SplitHostPort(c.opts.ServerAddress) + manager := fmt.Sprintf("http://%s:15672/api/queues/", host) + client := &http.Client{} + req, err := http.NewRequest("GET", manager, nil) + if err != nil { + return err + } + req.SetBasicAuth(c.opts.Username, c.opts.Password) + resp, err := client.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + + queues := make([]Queue, 0) + if err := json.NewDecoder(resp.Body).Decode(&queues); err != nil { + return err + } + + for _, queue := range queues { + _, _ = c.PublishChannel.QueueDelete(queue.Name, false, false, false) + } + + return nil +} + func (c *Client) Terminate() { c.PublishChannel.Close() c.ConsumeChannel.Close() diff --git a/pkg/network/protocols/amqp/testdata/docker-compose.yml b/pkg/network/protocols/amqp/testdata/docker-compose.yml index 4cd98c37079e9..6f27cd744bd7b 100644 --- a/pkg/network/protocols/amqp/testdata/docker-compose.yml +++ b/pkg/network/protocols/amqp/testdata/docker-compose.yml @@ -4,6 +4,7 @@ services: image: rabbitmq:3-management-alpine ports: - ${AMQP_ADDR:-127.0.0.1}:${AMQP_PORT:-5672}:5672 + - ${AMQP_ADDR:-127.0.0.1}:15672:15672 environment: - "RABBITMQ_DEFAULT_PASS=${PASS:-guest}" - "RABBITMQ_DEFAULT_USER=${USER:-guest}" diff --git a/pkg/network/protocols/events/README.md b/pkg/network/protocols/events/README.md new file mode 100644 index 0000000000000..1a326b53d0852 --- /dev/null +++ b/pkg/network/protocols/events/README.md @@ -0,0 +1,74 @@ +# `pkg/network/protocols/events` + +## Motivation + +The purpose of this package is to standardize the communication between user and +kernel space across different Universal Service Monitoring (USM) protocols. + +Some technical concerns that were factored in the code and are worth mentioning are: + +* eBPF programs of type `BPF_PROG_TYPE_SOCKET_FILTER` are not (for _most_ Kernel + versions) able to directly write events into perf buffers; +* Reading events off-perf buffers can be quite CPU-intensive. This can be +mitigated by properly configuring the `watermark` option when issuing the +`perf_event_open` syscall. However, there is currently no way to _synchronize_ +(eg. flush all buffered events) at a given moment in time[^1], which is a +requirement for us. + +[^1]: this may be available in the near future since we could probably force +wake-up events on the fly via `ioctl` calls, but this will likely require us to +upstream changes to the `cilium/ebpf` library. There is a Jira card owned by +`ebpf-platform` tracking this, and once this is available we could _greatly_ +simplify this package. + + +## How to use the library + +### Kernel Side + +```c +#include "protocols/events.h" +USM_EVENTS_INIT(, , ); +``` + +This will instantiate the necessary eBPF maps along with two functions: +* `_batch_enqueue`; +* `_flush_batch`; + +Please note that `_flush_batch` requires access to the +`bpf_perf_event_output` helper, which is typically not available to socket +filter programs. Because of that we recommend to call it from +`netif_receive_skb` which is associated to the execution of socket filter programs: + +```c +SEC("tracepoint/net/netif_receive_skb") +int tracepoint__net__netif_receive_skb(struct pt_regs* ctx) { + _flush_batch(ctx); + return 0; +} +``` + +### Userspace Side + +Just create a `event.Consumer` and supply it with a callback argument of type +`func([]byte)` that gets executed once for every eBPF "event". + +The slice of bytes corresponds to the memory layout of the struct used on Kernel +side and it's the caller responsibility to make the unmarshaling/type conversion. +Please also note that the callback *must*: +1) copy the data it wishes to hold since the underlying byte array is reclaimed; +2) be thread-safe, as the callback may be executed concurrently from multiple go-routines; +As an example this is how HTTP integration does it: + +```go +func callback(data []byte) { + event := (*ebpfHttpTx)(unsafe.Pointer(&data[0])) + ... +} +``` + +Aside from that, it is _recommended_ (though not strictly necessary) to call +`Consumer.Sync()` every time there is a connection check in system-probe, so +all buffered USM events can be sent to backend. + +For a complete integration example, please refer to `pkg/network/protocols/http/monitor.go` diff --git a/pkg/network/protocols/events/batch_offsets.go b/pkg/network/protocols/events/batch_offsets.go new file mode 100644 index 0000000000000..7377ce3b10f7a --- /dev/null +++ b/pkg/network/protocols/events/batch_offsets.go @@ -0,0 +1,98 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "sync" +) + +// offsetManager is responsible for keeping track of which chunks of data we +// have consumed from each batch object +type offsetManager struct { + mux sync.Mutex + stateByCPU []*cpuReadState +} + +type cpuReadState struct { + // this is the nextBatchID we're expecting for a particular CPU core. we use + // this when we attempt to retrieve data that hasn't been sent from kernel space + // yet because it belongs to an incomplete batch. + nextBatchID int + + // information associated to partial batch reads + partialBatchID int + partialOffset int +} + +func newOffsetManager(numCPUS int) *offsetManager { + stateByCPU := make([]*cpuReadState, numCPUS) + for i := range stateByCPU { + stateByCPU[i] = new(cpuReadState) + } + + return &offsetManager{stateByCPU: stateByCPU} +} + +// Get returns the data offset that hasn't been consumed yet for a given batch +func (o *offsetManager) Get(cpu int, batch *batch, syncing bool) (begin, end int) { + o.mux.Lock() + defer o.mux.Unlock() + state := o.stateByCPU[cpu] + batchID := int(batch.Idx) + + if batchID < state.nextBatchID { + // we have already consumed this data + return 0, 0 + } + + if batchComplete(batch) { + state.nextBatchID = batchID + 1 + } + + // determining the begin offset + // usually this is 0, but if we've done a partial read of this batch + // we need to take that into account + if int(batch.Idx) == state.partialBatchID { + begin = state.partialOffset + } + + // determining the end offset + // usually this is the full batch size but it can be less + // in the context of a forced (partial) read + end = int(batch.Len) + + // if this is part of a forced read (that is, we're reading a batch before + // it's complete) we need to keep track of which entries we're reading + // so we avoid reading the same entries again + if syncing { + state.partialBatchID = int(batch.Idx) + state.partialOffset = end + } + + return +} + +func (o *offsetManager) NextBatchID(cpu int) int { + o.mux.Lock() + defer o.mux.Unlock() + + return o.stateByCPU[cpu].nextBatchID +} + +func max(a, b int) int { + if a >= b { + return a + } + + return b +} + +func batchComplete(b *batch) bool { + return b.Cap > 0 && b.Len == b.Cap +} diff --git a/pkg/network/protocols/events/batch_offsets_test.go b/pkg/network/protocols/events/batch_offsets_test.go new file mode 100644 index 0000000000000..d3955f2d5aae0 --- /dev/null +++ b/pkg/network/protocols/events/batch_offsets_test.go @@ -0,0 +1,113 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "testing" + + "gotest.tools/assert" +) + +func TestOffsets(t *testing.T) { + const numCPUs = 2 + offsets := newOffsetManager(numCPUs) + + assert.Equal(t, 0, offsets.NextBatchID(0)) + assert.Equal(t, 0, offsets.NextBatchID(1)) + + // reading full batch: cpu=0 batchID=0 + begin, end := offsets.Get(0, &batch{Idx: 0, Len: 10, Cap: 10}, false) + assert.Equal(t, 0, begin) + assert.Equal(t, 10, end) + // nextBatchID is advanced to 1 for cpu=0 + assert.Equal(t, 1, offsets.NextBatchID(0)) + + // reading partial batch: cpu=1 batchID=0 sync=true + begin, end = offsets.Get(1, &batch{Idx: 0, Len: 8, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 8, end) + // nextBatchID remains 0 for cpu=1 since this batch hasn't been filled up yet + assert.Equal(t, 0, offsets.NextBatchID(1)) + + // reading full batch: cpu=1 batchID=0 + begin, end = offsets.Get(1, &batch{Idx: 0, Len: 10, Cap: 10}, false) + // notice we only read now the remaining offsets + assert.Equal(t, 8, begin) + assert.Equal(t, 10, end) + // nextBatchID is advanced to 1 for cpu=1 + assert.Equal(t, 1, offsets.NextBatchID(1)) + + // reading partial batch: cpu=0 batchID=1 sync=true + begin, end = offsets.Get(0, &batch{Idx: 1, Len: 4, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 4, end) + // nextBatchID remains 1 for cpu=0 + assert.Equal(t, 1, offsets.NextBatchID(0)) + + // reading partial batch: cpu=0 batchID=1 sync=true + begin, end = offsets.Get(0, &batch{Idx: 1, Len: 5, Cap: 10}, true) + assert.Equal(t, 4, begin) + assert.Equal(t, 5, end) + // nextBatchID remains 1 for cpu=0 + assert.Equal(t, 1, offsets.NextBatchID(0)) +} + +func TestDelayedBatchReads(t *testing.T) { + const numCPUs = 1 + offsets := newOffsetManager(numCPUs) + + // this emulates the scenario where we preemptively read (sync=true) two + // complete batches in a row before they are read from perf buffer + begin, end := offsets.Get(0, &batch{Idx: 0, Len: 10, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 10, end) + + begin, end = offsets.Get(0, &batch{Idx: 1, Len: 10, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 10, end) + + // now the "delayed" batches from perf buffer are read in sequence + begin, end = offsets.Get(0, &batch{Idx: 0, Len: 10, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 0, end) + + begin, end = offsets.Get(0, &batch{Idx: 1, Len: 10, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 0, end) +} + +func TestUnchangedBatchRead(t *testing.T) { + const numCPUs = 1 + offsets := newOffsetManager(numCPUs) + + begin, end := offsets.Get(0, &batch{Idx: 0, Len: 5, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 5, end) + + begin, end = offsets.Get(0, &batch{Idx: 0, Len: 5, Cap: 10}, true) + assert.Equal(t, 5, begin) + assert.Equal(t, 5, end) +} + +func TestReadGap(t *testing.T) { + const numCPUs = 1 + offsets := newOffsetManager(numCPUs) + + // this emulates the scenario where a batch is lost in the perf buffer + begin, end := offsets.Get(0, &batch{Idx: 0, Len: 10, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 10, end) + assert.Equal(t, 1, offsets.NextBatchID(0)) + + // batch idx=1 was lost + begin, end = offsets.Get(0, &batch{Idx: 2, Len: 10, Cap: 10}, true) + assert.Equal(t, 0, begin) + assert.Equal(t, 10, end) + assert.Equal(t, 3, offsets.NextBatchID(0)) +} diff --git a/pkg/network/protocols/events/batch_reader.go b/pkg/network/protocols/events/batch_reader.go new file mode 100644 index 0000000000000..bd6e79fe097eb --- /dev/null +++ b/pkg/network/protocols/events/batch_reader.go @@ -0,0 +1,119 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "sync" + "unsafe" + + "github.com/cilium/ebpf" +) + +var batchPool = sync.Pool{ + New: func() interface{} { + return new(batch) + }, +} + +type batchReader struct { + sync.Mutex + numCPUs int + batchMap *ebpf.Map + offsets *offsetManager + workerPool *workerPool + stopped bool +} + +func newBatchReader(offsetManager *offsetManager, batchMap *ebpf.Map, numCPUs int) (*batchReader, error) { + // initialize eBPF maps + batch := new(batch) + for i := 0; i < numCPUs; i++ { + for j := 0; j < batchPagesPerCPU; j++ { + key := &batchKey{Cpu: uint32(i), Num: uint32(j)} + err := batchMap.Put(unsafe.Pointer(key), unsafe.Pointer(batch)) + if err != nil { + return nil, err + } + } + } + + workerPool, err := newWorkerPool(max(numCPUs, 32)) + if err != nil { + return nil, err + } + + return &batchReader{ + numCPUs: numCPUs, + offsets: offsetManager, + batchMap: batchMap, + workerPool: workerPool, + }, nil +} + +// ReadAll batches from eBPF (concurrently) and execute the given +// callback function for each batch +func (r *batchReader) ReadAll(f func(cpu int, b *batch)) { + // This lock is used only for the purposes of synchronizing termination + // and it's only held while *enqueing* the jobs. + r.Lock() + if r.stopped { + r.Unlock() + return + } + + var wg sync.WaitGroup + wg.Add(r.numCPUs) + + for i := 0; i < r.numCPUs; i++ { + cpu := i // required to properly capture this variable in the function closure + r.workerPool.Do(func() { + defer wg.Done() + batchID, key := r.generateBatchKey(cpu) + + b := batchPool.Get().(*batch) + defer func() { + *b = batch{} + batchPool.Put(b) + }() + + err := r.batchMap.Lookup(unsafe.Pointer(key), unsafe.Pointer(b)) + if err != nil { + return + } + if int(b.Idx) != batchID { + // this means that the batch we were looking for was flushed to the perf buffer + return + } + + f(cpu, b) + }) + } + r.Unlock() + wg.Wait() +} + +// Stop batchReader +func (r *batchReader) Stop() { + r.Lock() + defer r.Unlock() + + if r.stopped { + return + } + r.stopped = true + r.workerPool.Stop() +} + +func (r *batchReader) generateBatchKey(cpu int) (batchID int, key *batchKey) { + batchID = r.offsets.NextBatchID(cpu) + return batchID, &batchKey{ + Cpu: uint32(cpu), + Num: uint32(batchID) % uint32(batchPagesPerCPU), + } +} diff --git a/pkg/network/protocols/events/configuration.go b/pkg/network/protocols/events/configuration.go new file mode 100644 index 0000000000000..b15b003725918 --- /dev/null +++ b/pkg/network/protocols/events/configuration.go @@ -0,0 +1,79 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "os" + "sync" + + ddebpf "github.com/DataDog/datadog-agent/pkg/ebpf" + "github.com/DataDog/datadog-agent/pkg/util/log" + manager "github.com/DataDog/ebpf-manager" + "github.com/cilium/ebpf" + "github.com/iovisor/gobpf/pkg/cpupossible" +) + +// handlerByProtocol holds a temporary reference to a `ddebpf.PerfHandler` +// instance for a given protocol. This is done to simplify the usage of this +// package a little bit, so a call to `events.Configure` can be later linked +// to a call to `events.NewConsumer` without the need to explicitly propagate +// any values. The map is guarded by `handlerMux`. +var handlerByProtocol map[string]*ddebpf.PerfHandler +var handlerMux sync.Mutex + +// Configure event processing +// Must be called *before* manager.InitWithOptions +func Configure(proto string, m *manager.Manager, o *manager.Options) { + handler := ddebpf.NewPerfHandler(100) + m.PerfMaps = append(m.PerfMaps, &manager.PerfMap{ + Map: manager.Map{Name: proto + eventsMapSuffix}, + PerfMapOptions: manager.PerfMapOptions{ + PerfRingBufferSize: 16 * os.Getpagesize(), + Watermark: 1, + RecordHandler: handler.RecordHandler, + LostHandler: handler.LostHandler, + RecordGetter: handler.RecordGetter, + }, + }) + + handlerMux.Lock() + if handlerByProtocol == nil { + handlerByProtocol = make(map[string]*ddebpf.PerfHandler) + } + handlerByProtocol[proto] = handler + handlerMux.Unlock() + + onlineCPUs, err := cpupossible.Get() + if err != nil { + onlineCPUs = make([]uint, 96) + log.Error("unable to detect number of CPUs. assuming 96 cores") + } + + if o.MapSpecEditors == nil { + o.MapSpecEditors = make(map[string]manager.MapSpecEditor) + } + + o.MapSpecEditors[proto+batchMapSuffix] = manager.MapSpecEditor{ + Type: ebpf.Hash, + MaxEntries: uint32(len(onlineCPUs) * batchPagesPerCPU), + EditorFlag: manager.EditMaxEntries, + } +} + +func getHandler(proto string) *ddebpf.PerfHandler { + handlerMux.Lock() + defer handlerMux.Unlock() + if handlerByProtocol == nil { + return nil + } + + handler := handlerByProtocol[proto] + delete(handlerByProtocol, proto) + return handler +} diff --git a/pkg/network/protocols/events/consumer.go b/pkg/network/protocols/events/consumer.go new file mode 100644 index 0000000000000..2c6388a2575c7 --- /dev/null +++ b/pkg/network/protocols/events/consumer.go @@ -0,0 +1,214 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "fmt" + "sync" + "time" + "unsafe" + + ddebpf "github.com/DataDog/datadog-agent/pkg/ebpf" + "github.com/DataDog/datadog-agent/pkg/network/telemetry" + "github.com/DataDog/datadog-agent/pkg/util/log" + manager "github.com/DataDog/ebpf-manager" + "go.uber.org/atomic" +) + +const ( + batchMapSuffix = "_batches" + eventsMapSuffix = "_batch_events" +) + +// Consumer provides a standardized abstraction for consuming (batched) events from eBPF +type Consumer struct { + mux sync.Mutex + proto string + syncRequest chan (chan struct{}) + offsets *offsetManager + handler *ddebpf.PerfHandler + batchReader *batchReader + callback func([]byte) + + // termination + eventLoopWG sync.WaitGroup + stopped bool + + // telemetry + then time.Time + eventsCount *telemetry.Metric + missesCount *telemetry.Metric + batchSize *atomic.Int64 +} + +// NewConsumer instantiates a new event Consumer +// `callback` is executed once for every "event" generated on eBPF and must: +// 1) copy the data it wishes to hold since the underlying byte array is reclaimed; +// 2) be thread-safe, as the callback may be executed concurrently from multiple go-routines; +func NewConsumer(proto string, ebpf *manager.Manager, callback func([]byte)) (*Consumer, error) { + batchMapName := proto + batchMapSuffix + batchMap, found, _ := ebpf.GetMap(batchMapName) + if !found { + return nil, fmt.Errorf("unable to find map %s", batchMapName) + } + + eventsMapName := proto + eventsMapSuffix + eventsMap, found, _ := ebpf.GetMap(eventsMapName) + if !found { + return nil, fmt.Errorf("unable to find map %s", eventsMapName) + } + + numCPUs := int(eventsMap.MaxEntries()) + offsets := newOffsetManager(numCPUs) + batchReader, err := newBatchReader(offsets, batchMap, numCPUs) + if err != nil { + return nil, err + } + + handler := getHandler(proto) + if handler == nil { + return nil, fmt.Errorf("unable to detect perf handler. perhaps you forgot to call events.Configure()?") + } + + // setup telemetry + metricGroup := telemetry.NewMetricGroup( + fmt.Sprintf("usm.%s", proto), + telemetry.OptStatsd, + telemetry.OptExpvar, + telemetry.OptMonotonic, + ) + + eventsCount := metricGroup.NewMetric("events_captured") + missesCount := metricGroup.NewMetric("events_missed") + + return &Consumer{ + proto: proto, + callback: callback, + syncRequest: make(chan chan struct{}), + offsets: offsets, + handler: handler, + batchReader: batchReader, + + // telemetry + eventsCount: eventsCount, + missesCount: missesCount, + batchSize: atomic.NewInt64(0), + }, nil +} + +// Start consumption of eBPF events +func (c *Consumer) Start() { + c.then = time.Now() + c.eventLoopWG.Add(1) + go func() { + defer c.eventLoopWG.Done() + for { + select { + case dataEvent, ok := <-c.handler.DataChannel: + if !ok { + return + } + + b := batchFromEventData(dataEvent.Data) + c.process(dataEvent.CPU, b, false) + dataEvent.Done() + case _, ok := <-c.handler.LostChannel: + if !ok { + return + } + + missedEvents := c.batchSize.Load() + c.missesCount.Add(missedEvents) + case done, ok := <-c.syncRequest: + if !ok { + return + } + + c.batchReader.ReadAll(func(cpu int, b *batch) { + c.process(cpu, b, true) + }) + c.log() + close(done) + } + } + }() +} + +// Sync userpace with kernelspace by fetching all buffered data on eBPF +// Calling this will block until all eBPF map data has been fetched and processed +func (c *Consumer) Sync() { + c.mux.Lock() + if c.stopped { + c.mux.Unlock() + return + } + + request := make(chan struct{}) + c.syncRequest <- request + c.mux.Unlock() + + // Wait until all data is fetch from eBPF + <-request +} + +// Stop consuming data from eBPF +func (c *Consumer) Stop() { + c.mux.Lock() + defer c.mux.Unlock() + + if c.stopped { + return + } + + c.stopped = true + c.batchReader.Stop() + c.handler.Stop() + c.eventLoopWG.Wait() + close(c.syncRequest) +} + +func (c *Consumer) process(cpu int, b *batch, syncing bool) { + begin, end := c.offsets.Get(cpu, b, syncing) + + // telemetry stuff + c.batchSize.Store(int64(b.Cap)) + c.eventsCount.Add(int64(end - begin)) + + iter := newIterator(b, begin, end) + for data := iter.Next(); data != nil; data = iter.Next() { + c.callback(data) + } +} + +func (c *Consumer) log() { + var ( + now = time.Now() + elapsed = now.Sub(c.then).Seconds() + captured = c.eventsCount.Delta() + missed = c.missesCount.Delta() + ) + + if elapsed == 0 { + return + } + + log.Infof("usm events summary: name=%q events_captured=%d(%.2f/s) events_missed=%d(%.2f/s)", + c.proto, + captured, + float64(captured)/float64(elapsed), + missed, + float64(missed)/float64(elapsed), + ) + + c.then = now +} + +func batchFromEventData(data []byte) *batch { + return (*batch)(unsafe.Pointer(&data[0])) +} diff --git a/pkg/network/protocols/events/consumer_test.go b/pkg/network/protocols/events/consumer_test.go new file mode 100644 index 0000000000000..40c1b12c3732c --- /dev/null +++ b/pkg/network/protocols/events/consumer_test.go @@ -0,0 +1,172 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "encoding/binary" + "math" + "os" + "path/filepath" + "sync" + "testing" + "time" + "unsafe" + + "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode" + "github.com/DataDog/datadog-agent/pkg/network/config" + bpftelemetry "github.com/DataDog/datadog-agent/pkg/network/telemetry" + "github.com/DataDog/datadog-agent/pkg/util/kernel" + manager "github.com/DataDog/ebpf-manager" + "github.com/cilium/ebpf" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "golang.org/x/sys/unix" +) + +func TestConsumer(t *testing.T) { + kversion, err := kernel.HostVersion() + require.NoError(t, err) + if minVersion := kernel.VersionCode(4, 14, 0); kversion < minVersion { + t.Skipf("package not supported by kernels < %s", minVersion) + } + + const numEvents = 100 + c := config.New() + program, err := newEBPFProgram(c) + require.NoError(t, err) + + var mux sync.Mutex + result := make(map[uint64]int) + callback := func(b []byte) { + mux.Lock() + defer mux.Unlock() + // each event is just a uint64 + n := binary.LittleEndian.Uint64(b) + result[n] = +1 + } + + consumer, err := NewConsumer("test", program, callback) + require.NoError(t, err) + consumer.Start() + + err = program.Start() + require.NoError(t, err) + + // generate test events + generator := newEventGenerator(program, t) + for i := 0; i < numEvents; i++ { + generator.Generate(uint64(i)) + } + generator.Stop() + time.Sleep(100 * time.Millisecond) + + // this ensures that any incomplete batch left in eBPF is fully processed + consumer.Sync() + program.Stop(manager.CleanAll) + consumer.Stop() + + // ensure that we have received each event exactly once + for i := 0; i < numEvents; i++ { + actual := result[uint64(i)] + assert.Equalf(t, 1, actual, "eventID=%d should have 1 occurrence. got %d", i, actual) + } +} + +type eventGenerator struct { + // map used for coordinating test with eBPF program space + testMap *ebpf.Map + + // file used for triggering write(2) syscalls + testFile *os.File +} + +func newEventGenerator(program *manager.Manager, t *testing.T) *eventGenerator { + m, _, _ := program.GetMap("test") + require.NotNilf(t, m, "couldn't find test map") + + f, err := os.Create(filepath.Join(t.TempDir(), "foobar")) + require.NoError(t, err) + + return &eventGenerator{ + testMap: m, + testFile: f, + } +} + +func (e *eventGenerator) Generate(eventID uint64) error { + type testCtx struct { + pid uint32 + fd uint64 + eventID uint64 + } + + var ( + fd = uint64(e.testFile.Fd()) + key = uint32(0) + val = testCtx{pid: uint32(os.Getpid()), fd: fd, eventID: eventID} + ) + + // this is done so the eBPF program will echo back an event that is equal to + // eventID once the write syscall is triggered below + err := e.testMap.Put(unsafe.Pointer(&key), unsafe.Pointer(&val)) + if err != nil { + return err + } + + e.testFile.Write([]byte("whatever")) + return nil +} + +func (e *eventGenerator) Stop() { + e.testFile.Close() +} + +func newEBPFProgram(c *config.Config) (*manager.Manager, error) { + bc, err := bytecode.GetReader(c.BPFDir, "usm_events_test-debug.o") + if err != nil { + return nil, err + } + defer bc.Close() + + m := &manager.Manager{ + Probes: []*manager.Probe{ + { + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + EBPFSection: "tracepoint/syscalls/sys_enter_write", + EBPFFuncName: "tracepoint__syscalls__sys_enter_write", + }, + }, + }, + } + options := manager.Options{ + RLimit: &unix.Rlimit{ + Cur: math.MaxUint64, + Max: math.MaxUint64, + }, + ActivatedProbes: []manager.ProbesSelector{ + &manager.ProbeSelector{ + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + EBPFSection: "tracepoint/syscalls/sys_enter_write", + EBPFFuncName: "tracepoint__syscalls__sys_enter_write", + }, + }, + }, + } + + Configure("test", m, &options) + m.InstructionPatcher = func(m *manager.Manager) error { + return bpftelemetry.PatchEBPFTelemetry(m, true, nil) + } + err = m.InitWithOptions(bc, options) + if err != nil { + return nil, err + } + + return m, nil +} diff --git a/pkg/network/protocols/events/iterator.go b/pkg/network/protocols/events/iterator.go new file mode 100644 index 0000000000000..67a326f8905aa --- /dev/null +++ b/pkg/network/protocols/events/iterator.go @@ -0,0 +1,58 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import "unsafe" + +// iterator provides a small abstraction for walking over the the raw stream of +// bytes represented by the `batch.data` field. +// for example, batch data for an event type of size 4 may look like the +// following: +// +// 0 1 2 3 4 5 +// |aaaa|bbbb|cccc|0000|0000|....| +// 0 4 8 12 16 20 4096 +// +// The purpose of the iterator is to simply return the appropriate chunks of +// data. If we instantiate the iterator with i=1 and j=3, calling Next() +// multiple times will return the following: +// +// Next() => bbbb +// Next() => cccc +// Next() => nil +type iterator struct { + data []byte + b *batch + i, j int // data offsets +} + +// newIterator returns a new `iterator` instance +func newIterator(b *batch, i, j int) *iterator { + data := unsafe.Slice((*byte)(unsafe.Pointer(&b.Data[0])), batchBufferSize) + return &iterator{ + data: data, + b: b, + i: i - 1, + j: j, + } +} + +// Next will advance to the next chunk of data representing an eBPF "event" +// while taking into consideration the bounds of the data. +// In case we run out of bounds `nil` is returned +func (it *iterator) Next() []byte { + it.i++ + + chunkSize := int(it.b.Size) + if it.i >= it.j || it.i > int(it.b.Cap) || (it.i+1)*chunkSize > len(it.b.Data) { + return nil + } + + return it.data[it.i*chunkSize : (it.i+1)*chunkSize] +} diff --git a/pkg/network/protocols/events/types.go b/pkg/network/protocols/events/types.go new file mode 100644 index 0000000000000..7371bc469a110 --- /dev/null +++ b/pkg/network/protocols/events/types.go @@ -0,0 +1,22 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build ignore +// +build ignore + +package events + +/* +#include "../../ebpf/c/protocols/events-types.h" +*/ +import "C" + +type batch C.batch_data_t +type batchKey C.batch_key_t + +const ( + batchPagesPerCPU = C.BATCH_PAGES_PER_CPU + batchBufferSize = C.BATCH_BUFFER_SIZE +) diff --git a/pkg/network/protocols/events/types_linux.go b/pkg/network/protocols/events/types_linux.go new file mode 100644 index 0000000000000..a1fe7ee3abc90 --- /dev/null +++ b/pkg/network/protocols/events/types_linux.go @@ -0,0 +1,22 @@ +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -I ../../ebpf/c -fsigned-char types.go + +package events + +type batch struct { + Idx uint64 + Len uint16 + Cap uint16 + Size uint16 + Data [4096]int8 + Pad_cgo_0 [2]byte +} +type batchKey struct { + Cpu uint32 + Num uint32 +} + +const ( + batchPagesPerCPU = 0x3 + batchBufferSize = 0x1000 +) diff --git a/pkg/network/protocols/events/worker_pool.go b/pkg/network/protocols/events/worker_pool.go new file mode 100644 index 0000000000000..534d5ad393b47 --- /dev/null +++ b/pkg/network/protocols/events/worker_pool.go @@ -0,0 +1,55 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package events + +import ( + "fmt" + "sync" +) + +type workerPool struct { + size int + jobs chan func() + waitGroup sync.WaitGroup + once sync.Once +} + +func newWorkerPool(size int) (*workerPool, error) { + if size <= 0 { + return nil, fmt.Errorf("invalid worker pool size %d", size) + } + + pool := &workerPool{ + size: size, + jobs: make(chan func()), + } + + for i := 0; i < size; i++ { + pool.waitGroup.Add(1) + go func() { + defer pool.waitGroup.Done() + for f := range pool.jobs { + f() + } + }() + } + + return pool, nil +} + +func (wp *workerPool) Do(f func()) { + wp.jobs <- f +} + +func (wp *workerPool) Stop() { + wp.once.Do(func() { + close(wp.jobs) + wp.waitGroup.Wait() + }) +} diff --git a/pkg/network/protocols/http/batch_manager.go b/pkg/network/protocols/http/batch_manager.go deleted file mode 100644 index b7503a10645e7..0000000000000 --- a/pkg/network/protocols/http/batch_manager.go +++ /dev/null @@ -1,127 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build linux_bpf -// +build linux_bpf - -package http - -import ( - "errors" - "unsafe" - - ddebpf "github.com/DataDog/datadog-agent/pkg/ebpf" - - "github.com/cilium/ebpf" -) - -var errLostBatch = errors.New("http batch lost (not consumed fast enough)") - -const maxLookupsPerCPU = 2 - -type usrBatchState struct { - idx, pos int -} - -type batchManager struct { - batchMap *ebpf.Map - stateByCPU []usrBatchState - numCPUs int -} - -func newBatchManager(batchMap *ebpf.Map, numCPUs int) (*batchManager, error) { - batch := new(httpBatch) - stateByCPU := make([]usrBatchState, numCPUs) - - for i := 0; i < numCPUs; i++ { - // Initialize eBPF maps - for j := 0; j < HTTPBatchPages; j++ { - key := &httpBatchKey{Cpu: uint32(i), Num: uint32(j)} - err := batchMap.Put(unsafe.Pointer(key), unsafe.Pointer(batch)) - if err != nil { - return nil, err - } - } - } - - return &batchManager{ - batchMap: batchMap, - stateByCPU: stateByCPU, - numCPUs: numCPUs, - }, nil -} - -func (m *batchManager) GetTransactionsFrom(event *ddebpf.DataEvent) ([]httpTX, error) { - state := &m.stateByCPU[event.CPU] - batch := batchFromEventData(event.Data) - - if int(batch.Idx) < state.idx { - // This means this batch was processed via GetPendingTransactions - return nil, nil - } - - offset := state.pos - state.idx = int(batch.Idx) + 1 - state.pos = 0 - - txns := make([]httpTX, len(batch.Transactions()[offset:])) - tocopy := batch.Transactions()[offset:] - for idx := range tocopy { - txns[idx] = &tocopy[idx] - } - return txns, nil -} - -func (m *batchManager) GetPendingTransactions() []httpTX { - transactions := make([]httpTX, 0, HTTPBatchSize*HTTPBatchPages/2) - for i := 0; i < m.numCPUs; i++ { - for lookup := 0; lookup < maxLookupsPerCPU; lookup++ { - var ( - usrState = &m.stateByCPU[i] - pageNum = usrState.idx % HTTPBatchPages - batchKey = &httpBatchKey{Cpu: uint32(i), Num: uint32(pageNum)} - batch = new(httpBatch) - ) - - err := m.batchMap.Lookup(unsafe.Pointer(batchKey), unsafe.Pointer(batch)) - if err != nil { - break - } - - krnStateIDX := int(batch.Idx) - krnStatePos := int(batch.Pos) - if krnStateIDX != usrState.idx || krnStatePos <= usrState.pos { - break - } - - all := batch.Transactions() - pending := all[usrState.pos:krnStatePos] - for _, tx := range pending { - var newtx = tx - transactions = append(transactions, &newtx) - } - - if krnStatePos == HTTPBatchSize { - // We detected a full batch before the http_notification_t was processed. - // In this case we update the userspace state accordingly and try to - // preemptively read the next batch in order to return as many - // completed HTTP transactions as possible - usrState.idx++ - usrState.pos = 0 - continue - } - - usrState.pos = krnStatePos - // Move on to the next CPU core - break - } - } - - return transactions -} - -func batchFromEventData(data []byte) *httpBatch { - return (*httpBatch)(unsafe.Pointer(&data[0])) -} diff --git a/pkg/network/protocols/http/driver_interface.go b/pkg/network/protocols/http/driver_interface.go index ef03e2bd5cd87..85a278dde9f21 100644 --- a/pkg/network/protocols/http/driver_interface.go +++ b/pkg/network/protocols/http/driver_interface.go @@ -146,7 +146,7 @@ func (di *httpDriverInterface) startReadingBuffers() { }() } -//func (di *httpDriverInterface) flushPendingTransactions() ([]driver.HttpTransactionType, error) { +// func (di *httpDriverInterface) flushPendingTransactions() ([]driver.HttpTransactionType, error) { func (di *httpDriverInterface) readPendingTransactions() ([]WinHttpTransaction, error) { var ( bytesRead uint32 diff --git a/pkg/network/protocols/http/dump.go b/pkg/network/protocols/http/dump.go index 3d50cc528f0aa..b1f01a3cbfd2a 100644 --- a/pkg/network/protocols/http/dump.go +++ b/pkg/network/protocols/http/dump.go @@ -32,24 +32,6 @@ func dumpMapsHandler(manager *manager.Manager, mapName string, currentMap *ebpf. output.WriteString(spew.Sdump(key, value)) } - case httpBatchesMap: // maps/http_batches (BPF_MAP_TYPE_HASH), key httpBatchKey, value httpBatch - output.WriteString("Map: '" + mapName + "', key: 'httpBatchKey', value: 'httpBatch'\n") - iter := currentMap.Iterate() - var key httpBatchKey - var value httpBatch - for iter.Next(unsafe.Pointer(&key), unsafe.Pointer(&value)) { - output.WriteString(spew.Sdump(key, value)) - } - - case httpBatchStateMap: // maps/http_batch_state (BPF_MAP_TYPE_HASH), key C.__u32, value C.http_batch_state_t - output.WriteString("Map: '" + mapName + "', key: 'C.__u32', value: 'C.http_batch_state_t'\n") - iter := currentMap.Iterate() - var key uint32 - var value httpBatchState - for iter.Next(unsafe.Pointer(&key), unsafe.Pointer(&value)) { - output.WriteString(spew.Sdump(key, value)) - } - case sslSockByCtxMap: // maps/ssl_sock_by_ctx (BPF_MAP_TYPE_HASH), key uintptr // C.void *, value C.ssl_sock_t output.WriteString("Map: '" + mapName + "', key: 'uintptr // C.void *', value: 'C.ssl_sock_t'\n") iter := currentMap.Iterate() diff --git a/pkg/network/protocols/http/ebpf_gotls.go b/pkg/network/protocols/http/ebpf_gotls.go index 17b5d5a9e365a..ac84406f1ed1e 100644 --- a/pkg/network/protocols/http/ebpf_gotls.go +++ b/pkg/network/protocols/http/ebpf_gotls.go @@ -35,9 +35,10 @@ import ( ) const ( - offsetsDataMap = "offsets_data" - goTLSReadArgsMap = "go_tls_read_args" - goTLSWriteArgsMap = "go_tls_write_args" + offsetsDataMap = "offsets_data" + goTLSReadArgsMap = "go_tls_read_args" + goTLSWriteArgsMap = "go_tls_write_args" + connectionTupleByGoTLSMap = "conn_tup_by_go_tls_conn" ) type uprobeInfo struct { @@ -123,6 +124,7 @@ type runningBinary struct { } type GoTLSProgram struct { + cfg *config.Config manager *errtelemetry.Manager // Path to the process/container's procfs @@ -175,6 +177,7 @@ func newGoTLSProgram(c *config.Config) *GoTLSProgram { } p := &GoTLSProgram{ + cfg: c, procRoot: c.ProcRoot, binaries: make(map[binaryID]*runningBinary), processes: make(map[pid]binaryID), @@ -195,7 +198,13 @@ func (p *GoTLSProgram) ConfigureManager(m *errtelemetry.Manager) { // Hooks will be added in runtime for each binary } -func (p *GoTLSProgram) ConfigureOptions(_ *manager.Options) {} +func (p *GoTLSProgram) ConfigureOptions(options *manager.Options) { + options.MapSpecEditors[connectionTupleByGoTLSMap] = manager.MapSpecEditor{ + Type: ebpf.Hash, + MaxEntries: uint32(p.cfg.MaxTrackedConnections), + EditorFlag: manager.EditMaxEntries, + } +} func (*GoTLSProgram) GetAllUndefinedProbes() []manager.ProbeIdentificationPair { probeList := make([]manager.ProbeIdentificationPair, 0) @@ -256,9 +265,22 @@ func (p *GoTLSProgram) Stop() { func (p *GoTLSProgram) handleProcessStart(pid pid) { exePath := filepath.Join(p.procRoot, strconv.FormatUint(uint64(pid), 10), "exe") + binPath, err := os.Readlink(exePath) if err != nil { - log.Debugf(" could not read binary path for pid %d: %s", pid, err) + // We receive the Exec event, /proc could be slow to update + end := time.Now().Add(10 * time.Millisecond) + for end.After(time.Now()) { + binPath, err = os.Readlink(exePath) + if err == nil { + break + } + time.Sleep(time.Millisecond) + } + } + if err != nil { + // we can't access to the binary path here (pid probably ended already) + // there are not much we can do and we don't want to flood the logs return } @@ -294,7 +316,10 @@ func (p *GoTLSProgram) hookNewBinary(binID binaryID, binPath string, pid pid, bi var err error defer func() { if err != nil { - log.Debugf("could not hook new binary %q for process %d: %s", binPath, pid, err) + // report hooking issue only if we detect properly a golang binary + if !errors.Is(err, binversion.ErrNotGoExe) { + log.Debugf("could not hook new binary %q for process %d: %s", binPath, pid, err) + } p.unregisterProcess(pid) return } @@ -317,9 +342,7 @@ func (p *GoTLSProgram) hookNewBinary(binID binaryID, binPath string, pid pid, bi inspectionResult, err := bininspect.InspectNewProcessBinary(elfFile, functionsConfig, structFieldsLookupFunctions) if err != nil { - if !errors.Is(err, binversion.ErrNotGoExe) { - err = fmt.Errorf("error reading exe: %w", err) - } + err = fmt.Errorf("error reading exe: %w", err) return } @@ -390,7 +413,6 @@ func (p *GoTLSProgram) unregisterProcess(pid pid) { bin.processCount -= 1 if bin.processCount == 0 { - log.Debugf("no processes left for binID %v", bin.binID) p.unhookBinary(bin) delete(p.binaries, binID) } @@ -420,7 +442,11 @@ func (p *GoTLSProgram) removeInspectionResultFromMap(binID binaryID) { } func (p *GoTLSProgram) attachHooks(result *bininspect.Result, binPath string) (probeIDs []manager.ProbeIdentificationPair, err error) { - uid := getUID(binPath) + pathID, err := newPathIdentifier(binPath) + if err != nil { + return probeIDs, fmt.Errorf("can't create path identifier for path %s : %s", binPath, err) + } + uid := getUID(pathID) defer func() { if err != nil { p.detachHooks(probeIDs) diff --git a/pkg/network/protocols/http/ebpf_javatls.go b/pkg/network/protocols/http/ebpf_javatls.go new file mode 100644 index 0000000000000..c1c36313b4f39 --- /dev/null +++ b/pkg/network/protocols/http/ebpf_javatls.go @@ -0,0 +1,110 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package http + +import ( + "math/rand" + "os" + "path/filepath" + "regexp" + "strconv" + "time" + + "github.com/DataDog/datadog-agent/pkg/network/config" + "github.com/DataDog/datadog-agent/pkg/network/java" + nettelemetry "github.com/DataDog/datadog-agent/pkg/network/telemetry" + "github.com/DataDog/datadog-agent/pkg/process/monitor" + "github.com/DataDog/datadog-agent/pkg/util/log" + manager "github.com/DataDog/ebpf-manager" +) + +const ( + AgentUSMJar = "agent-usm.jar" +) + +var ( + // path to our java USM agent TLS tracer + javaUSMAgentJarPath = "" + + // default arguments passed to the injected agent-usm.jar + javaUSMAgentArgs = "" + // authID is used here as an identifier, simple proof of authenticity + // between the injected java process and the ebpf ioctl that receive the payload + authID = int64(0) +) + +type JavaTLSProgram struct { + processMonitor *monitor.ProcessMonitor + cleanupExec func() +} + +// Static evaluation to make sure we are not breaking the interface. +var _ subprogram = &JavaTLSProgram{} + +func newJavaTLSProgram(c *config.Config) *JavaTLSProgram { + if !c.EnableHTTPSMonitoring || !c.EnableJavaTLSSupport { + return nil + } + + javaUSMAgentArgs = c.JavaAgentArgs + javaUSMAgentJarPath = filepath.Join(c.JavaDir, AgentUSMJar) + jar, err := os.Open(javaUSMAgentJarPath) + if err != nil { + log.Errorf("java TLS can't access to agent-usm.jar file %s : %s", javaUSMAgentJarPath, err) + return nil + } + jar.Close() + + mon := monitor.GetProcessMonitor() + return &JavaTLSProgram{ + processMonitor: mon, + } +} + +func (p *JavaTLSProgram) ConfigureManager(m *nettelemetry.Manager) { + rand.Seed(int64(os.Getpid()) + time.Now().UnixMicro()) + authID = rand.Int63() +} + +func (p *JavaTLSProgram) ConfigureOptions(options *manager.Options) {} + +func (p *JavaTLSProgram) GetAllUndefinedProbes() (probeList []manager.ProbeIdentificationPair) { + return +} + +func newJavaProcess(pid uint32) { + args := javaUSMAgentArgs + if len(args) > 0 { + args += " " + } + args += "dd.usm.authID=" + strconv.FormatInt(authID, 10) + if err := java.InjectAgent(int(pid), javaUSMAgentJarPath, args); err != nil { + log.Error(err) + } +} + +func (p *JavaTLSProgram) Start() { + var err error + p.cleanupExec, err = p.processMonitor.Subscribe(&monitor.ProcessCallback{ + Event: monitor.EXEC, + Metadata: monitor.NAME, + Regex: regexp.MustCompile("^java$"), + Callback: newJavaProcess, + }) + if err != nil { + log.Errorf("process monitor Subscribe() error: %s", err) + return + } +} + +func (p *JavaTLSProgram) Stop() { + if p.cleanupExec != nil { + p.cleanupExec() + } +} diff --git a/pkg/network/protocols/http/ebpf_main.go b/pkg/network/protocols/http/ebpf_main.go index 6dcdf021e3e21..f8394be131628 100644 --- a/pkg/network/protocols/http/ebpf_main.go +++ b/pkg/network/protocols/http/ebpf_main.go @@ -11,10 +11,8 @@ package http import ( "fmt" "math" - "os" "github.com/cilium/ebpf" - "github.com/iovisor/gobpf/pkg/cpupossible" "golang.org/x/sys/unix" manager "github.com/DataDog/ebpf-manager" @@ -24,21 +22,21 @@ import ( "github.com/DataDog/datadog-agent/pkg/network/config" netebpf "github.com/DataDog/datadog-agent/pkg/network/ebpf" "github.com/DataDog/datadog-agent/pkg/network/ebpf/probes" + "github.com/DataDog/datadog-agent/pkg/network/protocols/events" errtelemetry "github.com/DataDog/datadog-agent/pkg/network/telemetry" "github.com/DataDog/datadog-agent/pkg/util/log" ) const ( - httpInFlightMap = "http_in_flight" - httpBatchesMap = "http_batches" - httpBatchStateMap = "http_batch_state" - httpBatchEvents = "http_batch_events" + httpInFlightMap = "http_in_flight" // ELF section of the BPF_PROG_TYPE_SOCKET_FILTER program used // to classify protocols and dispatch the correct handlers. protocolDispatcherSocketFilterSection = "socket/protocol_dispatcher" protocolDispatcherSocketFilterFunction = "socket__protocol_dispatcher" protocolDispatcherProgramsMap = "protocols_progs" + dispatcherConnectionProtocolMap = "dispatcher_connection_protocol" + connectionStatesMap = "connection_states" httpSocketFilter = "socket/http_filter" @@ -47,11 +45,7 @@ const ( // enough for typical workloads (e.g. some amount of processes blocked on // the accept syscall). maxActive = 128 - - // size of the channel containing completed http_notification_objects - batchNotificationsChanSize = 100 - - probeUID = "http" + probeUID = "http" ) type ebpfProgram struct { @@ -62,8 +56,6 @@ type ebpfProgram struct { subprograms []subprogram probesResolvers []probeResolver mapCleaner *ddebpf.MapCleaner - - batchCompletionHandler *ddebpf.PerfHandler } type probeResolver interface { @@ -116,35 +108,21 @@ func newEBPFProgram(c *config.Config, offsets []manager.ConstantEditor, sockFD * return nil, err } - batchCompletionHandler := ddebpf.NewPerfHandler(batchNotificationsChanSize) mgr := &manager.Manager{ Maps: []*manager.Map{ {Name: httpInFlightMap}, - {Name: httpBatchesMap}, - {Name: httpBatchStateMap}, {Name: sslSockByCtxMap}, {Name: protocolDispatcherProgramsMap}, {Name: "ssl_read_args"}, {Name: "bio_new_socket_args"}, {Name: "fd_by_ssl_bio"}, {Name: "ssl_ctx_by_pid_tgid"}, - }, - PerfMaps: []*manager.PerfMap{ - { - Map: manager.Map{Name: httpBatchEvents}, - PerfMapOptions: manager.PerfMapOptions{ - PerfRingBufferSize: 256 * os.Getpagesize(), - Watermark: 1, - RecordHandler: batchCompletionHandler.RecordHandler, - LostHandler: batchCompletionHandler.LostHandler, - RecordGetter: batchCompletionHandler.RecordGetter, - }, - }, + {Name: connectionStatesMap}, }, Probes: []*manager.Probe{ { ProbeIdentificationPair: manager.ProbeIdentificationPair{ - EBPFSection: string(probes.TCPSendMsg), + EBPFSection: probes.TCPSendMsg, EBPFFuncName: "kprobe__tcp_sendmsg", UID: probeUID, }, @@ -167,28 +145,31 @@ func newEBPFProgram(c *config.Config, offsets []manager.ConstantEditor, sockFD * }, } - subprogramProbesResolvers := make([]probeResolver, 0, 2) - subprograms := make([]subprogram, 0, 2) + subprogramProbesResolvers := make([]probeResolver, 0, 3) + subprograms := make([]subprogram, 0, 3) goTLSProg := newGoTLSProgram(c) subprogramProbesResolvers = append(subprogramProbesResolvers, goTLSProg) if goTLSProg != nil { subprograms = append(subprograms, goTLSProg) } + javaTLSProg := newJavaTLSProgram(c) + subprogramProbesResolvers = append(subprogramProbesResolvers, javaTLSProg) + if javaTLSProg != nil { + subprograms = append(subprograms, javaTLSProg) + } openSSLProg := newSSLProgram(c, sockFD) subprogramProbesResolvers = append(subprogramProbesResolvers, openSSLProg) if openSSLProg != nil { subprograms = append(subprograms, openSSLProg) } - program := &ebpfProgram{ - Manager: errtelemetry.NewManager(mgr, bpfTelemetry), - bytecode: bc, - cfg: c, - offsets: offsets, - batchCompletionHandler: batchCompletionHandler, - subprograms: subprograms, - probesResolvers: subprogramProbesResolvers, + Manager: errtelemetry.NewManager(mgr, bpfTelemetry), + bytecode: bc, + cfg: c, + offsets: offsets, + subprograms: subprograms, + probesResolvers: subprogramProbesResolvers, } return program, nil @@ -215,11 +196,6 @@ func (e *ebpfProgram) Init() error { s.ConfigureManager(e.Manager) } - onlineCPUs, err := cpupossible.Get() - if err != nil { - return fmt.Errorf("couldn't determine number of CPUs: %w", err) - } - kprobeAttachMethod := manager.AttachKprobeWithPerfEventOpen if e.cfg.AttachKprobesWithKprobeEventsABI { kprobeAttachMethod = manager.AttachKprobeWithPerfEventOpen @@ -236,9 +212,14 @@ func (e *ebpfProgram) Init() error { MaxEntries: uint32(e.cfg.MaxTrackedConnections), EditorFlag: manager.EditMaxEntries, }, - httpBatchesMap: { + connectionStatesMap: { Type: ebpf.Hash, - MaxEntries: uint32(len(onlineCPUs) * HTTPBatchPages), + MaxEntries: uint32(e.cfg.MaxTrackedConnections), + EditorFlag: manager.EditMaxEntries, + }, + dispatcherConnectionProtocolMap: { + Type: ebpf.Hash, + MaxEntries: uint32(e.cfg.MaxTrackedConnections), EditorFlag: manager.EditMaxEntries, }, }, @@ -253,7 +234,7 @@ func (e *ebpfProgram) Init() error { }, &manager.ProbeSelector{ ProbeIdentificationPair: manager.ProbeIdentificationPair{ - EBPFSection: string(probes.TCPSendMsg), + EBPFSection: probes.TCPSendMsg, EBPFFuncName: "kprobe__tcp_sendmsg", UID: probeUID, }, @@ -274,7 +255,10 @@ func (e *ebpfProgram) Init() error { s.ConfigureOptions(&options) } - err = e.InitWithOptions(e.bytecode, options) + // configure event stream + events.Configure("http", e.Manager.Manager, &options) + + err := e.InitWithOptions(e.bytecode, options) if err != nil { return err } @@ -300,7 +284,6 @@ func (e *ebpfProgram) Start() error { func (e *ebpfProgram) Close() error { e.mapCleaner.Stop() err := e.Stop(manager.CleanAll) - e.batchCompletionHandler.Stop() for _, s := range e.subprograms { s.Stop() } diff --git a/pkg/network/protocols/http/ebpf_ssl.go b/pkg/network/protocols/http/ebpf_ssl.go index 4fae8c99bd209..c171a83138db9 100644 --- a/pkg/network/protocols/http/ebpf_ssl.go +++ b/pkg/network/protocols/http/ebpf_ssl.go @@ -9,11 +9,10 @@ package http import ( + "debug/elf" "os" "regexp" - "strconv" - - "github.com/twmb/murmur3" + "strings" manager "github.com/DataDog/ebpf-manager" "github.com/cilium/ebpf" @@ -21,7 +20,9 @@ import ( ddebpf "github.com/DataDog/datadog-agent/pkg/ebpf" "github.com/DataDog/datadog-agent/pkg/network/config" "github.com/DataDog/datadog-agent/pkg/network/ebpf/probes" + "github.com/DataDog/datadog-agent/pkg/network/go/bininspect" errtelemetry "github.com/DataDog/datadog-agent/pkg/network/telemetry" + "github.com/DataDog/datadog-agent/pkg/util/common" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -253,7 +254,7 @@ func newSSLProgram(c *config.Config, sockFDMap *ebpf.Map) *sslProgram { return &sslProgram{ cfg: c, sockFDMap: sockFDMap, - perfHandler: ddebpf.NewPerfHandler(batchNotificationsChanSize), + perfHandler: ddebpf.NewPerfHandler(100), } } @@ -291,7 +292,6 @@ func (o *sslProgram) ConfigureManager(m *errtelemetry.Manager) { } func (o *sslProgram) ConfigureOptions(options *manager.Options) { - options.MapSpecEditors[sslSockByCtxMap] = manager.MapSpecEditor{ Type: ebpf.Hash, MaxEntries: uint32(o.cfg.MaxTrackedConnections), @@ -318,12 +318,12 @@ func (o *sslProgram) ConfigureOptions(options *manager.Options) { options.MapEditors = make(map[string]*ebpf.Map) } - options.MapEditors[string(probes.SockByPidFDMap)] = o.sockFDMap + options.MapEditors[probes.SockByPidFDMap] = o.sockFDMap } func (o *sslProgram) Start() { // Setup shared library watcher and configure the appropriate callbacks - o.watcher = newSOWatcher(o.cfg.ProcRoot, o.perfHandler, + o.watcher = newSOWatcher(o.perfHandler, soRule{ re: regexp.MustCompile(`libssl.so`), registerCB: addHooks(o.manager, openSSLProbes), @@ -348,11 +348,42 @@ func (o *sslProgram) Stop() { o.perfHandler.Stop() } -func addHooks(m *errtelemetry.Manager, probes []manager.ProbesSelector) func(string) error { - return func(libPath string) error { - uid := getUID(libPath) +func addHooks(m *errtelemetry.Manager, probes []manager.ProbesSelector) func(pathIdentifier, string, string) error { + return func(id pathIdentifier, root string, path string) error { + uid := getUID(id) + + elfFile, err := elf.Open(root + path) + if err != nil { + return err + } + defer elfFile.Close() + symbolsSet := make(common.StringSet, 0) + symbolsSetBestEffort := make(common.StringSet, 0) for _, singleProbe := range probes { + _, isBestEffort := singleProbe.(*manager.BestEffort) + for _, selector := range singleProbe.GetProbesIdentificationPairList() { + sp := strings.Split(selector.EBPFSection, "/") + symbol := sp[len(sp)-1] + if len(symbol) == 0 { + continue + } + if isBestEffort { + symbolsSetBestEffort[symbol] = struct{}{} + } else { + symbolsSet[symbol] = struct{}{} + } + } + } + symbolMap, err := bininspect.GetAllSymbolsByName(elfFile, symbolsSet) + if err != nil { + return err + } + /* Best effort to resolve symbols, so we don't care about the error */ + symbolMapBestEffort, _ := bininspect.GetAllSymbolsByName(elfFile, symbolsSetBestEffort) + + for _, singleProbe := range probes { + _, isBestEffort := singleProbe.(*manager.BestEffort) for _, selector := range singleProbe.GetProbesIdentificationPairList() { identifier := manager.ProbeIdentificationPair{ EBPFSection: selector.EBPFSection, @@ -372,9 +403,30 @@ func addHooks(m *errtelemetry.Manager, probes []manager.ProbesSelector) func(str continue } + sp := strings.Split(selector.EBPFSection, "/") + symbol := sp[len(sp)-1] + if len(symbol) == 0 { + continue + } + + sym := symbolMap[symbol] + if isBestEffort { + sym, found = symbolMapBestEffort[symbol] + if !found { + continue + } + } + manager.SanitizeUprobeAddresses(elfFile, []elf.Symbol{sym}) + offset, err := bininspect.SymbolToOffset(elfFile, sym) + if err != nil { + return err + } + newProbe := &manager.Probe{ ProbeIdentificationPair: identifier, - BinaryPath: libPath, + BinaryPath: root + path, + UprobeOffset: uint64(offset), + HookFuncName: symbol, } _ = m.AddHook("", newProbe) } @@ -387,9 +439,9 @@ func addHooks(m *errtelemetry.Manager, probes []manager.ProbesSelector) func(str } } -func removeHooks(m *errtelemetry.Manager, probes []manager.ProbesSelector) func(string) error { - return func(libPath string) error { - uid := getUID(libPath) +func removeHooks(m *errtelemetry.Manager, probes []manager.ProbesSelector) func(pathIdentifier) error { + return func(lib pathIdentifier) error { + uid := getUID(lib) for _, singleProbe := range probes { for _, selector := range singleProbe.GetProbesIdentificationPairList() { identifier := manager.ProbeIdentificationPair{ @@ -417,14 +469,17 @@ func removeHooks(m *errtelemetry.Manager, probes []manager.ProbesSelector) func( } } -func getUID(libPath string) string { - sum := murmur3.StringSum64(libPath) - hash := strconv.FormatInt(int64(sum), 16) - if len(hash) >= 5 { - return hash[len(hash)-5:] - } - - return libPath +// getUID() return a key of length 5 as the kernel uprobe registration path is limited to a length of 64 +// ebpf-manager/utils.go:GenerateEventName() MaxEventNameLen = 64 +// MAX_EVENT_NAME_LEN (linux/kernel/trace/trace.h) +// +// Length 5 is arbitrary value as the full string of the eventName format is +// +// fmt.Sprintf("%s_%.*s_%s_%s", probeType, maxFuncNameLen, functionName, UID, attachPIDstr) +// +// functionName is variable but with a minimum guarantee of 10 chars +func getUID(lib pathIdentifier) string { + return lib.Key()[:5] } func (*sslProgram) GetAllUndefinedProbes() []manager.ProbeIdentificationPair { diff --git a/pkg/network/protocols/http/etw_http_service.go b/pkg/network/protocols/http/etw_http_service.go index 7e735f7f1281a..00d89769b5f9c 100644 --- a/pkg/network/protocols/http/etw_http_service.go +++ b/pkg/network/protocols/http/etw_http_service.go @@ -389,7 +389,6 @@ func completeReqRespTracking(eventInfo *etw.DDEtwEventInfo, httpConnLink *HttpCo // ----------------------------------------------------------- // HttpService ETW Event #21 (HTTPConnectionTraceTaskConnConn) -// func httpCallbackOnHTTPConnectionTraceTaskConnConn(eventInfo *etw.DDEtwEventInfo) { if HttpServiceLogVerbosity == HttpServiceLogVeryVerbose { reportHttpCallbackEvents(eventInfo, true) @@ -486,7 +485,7 @@ func httpCallbackOnHTTPConnectionTraceTaskConnConn(eventInfo *etw.DDEtwEventInfo connOpen.conn.tup.Family = binary.LittleEndian.Uint16(userData[12:14]) connOpen.conn.tup.SrvPort = binary.BigEndian.Uint16(userData[14:16]) copy(connOpen.conn.tup.SrvAddr[:], userData[20:36]) - connOpen.conn.tup.CliPort = binary.BigEndian.Uint16(userData[36:48]) + connOpen.conn.tup.CliPort = binary.BigEndian.Uint16(userData[46:48]) copy(connOpen.conn.tup.CliAddr[:], userData[52:68]) } @@ -512,7 +511,6 @@ func httpCallbackOnHTTPConnectionTraceTaskConnConn(eventInfo *etw.DDEtwEventInfo // ------------------------------------------------------------- // HttpService ETW Event #23 (HTTPConnectionTraceTaskConnClose) -// func httpCallbackOnHTTPConnectionTraceTaskConnClose(eventInfo *etw.DDEtwEventInfo) { if HttpServiceLogVerbosity == HttpServiceLogVeryVerbose { reportHttpCallbackEvents(eventInfo, true) @@ -554,7 +552,6 @@ func httpCallbackOnHTTPConnectionTraceTaskConnClose(eventInfo *etw.DDEtwEventInf // ----------------------------------------------------------- // HttpService ETW Event #1 (HTTPRequestTraceTaskRecvReq) -// func httpCallbackOnHTTPRequestTraceTaskRecvReq(eventInfo *etw.DDEtwEventInfo) { if HttpServiceLogVerbosity == HttpServiceLogVeryVerbose { reportHttpCallbackEvents(eventInfo, true) @@ -621,7 +618,6 @@ func httpCallbackOnHTTPRequestTraceTaskRecvReq(eventInfo *etw.DDEtwEventInfo) { // ----------------------------------------------------------- // HttpService ETW Event #2 (HTTPRequestTraceTaskParse) -// func httpCallbackOnHTTPRequestTraceTaskParse(eventInfo *etw.DDEtwEventInfo) { if HttpServiceLogVerbosity == HttpServiceLogVeryVerbose { reportHttpCallbackEvents(eventInfo, true) @@ -682,7 +678,7 @@ func httpCallbackOnHTTPRequestTraceTaskParse(eventInfo *etw.DDEtwEventInfo) { // whole thing httpConnLink.http.RequestFragment = make([]byte, maxRequestFragmentBytes) httpConnLink.http.Txn.MaxRequestFragment = uint16(maxRequestFragmentBytes) - httpConnLink.http.RequestFragment[0] = 32 + httpConnLink.http.RequestFragment[0] = 32 // this is a leading space. // copy rest of arguments copy(httpConnLink.http.RequestFragment[1:], urlParsed.Path) @@ -700,7 +696,6 @@ func httpCallbackOnHTTPRequestTraceTaskParse(eventInfo *etw.DDEtwEventInfo) { // ----------------------------------------------------------- // HttpService ETW Event #3 (HTTPRequestTraceTaskDeliver) -// func httpCallbackOnHTTPRequestTraceTaskDeliver(eventInfo *etw.DDEtwEventInfo) { if HttpServiceLogVerbosity == HttpServiceLogVeryVerbose { reportHttpCallbackEvents(eventInfo, true) @@ -784,7 +779,6 @@ func httpCallbackOnHTTPRequestTraceTaskDeliver(eventInfo *etw.DDEtwEventInfo) { // ----------------------------------------------------------- // HttpService ETW Event #4, #8 (HTTPRequestTraceTaskFastResp, HTTPRequestTraceTaskRecvResp) -// func httpCallbackOnHTTPRequestTraceTaskRecvResp(eventInfo *etw.DDEtwEventInfo) { if HttpServiceLogVerbosity == HttpServiceLogVeryVerbose { reportHttpCallbackEvents(eventInfo, true) @@ -842,7 +836,6 @@ func httpCallbackOnHTTPRequestTraceTaskRecvResp(eventInfo *etw.DDEtwEventInfo) { // ----------------------------------------------------------- // HttpService ETW Event #16-17 (HTTPRequestTraceTaskSrvdFrmCache, HTTPRequestTraceTaskCachedNotModified) -// func httpCallbackOnHTTPRequestTraceTaskSrvdFrmCache(eventInfo *etw.DDEtwEventInfo) { if HttpServiceLogVerbosity == HttpServiceLogVeryVerbose { @@ -914,7 +907,6 @@ func httpCallbackOnHTTPRequestTraceTaskSrvdFrmCache(eventInfo *etw.DDEtwEventInf // ----------------------------------------------------------- // HttpService ETW Event #25 (HTTPCacheTraceTaskAddedCacheEntry) -// func httpCallbackOnHTTPCacheTraceTaskAddedCacheEntry(eventInfo *etw.DDEtwEventInfo) { if HttpServiceLogVerbosity == HttpServiceLogVeryVerbose { @@ -995,7 +987,6 @@ func httpCallbackOnHTTPCacheTraceTaskAddedCacheEntry(eventInfo *etw.DDEtwEventIn // ----------------------------------------------------------- // HttpService ETW Event #26 (HTTPCacheTraceTaskFlushedCache) -// func httpCallbackOnHTTPCacheTraceTaskFlushedCache(eventInfo *etw.DDEtwEventInfo) { if HttpServiceLogVerbosity == HttpServiceLogVeryVerbose { @@ -1054,7 +1045,6 @@ func httpCallbackOnHTTPCacheTraceTaskFlushedCache(eventInfo *etw.DDEtwEventInfo) // ----------------------------------------------------------- // HttpService ETW Event #10-14 (HTTPRequestTraceTaskXXXSendXXX) -// func httpCallbackOnHTTPRequestTraceTaskSend(eventInfo *etw.DDEtwEventInfo) { // We probably should use this event as a last event for a particular activity and use @@ -1074,7 +1064,6 @@ func httpCallbackOnHTTPRequestTraceTaskSend(eventInfo *etw.DDEtwEventInfo) { // ----------------------------------------------------------- // HttpService ETW Event #34 (EVENT_ID_HttpService_HTTPSSLTraceTaskSslConnEvent) -// func httpCallbackOnHttpSslConnEvent(eventInfo *etw.DDEtwEventInfo) { if HttpServiceLogVerbosity == HttpServiceLogVeryVerbose { reportHttpCallbackEvents(eventInfo, true) @@ -1293,6 +1282,7 @@ func SetMaxRequestBytes(maxRequestBytes uint64) { } func SetEnabledProtocols(http, https bool) { + captureHTTP = http captureHTTPS = https } func (hei *httpEtwInterface) OnStart() { diff --git a/pkg/network/protocols/http/gotls/go_tls_types.go b/pkg/network/protocols/http/gotls/go_tls_types.go index 19243b3a09f6e..ed87488a23f9b 100644 --- a/pkg/network/protocols/http/gotls/go_tls_types.go +++ b/pkg/network/protocols/http/gotls/go_tls_types.go @@ -9,7 +9,7 @@ package gotls /* -#include "../../ebpf/c/protocols/go-tls-types.h" +#include "../../ebpf/c/protocols/tls/go-tls-types.h" */ import "C" diff --git a/pkg/network/protocols/http/http_statkeeper.go b/pkg/network/protocols/http/http_statkeeper.go index 94eb4d2b87517..e961f427ad31c 100644 --- a/pkg/network/protocols/http/http_statkeeper.go +++ b/pkg/network/protocols/http/http_statkeeper.go @@ -10,6 +10,7 @@ package http import ( "strconv" + "sync" "time" "github.com/DataDog/datadog-agent/pkg/network/config" @@ -18,6 +19,7 @@ import ( ) type httpStatKeeper struct { + mux sync.Mutex stats map[Key]*RequestStats incomplete *incompleteBuffer maxEntries int @@ -50,19 +52,22 @@ func newHTTPStatkeeper(c *config.Config, telemetry *telemetry) *httpStatKeeper { } } -func (h *httpStatKeeper) Process(transactions []httpTX) { - for i := range transactions { - tx := transactions[i] - if tx.Incomplete() { - h.incomplete.Add(tx) - continue - } +func (h *httpStatKeeper) Process(tx httpTX) { + h.mux.Lock() + defer h.mux.Unlock() - h.add(tx) + if tx.Incomplete() { + h.incomplete.Add(tx) + return } + + h.add(tx) } func (h *httpStatKeeper) GetAndResetAllStats() map[Key]*RequestStats { + h.mux.Lock() + defer h.mux.Unlock() + for _, tx := range h.incomplete.Flush(time.Now()) { h.add(tx) } @@ -84,7 +89,7 @@ func (h *httpStatKeeper) add(tx httpTX) { return } - if Method(tx.RequestMethod()) == MethodUnknown { + if tx.Method() == MethodUnknown { h.telemetry.malformed.Add(1) if h.oversizedLogLimit.ShouldLog() { log.Warnf("method should never be unknown: %s", tx.String()) @@ -118,14 +123,7 @@ func (h *httpStatKeeper) add(tx httpTX) { func (h *httpStatKeeper) newKey(tx httpTX, path string, fullPath bool) Key { return Key{ - KeyTuple: KeyTuple{ - SrcIPHigh: tx.SrcIPHigh(), - SrcIPLow: tx.SrcIPLow(), - SrcPort: tx.SrcPort(), - DstIPHigh: tx.DstIPHigh(), - DstIPLow: tx.DstIPLow(), - DstPort: tx.DstPort(), - }, + KeyTuple: tx.ConnTuple(), Path: Path{ Content: path, FullPath: fullPath, diff --git a/pkg/network/protocols/http/http_statkeeper_test.go b/pkg/network/protocols/http/http_statkeeper_test.go index cf444cd202699..bc3cc2a7fae2f 100644 --- a/pkg/network/protocols/http/http_statkeeper_test.go +++ b/pkg/network/protocols/http/http_statkeeper_test.go @@ -27,7 +27,6 @@ func TestProcessHTTPTransactions(t *testing.T) { tel, err := newTelemetry() require.NoError(t, err) sk := newHTTPStatkeeper(cfg, tel) - txs := make([]httpTX, 100) srcString := "1.1.1.1" dstString := "2.2.2.2" @@ -43,12 +42,11 @@ func TestProcessHTTPTransactions(t *testing.T) { for j := 0; j < 10; j++ { statusCode := (j%5 + 1) * 100 latency := time.Duration(j%5+1) * time.Millisecond - txs[i*10+j] = generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, path, statusCode, latency) + tx := generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, path, statusCode, latency) + sk.Process(tx) } } - sk.Process(txs) - stats := sk.GetAndResetAllStats() assert.Equal(t, 0, len(sk.stats)) assert.Equal(t, numPaths, len(stats)) @@ -85,12 +83,11 @@ func BenchmarkProcessSameConn(b *testing.B) { 404, 30*time.Millisecond, ) - transactions := []httpTX{tx} b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - sk.Process(transactions) + sk.Process(tx) } } @@ -126,7 +123,9 @@ func TestPathProcessing(t *testing.T) { generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, "/foobar", statusCode, latency), generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, "/payment/123", statusCode, latency), } - sk.Process(transactions) + for _, tx := range transactions { + sk.Process(tx) + } stats := sk.GetAndResetAllStats() require.Len(t, stats, 1) @@ -149,7 +148,9 @@ func TestPathProcessing(t *testing.T) { generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, "/prefix/users/2", statusCode, latency), generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, "/prefix/users/3", statusCode, latency), } - sk.Process(transactions) + for _, tx := range transactions { + sk.Process(tx) + } stats := sk.GetAndResetAllStats() require.Len(t, stats, 1) @@ -178,7 +179,9 @@ func TestPathProcessing(t *testing.T) { generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, "/users/ana/payment/123", statusCode, latency), generateIPv4HTTPTransaction(sourceIP, destIP, sourcePort, destPort, "/users/bob/payment/456", statusCode, latency), } - sk.Process(transactions) + for _, tx := range transactions { + sk.Process(tx) + } stats := sk.GetAndResetAllStats() require.Len(t, stats, 1) @@ -208,9 +211,8 @@ func TestHTTPCorrectness(t *testing.T) { 404, 30*time.Millisecond, ) - transactions := []httpTX{tx} - sk.Process(transactions) + sk.Process(tx) tel.log() require.Equal(t, int64(1), tel.malformed.Get()) @@ -234,10 +236,9 @@ func TestHTTPCorrectness(t *testing.T) { 404, 30*time.Millisecond, ) - tx.SetRequestMethod(0) /* This is MethodUnknown */ - transactions := []httpTX{tx} + tx.SetRequestMethod(MethodUnknown) - sk.Process(transactions) + sk.Process(tx) tel.log() require.Equal(t, int64(1), tel.malformed.Get()) @@ -261,9 +262,8 @@ func TestHTTPCorrectness(t *testing.T) { 404, 0, ) - transactions := []httpTX{tx} - sk.Process(transactions) + sk.Process(tx) tel.log() require.Equal(t, int64(1), tel.malformed.Get()) diff --git a/pkg/network/protocols/http/http_types.go b/pkg/network/protocols/http/http_types.go index aa6fc932fe408..06eb979098ad6 100644 --- a/pkg/network/protocols/http/http_types.go +++ b/pkg/network/protocols/http/http_types.go @@ -10,38 +10,36 @@ package http /* #include "../../ebpf/c/tracer.h" -#include "../../ebpf/c/protocols/tags-types.h" -#include "../../ebpf/c/protocols/http-types.h" -#include "../../ebpf/c/protocols/protocol-classification-defs.h" +#include "../../ebpf/c/protocols/tls/tags-types.h" +#include "../../ebpf/c/protocols/http/types.h" +#include "../../ebpf/c/protocols/classification/defs.h" */ import "C" type httpConnTuple C.conn_tuple_t -type httpBatchState C.http_batch_state_t type sslSock C.ssl_sock_t type sslReadArgs C.ssl_read_args_t type ebpfHttpTx C.http_transaction_t -type httpBatch C.http_batch_t -type httpBatchKey C.http_batch_key_t type libPath C.lib_path_t type ProtocolType C.protocol_t +// Add tests to TestProtocolValue const ( - ProtocolUnknown ProtocolType = C.PROTOCOL_UNKNOWN - ProtocolHTTP ProtocolType = C.PROTOCOL_HTTP - ProtocolHTTP2 ProtocolType = C.PROTOCOL_HTTP2 - ProtocolTLS ProtocolType = C.PROTOCOL_TLS - ProtocolAMQP ProtocolType = C.PROTOCOL_AMQP - ProtocolRedis ProtocolType = C.PROTOCOL_REDIS - ProtocolMax ProtocolType = C.MAX_PROTOCOLS + ProtocolUnknown ProtocolType = C.PROTOCOL_UNKNOWN + ProtocolHTTP ProtocolType = C.PROTOCOL_HTTP + ProtocolHTTP2 ProtocolType = C.PROTOCOL_HTTP2 + ProtocolTLS ProtocolType = C.PROTOCOL_TLS + ProtocolMONGO ProtocolType = C.PROTOCOL_MONGO + ProtocolPostgres ProtocolType = C.PROTOCOL_POSTGRES + ProtocolAMQP ProtocolType = C.PROTOCOL_AMQP + ProtocolRedis ProtocolType = C.PROTOCOL_REDIS + ProtocolMax ProtocolType = C.MAX_PROTOCOLS ) const ( - HTTPBatchSize = C.HTTP_BATCH_SIZE - HTTPBatchPages = C.HTTP_BATCH_PAGES HTTPBufferSize = C.HTTP_BUFFER_SIZE libPathMaxSize = C.LIB_PATH_MAX_SIZE diff --git a/pkg/network/protocols/http/http_types_linux.go b/pkg/network/protocols/http/http_types_linux.go index 6511f3b3c806d..6fd4e7f3f0fee 100644 --- a/pkg/network/protocols/http/http_types_linux.go +++ b/pkg/network/protocols/http/http_types_linux.go @@ -14,10 +14,6 @@ type httpConnTuple struct { Pid uint32 Metadata uint32 } -type httpBatchState struct { - Idx uint64 - To_flush uint64 -} type sslSock struct { Tup httpConnTuple Fd uint32 @@ -39,15 +35,6 @@ type ebpfHttpTx struct { Tcp_seq uint32 Tags uint64 } -type httpBatch struct { - Idx uint64 - Pos uint8 - Txs [15]ebpfHttpTx -} -type httpBatchKey struct { - Cpu uint32 - Num uint32 -} type libPath struct { Pid uint32 @@ -58,18 +45,18 @@ type libPath struct { type ProtocolType uint8 const ( - ProtocolUnknown ProtocolType = 0x1 - ProtocolHTTP ProtocolType = 0x2 - ProtocolHTTP2 ProtocolType = 0x3 - ProtocolTLS ProtocolType = 0x4 - ProtocolAMQP ProtocolType = 0x8 - ProtocolRedis ProtocolType = 0x9 - ProtocolMax ProtocolType = 0xa + ProtocolUnknown ProtocolType = 0x1 + ProtocolHTTP ProtocolType = 0x2 + ProtocolHTTP2 ProtocolType = 0x3 + ProtocolTLS ProtocolType = 0x4 + ProtocolMONGO ProtocolType = 0x6 + ProtocolPostgres ProtocolType = 0x7 + ProtocolAMQP ProtocolType = 0x8 + ProtocolRedis ProtocolType = 0x9 + ProtocolMax ProtocolType = 0xa ) const ( - HTTPBatchSize = 0xf - HTTPBatchPages = 0x3 HTTPBufferSize = 0xa0 libPathMaxSize = 0x78 diff --git a/pkg/network/protocols/http/incomplete_stats.go b/pkg/network/protocols/http/incomplete_stats.go index ab2b4dce675a8..cf879dac99ec5 100644 --- a/pkg/network/protocols/http/incomplete_stats.go +++ b/pkg/network/protocols/http/incomplete_stats.go @@ -70,10 +70,11 @@ func newIncompleteBuffer(c *config.Config, telemetry *telemetry) *incompleteBuff } func (b *incompleteBuffer) Add(tx httpTX) { + connTuple := tx.ConnTuple() key := KeyTuple{ - SrcIPHigh: uint64(tx.SrcIPHigh()), - SrcIPLow: uint64(tx.SrcIPLow()), - SrcPort: uint16(tx.SrcPort()), + SrcIPHigh: connTuple.SrcIPHigh, + SrcIPLow: connTuple.SrcIPLow, + SrcPort: connTuple.SrcPort, } parts, ok := b.data[key] diff --git a/pkg/network/protocols/http/model.go b/pkg/network/protocols/http/model.go index f097d9b199c8b..00a71925b0cb6 100644 --- a/pkg/network/protocols/http/model.go +++ b/pkg/network/protocols/http/model.go @@ -9,17 +9,11 @@ package http type httpTX interface { - ReqFragment() []byte StatusClass() int RequestLatency() float64 - isIPV4() bool - SrcIPLow() uint64 - SrcIPHigh() uint64 - SrcPort() uint16 - DstIPLow() uint64 - DstIPHigh() uint64 - DstPort() uint16 + ConnTuple() KeyTuple Method() Method + SetRequestMethod(Method) StatusCode() uint16 SetStatusCode(uint16) StaticTags() uint64 @@ -30,6 +24,4 @@ type httpTX interface { ResponseLastSeen() uint64 SetResponseLastSeen(ls uint64) RequestStarted() uint64 - SetRequestMethod(uint32) - RequestMethod() uint32 } diff --git a/pkg/network/protocols/http/model_linux.go b/pkg/network/protocols/http/model_linux.go index bf05d4ef8e30a..cde0006fd886e 100644 --- a/pkg/network/protocols/http/model_linux.go +++ b/pkg/network/protocols/http/model_linux.go @@ -65,36 +65,15 @@ func (tx *ebpfHttpTx) Incomplete() bool { return tx.Request_started == 0 || tx.Response_status_code == 0 } -func (tx *ebpfHttpTx) ReqFragment() []byte { - return tx.Request_fragment[:] -} - -func (tx *ebpfHttpTx) isIPV4() bool { - return true -} - -func (tx *ebpfHttpTx) SrcIPHigh() uint64 { - return tx.Tup.Saddr_h -} - -func (tx *ebpfHttpTx) SrcIPLow() uint64 { - return tx.Tup.Saddr_l -} - -func (tx *ebpfHttpTx) SrcPort() uint16 { - return tx.Tup.Sport -} - -func (tx *ebpfHttpTx) DstIPHigh() uint64 { - return tx.Tup.Daddr_h -} - -func (tx *ebpfHttpTx) DstIPLow() uint64 { - return tx.Tup.Daddr_l -} - -func (tx *ebpfHttpTx) DstPort() uint16 { - return tx.Tup.Dport +func (tx *ebpfHttpTx) ConnTuple() KeyTuple { + return KeyTuple{ + SrcIPHigh: tx.Tup.Saddr_h, + SrcIPLow: tx.Tup.Saddr_l, + DstIPHigh: tx.Tup.Daddr_h, + DstIPLow: tx.Tup.Daddr_l, + SrcPort: tx.Tup.Sport, + DstPort: tx.Tup.Dport, + } } func (tx *ebpfHttpTx) Method() Method { @@ -121,11 +100,7 @@ func (tx *ebpfHttpTx) RequestStarted() uint64 { return tx.Request_started } -func (tx *ebpfHttpTx) RequestMethod() uint32 { - return uint32(tx.Request_method) -} - -func (tx *ebpfHttpTx) SetRequestMethod(m uint32) { +func (tx *ebpfHttpTx) SetRequestMethod(m Method) { tx.Request_method = uint8(m) } @@ -149,11 +124,6 @@ func (tx *ebpfHttpTx) String() string { return output.String() } -// Transactions returns the slice of HTTP transactions embedded in the batch -func (batch *httpBatch) Transactions() []ebpfHttpTx { - return batch.Txs[:] -} - // below is copied from pkg/trace/stats/statsraw.go // 10 bits precision (any value will be +/- 1/1024) const roundMask uint64 = 1 << 10 diff --git a/pkg/network/protocols/http/model_windows.go b/pkg/network/protocols/http/model_windows.go index 5debdb3c3ac5b..2a21cba69fdbe 100644 --- a/pkg/network/protocols/http/model_windows.go +++ b/pkg/network/protocols/http/model_windows.go @@ -12,8 +12,6 @@ import ( "bytes" "encoding/binary" - //"encoding/hex" - "errors" "fmt" "strconv" "strings" @@ -23,9 +21,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/network/driver" ) -// errLostBatch isn't a valid error in windows -var errLostBatch = errors.New("invalid error") - // StatusClass returns an integer representing the status code class // Example: a 404 would return 400 func statusClass(statusCode uint16) int { @@ -77,11 +72,6 @@ func dstIPHigh(tup *driver.ConnTupleType) uint64 { // driverHttpTX interface // -// ReqFragment returns a byte slice containing the first HTTPBufferSize bytes of the request -func (tx *WinHttpTransaction) ReqFragment() []byte { - return tx.RequestFragment[:] -} - func (tx *WinHttpTransaction) StatusClass() int { return statusClass(tx.Txn.ResponseStatusCode) } @@ -90,32 +80,15 @@ func (tx *WinHttpTransaction) RequestLatency() float64 { return requestLatency(tx.Txn.ResponseLastSeen, tx.Txn.RequestStarted) } -func (tx *WinHttpTransaction) isIPV4() bool { - return isIPV4(&tx.Txn.Tup) -} - -func (tx *WinHttpTransaction) SrcIPLow() uint64 { - return srcIPLow(&tx.Txn.Tup) -} - -func (tx *WinHttpTransaction) SrcIPHigh() uint64 { - return srcIPHigh(&tx.Txn.Tup) -} - -func (tx *WinHttpTransaction) SrcPort() uint16 { - return tx.Txn.Tup.CliPort -} - -func (tx *WinHttpTransaction) DstIPLow() uint64 { - return dstIPLow(&tx.Txn.Tup) -} - -func (tx *WinHttpTransaction) DstIPHigh() uint64 { - return dstIPHigh(&tx.Txn.Tup) -} - -func (tx *WinHttpTransaction) DstPort() uint16 { - return tx.Txn.Tup.SrvPort +func (tx *WinHttpTransaction) ConnTuple() KeyTuple { + return KeyTuple{ + SrcIPHigh: srcIPHigh(&tx.Txn.Tup), + SrcIPLow: srcIPLow(&tx.Txn.Tup), + DstIPHigh: dstIPHigh(&tx.Txn.Tup), + DstIPLow: dstIPLow(&tx.Txn.Tup), + SrcPort: tx.Txn.Tup.CliPort, + DstPort: tx.Txn.Tup.SrvPort, + } } func (tx *WinHttpTransaction) Method() Method { @@ -183,7 +156,7 @@ func (tx *WinHttpTransaction) Path(buffer []byte) ([]byte, bool) { } n := copy(buffer, b[:j]) // indicate if we knowingly captured the entire path - fullPath := n < len(b) + fullPath := n <= len(b) return buffer[:n], fullPath } @@ -203,12 +176,8 @@ func (tx *WinHttpTransaction) RequestStarted() uint64 { return tx.Txn.RequestStarted } -func (tx *WinHttpTransaction) RequestMethod() uint32 { - return tx.Txn.RequestMethod -} - -func (tx *WinHttpTransaction) SetRequestMethod(m uint32) { - tx.Txn.RequestMethod = m +func (tx *WinHttpTransaction) SetRequestMethod(m Method) { + tx.Txn.RequestMethod = uint32(m) } // below is copied from pkg/trace/stats/statsraw.go diff --git a/pkg/network/protocols/http/monitor.go b/pkg/network/protocols/http/monitor.go index 441087f17997f..b611cb315bc66 100644 --- a/pkg/network/protocols/http/monitor.go +++ b/pkg/network/protocols/http/monitor.go @@ -9,105 +9,90 @@ package http import ( + "errors" "fmt" - "sync" + "syscall" + "unsafe" "github.com/cilium/ebpf" manager "github.com/DataDog/ebpf-manager" - ddebpf "github.com/DataDog/datadog-agent/pkg/ebpf" "github.com/DataDog/datadog-agent/pkg/network/config" filterpkg "github.com/DataDog/datadog-agent/pkg/network/filter" + "github.com/DataDog/datadog-agent/pkg/network/protocols/events" errtelemetry "github.com/DataDog/datadog-agent/pkg/network/telemetry" "github.com/DataDog/datadog-agent/pkg/process/monitor" ) +var ( + startupError error +) + // Monitor is responsible for: // * Creating a raw socket and attaching an eBPF filter to it; -// * Polling a perf buffer that contains notifications about HTTP transaction batches ready to be read; -// * Querying these batches by doing a map lookup; +// * Consuming HTTP transaction "events" that are sent from Kernel space; // * Aggregating and emitting metrics based on the received HTTP transactions; type Monitor struct { - handler func([]httpTX) - - ebpfProgram *ebpfProgram - batchManager *batchManager - batchCompletionHandler *ddebpf.PerfHandler - telemetry *telemetry - processMonitor *monitor.ProcessMonitor - - pollRequests chan chan map[Key]*RequestStats - statkeeper *httpStatKeeper + consumer *events.Consumer + ebpfProgram *ebpfProgram + telemetry *telemetry + statkeeper *httpStatKeeper + processMonitor *monitor.ProcessMonitor // termination - mux sync.Mutex - eventLoopWG sync.WaitGroup closeFilterFn func() - stopped bool +} + +func setStartupErrorAndReturn(err error) error { + if err != nil { + err = fmt.Errorf("could not instantiate http monitor: %w", err) + startupError = err + } + + return err } // NewMonitor returns a new Monitor instance func NewMonitor(c *config.Config, offsets []manager.ConstantEditor, sockFD *ebpf.Map, bpfTelemetry *errtelemetry.EBPFTelemetry) (*Monitor, error) { + if !c.EnableHTTPMonitoring { + return nil, setStartupErrorAndReturn(fmt.Errorf("http monitoring is disabled")) + } + mgr, err := newEBPFProgram(c, offsets, sockFD, bpfTelemetry) if err != nil { - return nil, fmt.Errorf("error setting up http ebpf program: %s", err) + return nil, setStartupErrorAndReturn(fmt.Errorf("error setting up http ebpf program: %s", err)) } if err := mgr.Init(); err != nil { - return nil, fmt.Errorf("error initializing http ebpf program: %s", err) + return nil, setStartupErrorAndReturn(fmt.Errorf("error initializing http ebpf program: %s", err)) } filter, _ := mgr.GetProbe(manager.ProbeIdentificationPair{EBPFSection: protocolDispatcherSocketFilterSection, EBPFFuncName: protocolDispatcherSocketFilterFunction, UID: probeUID}) if filter == nil { - return nil, fmt.Errorf("error retrieving socket filter") + return nil, setStartupErrorAndReturn(fmt.Errorf("error retrieving socket filter")) } closeFilterFn, err := filterpkg.HeadlessSocketFilter(c, filter) if err != nil { - return nil, fmt.Errorf("error enabling HTTP traffic inspection: %s", err) - } - - batchMap, _, err := mgr.GetMap(httpBatchesMap) - if err != nil { - closeFilterFn() - return nil, err + return nil, setStartupErrorAndReturn(fmt.Errorf("error enabling HTTP traffic inspection: %s", err)) } - batchEventsMap, _, _ := mgr.GetMap(httpBatchEvents) - numCPUs := int(batchEventsMap.MaxEntries()) - telemetry, err := newTelemetry() if err != nil { closeFilterFn() - return nil, err - } - statkeeper := newHTTPStatkeeper(c, telemetry) - - handler := func(transactions []httpTX) { - if statkeeper != nil { - statkeeper.Process(transactions) - } - } - - batchManager, err := newBatchManager(batchMap, numCPUs) - if err != nil { - closeFilterFn() - return nil, fmt.Errorf("couldn't instantiate batch manager: %w", err) + return nil, setStartupErrorAndReturn(err) } + statkeeper := newHTTPStatkeeper(c, telemetry) processMonitor := monitor.GetProcessMonitor() return &Monitor{ - handler: handler, - ebpfProgram: mgr, - batchManager: batchManager, - batchCompletionHandler: mgr.batchCompletionHandler, - telemetry: telemetry, - pollRequests: make(chan chan map[Key]*RequestStats), - closeFilterFn: closeFilterFn, - statkeeper: statkeeper, - processMonitor: processMonitor, + ebpfProgram: mgr, + telemetry: telemetry, + closeFilterFn: closeFilterFn, + statkeeper: statkeeper, + processMonitor: processMonitor, }, nil } @@ -117,44 +102,50 @@ func (m *Monitor) Start() error { return nil } - if err := m.ebpfProgram.Start(); err != nil { - return err - } + var err error + + defer func() { + if err != nil { + if errors.Is(err, syscall.ENOMEM) { + err = fmt.Errorf("could not enable http monitoring: not enough memory to attach http ebpf socket filter. please consider raising the limit via sysctl -w net.core.optmem_max=") + } - m.eventLoopWG.Add(1) - go func() { - defer m.eventLoopWG.Done() - for { - select { - case dataEvent, ok := <-m.batchCompletionHandler.DataChannel: - if !ok { - return - } - - transactions, err := m.batchManager.GetTransactionsFrom(dataEvent) - m.process(transactions, err) - dataEvent.Done() - case _, ok := <-m.batchCompletionHandler.LostChannel: - if !ok { - return - } - - m.process(nil, errLostBatch) - case reply, ok := <-m.pollRequests: - if !ok { - return - } - - transactions := m.batchManager.GetPendingTransactions() - m.process(transactions, nil) - - m.telemetry.log() - reply <- m.statkeeper.GetAndResetAllStats() + if err != nil { + err = fmt.Errorf("could not enable http monitoring: %s", err) } + startupError = err } }() - return m.processMonitor.Initialize() + m.consumer, err = events.NewConsumer( + "http", + m.ebpfProgram.Manager.Manager, + m.process, + ) + if err != nil { + return err + } + m.consumer.Start() + + err = m.ebpfProgram.Start() + if err != nil { + return err + } + + // Need to explicitly save the error in `err` so the defer function could save the startup error. + err = m.processMonitor.Initialize() + return err +} + +func (m *Monitor) GetUSMStats() map[string]interface{} { + if m == nil { + return map[string]interface{}{ + "Error": startupError.Error(), + } + } + return map[string]interface{}{ + "last_check": m.telemetry.then, + } } // GetHTTPStats returns a map of HTTP stats stored in the following format: @@ -164,16 +155,9 @@ func (m *Monitor) GetHTTPStats() map[Key]*RequestStats { return nil } - m.mux.Lock() - defer m.mux.Unlock() - if m.stopped { - return nil - } - - reply := make(chan map[Key]*RequestStats, 1) - defer close(reply) - m.pollRequests <- reply - return <-reply + m.consumer.Sync() + m.telemetry.log() + return m.statkeeper.GetAndResetAllStats() } // Stop HTTP monitoring @@ -182,26 +166,16 @@ func (m *Monitor) Stop() { return } - m.mux.Lock() - defer m.mux.Unlock() - if m.stopped { - return - } - m.processMonitor.Stop() m.ebpfProgram.Close() + m.consumer.Stop() m.closeFilterFn() - close(m.pollRequests) - m.eventLoopWG.Wait() - m.stopped = true } -func (m *Monitor) process(transactions []httpTX, err error) { - m.telemetry.aggregate(transactions, err) - - if m.handler != nil && len(transactions) > 0 { - m.handler(transactions) - } +func (m *Monitor) process(data []byte) { + tx := (*ebpfHttpTx)(unsafe.Pointer(&data[0])) + m.telemetry.count(tx) + m.statkeeper.Process(tx) } // DumpMaps dumps the maps associated with the monitor diff --git a/pkg/network/protocols/http/monitor_test.go b/pkg/network/protocols/http/monitor_test.go index 036d8bea85c3d..53ed1467e5ede 100644 --- a/pkg/network/protocols/http/monitor_test.go +++ b/pkg/network/protocols/http/monitor_test.go @@ -22,6 +22,7 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/DataDog/datadog-agent/pkg/network/config" @@ -39,6 +40,16 @@ var ( emptyBody = []byte(nil) ) +func newHTTPTestMonitor(t *testing.T) *Monitor { + cfg := config.New() + cfg.EnableHTTPMonitoring = true + monitor, err := NewMonitor(cfg, nil, nil, nil) + require.NoError(t, err) + require.NoError(t, monitor.Start()) + t.Cleanup(monitor.Stop) + return monitor +} + func skipTestIfKernelNotSupported(t *testing.T) { currKernelVersion, err := kernel.HostVersion() require.NoError(t, err) @@ -53,10 +64,7 @@ func TestHTTPMonitorCaptureRequestMultipleTimes(t *testing.T) { srvDoneFn := testutil.HTTPServer(t, serverAddr, testutil.Options{}) - monitor, err := NewMonitor(config.New(), nil, nil, nil) - require.NoError(t, err) - require.NoError(t, monitor.Start()) - defer monitor.Stop() + monitor := newHTTPTestMonitor(t) client := nethttp.Client{} @@ -96,10 +104,7 @@ func TestHTTPMonitorLoadWithIncompleteBuffers(t *testing.T) { fastSrvDoneFn := testutil.HTTPServer(t, fastServerAddr, testutil.Options{}) - monitor, err := NewMonitor(config.New(), nil, nil, nil) - require.NoError(t, err) - require.NoError(t, monitor.Start()) - defer monitor.Stop() + monitor := newHTTPTestMonitor(t) abortedRequestFn := requestGenerator(t, fmt.Sprintf("%s/ignore", slowServerAddr), emptyBody) wg := sync.WaitGroup{} @@ -181,10 +186,7 @@ func TestHTTPMonitorIntegrationWithResponseBody(t *testing.T) { EnableKeepAlives: true, }) - monitor, err := NewMonitor(config.New(), nil, nil, nil) - require.NoError(t, err) - require.NoError(t, monitor.Start()) - defer monitor.Stop() + monitor := newHTTPTestMonitor(t) requestFn := requestGenerator(t, targetAddr, bytes.Repeat([]byte("a"), tt.requestBodySize)) var requests []*nethttp.Request @@ -245,10 +247,7 @@ func TestHTTPMonitorIntegrationSlowResponse(t *testing.T) { SlowResponse: slowResponseTimeout, }) - monitor, err := NewMonitor(config.New(), nil, nil, nil) - require.NoError(t, err) - require.NoError(t, monitor.Start()) - defer monitor.Stop() + monitor := newHTTPTestMonitor(t) // Perform a number of random requests req := requestGenerator(t, targetAddr, emptyBody)() @@ -319,11 +318,7 @@ func TestUnknownMethodRegression(t *testing.T) { }) defer srvDoneFn() - monitor, err := NewMonitor(config.New(), nil, nil, nil) - require.NoError(t, err) - err = monitor.Start() - require.NoError(t, err) - defer monitor.Stop() + monitor := newHTTPTestMonitor(t) requestFn := requestGenerator(t, targetAddr, emptyBody) for i := 0; i < 100; i++ { @@ -343,11 +338,7 @@ func TestUnknownMethodRegression(t *testing.T) { func TestRSTPacketRegression(t *testing.T) { skipTestIfKernelNotSupported(t) - monitor, err := NewMonitor(config.New(), nil, nil, nil) - require.NoError(t, err) - err = monitor.Start() - require.NoError(t, err) - defer monitor.Stop() + monitor := newHTTPTestMonitor(t) serverAddr := "127.0.0.1:8080" srvDoneFn := testutil.HTTPServer(t, serverAddr, testutil.Options{ @@ -382,11 +373,7 @@ func TestRSTPacketRegression(t *testing.T) { func TestKeepAliveWithIncompleteResponseRegression(t *testing.T) { skipTestIfKernelNotSupported(t) - monitor, err := NewMonitor(config.New(), nil, nil, nil) - require.NoError(t, err) - err = monitor.Start() - require.NoError(t, err) - defer monitor.Stop() + monitor := newHTTPTestMonitor(t) const req = "GET /200/foobar HTTP/1.1\n" const rsp = "HTTP/1.1 200 OK\n" @@ -467,11 +454,7 @@ func assertAllRequestsExists(t *testing.T, monitor *Monitor, requests []*nethttp func testHTTPMonitor(t *testing.T, targetAddr, serverAddr string, numReqs int, o testutil.Options) { srvDoneFn := testutil.HTTPServer(t, serverAddr, o) - monitor, err := NewMonitor(config.New(), nil, nil, nil) - require.NoError(t, err) - err = monitor.Start() - require.NoError(t, err) - defer monitor.Stop() + monitor := newHTTPTestMonitor(t) // Perform a number of random requests requestFn := requestGenerator(t, targetAddr, emptyBody) @@ -493,9 +476,11 @@ var ( func requestGenerator(t *testing.T, targetAddr string, reqBody []byte) func() *nethttp.Request { var ( - random = rand.New(rand.NewSource(time.Now().Unix())) - idx = 0 - client = new(nethttp.Client) + random = rand.New(rand.NewSource(time.Now().Unix())) + idx = 0 + client = new(nethttp.Client) + reqBuf = make([]byte, 0, len(reqBody)) + respBuf = make([]byte, 512) ) return func() *nethttp.Request { @@ -504,8 +489,14 @@ func requestGenerator(t *testing.T, targetAddr string, reqBody []byte) func() *n var body io.Reader var finalBody []byte if len(reqBody) > 0 { - finalBody = append([]byte(strings.Repeat(" ", idx)), reqBody...) + finalBody = reqBuf[:0] + finalBody = append(finalBody, []byte(strings.Repeat(" ", idx))...) + finalBody = append(finalBody, reqBody...) body = bytes.NewReader(finalBody) + + // save resized-buffer + reqBuf = finalBody + method = httpMethodsWithBody[random.Intn(len(httpMethodsWithBody))] } else { method = httpMethods[random.Intn(len(httpMethods))] @@ -520,11 +511,18 @@ func requestGenerator(t *testing.T, targetAddr string, reqBody []byte) func() *n return req } require.NoError(t, err) + defer resp.Body.Close() if len(reqBody) > 0 { - respBody, err := io.ReadAll(resp.Body) - require.NoError(t, err) - defer resp.Body.Close() - require.Equal(t, finalBody, respBody) + for { + n, err := resp.Body.Read(respBuf) + require.True(t, n <= len(finalBody)) + require.Equal(t, respBuf[:n], finalBody[:n]) + if err != nil { + assert.Equal(t, io.EOF, err) + break + } + finalBody = finalBody[n:] + } } return req } diff --git a/pkg/network/protocols/http/monitor_windows.go b/pkg/network/protocols/http/monitor_windows.go index d106f1a850b7c..59ab823d1f2a3 100644 --- a/pkg/network/protocols/http/monitor_windows.go +++ b/pkg/network/protocols/http/monitor_windows.go @@ -81,7 +81,7 @@ func (m *WindowsMonitor) Start() { // the linux side has an error code potentially, that // gets aggregated under the hood. Do we need somthing // analogous - m.process(transactionBatch, nil) + m.process(transactionBatch) case transactions, ok := <-m.hei.dataChannel: if !ok { return @@ -91,40 +91,24 @@ func (m *WindowsMonitor) Start() { // gets aggregated under the hood. Do we need somthing // analogous if len(transactions) > 0 { - m.processEtw(transactions, nil) + m.process(transactions) } } - } }() return } -func (m *WindowsMonitor) processEtw(transactionBatch []WinHttpTransaction, err error) { - transactions := make([]httpTX, len(transactionBatch)) - for i := range transactionBatch { - transactions[i] = &transactionBatch[i] - } - +func (m *WindowsMonitor) process(transactionBatch []WinHttpTransaction) { m.mux.Lock() defer m.mux.Unlock() - m.telemetry.aggregate(transactions, err) - m.statkeeper.Process(transactions) -} -func (m *WindowsMonitor) process(transactionBatch []WinHttpTransaction, err error) { - transactions := make([]httpTX, len(transactionBatch)) for i := range transactionBatch { - transactions[i] = &transactionBatch[i] - + tx := httpTX(&transactionBatch[i]) + m.telemetry.count(tx) + m.statkeeper.Process(tx) } - - m.mux.Lock() - defer m.mux.Unlock() - - m.telemetry.aggregate(transactions, err) - m.statkeeper.Process(transactions) } // GetHTTPStats returns a map of HTTP stats stored in the following format: @@ -162,7 +146,11 @@ func removeDuplicates(stats map[Key]*RequestStats) { func isLocalhost(k Key) bool { var sAddr util.Address - if k.SrcIPHigh == 0 { + // this little hack is because ipv6 loopback (::1) has the property of having + // the top 64 bits be zero (just like an ipv4). Could just skip the call to + // IsLoopback() below, but leaving it to allow the underlying library to do + // the check as originally desired. + if k.SrcIPHigh == 0 && k.SrcIPLow != uint64(0x0100000000000000) { sAddr = util.V4Address(uint32(k.SrcIPLow)) } else { sAddr = util.V6Address(k.SrcIPLow, k.SrcIPHigh) diff --git a/pkg/network/protocols/http/monitor_windows_test.go b/pkg/network/protocols/http/monitor_windows_test.go new file mode 100644 index 0000000000000..bb3ab9cca0f97 --- /dev/null +++ b/pkg/network/protocols/http/monitor_windows_test.go @@ -0,0 +1,75 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build windows && npm +// +build windows,npm + +package http + +import ( + "encoding/binary" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestIsLocalhost(t *testing.T) { + + tests := []struct { + key Key + expected bool + }{ + // the isLocalhost function checks only the srcip, but set them both + { + key: Key{ + KeyTuple: KeyTuple{ + SrcIPHigh: 0, + SrcIPLow: uint64(binary.LittleEndian.Uint32([]uint8{127, 0, 0, 1})), + DstIPHigh: 0, + DstIPLow: uint64(binary.LittleEndian.Uint32([]uint8{127, 0, 0, 1})), + }, + }, + expected: true, + }, + { + key: Key{ + KeyTuple: KeyTuple{ + SrcIPHigh: 0, + SrcIPLow: uint64(binary.LittleEndian.Uint32([]uint8{192, 168, 1, 1})), + DstIPHigh: 0, + DstIPLow: uint64(binary.LittleEndian.Uint32([]uint8{192, 168, 1, 1})), + }, + }, + expected: false, + }, + { + key: Key{ + KeyTuple: KeyTuple{ + SrcIPHigh: 0, + SrcIPLow: binary.LittleEndian.Uint64([]uint8{0, 0, 0, 0, 0, 0, 0, 1}), + DstIPHigh: 0, + DstIPLow: binary.LittleEndian.Uint64([]uint8{0, 0, 0, 0, 0, 0, 0, 1}), + }, + }, + expected: true, + }, + { + key: Key{ + KeyTuple: KeyTuple{ + SrcIPHigh: binary.LittleEndian.Uint64([]uint8{0xf, 0xe, 0x8, 0, 0, 0, 0, 0}), + SrcIPLow: binary.LittleEndian.Uint64([]uint8{0x1, 0x9, 0x3, 0xe, 0x4, 0xc, 0xd, 0x6, 0xf, 0xf, 0xa, 0x4}), + DstIPHigh: binary.LittleEndian.Uint64([]uint8{0xf, 0xe, 0x8, 0, 0, 0, 0, 0}), + DstIPLow: binary.LittleEndian.Uint64([]uint8{0x1, 0x9, 0x3, 0xe, 0x4, 0xc, 0xd, 0x6, 0xf, 0xf, 0xa, 0x4}), + }, + }, + expected: false, + }, + } + for idx, tt := range tests { + is := isLocalhost(tt.key) + assert.Equal(t, tt.expected, is, "Unexpected result %v for test %v", is, idx) + } + +} diff --git a/pkg/network/protocols/http/shared_libraries.go b/pkg/network/protocols/http/shared_libraries.go index a8b9de5a37b57..138450f526cad 100644 --- a/pkg/network/protocols/http/shared_libraries.go +++ b/pkg/network/protocols/http/shared_libraries.go @@ -9,20 +9,22 @@ package http import ( + "encoding/base64" + "encoding/binary" "fmt" "os" - "path/filepath" "regexp" - "strconv" "strings" + "sync" "syscall" - "time" "unsafe" - psfilepath "github.com/DataDog/gopsutil/process/filepath" - "github.com/DataDog/gopsutil/process/so" + "github.com/DataDog/gopsutil/process" + "github.com/twmb/murmur3" + "golang.org/x/sys/unix" ddebpf "github.com/DataDog/datadog-agent/pkg/ebpf" + "github.com/DataDog/datadog-agent/pkg/process/monitor" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -35,36 +37,81 @@ func (l *libPath) Bytes() []byte { return l.Buf[:l.Len] } -// syncInterval controls the frequency at which /proc//maps are inspected. -// this is to ensure that we remove/deregister the shared libraries that are no -// longer mapped into memory. -const soSyncInterval = 5 * time.Minute +// pathIdentifier is the unique key (system wide) of a file based on dev/inode +type pathIdentifier struct { + dev uint64 + inode uint64 +} + +func (p *pathIdentifier) String() string { + return fmt.Sprintf("dev/inode %d.%d/%d", unix.Major(p.dev), unix.Minor(p.dev), p.inode) +} + +// Key is a unique (system wide) TLDR Base64(murmur3.Sum64(device, inode)) +// It composes based the device (minor, major) and inode of a file +// murmur is a non-crypto hashing +// +// As multiple containers overlayfs (same inode but could be overwritten with different binary) +// device would be different +// +// a Base64 string representation is returned and could be used in a file path +func (p *pathIdentifier) Key() string { + buffer := make([]byte, 16) + binary.LittleEndian.PutUint64(buffer, p.dev) + binary.LittleEndian.PutUint64(buffer[8:], p.inode) + m := murmur3.Sum64(buffer) + bufferSum := make([]byte, 8) + binary.LittleEndian.PutUint64(bufferSum, m) + return base64.StdEncoding.EncodeToString(bufferSum) +} + +// path must be an absolute path +func newPathIdentifier(path string) (pi pathIdentifier, err error) { + if len(path) < 1 || path[0] != '/' { + return pi, fmt.Errorf("invalid path %q", path) + } + info, err := os.Stat(path) + if err != nil { + return pi, err + } -// check if a process is still alive, if not unregister his hook -// when attaching a uprobe the kernel modifiy the elf and lock the file, so the filesystem can't be unmounted -const soCheckProcessAliveInterval = 10 * time.Second + stat, ok := info.Sys().(*syscall.Stat_t) + if !ok { + return pi, fmt.Errorf("invalid file %q stat %T", path, info.Sys()) + } + + return pathIdentifier{ + dev: stat.Dev, + inode: stat.Ino, + }, nil +} type soRule struct { re *regexp.Regexp - registerCB func(string) error - unregisterCB func(string) error + registerCB func(id pathIdentifier, root string, path string) error + unregisterCB func(id pathIdentifier) error } // soWatcher provides a way to tie callback functions to the lifecycle of shared libraries type soWatcher struct { - procRoot string - hostMount string - all *regexp.Regexp - rules []soRule - loadEvents *ddebpf.PerfHandler - registry *soRegistry + procRoot string + all *regexp.Regexp + rules []soRule + loadEvents *ddebpf.PerfHandler + processMonitor *monitor.ProcessMonitor + registry *soRegistry } -type seenKey struct { - pid, path string +type soRegistry struct { + m sync.Mutex + byID map[pathIdentifier]*soRegistration + byPID map[uint32]*soRegistration + + // if we can't register a uprobe we don't try more than once + blocklistByID map[pathIdentifier]struct{} } -func newSOWatcher(procRoot string, perfHandler *ddebpf.PerfHandler, rules ...soRule) *soWatcher { +func newSOWatcher(perfHandler *ddebpf.PerfHandler, rules ...soRule) *soWatcher { allFilters := make([]string, len(rules)) for i, r := range rules { allFilters[i] = r.re.String() @@ -72,81 +119,142 @@ func newSOWatcher(procRoot string, perfHandler *ddebpf.PerfHandler, rules ...soR all := regexp.MustCompile(fmt.Sprintf("(%s)", strings.Join(allFilters, "|"))) return &soWatcher{ - procRoot: procRoot, - hostMount: os.Getenv("HOST_ROOT"), - all: all, - rules: rules, - loadEvents: perfHandler, + procRoot: util.GetProcRoot(), + all: all, + rules: rules, + loadEvents: perfHandler, + processMonitor: monitor.GetProcessMonitor(), registry: &soRegistry{ - procRoot: procRoot, - byPath: make(map[string]*soRegistration), - byInode: make(map[uint64]*soRegistration), + byID: make(map[pathIdentifier]*soRegistration), + byPID: make(map[uint32]*soRegistration), + blocklistByID: make(map[pathIdentifier]struct{}), }, } } +type soRegistration struct { + pathID pathIdentifier + refcount int + unregisterCB func(pathIdentifier) error +} + +// Unregister return true if there are no more reference to this registration +func (r *soRegistration) Unregister() bool { + r.refcount-- + if r.refcount > 0 { + return false + } + if r.unregisterCB != nil { + if err := r.unregisterCB(r.pathID); err != nil { + log.Debugf("error while unregisterin %s : %s", r.pathID.String(), err) + } + } + return true +} + +func newRegistration(pathID pathIdentifier, unregister func(pathIdentifier) error) *soRegistration { + return &soRegistration{ + pathID: pathID, + unregisterCB: unregister, + refcount: 1, + } +} + +func (w *soWatcher) processExit(pid uint32) { + w.registry.Unregister(pid) +} + // Start consuming shared-library events func (w *soWatcher) Start() { - seen := make(map[seenKey]struct{}) - w.sync() + thisPID, err := util.GetRootNSPID() + if err != nil { + log.Warnf("soWatcher Start can't get root namespace pid %s", err) + } + + _ = util.WithAllProcs(w.procRoot, func(pid int) error { + if pid == thisPID { // don't uprobes ourself + return nil + } + + // report silently parsing /proc error as this could happen + // just exit processes + proc, err := process.NewProcess(int32(pid)) + if err != nil { + log.Debugf("process %d parsing failed %s", pid, err) + return nil + } + mmaps, err := proc.MemoryMaps(true) + if err != nil { + log.Tracef("process %d maps parsing failed %s", pid, err) + return nil + } + + root := fmt.Sprintf("%s/%d/root", w.procRoot, pid) + for _, m := range *mmaps { + for _, r := range w.rules { + if r.re.MatchString(m.Path) { + w.registry.Register(root, m.Path, uint32(pid), r) + break + } + } + } + + return nil + }) + + if err := w.processMonitor.Initialize(); err != nil { + log.Errorf("can't initialize process monitor %s", err) + return + } + cleanupExit, err := w.processMonitor.Subscribe(&monitor.ProcessCallback{ + Event: monitor.EXIT, + Metadata: monitor.ANY, + Callback: w.processExit, + }) + if err != nil { + log.Errorf("can't subscribe to process monitor exit event %s", err) + return + } + go func() { - ticker := time.NewTicker(soSyncInterval) - defer ticker.Stop() - tickerProcess := time.NewTicker(soCheckProcessAliveInterval) - defer tickerProcess.Stop() - thisPID, _ := util.GetRootNSPID() + defer cleanupExit() + defer w.processMonitor.Stop() + // cleanup all the uprobes + defer w.registry.cleanup() for { select { - case <-ticker.C: - seen = make(map[seenKey]struct{}) - w.sync() - case <-tickerProcess.C: - if w.checkProcessDone() { - /* if we done some cleanup, flush the cache */ - seen = make(map[seenKey]struct{}) - } case event, ok := <-w.loadEvents.DataChannel: if !ok { return } lib := toLibPath(event.Data) - // if this shared library was loaded by system-probe we ignore it. - // this is to avoid a feedback-loop since the shared libraries here monitored - // end up being opened by system-probe - if int(lib.Pid) == thisPID { - event.Done() - break + path := lib.Bytes() + libPath := string(path) + procPid := fmt.Sprintf("%s/%d", w.procRoot, lib.Pid) + root := procPid + "/root" + cwd := procPid + "/cwd" + + if strings.HasPrefix(libPath, w.procRoot) { + // don't scan ourself when we resolve offsets via debug.elf.Open() + // but make the unit test pass as the pid of the test and the tracer would be the same + // that why we don't filter by lib.Pid == uint32(thisPID) here + continue } - path := lib.Bytes() for _, r := range w.rules { if !r.re.Match(path) { continue } - var ( - libPath = string(path) - pidPath = fmt.Sprintf("%s/%d", w.procRoot, lib.Pid) - ) - - // resolving paths is expensive so we cache the libraries we've already seen - k := seenKey{pidPath, libPath} - if _, ok := seen[k]; ok { - break - } - seen[k] = struct{}{} - - // resolve namespaced path to host path - pathResolver := psfilepath.NewResolver(w.procRoot) - pathResolver.LoadPIDMounts(pidPath) - if hostPath := pathResolver.Resolve(libPath); hostPath != "" { - libPath = hostPath + // use cwd of the process as root if the path is relative + if libPath[0] != '/' { + root = cwd + libPath = "/" + libPath } - libPath = w.canonicalizePath(libPath) - w.registry.register(libPath, int(lib.Pid), r) + w.registry.Register(root, libPath, lib.Pid, r) break } @@ -160,221 +268,73 @@ func (w *soWatcher) Start() { }() } -func (w *soWatcher) sync() { - libraries := so.FindProc(w.procRoot, w.all) - toUnregister := make(map[string]struct{}, len(w.registry.byPath)) - for libPath := range w.registry.byPath { - toUnregister[libPath] = struct{}{} - } - - for _, lib := range libraries { - path := w.canonicalizePath(lib.HostPath) - if _, ok := w.registry.byPath[path]; ok { - // shared library still mapped into memory - // don't unregister it - delete(toUnregister, path) - continue - } +// call all the unregisterCB +func (r *soRegistry) cleanup() { + r.m.Lock() + defer r.m.Unlock() - for _, r := range w.rules { - if r.re.MatchString(path) { - // new library detected - // register it - for _, pidPath := range lib.PidsPath { - pid, err := extractPID(pidPath) - if err != nil { - log.Errorf("extractPID '%s' failed : %s", pidPath, err) - continue - } - w.registry.register(path, pid, r) - } - break - } - } - } - - for path := range toUnregister { - w.registry.unregister(path) + for _, reg := range r.byID { + reg.Unregister() } } -func (w *soWatcher) checkProcessDone() (updated bool) { - regsToBeRemoved := make(map[*soRegistration]struct{}) - pathsToBeRemoved := make(map[string]struct{}) - - for libpath, registration := range w.registry.byPath { - if _, ok := regsToBeRemoved[registration]; ok { - // this is possible because a library (represented by a given inode) - // can be registered through multiple paths - pathsToBeRemoved[libpath] = struct{}{} - continue - } +// Unregister a pid if exist, unregisterCB will be called if his refcount == 0 +func (r *soRegistry) Unregister(pid uint32) { + r.m.Lock() + defer r.m.Unlock() - if len(registration.pids) == 0 || registration.unregisterCB == nil { - // this library doesn't require liveness checks - continue - } - - for pid := range registration.pids { - if !isProcessAlive(pid) { - delete(registration.pids, pid) - } - } - - if len(registration.pids) == 0 { - // all processes are gone, so schedule this for removal - pathsToBeRemoved[libpath] = struct{}{} - regsToBeRemoved[registration] = struct{}{} - updated = true - } - } - - for libpath := range pathsToBeRemoved { - w.registry.unregister(libpath) + reg, found := r.byPID[pid] + if !found { + return } - - return updated -} - -func (w *soWatcher) canonicalizePath(path string) string { - if w.hostMount != "" { - path = filepath.Join(w.hostMount, path) + if reg.Unregister() == true { + // we need to cleanup our entries as there are no more processes using this ELF + delete(r.byID, reg.pathID) } - - return followSymlink(path) -} - -type soRegistration struct { - // set of pid paths (eg. /host/proc/123) that are used for liveness checks - // this is done to unregister shared libraries as soon as all processes - // referencing it terminate. This is required when the shared library is - // located in a volume where mount propagation is enabled, so containers - // don't get stuck during termination. - pids map[string]struct{} - - inode uint64 - refcount int - unregisterCB func(string) error + delete(r.byPID, pid) } -type soRegistry struct { - procRoot string - byPath map[string]*soRegistration - byInode map[uint64]*soRegistration -} - -func (r *soRegistry) register(libPath string, pid int, rule soRule) { - pidPath := fmt.Sprintf("%s/%d", r.procRoot, pid) - if registration, ok := r.byPath[libPath]; ok { - registration.pids[pidPath] = struct{}{} +// Register a ELF library root/libPath as be used by the pid +// Only one registration will be done per ELF (system wide) +func (r *soRegistry) Register(root string, libPath string, pid uint32, rule soRule) { + hostLibPath := root + libPath + pathID, err := newPathIdentifier(hostLibPath) + if err != nil { + // short living process can hit here + // as we receive the openat() syscall info after receiving the EXIT netlink process + log.Tracef("can't create path identifier %s", err) return } - inode, err := getInode(libPath) - if err != nil { + r.m.Lock() + defer r.m.Unlock() + if _, found := r.blocklistByID[pathID]; found { return } - if registration, ok := r.byInode[inode]; ok { - registration.refcount++ - r.byPath[libPath] = registration - registration.pids[pidPath] = struct{}{} - log.Debugf("registering library=%s", libPath) + if reg, found := r.byID[pathID]; found { + reg.refcount++ + r.byPID[pid] = reg return } - err = rule.registerCB(libPath) - if err != nil { - log.Debugf("error registering library=%s: %s", libPath, err) - if err := rule.unregisterCB(libPath); err != nil { - log.Debugf("unregisterCB %s : %s", libPath, err) + if err := rule.registerCB(pathID, root, libPath); err != nil { + log.Debugf("error registering library (adding to blocklist) %s path %s by pid %d : %s", pathID.String(), hostLibPath, pid, err) + // we calling unregisterCB here as some uprobe could be already attached, unregisterCB will cleanup those entries + if rule.unregisterCB != nil { + if err := rule.unregisterCB(pathID); err != nil { + log.Debugf("unregisterCB library %s path %s : %s", pathID.String(), hostLibPath, err) + } } - // save sentinel value so we don't attempt to re-register shared // libraries that are problematic for some reason - registration := newRegistration(inode, nil) - r.byPath[libPath] = registration - r.byInode[inode] = registration - return - } - - log.Debugf("registering library=%s", libPath) - registration := newRegistration(inode, rule.unregisterCB) - registration.pids[pidPath] = struct{}{} - r.byPath[libPath] = registration - r.byInode[inode] = registration -} - -func (r *soRegistry) unregister(libPath string) { - registration, ok := r.byPath[libPath] - if !ok { - return - } - - log.Debugf("unregistering library=%s", libPath) - delete(r.byPath, libPath) - registration.refcount-- - if registration.refcount > 0 { + r.blocklistByID[pathID] = struct{}{} return } - delete(r.byInode, registration.inode) - if registration.unregisterCB != nil { - err := registration.unregisterCB(libPath) - if err != nil { - log.Debugf("unregisterCB %s : %s", libPath, err) - } - } -} - -func newRegistration(inode uint64, unregisterCB func(string) error) *soRegistration { - r := &soRegistration{ - pids: make(map[string]struct{}), - inode: inode, - unregisterCB: unregisterCB, - refcount: 1, - } - return r -} - -func followSymlink(path string) string { - if withoutSymLinks, err := filepath.EvalSymlinks(path); err == nil { - return withoutSymLinks - } - - return path -} - -func getInode(path string) (uint64, error) { - info, err := os.Stat(path) - if err != nil { - return 0, err - } - - stat, ok := info.Sys().(*syscall.Stat_t) - if !ok { - return 0, fmt.Errorf("invalid file stat") - } - - return stat.Ino, nil -} - -func extractPID(pidPath string) (int, error) { - pidPathArray := strings.Split(pidPath, string(os.PathSeparator)) - if len(pidPathArray) == 0 { - return 0, fmt.Errorf("invalid PID path: %s", pidPath) - } - - pidStr := pidPathArray[len(pidPathArray)-1] - pid, err := strconv.Atoi(pidStr) - if err != nil { - return 0, fmt.Errorf("invalid PID path: %s", pidPath) - } - - return pid, nil -} + reg := newRegistration(pathID, rule.unregisterCB) + r.byID[pathID] = reg + r.byPID[pid] = reg -func isProcessAlive(pidPath string) bool { - fi, err := os.Stat(pidPath) - return err == nil && fi.IsDir() + log.Debugf("registering library %s path %s by pid %d", pathID.String(), hostLibPath, pid) } diff --git a/pkg/network/protocols/http/shared_libraries_test.go b/pkg/network/protocols/http/shared_libraries_test.go index 7593741dffa7e..e0df26b5713f2 100644 --- a/pkg/network/protocols/http/shared_libraries_test.go +++ b/pkg/network/protocols/http/shared_libraries_test.go @@ -9,6 +9,7 @@ package http import ( + "fmt" "math" "os" "os/exec" @@ -22,7 +23,6 @@ import ( manager "github.com/DataDog/ebpf-manager" "github.com/cilium/ebpf" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "golang.org/x/sys/unix" @@ -33,22 +33,28 @@ import ( func TestSharedLibraryDetection(t *testing.T) { perfHandler, doneFn := initEBPFProgram(t) - fpath := filepath.Join(t.TempDir(), "foo.so") t.Cleanup(doneFn) + fpath := filepath.Join(t.TempDir(), "foo.so") + + // touch the file, as the file must exist when the process Exec + // for the file identifier stat() + f, err := os.Create(fpath) + require.NoError(t, err) + f.Close() var ( mux sync.Mutex pathDetected string ) - callback := func(path string) error { + callback := func(id pathIdentifier, root string, path string) error { mux.Lock() defer mux.Unlock() pathDetected = path return nil } - watcher := newSOWatcher("/proc", perfHandler, + watcher := newSOWatcher(perfHandler, soRule{ re: regexp.MustCompile(`foo.so`), registerCB: callback, @@ -61,14 +67,75 @@ func TestSharedLibraryDetection(t *testing.T) { time.Sleep(10 * time.Millisecond) // assert that soWatcher detected foo.so being opened and triggered the callback - assert.Equal(t, fpath, pathDetected) + require.Equal(t, fpath, pathDetected) +} + +func TestSharedLibraryDetectionWithPIDandRootNameSpace(t *testing.T) { + _, err := os.Stat("/usr/bin/busybox") + if err != nil { + t.Skip("skip for the moment as some distro are not friendly with busybox package") + } + + tempDir := t.TempDir() + root := filepath.Join(tempDir, "root") + err = os.MkdirAll(root, 0755) + require.NoError(t, err) + + libpath := "/fooroot.so" + + simulateOpenAt(root + libpath) + err = exec.Command("cp", "/usr/bin/busybox", root+"/ash").Run() + require.NoError(t, err) + err = exec.Command("cp", "/usr/bin/busybox", root+"/sleep").Run() + require.NoError(t, err) + + perfHandler, doneFn := initEBPFProgram(t) + t.Cleanup(doneFn) + + var ( + mux sync.Mutex + pathDetected string + ) + + callback := func(id pathIdentifier, root string, path string) error { + mux.Lock() + defer mux.Unlock() + pathDetected = path + return nil + } + + watcher := newSOWatcher(perfHandler, + soRule{ + re: regexp.MustCompile(`fooroot.so`), + registerCB: callback, + }, + ) + watcher.Start() + + time.Sleep(10 * time.Millisecond) + // simulate a slow (1 second) : open, write, close of the file + // in an new pid and mount namespaces + o, err := exec.Command("unshare", "--fork", "--pid", "-R", root, "/ash", "-c", fmt.Sprintf("sleep 1 > %s", libpath)).CombinedOutput() + if err != nil { + t.Log(err, string(o)) + } + require.NoError(t, err) + + time.Sleep(10 * time.Millisecond) + + // assert that soWatcher detected foo.so being opened and triggered the callback + require.Equal(t, libpath, pathDetected) + + // must failed on the host + _, err = os.Stat(libpath) + require.Error(t, err) } func TestSameInodeRegression(t *testing.T) { perfHandler, doneFn := initEBPFProgram(t) + t.Cleanup(doneFn) fpath1 := filepath.Join(t.TempDir(), "a-foo.so") fpath2 := filepath.Join(t.TempDir(), "b-foo.so") - t.Cleanup(doneFn) f, err := os.Create(fpath1) require.NoError(t, err) @@ -79,12 +146,12 @@ func TestSameInodeRegression(t *testing.T) { require.NoError(t, err) registers := atomic.NewInt64(0) - callback := func(string) error { + callback := func(id pathIdentifier, root string, path string) error { registers.Add(1) return nil } - watcher := newSOWatcher("/proc", perfHandler, + watcher := newSOWatcher(perfHandler, soRule{ re: regexp.MustCompile(`foo.so`), registerCB: callback, @@ -98,7 +165,7 @@ func TestSameInodeRegression(t *testing.T) { time.Sleep(10 * time.Millisecond) // assert that callback was called only once - assert.Equal(t, int64(1), registers.Load()) + require.Equal(t, int64(1), registers.Load()) } // we use this helper to open files for two reasons: @@ -174,6 +241,16 @@ func initEBPFProgram(t *testing.T) (*ddebpf.PerfHandler, func()) { MaxEntries: 1, EditorFlag: manager.EditMaxEntries, }, + connectionStatesMap: { + Type: ebpf.Hash, + MaxEntries: 1, + EditorFlag: manager.EditMaxEntries, + }, + dispatcherConnectionProtocolMap: { + Type: ebpf.Hash, + MaxEntries: 1, + EditorFlag: manager.EditMaxEntries, + }, }, ActivatedProbes: []manager.ProbesSelector{ &manager.ProbeSelector{ diff --git a/pkg/network/protocols/http/telemetry.go b/pkg/network/protocols/http/telemetry.go index cd68c8651b851..485854a0f9693 100644 --- a/pkg/network/protocols/http/telemetry.go +++ b/pkg/network/protocols/http/telemetry.go @@ -23,7 +23,6 @@ type telemetry struct { hits1XX, hits2XX, hits3XX, hits4XX, hits5XX *libtelemetry.Metric totalHits *libtelemetry.Metric - misses *libtelemetry.Metric // this happens when we can't cope with the rate of events dropped *libtelemetry.Metric // this happens when httpStatKeeper reaches capacity rejected *libtelemetry.Metric // this happens when an user-defined reject-filter matches a request malformed *libtelemetry.Metric // this happens when the request doesn't have the expected format @@ -48,7 +47,6 @@ func newTelemetry() (*telemetry, error) { // these metrics are also exported as statsd metrics totalHits: metricGroup.NewMetric("total_hits", libtelemetry.OptStatsd), - misses: metricGroup.NewMetric("misses", libtelemetry.OptStatsd), dropped: metricGroup.NewMetric("dropped", libtelemetry.OptStatsd), rejected: metricGroup.NewMetric("rejected", libtelemetry.OptStatsd), malformed: metricGroup.NewMetric("malformed", libtelemetry.OptStatsd), @@ -57,26 +55,20 @@ func newTelemetry() (*telemetry, error) { return t, nil } -func (t *telemetry) aggregate(txs []httpTX, err error) { - for _, tx := range txs { - switch tx.StatusClass() { - case 100: - t.hits1XX.Add(1) - case 200: - t.hits2XX.Add(1) - case 300: - t.hits3XX.Add(1) - case 400: - t.hits4XX.Add(1) - case 500: - t.hits5XX.Add(1) - } - t.totalHits.Add(1) - } - - if err == errLostBatch { - t.misses.Add(int64(len(txs))) +func (t *telemetry) count(tx httpTX) { + switch tx.StatusClass() { + case 100: + t.hits1XX.Add(1) + case 200: + t.hits2XX.Add(1) + case 300: + t.hits3XX.Add(1) + case 400: + t.hits4XX.Add(1) + case 500: + t.hits5XX.Add(1) } + t.totalHits.Add(1) } func (t *telemetry) log() { @@ -84,7 +76,6 @@ func (t *telemetry) log() { then := t.then.Swap(now) totalRequests := t.totalHits.Delta() - misses := t.misses.Delta() dropped := t.dropped.Delta() rejected := t.rejected.Delta() malformed := t.malformed.Delta() @@ -92,11 +83,9 @@ func (t *telemetry) log() { elapsed := now - then log.Debugf( - "http stats summary: requests_processed=%d(%.2f/s) requests_missed=%d(%.2f/s) requests_dropped=%d(%.2f/s) requests_rejected=%d(%.2f/s) requests_malformed=%d(%.2f/s) aggregations=%d", + "http stats summary: requests_processed=%d(%.2f/s) requests_dropped=%d(%.2f/s) requests_rejected=%d(%.2f/s) requests_malformed=%d(%.2f/s) aggregations=%d", totalRequests, float64(totalRequests)/float64(elapsed), - misses, - float64(misses)/float64(elapsed), dropped, float64(dropped)/float64(elapsed), rejected, diff --git a/pkg/network/protocols/http/testutil/testutil.go b/pkg/network/protocols/http/testutil/testutil.go index d6d929341b1bf..c925462c47937 100644 --- a/pkg/network/protocols/http/testutil/testutil.go +++ b/pkg/network/protocols/http/testutil/testutil.go @@ -44,9 +44,8 @@ func HTTPServer(t *testing.T, addr string, options Options) func() { statusCode := StatusFromPath(req.URL.Path) w.WriteHeader(statusCode) - reqBody, _ := io.ReadAll(req.Body) defer req.Body.Close() - w.Write(reqBody) + io.Copy(w, req.Body) } srv := &http.Server{ diff --git a/pkg/network/protocols/mongo/client.go b/pkg/network/protocols/mongo/client.go new file mode 100644 index 0000000000000..6280e2d6fb4ea --- /dev/null +++ b/pkg/network/protocols/mongo/client.go @@ -0,0 +1,106 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package mongo + +import ( + "context" + "fmt" + "net" + "time" + + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" + "go.mongodb.org/mongo-driver/mongo/options" + + "github.com/DataDog/datadog-agent/pkg/util/common" +) + +const ( + defaultConnectionTimeout = time.Second * 10 +) + +type Options struct { + ClientDialer *net.Dialer + ServerAddress string + Username string + Password string + ConnectionTimout time.Duration +} + +type Client struct { + C *mongo.Client +} + +func NewClient(opts Options) (*Client, error) { + clientOptions := options.Client().ApplyURI(fmt.Sprintf("mongodb://%s", opts.ServerAddress)) + if opts.Username == "" { + opts.Username = User + } + if opts.Password == "" { + opts.Password = Pass + } + creds := options.Credential{ + Username: opts.Username, + Password: opts.Password, + AuthSource: "admin", + } + clientOptions.SetAuth(creds) + clientOptions.SetDirect(true) + + if opts.ConnectionTimout == 0 { + opts.ConnectionTimout = defaultConnectionTimeout + } + + if opts.ClientDialer != nil { + clientOptions.SetDialer(opts.ClientDialer) + } + + timedCtx, cancel := context.WithTimeout(context.Background(), opts.ConnectionTimout) + defer cancel() + client, err := mongo.Connect(timedCtx, clientOptions) + if err != nil { + return nil, err + } + + timedCtx, cancel = context.WithTimeout(context.Background(), opts.ConnectionTimout) + defer cancel() + if err := client.Ping(timedCtx, nil); err != nil { + return nil, err + } + + return &Client{ + C: client, + }, nil +} + +var ( + defaultDBs = common.StringSet{ + "admin": {}, + "config": {}, + "local": {}, + } +) + +func (c *Client) DeleteDatabases() error { + dbs, err := c.C.ListDatabases(context.Background(), bson.M{}) + if err != nil { + return err + } + + for _, db := range dbs.Databases { + if _, isDefault := defaultDBs[db.Name]; isDefault { + continue + } + if err := c.C.Database(db.Name).Drop(context.Background()); err != nil { + return err + } + } + return nil +} + +func (c *Client) Stop() error { + return c.C.Disconnect(context.Background()) +} diff --git a/pkg/network/protocols/mongo/server.go b/pkg/network/protocols/mongo/server.go new file mode 100644 index 0000000000000..7885685e70b8f --- /dev/null +++ b/pkg/network/protocols/mongo/server.go @@ -0,0 +1,31 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package mongo + +import ( + "fmt" + "regexp" + "testing" + + "github.com/DataDog/datadog-agent/pkg/network/protocols/http/testutil" + protocolsUtils "github.com/DataDog/datadog-agent/pkg/network/protocols/testutil" +) + +const ( + User = "root" + Pass = "password" +) + +func RunMongoServer(t *testing.T, serverAddress, serverPort string) { + env := []string{ + "MONGO_ADDR=" + serverAddress, + "MONGO_PORT=" + serverPort, + "MONGO_USER=" + User, + "MONGO_PASSWORD=" + Pass, + } + dir, _ := testutil.CurDir() + protocolsUtils.RunDockerServer(t, "mongo", dir+"/testdata/docker-compose.yml", env, regexp.MustCompile(fmt.Sprintf(".*Waiting for connections.*port.*:%s.*", serverPort))) +} diff --git a/pkg/network/protocols/mongo/testdata/docker-compose.yml b/pkg/network/protocols/mongo/testdata/docker-compose.yml new file mode 100644 index 0000000000000..0d02a59a979e6 --- /dev/null +++ b/pkg/network/protocols/mongo/testdata/docker-compose.yml @@ -0,0 +1,9 @@ +version: '3' +services: + mongodb-primary: + image: 'mongo:5.0.14' + ports: + - ${MONGO_ADDR:-127.0.0.1}:${MONGO_PORT:-27017}:27017 + environment: + - MONGO_INITDB_ROOT_USERNAME=${MONGO_USER:-root} + - MONGO_INITDB_ROOT_PASSWORD=${MONGO_PASSWORD:-password} diff --git a/pkg/network/protocols/postgres/server.go b/pkg/network/protocols/postgres/server.go new file mode 100644 index 0000000000000..adf2b20b66acf --- /dev/null +++ b/pkg/network/protocols/postgres/server.go @@ -0,0 +1,27 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package postgres + +import ( + "regexp" + "testing" + + "github.com/DataDog/datadog-agent/pkg/network/protocols/http/testutil" + protocolsUtils "github.com/DataDog/datadog-agent/pkg/network/protocols/testutil" +) + +func RunPostgresServer(t *testing.T, serverAddr string, serverPort string) { + t.Helper() + + env := []string{ + "POSTGRES_ADDR=" + serverAddr, + "POSTGRES_PORT=" + serverPort, + } + + dir, _ := testutil.CurDir() + + protocolsUtils.RunDockerServer(t, "postgres", dir+"/testdata/docker-compose.yml", env, regexp.MustCompile(".*\\[1].*database system is ready to accept connections")) +} diff --git a/pkg/network/protocols/postgres/testdata/docker-compose.yml b/pkg/network/protocols/postgres/testdata/docker-compose.yml new file mode 100644 index 0000000000000..43353c2fd4bdb --- /dev/null +++ b/pkg/network/protocols/postgres/testdata/docker-compose.yml @@ -0,0 +1,12 @@ +version: '3.1' + +services: + postgres: + image: postgres:15-alpine + restart: always + ports: + - ${POSTGRES_ADDR:-127.0.0.1}:${POSTGRES_PORT:-5432}:5432 + environment: + POSTGRES_USER: admin + POSTGRES_PASSWORD: password + POSTGRES_DB: testdb diff --git a/pkg/network/protocols/postgres/utils.go b/pkg/network/protocols/postgres/utils.go new file mode 100644 index 0000000000000..939be712b7217 --- /dev/null +++ b/pkg/network/protocols/postgres/utils.go @@ -0,0 +1,133 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package postgres + +import ( + "context" + "database/sql" + "testing" + + "github.com/stretchr/testify/require" + "github.com/uptrace/bun" + "github.com/uptrace/bun/dialect/pgdialect" + "github.com/uptrace/bun/driver/pgdriver" +) + +// DummyTable defines a table schema, so that `bun` module can generate queries for it. +type DummyTable struct { + bun.BaseModel `bun:"table:dummy,alias:d"` + + ID int64 `bun:",pk,autoincrement"` + Foo string +} + +var dummyModel = &DummyTable{ID: 1, Foo: "bar"} + +// GetPGHandle returns a handle on the test Postgres DB. This does not initiate +// a connection +func GetPGHandle(t *testing.T, serverAddr string) *sql.DB { + t.Helper() + + pg := sql.OpenDB(pgdriver.NewConnector( + pgdriver.WithNetwork("tcp"), + pgdriver.WithAddr(serverAddr), + pgdriver.WithInsecure(true), + pgdriver.WithUser("admin"), + pgdriver.WithPassword("password"), + pgdriver.WithDatabase("testdb"), + )) + + return pg +} + +// ConnectAndGetDB initiates a connection to the database, get a handle on the +// test db, and register cleanup handlers for the test. Finally, it saves the db +// handle and task context in the provided extras map. +func ConnectAndGetDB(t *testing.T, serverAddr string, extras map[string]interface{}) { + t.Helper() + + ctx := context.Background() + + pg := GetPGHandle(t, serverAddr) + db := bun.NewDB(pg, pgdialect.New()) + + if extras != nil { + extras["ctx"] = ctx + extras["db"] = db + } +} + +// The following are helpers around bun to quickly execute SQL query for use in +// protocol classification tests. + +func getCtx(extras map[string]interface{}) (*bun.DB, context.Context) { + db := extras["db"].(*bun.DB) + taskCtx := extras["ctx"].(context.Context) + + return db, taskCtx +} + +func RunAlterQuery(t *testing.T, extras map[string]interface{}) { + t.Helper() + db, ctx := getCtx(extras) + + _, err := db.NewAddColumn().Model((*DummyTable)(nil)).ColumnExpr("new_column BOOL").Exec(ctx) + require.NoError(t, err) +} + +func RunCreateQuery(t *testing.T, extras map[string]interface{}) { + t.Helper() + db, ctx := getCtx(extras) + + _, err := db.NewCreateTable().Model((*DummyTable)(nil)).Exec(ctx) + require.NoError(t, err) +} + +func RunDeleteQuery(t *testing.T, extras map[string]interface{}) { + t.Helper() + db, ctx := getCtx(extras) + + _, err := db.NewDelete().Model(dummyModel).WherePK().Exec(ctx) + require.NoError(t, err) +} + +func RunDropQuery(t *testing.T, extras map[string]interface{}) { + t.Helper() + db, ctx := getCtx(extras) + + _, err := db.NewDropTable().Model((*DummyTable)(nil)).IfExists().Exec(ctx) + require.NoError(t, err) +} + +func RunInsertQuery(t *testing.T, id int64, extras map[string]interface{}) { + t.Helper() + db, ctx := getCtx(extras) + + model := *dummyModel + model.ID = id + + _, err := db.NewInsert().Model(&model).Exec(ctx) + require.NoError(t, err) +} + +func RunSelectQuery(t *testing.T, extras map[string]interface{}) { + t.Helper() + db, ctx := getCtx(extras) + + _, err := db.NewSelect().Model(dummyModel).Exec(ctx) + require.NoError(t, err) +} + +func RunUpdateQuery(t *testing.T, extras map[string]interface{}) { + t.Helper() + db, ctx := getCtx(extras) + + newModel := *dummyModel + newModel.Foo = "baz" + + _, err := db.NewUpdate().Model(&newModel).WherePK().Exec(ctx) + require.NoError(t, err) +} diff --git a/pkg/network/protocols/protocols_linux_test.go b/pkg/network/protocols/protocols_linux_test.go new file mode 100644 index 0000000000000..87e6ab5523414 --- /dev/null +++ b/pkg/network/protocols/protocols_linux_test.go @@ -0,0 +1,64 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package protocols + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/pkg/network" + "github.com/DataDog/datadog-agent/pkg/network/protocols/http" +) + +func TestProtocolValue(t *testing.T) { + tests := []struct { + name string + kernelValue http.ProtocolType + expected network.ProtocolType + }{ + { + name: "ProtocolUnknown", + kernelValue: http.ProtocolUnknown, + expected: network.ProtocolUnknown, + }, + { + name: "ProtocolHTTP", + kernelValue: http.ProtocolHTTP, + expected: network.ProtocolHTTP, + }, + { + name: "ProtocolHTTP2", + kernelValue: http.ProtocolHTTP2, + expected: network.ProtocolHTTP2, + }, + { + name: "ProtocolTLS", + kernelValue: http.ProtocolTLS, + expected: network.ProtocolTLS, + }, + { + name: "ProtocolAMQP", + kernelValue: http.ProtocolAMQP, + expected: network.ProtocolAMQP, + }, + { + name: "ProtocolRedis", + kernelValue: http.ProtocolRedis, + expected: network.ProtocolRedis, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + require.Equal(t, int(test.expected), int(test.kernelValue)) + require.True(t, network.IsValidProtocolValue(uint8(test.kernelValue))) + }) + } +} diff --git a/pkg/network/protocols/redis/testdata/docker-compose.yml b/pkg/network/protocols/redis/testdata/docker-compose.yml index 3af8592a1c0b0..e8d6ce9b0e3ea 100644 --- a/pkg/network/protocols/redis/testdata/docker-compose.yml +++ b/pkg/network/protocols/redis/testdata/docker-compose.yml @@ -1,7 +1,7 @@ version: '3' services: redis: - image: redis:7 + image: redis:7-alpine entrypoint: redis-server --ignore-warnings ARM64-COW-BUG ports: - ${REDIS_ADDR:-127.0.0.1}:${REDIS_PORT:-6379}:6379 diff --git a/pkg/network/protocols/testutil/serverutils.go b/pkg/network/protocols/testutil/serverutils.go index 578a98593ec41..0bcc4719a97ea 100644 --- a/pkg/network/protocols/testutil/serverutils.go +++ b/pkg/network/protocols/testutil/serverutils.go @@ -26,6 +26,7 @@ func RunDockerServer(t *testing.T, serverName, dockerPath string, env []string, patternScanner := NewScanner(serverStartRegex, make(chan struct{}, 1)) cmd.Stdout = patternScanner + cmd.Stderr = patternScanner cmd.Env = append(cmd.Env, env...) go func() { require.NoErrorf(t, cmd.Run(), "could not start %s with docker-compose", serverName) @@ -42,8 +43,9 @@ func RunDockerServer(t *testing.T, serverName, dockerPath string, env []string, case <-patternScanner.DoneChan: t.Logf("%s server is ready", serverName) return - case <-time.After(time.Second * 30): + case <-time.After(time.Second * 60): t.Fatalf("failed to start %s server", serverName) + return } } } diff --git a/pkg/network/state_linux_test.go b/pkg/network/state_linux_test.go new file mode 100644 index 0000000000000..0369d673b3808 --- /dev/null +++ b/pkg/network/state_linux_test.go @@ -0,0 +1,57 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux +// +build linux + +package network + +import ( + "math" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/DataDog/datadog-agent/pkg/process/util" +) + +func TestStatsOverflow(t *testing.T) { + conn := ConnectionStats{ + Pid: 123, + Type: TCP, + Family: AFINET, + Source: util.AddressFromString("127.0.0.1"), + Dest: util.AddressFromString("127.0.0.1"), + Monotonic: StatCounters{SentPackets: math.MaxUint32 - 1, RecvPackets: math.MaxUint32 - 2}, + IntraHost: true, + } + + client := "client" + + state := newDefaultState() + + // Register the client + state.RegisterClient(client) + + // Get the connections once to register stats + conns := state.GetDelta(client, latestEpochTime(), []ConnectionStats{conn}, nil, nil).Conns + require.Len(t, conns, 1) + + // Expect Last.SentPackets to be math.MaxUint32-1 + conn.Last.SentPackets = math.MaxUint32 - 1 + // expect Last.RecvPackets to be math.MaxUint32-2 + conn.Last.RecvPackets = math.MaxUint32 - 2 + assert.Equal(t, conn, conns[0]) + + // Get the connections again but by simulating an overflow + conn.Monotonic.SentPackets = 10 + conn.Monotonic.RecvPackets = 11 + + conns = state.GetDelta(client, latestEpochTime(), []ConnectionStats{conn}, nil, nil).Conns + require.Len(t, conns, 1) + assert.Equal(t, uint64(12), conns[0].Last.SentPackets) + assert.Equal(t, uint64(14), conns[0].Last.RecvPackets) +} diff --git a/pkg/network/telemetry/ebpf_telemetry.go b/pkg/network/telemetry/ebpf_telemetry.go index abfda409d14e3..4075b9b761282 100644 --- a/pkg/network/telemetry/ebpf_telemetry.go +++ b/pkg/network/telemetry/ebpf_telemetry.go @@ -14,11 +14,12 @@ import ( "syscall" "unsafe" - "github.com/DataDog/datadog-agent/pkg/telemetry" - "github.com/DataDog/datadog-agent/pkg/util/log" manager "github.com/DataDog/ebpf-manager" "github.com/cilium/ebpf" "github.com/cilium/ebpf/asm" + + "github.com/DataDog/datadog-agent/pkg/telemetry" + "github.com/DataDog/datadog-agent/pkg/util/log" ) const ( @@ -324,7 +325,7 @@ func patchEBPFTelemetry(m *manager.Manager, newIns asm.Instruction, specs []*ebp continue } - *ins = newIns + *ins = newIns.WithMetadata(ins.Metadata) } } } diff --git a/pkg/network/telemetry/telemetry_manager.go b/pkg/network/telemetry/telemetry_manager.go index 6a6af70ea8d06..a6cc0753d30c2 100644 --- a/pkg/network/telemetry/telemetry_manager.go +++ b/pkg/network/telemetry/telemetry_manager.go @@ -56,10 +56,10 @@ func initializeMaps(bpfTelemetry *EBPFTelemetry, opts *manager.Options) { } } if bpfTelemetry.MapErrMap != nil { - opts.MapEditors[string(probes.MapErrTelemetryMap)] = bpfTelemetry.MapErrMap + opts.MapEditors[probes.MapErrTelemetryMap] = bpfTelemetry.MapErrMap } if bpfTelemetry.HelperErrMap != nil { - opts.MapEditors[string(probes.HelperErrTelemetryMap)] = bpfTelemetry.HelperErrMap + opts.MapEditors[probes.HelperErrTelemetryMap] = bpfTelemetry.HelperErrMap } } diff --git a/pkg/network/telemetry/utils.go b/pkg/network/telemetry/utils.go index 4c62fe71c1185..60587f8fe9d6e 100644 --- a/pkg/network/telemetry/utils.go +++ b/pkg/network/telemetry/utils.go @@ -60,16 +60,16 @@ func splitTagsAndOptions(all []string) (tags, opts []string) { // insertNestedValueFor("dns.errors.nxdomain", 5, metrics) // Results in: // -// { -// "http": { -// "request_count": 1 -// }, -// "dns": { -// "errors": { -// "nxdomain": 5 -// } -// } -// } +// { +// "http": { +// "request_count": 1 +// }, +// "dns": { +// "errors": { +// "nxdomain": 5 +// } +// } +// } func insertNestedValueFor(name string, value int64, root map[string]interface{}) error { parts := strings.Split(name, ".") if len(parts) == 1 { diff --git a/pkg/network/tracer/connection/kprobe/config.go b/pkg/network/tracer/connection/kprobe/config.go index 5c47bc7bebc5c..20bde5aa80bed 100644 --- a/pkg/network/tracer/connection/kprobe/config.go +++ b/pkg/network/tracer/connection/kprobe/config.go @@ -43,6 +43,7 @@ func enabledProbes(c *config.Config, runtimeTracer bool) (map[probes.ProbeName]s if c.CollectTCPConns { if ClassificationSupported(c) { + enableProbe(enabled, probes.ProtocolClassifierEntrySocketFilter) enableProbe(enabled, probes.ProtocolClassifierSocketFilter) enableProbe(enabled, probes.NetDevQueue) } diff --git a/pkg/network/tracer/connection/kprobe/dump.go b/pkg/network/tracer/connection/kprobe/dump.go index 7de67dddf03a1..42c0270e665c4 100644 --- a/pkg/network/tracer/connection/kprobe/dump.go +++ b/pkg/network/tracer/connection/kprobe/dump.go @@ -35,7 +35,7 @@ func dumpMapsHandler(manager *manager.Manager, mapName string, currentMap *ebpf. output.WriteString(spew.Sdump(key, value)) } - case string(probes.TracerStatusMap): // maps/tracer_status (BPF_MAP_TYPE_HASH), key C.__u64, value tracerStatus + case probes.TracerStatusMap: // maps/tracer_status (BPF_MAP_TYPE_HASH), key C.__u64, value tracerStatus output.WriteString("Map: '" + mapName + "', key: 'C.__u64', value: 'tracerStatus'\n") iter := currentMap.Iterate() var key uint64 @@ -44,7 +44,7 @@ func dumpMapsHandler(manager *manager.Manager, mapName string, currentMap *ebpf. output.WriteString(spew.Sdump(key, value)) } - case string(probes.ConntrackMap): // maps/conntrack (BPF_MAP_TYPE_HASH), key ConnTuple, value ConnTuple + case probes.ConntrackMap: // maps/conntrack (BPF_MAP_TYPE_HASH), key ConnTuple, value ConnTuple output.WriteString("Map: '" + mapName + "', key: 'ConnTuple', value: 'ConnTuple'\n") iter := currentMap.Iterate() var key ddebpf.ConnTuple @@ -53,7 +53,7 @@ func dumpMapsHandler(manager *manager.Manager, mapName string, currentMap *ebpf. output.WriteString(spew.Sdump(key, value)) } - case string(probes.ConntrackTelemetryMap): // maps/conntrack_telemetry (BPF_MAP_TYPE_ARRAY), key C.u32, value conntrackTelemetry + case probes.ConntrackTelemetryMap: // maps/conntrack_telemetry (BPF_MAP_TYPE_ARRAY), key C.u32, value conntrackTelemetry output.WriteString("Map: '" + mapName + "', key: 'C.u32', value: 'conntrackTelemetry'\n") var zero uint64 telemetry := &ddebpf.ConntrackTelemetry{} @@ -62,7 +62,7 @@ func dumpMapsHandler(manager *manager.Manager, mapName string, currentMap *ebpf. } output.WriteString(spew.Sdump(telemetry)) - case string(probes.SockFDLookupArgsMap): // maps/sockfd_lookup_args (BPF_MAP_TYPE_HASH), key C.__u64, value C.__u32 + case probes.SockFDLookupArgsMap: // maps/sockfd_lookup_args (BPF_MAP_TYPE_HASH), key C.__u64, value C.__u32 output.WriteString("Map: '" + mapName + "', key: 'C.__u64', value: 'C.__u32'\n") iter := currentMap.Iterate() var key uint64 @@ -71,7 +71,7 @@ func dumpMapsHandler(manager *manager.Manager, mapName string, currentMap *ebpf. output.WriteString(spew.Sdump(key, value)) } - case string(probes.SockByPidFDMap): // maps/sock_by_pid_fd (BPF_MAP_TYPE_HASH), key C.pid_fd_t, value uintptr // C.struct sock* + case probes.SockByPidFDMap: // maps/sock_by_pid_fd (BPF_MAP_TYPE_HASH), key C.pid_fd_t, value uintptr // C.struct sock* output.WriteString("Map: '" + mapName + "', key: 'C.pid_fd_t', value: 'uintptr // C.struct sock*'\n") iter := currentMap.Iterate() var key ddebpf.PIDFD @@ -80,7 +80,7 @@ func dumpMapsHandler(manager *manager.Manager, mapName string, currentMap *ebpf. output.WriteString(spew.Sdump(key, value)) } - case string(probes.PidFDBySockMap): // maps/pid_fd_by_sock (BPF_MAP_TYPE_HASH), key uintptr // C.struct sock*, value C.pid_fd_t + case probes.PidFDBySockMap: // maps/pid_fd_by_sock (BPF_MAP_TYPE_HASH), key uintptr // C.struct sock*, value C.pid_fd_t output.WriteString("Map: '" + mapName + "', key: 'uintptr // C.struct sock*', value: 'C.pid_fd_t'\n") iter := currentMap.Iterate() var key uintptr // C.struct sock* @@ -89,7 +89,7 @@ func dumpMapsHandler(manager *manager.Manager, mapName string, currentMap *ebpf. output.WriteString(spew.Sdump(key, value)) } - case string(probes.ConnMap): // maps/conn_stats (BPF_MAP_TYPE_HASH), key ConnTuple, value ConnStatsWithTimestamp + case probes.ConnMap: // maps/conn_stats (BPF_MAP_TYPE_HASH), key ConnTuple, value ConnStatsWithTimestamp output.WriteString("Map: '" + mapName + "', key: 'ConnTuple', value: 'ConnStatsWithTimestamp'\n") iter := currentMap.Iterate() var key ddebpf.ConnTuple @@ -98,7 +98,7 @@ func dumpMapsHandler(manager *manager.Manager, mapName string, currentMap *ebpf. output.WriteString(spew.Sdump(key, value)) } - case string(probes.TCPStatsMap): // maps/tcp_stats (BPF_MAP_TYPE_HASH), key ConnTuple, value TCPStats + case probes.TCPStatsMap: // maps/tcp_stats (BPF_MAP_TYPE_HASH), key ConnTuple, value TCPStats output.WriteString("Map: '" + mapName + "', key: 'ConnTuple', value: 'TCPStats'\n") iter := currentMap.Iterate() var key ddebpf.ConnTuple @@ -107,7 +107,7 @@ func dumpMapsHandler(manager *manager.Manager, mapName string, currentMap *ebpf. output.WriteString(spew.Sdump(key, value)) } - case string(probes.ConnCloseBatchMap): // maps/conn_close_batch (BPF_MAP_TYPE_HASH), key C.__u32, value batch + case probes.ConnCloseBatchMap: // maps/conn_close_batch (BPF_MAP_TYPE_HASH), key C.__u32, value batch output.WriteString("Map: '" + mapName + "', key: 'C.__u32', value: 'batch'\n") iter := currentMap.Iterate() var key uint32 @@ -134,7 +134,7 @@ func dumpMapsHandler(manager *manager.Manager, mapName string, currentMap *ebpf. output.WriteString(spew.Sdump(key, value)) } - case string(probes.PortBindingsMap): // maps/port_bindings (BPF_MAP_TYPE_HASH), key portBindingTuple, value C.__u8 + case probes.PortBindingsMap: // maps/port_bindings (BPF_MAP_TYPE_HASH), key portBindingTuple, value C.__u8 output.WriteString("Map: '" + mapName + "', key: 'portBindingTuple', value: 'C.__u8'\n") iter := currentMap.Iterate() var key ddebpf.PortBinding @@ -143,7 +143,7 @@ func dumpMapsHandler(manager *manager.Manager, mapName string, currentMap *ebpf. output.WriteString(spew.Sdump(key, value)) } - case string(probes.UDPPortBindingsMap): // maps/udp_port_bindings (BPF_MAP_TYPE_HASH), key portBindingTuple, value C.__u8 + case probes.UDPPortBindingsMap: // maps/udp_port_bindings (BPF_MAP_TYPE_HASH), key portBindingTuple, value C.__u8 output.WriteString("Map: '" + mapName + "', key: 'portBindingTuple', value: 'C.__u8'\n") iter := currentMap.Iterate() var key ddebpf.PortBinding @@ -161,7 +161,7 @@ func dumpMapsHandler(manager *manager.Manager, mapName string, currentMap *ebpf. output.WriteString(spew.Sdump(key, value)) } - case string(probes.TelemetryMap): // maps/telemetry (BPF_MAP_TYPE_ARRAY), key C.u32, value kernelTelemetry + case probes.TelemetryMap: // maps/telemetry (BPF_MAP_TYPE_ARRAY), key C.u32, value kernelTelemetry output.WriteString("Map: '" + mapName + "', key: 'C.u32', value: 'kernelTelemetry'\n") var zero uint64 telemetry := &ddebpf.Telemetry{} @@ -172,7 +172,7 @@ func dumpMapsHandler(manager *manager.Manager, mapName string, currentMap *ebpf. } output.WriteString(spew.Sdump(telemetry)) - case string(probes.DoSendfileArgsMap): // maps/do_sendfile_args (BPF_MAP_TYPE_HASH), key C.__u64, value uintptr // C.struct sock* + case probes.DoSendfileArgsMap: // maps/do_sendfile_args (BPF_MAP_TYPE_HASH), key C.__u64, value uintptr // C.struct sock* output.WriteString("Map: '" + mapName + "', key: 'C.__u64', value: 'uintptr // C.struct sock*'\n") iter := currentMap.Iterate() var key uint64 diff --git a/pkg/network/tracer/connection/kprobe/manager.go b/pkg/network/tracer/connection/kprobe/manager.go index 55bd0293702f0..b749e3e651c8d 100644 --- a/pkg/network/tracer/connection/kprobe/manager.go +++ b/pkg/network/tracer/connection/kprobe/manager.go @@ -15,7 +15,6 @@ import ( manager "github.com/DataDog/ebpf-manager" "github.com/DataDog/datadog-agent/pkg/ebpf" - "github.com/DataDog/datadog-agent/pkg/network/config" "github.com/DataDog/datadog-agent/pkg/network/ebpf/probes" ) @@ -26,40 +25,41 @@ const ( ) var mainProbes = map[probes.ProbeName]string{ - probes.NetDevQueue: "tracepoint__net__net_dev_queue", - probes.ProtocolClassifierSocketFilter: "socket__classifier", - probes.TCPSendMsg: "kprobe__tcp_sendmsg", - probes.TCPSendMsgReturn: "kretprobe__tcp_sendmsg", - probes.TCPRecvMsg: "kprobe__tcp_recvmsg", - probes.TCPRecvMsgReturn: "kretprobe__tcp_recvmsg", - probes.TCPReadSock: "kprobe__tcp_read_sock", - probes.TCPReadSockReturn: "kretprobe__tcp_read_sock", - probes.TCPClose: "kprobe__tcp_close", - probes.TCPCloseReturn: "kretprobe__tcp_close", - probes.TCPConnect: "kprobe__tcp_connect", - probes.TCPFinishConnect: "kprobe__tcp_finish_connect", - probes.TCPSetState: "kprobe__tcp_set_state", - probes.IPMakeSkb: "kprobe__ip_make_skb", - probes.IPMakeSkbReturn: "kretprobe__ip_make_skb", - probes.IP6MakeSkb: "kprobe__ip6_make_skb", - probes.IP6MakeSkbReturn: "kretprobe__ip6_make_skb", - probes.UDPRecvMsg: "kprobe__udp_recvmsg", - probes.UDPRecvMsgReturn: "kretprobe__udp_recvmsg", - probes.UDPv6RecvMsg: "kprobe__udpv6_recvmsg", - probes.UDPv6RecvMsgReturn: "kretprobe__udpv6_recvmsg", - probes.TCPRetransmit: "kprobe__tcp_retransmit_skb", - probes.InetCskAcceptReturn: "kretprobe__inet_csk_accept", - probes.InetCskListenStop: "kprobe__inet_csk_listen_stop", - probes.UDPDestroySock: "kprobe__udp_destroy_sock", - probes.UDPDestroySockReturn: "kretprobe__udp_destroy_sock", - probes.InetBind: "kprobe__inet_bind", - probes.Inet6Bind: "kprobe__inet6_bind", - probes.InetBindRet: "kretprobe__inet_bind", - probes.Inet6BindRet: "kretprobe__inet6_bind", - probes.SockFDLookup: "kprobe__sockfd_lookup_light", - probes.SockFDLookupRet: "kretprobe__sockfd_lookup_light", - probes.DoSendfile: "kprobe__do_sendfile", - probes.DoSendfileRet: "kretprobe__do_sendfile", + probes.NetDevQueue: "tracepoint__net__net_dev_queue", + probes.ProtocolClassifierEntrySocketFilter: "socket__classifier_entry", + probes.ProtocolClassifierSocketFilter: "socket__classifier", + probes.TCPSendMsg: "kprobe__tcp_sendmsg", + probes.TCPSendMsgReturn: "kretprobe__tcp_sendmsg", + probes.TCPRecvMsg: "kprobe__tcp_recvmsg", + probes.TCPRecvMsgReturn: "kretprobe__tcp_recvmsg", + probes.TCPReadSock: "kprobe__tcp_read_sock", + probes.TCPReadSockReturn: "kretprobe__tcp_read_sock", + probes.TCPClose: "kprobe__tcp_close", + probes.TCPCloseReturn: "kretprobe__tcp_close", + probes.TCPConnect: "kprobe__tcp_connect", + probes.TCPFinishConnect: "kprobe__tcp_finish_connect", + probes.TCPSetState: "kprobe__tcp_set_state", + probes.IPMakeSkb: "kprobe__ip_make_skb", + probes.IPMakeSkbReturn: "kretprobe__ip_make_skb", + probes.IP6MakeSkb: "kprobe__ip6_make_skb", + probes.IP6MakeSkbReturn: "kretprobe__ip6_make_skb", + probes.UDPRecvMsg: "kprobe__udp_recvmsg", + probes.UDPRecvMsgReturn: "kretprobe__udp_recvmsg", + probes.UDPv6RecvMsg: "kprobe__udpv6_recvmsg", + probes.UDPv6RecvMsgReturn: "kretprobe__udpv6_recvmsg", + probes.TCPRetransmit: "kprobe__tcp_retransmit_skb", + probes.InetCskAcceptReturn: "kretprobe__inet_csk_accept", + probes.InetCskListenStop: "kprobe__inet_csk_listen_stop", + probes.UDPDestroySock: "kprobe__udp_destroy_sock", + probes.UDPDestroySockReturn: "kretprobe__udp_destroy_sock", + probes.InetBind: "kprobe__inet_bind", + probes.Inet6Bind: "kprobe__inet6_bind", + probes.InetBindRet: "kretprobe__inet_bind", + probes.Inet6BindRet: "kretprobe__inet6_bind", + probes.SockFDLookup: "kprobe__sockfd_lookup_light", + probes.SockFDLookupRet: "kretprobe__sockfd_lookup_light", + probes.DoSendfile: "kprobe__do_sendfile", + probes.DoSendfileRet: "kretprobe__do_sendfile", } var altProbes = map[probes.ProbeName]string{ @@ -74,32 +74,33 @@ var altProbes = map[probes.ProbeName]string{ probes.UnderscoredSKBFreeDatagramLocked: "kprobe____skb_free_datagram_locked", } -func newManager(config *config.Config, closedHandler *ebpf.PerfHandler, runtimeTracer bool) *manager.Manager { +func newManager(closedHandler *ebpf.PerfHandler, runtimeTracer bool) *manager.Manager { mgr := &manager.Manager{ Maps: []*manager.Map{ - {Name: string(probes.ConnMap)}, - {Name: string(probes.TCPStatsMap)}, - {Name: string(probes.TCPConnectSockPidMap)}, - {Name: string(probes.ConnCloseBatchMap)}, + {Name: probes.ConnMap}, + {Name: probes.TCPStatsMap}, + {Name: probes.TCPConnectSockPidMap}, + {Name: probes.ConnCloseBatchMap}, {Name: "udp_recv_sock"}, {Name: "udpv6_recv_sock"}, - {Name: string(probes.PortBindingsMap)}, - {Name: string(probes.UDPPortBindingsMap)}, + {Name: probes.PortBindingsMap}, + {Name: probes.UDPPortBindingsMap}, {Name: "pending_bind"}, - {Name: string(probes.TelemetryMap)}, - {Name: string(probes.SockByPidFDMap)}, - {Name: string(probes.PidFDBySockMap)}, - {Name: string(probes.SockFDLookupArgsMap)}, - {Name: string(probes.DoSendfileArgsMap)}, - {Name: string(probes.TcpSendMsgArgsMap)}, - {Name: string(probes.IpMakeSkbArgsMap)}, - {Name: string(probes.MapErrTelemetryMap)}, - {Name: string(probes.HelperErrTelemetryMap)}, - {Name: string(probes.TcpRecvMsgArgsMap)}, + {Name: probes.TelemetryMap}, + {Name: probes.SockByPidFDMap}, + {Name: probes.PidFDBySockMap}, + {Name: probes.SockFDLookupArgsMap}, + {Name: probes.DoSendfileArgsMap}, + {Name: probes.TcpSendMsgArgsMap}, + {Name: probes.IpMakeSkbArgsMap}, + {Name: probes.MapErrTelemetryMap}, + {Name: probes.HelperErrTelemetryMap}, + {Name: probes.TcpRecvMsgArgsMap}, + {Name: probes.ClassificationProgsMap}, }, PerfMaps: []*manager.PerfMap{ { - Map: manager.Map{Name: string(probes.ConnCloseEventMap)}, + Map: manager.Map{Name: probes.ConnCloseEventMap}, PerfMapOptions: manager.PerfMapOptions{ PerfRingBufferSize: 8 * os.Getpagesize(), Watermark: 1, @@ -114,7 +115,7 @@ func newManager(config *config.Config, closedHandler *ebpf.PerfHandler, runtimeT for probeName, funcName := range mainProbes { p := &manager.Probe{ ProbeIdentificationPair: manager.ProbeIdentificationPair{ - EBPFSection: string(probeName), + EBPFSection: probeName, EBPFFuncName: funcName, UID: probeUID, }, @@ -127,21 +128,21 @@ func newManager(config *config.Config, closedHandler *ebpf.PerfHandler, runtimeT if runtimeTracer { mgr.Probes = append(mgr.Probes, - &manager.Probe{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: string(probes.SKBFreeDatagramLocked), EBPFFuncName: altProbes[probes.SKBFreeDatagramLocked], UID: probeUID}}, - &manager.Probe{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: string(probes.UnderscoredSKBFreeDatagramLocked), EBPFFuncName: altProbes[probes.UnderscoredSKBFreeDatagramLocked], UID: probeUID}}, - &manager.Probe{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: string(probes.SKBConsumeUDP), EBPFFuncName: altProbes[probes.SKBConsumeUDP], UID: probeUID}}, + &manager.Probe{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: probes.SKBFreeDatagramLocked, EBPFFuncName: altProbes[probes.SKBFreeDatagramLocked], UID: probeUID}}, + &manager.Probe{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: probes.UnderscoredSKBFreeDatagramLocked, EBPFFuncName: altProbes[probes.UnderscoredSKBFreeDatagramLocked], UID: probeUID}}, + &manager.Probe{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: probes.SKBConsumeUDP, EBPFFuncName: altProbes[probes.SKBConsumeUDP], UID: probeUID}}, ) } else { // the runtime compiled tracer has no need for separate probes targeting specific kernel versions, since it can // do that with #ifdefs inline. Thus, the following probes should only be declared as existing in the prebuilt // tracer. mgr.Probes = append(mgr.Probes, - &manager.Probe{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: string(probes.TCPRetransmitPre470), EBPFFuncName: altProbes[probes.TCPRetransmitPre470], UID: probeUID}, MatchFuncName: "^tcp_retransmit_skb$"}, - &manager.Probe{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: string(probes.IP6MakeSkbPre470), EBPFFuncName: altProbes[probes.IP6MakeSkbPre470], UID: probeUID}, MatchFuncName: "^ip6_make_skb$"}, - &manager.Probe{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: string(probes.UDPRecvMsgPre410), EBPFFuncName: altProbes[probes.UDPRecvMsgPre410], UID: probeUID}, MatchFuncName: "^udp_recvmsg$"}, - &manager.Probe{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: string(probes.UDPv6RecvMsgPre410), EBPFFuncName: altProbes[probes.UDPv6RecvMsgPre410], UID: probeUID}, MatchFuncName: "^udpv6_recvmsg$"}, - &manager.Probe{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: string(probes.TCPSendMsgPre410), EBPFFuncName: altProbes[probes.TCPSendMsgPre410], UID: probeUID}, MatchFuncName: "^tcp_sendmsg$"}, - &manager.Probe{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: string(probes.TCPRecvMsgPre410), EBPFFuncName: altProbes[probes.TCPRecvMsgPre410], UID: probeUID}, MatchFuncName: "^tcp_recvmsg$"}, + &manager.Probe{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: probes.TCPRetransmitPre470, EBPFFuncName: altProbes[probes.TCPRetransmitPre470], UID: probeUID}, MatchFuncName: "^tcp_retransmit_skb$"}, + &manager.Probe{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: probes.IP6MakeSkbPre470, EBPFFuncName: altProbes[probes.IP6MakeSkbPre470], UID: probeUID}, MatchFuncName: "^ip6_make_skb$"}, + &manager.Probe{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: probes.UDPRecvMsgPre410, EBPFFuncName: altProbes[probes.UDPRecvMsgPre410], UID: probeUID}, MatchFuncName: "^udp_recvmsg$"}, + &manager.Probe{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: probes.UDPv6RecvMsgPre410, EBPFFuncName: altProbes[probes.UDPv6RecvMsgPre410], UID: probeUID}, MatchFuncName: "^udpv6_recvmsg$"}, + &manager.Probe{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: probes.TCPSendMsgPre410, EBPFFuncName: altProbes[probes.TCPSendMsgPre410], UID: probeUID}, MatchFuncName: "^tcp_sendmsg$"}, + &manager.Probe{ProbeIdentificationPair: manager.ProbeIdentificationPair{EBPFSection: probes.TCPRecvMsgPre410, EBPFFuncName: altProbes[probes.TCPRecvMsgPre410], UID: probeUID}, MatchFuncName: "^tcp_recvmsg$"}, ) } diff --git a/pkg/network/tracer/connection/kprobe/tcp_close_consumer.go b/pkg/network/tracer/connection/kprobe/tcp_close_consumer.go index c42021ce722fc..60f61848190f0 100644 --- a/pkg/network/tracer/connection/kprobe/tcp_close_consumer.go +++ b/pkg/network/tracer/connection/kprobe/tcp_close_consumer.go @@ -40,11 +40,11 @@ type tcpCloseConsumer struct { } func newTCPCloseConsumer(m *manager.Manager, perfHandler *ddebpf.PerfHandler) (*tcpCloseConsumer, error) { - connCloseEventMap, _, err := m.GetMap(string(probes.ConnCloseEventMap)) + connCloseEventMap, _, err := m.GetMap(probes.ConnCloseEventMap) if err != nil { return nil, err } - connCloseMap, _, err := m.GetMap(string(probes.ConnCloseBatchMap)) + connCloseMap, _, err := m.GetMap(probes.ConnCloseBatchMap) if err != nil { return nil, err } diff --git a/pkg/network/tracer/connection/kprobe/tracer.go b/pkg/network/tracer/connection/kprobe/tracer.go index 590dcda46d9c2..735691d3a2919 100644 --- a/pkg/network/tracer/connection/kprobe/tracer.go +++ b/pkg/network/tracer/connection/kprobe/tracer.go @@ -45,6 +45,18 @@ var ( // The kernel has to be newer than 4.7.0 since we are using bpf_skb_load_bytes (4.5.0+) method to read from the // socket filter, and a tracepoint (4.7.0+). classificationMinimumKernel = kernel.VersionCode(4, 7, 0) + + tailCalls = []manager.TailCallRoute{ + { + ProgArrayName: probes.ClassificationProgsMap, + Key: 0, + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + EBPFSection: probes.ProtocolClassifierSocketFilter, + EBPFFuncName: mainProbes[probes.ProtocolClassifierSocketFilter], + UID: probeUID, + }, + }, + } ) type kprobeTracer struct { @@ -117,12 +129,15 @@ func New(config *config.Config, constants []manager.ConstantEditor, bpfTelemetry Max: math.MaxUint64, }, MapSpecEditors: map[string]manager.MapSpecEditor{ - string(probes.ConnMap): {Type: ebpf.Hash, MaxEntries: uint32(config.MaxTrackedConnections), EditorFlag: manager.EditMaxEntries}, - string(probes.TCPStatsMap): {Type: ebpf.Hash, MaxEntries: uint32(config.MaxTrackedConnections), EditorFlag: manager.EditMaxEntries}, - string(probes.PortBindingsMap): {Type: ebpf.Hash, MaxEntries: uint32(config.MaxTrackedConnections), EditorFlag: manager.EditMaxEntries}, - string(probes.UDPPortBindingsMap): {Type: ebpf.Hash, MaxEntries: uint32(config.MaxTrackedConnections), EditorFlag: manager.EditMaxEntries}, - string(probes.SockByPidFDMap): {Type: ebpf.Hash, MaxEntries: uint32(config.MaxTrackedConnections), EditorFlag: manager.EditMaxEntries}, - string(probes.PidFDBySockMap): {Type: ebpf.Hash, MaxEntries: uint32(config.MaxTrackedConnections), EditorFlag: manager.EditMaxEntries}, + probes.ConnMap: {Type: ebpf.Hash, MaxEntries: uint32(config.MaxTrackedConnections), EditorFlag: manager.EditMaxEntries}, + probes.TCPStatsMap: {Type: ebpf.Hash, MaxEntries: uint32(config.MaxTrackedConnections), EditorFlag: manager.EditMaxEntries}, + probes.PortBindingsMap: {Type: ebpf.Hash, MaxEntries: uint32(config.MaxTrackedConnections), EditorFlag: manager.EditMaxEntries}, + probes.UDPPortBindingsMap: {Type: ebpf.Hash, MaxEntries: uint32(config.MaxTrackedConnections), EditorFlag: manager.EditMaxEntries}, + probes.SockByPidFDMap: {Type: ebpf.Hash, MaxEntries: uint32(config.MaxTrackedConnections), EditorFlag: manager.EditMaxEntries}, + probes.PidFDBySockMap: {Type: ebpf.Hash, MaxEntries: uint32(config.MaxTrackedConnections), EditorFlag: manager.EditMaxEntries}, + + probes.ConnectionProtocolMap: {Type: ebpf.Hash, MaxEntries: uint32(config.MaxTrackedConnections), EditorFlag: manager.EditMaxEntries}, + probes.ConnectionTupleToSocketSKBConnMap: {Type: ebpf.Hash, MaxEntries: uint32(config.MaxTrackedConnections), EditorFlag: manager.EditMaxEntries}, }, ConstantEditors: constants, DefaultKprobeAttachMethod: kprobeAttachMethod, @@ -163,24 +178,38 @@ func New(config *config.Config, constants []manager.ConstantEditor, bpfTelemetry closedChannelSize = config.ClosedChannelSize } perfHandlerTCP := ddebpf.NewPerfHandler(closedChannelSize) - m := newManager(config, perfHandlerTCP, runtimeTracer) + m := newManager(perfHandlerTCP, runtimeTracer) m.DumpHandler = dumpMapsHandler + var undefinedProbes []manager.ProbeIdentificationPair + var closeProtocolClassifierSocketFilterFn func() - if ClassificationSupported(config) { - socketFilerProbe, _ := m.GetProbe(manager.ProbeIdentificationPair{ - EBPFSection: string(probes.ProtocolClassifierSocketFilter), - EBPFFuncName: mainProbes[probes.ProtocolClassifierSocketFilter], + if ClassificationSupported(config) && config.CollectTCPConns { + socketFilterProbe, _ := m.GetProbe(manager.ProbeIdentificationPair{ + EBPFSection: probes.ProtocolClassifierEntrySocketFilter, + EBPFFuncName: mainProbes[probes.ProtocolClassifierEntrySocketFilter], UID: probeUID, }) - if socketFilerProbe == nil { + if socketFilterProbe == nil { return nil, fmt.Errorf("error retrieving protocol classifier socket filter") } - closeProtocolClassifierSocketFilterFn, err = filter.HeadlessSocketFilter(config, socketFilerProbe) + closeProtocolClassifierSocketFilterFn, err = filter.HeadlessSocketFilter(config, socketFilterProbe) if err != nil { return nil, fmt.Errorf("error enabling protocol classifier: %s", err) } + + undefinedProbes = append(undefinedProbes, tailCalls[0].ProbeIdentificationPair) + mgrOptions.TailCallRouter = append(mgrOptions.TailCallRouter, tailCalls...) + } else { + // Kernels < 4.7.0 do not know about the per-cpu array map used + // in classification, preventing the program to load even though + // we won't use it. We change the type to a simple array map to + // circumvent that. + mgrOptions.MapSpecEditors[probes.ProtocolClassificationBufMap] = manager.MapSpecEditor{ + Type: ebpf.Array, + EditorFlag: manager.EditType, + } } currKernelVersion, err := kernel.HostVersion() @@ -189,24 +218,35 @@ func New(config *config.Config, constants []manager.ConstantEditor, bpfTelemetry } activateBPFTelemetry := currKernelVersion >= kernel.VersionCode(4, 14, 0) m.InstructionPatcher = func(m *manager.Manager) error { - return errtelemetry.PatchEBPFTelemetry(m, activateBPFTelemetry, []manager.ProbeIdentificationPair{}) + return errtelemetry.PatchEBPFTelemetry(m, activateBPFTelemetry, undefinedProbes) } // exclude all non-enabled probes to ensure we don't run into problems with unsupported probe types for _, p := range m.Probes { - if _, enabled := enabledProbes[probes.ProbeName(p.EBPFSection)]; !enabled { + if _, enabled := enabledProbes[p.EBPFSection]; !enabled { mgrOptions.ExcludedFunctions = append(mgrOptions.ExcludedFunctions, p.EBPFFuncName) } } + + tailCallsIdentifiersSet := make(map[manager.ProbeIdentificationPair]struct{}, len(tailCalls)) + for _, tailCall := range tailCalls { + tailCallsIdentifiersSet[tailCall.ProbeIdentificationPair] = struct{}{} + } + for probeName, funcName := range enabledProbes { + probeIdentifier := manager.ProbeIdentificationPair{ + EBPFSection: probeName, + EBPFFuncName: funcName, + UID: probeUID, + } + if _, ok := tailCallsIdentifiersSet[probeIdentifier]; ok { + // tail calls should be enabled (a.k.a. not excluded) but not activated. + continue + } mgrOptions.ActivatedProbes = append( mgrOptions.ActivatedProbes, &manager.ProbeSelector{ - ProbeIdentificationPair: manager.ProbeIdentificationPair{ - EBPFSection: string(probeName), - EBPFFuncName: funcName, - UID: probeUID, - }, + ProbeIdentificationPair: probeIdentifier, }) } @@ -233,21 +273,21 @@ func New(config *config.Config, constants []manager.ConstantEditor, bpfTelemetry closeProtocolClassifierSocketFilterFn: closeProtocolClassifierSocketFilterFn, } - tr.conns, _, err = m.GetMap(string(probes.ConnMap)) + tr.conns, _, err = m.GetMap(probes.ConnMap) if err != nil { tr.Stop() return nil, fmt.Errorf("error retrieving the bpf %s map: %s", probes.ConnMap, err) } - tr.tcpStats, _, err = m.GetMap(string(probes.TCPStatsMap)) + tr.tcpStats, _, err = m.GetMap(probes.TCPStatsMap) if err != nil { tr.Stop() return nil, fmt.Errorf("error retrieving the bpf %s map: %s", probes.TCPStatsMap, err) } if bpfTelemetry != nil { - bpfTelemetry.MapErrMap = tr.GetMap(string(probes.MapErrTelemetryMap)) - bpfTelemetry.HelperErrMap = tr.GetMap(string(probes.HelperErrTelemetryMap)) + bpfTelemetry.MapErrMap = tr.GetMap(probes.MapErrTelemetryMap) + bpfTelemetry.HelperErrMap = tr.GetMap(probes.HelperErrTelemetryMap) } if err := bpfTelemetry.RegisterEBPFTelemetry(m); err != nil { @@ -294,18 +334,14 @@ func (t *kprobeTracer) Stop() { func (t *kprobeTracer) GetMap(name string) *ebpf.Map { switch name { - case string(probes.SockByPidFDMap): - m, _, _ := t.m.GetMap(name) - return m - case string(probes.MapErrTelemetryMap): - m, _, _ := t.m.GetMap(name) - return m - case string(probes.HelperErrTelemetryMap): - m, _, _ := t.m.GetMap(name) - return m + case probes.SockByPidFDMap: + case probes.MapErrTelemetryMap: + case probes.HelperErrTelemetryMap: default: return nil } + m, _, _ := t.m.GetMap(name) + return m } func (t *kprobeTracer) GetConnections(buffer *network.ConnectionBuffer, filter func(*network.ConnectionStats) bool) error { @@ -430,7 +466,7 @@ func (t *kprobeTracer) Remove(conn *network.ConnectionStats) error { func (t *kprobeTracer) GetTelemetry() map[string]int64 { var zero uint64 - mp, _, err := t.m.GetMap(string(probes.TelemetryMap)) + mp, _, err := t.m.GetMap(probes.TelemetryMap) if err != nil { log.Warnf("error retrieving telemetry map: %s", err) return map[string]int64{} @@ -478,7 +514,7 @@ func initializePortBindingMaps(config *config.Config, m *manager.Manager) error return fmt.Errorf("failed to read initial TCP pid->port mapping: %s", err) } - tcpPortMap, _, err := m.GetMap(string(probes.PortBindingsMap)) + tcpPortMap, _, err := m.GetMap(probes.PortBindingsMap) if err != nil { return fmt.Errorf("failed to get TCP port binding map: %w", err) } @@ -496,7 +532,7 @@ func initializePortBindingMaps(config *config.Config, m *manager.Manager) error return fmt.Errorf("failed to read initial UDP pid->port mapping: %s", err) } - udpPortMap, _, err := m.GetMap(string(probes.UDPPortBindingsMap)) + udpPortMap, _, err := m.GetMap(probes.UDPPortBindingsMap) if err != nil { return fmt.Errorf("failed to get UDP port binding map: %w", err) } @@ -565,7 +601,7 @@ func populateConnStats(stats *network.ConnectionStats, t *netebpf.ConnTuple, s * Cookie: s.Cookie, } - if s.Protocol < uint8(network.MaxProtocols) { + if network.IsValidProtocolValue(s.Protocol) { stats.Protocol = network.ProtocolType(s.Protocol) } else { log.Warnf("got protocol %d which is not recognized by the agent", s.Protocol) diff --git a/pkg/network/tracer/ebpf_conntracker.go b/pkg/network/tracer/ebpf_conntracker.go index 900af15d27c4f..bf09bae504786 100644 --- a/pkg/network/tracer/ebpf_conntracker.go +++ b/pkg/network/tracer/ebpf_conntracker.go @@ -109,13 +109,13 @@ func NewEBPFConntracker(cfg *config.Config, bpfTelemetry *errtelemetry.EBPFTelem return nil, fmt.Errorf("failed to start ebpf conntracker: %w", err) } - ctMap, _, err := m.GetMap(string(probes.ConntrackMap)) + ctMap, _, err := m.GetMap(probes.ConntrackMap) if err != nil { _ = m.Stop(manager.CleanAll) return nil, fmt.Errorf("unable to get conntrack map: %w", err) } - telemetryMap, _, err := m.GetMap(string(probes.ConntrackTelemetryMap)) + telemetryMap, _, err := m.GetMap(probes.ConntrackTelemetryMap) if err != nil { _ = m.Stop(manager.CleanAll) return nil, fmt.Errorf("unable to get telemetry map: %w", err) @@ -167,8 +167,8 @@ func (e *ebpfConntracker) dumpInitialTables(ctx context.Context, cfg *config.Con return err } } - if err := e.m.DetachHook(manager.ProbeIdentificationPair{EBPFSection: string(probes.ConntrackFillInfo), EBPFFuncName: "kprobe_ctnetlink_fill_info"}); err != nil { - log.Debugf("detachHook %s/kprobe_ctnetlink_fill_info : %s", string(probes.ConntrackFillInfo), err) + if err := e.m.DetachHook(manager.ProbeIdentificationPair{EBPFSection: probes.ConntrackFillInfo, EBPFFuncName: "kprobe_ctnetlink_fill_info"}); err != nil { + log.Debugf("detachHook %s/kprobe_ctnetlink_fill_info : %s", probes.ConntrackFillInfo, err) } return nil } @@ -381,21 +381,21 @@ func (e *ebpfConntracker) DumpCachedTable(ctx context.Context) (map[uint32][]net func getManager(cfg *config.Config, buf io.ReaderAt, maxStateSize int, mapErrTelemetryMap, helperErrTelemetryMap *ebpf.Map) (*manager.Manager, error) { mgr := &manager.Manager{ Maps: []*manager.Map{ - {Name: string(probes.ConntrackMap)}, - {Name: string(probes.ConntrackTelemetryMap)}, + {Name: probes.ConntrackMap}, + {Name: probes.ConntrackTelemetryMap}, }, PerfMaps: []*manager.PerfMap{}, Probes: []*manager.Probe{ { ProbeIdentificationPair: manager.ProbeIdentificationPair{ - EBPFSection: string(probes.ConntrackHashInsert), + EBPFSection: probes.ConntrackHashInsert, EBPFFuncName: "kprobe___nf_conntrack_hash_insert", UID: "conntracker", }, }, { ProbeIdentificationPair: manager.ProbeIdentificationPair{ - EBPFSection: string(probes.ConntrackFillInfo), + EBPFSection: probes.ConntrackFillInfo, EBPFFuncName: "kprobe_ctnetlink_fill_info", UID: "conntracker", }, @@ -431,7 +431,7 @@ func getManager(cfg *config.Config, buf io.ReaderAt, maxStateSize int, mapErrTel Max: math.MaxUint64, }, MapSpecEditors: map[string]manager.MapSpecEditor{ - string(probes.ConntrackMap): {Type: ebpf.Hash, MaxEntries: uint32(cfg.ConntrackMaxStateSize), EditorFlag: manager.EditMaxEntries}, + probes.ConntrackMap: {Type: ebpf.Hash, MaxEntries: uint32(cfg.ConntrackMaxStateSize), EditorFlag: manager.EditMaxEntries}, }, ConstantEditors: telemetryMapKeys, DefaultKprobeAttachMethod: kprobeAttachMethod, @@ -441,10 +441,10 @@ func getManager(cfg *config.Config, buf io.ReaderAt, maxStateSize int, mapErrTel } if mapErrTelemetryMap != nil { - opts.MapEditors[string(probes.MapErrTelemetryMap)] = mapErrTelemetryMap + opts.MapEditors[probes.MapErrTelemetryMap] = mapErrTelemetryMap } if helperErrTelemetryMap != nil { - opts.MapEditors[string(probes.HelperErrTelemetryMap)] = helperErrTelemetryMap + opts.MapEditors[probes.HelperErrTelemetryMap] = helperErrTelemetryMap } err = mgr.InitWithOptions(buf, opts) diff --git a/pkg/network/tracer/offsetguess.go b/pkg/network/tracer/offsetguess.go index ec07543e25fd9..492d3c565c079 100644 --- a/pkg/network/tracer/offsetguess.go +++ b/pkg/network/tracer/offsetguess.go @@ -137,7 +137,7 @@ var offsetProbes = map[probes.ProbeName]string{ func idPair(name probes.ProbeName) manager.ProbeIdentificationPair { return manager.ProbeIdentificationPair{ - EBPFSection: string(name), + EBPFSection: name, EBPFFuncName: offsetProbes[name], UID: "offset", } @@ -147,7 +147,7 @@ func newOffsetManager() *manager.Manager { return &manager.Manager{ Maps: []*manager.Map{ {Name: "connectsock_ipv6"}, - {Name: string(probes.TracerStatusMap)}, + {Name: probes.TracerStatusMap}, }, PerfMaps: []*manager.PerfMap{}, Probes: []*manager.Probe{ @@ -629,15 +629,17 @@ func flowi6EntryState(status *netebpf.TracerStatus) netebpf.GuessWhat { // possible offset and expected value of each field in a eBPF map. In kernel-space // we rely on two different kprobes: `tcp_getsockopt` and `tcp_connect_v6`. When they're // are triggered, we store the value of -// (struct sock *)skp + possible_offset +// +// (struct sock *)skp + possible_offset +// // in the eBPF map. Then, back in userspace (checkAndUpdateCurrentOffset()), we // check that value against the expected value of the field, advancing the // offset and repeating the process until we find the value we expect. Then, we // guess the next field. func guessOffsets(m *manager.Manager, cfg *config.Config) ([]manager.ConstantEditor, error) { - mp, _, err := m.GetMap(string(probes.TracerStatusMap)) + mp, _, err := m.GetMap(probes.TracerStatusMap) if err != nil { - return nil, fmt.Errorf("unable to find map %s: %s", string(probes.TracerStatusMap), err) + return nil, fmt.Errorf("unable to find map %s: %s", probes.TracerStatusMap, err) } // When reading kernel structs at different offsets, don't go over the set threshold diff --git a/pkg/network/tracer/process_cache.go b/pkg/network/tracer/process_cache.go new file mode 100644 index 0000000000000..cb7e568e1a1df --- /dev/null +++ b/pkg/network/tracer/process_cache.go @@ -0,0 +1,307 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package tracer + +import ( + "fmt" + "strings" + "sync" + + lru "github.com/hashicorp/golang-lru" + "go.uber.org/atomic" + + smodel "github.com/DataDog/datadog-agent/pkg/security/secl/model" + "github.com/DataDog/datadog-agent/pkg/util/atomicstats" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +var defaultFilteredEnvs = []string{ + "DD_ENV", + "DD_VERSION", + "DD_SERVICE", +} + +const ( + maxProcessQueueLen = 100 + // maxProcessListSize is the max size of a processList + maxProcessListSize = 3 +) + +type process struct { + Pid uint32 + Envs map[string]string + ContainerID string + StartTime int64 +} + +type processList []*process + +type _processCacheStats struct { + cacheEvicts *atomic.Uint64 `stats:""` + cacheLength *atomic.Uint64 `stats:""` + eventsDropped *atomic.Uint64 `stats:""` + eventsSkipped *atomic.Uint64 `stats:""` +} + +type processCache struct { + sync.Mutex + + // cache of pid -> list of processes holds a list of processes + // with the same pid but differing start times up to a max of + // maxProcessListSize. this is used to determine the closest + // match to a connection's tiimestamp + cacheByPid map[uint32]processList + // lru cache; keyed by (pid, start time) + cache *lru.Cache + // filteredEnvs contains environment variable names + // that a process in the cache must have; empty filteredEnvs + // means no filter, and any process can be inserted the cache + filteredEnvs map[string]struct{} + + in chan *process + stopped chan struct{} + stop sync.Once + + stats _processCacheStats +} + +type processCacheKey struct { + pid uint32 + startTime int64 +} + +func newProcessCache(maxProcs int, filteredEnvs []string) (*processCache, error) { + pc := &processCache{ + filteredEnvs: make(map[string]struct{}, len(filteredEnvs)), + cacheByPid: map[uint32]processList{}, + in: make(chan *process, maxProcessQueueLen), + stopped: make(chan struct{}), + stats: _processCacheStats{ + cacheEvicts: atomic.NewUint64(0), + cacheLength: atomic.NewUint64(0), + eventsDropped: atomic.NewUint64(0), + eventsSkipped: atomic.NewUint64(0), + }, + } + + for _, e := range filteredEnvs { + pc.filteredEnvs[e] = struct{}{} + } + + var err error + pc.cache, err = lru.NewWithEvict(maxProcs, func(key, value interface{}) { + p := value.(*process) + pl, _ := pc.cacheByPid[p.Pid] + if pl = pl.remove(p); len(pl) == 0 { + delete(pc.cacheByPid, p.Pid) + return + } + + pc.cacheByPid[p.Pid] = pl + }) + + if err != nil { + return nil, err + } + + go func() { + for { + select { + case <-pc.stopped: + return + case p := <-pc.in: + pc.add(p) + } + } + }() + + return pc, nil +} + +func (pc *processCache) handleProcessEvent(entry *smodel.ProcessCacheEntry) { + + select { + case <-pc.stopped: + return + default: + } + + p := pc.processEvent(entry) + if p == nil { + pc.stats.eventsSkipped.Add(1) + return + } + + select { + case pc.in <- p: + default: + // dropped + pc.stats.eventsDropped.Add(1) + } +} + +func (pc *processCache) processEvent(entry *smodel.ProcessCacheEntry) *process { + var envs map[string]string + if entry.EnvsEntry != nil { + values, _ := entry.EnvsEntry.ToArray() + for _, v := range values { + k, v, _ := strings.Cut(v, "=") + if len(pc.filteredEnvs) > 0 { + if _, found := pc.filteredEnvs[k]; !found { + continue + } + } + + if envs == nil { + envs = make(map[string]string) + } + envs[k] = v + + if len(pc.filteredEnvs) > 0 && len(pc.filteredEnvs) == len(envs) { + break + } + } + } + + if len(envs) == 0 && len(pc.filteredEnvs) > 0 && entry.ContainerID == "" { + return nil + } + + return &process{ + Pid: entry.Pid, + Envs: envs, + ContainerID: entry.ContainerID, + StartTime: entry.ExecTime.UnixNano(), + } +} + +func (pc *processCache) Stop() { + if pc == nil { + return + } + + pc.stop.Do(func() { close(pc.stopped) }) +} + +func (pc *processCache) add(p *process) { + if pc == nil { + return + } + + pc.Lock() + defer pc.Unlock() + + log.TraceFunc(func() string { + return fmt.Sprintf("adding process %+v to process cache", p) + }) + + evicted := pc.cache.Add(processCacheKey{pid: p.Pid, startTime: p.StartTime}, p) + pl, _ := pc.cacheByPid[p.Pid] + pc.cacheByPid[p.Pid] = pl.update(p) + + if evicted { + pc.stats.cacheEvicts.Add(1) + } +} + +func (pc *processCache) GetStats() map[string]interface{} { + if pc == nil { + return map[string]interface{}{} + } + + pc.Lock() + defer pc.Unlock() + + pc.stats.cacheLength.Store(uint64(pc.cache.Len())) + return atomicstats.Report(&pc.stats) +} + +func (pc *processCache) Get(pid uint32, ts int64) (*process, bool) { + if pc == nil { + return nil, false + } + + pc.Lock() + defer pc.Unlock() + + pl, _ := pc.cacheByPid[pid] + if closest := pl.closest(ts); closest != nil { + pc.cache.Get(processCacheKey{pid: closest.Pid, startTime: closest.StartTime}) + return closest, true + } + + return nil, false +} + +func (pc *processCache) Dump() (interface{}, error) { + res := map[uint32]interface{}{} + if pc == nil { + return res, nil + } + + pc.Lock() + defer pc.Unlock() + + for pid, pl := range pc.cacheByPid { + res[pid] = pl + } + + return res, nil +} + +func (pl processList) update(p *process) processList { + for i := range pl { + if pl[i].StartTime == p.StartTime { + pl[i] = p + return pl + } + } + + if len(pl) == maxProcessListSize { + copy(pl, pl[1:]) + pl = pl[:len(pl)-1] + } + + if pl == nil { + pl = make(processList, 0, maxProcessListSize) + } + + return append(pl, p) +} + +func (pl processList) remove(p *process) processList { + for i := range pl { + if pl[i] == p { + return append(pl[:i], pl[i+1:]...) + } + } + + return pl +} + +func abs(i int64) int64 { + if i < 0 { + return -i + } + + return i +} + +func (pl processList) closest(ts int64) *process { + var closest *process + for i := range pl { + if ts >= pl[i].StartTime && + (closest == nil || + abs(closest.StartTime-ts) > abs(pl[i].StartTime-ts)) { + closest = pl[i] + } + } + + return closest +} diff --git a/pkg/network/tracer/process_cache_test.go b/pkg/network/tracer/process_cache_test.go new file mode 100644 index 0000000000000..ed856775bd3cf --- /dev/null +++ b/pkg/network/tracer/process_cache_test.go @@ -0,0 +1,341 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux_bpf +// +build linux_bpf + +package tracer + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + smodel "github.com/DataDog/datadog-agent/pkg/security/secl/model" +) + +func TestProcessCacheProcessEvent(t *testing.T) { + + const ddService = "DD_SERVICE" + const ddVersion = "DD_VERSION" + const ddEnv = "DD_ENV" + + envs := map[string]string{ + ddService: "service", + ddVersion: "version", + ddEnv: "env", + } + + tests := []struct { + envs []string + filter []string + filtered []string + containerID string + }{ + {}, + {envs: nil, filter: defaultFilteredEnvs, filtered: nil}, + {envs: []string{ddEnv}, filter: defaultFilteredEnvs, filtered: []string{ddEnv}}, + {envs: []string{ddVersion}, filter: defaultFilteredEnvs, filtered: []string{ddVersion}}, + {envs: []string{ddService}, filter: defaultFilteredEnvs, filtered: []string{ddService}}, + {envs: []string{ddEnv, ddVersion}, filter: defaultFilteredEnvs, filtered: []string{ddEnv, ddVersion}}, + {envs: []string{ddEnv, ddService}, filter: defaultFilteredEnvs, filtered: []string{ddEnv, ddService}}, + {envs: []string{ddVersion, ddService}, filter: defaultFilteredEnvs, filtered: []string{ddVersion, ddService}}, + {envs: []string{ddService, ddVersion, ddEnv}, filter: defaultFilteredEnvs, filtered: defaultFilteredEnvs}, + {envs: []string{ddService, ddVersion, ddEnv, "foo=bar"}, filter: defaultFilteredEnvs, filtered: defaultFilteredEnvs}, + {envs: []string{"foo"}, filter: defaultFilteredEnvs, filtered: []string{}}, + {envs: []string{ddEnv}}, + {envs: []string{ddVersion}}, + {envs: []string{ddService}}, + {envs: []string{ddEnv, ddVersion}}, + {envs: []string{ddEnv, ddService}}, + {envs: []string{ddVersion, ddService}}, + {envs: []string{ddService, ddVersion, ddEnv}}, + } + + testFunc := func(t *testing.T, entry *smodel.ProcessCacheEntry) { + for i, te := range tests { + t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { + pc, err := newProcessCache(10, te.filter) + require.NoError(t, err) + + var values []string + for _, e := range te.envs { + values = append(values, e+"="+envs[e]) + } + + entry.EnvsEntry.SetValues(values) + + p := pc.processEvent(entry) + if entry.ContainerID == "" && len(te.filter) > 0 && len(te.filtered) == 0 { + assert.Nil(t, p) + } else { + assert.NotNil(t, p) + assert.Equal(t, entry.Pid, p.Pid) + if entry.ContainerID != "" { + assert.Equal(t, entry.ContainerID, p.ContainerID) + } + l := te.envs + if len(te.filter) > 0 { + l = te.filtered + } + assert.Len(t, p.Envs, len(l)) + for _, e := range l { + assert.Contains(t, p.Envs, e) + assert.Equal(t, envs[e], p.Envs[e]) + } + } + + pc.Stop() + }) + } + } + + t.Run("without container id", func(t *testing.T) { + entry := smodel.ProcessCacheEntry{ + ProcessContext: smodel.ProcessContext{ + Process: smodel.Process{ + PIDContext: smodel.PIDContext{ + Pid: 1234, + }, + EnvsEntry: &smodel.EnvsEntry{}, + }, + }, + } + + testFunc(t, &entry) + }) + + t.Run("with container id", func(t *testing.T) { + entry := smodel.ProcessCacheEntry{ + ProcessContext: smodel.ProcessContext{ + Process: smodel.Process{ + PIDContext: smodel.PIDContext{ + Pid: 1234, + }, + ContainerID: "container", + EnvsEntry: &smodel.EnvsEntry{}, + }, + }, + } + + testFunc(t, &entry) + }) +} + +func TestProcessCacheAdd(t *testing.T) { + t.Run("fewer than maxProcessListSize", func(t *testing.T) { + pc, err := newProcessCache(5, nil) + require.NoError(t, err) + require.NotNil(t, pc) + + pc.add(&process{ + Pid: 1234, + StartTime: 1, + }) + + p, ok := pc.Get(1234, 1) + require.True(t, ok) + require.NotNil(t, p) + assert.Equal(t, uint32(1234), p.Pid) + assert.Equal(t, int64(1), p.StartTime) + }) + + t.Run("greater than maxProcessListSize", func(t *testing.T) { + pc, err := newProcessCache(10, nil) + require.NoError(t, err) + require.NotNil(t, pc) + + for i := 0; i < maxProcessListSize+1; i++ { + pc.add(&process{ + Pid: 1234, + StartTime: int64(i), + }) + } + + p, ok := pc.Get(1234, 0) + require.False(t, ok) + require.Nil(t, p) + + // verify all other processes are correct + for i := 1; i < maxProcessListSize+1; i++ { + p, ok = pc.Get(1234, int64(i)) + require.True(t, ok) + assert.Equal(t, uint32(1234), p.Pid) + assert.Equal(t, int64(i), p.StartTime) + } + }) + + t.Run("process evicted, same pid", func(t *testing.T) { + pc, err := newProcessCache(2, nil) + require.NoError(t, err) + require.NotNil(t, pc) + + pc.add(&process{ + Pid: 1234, + StartTime: 1, + }) + + pc.add(&process{ + Pid: 1234, + StartTime: 2, + }) + + pc.add(&process{ + Pid: 1234, + StartTime: 3, + }) + + p, ok := pc.Get(1234, 1) + assert.False(t, ok) + require.Nil(t, p) + + for _, startTime := range []int64{2, 3} { + p, ok = pc.Get(1234, startTime) + assert.True(t, ok) + require.NotNil(t, p) + assert.Equal(t, uint32(1234), p.Pid) + assert.Equal(t, startTime, p.StartTime) + } + + // replace pid 1234 with 4567 + pc.add(&process{ + Pid: 4567, + StartTime: 2, + }) + + pc.add(&process{ + Pid: 4567, + StartTime: 3, + }) + + for _, startTime := range []int64{1, 2, 3} { + p, ok = pc.Get(1234, startTime) + assert.False(t, ok) + assert.Nil(t, p) + } + }) + + t.Run("process evicted, different pid", func(t *testing.T) { + pc, err := newProcessCache(1, nil) + require.NoError(t, err) + require.NotNil(t, pc) + + pc.add(&process{ + Pid: 1234, + StartTime: 1, + }) + + pc.add(&process{ + Pid: 1235, + StartTime: 2, + }) + + p, ok := pc.Get(1234, 1) + assert.False(t, ok) + assert.Nil(t, p) + + p, ok = pc.Get(1235, 2) + assert.True(t, ok) + require.NotNil(t, p) + assert.Equal(t, uint32(1235), p.Pid) + assert.Equal(t, int64(2), p.StartTime) + }) + + t.Run("process updated", func(t *testing.T) { + pc, err := newProcessCache(1, nil) + require.NoError(t, err) + require.NotNil(t, pc) + + pc.add(&process{ + Pid: 1234, + StartTime: 1, + Envs: map[string]string{ + "foo": "bar", + }, + }) + + p, ok := pc.Get(1234, 1) + assert.True(t, ok) + require.NotNil(t, p) + assert.Equal(t, uint32(1234), p.Pid) + assert.Equal(t, int64(1), p.StartTime) + assert.Equal(t, p.Envs["foo"], "bar") + + pc.add(&process{ + Pid: 1234, + StartTime: 1, + Envs: map[string]string{"bar": "foo"}, + }) + + p, ok = pc.Get(1234, 1) + assert.True(t, ok) + require.NotNil(t, p) + assert.Equal(t, uint32(1234), p.Pid) + assert.Equal(t, int64(1), p.StartTime) + assert.Equal(t, p.Envs["bar"], "foo") + assert.NotContains(t, p.Envs, "foo") + }) +} + +func TestProcessCacheGet(t *testing.T) { + pc, err := newProcessCache(10, nil) + require.NoError(t, err) + require.NotNil(t, pc) + + pc.add(&process{ + Pid: 1234, + StartTime: 5, + }) + + pc.add(&process{ + Pid: 1234, + StartTime: 14, + }) + + pc.add(&process{ + Pid: 1234, + StartTime: 10, + }) + + t.Run("pid not found", func(t *testing.T) { + p, ok := pc.Get(1235, 0) + assert.False(t, ok) + assert.Nil(t, p) + }) + + tests := []struct { + ts int64 + + ok bool + startTime int64 + }{ + {ts: 1, ok: false, startTime: 5}, + {ts: 5, ok: true, startTime: 5}, + {ts: 6, ok: true, startTime: 5}, + {ts: 9, ok: true, startTime: 5}, + {ts: 10, ok: true, startTime: 10}, + {ts: 11, ok: true, startTime: 10}, + {ts: 12, ok: true, startTime: 10}, + {ts: 14, ok: true, startTime: 14}, + {ts: 15, ok: true, startTime: 14}, + {ts: 16, ok: true, startTime: 14}, + } + + for i, te := range tests { + t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { + p, ok := pc.Get(1234, te.ts) + assert.Equal(t, te.ok, ok) + if !te.ok { + assert.Nil(t, p) + return + } + require.NotNil(t, p) + assert.Equal(t, te.startTime, p.StartTime) + }) + } + +} diff --git a/pkg/network/tracer/time_resolver.go b/pkg/network/tracer/time_resolver.go new file mode 100644 index 0000000000000..054bfd153bc30 --- /dev/null +++ b/pkg/network/tracer/time_resolver.go @@ -0,0 +1,66 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux +// +build linux + +package tracer + +import ( + "fmt" + "time" + + "golang.org/x/sys/unix" + + "github.com/DataDog/gopsutil/host" +) + +// TimeResolver converts kernel monotonic timestamps to absolute times +type TimeResolver struct { + bootTime time.Time + suspendTime uint64 +} + +// NewTimeResolver returns a new time resolver +func NewTimeResolver() (*TimeResolver, error) { + bt, err := host.BootTime() + if err != nil { + return nil, err + } + + tr := &TimeResolver{ + bootTime: time.Unix(int64(bt), 0), + } + + if err = tr.Sync(); err != nil { + return nil, fmt.Errorf("could not determine suspend time for system: %w", err) + } + + return tr, nil +} + +// Sync computes the current suspend time for the system +func (tr *TimeResolver) Sync() error { + if tr == nil { + return nil + } + + var monotonic unix.Timespec + if err := unix.ClockGettime(unix.CLOCK_MONOTONIC, &monotonic); err != nil { + return err + } + + tr.suspendTime = uint64(time.Since(tr.bootTime) - time.Duration(monotonic.Nano())) + return nil +} + +// ResolveMonotonicTimestamp converts a kernel monotonic timestamp to an absolute time, nanoseconds since Unix epoch +func (tr *TimeResolver) ResolveMonotonicTimestamp(timestamp uint64) uint64 { + if tr == nil { + return timestamp + } + + return uint64(tr.bootTime.UnixNano()) + timestamp + tr.suspendTime +} diff --git a/pkg/network/tracer/tracer.go b/pkg/network/tracer/tracer.go index 24fd2122a1e18..3ca0c3c574041 100644 --- a/pkg/network/tracer/tracer.go +++ b/pkg/network/tracer/tracer.go @@ -14,7 +14,6 @@ import ( "fmt" "math" "sync" - "syscall" "time" "github.com/cilium/ebpf" @@ -32,6 +31,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/network/dns" netebpf "github.com/DataDog/datadog-agent/pkg/network/ebpf" "github.com/DataDog/datadog-agent/pkg/network/ebpf/probes" + "github.com/DataDog/datadog-agent/pkg/network/events" "github.com/DataDog/datadog-agent/pkg/network/netlink" "github.com/DataDog/datadog-agent/pkg/network/protocols/http" "github.com/DataDog/datadog-agent/pkg/network/telemetry" @@ -86,10 +86,29 @@ type Tracer struct { sysctlUDPConnTimeout *sysctl.Int sysctlUDPConnStreamTimeout *sysctl.Int + + processCache *processCache + + timeResolver *TimeResolver } // NewTracer creates a Tracer func NewTracer(config *config.Config) (*Tracer, error) { + tr, err := newTracer(config) + if err != nil { + return nil, err + } + + if err := tr.start(); err != nil { + return nil, err + } + + return tr, nil +} + +// newTracer is an internal function used by tests primarily +// (and NewTracer above) +func newTracer(config *config.Config) (*Tracer, error) { // make sure debugfs is mounted if mounted, err := kernel.IsDebugFSMounted(); !mounted { return nil, fmt.Errorf("system-probe unsupported: %s", err) @@ -190,17 +209,39 @@ func NewTracer(config *config.Config) (*Tracer, error) { bpfTelemetry: bpfTelemetry, } - err = ebpfTracer.Start(tr.storeClosedConnections) + if config.EnableProcessEventMonitoring { + if err = events.Init(); err != nil { + return nil, fmt.Errorf("could not initialize event monitoring: %w", err) + } + + if tr.processCache, err = newProcessCache(config.MaxProcessesTracked, defaultFilteredEnvs); err != nil { + return nil, fmt.Errorf("could not create process cache; %w", err) + } + + events.RegisterHandler(tr.processCache.handleProcessEvent) + + if tr.timeResolver, err = NewTimeResolver(); err != nil { + return nil, fmt.Errorf("could not create time resolver: %w", err) + } + } + + return tr, nil +} + +// start starts the tracer. This function is present to separate +// the creation from the start of the tracer for tests +func (tr *Tracer) start() error { + err := tr.ebpfTracer.Start(tr.storeClosedConnections) if err != nil { tr.Stop() - return nil, fmt.Errorf("could not start ebpf manager: %s", err) + return fmt.Errorf("could not start ebpf manager: %s", err) } if err = tr.reverseDNS.Start(); err != nil { - return nil, fmt.Errorf("could not start reverse dns monitor: %w", err) + return fmt.Errorf("could not start reverse dns monitor: %w", err) } - return tr, nil + return nil } func newConntracker(cfg *config.Config, bpfTelemetry *telemetry.EBPFTelemetry) (netlink.Conntracker, error) { @@ -268,7 +309,7 @@ func runOffsetGuessing(config *config.Config, buf bytecode.AssetReader) ([]manag } for _, p := range offsetMgr.Probes { - if _, enabled := enabledProbes[probes.ProbeName(p.EBPFSection)]; !enabled { + if _, enabled := enabledProbes[p.EBPFSection]; !enabled { offsetOptions.ExcludedFunctions = append(offsetOptions.ExcludedFunctions, p.EBPFFuncName) } } @@ -307,6 +348,7 @@ func runOffsetGuessing(config *config.Config, buf bytecode.AssetReader) ([]manag func (t *Tracer) storeClosedConnections(connections []network.ConnectionStats) { var rejected int + _ = t.timeResolver.Sync() for i := range connections { cs := &connections[i] if t.shouldSkipConnection(cs) { @@ -320,6 +362,8 @@ func (t *Tracer) storeClosedConnections(connections []network.ConnectionStats) { if cs.IPTranslation != nil { t.conntracker.DeleteTranslation(*cs) } + + t.addProcessInfo(cs) } connections = connections[rejected:] @@ -328,6 +372,43 @@ func (t *Tracer) storeClosedConnections(connections []network.ConnectionStats) { t.state.StoreClosedConnections(connections) } +func (t *Tracer) addProcessInfo(c *network.ConnectionStats) { + if t.processCache == nil { + return + } + + c.ContainerID = nil + + ts := t.timeResolver.ResolveMonotonicTimestamp(c.LastUpdateEpoch) + p, ok := t.processCache.Get(c.Pid, int64(ts)) + if !ok { + return + } + + log.TraceFunc(func() string { + return fmt.Sprintf("got process cache entry for pid %d: %+v", c.Pid, p) + }) + + if c.Tags == nil { + c.Tags = make(map[string]struct{}) + } + + addTag := func(k, v string) { + if v == "" { + return + } + c.Tags[k+":"+v] = struct{}{} + } + + addTag("env", p.Envs["DD_ENV"]) + addTag("version", p.Envs["DD_VERSION"]) + addTag("service", p.Envs["DD_SERVICE"]) + + if p.ContainerID != "" { + c.ContainerID = &p.ContainerID + } +} + // Stop stops the tracer func (t *Tracer) Stop() { if t.gwLookup != nil { @@ -337,6 +418,7 @@ func (t *Tracer) Stop() { t.ebpfTracer.Stop() t.httpMonitor.Stop() t.conntracker.Close() + t.processCache.Stop() } // GetActiveConnections returns the delta for connection info from the last time it was called with the same clientID @@ -493,6 +575,7 @@ func (t *Tracer) getConnections(activeBuffer *network.ConnectionBuffer) (latestU } active := activeBuffer.Connections() + _ = t.timeResolver.Sync() for i := range active { active[i].IPTranslation = t.conntracker.GetTranslationForConn(active[i]) // do gateway resolution only on active connections outside @@ -501,6 +584,7 @@ func (t *Tracer) getConnections(activeBuffer *network.ConnectionBuffer) (latestU // since gateway resolution connects to the ec2 metadata // endpoint) t.connVia(&active[i]) + t.addProcessInfo(&active[i]) } entryCount := len(active) @@ -585,6 +669,7 @@ const ( kprobesStats stateStats tracerStats + processCacheStats bpfMapStats bpfHelperStats ) @@ -597,8 +682,10 @@ var allStats = []statsComp{ kprobesStats, stateStats, tracerStats, + processCacheStats, bpfHelperStats, bpfMapStats, + httpStats, } func (t *Tracer) getStats(comps ...statsComp) (map[string]interface{}, error) { @@ -629,10 +716,14 @@ func (t *Tracer) getStats(comps ...statsComp) (map[string]interface{}, error) { tracerStats := atomicstats.Report(t) tracerStats["runtime"] = runtime.Tracer.GetTelemetry() ret["tracer"] = tracerStats + case processCacheStats: + ret["process_cache"] = t.processCache.GetStats() case bpfMapStats: ret["map_ops"] = t.bpfTelemetry.GetMapsTelemetry() case bpfHelperStats: ret["ebpf_helpers"] = t.bpfTelemetry.GetHelperTelemetry() + case httpStats: + ret["universal_service_monitoring"] = t.httpMonitor.GetUSMStats() } } @@ -672,7 +763,7 @@ func (t *Tracer) DebugNetworkMaps() (*network.Connections, error) { } -// DebugEBPFMaps returns all maps registred in the eBPF manager +// DebugEBPFMaps returns all maps registered in the eBPF manager func (t *Tracer) DebugEBPFMaps(maps ...string) (string, error) { tracerMaps, err := t.ebpfTracer.DumpMaps(maps...) if err != nil { @@ -694,7 +785,7 @@ func (t *Tracer) DebugEBPFMaps(maps ...string) (string, error) { // expiry is handled differently for UDP and TCP. For TCP where conntrack TTL is very long, we use a short expiry for userspace tracking // but use conntrack as a source of truth to keep long-lived idle TCP conns in the userspace state, while evicting closed TCP connections. // for UDP, the conntrack TTL is lower (two minutes), so the userspace and conntrack expiry are synced to avoid touching conntrack for -// UDP expiries +// UDP expires func (t *Tracer) connectionExpired(conn *network.ConnectionStats, latestTime uint64, ctr *cachedConntrack) bool { timeout := t.timeoutForConn(conn) if !conn.IsExpired(latestTime, timeout) { @@ -781,28 +872,27 @@ func (t *Tracer) DebugHostConntrack(ctx context.Context) (interface{}, error) { }, nil } -func newHTTPMonitor(c *config.Config, tracer connection.Tracer, bpfTelemetry *telemetry.EBPFTelemetry, offsets []manager.ConstantEditor) *http.Monitor { - if !c.EnableHTTPMonitoring { - return nil +// DebugDumpProcessCache dumps the process cache +func (t *Tracer) DebugDumpProcessCache(ctx context.Context) (interface{}, error) { + if t.processCache != nil { + return t.processCache.Dump() } + return nil, nil +} + +func newHTTPMonitor(c *config.Config, tracer connection.Tracer, bpfTelemetry *telemetry.EBPFTelemetry, offsets []manager.ConstantEditor) *http.Monitor { // Shared with the HTTP program - sockFDMap := tracer.GetMap(string(probes.SockByPidFDMap)) + sockFDMap := tracer.GetMap(probes.SockByPidFDMap) monitor, err := http.NewMonitor(c, offsets, sockFDMap, bpfTelemetry) if err != nil { - log.Errorf("could not instantiate http monitor: %s", err) - return nil - } - - err = monitor.Start() - if errors.Is(err, syscall.ENOMEM) { - log.Error("could not enable http monitoring: not enough memory to attach http ebpf socket filter. please consider raising the limit via sysctl -w net.core.optmem_max=") + log.Error(err) return nil } - if err != nil { - log.Errorf("could not enable http monitoring: %s", err) + if err := monitor.Start(); err != nil { + log.Error(err) return nil } diff --git a/pkg/network/tracer/tracer_classification_test.go b/pkg/network/tracer/tracer_classification_test.go index 2c52f5cd2363d..bb967d6275986 100644 --- a/pkg/network/tracer/tracer_classification_test.go +++ b/pkg/network/tracer/tracer_classification_test.go @@ -16,38 +16,61 @@ import ( "net" nethttp "net/http" "runtime" + "strings" "testing" "time" redis2 "github.com/go-redis/redis/v9" "github.com/stretchr/testify/require" + "github.com/uptrace/bun" + "go.mongodb.org/mongo-driver/bson" + "go.mongodb.org/mongo-driver/mongo" "github.com/DataDog/datadog-agent/pkg/network" "github.com/DataDog/datadog-agent/pkg/network/config" "github.com/DataDog/datadog-agent/pkg/network/protocols/amqp" + protocolsmongo "github.com/DataDog/datadog-agent/pkg/network/protocols/mongo" + pgutils "github.com/DataDog/datadog-agent/pkg/network/protocols/postgres" "github.com/DataDog/datadog-agent/pkg/network/protocols/redis" "github.com/DataDog/datadog-agent/pkg/network/tracer/testutil/grpc" ) +const ( + defaultTimeout = 30 * time.Second +) + // testContext shares the context of a given test. // It contains common variable used by all tests, and allows extending the context dynamically by setting more // attributes to the `extras` map. type testContext struct { // The address of the server to listen on. serverAddress string - serverPort string + // The port to listen on. + serverPort string // The address for the client to communicate with. targetAddress string - // optional - A custom dialer to set the ip/port/socket attributes for the client. - clientDialer *net.Dialer - expectedProtocol network.ProtocolType - // A channel to mark goroutines (like servers) to halt. - done chan struct{} - //nolint:unused // A dynamic map that allows extending the context easily between phases of the test. extras map[string]interface{} } +// protocolClassificationAttributes holds all attributes a single protocol classification test should have. +type protocolClassificationAttributes struct { + // The name of the test. + name string + // Specific test context, allows to share states among different phases of the test. + context testContext + // Allows to decide on runtime if we should skip the test or not. + skipCallback func(t *testing.T, ctx testContext) + // Allows to do any preparation without traffic being captured by the tracer. + preTracerSetup func(t *testing.T, ctx testContext) + // All traffic here will be captured by the tracer. + postTracerSetup func(t *testing.T, ctx testContext) + // A validation method ensure the test succeeded. + validation func(t *testing.T, ctx testContext, tr *Tracer) + // Cleaning test resources if needed. + teardown func(t *testing.T, ctx testContext) +} + func setupTracer(t *testing.T, cfg *config.Config) *Tracer { tr, err := NewTracer(cfg) if err != nil { @@ -66,274 +89,681 @@ func setupTracer(t *testing.T, cfg *config.Config) *Tracer { return tr } -func validateProtocolConnection(t *testing.T, ctx testContext, tr *Tracer) { - waitForConnectionsWithProtocol(t, tr, ctx.targetAddress, ctx.serverAddress, ctx.expectedProtocol) -} - -func defaultTeardown(_ *testing.T, ctx testContext) { - close(ctx.done) +func validateProtocolConnection(expectedProtocol network.ProtocolType) func(t *testing.T, ctx testContext, tr *Tracer) { + return func(t *testing.T, ctx testContext, tr *Tracer) { + waitForConnectionsWithProtocol(t, tr, ctx.targetAddress, ctx.serverAddress, expectedProtocol) + } } // skipIfNotLinux skips the test if we are not on a linux machine -// -//nolint:deadcode,unused -func skipIfNotLinux(ctx testContext) (bool, string) { +func skipIfNotLinux(t *testing.T, _ testContext) { if runtime.GOOS != "linux" { - return true, "test is supported on linux machine only" + t.Skip("test is supported on linux machine only") } - - return false, "" } // skipIfUsingNAT skips the test if we have a NAT rules applied. -// -//nolint:deadcode,unused -func skipIfUsingNAT(ctx testContext) (bool, string) { +func skipIfUsingNAT(t *testing.T, ctx testContext) { if ctx.targetAddress != ctx.serverAddress { - return true, "test is not supported when NAT is applied" + t.Skip("test is not supported when NAT is applied") } - - return false, "" } // composeSkips skips if one of the given filters is matched. -// -//nolint:deadcode,unused -func composeSkips(filters ...func(ctx testContext) (bool, string)) func(ctx testContext) (bool, string) { - return func(ctx testContext) (bool, string) { - for _, filter := range filters { - if skip, err := filter(ctx); skip { - return skip, err - } +func composeSkips(skippers ...func(t *testing.T, ctx testContext)) func(t *testing.T, ctx testContext) { + return func(t *testing.T, ctx testContext) { + for _, skipFunction := range skippers { + skipFunction(t, ctx) } - - return false, "" } } +const ( + postgresPort = "5432" + mongoPort = "27017" + redisPort = "6379" + amqpPort = "5672" + httpPort = "8080" + tcpPort = "9999" + http2Port = "9090" +) + func testProtocolClassification(t *testing.T, cfg *config.Config, clientHost, targetHost, serverHost string) { + tests := []struct { + name string + testFunc func(t *testing.T, cfg *config.Config, clientHost, targetHost, serverHost string) + }{ + { + name: "postgres", + testFunc: testPostgresProtocolClassification, + }, + { + name: "mongo", + testFunc: testMongoProtocolClassification, + }, + { + name: "redis", + testFunc: testRedisProtocolClassification, + }, + { + name: "amqp", + testFunc: testAMQPProtocolClassification, + }, + { + name: "http", + testFunc: testHTTPProtocolClassification, + }, + { + name: "http2", + testFunc: testHTTP2ProtocolClassification, + }, + { + name: "edge cases", + testFunc: testEdgeCasesProtocolClassification, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + tt.testFunc(t, cfg, clientHost, targetHost, serverHost) + }) + } +} + +func testPostgresProtocolClassification(t *testing.T, cfg *config.Config, clientHost, targetHost, serverHost string) { + skipFunc := composeSkips(skipIfNotLinux, skipIfUsingNAT) + skipFunc(t, testContext{ + serverAddress: serverHost, + serverPort: postgresPort, + targetAddress: targetHost, + }) + + if clientHost != "127.0.0.1" { + t.Skip("postgres tests are not supported DNat") + } + + postgresTeardown := func(t *testing.T, ctx testContext) { + db := ctx.extras["db"].(*bun.DB) + defer db.Close() + taskCtx := ctx.extras["ctx"].(context.Context) + _, _ = db.NewDropTable().Model((*pgutils.DummyTable)(nil)).Exec(taskCtx) + } + + // Setting one instance of postgres server for all tests. + serverAddress := net.JoinHostPort(serverHost, postgresPort) + targetAddress := net.JoinHostPort(targetHost, postgresPort) + pgutils.RunPostgresServer(t, serverHost, postgresPort) + + tests := []protocolClassificationAttributes{ + { + name: "postgres - connect", + context: testContext{ + serverPort: postgresPort, + targetAddress: targetAddress, + serverAddress: serverAddress, + extras: make(map[string]interface{}), + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + pg := pgutils.GetPGHandle(t, ctx.serverAddress) + conn, err := pg.Conn(context.Background()) + require.NoError(t, err) + defer conn.Close() + }, + validation: validateProtocolConnection(network.ProtocolPostgres), + teardown: postgresTeardown, + }, + { + name: "postgres - insert", + context: testContext{ + serverPort: postgresPort, + targetAddress: targetAddress, + serverAddress: serverAddress, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.ConnectAndGetDB(t, ctx.serverAddress, ctx.extras) + pgutils.RunCreateQuery(t, ctx.extras) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.RunInsertQuery(t, 1, ctx.extras) + }, + validation: validateProtocolConnection(network.ProtocolPostgres), + teardown: postgresTeardown, + }, + { + name: "postgres - delete", + context: testContext{ + serverPort: postgresPort, + targetAddress: targetAddress, + serverAddress: serverAddress, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.ConnectAndGetDB(t, ctx.serverAddress, ctx.extras) + pgutils.RunCreateQuery(t, ctx.extras) + pgutils.RunInsertQuery(t, 1, ctx.extras) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.RunDeleteQuery(t, ctx.extras) + }, + validation: validateProtocolConnection(network.ProtocolPostgres), + teardown: postgresTeardown, + }, + { + name: "postgres - select", + context: testContext{ + serverPort: postgresPort, + targetAddress: targetAddress, + serverAddress: serverAddress, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.ConnectAndGetDB(t, ctx.serverAddress, ctx.extras) + pgutils.RunCreateQuery(t, ctx.extras) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.RunSelectQuery(t, ctx.extras) + }, + validation: validateProtocolConnection(network.ProtocolPostgres), + teardown: postgresTeardown, + }, + { + name: "postgres - update", + context: testContext{ + serverPort: postgresPort, + targetAddress: targetAddress, + serverAddress: serverAddress, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.ConnectAndGetDB(t, ctx.serverAddress, ctx.extras) + pgutils.RunCreateQuery(t, ctx.extras) + pgutils.RunInsertQuery(t, 1, ctx.extras) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.RunUpdateQuery(t, ctx.extras) + }, + validation: validateProtocolConnection(network.ProtocolPostgres), + teardown: postgresTeardown, + }, + { + name: "postgres - drop", + context: testContext{ + serverPort: postgresPort, + targetAddress: targetAddress, + serverAddress: serverAddress, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.ConnectAndGetDB(t, ctx.serverAddress, ctx.extras) + pgutils.RunCreateQuery(t, ctx.extras) + pgutils.RunInsertQuery(t, 1, ctx.extras) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.RunDropQuery(t, ctx.extras) + }, + validation: validateProtocolConnection(network.ProtocolPostgres), + teardown: postgresTeardown, + }, + { + name: "postgres - alter", + context: testContext{ + serverPort: postgresPort, + targetAddress: targetAddress, + serverAddress: serverAddress, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.ConnectAndGetDB(t, ctx.serverAddress, ctx.extras) + pgutils.RunCreateQuery(t, ctx.extras) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.RunAlterQuery(t, ctx.extras) + }, + validation: validateProtocolConnection(network.ProtocolPostgres), + teardown: postgresTeardown, + }, + { + // Test that we classify long queries that would be + // splitted between multiple packets correctly + name: "postgres - long query", + context: testContext{ + serverPort: postgresPort, + targetAddress: targetAddress, + serverAddress: serverAddress, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.ConnectAndGetDB(t, ctx.serverAddress, ctx.extras) + pgutils.RunCreateQuery(t, ctx.extras) + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + db := ctx.extras["db"].(*bun.DB) + taskCtx := ctx.extras["ctx"].(context.Context) + + // This will fail but it should make a query and be classified + _, _ = db.NewInsert().Model(&pgutils.DummyTable{Foo: strings.Repeat("#", 16384)}).Exec(taskCtx) + }, + validation: validateProtocolConnection(network.ProtocolPostgres), + teardown: postgresTeardown, + }, + { + // Test that we classify long queries that would be + // splitted between multiple packets correctly + name: "postgres - long response", + context: testContext{ + serverPort: postgresPort, + targetAddress: targetAddress, + serverAddress: serverAddress, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.ConnectAndGetDB(t, ctx.serverAddress, ctx.extras) + pgutils.RunCreateQuery(t, ctx.extras) + for i := int64(1); i < 200; i++ { + pgutils.RunInsertQuery(t, i, ctx.extras) + } + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + pgutils.RunSelectQuery(t, ctx.extras) + }, + validation: validateProtocolConnection(network.ProtocolPostgres), + teardown: postgresTeardown, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + testProtocolClassificationInner(t, tt, cfg) + }) + } +} + +func testMongoProtocolClassification(t *testing.T, cfg *config.Config, clientHost, targetHost, serverHost string) { + skipFunc := composeSkips(skipIfNotLinux, skipIfUsingNAT) + skipFunc(t, testContext{ + serverAddress: serverHost, + serverPort: mongoPort, + targetAddress: targetHost, + }) + defaultDialer := &net.Dialer{ LocalAddr: &net.TCPAddr{ - IP: net.ParseIP(clientHost), - Port: 0, + IP: net.ParseIP(clientHost), }, } - tests := []struct { - name string - context testContext - shouldSkip func(ctx testContext) (bool, string) - preTracerSetup func(t *testing.T, ctx testContext) - postTracerSetup func(t *testing.T, ctx testContext) - validation func(t *testing.T, ctx testContext, tr *Tracer) - teardown func(t *testing.T, ctx testContext) - }{ + mongoTeardown := func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*protocolsmongo.Client) + require.NoError(t, client.DeleteDatabases()) + defer client.Stop() + } + + // Setting one instance of mongo server for all tests. + serverAddress := net.JoinHostPort(serverHost, mongoPort) + targetAddress := net.JoinHostPort(targetHost, mongoPort) + protocolsmongo.RunMongoServer(t, serverHost, mongoPort) + + tests := []protocolClassificationAttributes{ { - name: "tcp client without sending data", + name: "classify by connect", context: testContext{ - serverPort: "8080", - clientDialer: defaultDialer, - expectedProtocol: network.ProtocolUnknown, + serverPort: mongoPort, + targetAddress: targetAddress, + serverAddress: serverAddress, }, postTracerSetup: func(t *testing.T, ctx testContext) { - server := NewTCPServerOnAddress(ctx.serverAddress, func(c net.Conn) { - c.Close() + client, err := protocolsmongo.NewClient(protocolsmongo.Options{ + ServerAddress: ctx.targetAddress, + ClientDialer: defaultDialer, }) - require.NoError(t, server.Run(ctx.done)) - timedContext, cancel := context.WithTimeout(context.Background(), time.Second) - c, err := ctx.clientDialer.DialContext(timedContext, "tcp", ctx.targetAddress) - cancel() require.NoError(t, err) - defer c.Close() + client.Stop() }, - teardown: defaultTeardown, - validation: validateProtocolConnection, + validation: validateProtocolConnection(network.ProtocolMongo), }, { - name: "tcp client with sending random data", + name: "classify by collection creation", context: testContext{ - serverPort: "8080", - clientDialer: defaultDialer, - expectedProtocol: network.ProtocolUnknown, + serverPort: mongoPort, + targetAddress: targetAddress, + serverAddress: serverAddress, + extras: make(map[string]interface{}), }, - postTracerSetup: func(t *testing.T, ctx testContext) { - server := NewTCPServerOnAddress(ctx.serverAddress, func(c net.Conn) { - r := bufio.NewReader(c) - input, err := r.ReadBytes(byte('\n')) - if err == nil { - c.Write(input) - } - c.Close() + preTracerSetup: func(t *testing.T, ctx testContext) { + client, err := protocolsmongo.NewClient(protocolsmongo.Options{ + ServerAddress: ctx.targetAddress, + ClientDialer: defaultDialer, }) - require.NoError(t, server.Run(ctx.done)) - - timedContext, cancel := context.WithTimeout(context.Background(), time.Second) - c, err := ctx.clientDialer.DialContext(timedContext, "tcp", ctx.targetAddress) - cancel() require.NoError(t, err) - defer c.Close() - c.Write([]byte("hello\n")) - io.ReadAll(c) + ctx.extras["client"] = client + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*protocolsmongo.Client) + db := client.C.Database("test") + timedContext, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + require.NoError(t, db.CreateCollection(timedContext, "collection")) }, - teardown: defaultTeardown, - validation: validateProtocolConnection, + validation: validateProtocolConnection(network.ProtocolMongo), + teardown: mongoTeardown, }, { - name: "tcp client with sending HTTP request", + name: "classify by insertion", context: testContext{ - serverPort: "8080", - clientDialer: defaultDialer, - expectedProtocol: network.ProtocolHTTP, + serverPort: mongoPort, + targetAddress: targetAddress, + serverAddress: serverAddress, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + client, err := protocolsmongo.NewClient(protocolsmongo.Options{ + ServerAddress: ctx.targetAddress, + ClientDialer: defaultDialer, + }) + require.NoError(t, err) + ctx.extras["client"] = client + db := client.C.Database("test") + timedContext, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + require.NoError(t, db.CreateCollection(timedContext, "collection")) + ctx.extras["collection"] = db.Collection("collection") }, postTracerSetup: func(t *testing.T, ctx testContext) { - ln, err := net.Listen("tcp", ctx.serverAddress) + collection := ctx.extras["collection"].(*mongo.Collection) + input := map[string]string{"test": "test"} + timedContext, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + _, err := collection.InsertOne(timedContext, input) + require.NoError(t, err) + }, + validation: validateProtocolConnection(network.ProtocolMongo), + teardown: mongoTeardown, + }, + { + name: "classify by find", + context: testContext{ + serverPort: mongoPort, + targetAddress: targetAddress, + serverAddress: serverAddress, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + client, err := protocolsmongo.NewClient(protocolsmongo.Options{ + ServerAddress: ctx.targetAddress, + ClientDialer: defaultDialer, + }) + require.NoError(t, err) + ctx.extras["client"] = client + db := client.C.Database("test") + timedContext, cancel := context.WithTimeout(context.Background(), defaultTimeout) + require.NoError(t, db.CreateCollection(timedContext, "collection")) + cancel() + collection := db.Collection("collection") + ctx.extras["input"] = map[string]string{"test": "test"} + timedContext, cancel = context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + _, err = collection.InsertOne(timedContext, ctx.extras["input"]) require.NoError(t, err) - srv := &nethttp.Server{ - Addr: ln.Addr().String(), - Handler: nethttp.HandlerFunc(func(w nethttp.ResponseWriter, req *nethttp.Request) { - io.Copy(io.Discard, req.Body) - w.WriteHeader(200) - }), - ReadTimeout: time.Second, - WriteTimeout: time.Second, - } - srv.SetKeepAlivesEnabled(false) - go func() { - _ = srv.Serve(ln) - }() - go func() { - <-ctx.done - srv.Shutdown(context.Background()) - }() + ctx.extras["collection"] = db.Collection("collection") + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + collection := ctx.extras["collection"].(*mongo.Collection) + timedContext, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + res := collection.FindOne(timedContext, bson.M{"test": "test"}) + require.NoError(t, res.Err()) + var output map[string]string + require.NoError(t, res.Decode(&output)) + delete(output, "_id") + require.EqualValues(t, output, ctx.extras["input"]) + }, + validation: validateProtocolConnection(network.ProtocolMongo), + teardown: mongoTeardown, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + testProtocolClassificationInner(t, tt, cfg) + }) + } +} - client := nethttp.Client{ - Transport: &nethttp.Transport{ - DialContext: ctx.clientDialer.DialContext, - }, - } - resp, err := client.Get("http://" + ctx.targetAddress + "/test") - require.NoError(t, err) - io.Copy(io.Discard, resp.Body) - resp.Body.Close() +func testRedisProtocolClassification(t *testing.T, cfg *config.Config, clientHost, targetHost, serverHost string) { + skipFunc := composeSkips(skipIfNotLinux, skipIfUsingNAT) + skipFunc(t, testContext{ + serverAddress: serverHost, + serverPort: redisPort, + targetAddress: targetHost, + }) + + defaultDialer := &net.Dialer{ + LocalAddr: &net.TCPAddr{ + IP: net.ParseIP(clientHost), + }, + } + + redisTeardown := func(t *testing.T, ctx testContext) { + redis.NewClient(ctx.serverAddress, defaultDialer) + client := ctx.extras["client"].(*redis2.Client) + timedContext, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + require.NoError(t, client.FlushDB(timedContext).Err()) + } + + // Setting one instance of redis server for all tests. + serverAddress := net.JoinHostPort(serverHost, redisPort) + targetAddress := net.JoinHostPort(targetHost, redisPort) + redis.RunRedisServer(t, serverHost, redisPort) + + tests := []protocolClassificationAttributes{ + { + name: "set", + context: testContext{ + serverPort: redisPort, + serverAddress: serverAddress, + targetAddress: targetAddress, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + client := redis.NewClient(ctx.targetAddress, defaultDialer) + timedContext, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + client.Ping(timedContext) + ctx.extras["client"] = client + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*redis2.Client) + timedContext, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + client.Set(timedContext, "key", "value", time.Minute) }, - teardown: defaultTeardown, - validation: validateProtocolConnection, + teardown: redisTeardown, + validation: validateProtocolConnection(network.ProtocolRedis), }, { - name: "http2 traffic using gRPC - unary call", + name: "get", context: testContext{ - serverPort: "8080", - clientDialer: defaultDialer, - expectedProtocol: network.ProtocolHTTP2, + serverPort: redisPort, + serverAddress: serverAddress, + targetAddress: targetAddress, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + client := redis.NewClient(ctx.targetAddress, defaultDialer) + timedContext, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + client.Set(timedContext, "key", "value", time.Minute) + ctx.extras["client"] = client }, postTracerSetup: func(t *testing.T, ctx testContext) { - server, err := grpc.NewServer(ctx.serverAddress) - require.NoError(t, err) - server.Run() - go func() { - <-ctx.done - server.Stop() - }() - - c, err := grpc.NewClient(ctx.targetAddress, grpc.Options{ - CustomDialer: ctx.clientDialer, - }) + client := ctx.extras["client"].(*redis2.Client) + timedContext, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + res := client.Get(timedContext, "key") + val, err := res.Result() require.NoError(t, err) - defer c.Close() - require.NoError(t, c.HandleUnary(context.Background(), "test")) + require.Equal(t, "value", val) }, - teardown: defaultTeardown, - validation: validateProtocolConnection, + teardown: redisTeardown, + validation: validateProtocolConnection(network.ProtocolRedis), }, { - name: "http2 traffic using gRPC - stream call", + name: "get unknown key", context: testContext{ - serverPort: "8080", - clientDialer: defaultDialer, - expectedProtocol: network.ProtocolHTTP2, + serverPort: redisPort, + serverAddress: serverAddress, + targetAddress: targetAddress, + extras: make(map[string]interface{}), + }, + preTracerSetup: func(t *testing.T, ctx testContext) { + client := redis.NewClient(ctx.targetAddress, defaultDialer) + timedContext, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + client.Ping(timedContext) + ctx.extras["client"] = client }, postTracerSetup: func(t *testing.T, ctx testContext) { - server, err := grpc.NewServer(ctx.serverAddress) + client := ctx.extras["client"].(*redis2.Client) + timedContext, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + res := client.Get(timedContext, "unknown") + require.Error(t, res.Err()) + }, + teardown: redisTeardown, + validation: validateProtocolConnection(network.ProtocolRedis), + }, + { + name: "err response", + context: testContext{ + serverPort: redisPort, + serverAddress: serverAddress, + targetAddress: targetAddress, + extras: make(map[string]interface{}), + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + timedContext, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + conn, err := defaultDialer.DialContext(timedContext, "tcp", ctx.targetAddress) require.NoError(t, err) - server.Run() - go func() { - <-ctx.done - server.Stop() - }() - - c, err := grpc.NewClient(ctx.targetAddress, grpc.Options{ - CustomDialer: ctx.clientDialer, - }) + _, err = conn.Write([]byte("+dummy\r\n")) require.NoError(t, err) - defer c.Close() - require.NoError(t, c.HandleStream(context.Background(), 5)) }, - teardown: defaultTeardown, - validation: validateProtocolConnection, + validation: validateProtocolConnection(network.ProtocolRedis), }, { - name: "amqp connect", + name: "client id", context: testContext{ - serverPort: "5672", - clientDialer: defaultDialer, - expectedProtocol: network.ProtocolAMQP, + serverPort: redisPort, + serverAddress: serverAddress, + targetAddress: targetAddress, + extras: make(map[string]interface{}), }, preTracerSetup: func(t *testing.T, ctx testContext) { - host, port, _ := net.SplitHostPort(ctx.serverAddress) - amqp.RunAmqpServer(t, host, port) + client := redis.NewClient(ctx.targetAddress, defaultDialer) + timedContext, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + client.Ping(timedContext) + ctx.extras["client"] = client + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*redis2.Client) + timedContext, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + res := client.ClientID(timedContext) + require.NoError(t, res.Err()) + }, + teardown: redisTeardown, + validation: validateProtocolConnection(network.ProtocolRedis), + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + testProtocolClassificationInner(t, tt, cfg) + }) + } +} + +func testAMQPProtocolClassification(t *testing.T, cfg *config.Config, clientHost, targetHost, serverHost string) { + skipFunc := composeSkips(skipIfNotLinux, skipIfUsingNAT) + skipFunc(t, testContext{ + serverAddress: serverHost, + serverPort: amqpPort, + targetAddress: targetHost, + }) + + defaultDialer := &net.Dialer{ + LocalAddr: &net.TCPAddr{ + IP: net.ParseIP(clientHost), + }, + } + + amqpTeardown := func(t *testing.T, ctx testContext) { + client := ctx.extras["client"].(*amqp.Client) + defer client.Terminate() + + require.NoError(t, client.DeleteQueues()) + } + + // Setting one instance of amqp server for all tests. + serverAddress := net.JoinHostPort(serverHost, amqpPort) + targetAddress := net.JoinHostPort(targetHost, amqpPort) + amqp.RunAmqpServer(t, serverHost, amqpPort) + + tests := []protocolClassificationAttributes{ + { + name: "connect", + context: testContext{ + serverPort: amqpPort, + serverAddress: serverAddress, + targetAddress: targetAddress, + extras: make(map[string]interface{}), }, postTracerSetup: func(t *testing.T, ctx testContext) { client, err := amqp.NewClient(amqp.Options{ ServerAddress: ctx.serverAddress, + Dialer: defaultDialer, }) require.NoError(t, err) - defer client.Terminate() + ctx.extras["client"] = client }, - shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), - validation: validateProtocolConnection, + teardown: amqpTeardown, + validation: validateProtocolConnection(network.ProtocolAMQP), }, { - name: "amqp declare channel", + name: "declare channel", context: testContext{ - serverPort: "5672", - clientDialer: defaultDialer, - expectedProtocol: network.ProtocolUnknown, - extras: make(map[string]interface{}), + serverPort: amqpPort, + serverAddress: serverAddress, + targetAddress: targetAddress, + extras: make(map[string]interface{}), }, preTracerSetup: func(t *testing.T, ctx testContext) { - host, port, _ := net.SplitHostPort(ctx.serverAddress) - amqp.RunAmqpServer(t, host, port) - client, err := amqp.NewClient(amqp.Options{ ServerAddress: ctx.serverAddress, + Dialer: defaultDialer, }) require.NoError(t, err) ctx.extras["client"] = client }, postTracerSetup: func(t *testing.T, ctx testContext) { client := ctx.extras["client"].(*amqp.Client) - defer client.Terminate() - require.NoError(t, client.DeclareQueue("test", client.PublishChannel)) }, - shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), - validation: validateProtocolConnection, + teardown: amqpTeardown, + validation: validateProtocolConnection(network.ProtocolUnknown), }, { - name: "amqp publish", + name: "publish", context: testContext{ - serverPort: "5672", - clientDialer: defaultDialer, - expectedProtocol: network.ProtocolAMQP, - extras: make(map[string]interface{}), + serverPort: amqpPort, + serverAddress: serverAddress, + targetAddress: targetAddress, + extras: make(map[string]interface{}), }, preTracerSetup: func(t *testing.T, ctx testContext) { - host, port, _ := net.SplitHostPort(ctx.serverAddress) - amqp.RunAmqpServer(t, host, port) - client, err := amqp.NewClient(amqp.Options{ ServerAddress: ctx.serverAddress, + Dialer: defaultDialer, }) require.NoError(t, err) require.NoError(t, client.DeclareQueue("test", client.PublishChannel)) @@ -341,27 +771,23 @@ func testProtocolClassification(t *testing.T, cfg *config.Config, clientHost, ta }, postTracerSetup: func(t *testing.T, ctx testContext) { client := ctx.extras["client"].(*amqp.Client) - defer client.Terminate() - require.NoError(t, client.Publish("test", "my msg")) }, - shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), - validation: validateProtocolConnection, + teardown: amqpTeardown, + validation: validateProtocolConnection(network.ProtocolAMQP), }, { - name: "amqp consume", + name: "consume", context: testContext{ - serverPort: "5672", - clientDialer: defaultDialer, - expectedProtocol: network.ProtocolAMQP, - extras: make(map[string]interface{}), + serverPort: amqpPort, + serverAddress: serverAddress, + targetAddress: targetAddress, + extras: make(map[string]interface{}), }, preTracerSetup: func(t *testing.T, ctx testContext) { - host, port, _ := net.SplitHostPort(ctx.serverAddress) - amqp.RunAmqpServer(t, host, port) - client, err := amqp.NewClient(amqp.Options{ ServerAddress: ctx.serverAddress, + Dialer: defaultDialer, }) require.NoError(t, err) require.NoError(t, client.DeclareQueue("test", client.PublishChannel)) @@ -371,198 +797,285 @@ func testProtocolClassification(t *testing.T, cfg *config.Config, clientHost, ta }, postTracerSetup: func(t *testing.T, ctx testContext) { client := ctx.extras["client"].(*amqp.Client) - defer client.Terminate() - res, err := client.Consume("test", 1) require.NoError(t, err) require.Equal(t, []string{"my msg"}, res) }, - shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), - validation: validateProtocolConnection, + teardown: amqpTeardown, + validation: validateProtocolConnection(network.ProtocolAMQP), }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + testProtocolClassificationInner(t, tt, cfg) + }) + } +} + +func testHTTPProtocolClassification(t *testing.T, cfg *config.Config, clientHost, targetHost, serverHost string) { + defaultDialer := &net.Dialer{ + LocalAddr: &net.TCPAddr{ + IP: net.ParseIP(clientHost), + }, + } + + serverAddress := net.JoinHostPort(serverHost, httpPort) + targetAddress := net.JoinHostPort(targetHost, httpPort) + tests := []protocolClassificationAttributes{ { - // A case where we see multiple protocols on the same socket. In that case, we expect to classify the connection - // with the first protocol we've found. - name: "mixed protocols", + name: "tcp client with sending HTTP request", context: testContext{ - serverPort: "8080", - clientDialer: defaultDialer, - expectedProtocol: network.ProtocolHTTP, + serverPort: httpPort, + serverAddress: serverAddress, + targetAddress: targetAddress, + extras: make(map[string]interface{}), }, - postTracerSetup: func(t *testing.T, ctx testContext) { - server := NewTCPServerOnAddress(ctx.serverAddress, func(c net.Conn) { - r := bufio.NewReader(c) - input, err := r.ReadBytes(byte('\n')) - if err == nil { - c.Write(input) - } - c.Close() - }) - require.NoError(t, server.Run(ctx.done)) + preTracerSetup: func(t *testing.T, ctx testContext) { + ln, err := net.Listen("tcp", ctx.serverAddress) + require.NoError(t, err) - timedContext, cancel := context.WithTimeout(context.Background(), time.Second) - c, err := ctx.clientDialer.DialContext(timedContext, "tcp", ctx.targetAddress) - cancel() + srv := &nethttp.Server{ + Addr: ln.Addr().String(), + Handler: nethttp.HandlerFunc(func(w nethttp.ResponseWriter, req *nethttp.Request) { + io.Copy(io.Discard, req.Body) + w.WriteHeader(200) + }), + ReadTimeout: time.Second, + WriteTimeout: time.Second, + } + srv.SetKeepAlivesEnabled(false) + go func() { + _ = srv.Serve(ln) + }() + + ctx.extras["server"] = srv + }, + postTracerSetup: func(t *testing.T, ctx testContext) { + client := nethttp.Client{ + Transport: &nethttp.Transport{ + DialContext: defaultDialer.DialContext, + }, + } + resp, err := client.Get("http://" + ctx.targetAddress + "/test") require.NoError(t, err) - defer c.Close() - c.Write([]byte("GET /200/foobar HTTP/1.1\n")) - io.ReadAll(c) - // http2 prefix. - c.Write([]byte("PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n")) - io.ReadAll(c) + io.Copy(io.Discard, resp.Body) + resp.Body.Close() + }, + teardown: func(t *testing.T, ctx testContext) { + srv := ctx.extras["server"].(*nethttp.Server) + timedContext, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + _ = srv.Shutdown(timedContext) }, - teardown: defaultTeardown, - validation: validateProtocolConnection, + validation: validateProtocolConnection(network.ProtocolHTTP), }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + testProtocolClassificationInner(t, tt, cfg) + }) + } +} + +func testHTTP2ProtocolClassification(t *testing.T, cfg *config.Config, clientHost, targetHost, serverHost string) { + defaultDialer := &net.Dialer{ + LocalAddr: &net.TCPAddr{ + IP: net.ParseIP(clientHost), + Port: 0, + }, + } + + serverAddress := net.JoinHostPort(serverHost, http2Port) + targetAddress := net.JoinHostPort(targetHost, http2Port) + + server, err := grpc.NewServer(serverAddress) + require.NoError(t, err) + server.Run() + t.Cleanup(server.Stop) + + tests := []protocolClassificationAttributes{ { - name: "redis set", + name: "http2 traffic using gRPC - unary call", context: testContext{ - serverPort: "6379", - clientDialer: defaultDialer, - expectedProtocol: network.ProtocolRedis, - extras: make(map[string]interface{}), - }, - shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), - preTracerSetup: func(t *testing.T, ctx testContext) { - host, port, _ := net.SplitHostPort(ctx.serverAddress) - redis.RunRedisServer(t, host, port) - - client := redis.NewClient(ctx.targetAddress, ctx.clientDialer) - client.Ping(context.Background()) - ctx.extras["client"] = client + serverPort: http2Port, + serverAddress: serverAddress, + targetAddress: targetAddress, }, postTracerSetup: func(t *testing.T, ctx testContext) { - client := ctx.extras["client"].(*redis2.Client) - client.Set(context.Background(), "key", "value", time.Minute) + c, err := grpc.NewClient(ctx.targetAddress, grpc.Options{ + CustomDialer: defaultDialer, + }) + require.NoError(t, err) + defer c.Close() + timedContext, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + require.NoError(t, c.HandleUnary(timedContext, "test")) }, - teardown: defaultTeardown, - validation: validateProtocolConnection, + validation: validateProtocolConnection(network.ProtocolHTTP2), }, { - name: "redis get", + name: "http2 traffic using gRPC - stream call", context: testContext{ - serverPort: "6379", - clientDialer: defaultDialer, - expectedProtocol: network.ProtocolRedis, - extras: make(map[string]interface{}), - }, - shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), - preTracerSetup: func(t *testing.T, ctx testContext) { - host, port, _ := net.SplitHostPort(ctx.serverAddress) - redis.RunRedisServer(t, host, port) - - client := redis.NewClient(ctx.targetAddress, ctx.clientDialer) - client.Set(context.Background(), "key", "value", time.Minute) - ctx.extras["client"] = client + serverPort: http2Port, + serverAddress: serverAddress, + targetAddress: targetAddress, }, postTracerSetup: func(t *testing.T, ctx testContext) { - client := ctx.extras["client"].(*redis2.Client) - res := client.Get(context.Background(), "key") - val, err := res.Result() + c, err := grpc.NewClient(ctx.targetAddress, grpc.Options{ + CustomDialer: defaultDialer, + }) require.NoError(t, err) - require.Equal(t, "value", val) + defer c.Close() + timedContext, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + require.NoError(t, c.HandleStream(timedContext, 5)) }, - teardown: defaultTeardown, - validation: validateProtocolConnection, + validation: validateProtocolConnection(network.ProtocolHTTP2), }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + testProtocolClassificationInner(t, tt, cfg) + }) + } +} + +func testEdgeCasesProtocolClassification(t *testing.T, cfg *config.Config, clientHost, targetHost, serverHost string) { + defaultDialer := &net.Dialer{ + LocalAddr: &net.TCPAddr{ + IP: net.ParseIP(clientHost), + }, + } + + teardown := func(t *testing.T, ctx testContext) { + server, ok := ctx.extras["server"].(*TCPServer) + if ok { + server.Shutdown() + // Giving time for the port to be free again. + time.Sleep(time.Second) + } + } + + tests := []protocolClassificationAttributes{ { - name: "redis get unknown key", + name: "tcp client without sending data", context: testContext{ - serverPort: "6379", - clientDialer: defaultDialer, - expectedProtocol: network.ProtocolRedis, - extras: make(map[string]interface{}), + serverPort: tcpPort, + serverAddress: net.JoinHostPort(serverHost, tcpPort), + targetAddress: net.JoinHostPort(targetHost, tcpPort), + extras: map[string]interface{}{}, }, - shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), preTracerSetup: func(t *testing.T, ctx testContext) { - host, port, _ := net.SplitHostPort(ctx.serverAddress) - redis.RunRedisServer(t, host, port) - - client := redis.NewClient(ctx.targetAddress, ctx.clientDialer) - client.Ping(context.Background()) - ctx.extras["client"] = client + server := NewTCPServerOnAddress(ctx.serverAddress, func(c net.Conn) { + c.Close() + }) + ctx.extras["server"] = server + require.NoError(t, server.Run()) }, postTracerSetup: func(t *testing.T, ctx testContext) { - client := ctx.extras["client"].(*redis2.Client) - res := client.Get(context.Background(), "unknown") - require.Error(t, res.Err()) + timedContext, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + c, err := defaultDialer.DialContext(timedContext, "tcp", ctx.targetAddress) + require.NoError(t, err) + defer c.Close() }, - teardown: defaultTeardown, - validation: validateProtocolConnection, + teardown: teardown, + validation: validateProtocolConnection(network.ProtocolUnknown), }, { - name: "redis err response", + name: "tcp client with sending random data", context: testContext{ - serverPort: "6379", - clientDialer: defaultDialer, - expectedProtocol: network.ProtocolRedis, - extras: make(map[string]interface{}), + serverPort: tcpPort, + serverAddress: net.JoinHostPort(serverHost, tcpPort), + targetAddress: net.JoinHostPort(targetHost, tcpPort), + extras: map[string]interface{}{}, }, - shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), preTracerSetup: func(t *testing.T, ctx testContext) { - host, port, _ := net.SplitHostPort(ctx.serverAddress) - redis.RunRedisServer(t, host, port) + server := NewTCPServerOnAddress(ctx.serverAddress, func(c net.Conn) { + defer c.Close() + r := bufio.NewReader(c) + input, err := r.ReadBytes(byte('\n')) + if err == nil { + c.Write(input) + } + }) + ctx.extras["server"] = server + require.NoError(t, server.Run()) }, postTracerSetup: func(t *testing.T, ctx testContext) { - conn, err := ctx.clientDialer.DialContext(context.Background(), "tcp", ctx.targetAddress) - require.NoError(t, err) - _, err = conn.Write([]byte("+dummy\r\n")) + timedContext, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + c, err := defaultDialer.DialContext(timedContext, "tcp", ctx.targetAddress) require.NoError(t, err) + defer c.Close() + c.Write([]byte("hello\n")) + io.ReadAll(c) }, - teardown: defaultTeardown, - validation: validateProtocolConnection, + teardown: teardown, + validation: validateProtocolConnection(network.ProtocolUnknown), }, { - name: "redis client id", + // A case where we see multiple protocols on the same socket. In that case, we expect to classify the connection + // with the first protocol we've found. + name: "mixed protocols", context: testContext{ - serverPort: "6379", - clientDialer: defaultDialer, - expectedProtocol: network.ProtocolRedis, - extras: make(map[string]interface{}), + serverPort: tcpPort, + serverAddress: net.JoinHostPort(serverHost, tcpPort), + targetAddress: net.JoinHostPort(targetHost, tcpPort), + extras: map[string]interface{}{}, }, - shouldSkip: composeSkips(skipIfNotLinux, skipIfUsingNAT), preTracerSetup: func(t *testing.T, ctx testContext) { - host, port, _ := net.SplitHostPort(ctx.serverAddress) - redis.RunRedisServer(t, host, port) + server := NewTCPServerOnAddress(ctx.serverAddress, func(c net.Conn) { + defer c.Close() - client := redis.NewClient(ctx.targetAddress, ctx.clientDialer) - client.Ping(context.Background()) - ctx.extras["client"] = client + r := bufio.NewReader(c) + input, err := r.ReadBytes(byte('\n')) + if err == nil { + c.Write(input) + } + }) + ctx.extras["server"] = server + require.NoError(t, server.Run()) }, postTracerSetup: func(t *testing.T, ctx testContext) { - client := ctx.extras["client"].(*redis2.Client) - res := client.ClientID(context.Background()) - require.NoError(t, res.Err()) + timedContext, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + c, err := defaultDialer.DialContext(timedContext, "tcp", ctx.targetAddress) + require.NoError(t, err) + defer c.Close() + c.Write([]byte("GET /200/foobar HTTP/1.1\n")) + io.ReadAll(c) + // http2 prefix. + c.Write([]byte("PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n")) + io.ReadAll(c) }, - teardown: defaultTeardown, - validation: validateProtocolConnection, + teardown: teardown, + validation: validateProtocolConnection(network.ProtocolHTTP), }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - tt.context.serverAddress = net.JoinHostPort(serverHost, tt.context.serverPort) - tt.context.targetAddress = net.JoinHostPort(targetHost, tt.context.serverPort) + testProtocolClassificationInner(t, tt, cfg) + }) + } +} - if tt.shouldSkip != nil { - if skip, msg := tt.shouldSkip(tt.context); skip { - t.Skip(msg) - } - } +func testProtocolClassificationInner(t *testing.T, params protocolClassificationAttributes, cfg *config.Config) { + if params.skipCallback != nil { + params.skipCallback(t, params.context) + } - tt.context.done = make(chan struct{}) - if tt.teardown != nil { - t.Cleanup(func() { - tt.teardown(t, tt.context) - }) - } - if tt.preTracerSetup != nil { - tt.preTracerSetup(t, tt.context) - } - tr := setupTracer(t, cfg) - tt.postTracerSetup(t, tt.context) - tt.validation(t, tt.context, tr) + if params.teardown != nil { + t.Cleanup(func() { + params.teardown(t, params.context) }) } + if params.preTracerSetup != nil { + params.preTracerSetup(t, params.context) + } + tr := setupTracer(t, cfg) + params.postTracerSetup(t, params.context) + params.validation(t, params.context, tr) } func waitForConnectionsWithProtocol(t *testing.T, tr *Tracer, targetAddr, serverAddr string, expectedProtocol network.ProtocolType) { diff --git a/pkg/network/tracer/tracer_linux_test.go b/pkg/network/tracer/tracer_linux_test.go index 175723bc42f95..66fbf75e5bf43 100644 --- a/pkg/network/tracer/tracer_linux_test.go +++ b/pkg/network/tracer/tracer_linux_test.go @@ -71,10 +71,8 @@ func TestTCPRemoveEntries(t *testing.T) { server := NewTCPServer(func(c net.Conn) { c.Close() }) - doneChan := make(chan struct{}) - err = server.Run(doneChan) - require.NoError(t, err) - defer close(doneChan) + t.Cleanup(server.Shutdown) + require.NoError(t, server.Run()) // Connect to server c, err := net.DialTimeout("tcp", server.address, 2*time.Second) @@ -138,10 +136,8 @@ func TestTCPRetransmit(t *testing.T) { c.Write(genPayload(serverMessageSize)) c.Close() }) - doneChan := make(chan struct{}) - err = server.Run(doneChan) - require.NoError(t, err) - defer close(doneChan) + t.Cleanup(server.Shutdown) + require.NoError(t, server.Run()) // Connect to server c, err := net.DialTimeout("tcp", server.address, time.Second) @@ -188,10 +184,8 @@ func TestTCPRetransmitSharedSocket(t *testing.T) { io.Copy(io.Discard, c) c.Close() }) - doneChan := make(chan struct{}) - err = server.Run(doneChan) - require.NoError(t, err) - defer close(doneChan) + t.Cleanup(server.Shutdown) + require.NoError(t, server.Run()) // Connect to server c, err := net.DialTimeout("tcp", server.address, time.Second) @@ -253,10 +247,8 @@ func TestTCPRTT(t *testing.T) { io.Copy(io.Discard, c) c.Close() }) - doneChan := make(chan struct{}) - err = server.Run(doneChan) - require.NoError(t, err) - defer close(doneChan) + t.Cleanup(server.Shutdown) + require.NoError(t, server.Run()) c, err := net.DialTimeout("tcp", server.address, time.Second) require.NoError(t, err) @@ -300,10 +292,8 @@ func TestTCPMiscount(t *testing.T) { } c.Close() }) - doneChan := make(chan struct{}) - err = server.Run(doneChan) - require.NoError(t, err) - defer close(doneChan) + t.Cleanup(server.Shutdown) + require.NoError(t, server.Run()) c, err := net.DialTimeout("tcp", server.address, 50*time.Millisecond) if err != nil { @@ -330,7 +320,7 @@ func TestTCPMiscount(t *testing.T) { assert.NoError(t, err) assert.EqualValues(t, len(x), n) - doneChan <- struct{}{} + server.Shutdown() conn, ok := findConnection(c.LocalAddr(), c.RemoteAddr(), getConnections(t, tr)) assert.True(t, ok) @@ -356,10 +346,8 @@ func TestConnectionExpirationRegression(t *testing.T) { c.Close() connClosed <- struct{}{} }) - doneChan := make(chan struct{}) - err = server.Run(doneChan) - require.NoError(t, err) - defer close(doneChan) + t.Cleanup(server.Shutdown) + require.NoError(t, server.Run()) c, err := net.DialTimeout("tcp", server.address, time.Second) require.NoError(t, err) @@ -416,10 +404,8 @@ func TestConntrackExpiration(t *testing.T) { io.Copy(io.Discard, c) c.Close() }) - doneChan := make(chan struct{}) - err = server.Run(doneChan) - require.NoError(t, err) - defer close(doneChan) + t.Cleanup(server.Shutdown) + require.NoError(t, server.Run()) c, err := net.Dial("tcp", fmt.Sprintf("2.2.2.2:%d", port)) require.NoError(t, err) @@ -475,10 +461,8 @@ func TestConntrackDelays(t *testing.T) { io.Copy(io.Discard, c) c.Close() }) - doneChan := make(chan struct{}) - err = server.Run(doneChan) - require.NoError(t, err) - defer close(doneChan) + t.Cleanup(server.Shutdown) + require.NoError(t, server.Run()) c, err := net.Dial("tcp", fmt.Sprintf("2.2.2.2:%d", port)) require.NoError(t, err) @@ -512,10 +496,8 @@ func TestTranslationBindingRegression(t *testing.T) { io.Copy(io.Discard, c) c.Close() }) - doneChan := make(chan struct{}) - err = server.Run(doneChan) - require.NoError(t, err) - defer close(doneChan) + t.Cleanup(server.Shutdown) + require.NoError(t, server.Run()) // Send data to 2.2.2.2 (which should be translated to 1.1.1.1) c, err := net.Dial("tcp", fmt.Sprintf("2.2.2.2:%d", port)) @@ -627,10 +609,9 @@ func TestGatewayLookupEnabled(t *testing.T) { cfg := testConfig() cfg.EnableGatewayLookup = true - tr, err := NewTracer(cfg) + tr, err := newTracer(cfg) require.NoError(t, err) require.NotNil(t, tr) - defer tr.Stop() require.NotNil(t, tr.gwLookup) tr.gwLookup.subnetForHwAddrFunc = func(hwAddr net.HardwareAddr) (network.Subnet, error) { @@ -644,6 +625,9 @@ func TestGatewayLookupEnabled(t *testing.T) { return network.Subnet{Alias: "subnet"}, nil } + require.NoError(t, tr.start(), "could not start tracer") + defer tr.Stop() + getConnections(t, tr) dnsClientAddr, dnsServerAddr := doDNSQuery(t, "google.com", "8.8.8.8") @@ -653,7 +637,7 @@ func TestGatewayLookupEnabled(t *testing.T) { var ok bool conn, ok = findConnection(dnsClientAddr, dnsServerAddr, getConnections(t, tr)) return ok - }, 2*time.Second, time.Second) + }, 3*time.Second, 500*time.Millisecond) require.NotNil(t, conn.Via, "connection is missing via: %s", conn) require.Equal(t, conn.Via.Subnet.Alias, fmt.Sprintf("subnet-%d", ifi.Index)) @@ -672,11 +656,10 @@ func TestGatewayLookupSubnetLookupError(t *testing.T) { cfg := testConfig() cfg.EnableGatewayLookup = true - tr, err := NewTracer(cfg) + // create the tracer without starting it + tr, err := newTracer(cfg) require.NoError(t, err) require.NotNil(t, tr) - defer tr.Stop() - require.NotNil(t, tr.gwLookup) ifi := ipRouteGet(t, "", "8.8.8.8", nil) @@ -689,6 +672,8 @@ func TestGatewayLookupSubnetLookupError(t *testing.T) { } tr.gwLookup.purge() + require.NoError(t, tr.start(), "failed to start tracer") + defer tr.Stop() getConnections(t, tr) @@ -726,11 +711,9 @@ func TestGatewayLookupCrossNamespace(t *testing.T) { cfg := testConfig() cfg.EnableGatewayLookup = true - tr, err := NewTracer(cfg) + tr, err := newTracer(cfg) require.NoError(t, err) require.NotNil(t, tr) - defer tr.Stop() - require.NotNil(t, tr.gwLookup) // setup two network namespaces @@ -784,21 +767,22 @@ func TestGatewayLookupCrossNamespace(t *testing.T) { return network.Subnet{Alias: "subnet"}, nil } - tr.gwLookup.purge() + + require.NoError(t, tr.start(), "could not start tracer") + defer tr.Stop() test1Ns, err := vnetns.GetFromName("test1") require.NoError(t, err) defer test1Ns.Close() // run tcp server in test1 net namespace - done := make(chan struct{}) var server *TCPServer err = util.WithNS(test1Ns, func() error { server = NewTCPServerOnAddress("2.2.2.2:0", func(c net.Conn) {}) - return server.Run(done) + return server.Run() }) require.NoError(t, err) - defer close(done) + t.Cleanup(server.Shutdown) var conn *network.ConnectionStats t.Run("client in root namespace", func(t *testing.T) { @@ -996,10 +980,8 @@ func TestDNATIntraHostIntegration(t *testing.T) { _ = c.Close() }, } - doneChan := make(chan struct{}) - err = server.Run(doneChan) - require.NoError(t, err) - defer close(doneChan) + t.Cleanup(server.Shutdown) + require.NoError(t, server.Run()) conn, err := net.Dial("tcp", "2.2.2.2:5432") require.NoError(t, err, "error connecting to client") @@ -1011,7 +993,7 @@ func TestDNATIntraHostIntegration(t *testing.T) { require.NoError(t, err) require.NoError(t, conn.Close(), "error closing client connection") - doneChan <- struct{}{} + server.Shutdown() time.Sleep(time.Second * 1) @@ -1462,10 +1444,8 @@ func TestSendfileRegression(t *testing.T) { rcvd, _ = io.Copy(io.Discard, c) c.Close() }) - doneChan := make(chan struct{}) - err = server.Run(doneChan) - require.NoError(t, err) - defer close(doneChan) + t.Cleanup(server.Shutdown) + require.NoError(t, server.Run()) // Connect to TCP server c, err := net.DialTimeout("tcp", server.address, time.Second) @@ -1522,10 +1502,8 @@ func TestSendfileError(t *testing.T) { _, _ = io.Copy(io.Discard, c) c.Close() }) - doneChan := make(chan struct{}) - err = server.Run(doneChan) - require.NoError(t, err) - t.Cleanup(func() { close(doneChan) }) + require.NoError(t, server.Run()) + t.Cleanup(server.Shutdown) c, err := net.DialTimeout("tcp", server.address, time.Second) require.NoError(t, err) @@ -1580,12 +1558,10 @@ func TestShortWrite(t *testing.T) { <-read c.Close() }) - doneChan := make(chan struct{}) - err = server.Run(doneChan) - require.NoError(t, err) + require.NoError(t, server.Run()) t.Cleanup(func() { close(read) - close(doneChan) + server.Shutdown() }) s, err := unix.Socket(syscall.AF_INET, syscall.SOCK_STREAM|syscall.SOCK_NONBLOCK, 0) @@ -1688,9 +1664,8 @@ func TestBlockingReadCounts(t *testing.T) { c.Write([]byte("foo")) }) - done := make(chan struct{}) - server.Run(done) - defer func() { close(done) }() + server.Run() + t.Cleanup(server.Shutdown) c, err := net.DialTimeout("tcp", server.address, 5*time.Second) require.NoError(t, err) @@ -1725,9 +1700,8 @@ func TestTCPDirectionWithPreexistingConnection(t *testing.T) { c.Close() wg.Done() }) - doneChan := make(chan struct{}) - server.Run(doneChan) - defer close(doneChan) + server.Run() + t.Cleanup(server.Shutdown) t.Logf("server address: %s", server.address) // create an initial client connection to the server @@ -1775,7 +1749,6 @@ func TestTCPDirectionWithPreexistingConnection(t *testing.T) { func TestPreexistingConnectionDirection(t *testing.T) { // Start the client and server before we enable the system probe to test that the tracer picks // up the pre-existing connection - doneChan := make(chan struct{}) server := NewTCPServer(func(c net.Conn) { r := bufio.NewReader(c) @@ -1783,8 +1756,7 @@ func TestPreexistingConnectionDirection(t *testing.T) { _, _ = c.Write(genPayload(serverMessageSize)) _ = c.Close() }) - err := server.Run(doneChan) - require.NoError(t, err) + require.NoError(t, server.Run()) c, err := net.DialTimeout("tcp", server.address, 50*time.Millisecond) require.NoError(t, err) @@ -1819,6 +1791,4 @@ func TestPreexistingConnectionDirection(t *testing.T) { assert.Equal(t, addrPort(server.address), int(conn.DPort)) assert.Equal(t, network.OUTGOING, conn.Direction) assert.True(t, conn.IntraHost) - - doneChan <- struct{}{} } diff --git a/pkg/network/tracer/tracer_shared.go b/pkg/network/tracer/tracer_shared.go index c112051f90a4b..74fb87044e281 100644 --- a/pkg/network/tracer/tracer_shared.go +++ b/pkg/network/tracer/tracer_shared.go @@ -13,7 +13,7 @@ import ( ) // shouldSkipConnection returns whether or not the tracer should ignore a given connection: -// • Local DNS (*:53) requests if configured (default: true) +// - Local DNS (*:53) requests if configured (default: true) func (t *Tracer) shouldSkipConnection(conn *network.ConnectionStats) bool { isDNSConnection := conn.DPort == 53 || conn.SPort == 53 if !t.config.CollectLocalDNS && isDNSConnection && conn.Dest.IsLoopback() { diff --git a/pkg/network/tracer/tracer_test.go b/pkg/network/tracer/tracer_test.go index bb3840e6eac3d..1a9192999e767 100644 --- a/pkg/network/tracer/tracer_test.go +++ b/pkg/network/tracer/tracer_test.go @@ -73,7 +73,7 @@ func TestGetStats(t *testing.T) { cfg.EnableHTTPMonitoring = true tr, err := NewTracer(cfg) require.NoError(t, err) - defer tr.Stop() + t.Cleanup(tr.Stop) <-time.After(time.Second) @@ -210,7 +210,7 @@ func TestTCPSendAndReceive(t *testing.T) { if err != nil { t.Fatal(err) } - defer tr.Stop() + t.Cleanup(tr.Stop) // Create TCP Server which, for every line, sends back a message with size=serverMessageSize server := NewTCPServer(func(c net.Conn) { @@ -224,8 +224,8 @@ func TestTCPSendAndReceive(t *testing.T) { } c.Close() }) - doneChan := make(chan struct{}) - err = server.Run(doneChan) + t.Cleanup(server.Shutdown) + err = server.Run() require.NoError(t, err) c, err := net.DialTimeout("tcp", server.address, 50*time.Millisecond) @@ -267,11 +267,9 @@ func TestTCPSendAndReceive(t *testing.T) { assert.Equal(t, addrPort(server.address), int(conn.DPort)) assert.Equal(t, network.OUTGOING, conn.Direction) assert.True(t, conn.IntraHost) - - doneChan <- struct{}{} } -func TestTCPShortlived(t *testing.T) { +func TestTCPShortLived(t *testing.T) { // Enable BPF-based system probe cfg := testConfig() cfg.TCPClosedTimeout = 10 * time.Millisecond @@ -279,7 +277,7 @@ func TestTCPShortlived(t *testing.T) { if err != nil { t.Fatal(err) } - defer tr.Stop() + t.Cleanup(tr.Stop) initTracerState(t, tr) @@ -290,10 +288,8 @@ func TestTCPShortlived(t *testing.T) { c.Write(genPayload(serverMessageSize)) c.Close() }) - doneChan := make(chan struct{}) - err = server.Run(doneChan) - require.NoError(t, err) - defer close(doneChan) + t.Cleanup(server.Shutdown) + require.NoError(t, server.Run()) // Connect to server c, err := net.DialTimeout("tcp", server.address, 50*time.Millisecond) @@ -338,14 +334,14 @@ func TestTCPOverIPv6(t *testing.T) { t.Skip("IPv6 not enabled on host") } - config := testConfig() - config.CollectIPv6Conns = true + cfg := testConfig() + cfg.CollectIPv6Conns = true - tr, err := NewTracer(config) + tr, err := NewTracer(cfg) if err != nil { t.Fatal(err) } - defer tr.Stop() + t.Cleanup(tr.Stop) ln, err := net.Listen("tcp6", ":0") require.NoError(t, err) @@ -400,15 +396,18 @@ func TestTCPOverIPv6(t *testing.T) { } func TestTCPCollectionDisabled(t *testing.T) { + if runtime.GOOS == "windows" { + t.Skip("Test disabled on Windows") + } // Enable BPF-based system probe with TCP disabled - config := testConfig() - config.CollectTCPConns = false + cfg := testConfig() + cfg.CollectTCPConns = false - tr, err := NewTracer(config) + tr, err := NewTracer(cfg) if err != nil { t.Fatal(err) } - defer tr.Stop() + t.Cleanup(tr.Stop) // Create TCP Server which sends back serverMessageSize bytes server := NewTCPServer(func(c net.Conn) { @@ -417,10 +416,9 @@ func TestTCPCollectionDisabled(t *testing.T) { c.Write(genPayload(serverMessageSize)) c.Close() }) - doneChan := make(chan struct{}) - err = server.Run(doneChan) - require.NoError(t, err) - defer close(doneChan) + + t.Cleanup(server.Shutdown) + require.NoError(t, server.Run()) // Connect to server c, err := net.DialTimeout("tcp", server.address, 50*time.Millisecond) @@ -445,22 +443,20 @@ func TestTCPCollectionDisabled(t *testing.T) { func TestTCPConnsReported(t *testing.T) { // Setup - config := testConfig() - config.CollectTCPConns = true + cfg := testConfig() + cfg.CollectTCPConns = true - tr, err := NewTracer(config) + tr, err := NewTracer(cfg) require.NoError(t, err) - defer tr.Stop() + t.Cleanup(tr.Stop) processedChan := make(chan struct{}) server := NewTCPServer(func(c net.Conn) { c.Close() close(processedChan) }) - doneChan := make(chan struct{}) - err = server.Run(doneChan) - require.NoError(t, err) - defer close(doneChan) + t.Cleanup(server.Shutdown) + require.NoError(t, server.Run()) // Connect to server c, err := net.DialTimeout("tcp", server.address, 50*time.Millisecond) @@ -481,10 +477,20 @@ func TestTCPConnsReported(t *testing.T) { func TestUDPSendAndReceive(t *testing.T) { t.Run("v4", func(t *testing.T) { - testUDPSendAndReceive(t, "127.0.0.1:8001") + t.Run("fixed port", func(t *testing.T) { + testUDPSendAndReceive(t, "127.0.0.1:8081") + }) + t.Run("random port", func(t *testing.T) { + testUDPSendAndReceive(t, "127.0.0.1:0") + }) }) t.Run("v6", func(t *testing.T) { - testUDPSendAndReceive(t, "[::1]:8001") + t.Run("fixed port", func(t *testing.T) { + testUDPSendAndReceive(t, "[::1]:8081") + }) + t.Run("random port", func(t *testing.T) { + testUDPSendAndReceive(t, "[::1]:0") + }) }) } @@ -544,14 +550,14 @@ func testUDPSendAndReceive(t *testing.T, addr string) { func TestUDPDisabled(t *testing.T) { // Enable BPF-based system probe with UDP disabled - config := testConfig() - config.CollectUDPConns = false + cfg := testConfig() + cfg.CollectUDPConns = false - tr, err := NewTracer(config) + tr, err := NewTracer(cfg) if err != nil { t.Fatal(err) } - defer tr.Stop() + t.Cleanup(tr.Stop) // Create UDP Server which sends back serverMessageSize bytes server := &UDPServer{ @@ -589,13 +595,11 @@ func TestUDPDisabled(t *testing.T) { func TestLocalDNSCollectionDisabled(t *testing.T) { // Enable BPF-based system probe with DNS disabled (by default) - config := testConfig() - - tr, err := NewTracer(config) + tr, err := NewTracer(testConfig()) if err != nil { t.Fatal(err) } - defer tr.Stop() + t.Cleanup(tr.Stop) // Connect to local DNS addr, err := net.ResolveUDPAddr("udp", "localhost:53") @@ -619,15 +623,15 @@ func TestLocalDNSCollectionDisabled(t *testing.T) { func TestLocalDNSCollectionEnabled(t *testing.T) { // Enable BPF-based system probe with DNS enabled - config := testConfig() - config.CollectLocalDNS = true - config.CollectUDPConns = true + cfg := testConfig() + cfg.CollectLocalDNS = true + cfg.CollectUDPConns = true - tr, err := NewTracer(config) + tr, err := NewTracer(cfg) if err != nil { t.Fatal(err) } - defer tr.Stop() + t.Cleanup(tr.Stop) // Connect to local DNS addr, err := net.ResolveUDPAddr("udp", "localhost:53") @@ -659,15 +663,15 @@ func isLocalDNS(c network.ConnectionStats) bool { func TestShouldSkipExcludedConnection(t *testing.T) { // exclude connections from 127.0.0.1:80 - config := testConfig() + cfg := testConfig() // exclude source SSH connections to make this pass in VM - config.ExcludedSourceConnections = map[string][]string{"127.0.0.1": {"80"}, "*": {"22"}} - config.ExcludedDestinationConnections = map[string][]string{"127.0.0.1": {"tcp 80"}} - tr, err := NewTracer(config) + cfg.ExcludedSourceConnections = map[string][]string{"127.0.0.1": {"80"}, "*": {"22"}} + cfg.ExcludedDestinationConnections = map[string][]string{"127.0.0.1": {"tcp 80"}} + tr, err := NewTracer(cfg) if err != nil { t.Fatal(err) } - defer tr.Stop() + t.Cleanup(tr.Stop) // Connect to 127.0.0.1:80 addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:80") @@ -705,7 +709,7 @@ func TestShouldExcludeEmptyStatsConnection(t *testing.T) { cfg := testConfig() tr, err := NewTracer(cfg) require.NoError(t, err) - defer tr.Stop() + t.Cleanup(tr.Stop) // Connect to 127.0.0.1:80 addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:80") @@ -931,11 +935,9 @@ func benchEchoTCP(size int) func(b *testing.B) { } return func(b *testing.B) { - end := make(chan struct{}) server := NewTCPServer(echoOnMessage) - err := server.Run(end) - require.NoError(b, err) - defer close(end) + b.Cleanup(server.Shutdown) + require.NoError(b, server.Run()) c, err := net.DialTimeout("tcp", server.address, 50*time.Millisecond) if err != nil { @@ -971,11 +973,9 @@ func benchSendTCP(size int) func(b *testing.B) { } return func(b *testing.B) { - end := make(chan struct{}) server := NewTCPServer(dropOnMessage) - err := server.Run(end) - require.NoError(b, err) - defer close(end) + b.Cleanup(server.Shutdown) + require.NoError(b, server.Run()) c, err := net.DialTimeout("tcp", server.address, 50*time.Millisecond) if err != nil { @@ -997,6 +997,7 @@ func benchSendTCP(size int) func(b *testing.B) { type TCPServer struct { address string onMessage func(c net.Conn) + ln net.Listener } func NewTCPServer(onMessage func(c net.Conn)) *TCPServer { @@ -1010,31 +1011,34 @@ func NewTCPServerOnAddress(addr string, onMessage func(c net.Conn)) *TCPServer { } } -func (s *TCPServer) Run(done chan struct{}) error { - ln, err := net.Listen("tcp", s.address) +func (t *TCPServer) Run() error { + ln, err := net.Listen("tcp", t.address) if err != nil { return err } - s.address = ln.Addr().String() - - go func() { - <-done - ln.Close() - }() + t.ln = ln + t.address = ln.Addr().String() go func() { for { - conn, err := ln.Accept() + conn, err := t.ln.Accept() if err != nil { return } - go s.onMessage(conn) + go t.onMessage(conn) } }() return nil } +func (t *TCPServer) Shutdown() { + if t.ln != nil { + _ = t.ln.Close() + t.ln = nil + } +} + type UDPServer struct { network string address string @@ -1043,16 +1047,16 @@ type UDPServer struct { } func (s *UDPServer) Run(done chan struct{}, payloadSize int) error { - network := "udp" + networkType := "udp" if s.network != "" { - network = s.network + networkType = s.network } var err error var ln net.PacketConn if s.lc != nil { - ln, err = s.lc.ListenPacket(context.Background(), network, s.address) + ln, err = s.lc.ListenPacket(context.Background(), networkType, s.address) } else { - ln, err = net.ListenPacket(network, s.address) + ln, err = net.ListenPacket(networkType, s.address) } if err != nil { return err @@ -1126,12 +1130,12 @@ const ( ) func testDNSStats(t *testing.T, domain string, success int, failure int, timeout int, serverIP string) { - config := testConfig() - config.CollectDNSStats = true - config.DNSTimeout = 1 * time.Second - tr, err := NewTracer(config) + cfg := testConfig() + cfg.CollectDNSStats = true + cfg.DNSTimeout = 1 * time.Second + tr, err := NewTracer(cfg) require.NoError(t, err) - defer tr.Stop() + t.Cleanup(tr.Stop) dnsServerAddr := &net.UDPAddr{IP: net.ParseIP(serverIP), Port: 53} @@ -1210,7 +1214,7 @@ func TestTCPEstablished(t *testing.T) { tr, err := NewTracer(cfg) require.NoError(t, err) - defer tr.Stop() + t.Cleanup(tr.Stop) initTracerState(t, tr) @@ -1218,10 +1222,8 @@ func TestTCPEstablished(t *testing.T) { io.Copy(io.Discard, c) c.Close() }) - doneChan := make(chan struct{}) - err = server.Run(doneChan) - require.NoError(t, err) - defer close(doneChan) + t.Cleanup(server.Shutdown) + require.NoError(t, server.Run()) c, err := net.DialTimeout("tcp", server.address, 50*time.Millisecond) require.NoError(t, err) @@ -1252,10 +1254,8 @@ func TestTCPEstablishedPreExistingConn(t *testing.T) { io.Copy(io.Discard, c) c.Close() }) - doneChan := make(chan struct{}) - err := server.Run(doneChan) - require.NoError(t, err) - defer close(doneChan) + t.Cleanup(server.Shutdown) + require.NoError(t, server.Run()) c, err := net.DialTimeout("tcp", server.address, 50*time.Millisecond) require.NoError(t, err) @@ -1267,7 +1267,7 @@ func TestTCPEstablishedPreExistingConn(t *testing.T) { tr, err := NewTracer(cfg) require.NoError(t, err) - defer tr.Stop() + t.Cleanup(tr.Stop) initTracerState(t, tr) @@ -1288,7 +1288,7 @@ func TestUnconnectedUDPSendIPv4(t *testing.T) { cfg := testConfig() tr, err := NewTracer(cfg) require.NoError(t, err) - defer tr.Stop() + t.Cleanup(tr.Stop) remotePort := rand.Int()%5000 + 15000 remoteAddr := &net.UDPAddr{IP: net.ParseIP("127.0.0.1"), Port: remotePort} @@ -1319,7 +1319,7 @@ func TestConnectedUDPSendIPv6(t *testing.T) { cfg.CollectIPv6Conns = true tr, err := NewTracer(cfg) require.NoError(t, err) - defer tr.Stop() + t.Cleanup(tr.Stop) remotePort := rand.Int()%5000 + 15000 remoteAddr := &net.UDPAddr{IP: net.IPv6loopback, Port: remotePort} @@ -1366,9 +1366,8 @@ func TestConnectionClobber(t *testing.T) { _, _ = io.ReadFull(c, srvRecvBuf) _, _ = c.Write(srvRecvBuf) }) - doneChan := make(chan struct{}) - server.Run(doneChan) - t.Cleanup(func() { close(doneChan) }) + require.NoError(t, server.Run()) + t.Cleanup(server.Shutdown) // we only need 1/4 since both send and recv sides will be registered sendCount := tr.activeBuffer.Capacity()/4 + 1 @@ -1469,7 +1468,7 @@ func TestTCPDirection(t *testing.T) { cfg := testConfig() tr, err := NewTracer(cfg) require.NoError(t, err) - defer tr.Stop() + t.Cleanup(tr.Stop) initTracerState(t, tr) diff --git a/pkg/network/tracer/tracer_unsupported.go b/pkg/network/tracer/tracer_unsupported.go index 831a426c67459..d55f6e1af694d 100644 --- a/pkg/network/tracer/tracer_unsupported.go +++ b/pkg/network/tracer/tracer_unsupported.go @@ -66,3 +66,8 @@ func (t *Tracer) DebugCachedConntrack(ctx context.Context) (interface{}, error) func (t *Tracer) DebugHostConntrack(ctx context.Context) (interface{}, error) { return nil, ebpf.ErrNotImplemented } + +// DebugDumpProcessCache is not implemented on this OS for Tracer +func (t *Tracer) DebugDumpProcessCache(ctx context.Context) (interface{}, error) { + return nil, ebpf.ErrNotImplemented +} diff --git a/pkg/network/tracer/tracer_usm_linux_test.go b/pkg/network/tracer/tracer_usm_linux_test.go index 15af7b57d4a43..e7dbe0a34fb86 100644 --- a/pkg/network/tracer/tracer_usm_linux_test.go +++ b/pkg/network/tracer/tracer_usm_linux_test.go @@ -199,19 +199,18 @@ func TestHTTPSViaLibraryIntegration(t *testing.T) { } linked, _ := exec.Command(ldd, fetch).Output() - foundSSLLib := false + var prefechLibs []string for _, lib := range tlsLibs { libSSLPath := lib.FindString(string(linked)) if _, err := os.Stat(libSSLPath); err == nil { - foundSSLLib = true - break + prefechLibs = append(prefechLibs, libSSLPath) } } - if !foundSSLLib { + if len(prefechLibs) == 0 { t.Fatalf("%s not linked with any of these libs %v", test.name, tlsLibs) } - testHTTPSLibrary(t, test.fetchCmd) + testHTTPSLibrary(t, test.fetchCmd, prefechLibs) }) } @@ -219,7 +218,7 @@ func TestHTTPSViaLibraryIntegration(t *testing.T) { } } -func testHTTPSLibrary(t *testing.T, fetchCmd []string) { +func testHTTPSLibrary(t *testing.T, fetchCmd []string, prefechLibs []string) { // Start tracer with HTTPS support cfg := testConfig() cfg.EnableHTTPMonitoring = true @@ -230,9 +229,12 @@ func testHTTPSLibrary(t *testing.T, fetchCmd []string) { err = tr.RegisterClient("1") require.NoError(t, err) - // Run fetchCmd once to make sure the OpenSSL is detected and uprobes are attached - exec.Command(fetchCmd[0]).Run() - time.Sleep(2 * time.Second) + // not ideal but, short process are hard to catch + for _, lib := range prefechLibs { + f, _ := os.Open(lib) + defer f.Close() + } + time.Sleep(time.Second) // Issue request using fetchCmd (wget, curl, ...) // This is necessary (as opposed to using net/http) because we want to @@ -537,7 +539,6 @@ func testProtocolClassificationMapCleanup(t *testing.T, cfg *config.Config, clie initTracerState(t, tr) require.NoError(t, err) - done := make(chan struct{}) HTTPServer := NewTCPServerOnAddress(serverHost, func(c net.Conn) { r := bufio.NewReader(c) input, err := r.ReadBytes(byte('\n')) @@ -546,7 +547,8 @@ func testProtocolClassificationMapCleanup(t *testing.T, cfg *config.Config, clie } c.Close() }) - require.NoError(t, HTTPServer.Run(done)) + t.Cleanup(HTTPServer.Shutdown) + require.NoError(t, HTTPServer.Run()) _, port, err := net.SplitHostPort(HTTPServer.address) require.NoError(t, err) targetAddr := net.JoinHostPort(targetHost, port) @@ -568,7 +570,7 @@ func testProtocolClassificationMapCleanup(t *testing.T, cfg *config.Config, clie client.CloseIdleConnections() waitForConnectionsWithProtocol(t, tr, targetAddr, HTTPServer.address, network.ProtocolHTTP) - close(done) + HTTPServer.Shutdown() time.Sleep(2 * time.Second) diff --git a/pkg/network/tracer/tracer_windows.go b/pkg/network/tracer/tracer_windows.go index fc72c74d6a2f3..db1da60349871 100644 --- a/pkg/network/tracer/tracer_windows.go +++ b/pkg/network/tracer/tracer_windows.go @@ -12,10 +12,13 @@ import ( "context" "errors" "fmt" + "runtime" "sync" "syscall" "time" + "golang.org/x/sys/windows" + "github.com/DataDog/datadog-agent/pkg/ebpf" "github.com/DataDog/datadog-agent/pkg/network" "github.com/DataDog/datadog-agent/pkg/network/config" @@ -50,6 +53,9 @@ type Tracer struct { // Connections for the tracer to exclude sourceExcludes []*network.ConnectionFilter destExcludes []*network.ConnectionFilter + + // polling loop for connection event + closedEventLoop sync.WaitGroup } // NewTracer returns an initialized tracer struct @@ -92,7 +98,33 @@ func NewTracer(config *config.Config) (*Tracer, error) { sourceExcludes: network.ParseConnectionFilters(config.ExcludedSourceConnections), destExcludes: network.ParseConnectionFilters(config.ExcludedDestinationConnections), } + tr.closedEventLoop.Add(1) + go func() { + defer tr.closedEventLoop.Done() + + runtime.LockOSThread() + defer runtime.UnlockOSThread() + waitloop: + for { + evt, _ := windows.WaitForSingleObject(di.GetClosedFlowsEvent(), windows.INFINITE) + switch evt { + case windows.WAIT_OBJECT_0: + _, err = tr.driverInterface.GetClosedConnectionStats(tr.closedBuffer, func(c *network.ConnectionStats) bool { + return !tr.shouldSkipConnection(c) + }) + closedConnStats := tr.closedBuffer.Connections() + + tr.state.StoreClosedConnections(closedConnStats) + + case windows.WAIT_FAILED: + break waitloop + + default: + log.Infof("got other wait value %v", evt) + } + } + }() return tr, nil } @@ -107,6 +139,7 @@ func (t *Tracer) Stop() { if err != nil { log.Errorf("error closing driver interface: %s", err) } + t.closedEventLoop.Wait() } // GetActiveConnections returns all active connections @@ -114,11 +147,17 @@ func (t *Tracer) GetActiveConnections(clientID string) (*network.Connections, er t.connLock.Lock() defer t.connLock.Unlock() - _, _, err := t.driverInterface.GetConnectionStats(t.activeBuffer, t.closedBuffer, func(c *network.ConnectionStats) bool { + _, err := t.driverInterface.GetOpenConnectionStats(t.activeBuffer, func(c *network.ConnectionStats) bool { return !t.shouldSkipConnection(c) }) if err != nil { - return nil, fmt.Errorf("error retrieving connections from driver: %w", err) + return nil, fmt.Errorf("error retrieving open connections from driver: %w", err) + } + _, err = t.driverInterface.GetClosedConnectionStats(t.closedBuffer, func(c *network.ConnectionStats) bool { + return !t.shouldSkipConnection(c) + }) + if err != nil { + return nil, fmt.Errorf("error retrieving closed connections from driver: %w", err) } activeConnStats := t.activeBuffer.Connections() closedConnStats := t.closedBuffer.Connections() @@ -228,6 +267,11 @@ func (t *Tracer) DebugHostConntrack(ctx context.Context) (interface{}, error) { return nil, ebpf.ErrNotImplemented } +// DebugDumpProcessCache is not implemented on this OS for Tracer +func (t *Tracer) DebugDumpProcessCache(ctx context.Context) (interface{}, error) { + return nil, ebpf.ErrNotImplemented +} + func newHttpMonitor(c *config.Config, dh driver.Handle) http.Monitor { if !c.EnableHTTPMonitoring && !c.EnableHTTPSMonitoring { return nil diff --git a/pkg/obfuscate/cache.go b/pkg/obfuscate/cache.go index 5b8b545944d1e..3993390d2e54c 100644 --- a/pkg/obfuscate/cache.go +++ b/pkg/obfuscate/cache.go @@ -9,7 +9,7 @@ import ( "fmt" "time" - "github.com/dgraph-io/ristretto" + "github.com/outcaste-io/ristretto" ) // measuredCache is a wrapper on top of *ristretto.Cache which additionally diff --git a/pkg/obfuscate/credit_cards.go b/pkg/obfuscate/credit_cards.go index 0501881947c75..ff182a9d4a2fd 100644 --- a/pkg/obfuscate/credit_cards.go +++ b/pkg/obfuscate/credit_cards.go @@ -90,7 +90,6 @@ loop: // See: // • https://en.wikipedia.org/wiki/Luhn_algorithm // • https://dev.to/shiraazm/goluhn-a-simple-library-for-generating-calculating-and-verifying-luhn-numbers-588j -// func luhnValid(str []byte) bool { var ( sum int diff --git a/pkg/obfuscate/go.mod b/pkg/obfuscate/go.mod index 3c563304ec293..f5f262961fe74 100644 --- a/pkg/obfuscate/go.mod +++ b/pkg/obfuscate/go.mod @@ -5,7 +5,7 @@ go 1.12 require ( github.com/DataDog/datadog-go/v5 v5.1.1 github.com/Microsoft/go-winio v0.5.1 // indirect - github.com/dgraph-io/ristretto v0.1.0 + github.com/outcaste-io/ristretto v0.2.0 github.com/stretchr/testify v1.8.1 go.uber.org/atomic v1.10.0 ) diff --git a/pkg/obfuscate/go.sum b/pkg/obfuscate/go.sum index 7f574d7a55c18..6afa1464966fe 100644 --- a/pkg/obfuscate/go.sum +++ b/pkg/obfuscate/go.sum @@ -8,8 +8,6 @@ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= -github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= @@ -17,6 +15,8 @@ github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25Kn github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/outcaste-io/ristretto v0.2.0 h1:47w059XTZWFt01OucwjcBt8mEa3VUUhntUWEfmgVBFc= +github.com/outcaste-io/ristretto v0.2.0/go.mod h1:iBZA7RCt6jaOr0z6hiBQ6t662/oZ6Gx/yauuPvIWHAI= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= diff --git a/pkg/obfuscate/obfuscate.go b/pkg/obfuscate/obfuscate.go index caf90167c5f6a..aad3f47fb2e8a 100644 --- a/pkg/obfuscate/obfuscate.go +++ b/pkg/obfuscate/obfuscate.go @@ -176,6 +176,7 @@ func NewObfuscator(cfg Config) *Obfuscator { opts: &cfg, queryCache: newMeasuredCache(cacheOptions{On: cfg.SQL.Cache, Statsd: cfg.Statsd}), sqlLiteralEscapes: atomic.NewBool(false), + log: cfg.Logger, } if cfg.ES.Enabled { o.es = newJSONObfuscator(&cfg.ES, &o) diff --git a/pkg/obfuscate/sql.go b/pkg/obfuscate/sql.go index ba6cca0ad0d41..2a3bbdee747fc 100644 --- a/pkg/obfuscate/sql.go +++ b/pkg/obfuscate/sql.go @@ -57,9 +57,9 @@ func (f *metadataFinderFilter) Filter(token, lastToken TokenKind, buffer []byte) // SELECT ... FROM [tableName] // DELETE FROM [tableName] // ... JOIN [tableName] - if r, _ := utf8.DecodeRune(buffer); !unicode.IsLetter(r) && !strings.ContainsRune("\"'`", r) { - // first character in buffer is not a letter, nor a quote, meaning it is not an identifier; - // we might have a nested query like SELECT * FROM (SELECT ...) + if r, _ := utf8.DecodeRune(buffer); !unicode.IsLetter(r) { + // first character in buffer is not a letter; we might have a nested + // query like SELECT * FROM (SELECT ...) break } fallthrough @@ -216,8 +216,8 @@ type groupingFilter struct { // Filter the given token so that it will be discarded if a grouping pattern // has been recognized. A grouping is composed by items like: -// * '( ?, ?, ? )' -// * '( ?, ? ), ( ?, ? )' +// - '( ?, ?, ? )' +// - '( ?, ? ), ( ?, ? )' func (f *groupingFilter) Filter(token, lastToken TokenKind, buffer []byte) (tokenType TokenKind, tokenBytes []byte, err error) { // increasing the number of groups means that we're filtering an entire group // because it can be represented with a single '( ? )' @@ -381,8 +381,7 @@ func attemptObfuscation(tokenizer *SQLTokenizer) (*ObfuscatedQuery, error) { if buff != nil { if out.Len() != 0 { switch token { - case '.', ']', ',': - // skip adding a space before dots, closing square brackets, and commas. + case ',': case '=': if lastToken == ':' { // do not add a space before an equals if a colon was @@ -391,12 +390,7 @@ func attemptObfuscation(tokenizer *SQLTokenizer) (*ObfuscatedQuery, error) { } fallthrough default: - switch lastToken { - case '[', '.': - // skip adding a space after dots and opening square brackets. - default: - out.WriteRune(' ') - } + out.WriteRune(' ') } } out.Write(buff) diff --git a/pkg/obfuscate/sql_test.go b/pkg/obfuscate/sql_test.go index 06bee1940e08c..7bfccb316173f 100644 --- a/pkg/obfuscate/sql_test.go +++ b/pkg/obfuscate/sql_test.go @@ -89,7 +89,7 @@ func TestDollarQuotedFunc(t *testing.T) { `CREATE OR REPLACE FUNCTION pg_temp.sequelize_upsert(OUT created boolean, OUT primary_key text) AS $func$ BEGIN INSERT INTO "school" ("id","organization_id","name","created_at","updated_at") VALUES ('dc4e9444-d7c9-40a9-bcef-68e4cc594e61','ec647f56-f27a-49a1-84af-021ad0a19f21','Test','2021-03-31 16:30:43.915 +00:00','2021-03-31 16:30:43.915 +00:00'); created := true; EXCEPTION WHEN unique_violation THEN UPDATE "school" SET "id"='dc4e9444-d7c9-40a9-bcef-68e4cc594e61',"organization_id"='ec647f56-f27a-49a1-84af-021ad0a19f21',"name"='Test',"updated_at"='2021-03-31 16:30:43.915 +00:00' WHERE ("id" = 'dc4e9444-d7c9-40a9-bcef-68e4cc594e61'); created := false; END; $func$ LANGUAGE plpgsql; SELECT * FROM pg_temp.sequelize_upsert();`, ) assert.NoError(t, err) - assert.Equal(t, `CREATE OR REPLACE FUNCTION pg_temp.sequelize_upsert ( OUT created boolean, OUT primary_key text ) AS $func$BEGIN INSERT INTO "school" ( "id", "organization_id", "name", "created_at", "updated_at" ) VALUES ( ? ) created := ? EXCEPTION WHEN unique_violation THEN UPDATE "school" SET "id" = ? "organization_id" = ? "name" = ? "updated_at" = ? WHERE ( "id" = ? ) created := ? END$func$ LANGUAGE plpgsql SELECT * FROM pg_temp.sequelize_upsert ( )`, oq.Query) + assert.Equal(t, `CREATE OR REPLACE FUNCTION pg_temp.sequelize_upsert ( OUT created boolean, OUT primary_key text ) AS $func$BEGIN INSERT INTO school ( id, organization_id, name, created_at, updated_at ) VALUES ( ? ) created := ? EXCEPTION WHEN unique_violation THEN UPDATE school SET id = ? organization_id = ? name = ? updated_at = ? WHERE ( id = ? ) created := ? END$func$ LANGUAGE plpgsql SELECT * FROM pg_temp.sequelize_upsert ( )`, oq.Query) }) } @@ -99,12 +99,11 @@ func TestScanDollarQuotedString(t *testing.T) { out string err bool }{ - {`$tag$abc$tag$`, `$tag$abc$tag$`, false}, - {`$func$abc$func$`, `$func$abc$func$`, false}, - {`$tag$textwith\n\rnewlinesand\r\\\$tag$`, `$tag$textwith\n\rnewlinesand\r\\\$tag$`, false}, - {`$tag$ab$tactac$tx$tag$`, `$tag$ab$tactac$tx$tag$`, false}, - {`$$abc$$`, `$$abc$$`, false}, - {`$$$$`, `$$$$`, false}, + {`$tag$abc$tag$`, `abc`, false}, + {`$func$abc$func$`, `abc`, false}, + {`$tag$textwith\n\rnewlinesand\r\\\$tag$`, `textwith\n\rnewlinesand\r\\\`, false}, + {`$tag$ab$tactac$tx$tag$`, `ab$tactac$tx`, false}, + {`$$abc$$`, `abc`, false}, {`$$abc`, `abc`, true}, {`$$abc$`, `abc`, true}, } { @@ -117,10 +116,7 @@ func TestScanDollarQuotedString(t *testing.T) { } return } - if kind == LexError { - t.Fatalf("Failed to Tokenize %v: %v\n", tt.in, tok.err) - } - assert.Equal(t, tt.out, string(str)) + assert.Equal(t, string(str), tt.out) assert.Equal(t, DollarQuotedString, kind) }) } @@ -133,7 +129,7 @@ func TestScanDollarQuotedString(t *testing.T) { }) t.Run("on", func(t *testing.T) { - tok := NewSQLTokenizer(`$func$ BEGIN INSERT INTO "school" ("id","organization_id","name","created_at","updated_at") VALUES ('dc4e9444-d7c9-40a9-bcef-68e4cc594e61','ec647f56-f27a-49a1-84af-021ad0a19f21','Test','2021-03-31 16:30:43.915 +00:00','2021-03-31 16:30:43.915 +00:00'); created := true; EXCEPTION WHEN unique_violation THEN UPDATE "school" SET "id"='dc4e9444-d7c9-40a9-bcef-68e4cc594e61',"organization_id"='ec647f56-f27a-49a1-84af-021ad0a19f21',"name"='Test',"updated_at"='2021-03-31 16:30:43.915 +00:00' WHERE ("id" = 'dc4e9444-d7c9-40a9-bcef-68e4cc594e61'); created := false; END; $func$`, false, &SQLConfig{ + tok := NewSQLTokenizer("$func$abc$func$", false, &SQLConfig{ DollarQuotedFunc: true, }) kind, _ := tok.Scan() @@ -394,7 +390,7 @@ func TestSQLUTF8(t *testing.T) { }, { "select * from `構わない`;", - "select * from `構わない`", + "select * from 構わない", }, { "select * from names where name like '�����';", @@ -425,7 +421,7 @@ func TestSQLReplaceDigits(t *testing.T) { }{ { "REPLACE INTO sales_2019_07_01 (`itemID`, `date`, `qty`, `price`) VALUES ((SELECT itemID FROM item1001 WHERE `sku` = [sku]), CURDATE(), [qty], 0.00)", - "REPLACE INTO sales_?_?_? ( `itemID`, `date`, `qty`, `price` ) VALUES ( ( SELECT itemID FROM item? WHERE `sku` = [sku] ), CURDATE ( ), [qty], ? )", + "REPLACE INTO sales_?_?_? ( itemID, date, qty, price ) VALUES ( ( SELECT itemID FROM item? WHERE sku = [ sku ] ), CURDATE ( ), [ qty ], ? )", }, { "SELECT ddh19.name, ddt.tags FROM dd91219.host ddh19, dd21916.host_tags ddt WHERE ddh19.id = ddt.host_id AND ddh19.org_id = 2 AND ddh19.name = 'datadog'", @@ -491,7 +487,7 @@ GROUP BY sales1828.product_key`, }{ { "REPLACE INTO sales_2019_07_01 (`itemID`, `date`, `qty`, `price`) VALUES ((SELECT itemID FROM item1001 WHERE `sku` = [sku]), CURDATE(), [qty], 0.00)", - "REPLACE INTO sales_2019_07_01 ( `itemID`, `date`, `qty`, `price` ) VALUES ( ( SELECT itemID FROM item1001 WHERE `sku` = [sku] ), CURDATE ( ), [qty], ? )", + "REPLACE INTO sales_2019_07_01 ( itemID, date, qty, price ) VALUES ( ( SELECT itemID FROM item1001 WHERE sku = [ sku ] ), CURDATE ( ), [ qty ], ? )", }, { "SELECT ddh19.name, ddt.tags FROM dd91219.host ddh19, dd21916.host_tags ddt WHERE ddh19.id = ddt.host_id AND ddh19.org_id = 2 AND ddh19.name = 'datadog'", @@ -563,24 +559,14 @@ func TestSQLTableFinderAndReplaceDigits(t *testing.T) { "select * from users where id = ?", }, { - "select * from `backticks` where id = 42", - "`backticks`", - "select * from `backticks` where id = ?", + "select * from `backslashes` where id = 42", + "backslashes", + "select * from backslashes where id = ?", }, { `select * from "double-quotes" where id = 42`, - `"double-quotes"`, - `select * from "double-quotes" where id = ?`, - }, - { - "select * from `backticks_20` where id = 42", - "`backticks_?`", - "select * from `backticks_?` where id = ?", - }, - { - `select * from "double-quotes-30" where id = 42`, - `"double-quotes-?"`, - `select * from "double-quotes-?" where id = ?`, + "double-quotes", + `select * from double-quotes where id = ?`, }, { "SELECT host, status FROM ec2_status WHERE org_id = 42", @@ -635,7 +621,7 @@ func TestSQLTableFinderAndReplaceDigits(t *testing.T) { { "REPLACE INTO sales_2019_07_01 (`itemID`, `date`, `qty`, `price`) VALUES ((SELECT itemID FROM item1001 WHERE `sku` = [sku]), CURDATE(), [qty], 0.00)", "sales_?_?_?,item?", - "REPLACE INTO sales_?_?_? ( `itemID`, `date`, `qty`, `price` ) VALUES ( ( SELECT itemID FROM item? WHERE `sku` = [sku] ), CURDATE ( ), [qty], ? )", + "REPLACE INTO sales_?_?_? ( itemID, date, qty, price ) VALUES ( ( SELECT itemID FROM item? WHERE sku = [ sku ] ), CURDATE ( ), [ qty ], ? )", }, { "SELECT name FROM people WHERE person_id = -1", @@ -670,12 +656,12 @@ func TestSQLTableFinderAndReplaceDigits(t *testing.T) { { "select * from test where !\"weird_query\"", "test", - "select * from test where ! \"weird_query\"", + "select * from test where ! weird_query", }, { "select * from test where !`weird_query`", "test", - "select * from test where ! `weird_query`", + "select * from test where ! weird_query", }, { "select !- 2", @@ -767,15 +753,15 @@ func TestSQLQuantizer(t *testing.T) { }, { "SELECT * FROM `host` WHERE `id` IN (42, 43) /*comment with parameters,host:localhost,url:controller#home,id:FF005:00CAA*/", - "SELECT * FROM `host` WHERE `id` IN ( ? )", + "SELECT * FROM host WHERE id IN ( ? )", }, { "SELECT `host`.`address` FROM `host` WHERE org_id=42", - "SELECT `host`.`address` FROM `host` WHERE org_id = ?", + "SELECT host . address FROM host WHERE org_id = ?", }, { `SELECT "host"."address" FROM "host" WHERE org_id=42`, - `SELECT "host"."address" FROM "host" WHERE org_id = ?`, + `SELECT host . address FROM host WHERE org_id = ?`, }, { `SELECT * FROM host WHERE id IN (42, 43) /* @@ -793,11 +779,11 @@ func TestSQLQuantizer(t *testing.T) { }, { "SELECT org_id, metric_key FROM metrics_metadata WHERE org_id = %(org_id)s AND metric_key = ANY(array[75])", - "SELECT org_id, metric_key FROM metrics_metadata WHERE org_id = ? AND metric_key = ANY ( array [?] )", + "SELECT org_id, metric_key FROM metrics_metadata WHERE org_id = ? AND metric_key = ANY ( array [ ? ] )", }, { "SELECT org_id, metric_key FROM metrics_metadata WHERE org_id = %(org_id)s AND metric_key = ANY(array[21, 25, 32])", - "SELECT org_id, metric_key FROM metrics_metadata WHERE org_id = ? AND metric_key = ANY ( array [?] )", + "SELECT org_id, metric_key FROM metrics_metadata WHERE org_id = ? AND metric_key = ANY ( array [ ? ] )", }, { "SELECT articles.* FROM articles WHERE articles.id = 1 LIMIT 1", @@ -886,7 +872,7 @@ func TestSQLQuantizer(t *testing.T) { }, { `SELECT "webcore_page"."id" FROM "webcore_page" WHERE "webcore_page"."slug" = %s ORDER BY "webcore_page"."path" ASC LIMIT 1`, - `SELECT "webcore_page"."id" FROM "webcore_page" WHERE "webcore_page"."slug" = ? ORDER BY "webcore_page"."path" ASC LIMIT ?`, + "SELECT webcore_page . id FROM webcore_page WHERE webcore_page . slug = ? ORDER BY webcore_page . path ASC LIMIT ?", }, { "SELECT server_table.host AS host_id FROM table#.host_tags as server_table WHERE server_table.host_id = 50", @@ -910,7 +896,7 @@ func TestSQLQuantizer(t *testing.T) { }, { "SELECT * FROM public.table ( array [ ROW ( array [ 'magic', 'foo',", - "SELECT * FROM public.table ( array [ROW ( array [?", + "SELECT * FROM public.table ( array [ ROW ( array [ ?", }, { "SELECT pg_try_advisory_lock (123) AS t46eef3f025cc27feb31ca5a2d668a09a", @@ -918,7 +904,7 @@ func TestSQLQuantizer(t *testing.T) { }, { "INSERT INTO `qual-aa`.issues (alert0 , alert1) VALUES (NULL, NULL)", - "INSERT INTO `qual-aa`.issues ( alert0, alert1 ) VALUES ( ? )", + "INSERT INTO qual-aa . issues ( alert0, alert1 ) VALUES ( ? )", }, { "INSERT INTO user (id, email, name) VALUES (null, ?, ?)", @@ -959,7 +945,7 @@ func TestSQLQuantizer(t *testing.T) { `SELECT daily_values.*, LEAST((5040000 - @runtot), value) AS value, ` + "(@runtot := @runtot + daily_values.value) AS total FROM (SELECT @runtot:=0) AS n, `daily_values` WHERE `daily_values`.`subject_id` = 12345 AND `daily_values`.`subject_type` = 'Skippity' AND (daily_values.date BETWEEN '2018-05-09' AND '2018-06-19') HAVING value >= 0 ORDER BY date", - "SELECT daily_values.*, LEAST ( ( ? - @runtot ), value ), ( @runtot := @runtot + daily_values.value ) FROM ( SELECT @runtot := ? ), `daily_values` WHERE `daily_values`.`subject_id` = ? AND `daily_values`.`subject_type` = ? AND ( daily_values.date BETWEEN ? AND ? ) HAVING value >= ? ORDER BY date", + `SELECT daily_values.*, LEAST ( ( ? - @runtot ), value ), ( @runtot := @runtot + daily_values.value ) FROM ( SELECT @runtot := ? ), daily_values WHERE daily_values . subject_id = ? AND daily_values . subject_type = ? AND ( daily_values.date BETWEEN ? AND ? ) HAVING value >= ? ORDER BY date`, }, { ` SELECT @@ -992,13 +978,13 @@ func TestSQLQuantizer(t *testing.T) { t1.userid = 'jstein' `, - `SELECT t1.userid, t1.fullname, t1.firm_id, t2.firmname, t1.email, t1.location, t1.state, t1.phone, t1.url, DATE_FORMAT ( t1.lastmod, "%m/%d/%Y %h:%i:%s" ), t1.lastmod, t1.user_status, t1.pw_expire, DATE_FORMAT ( t1.pw_expire, "%m/%d/%Y" ), t1.addr1, t1.addr2, t1.zipcode, t1.office_id, t1.default_group, t3.firm_status, t1.title FROM userdata LEFT JOIN lawfirm_names ON t1.firm_id = t2.firm_id LEFT JOIN lawfirms ON t1.firm_id = t3.firm_id WHERE t1.userid = ?`, + `SELECT t1.userid, t1.fullname, t1.firm_id, t2.firmname, t1.email, t1.location, t1.state, t1.phone, t1.url, DATE_FORMAT ( t1.lastmod, %m/%d/%Y %h:%i:%s ), t1.lastmod, t1.user_status, t1.pw_expire, DATE_FORMAT ( t1.pw_expire, %m/%d/%Y ), t1.addr1, t1.addr2, t1.zipcode, t1.office_id, t1.default_group, t3.firm_status, t1.title FROM userdata LEFT JOIN lawfirm_names ON t1.firm_id = t2.firm_id LEFT JOIN lawfirms ON t1.firm_id = t3.firm_id WHERE t1.userid = ?`, }, { `SELECT [b].[BlogId], [b].[Name] FROM [Blogs] AS [b] ORDER BY [b].[Name]`, - `SELECT [b].[BlogId], [b].[Name] FROM [Blogs] ORDER BY [b].[Name]`, + `SELECT [ b ] . [ BlogId ], [ b ] . [ Name ] FROM [ Blogs ] ORDER BY [ b ] . [ Name ]`, }, { `SELECT * FROM users WHERE firstname=''`, @@ -1054,7 +1040,7 @@ ORDER BY [b].[Name]`, }, { "SELECT org_id,metric_key,metric_type,interval FROM metrics_metadata WHERE org_id = ? AND metric_key = ANY(ARRAY[?,?,?,?,?])", - "SELECT org_id, metric_key, metric_type, interval FROM metrics_metadata WHERE org_id = ? AND metric_key = ANY ( ARRAY [?] )", + "SELECT org_id, metric_key, metric_type, interval FROM metrics_metadata WHERE org_id = ? AND metric_key = ANY ( ARRAY [ ? ] )", }, { `SELECT wp_woocommerce_order_items.order_id As No_Commande @@ -1075,7 +1061,7 @@ ORDER BY [b].[Name]`, }, { "SELECT MIN(`scoped_49a39c4cc9ae4fdda07bcf49e99f8224`.`scoped_8720d2c0e0824ec2910ab9479085839c`) AS `MIN_BECR_DATE_CREATED` FROM (SELECT `49a39c4cc9ae4fdda07bcf49e99f8224`.`submittedOn` AS `scoped_8720d2c0e0824ec2910ab9479085839c`, `49a39c4cc9ae4fdda07bcf49e99f8224`.`domain` AS `scoped_847e4dcfa1c54d72aad6dbeb231c46de`, `49a39c4cc9ae4fdda07bcf49e99f8224`.`eventConsumer` AS `scoped_7b2f7b8da15646d1b75aa03901460eb2`, `49a39c4cc9ae4fdda07bcf49e99f8224`.`eventType` AS `scoped_77a1b9308b384a9391b69d24335ba058` FROM (`SorDesignTime`.`businessEventConsumerRegistry_947a74dad4b64be9847d67f466d26f5e` AS `49a39c4cc9ae4fdda07bcf49e99f8224`) WHERE (`49a39c4cc9ae4fdda07bcf49e99f8224`.`systemData.ClientID`) = ('35c1ccc0-a83c-4812-a189-895e9d4dd223')) AS `scoped_49a39c4cc9ae4fdda07bcf49e99f8224` WHERE ((`scoped_49a39c4cc9ae4fdda07bcf49e99f8224`.`scoped_847e4dcfa1c54d72aad6dbeb231c46de`) = ('Benefits') AND ((`scoped_49a39c4cc9ae4fdda07bcf49e99f8224`.`scoped_7b2f7b8da15646d1b75aa03901460eb2`) = ('benefits') AND (`scoped_49a39c4cc9ae4fdda07bcf49e99f8224`.`scoped_77a1b9308b384a9391b69d24335ba058`) = ('DMXSync'))); ", - "SELECT MIN ( `scoped_49a39c4cc9ae4fdda07bcf49e99f8224`.`scoped_8720d2c0e0824ec2910ab9479085839c` ) FROM ( SELECT `49a39c4cc9ae4fdda07bcf49e99f8224`.`submittedOn`, `49a39c4cc9ae4fdda07bcf49e99f8224`.`domain`, `49a39c4cc9ae4fdda07bcf49e99f8224`.`eventConsumer`, `49a39c4cc9ae4fdda07bcf49e99f8224`.`eventType` FROM ( `SorDesignTime`.`businessEventConsumerRegistry_947a74dad4b64be9847d67f466d26f5e` ) WHERE ( `49a39c4cc9ae4fdda07bcf49e99f8224`.`systemData.ClientID` ) = ( ? ) ) WHERE ( ( `scoped_49a39c4cc9ae4fdda07bcf49e99f8224`.`scoped_847e4dcfa1c54d72aad6dbeb231c46de` ) = ( ? ) AND ( ( `scoped_49a39c4cc9ae4fdda07bcf49e99f8224`.`scoped_7b2f7b8da15646d1b75aa03901460eb2` ) = ( ? ) AND ( `scoped_49a39c4cc9ae4fdda07bcf49e99f8224`.`scoped_77a1b9308b384a9391b69d24335ba058` ) = ( ? ) ) )", + "SELECT MIN ( scoped_49a39c4cc9ae4fdda07bcf49e99f8224 . scoped_8720d2c0e0824ec2910ab9479085839c ) FROM ( SELECT 49a39c4cc9ae4fdda07bcf49e99f8224 . submittedOn, 49a39c4cc9ae4fdda07bcf49e99f8224 . domain, 49a39c4cc9ae4fdda07bcf49e99f8224 . eventConsumer, 49a39c4cc9ae4fdda07bcf49e99f8224 . eventType FROM ( SorDesignTime . businessEventConsumerRegistry_947a74dad4b64be9847d67f466d26f5e ) WHERE ( 49a39c4cc9ae4fdda07bcf49e99f8224 . systemData.ClientID ) = ( ? ) ) WHERE ( ( scoped_49a39c4cc9ae4fdda07bcf49e99f8224 . scoped_847e4dcfa1c54d72aad6dbeb231c46de ) = ( ? ) AND ( ( scoped_49a39c4cc9ae4fdda07bcf49e99f8224 . scoped_7b2f7b8da15646d1b75aa03901460eb2 ) = ( ? ) AND ( scoped_49a39c4cc9ae4fdda07bcf49e99f8224 . scoped_77a1b9308b384a9391b69d24335ba058 ) = ( ? ) ) )", }, { "{call px_cu_se_security_pg.sps_get_my_accounts_count(?, ?, ?, ?)}", @@ -1248,11 +1234,11 @@ func TestPGJSONOperators(t *testing.T) { }, { "select * from users where user.custom ?| array [ '1', '2' ]", - "select * from users where user.custom ?| array [?]", + "select * from users where user.custom ?| array [ ? ]", }, { "select * from users where user.custom ?& array [ '1', '2' ]", - "select * from users where user.custom ?& array [?]", + "select * from users where user.custom ?& array [ ? ]", }, } { t.Run("", func(t *testing.T) { @@ -1271,11 +1257,13 @@ func TestObfuscatorDBMSBehavior(t *testing.T) { assert := assert.New(t) for _, tt := range []struct { in, out string + tables string cfg SQLConfig }{ { "select * from ##ThisIsAGlobalTempTable where id = 1", "select * from ##ThisIsAGlobalTempTable where id = ?", + "", SQLConfig{ DBMS: DBMSSQLServer, }, @@ -1283,15 +1271,26 @@ func TestObfuscatorDBMSBehavior(t *testing.T) { { "select * from dbo.#ThisIsATempTable where id = 1", "select * from dbo.#ThisIsATempTable where id = ?", + "", SQLConfig{ DBMS: DBMSSQLServer, }, }, + { + "SELECT * from [db_users] where [id] = @1", + "SELECT * from db_users where id = @1", + "db_users", + SQLConfig{ + DBMS: DBMSSQLServer, + TableNames: true, + }, + }, } { t.Run(tt.cfg.DBMS, func(t *testing.T) { oq, err := NewObfuscator(Config{SQL: tt.cfg}).ObfuscateSQLString(tt.in) assert.NoError(err) assert.Equal(tt.out, oq.Query) + assert.Equal(tt.tables, oq.Metadata.TablesCSV) }) } } @@ -1300,109 +1299,109 @@ func TestSQLTokenizerIgnoreEscapeFalse(t *testing.T) { cases := []sqlTokenizerTestCase{ { `'Simple string'`, - "'Simple string'", + "Simple string", String, }, { `'String with backslash at end \'`, - "'String with backslash at end \\'", + "String with backslash at end '", LexError, }, { `'String with backslash \ in the middle'`, - "'String with backslash \\ in the middle'", + "String with backslash in the middle", String, }, { `'String with double-backslash at end \\'`, - "'String with double-backslash at end \\\\'", + "String with double-backslash at end \\", String, }, { `'String with double-backslash \\ in the middle'`, - "'String with double-backslash \\\\ in the middle'", + "String with double-backslash \\ in the middle", String, }, { `'String with backslash-escaped quote at end \''`, - "'String with backslash-escaped quote at end \\''", + "String with backslash-escaped quote at end '", String, }, { `'String with backslash-escaped quote \' in middle'`, - "'String with backslash-escaped quote \\' in middle'", + "String with backslash-escaped quote ' in middle", String, }, { `'String with backslash-escaped embedded string \'foo\' in the middle'`, - "'String with backslash-escaped embedded string \\'foo\\' in the middle'", + "String with backslash-escaped embedded string 'foo' in the middle", String, }, { `'String with backslash-escaped embedded string at end \'foo\''`, - "'String with backslash-escaped embedded string at end \\'foo\\''", + "String with backslash-escaped embedded string at end 'foo'", String, }, { `'String with double-backslash-escaped embedded string at the end \\'foo\\''`, - "'String with double-backslash-escaped embedded string at the end \\\\'", + "String with double-backslash-escaped embedded string at the end \\", String, }, { `'String with double-backslash-escaped embedded string \\'foo\\' in the middle'`, - "'String with double-backslash-escaped embedded string \\\\'", + "String with double-backslash-escaped embedded string \\", String, }, { `'String with backslash-escaped embedded string \'foo\' in the middle followed by one at the end \'`, - "'String with backslash-escaped embedded string \\'foo\\' in the middle followed by one at the end \\'", + "String with backslash-escaped embedded string 'foo' in the middle followed by one at the end '", LexError, }, { `'String with embedded string at end ''foo'''`, - "'String with embedded string at end ''foo'''", + "String with embedded string at end 'foo'", String, }, { `'String with embedded string ''foo'' in the middle'`, - "'String with embedded string ''foo'' in the middle'", + "String with embedded string 'foo' in the middle", String, }, { `'String with tab at end '`, - "'String with tab at end\t'", + "String with tab at end\t", String, }, { `'String with tab in the middle'`, - "'String with tab\tin the middle'", + "String with tab\tin the middle", String, }, { `'String with newline at the end '`, - "'String with newline at the end\n'", + "String with newline at the end\n", String, }, { `'String with newline in the middle'`, - "'String with newline\nin the middle'", + "String with newline\nin the middle", String, }, { `'Simple string missing closing quote`, - "'Simple string missing closing quote", + "Simple string missing closing quote", LexError, }, { `'String missing closing quote with backslash at end \`, - "'String missing closing quote with backslash at end \\", + "String missing closing quote with backslash at end ", LexError, }, { `'String with backslash \ in the middle missing closing quote`, - "'String with backslash \\ in the middle missing closing quote", + "String with backslash in the middle missing closing quote", LexError, }, { @@ -1413,7 +1412,7 @@ in the middle'`, // The following case will treat the final quote as unescaped { `'String missing closing quote with backslash-escaped quote at end \'`, - "'String missing closing quote with backslash-escaped quote at end \\'", + "String missing closing quote with backslash-escaped quote at end '", LexError, }, } @@ -1432,117 +1431,117 @@ func TestSQLTokenizerIgnoreEscapeTrue(t *testing.T) { cases := []sqlTokenizerTestCase{ { `'Simple string'`, - "'Simple string'", + "Simple string", String, }, { `'String with backslash at end \'`, - "'String with backslash at end \\'", + "String with backslash at end \\", String, }, { `'String with backslash \ in the middle'`, - "'String with backslash \\ in the middle'", + "String with backslash \\ in the middle", String, }, { `'String with double-backslash at end \\'`, - "'String with double-backslash at end \\\\'", + "String with double-backslash at end \\\\", String, }, { `'String with double-backslash \\ in the middle'`, - "'String with double-backslash \\\\ in the middle'", + "String with double-backslash \\\\ in the middle", String, }, // The following case will treat backslash as literal and double single quote as a single quote // thus missing the final single quote { - `'String with backslash followed by double-delimiter \''`, - "'String with backslash followed by double-delimiter \\''", + `'String with backslash-escaped quote at end \''`, + "String with backslash-escaped quote at end \\'", LexError, }, { `'String with backslash-escaped quote \' in middle'`, - "'String with backslash-escaped quote \\'", + "String with backslash-escaped quote \\", String, }, { `'String with backslash-escaped embedded string at the end \'foo\''`, - "'String with backslash-escaped embedded string at the end \\'", + "String with backslash-escaped embedded string at the end \\", String, }, { `'String with backslash-escaped embedded string \'foo\' in the middle'`, - "'String with backslash-escaped embedded string \\'", + "String with backslash-escaped embedded string \\", String, }, { `'String with double-backslash-escaped embedded string at end \\'foo\\''`, - "'String with double-backslash-escaped embedded string at end \\\\'", + "String with double-backslash-escaped embedded string at end \\\\", String, }, { `'String with double-backslash-escaped embedded string \\'foo\\' in the middle'`, - "'String with double-backslash-escaped embedded string \\\\'", + "String with double-backslash-escaped embedded string \\\\", String, }, { `'String with backslash-escaped embedded string \'foo\' in the middle followed by one at the end \'`, - "'String with backslash-escaped embedded string \\'", + "String with backslash-escaped embedded string \\", String, }, { `'String with embedded string at end ''foo'''`, - "'String with embedded string at end ''foo'''", + "String with embedded string at end 'foo'", String, }, { `'String with embedded string ''foo'' in the middle'`, - "'String with embedded string ''foo'' in the middle'", + "String with embedded string 'foo' in the middle", String, }, { `'String with tab at end '`, - "'String with tab at end\t'", + "String with tab at end\t", String, }, { `'String with tab in the middle'`, - "'String with tab\tin the middle'", + "String with tab\tin the middle", String, }, { `'String with newline at the end '`, - "'String with newline at the end\n'", + "String with newline at the end\n", String, }, { `'String with newline in the middle'`, - "'String with newline\nin the middle'", + "String with newline\nin the middle", String, }, { `'Simple string missing closing quote`, - `'Simple string missing closing quote`, + "Simple string missing closing quote", LexError, }, { `'String missing closing quote with backslash at end \`, - `'String missing closing quote with backslash at end \`, + "String missing closing quote with backslash at end \\", LexError, }, { `'String with backslash \ in the middle missing closing quote`, - `'String with backslash \ in the middle missing closing quote`, + "String with backslash \\ in the middle missing closing quote", LexError, }, // The following case will treat the final quote as unescaped { `'String missing closing quote with backslash-escaped quote at end \'`, - `'String missing closing quote with backslash-escaped quote at end \'`, + "String missing closing quote with backslash-escaped quote at end \\", String, }, } @@ -1945,9 +1944,8 @@ func TestCassQuantizer(t *testing.T) { "SELECT timestamp, processes FROM process_snapshot.minutely WHERE org_id = ? AND host = ? AND timestamp >= ? AND timestamp <= ?", }, { - `SELECT count(*) AS totcount FROM (SELECT "c1", "c2","c3","c4","c5","c6","c7","c8", "c9", "c10","c11","c12","c13","c14", "c15","c16","c17","c18", "c19","c20","c21","c22","c23", "c24","c25","c26", "c27" FROM (SELECT bar.y AS "c2", foo.x AS "c3", foo.z AS "c4", DECODE(foo.a, NULL,NULL, foo.a ||?|| foo.b) AS "c5" , foo.c AS "c6", bar.d AS "c1", bar.e AS "c7", bar.f AS "c8", bar.g AS "c9", TO_DATE(TO_CHAR(TO_DATE(bar.h,?),?),?) AS "c10", TO_DATE(TO_CHAR(TO_DATE(bar.i,?),?),?) AS "c11", CASE WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? ELSE NULL END AS "c12", DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?)),NULL) as "c13", bar.k AS "c14", bar.l ||?||bar.m AS "c15", DECODE(bar.n, NULL, NULL,bar.n ||?||bar.o) AS "c16", bar.p AS "c17", bar.q AS "c18", bar.r AS "c19", bar.s AS "c20", qux.a AS "c21", TO_CHAR(TO_DATE(qux.b,?),?) AS "c22", DECODE(qux.l,NULL,NULL, qux.l ||?||qux.m) AS "c23", bar.a AS "c24", TO_CHAR(TO_DATE(bar.j,?),?) AS "c25", DECODE(bar.c , ?,?,?, ?, bar.c ) AS "c26", bar.y AS y, bar.d, bar.d AS "c27" FROM blort.bar , ( SELECT * FROM (SELECT a,a,l,m,b,c, RANK() OVER (PARTITION BY c ORDER BY b DESC) RNK FROM blort.d WHERE y IN (:p)) WHERE RNK = ?) qux, blort.foo WHERE bar.c = qux.c(+) AND bar.x = foo.x AND bar.y IN (:p) and bar.x IN (:x)) ) -SELECT count(*) AS totcount FROM (SELECT "c1", "c2","c3","c4","c5","c6","c7","c8", "c9", "c10","c11","c12","c13","c14", "c15","c16","c17","c18", "c19","c20","c21","c22","c23", "c24","c25","c26", "c27" FROM (SELECT bar.y AS "c2", foo.x AS "c3", foo.z AS "c4", DECODE(foo.a, NULL,NULL, foo.a ||?|| foo.b) AS "c5" , foo.c AS "c6", bar.d AS "c1", bar.e AS "c7", bar.f AS "c8", bar.g AS "c9", TO_DATE(TO_CHAR(TO_DATE(bar.h,?),?),?) AS "c10", TO_DATE(TO_CHAR(TO_DATE(bar.i,?),?),?) AS "c11", CASE WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? ELSE NULL END AS "c12", DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?)),NULL) as "c13", bar.k AS "c14", bar.l ||?||bar.m AS "c15", DECODE(bar.n, NULL, NULL,bar.n ||?||bar.o) AS "c16", bar.p AS "c17", bar.q AS "c18", bar.r AS "c19", bar.s AS "c20", qux.a AS "c21", TO_CHAR(TO_DATE(qux.b,?),?) AS "c22", DECODE(qux.l,NULL,NULL, qux.l ||?||qux.m) AS "c23", bar.a AS "c24", TO_CHAR(TO_DATE(bar.j,?),?) AS "c25", DECODE(bar.c , ?,?,?, ?, bar.c ) AS "c26", bar.y AS y, bar.d, bar.d AS "c27" FROM blort.bar , ( SELECT * FROM (SELECT a,a,l,m,b,c, RANK() OVER (PARTITION BY c ORDER BY b DESC) RNK FROM blort.d WHERE y IN (:p)) WHERE RNK = ?) qux, blort.foo WHERE bar.c = qux.c(+) AND bar.x = foo.x AND bar.y IN (:p) and bar.x IN (:x)) )`, - `SELECT count ( * ) FROM ( SELECT "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "c10", "c11", "c12", "c13", "c14", "c15", "c16", "c17", "c18", "c19", "c20", "c21", "c22", "c23", "c24", "c25", "c26", "c27" FROM ( SELECT bar.y, foo.x, foo.z, DECODE ( foo.a, ? foo.a | | ? | | foo.b ), foo.c, bar.d, bar.e, bar.f, bar.g, TO_DATE ( TO_CHAR ( TO_DATE ( bar.h, ? ) ) ), TO_DATE ( TO_CHAR ( TO_DATE ( bar.i, ? ) ) ), CASE WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? ELSE ? END, DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ), bar.k, bar.l | | ? | | bar.m, DECODE ( bar.n, ? bar.n | | ? | | bar.o ), bar.p, bar.q, bar.r, bar.s, qux.a, TO_CHAR ( TO_DATE ( qux.b, ? ) ), DECODE ( qux.l, ? qux.l | | ? | | qux.m ), bar.a, TO_CHAR ( TO_DATE ( bar.j, ? ) ), DECODE ( bar.c, ? bar.c ), bar.y, bar.d, bar.d FROM blort.bar, ( SELECT * FROM ( SELECT a, a, l, m, b, c, RANK ( ) OVER ( PARTITION BY c ORDER BY b DESC ) RNK FROM blort.d WHERE y IN ( :p ) ) WHERE RNK = ? ) qux, blort.foo WHERE bar.c = qux.c ( + ) AND bar.x = foo.x AND bar.y IN ( :p ) and bar.x IN ( :x ) ) ) SELECT count ( * ) FROM ( SELECT "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "c10", "c11", "c12", "c13", "c14", "c15", "c16", "c17", "c18", "c19", "c20", "c21", "c22", "c23", "c24", "c25", "c26", "c27" FROM ( SELECT bar.y, foo.x, foo.z, DECODE ( foo.a, ? foo.a | | ? | | foo.b ), foo.c, bar.d, bar.e, bar.f, bar.g, TO_DATE ( TO_CHAR ( TO_DATE ( bar.h, ? ) ) ), TO_DATE ( TO_CHAR ( TO_DATE ( bar.i, ? ) ) ), CASE WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? ELSE ? END, DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ), bar.k, bar.l | | ? | | bar.m, DECODE ( bar.n, ? bar.n | | ? | | bar.o ), bar.p, bar.q, bar.r, bar.s, qux.a, TO_CHAR ( TO_DATE ( qux.b, ? ) ), DECODE ( qux.l, ? qux.l | | ? | | qux.m ), bar.a, TO_CHAR ( TO_DATE ( bar.j, ? ) ), DECODE ( bar.c, ? bar.c ), bar.y, bar.d, bar.d FROM blort.bar, ( SELECT * FROM ( SELECT a, a, l, m, b, c, RANK ( ) OVER ( PARTITION BY c ORDER BY b DESC ) RNK FROM blort.d WHERE y IN ( :p ) ) WHERE RNK = ? ) qux, blort.foo WHERE bar.c = qux.c ( + ) AND bar.x = foo.x AND bar.y IN ( :p ) and bar.x IN ( :x ) ) )`, + "SELECT count(*) AS totcount FROM (SELECT \"c1\", \"c2\",\"c3\",\"c4\",\"c5\",\"c6\",\"c7\",\"c8\", \"c9\", \"c10\",\"c11\",\"c12\",\"c13\",\"c14\", \"c15\",\"c16\",\"c17\",\"c18\", \"c19\",\"c20\",\"c21\",\"c22\",\"c23\", \"c24\",\"c25\",\"c26\", \"c27\" FROM (SELECT bar.y AS \"c2\", foo.x AS \"c3\", foo.z AS \"c4\", DECODE(foo.a, NULL,NULL, foo.a ||?|| foo.b) AS \"c5\" , foo.c AS \"c6\", bar.d AS \"c1\", bar.e AS \"c7\", bar.f AS \"c8\", bar.g AS \"c9\", TO_DATE(TO_CHAR(TO_DATE(bar.h,?),?),?) AS \"c10\", TO_DATE(TO_CHAR(TO_DATE(bar.i,?),?),?) AS \"c11\", CASE WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? ELSE NULL END AS \"c12\", DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?)),NULL) as \"c13\", bar.k AS \"c14\", bar.l ||?||bar.m AS \"c15\", DECODE(bar.n, NULL, NULL,bar.n ||?||bar.o) AS \"c16\", bar.p AS \"c17\", bar.q AS \"c18\", bar.r AS \"c19\", bar.s AS \"c20\", qux.a AS \"c21\", TO_CHAR(TO_DATE(qux.b,?),?) AS \"c22\", DECODE(qux.l,NULL,NULL, qux.l ||?||qux.m) AS \"c23\", bar.a AS \"c24\", TO_CHAR(TO_DATE(bar.j,?),?) AS \"c25\", DECODE(bar.c , ?,?,?, ?, bar.c ) AS \"c26\", bar.y AS y, bar.d, bar.d AS \"c27\" FROM blort.bar , ( SELECT * FROM (SELECT a,a,l,m,b,c, RANK() OVER (PARTITION BY c ORDER BY b DESC) RNK FROM blort.d WHERE y IN (:p)) WHERE RNK = ?) qux, blort.foo WHERE bar.c = qux.c(+) AND bar.x = foo.x AND bar.y IN (:p) and bar.x IN (:x)) )\nSELECT count(*) AS totcount FROM (SELECT \"c1\", \"c2\",\"c3\",\"c4\",\"c5\",\"c6\",\"c7\",\"c8\", \"c9\", \"c10\",\"c11\",\"c12\",\"c13\",\"c14\", \"c15\",\"c16\",\"c17\",\"c18\", \"c19\",\"c20\",\"c21\",\"c22\",\"c23\", \"c24\",\"c25\",\"c26\", \"c27\" FROM (SELECT bar.y AS \"c2\", foo.x AS \"c3\", foo.z AS \"c4\", DECODE(foo.a, NULL,NULL, foo.a ||?|| foo.b) AS \"c5\" , foo.c AS \"c6\", bar.d AS \"c1\", bar.e AS \"c7\", bar.f AS \"c8\", bar.g AS \"c9\", TO_DATE(TO_CHAR(TO_DATE(bar.h,?),?),?) AS \"c10\", TO_DATE(TO_CHAR(TO_DATE(bar.i,?),?),?) AS \"c11\", CASE WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? WHEN DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?))) > ? THEN ? ELSE NULL END AS \"c12\", DECODE(bar.j, NULL, TRUNC(SYSDATE) - TRUNC(TO_DATE(bar.h,?)),NULL) as \"c13\", bar.k AS \"c14\", bar.l ||?||bar.m AS \"c15\", DECODE(bar.n, NULL, NULL,bar.n ||?||bar.o) AS \"c16\", bar.p AS \"c17\", bar.q AS \"c18\", bar.r AS \"c19\", bar.s AS \"c20\", qux.a AS \"c21\", TO_CHAR(TO_DATE(qux.b,?),?) AS \"c22\", DECODE(qux.l,NULL,NULL, qux.l ||?||qux.m) AS \"c23\", bar.a AS \"c24\", TO_CHAR(TO_DATE(bar.j,?),?) AS \"c25\", DECODE(bar.c , ?,?,?, ?, bar.c ) AS \"c26\", bar.y AS y, bar.d, bar.d AS \"c27\" FROM blort.bar , ( SELECT * FROM (SELECT a,a,l,m,b,c, RANK() OVER (PARTITION BY c ORDER BY b DESC) RNK FROM blort.d WHERE y IN (:p)) WHERE RNK = ?) qux, blort.foo WHERE bar.c = qux.c(+) AND bar.x = foo.x AND bar.y IN (:p) and bar.x IN (:x)) )", + "SELECT count ( * ) FROM ( SELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27 FROM ( SELECT bar.y, foo.x, foo.z, DECODE ( foo.a, ? foo.a | | ? | | foo.b ), foo.c, bar.d, bar.e, bar.f, bar.g, TO_DATE ( TO_CHAR ( TO_DATE ( bar.h, ? ) ) ), TO_DATE ( TO_CHAR ( TO_DATE ( bar.i, ? ) ) ), CASE WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? ELSE ? END, DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ), bar.k, bar.l | | ? | | bar.m, DECODE ( bar.n, ? bar.n | | ? | | bar.o ), bar.p, bar.q, bar.r, bar.s, qux.a, TO_CHAR ( TO_DATE ( qux.b, ? ) ), DECODE ( qux.l, ? qux.l | | ? | | qux.m ), bar.a, TO_CHAR ( TO_DATE ( bar.j, ? ) ), DECODE ( bar.c, ? bar.c ), bar.y, bar.d, bar.d FROM blort.bar, ( SELECT * FROM ( SELECT a, a, l, m, b, c, RANK ( ) OVER ( PARTITION BY c ORDER BY b DESC ) RNK FROM blort.d WHERE y IN ( :p ) ) WHERE RNK = ? ) qux, blort.foo WHERE bar.c = qux.c ( + ) AND bar.x = foo.x AND bar.y IN ( :p ) and bar.x IN ( :x ) ) ) SELECT count ( * ) FROM ( SELECT c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c16, c17, c18, c19, c20, c21, c22, c23, c24, c25, c26, c27 FROM ( SELECT bar.y, foo.x, foo.z, DECODE ( foo.a, ? foo.a | | ? | | foo.b ), foo.c, bar.d, bar.e, bar.f, bar.g, TO_DATE ( TO_CHAR ( TO_DATE ( bar.h, ? ) ) ), TO_DATE ( TO_CHAR ( TO_DATE ( bar.i, ? ) ) ), CASE WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? WHEN DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ) > ? THEN ? ELSE ? END, DECODE ( bar.j, ? TRUNC ( SYSDATE ) - TRUNC ( TO_DATE ( bar.h, ? ) ) ), bar.k, bar.l | | ? | | bar.m, DECODE ( bar.n, ? bar.n | | ? | | bar.o ), bar.p, bar.q, bar.r, bar.s, qux.a, TO_CHAR ( TO_DATE ( qux.b, ? ) ), DECODE ( qux.l, ? qux.l | | ? | | qux.m ), bar.a, TO_CHAR ( TO_DATE ( bar.j, ? ) ), DECODE ( bar.c, ? bar.c ), bar.y, bar.d, bar.d FROM blort.bar, ( SELECT * FROM ( SELECT a, a, l, m, b, c, RANK ( ) OVER ( PARTITION BY c ORDER BY b DESC ) RNK FROM blort.d WHERE y IN ( :p ) ) WHERE RNK = ? ) qux, blort.foo WHERE bar.c = qux.c ( + ) AND bar.x = foo.x AND bar.y IN ( :p ) and bar.x IN ( :x ) ) )", }, } diff --git a/pkg/obfuscate/sql_tokenizer.go b/pkg/obfuscate/sql_tokenizer.go index 14c09abcce2bb..f9c1e39bc2bcc 100644 --- a/pkg/obfuscate/sql_tokenizer.go +++ b/pkg/obfuscate/sql_tokenizer.go @@ -41,7 +41,7 @@ const ( String DoubleQuotedString DollarQuotedString // https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-DOLLAR-QUOTING - DollarQuotedFunc // a dollar-quoted string delimited by the tag "$func$" (funcTag); gets special treatment when feature "dollar_quoted_func" is set + DollarQuotedFunc // a dollar-quoted string delimited by the tag "$func$"; gets special treatment when feature "dollar_quoted_func" is set Number BooleanLiteral ValueArg @@ -108,10 +108,6 @@ const ( FilteredBracketedIdentifier ) -// funcTag is a tag that delimits the start and end of an inline SQL function. A string delimited -// with this tag will be of type DollarQuotedFunc rather than DollarQuotedString. -const funcTag = "$func$" - var tokenKindStrings = map[TokenKind]string{ LexError: "LexError", ID: "ID", @@ -327,7 +323,12 @@ func (tkn *SQLTokenizer) Scan() (TokenKind, []byte) { } } fallthrough - case '=', ',', ';', '(', ')', '+', '*', '&', '|', '^', '[', ']': + case '=', ',', ';', '(', ')', '+', '*', '&', '|', '^', ']': + return TokenKind(ch), tkn.bytes() + case '[': + if tkn.cfg.DBMS == DBMSSQLServer { + return tkn.scanString(']', DoubleQuotedString) + } return TokenKind(ch), tkn.bytes() case '.': if isDigit(tkn.lastChar) { @@ -477,15 +478,13 @@ func (tkn *SQLTokenizer) Scan() (TokenKind, []byte) { kind, tok := tkn.scanDollarQuotedString() if kind == DollarQuotedFunc { // this is considered an embedded query, we should try and - // obfuscate it; temporarily remove the funcTag so we can - // obfuscate the query before replacing the tag below. - tok = tok[len(funcTag) : len(tok)-len(funcTag)] + // obfuscate it out, err := attemptObfuscation(NewSQLTokenizer(string(tok), tkn.literalEscapes, tkn.cfg)) if err != nil { // if we can't obfuscate it, treat it as a regular string return DollarQuotedString, tok } - tok = append(append([]byte(funcTag), []byte(out.Query)...), []byte(funcTag)...) + tok = append(append([]byte("$func$"), []byte(out.Query)...), []byte("$func$")...) } return kind, tok case '@': @@ -624,7 +623,12 @@ func (tkn *SQLTokenizer) scanDollarQuotedString() (TokenKind, []byte) { buf bytes.Buffer ) delim := tag - buf.Write(delim) + // on empty strings, tkn.scanString returns the delimiters + if string(delim) != "$$" { + // on non-empty strings, the delimiter is $tag$ + delim = append([]byte{'$'}, delim...) + delim = append(delim, '$') + } for { ch := tkn.lastChar tkn.advance() @@ -649,8 +653,7 @@ func (tkn *SQLTokenizer) scanDollarQuotedString() (TokenKind, []byte) { } buf.WriteRune(ch) } - buf.Write(delim) - if tkn.cfg.DollarQuotedFunc && string(delim) == funcTag { + if tkn.cfg.DollarQuotedFunc && string(delim) == "$func$" { return DollarQuotedFunc, buf.Bytes() } return DollarQuotedString, buf.Bytes() @@ -766,14 +769,12 @@ exit: func (tkn *SQLTokenizer) scanString(delim rune, kind TokenKind) (TokenKind, []byte) { buf := bytes.NewBuffer(tkn.buf[:0]) - buf.WriteRune(delim) for { ch := tkn.lastChar tkn.advance() if ch == delim { - if tkn.lastChar == delim && delim != '$' { + if tkn.lastChar == delim { // doubling a delimiter is the default way to embed the delimiter within a string - buf.WriteRune(ch) tkn.advance() } else { // a single delimiter denotes the end of the string @@ -784,7 +785,6 @@ func (tkn *SQLTokenizer) scanString(delim rune, kind TokenKind) (TokenKind, []by if !tkn.literalEscapes { // treat as an escape character - buf.WriteRune(ch) ch = tkn.lastChar tkn.advance() } @@ -795,7 +795,13 @@ func (tkn *SQLTokenizer) scanString(delim rune, kind TokenKind) (TokenKind, []by } buf.WriteRune(ch) } - buf.WriteRune(delim) + if kind == ID && buf.Len() == 0 || bytes.IndexFunc(buf.Bytes(), func(r rune) bool { return !unicode.IsSpace(r) }) == -1 { + // This string is an empty or white-space only identifier. + // We should keep the start and end delimiters in order to + // avoid creating invalid queries. + // See: https://github.com/DataDog/datadog-trace-agent/issues/316 + return kind, append(runeBytes(delim), runeBytes(delim)...) + } return kind, buf.Bytes() } @@ -893,6 +899,13 @@ func digitVal(ch rune) int { func isDigit(ch rune) bool { return '0' <= ch && ch <= '9' } +// runeBytes converts the given rune to a slice of bytes. +func runeBytes(r rune) []byte { + buf := make([]byte, utf8.UTFMax) + n := utf8.EncodeRune(buf, r) + return buf[:n] +} + // isValidCharAfterOperator returns true if c is a valid character after an operator func isValidCharAfterOperator(c rune) bool { return c == '(' || c == '`' || c == '\'' || c == '"' || c == '+' || c == '-' || unicode.IsSpace(c) || isLetter(c) || isDigit(c) diff --git a/pkg/obfuscate/testdata/json_tests.xml b/pkg/obfuscate/testdata/json_tests.xml index b6b7429b4c71d..f3e34d4072e9a 100644 --- a/pkg/obfuscate/testdata/json_tests.xml +++ b/pkg/obfuscate/testdata/json_tests.xml @@ -608,7 +608,7 @@ "id", "c" ], - "attached_condition": "( `sbtest`.`sbtest1`.`id` between ? and ? )" + "attached_condition": "( sbtest . sbtest1 . id between ? and ? )" } } } diff --git a/pkg/orchestrator/config/config_test.go b/pkg/orchestrator/config/config_test.go index 0f581721f5811..a37e590116197 100644 --- a/pkg/orchestrator/config/config_test.go +++ b/pkg/orchestrator/config/config_test.go @@ -122,7 +122,7 @@ func (suite *YamlConfigTestSuite) TestExtractOrchestratorEndpointsPrecedence() { } func (suite *YamlConfigTestSuite) TestEnvConfigDDURL() { - ddOrchestratorURL := "DD_ORCHESTRATOR_EXPLORER_ORCHESTRATOR_DD_URL" + ddOrchestratorURL := "DD_ORCHESTRATOR_URL" expectedValue := "123.datadoghq.com" suite.T().Setenv(ddOrchestratorURL, expectedValue) @@ -131,6 +131,50 @@ func (suite *YamlConfigTestSuite) TestEnvConfigDDURL() { suite.NoError(err) suite.Equal(expectedValue, orchestratorCfg.OrchestratorEndpoints[0].Endpoint.Path) + + // Override to make sure the precedence + ddOrchestratorURL = "DD_ORCHESTRATOR_EXPLORER_ORCHESTRATOR_DD_URL" + expectedValue = "456.datadoghq.com" + suite.T().Setenv(ddOrchestratorURL, expectedValue) + err = orchestratorCfg.Load() + suite.NoError(err) + + suite.Equal(expectedValue, orchestratorCfg.OrchestratorEndpoints[0].Endpoint.Path) +} + +func (suite *YamlConfigTestSuite) TestEnvConfigAdditionalEndpoints() { + suite.T().Setenv("DD_ORCHESTRATOR_ADDITIONAL_ENDPOINTS", `{"https://process1.com": ["key1"], "https://process2.com": ["key2"]}`) + + expected := map[string]string{ + "key1": "process1.com", + "key2": "process2.com", + } + + actualEndpoints := []apicfg.Endpoint{} + err := extractOrchestratorAdditionalEndpoints(&url.URL{}, &actualEndpoints) + suite.NoError(err) + + suite.Len(actualEndpoints, len(expected)) + for _, actual := range actualEndpoints { + suite.Equal(expected[actual.APIKey], actual.Endpoint.Hostname()) + } + + // Override to make sure the precedence + suite.T().Setenv("DD_ORCHESTRATOR_EXPLORER_ORCHESTRATOR_ADDITIONAL_ENDPOINTS", `{"https://orchestrator1.com": ["key1"], "https://orchestrator2.com": ["key2", "key3"]}`) + + expected = map[string]string{ + "key1": "orchestrator1.com", + "key2": "orchestrator2.com", + "key3": "orchestrator2.com", + } + + actualEndpoints = []apicfg.Endpoint{} + err = extractOrchestratorAdditionalEndpoints(&url.URL{}, &actualEndpoints) + suite.NoError(err) + suite.Len(actualEndpoints, len(expected)) + for _, actual := range actualEndpoints { + suite.Equal(expected[actual.APIKey], actual.Endpoint.Hostname()) + } } func (suite *YamlConfigTestSuite) TestEnvConfigMessageSize() { diff --git a/pkg/orchestrator/redact/data_scrubber_test.go b/pkg/orchestrator/redact/data_scrubber_test.go index 9bff46937470f..bb750e4d81e0a 100644 --- a/pkg/orchestrator/redact/data_scrubber_test.go +++ b/pkg/orchestrator/redact/data_scrubber_test.go @@ -24,6 +24,7 @@ func BenchmarkRegexMatchingCustom1000(b *testing.B) { benchmarkMatchingCustomReg // https://dave.cheney.net/2013/06/30/how-to-write-benchmarks-in-go // store the result to a package level variable // so the compiler cannot eliminate the Benchmark itself. +// //goland:noinspection ALL var avoidOptimization bool diff --git a/pkg/orchestrator/util.go b/pkg/orchestrator/util.go index 79b73bbcf841f..b723ec7376c07 100644 --- a/pkg/orchestrator/util.go +++ b/pkg/orchestrator/util.go @@ -62,6 +62,8 @@ const ( K8sCRD // K8sCR represents a Kubernetes CR K8sCR + // K8sVerticalPodAutoscaler represents a Kubernetes VerticalPod Autoscaler + K8sVerticalPodAutoscaler ) // NodeTypes returns the current existing NodesTypes as a slice to iterate over. @@ -88,6 +90,7 @@ func NodeTypes() []NodeType { K8sNamespace, K8sCR, K8sCRD, + K8sVerticalPodAutoscaler, } } @@ -135,6 +138,8 @@ func (n NodeType) String() string { return "CustomResourceDefinition" case K8sCR: return "CustomResource" + case K8sVerticalPodAutoscaler: + return "VerticalPodAutoscaler" case K8sUnsetType: return "UnsetType" default: @@ -167,6 +172,7 @@ func (n NodeType) Orchestrator() string { K8sCRD, K8sCR, K8sNamespace, + K8sVerticalPodAutoscaler, K8sUnsetType: return "k8s" default: diff --git a/pkg/otlp/collector.go b/pkg/otlp/collector.go index 6025abb43be5a..4b6e72c2a810b 100644 --- a/pkg/otlp/collector.go +++ b/pkg/otlp/collector.go @@ -13,11 +13,15 @@ import ( "fmt" "go.opentelemetry.io/collector/component" + "go.opentelemetry.io/collector/exporter" "go.opentelemetry.io/collector/exporter/loggingexporter" "go.opentelemetry.io/collector/exporter/otlpexporter" + "go.opentelemetry.io/collector/extension" + "go.opentelemetry.io/collector/otelcol" + "go.opentelemetry.io/collector/processor" "go.opentelemetry.io/collector/processor/batchprocessor" + "go.opentelemetry.io/collector/receiver" "go.opentelemetry.io/collector/receiver/otlpreceiver" - "go.opentelemetry.io/collector/service" "go.uber.org/atomic" "go.uber.org/multierr" "go.uber.org/zap" @@ -37,24 +41,24 @@ var ( ) func getComponents(s serializer.MetricSerializer) ( - component.Factories, + otelcol.Factories, error, ) { var errs []error - extensions, err := component.MakeExtensionFactoryMap() + extensions, err := extension.MakeFactoryMap() if err != nil { errs = append(errs, err) } - receivers, err := component.MakeReceiverFactoryMap( + receivers, err := receiver.MakeFactoryMap( otlpreceiver.NewFactory(), ) if err != nil { errs = append(errs, err) } - exporters, err := component.MakeExporterFactoryMap( + exporters, err := exporter.MakeFactoryMap( otlpexporter.NewFactory(), serializerexporter.NewFactory(s), loggingexporter.NewFactory(), @@ -63,14 +67,14 @@ func getComponents(s serializer.MetricSerializer) ( errs = append(errs, err) } - processors, err := component.MakeProcessorFactoryMap( + processors, err := processor.MakeFactoryMap( batchprocessor.NewFactory(), ) if err != nil { errs = append(errs, err) } - factories := component.Factories{ + factories := otelcol.Factories{ Extensions: extensions, Receivers: receivers, Processors: processors, @@ -132,7 +136,7 @@ func (p *PipelineConfig) shouldSetLoggingSection() bool { // Pipeline is an OTLP pipeline. type Pipeline struct { - col *service.Collector + col *otelcol.Collector } // CollectorStatus is the status struct for an OTLP pipeline's collector @@ -164,7 +168,7 @@ func NewPipeline(cfg PipelineConfig, s serializer.MetricSerializer) (*Pipeline, return nil, fmt.Errorf("failed to build configuration provider: %w", err) } - col, err := service.New(service.CollectorSettings{ + col, err := otelcol.NewCollector(otelcol.CollectorSettings{ Factories: factories, BuildInfo: buildInfo, DisableGracefulShutdown: true, diff --git a/pkg/otlp/collector_test.go b/pkg/otlp/collector_test.go index 6ed27b5d82752..92f9eb69b3135 100644 --- a/pkg/otlp/collector_test.go +++ b/pkg/otlp/collector_test.go @@ -14,13 +14,12 @@ import ( "testing" "time" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/service" - "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/otlp/internal/testutil" "github.com/DataDog/datadog-agent/pkg/serializer" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.opentelemetry.io/collector/otelcol" ) func TestGetComponents(t *testing.T) { @@ -42,7 +41,7 @@ func AssertSucessfulRun(t *testing.T, pcfg PipelineConfig) { }() assert.Eventually(t, func() bool { - return service.Running == p.col.GetState() + return otelcol.StateRunning == p.col.GetState() }, time.Second*2, time.Millisecond*200) p.Stop() @@ -50,7 +49,7 @@ func AssertSucessfulRun(t *testing.T, pcfg PipelineConfig) { <-colDone assert.Eventually(t, func() bool { - return service.StateClosed == p.col.GetState() + return otelcol.StateClosed == p.col.GetState() }, time.Second*2, time.Millisecond*200) } @@ -96,13 +95,13 @@ func TestStartPipelineFromConfig(t *testing.T) { }{ { path: "receiver/noprotocols.yaml", - err: "receiver \"otlp\" has invalid configuration: must specify at least one protocol when using the OTLP receiver", + err: "invalid configuration: receivers::otlp: must specify at least one protocol when using the OTLP receiver", }, {path: "receiver/simple.yaml"}, {path: "receiver/advanced.yaml"}, { path: "receiver/typo.yaml", - err: "error decoding 'receivers': error reading receivers configuration for \"otlp\": 1 error(s) decoding:\n\n* 'protocols' has invalid keys: htttp", + err: "error decoding 'receivers': error reading configuration for \"otlp\": 1 error(s) decoding:\n\n* 'protocols' has invalid keys: htttp", }, } diff --git a/pkg/otlp/example/metric/README.md b/pkg/otlp/example/metric/README.md new file mode 100644 index 0000000000000..8a05d0e4de5ae --- /dev/null +++ b/pkg/otlp/example/metric/README.md @@ -0,0 +1,16 @@ +# OTLP Metric Exporter Sample App + +This sample application exports 1 count metric, 1 sum metric and 1 histogram metric via OTLP metric exporter. +It can be configured to export to either Datadog Agent OTLP metric intake or OpenTelemtry Collector OTLP receiver. + +## Usage + +``` +go build . +./metric [http | grpc] [endpoint] [delta | cumulative] +``` + +All arguments are optional. +- The 1st arg specifies which protocol to use, default is gRPC. +- The 2nd arg specifies the metric intake endpoint. Default is `localhost:4317` for gRPC and `localhost:4318` for HTTP. +- The 3rd arg specifies the metric aggregation temporality, default is `cumulative`. \ No newline at end of file diff --git a/pkg/otlp/example/metric/doc.go b/pkg/otlp/example/metric/doc.go new file mode 100644 index 0000000000000..f3292257edc59 --- /dev/null +++ b/pkg/otlp/example/metric/doc.go @@ -0,0 +1,7 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2021-present Datadog, Inc. + +// Package main provides a code sample of using otlpmetric exporter. +package main diff --git a/pkg/otlp/example/metric/go.mod b/pkg/otlp/example/metric/go.mod new file mode 100644 index 0000000000000..acb28f03dde6b --- /dev/null +++ b/pkg/otlp/example/metric/go.mod @@ -0,0 +1,30 @@ +module github.com/DataDog/datadog-agent/pkg/otlp/example/metric + +go 1.19 + +require ( + go.opentelemetry.io/otel v1.11.2 + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0 + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.34.0 + go.opentelemetry.io/otel/metric v0.34.0 + go.opentelemetry.io/otel/sdk v1.11.2 + go.opentelemetry.io/otel/sdk/metric v0.34.0 +) + +require ( + github.com/cenkalti/backoff/v4 v4.2.0 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0 // indirect + go.opentelemetry.io/otel/trace v1.11.2 // indirect + go.opentelemetry.io/proto/otlp v0.19.0 // indirect + golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect + golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 // indirect + golang.org/x/text v0.4.0 // indirect + google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1 // indirect + google.golang.org/grpc v1.51.0 // indirect + google.golang.org/protobuf v1.28.1 // indirect +) diff --git a/pkg/otlp/example/metric/go.sum b/pkg/otlp/example/metric/go.sum new file mode 100644 index 0000000000000..5f1452a9c173a --- /dev/null +++ b/pkg/otlp/example/metric/go.sum @@ -0,0 +1,446 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 h1:BZHcxBETFHIdVyhyEfOvn/RdU/QGdLI4y34qQGjGWO0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opentelemetry.io/otel v1.11.2 h1:YBZcQlsVekzFsFbjygXMOXSs6pialIZxcjfO/mBDmR0= +go.opentelemetry.io/otel v1.11.2/go.mod h1:7p4EUV+AqgdlNV9gL97IgUZiVR3yrFXYo53f9BM3tRI= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 h1:htgM8vZIF8oPSCxa341e3IZ4yr/sKxgu8KZYllByiVY= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2/go.mod h1:rqbht/LlhVBgn5+k3M5QK96K5Xb0DvXpMJ5SFQpY6uw= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0 h1:kpskzLZ60cJ48SJ4uxWa6waBL+4kSV6nVK8rP+QM8Wg= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.34.0/go.mod h1:4+x3i62TEegDHuzNva0bMcAN8oUi5w4liGb1d/VgPYo= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0 h1:e7kFb4pJLbhJgAwUdoVTHzB9pGujs5O8/7gFyZL88fg= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.34.0/go.mod h1:3x00m9exjIbhK+zTO4MsCSlfbVmgvLP0wjDgDKa/8bw= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.34.0 h1:t4Ajxj8JGjxkqoBtbkCOY2cDUl9RwiNE9LPQavooi9U= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.34.0/go.mod h1:WO7omosl4P7JoanH9NgInxDxEn2F2M5YinIh8EyeT8w= +go.opentelemetry.io/otel/metric v0.34.0 h1:MCPoQxcg/26EuuJwpYN1mZTeCYAUGx8ABxfW07YkjP8= +go.opentelemetry.io/otel/metric v0.34.0/go.mod h1:ZFuI4yQGNCupurTXCwkeD/zHBt+C2bR7bw5JqUm/AP8= +go.opentelemetry.io/otel/sdk v1.11.2 h1:GF4JoaEx7iihdMFu30sOyRx52HDHOkl9xQ8SMqNXUiU= +go.opentelemetry.io/otel/sdk v1.11.2/go.mod h1:wZ1WxImwpq+lVRo4vsmSOxdd+xwoUJ6rqyLc3SyX9aU= +go.opentelemetry.io/otel/sdk/metric v0.34.0 h1:7ElxfQpXCFZlRTvVRTkcUvK8Gt5DC8QzmzsLsO2gdzo= +go.opentelemetry.io/otel/sdk/metric v0.34.0/go.mod h1:l4r16BIqiqPy5rd14kkxllPy/fOI4tWo1jkpD9Z3ffQ= +go.opentelemetry.io/otel/trace v1.11.2 h1:Xf7hWSF2Glv0DE3MH7fBHvtpSBsjcBUe5MYAmZM/+y0= +go.opentelemetry.io/otel/trace v1.11.2/go.mod h1:4N+yC7QEz7TTsG9BSRLNAa63eg5E06ObSbKPmxQ/pKA= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 h1:h+EGohizhe9XlX18rfpa8k8RAc5XyaeamM+0VHRd4lc= +golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1 h1:b9mVrqYfq3P4bCdaLg1qtBnPzUYgglsIdjZkL/fQVOE= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/pkg/otlp/example/metric/main.go b/pkg/otlp/example/metric/main.go new file mode 100644 index 0000000000000..0c3e55b9cafd9 --- /dev/null +++ b/pkg/otlp/example/metric/main.go @@ -0,0 +1,148 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2021-present Datadog, Inc. + +package main + +import ( + "context" + "log" + "os" + "time" + + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc" + "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp" + "go.opentelemetry.io/otel/metric/global" + "go.opentelemetry.io/otel/metric/unit" + "go.opentelemetry.io/otel/sdk/instrumentation" + "go.opentelemetry.io/otel/sdk/metric" + "go.opentelemetry.io/otel/sdk/metric/metricdata" + "go.opentelemetry.io/otel/sdk/resource" + semconv "go.opentelemetry.io/otel/semconv/v1.4.0" +) + +var ( + now = time.Now() + + res = resource.NewSchemaless( + semconv.ServiceNameKey.String("otlpmetric-example"), + ) + + min = 0.6 + max = 77.7 + + mockData = metricdata.ResourceMetrics{ + Resource: res, + ScopeMetrics: []metricdata.ScopeMetrics{ + { + Scope: instrumentation.Scope{Name: "example", Version: "v0.0.1"}, + Metrics: []metricdata.Metrics{ + { + Name: "otlp.test.request", + Description: "Number of requests received", + Unit: unit.Dimensionless, + Data: metricdata.Sum[int64]{ + IsMonotonic: true, + Temporality: metricdata.DeltaTemporality, + DataPoints: []metricdata.DataPoint[int64]{ + { + Attributes: attribute.NewSet(attribute.String("server", "central")), + StartTime: now, + Time: now.Add(1 * time.Second), + Value: 5, + }, + }, + }, + }, + { + Name: "otlp.test.latency", + Description: "Time spend processing received requests", + Unit: unit.Milliseconds, + Data: metricdata.Histogram{ + Temporality: metricdata.DeltaTemporality, + DataPoints: []metricdata.HistogramDataPoint{ + { + Attributes: attribute.NewSet(attribute.String("server", "central")), + StartTime: now, + Time: now.Add(1 * time.Second), + Count: 10, + Bounds: []float64{1, 5, 10}, + BucketCounts: []uint64{1, 3, 6, 0}, + Sum: 57, + Min: &min, + Max: &max, + }, + }, + }, + }, + { + Name: "otlp.test.temperature", + Description: "CPU global temperature", + Unit: unit.Unit("cel(1 K)"), + Data: metricdata.Gauge[float64]{ + DataPoints: []metricdata.DataPoint[float64]{ + { + Attributes: attribute.NewSet(attribute.String("server", "central")), + Time: now.Add(1 * time.Second), + Value: 32.4, + }, + }, + }, + }, + }, + }, + }, + } +) + +func deltaSelector(metric.InstrumentKind) metricdata.Temporality { + return metricdata.DeltaTemporality +} + +func main() { + var protocol string + if len(os.Args) > 1 { + protocol = os.Args[1] + } + grpcExpOpt := []otlpmetricgrpc.Option{otlpmetricgrpc.WithInsecure()} + httpExpOpt := []otlpmetrichttp.Option{otlpmetrichttp.WithInsecure()} + if len(os.Args) > 2 { + grpcExpOpt = append(grpcExpOpt, otlpmetricgrpc.WithEndpoint(os.Args[2])) + httpExpOpt = append(httpExpOpt, otlpmetrichttp.WithEndpoint(os.Args[2])) + } + if len(os.Args) > 3 && os.Args[3] == "delta" { + grpcExpOpt = append(grpcExpOpt, otlpmetricgrpc.WithTemporalitySelector(deltaSelector)) + httpExpOpt = append(httpExpOpt, otlpmetrichttp.WithTemporalitySelector(deltaSelector)) + } + + ctx := context.Background() + var exp metric.Exporter + var err error + if protocol == "http" { + exp, err = otlpmetrichttp.New(ctx, httpExpOpt...) + } else { + exp, err = otlpmetricgrpc.New(ctx, grpcExpOpt...) + } + if err != nil { + log.Fatal(err) + } + + sdk := metric.NewMeterProvider(metric.WithReader(metric.NewPeriodicReader(exp))) + global.SetMeterProvider(sdk) + + // This is where the sdk would be used to create a Meter and from that + // instruments that would make measurments of your code. To simulate that + // behavior, call export directly with mocked data. + err = exp.Export(ctx, mockData) + if err != nil { + panic(err) + } + + // Ensure the periodic reader is cleaned up by shutting down the sdk. + err = sdk.Shutdown(ctx) + if err != nil { + panic(err) + } +} diff --git a/pkg/otlp/internal/configutils/utils.go b/pkg/otlp/internal/configutils/utils.go index 68084f43e7d95..b2f90bd133447 100644 --- a/pkg/otlp/internal/configutils/utils.go +++ b/pkg/otlp/internal/configutils/utils.go @@ -12,7 +12,7 @@ import ( "strings" "go.opentelemetry.io/collector/confmap" - "go.opentelemetry.io/collector/service" + "go.opentelemetry.io/collector/otelcol" "gopkg.in/yaml.v2" ) @@ -62,9 +62,9 @@ func (m *mapProvider) Shutdown(context.Context) error { } // NewConfigProviderFromMap creates a service.ConfigProvider with a single constant provider `map`, built from a given *confmap.Conf. -func NewConfigProviderFromMap(cfg *confmap.Conf) service.ConfigProvider { +func NewConfigProviderFromMap(cfg *confmap.Conf) otelcol.ConfigProvider { provider := &mapProvider{cfg} - settings := service.ConfigProviderSettings{ + settings := otelcol.ConfigProviderSettings{ ResolverSettings: confmap.ResolverSettings{ URIs: []string{mapLocation}, Providers: map[string]confmap.Provider{ @@ -72,7 +72,7 @@ func NewConfigProviderFromMap(cfg *confmap.Conf) service.ConfigProvider { }, Converters: []confmap.Converter{}, }} - cp, err := service.NewConfigProvider(settings) + cp, err := otelcol.NewConfigProvider(settings) if err != nil { panic(err) } diff --git a/pkg/otlp/internal/configutils/utils_test.go b/pkg/otlp/internal/configutils/utils_test.go index ecc2adcbef65c..0a05ceddd20b1 100644 --- a/pkg/otlp/internal/configutils/utils_test.go +++ b/pkg/otlp/internal/configutils/utils_test.go @@ -13,30 +13,33 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/confmap" "go.opentelemetry.io/collector/confmap/converter/expandconverter" "go.opentelemetry.io/collector/confmap/provider/envprovider" "go.opentelemetry.io/collector/confmap/provider/fileprovider" "go.opentelemetry.io/collector/confmap/provider/yamlprovider" + "go.opentelemetry.io/collector/exporter" "go.opentelemetry.io/collector/exporter/otlpexporter" + "go.opentelemetry.io/collector/extension" + "go.opentelemetry.io/collector/otelcol" + "go.opentelemetry.io/collector/processor" + "go.opentelemetry.io/collector/receiver" "go.opentelemetry.io/collector/receiver/otlpreceiver" - "go.opentelemetry.io/collector/service" ) const testPath = "./testdata/pipeline.yaml" -func buildTestFactories(t *testing.T) component.Factories { - extensions, err := component.MakeExtensionFactoryMap() +func buildTestFactories(t *testing.T) otelcol.Factories { + extensions, err := extension.MakeFactoryMap() require.NoError(t, err) - processors, err := component.MakeProcessorFactoryMap() + processors, err := processor.MakeFactoryMap() require.NoError(t, err) - exporters, err := component.MakeExporterFactoryMap(otlpexporter.NewFactory()) + exporters, err := exporter.MakeFactoryMap(otlpexporter.NewFactory()) require.NoError(t, err) - receivers, err := component.MakeReceiverFactoryMap(otlpreceiver.NewFactory()) + receivers, err := receiver.MakeFactoryMap(otlpreceiver.NewFactory()) require.NoError(t, err) - return component.Factories{ + return otelcol.Factories{ Extensions: extensions, Receivers: receivers, Processors: processors, @@ -53,14 +56,14 @@ func TestNewConfigProviderFromMap(t *testing.T) { mapProvider := NewConfigProviderFromMap(cfgMap) // build default provider from same data - settings := service.ConfigProviderSettings{ + settings := otelcol.ConfigProviderSettings{ ResolverSettings: confmap.ResolverSettings{ URIs: []string{fmt.Sprintf("file:%s", testPath)}, Providers: makeConfigMapProviderMap(fileprovider.New(), envprovider.New(), yamlprovider.New()), Converters: []confmap.Converter{expandconverter.New()}, }, } - defaultProvider, err := service.NewConfigProvider(settings) + defaultProvider, err := otelcol.NewConfigProvider(settings) require.NoError(t, err) // Get config.Config from both diff --git a/pkg/otlp/internal/serializerexporter/config.go b/pkg/otlp/internal/serializerexporter/config.go index da7c8d38643c5..4fd85f4ed544a 100644 --- a/pkg/otlp/internal/serializerexporter/config.go +++ b/pkg/otlp/internal/serializerexporter/config.go @@ -9,20 +9,21 @@ import ( "encoding" "fmt" - "go.opentelemetry.io/collector/config" + "go.opentelemetry.io/collector/component" "go.opentelemetry.io/collector/exporter/exporterhelper" ) // exporterConfig defines configuration for the serializer exporter. type exporterConfig struct { // squash ensures fields are correctly decoded in embedded struct - config.ExporterSettings `mapstructure:",squash"` exporterhelper.TimeoutSettings `mapstructure:",squash"` exporterhelper.QueueSettings `mapstructure:",squash"` Metrics metricsConfig `mapstructure:"metrics"` } +var _ component.Config = (*exporterConfig)(nil) + // metricsConfig defines the metrics exporter specific configuration options type metricsConfig struct { // Enabled reports whether Metrics should be enabled. diff --git a/pkg/otlp/internal/serializerexporter/consumer_test.go b/pkg/otlp/internal/serializerexporter/consumer_test.go index 0495d97fefdc0..92455ed1023a6 100644 --- a/pkg/otlp/internal/serializerexporter/consumer_test.go +++ b/pkg/otlp/internal/serializerexporter/consumer_test.go @@ -207,3 +207,11 @@ func (m *MockSerializer) SendOrchestratorManifests(_ []serializer.ProcessMessage func (m *MockSerializer) SendContainerLifecycleEvent(_ []serializer.ContainerLifecycleMessage, _ string) error { return nil } + +func (m *MockSerializer) SendContainerImage(_ []serializer.ContainerImageMessage, _ string) error { + return nil +} + +func (m *MockSerializer) SendSBOM(_ []serializer.SBOMMessage, _ string) error { + return nil +} diff --git a/pkg/otlp/internal/serializerexporter/exporter.go b/pkg/otlp/internal/serializerexporter/exporter.go index c9f9370139923..d109e59ab33d1 100644 --- a/pkg/otlp/internal/serializerexporter/exporter.go +++ b/pkg/otlp/internal/serializerexporter/exporter.go @@ -10,7 +10,6 @@ import ( "fmt" "go.opentelemetry.io/collector/component" - "go.opentelemetry.io/collector/config" "go.opentelemetry.io/collector/exporter/exporterhelper" "go.opentelemetry.io/collector/pdata/pmetric" "go.uber.org/zap" @@ -23,11 +22,10 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/hostname" ) -var _ component.ExporterConfig = (*exporterConfig)(nil) +var _ component.Config = (*exporterConfig)(nil) -func newDefaultConfig() component.ExporterConfig { +func newDefaultConfig() component.Config { return &exporterConfig{ - ExporterSettings: config.NewExporterSettings(component.NewID(TypeStr)), // Disable timeout; we don't really do HTTP requests on the ConsumeMetrics call. TimeoutSettings: exporterhelper.TimeoutSettings{Timeout: 0}, // TODO (AP-1294): Fine-tune queue settings and look into retry settings. diff --git a/pkg/otlp/internal/serializerexporter/factory.go b/pkg/otlp/internal/serializerexporter/factory.go index 252253487d13c..871d8e4c9ef13 100644 --- a/pkg/otlp/internal/serializerexporter/factory.go +++ b/pkg/otlp/internal/serializerexporter/factory.go @@ -10,6 +10,7 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry" "go.opentelemetry.io/collector/component" + exp "go.opentelemetry.io/collector/exporter" "go.opentelemetry.io/collector/exporter/exporterhelper" "github.com/DataDog/datadog-agent/pkg/serializer" @@ -26,25 +27,25 @@ type factory struct { } // NewFactory creates a new serializer exporter factory. -func NewFactory(s serializer.MetricSerializer) component.ExporterFactory { +func NewFactory(s serializer.MetricSerializer) exp.Factory { f := &factory{s} - return component.NewExporterFactory( + return exp.NewFactory( TypeStr, newDefaultConfig, - component.WithMetricsExporter(f.createMetricExporter, stability), + exp.WithMetrics(f.createMetricExporter, stability), ) } -func (f *factory) createMetricExporter(ctx context.Context, params component.ExporterCreateSettings, c component.ExporterConfig) (component.MetricsExporter, error) { +func (f *factory) createMetricExporter(ctx context.Context, params exp.CreateSettings, c component.Config) (exp.Metrics, error) { cfg := c.(*exporterConfig) - exp, err := newExporter(params.Logger, f.s, cfg) + newExp, err := newExporter(params.Logger, f.s, cfg) if err != nil { return nil, err } - exporter, err := exporterhelper.NewMetricsExporter(ctx, params, cfg, exp.ConsumeMetrics, + exporter, err := exporterhelper.NewMetricsExporter(ctx, params, cfg, newExp.ConsumeMetrics, exporterhelper.WithQueue(cfg.QueueSettings), exporterhelper.WithTimeout(cfg.TimeoutSettings), ) diff --git a/pkg/otlp/internal/serializerexporter/factory_test.go b/pkg/otlp/internal/serializerexporter/factory_test.go index 61aaec7a673f8..90ae564e08d47 100644 --- a/pkg/otlp/internal/serializerexporter/factory_test.go +++ b/pkg/otlp/internal/serializerexporter/factory_test.go @@ -15,6 +15,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/config" "github.com/stretchr/testify/assert" "go.opentelemetry.io/collector/component/componenttest" + "go.opentelemetry.io/collector/exporter/exportertest" "github.com/DataDog/datadog-agent/pkg/serializer" ) @@ -33,7 +34,7 @@ func TestNewMetricsExporter(t *testing.T) { factory := NewFactory(&serializer.MockSerializer{}) cfg := factory.CreateDefaultConfig() - set := componenttest.NewNopExporterCreateSettings() + set := exportertest.NewNopCreateSettings() exp, err := factory.CreateMetricsExporter(context.Background(), set, cfg) assert.NoError(t, err) assert.NotNil(t, exp) @@ -49,7 +50,7 @@ func TestNewMetricsExporterInvalid(t *testing.T) { expCfg := cfg.(*exporterConfig) expCfg.Metrics.HistConfig.Mode = "InvalidMode" - set := componenttest.NewNopExporterCreateSettings() + set := exportertest.NewNopCreateSettings() _, err := factory.CreateMetricsExporter(context.Background(), set, cfg) assert.Error(t, err) } @@ -58,7 +59,7 @@ func TestNewTracesExporter(t *testing.T) { factory := NewFactory(&serializer.MockSerializer{}) cfg := factory.CreateDefaultConfig() - set := componenttest.NewNopExporterCreateSettings() + set := exportertest.NewNopCreateSettings() _, err := factory.CreateTracesExporter(context.Background(), set, cfg) assert.Error(t, err) } @@ -67,7 +68,7 @@ func TestNewLogsExporter(t *testing.T) { factory := NewFactory(&serializer.MockSerializer{}) cfg := factory.CreateDefaultConfig() - set := componenttest.NewNopExporterCreateSettings() + set := exportertest.NewNopCreateSettings() _, err := factory.CreateLogsExporter(context.Background(), set, cfg) assert.Error(t, err) } diff --git a/pkg/otlp/map_provider.go b/pkg/otlp/map_provider.go index 0b3fe6a73add1..62d936098aec8 100644 --- a/pkg/otlp/map_provider.go +++ b/pkg/otlp/map_provider.go @@ -13,7 +13,7 @@ import ( "strings" "go.opentelemetry.io/collector/confmap" - "go.opentelemetry.io/collector/service" + "go.opentelemetry.io/collector/otelcol" "go.uber.org/multierr" "github.com/DataDog/datadog-agent/pkg/otlp/internal/configutils" @@ -154,7 +154,7 @@ func buildMap(cfg PipelineConfig) (*confmap.Conf, error) { } // newMapProvider creates a service.ConfigProvider with the fixed configuration. -func newMapProvider(cfg PipelineConfig) (service.ConfigProvider, error) { +func newMapProvider(cfg PipelineConfig) (otelcol.ConfigProvider, error) { cfgMap, err := buildMap(cfg) if err != nil { return nil, err diff --git a/pkg/otlp/model/attributes/azure/azure_test.go b/pkg/otlp/model/attributes/azure/azure_test.go index 4de38d3740c8f..de1f88ec3b03c 100644 --- a/pkg/otlp/model/attributes/azure/azure_test.go +++ b/pkg/otlp/model/attributes/azure/azure_test.go @@ -4,7 +4,7 @@ // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // -// http://www.apache.org/licenses/LICENSE-2.0 +// http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/otlp/model/attributes/gcp/gcp_test.go b/pkg/otlp/model/attributes/gcp/gcp_test.go index e2677943356d4..963e57d3341da 100644 --- a/pkg/otlp/model/attributes/gcp/gcp_test.go +++ b/pkg/otlp/model/attributes/gcp/gcp_test.go @@ -4,7 +4,7 @@ // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // -// http://www.apache.org/licenses/LICENSE-2.0 +// http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, diff --git a/pkg/otlp/model/attributes/source.go b/pkg/otlp/model/attributes/source.go index fd753e4385ee9..1323108b7d542 100644 --- a/pkg/otlp/model/attributes/source.go +++ b/pkg/otlp/model/attributes/source.go @@ -48,14 +48,19 @@ func getClusterName(attrs pcommon.Map) (string, bool) { // HostnameFromAttributes tries to get a valid hostname from attributes by checking, in order: // -// 1. a custom Datadog hostname provided by the "datadog.host.name" attribute -// 2. the Kubernetes node name (and cluster name if available), -// 3. cloud provider specific hostname for AWS or GCP -// 4. the container ID, -// 5. the cloud provider host ID and -// 6. the host.name attribute. +// 1. a custom Datadog hostname provided by the "datadog.host.name" attribute // -// It returns a boolean value indicated if any name was found +// 2. the Kubernetes node name (and cluster name if available), +// +// 3. cloud provider specific hostname for AWS or GCP +// +// 4. the container ID, +// +// 5. the cloud provider host ID and +// +// 6. the host.name attribute. +// +// It returns a boolean value indicated if any name was found func hostnameFromAttributes(attrs pcommon.Map, usePreviewRules bool) (string, bool) { // Check if the host is localhost or 0.0.0.0, if so discard it. // We don't do the more strict validation done for metadata, diff --git a/pkg/otlp/model/go.mod b/pkg/otlp/model/go.mod index 991121ea93728..f4f26fb4767ce 100644 --- a/pkg/otlp/model/go.mod +++ b/pkg/otlp/model/go.mod @@ -8,15 +8,15 @@ replace ( ) require ( - github.com/DataDog/datadog-agent/pkg/quantile v0.42.0-rc.3 - github.com/DataDog/datadog-agent/pkg/trace v0.42.0-rc.3 + github.com/DataDog/datadog-agent/pkg/quantile v0.43.0-rc.3 + github.com/DataDog/datadog-agent/pkg/trace v0.43.0-rc.3 github.com/DataDog/sketches-go v1.4.1 github.com/golang/protobuf v1.5.2 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/stretchr/testify v1.8.1 - go.opentelemetry.io/collector/pdata v0.66.0 - go.opentelemetry.io/collector/semconv v0.66.0 - go.uber.org/zap v1.23.0 + go.opentelemetry.io/collector/pdata v1.0.0-rc4 + go.opentelemetry.io/collector/semconv v0.70.0 + go.uber.org/zap v1.24.0 ) require ( @@ -31,12 +31,12 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/tinylib/msgp v1.1.6 // indirect go.uber.org/atomic v1.10.0 // indirect - go.uber.org/multierr v1.8.0 // indirect - golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect - golang.org/x/sys v0.2.0 // indirect - golang.org/x/text v0.4.0 // indirect - google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd // indirect - google.golang.org/grpc v1.51.0 // indirect + go.uber.org/multierr v1.9.0 // indirect + golang.org/x/net v0.5.0 // indirect + golang.org/x/sys v0.4.0 // indirect + golang.org/x/text v0.6.0 // indirect + google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 // indirect + google.golang.org/grpc v1.52.0 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/pkg/otlp/model/go.sum b/pkg/otlp/model/go.sum index 256f0c9998fda..d09be1d3001a6 100644 --- a/pkg/otlp/model/go.sum +++ b/pkg/otlp/model/go.sum @@ -1,63 +1,22 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DataDog/sketches-go v1.4.1 h1:j5G6as+9FASM2qC36lvpvQAj9qsv/jUs3FtO8CwZNAY= github.com/DataDog/sketches-go v1.4.1/go.mod h1:xJIXldczJyyjnbDop7ZZcLxJdV3+7Kra7H1KMgpgkLk= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= @@ -74,15 +33,11 @@ github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= @@ -93,71 +48,41 @@ github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvC github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.opentelemetry.io/collector/pdata v0.66.0 h1:UdE5U6MsDNzuiWaXdjGx2lC3ElVqWmN/hiUE8vyvSuM= -go.opentelemetry.io/collector/pdata v0.66.0/go.mod h1:pqyaznLzk21m+1KL6fwOsRryRELL+zNM0qiVSn0MbVc= -go.opentelemetry.io/collector/semconv v0.66.0 h1:gz4fYzOVOt1EQCcOL6pbSmTRj93pZErjHD+H100pH+4= -go.opentelemetry.io/collector/semconv v0.66.0/go.mod h1:5o9yhOa+ABt7g2E5JABDxGZ1PQPbtfxrKNbYn+LOTXU= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.opentelemetry.io/collector/pdata v1.0.0-rc4 h1:vIQHHiaDqvTM3I30j3PDo44ttkv9n8prroe4G+RsUe0= +go.opentelemetry.io/collector/pdata v1.0.0-rc4/go.mod h1:ft/11i2R6Ld/DC543bAS4R30/W8heexIvNqtzmQpnLQ= +go.opentelemetry.io/collector/semconv v0.70.0 h1:zuito4A9yoB5v+4M7GnwMBNcQdfhutHeysDAkTaGJjw= +go.opentelemetry.io/collector/semconv v0.70.0/go.mod h1:UAp+qAMqEXOD0eEBmWJ3IJ5+LkF7zVTgmfufwpHmL8w= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/zap v1.23.0 h1:OjGQ5KQDEUawVHxNwQgPpiypGHOxo2mNZsOqTak4fFY= -go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -165,48 +90,19 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd h1:e0TwkXOdbnH/1x5rc5MZ/VYyiZ4v+RdVfrGMqEwT68I= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 h1:a2S6M0+660BgMNl++4JPlcAO/CjkqYItDEZwkoDQK7c= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/grpc v1.52.0 h1:kd48UiU7EHsV4rnLyOJRuP/Il/UHE7gdDAQ+SZI7nZk= +google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/pkg/otlp/model/translator/metrics_translator.go b/pkg/otlp/model/translator/metrics_translator.go index 1436bf822dc46..7c97a81158dde 100644 --- a/pkg/otlp/model/translator/metrics_translator.go +++ b/pkg/otlp/model/translator/metrics_translator.go @@ -133,11 +133,11 @@ func (t *Translator) mapNumberMetrics( // TODO(songy23): consider changing this to a Translator start time that must be initialized // if the package-level variable causes any issue. -var startTime = time.Now() +var startTime = uint64(time.Now().Unix()) // getProcessStartTime returns the start time of the Agent process in seconds since epoch func getProcessStartTime() uint64 { - return uint64(startTime.Unix()) + return startTime } // mapNumberMonotonicMetrics maps monotonic datapoints into Datadog metrics @@ -167,7 +167,7 @@ func (t *Translator) mapNumberMonotonicMetrics( if dx, ok := t.prevPts.MonotonicDiff(pointDims, startTs, ts, val); ok { consumer.ConsumeTimeSeries(ctx, pointDims, Count, ts, dx) - } else if i == 0 && getProcessStartTime() < startTs { + } else if i == 0 && getProcessStartTime() < startTs && startTs != ts { // Report the first value if the timeseries started after the Datadog Agent process started. consumer.ConsumeTimeSeries(ctx, pointDims, Count, ts, val) } diff --git a/pkg/otlp/model/translator/metrics_translator_test.go b/pkg/otlp/model/translator/metrics_translator_test.go index ccc667467731d..b85e7b33a12dc 100644 --- a/pkg/otlp/model/translator/metrics_translator_test.go +++ b/pkg/otlp/model/translator/metrics_translator_test.go @@ -357,7 +357,7 @@ func TestMapIntMonotonicReportFirstValue(t *testing.T) { ctx := context.Background() tr := newTranslator(t, zap.NewNop()) consumer := &mockFullConsumer{} - tr.MapMetrics(ctx, createTestIntCumulativeMonotonicMetrics(), consumer) + tr.MapMetrics(ctx, createTestIntCumulativeMonotonicMetrics(false), consumer) startTs := int(getProcessStartTime()) + 1 assert.ElementsMatch(t, consumer.metrics, @@ -369,6 +369,14 @@ func TestMapIntMonotonicReportFirstValue(t *testing.T) { ) } +func TestMapIntMonotonicNotReportFirstValueIfStartTSMatchTS(t *testing.T) { + ctx := context.Background() + tr := newTranslator(t, zap.NewNop()) + consumer := &mockFullConsumer{} + tr.MapMetrics(ctx, createTestIntCumulativeMonotonicMetrics(true), consumer) + assert.Empty(t, consumer.metrics) +} + func TestMapIntMonotonicReportDiffForFirstValue(t *testing.T) { ctx := context.Background() tr := newTranslator(t, zap.NewNop()) @@ -377,7 +385,7 @@ func TestMapIntMonotonicReportDiffForFirstValue(t *testing.T) { startTs := int(getProcessStartTime()) + 1 // Add an entry to the cache about the timeseries, in this case we send the diff (9) rather than the first value (10). tr.prevPts.MonotonicDiff(dims, uint64(seconds(startTs)), uint64(seconds(startTs+1)), 1) - tr.MapMetrics(ctx, createTestIntCumulativeMonotonicMetrics(), consumer) + tr.MapMetrics(ctx, createTestIntCumulativeMonotonicMetrics(false), consumer) assert.ElementsMatch(t, consumer.metrics, []metric{ @@ -519,7 +527,7 @@ func TestMapDoubleMonotonicReportFirstValue(t *testing.T) { ctx := context.Background() tr := newTranslator(t, zap.NewNop()) consumer := &mockFullConsumer{} - tr.MapMetrics(ctx, createTestDoubleCumulativeMonotonicMetrics(), consumer) + tr.MapMetrics(ctx, createTestDoubleCumulativeMonotonicMetrics(false), consumer) startTs := int(getProcessStartTime()) + 1 assert.ElementsMatch(t, consumer.metrics, @@ -531,6 +539,14 @@ func TestMapDoubleMonotonicReportFirstValue(t *testing.T) { ) } +func TestMapDoubleMonotonicNotReportFirstValueIfStartTSMatchTS(t *testing.T) { + ctx := context.Background() + tr := newTranslator(t, zap.NewNop()) + consumer := &mockFullConsumer{} + tr.MapMetrics(ctx, createTestDoubleCumulativeMonotonicMetrics(true), consumer) + assert.Empty(t, consumer.metrics) +} + func TestMapAPMStats(t *testing.T) { consumer := &mockFullConsumer{} logger, err := zap.NewDevelopment() @@ -553,7 +569,7 @@ func TestMapDoubleMonotonicReportDiffForFirstValue(t *testing.T) { startTs := int(getProcessStartTime()) + 1 // Add an entry to the cache about the timeseries, in this case we send the diff (9) rather than the first value (10). tr.prevPts.MonotonicDiff(dims, uint64(seconds(startTs)), uint64(seconds(startTs+1)), 1) - tr.MapMetrics(ctx, createTestDoubleCumulativeMonotonicMetrics(), consumer) + tr.MapMetrics(ctx, createTestDoubleCumulativeMonotonicMetrics(false), consumer) assert.ElementsMatch(t, consumer.metrics, []metric{ @@ -672,7 +688,7 @@ const ( fallbackHostname = "fallbackHostname" ) -func createTestIntCumulativeMonotonicMetrics() pmetric.Metrics { +func createTestIntCumulativeMonotonicMetrics(tsmatch bool) pmetric.Metrics { md := pmetric.NewMetrics() met := md.ResourceMetrics().AppendEmpty().ScopeMetrics().AppendEmpty().Metrics().AppendEmpty() met.SetName(exampleDims.name) @@ -688,13 +704,17 @@ func createTestIntCumulativeMonotonicMetrics() pmetric.Metrics { for i, val := range values { dpInt := dpsInt.AppendEmpty() dpInt.SetStartTimestamp(seconds(startTs)) - dpInt.SetTimestamp(seconds(startTs + i + 1)) + if tsmatch { + dpInt.SetTimestamp(seconds(startTs)) + } else { + dpInt.SetTimestamp(seconds(startTs + i + 1)) + } dpInt.SetIntValue(val) } return md } -func createTestDoubleCumulativeMonotonicMetrics() pmetric.Metrics { +func createTestDoubleCumulativeMonotonicMetrics(tsmatch bool) pmetric.Metrics { md := pmetric.NewMetrics() met := md.ResourceMetrics().AppendEmpty().ScopeMetrics().AppendEmpty().Metrics().AppendEmpty() met.SetName(exampleDims.name) @@ -710,7 +730,11 @@ func createTestDoubleCumulativeMonotonicMetrics() pmetric.Metrics { for i, val := range values { dpInt := dpsInt.AppendEmpty() dpInt.SetStartTimestamp(seconds(startTs)) - dpInt.SetTimestamp(seconds(startTs + i + 1)) + if tsmatch { + dpInt.SetTimestamp(seconds(startTs)) + } else { + dpInt.SetTimestamp(seconds(startTs + i + 1)) + } dpInt.SetDoubleValue(val) } return md diff --git a/pkg/pidfile/pidfile_windows.go b/pkg/pidfile/pidfile_windows.go index 8b121db87839e..37a7a0e4d26ea 100644 --- a/pkg/pidfile/pidfile_windows.go +++ b/pkg/pidfile/pidfile_windows.go @@ -8,30 +8,12 @@ package pidfile import ( "path/filepath" - "golang.org/x/sys/windows" - "github.com/DataDog/datadog-agent/pkg/util/winutil" ) -const ( - processQueryLimitedInformation = 0x1000 - - stillActive = 259 -) - // isProcess checks to see if a given pid is currently valid in the process table func isProcess(pid int) bool { - h, err := windows.OpenProcess(processQueryLimitedInformation, false, uint32(pid)) - if err != nil { - return false - } - var c uint32 - err = windows.GetExitCodeProcess(h, &c) - windows.Close(h) - if err != nil { - return c == stillActive - } - return true + return winutil.IsProcess(pid) } // Path returns a suitable location for the pidfile under Windows diff --git a/pkg/process/checks/checks.go b/pkg/process/checks/checks.go index 91517eeab8695..254c0a1a9d5f4 100644 --- a/pkg/process/checks/checks.go +++ b/pkg/process/checks/checks.go @@ -7,8 +7,6 @@ package checks import ( model "github.com/DataDog/agent-payload/v5/process" - - "github.com/DataDog/datadog-agent/pkg/process/config" ) // Name for check performed by process-agent or system-probe @@ -24,47 +22,98 @@ const ( ProcessEventsCheckName = "process_events" ) +// SysProbeConfig provides access to system probe configuration +type SysProbeConfig struct { + MaxConnsPerMessage int + // System probe collection configuration + SystemProbeAddress string + // System probe process module on/off configuration + ProcessModuleEnabled bool +} + // Check is an interface for Agent checks that collect data. Each check returns // a specific MessageBody type that will be published to the intake endpoint or // processed in another way (e.g. printed for debugging). // Before checks are used you must called Init. type Check interface { - Init(cfg *config.AgentConfig, info *model.SystemInfo) error + // Name returns the name of the check Name() string - RealTime() bool - Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) + // IsEnabled returns true if the check is enabled by configuration + IsEnabled() bool + // Realtime indicates if this check only runs in real-time mode + Realtime() bool + // Init initializes the check + Init(syscfg *SysProbeConfig, info *HostInfo) error + // SupportsRunOptions returns true if the check supports RunOptions + SupportsRunOptions() bool + // Run runs the check + Run(nextGroupID func() int32, options *RunOptions) (RunResult, error) + // Cleanup performs resource cleanup after check is no longer running Cleanup() + // ShouldSaveLastRun saves results of the last run ShouldSaveLastRun() bool } // RunOptions provides run options for checks type RunOptions struct { RunStandard bool - RunRealTime bool + RunRealtime bool } // RunResult is a result for a check run -type RunResult struct { +type RunResult interface { + Payloads() []model.MessageBody + RealtimePayloads() []model.MessageBody +} + +// StandardRunResult is a run result containing payloads for standard run +type StandardRunResult []model.MessageBody + +func (p StandardRunResult) Payloads() []model.MessageBody { + return p +} + +func (p StandardRunResult) RealtimePayloads() []model.MessageBody { + return nil +} + +// CombinedRunResult is a run result containing payloads for standard and realtime runs +type CombinedRunResult struct { Standard []model.MessageBody - RealTime []model.MessageBody + Realtime []model.MessageBody } -// CheckWithRealTime provides an extended interface for running composite checks -type CheckWithRealTime interface { - Check - RealTimeName() string - RunWithOptions(cfg *config.AgentConfig, nextGroupID func() int32, options RunOptions) (*RunResult, error) +func (p CombinedRunResult) Payloads() []model.MessageBody { + return p.Standard +} + +func (p CombinedRunResult) RealtimePayloads() []model.MessageBody { + return p.Realtime } // All is a list of all runnable checks. Putting a check in here does not guarantee it will be run, // it just guarantees that the collector will be able to find the check. // If you want to add a check you MUST register it here. -var All = []Check{ - Process, - Container, - RTContainer, - Connections, - Pod, - ProcessDiscovery, - ProcessEvents, +func All() []Check { + return []Check{ + NewProcessCheck(), + NewContainerCheck(), + NewRTContainerCheck(), + NewConnectionsCheck(), + NewPodCheck(), + NewProcessDiscoveryCheck(), + NewProcessEventsCheck(), + } +} + +// RTName returns the name of the corresponding realtime check +func RTName(checkName string) string { + switch checkName { + case ProcessCheckName: + return RTProcessCheckName + case ContainerCheckName: + return RTContainerCheckName + default: + return "" + } } diff --git a/pkg/process/checks/chunking.go b/pkg/process/checks/chunking.go index 4177f817e7171..31b2819f2f1e0 100644 --- a/pkg/process/checks/chunking.go +++ b/pkg/process/checks/chunking.go @@ -12,136 +12,41 @@ import ( ) // chunkProcessesBySizeAndWeight chunks `model.Process` payloads by max allowed size and max allowed weight of a chunk -func chunkProcessesBySizeAndWeight(procs []*model.Process, ctr *model.Container, maxChunkSize, maxChunkWeight int, chunker *collectorProcChunker) { +func chunkProcessesBySizeAndWeight(procs []*model.Process, ctr *model.Container, maxChunkSize, maxChunkWeight int, chunker *util.ChunkAllocator[model.CollectorProc, *model.Process]) { if ctr != nil && len(procs) == 0 { // can happen in two scenarios, and we still need to report the container // a) if a process is skipped (e.g. disallowlisted) // b) if process <=> container mapping cannot be established (e.g. Docker on Windows) - chunker.appendContainerWithoutProcesses(ctr) + appendContainerWithoutProcesses(ctr, chunker.GetChunks()) return } // Use the last available chunk as it may have some space for payloads - chunker.setLastChunk() + chunker.SetLastChunk() // Processes that have a related container will add this container to every chunk they are split across // This may result in the same container being sent in multiple payloads from the agent // Note that this is necessary because container process tags (sent within `model.Container`) are only resolved from // containers seen within the same `model.ContainerProc` as processes. - chunker.container = ctr - list := &processList{ - procs: procs, - chunker: chunker, - } - util.ChunkPayloadsBySizeAndWeight(list, chunker, maxChunkSize, maxChunkWeight) -} - -// processList is a payload list of `model.Process` payloads -type processList struct { - procs []*model.Process - chunker processChunker -} - -// processChunker abstracts chunking of `model.Process` payloads -type processChunker interface { - // Accept takes a slice of `model.Process` and allocates them to the current chunk - Accept(procs []*model.Process, weight int) -} - -func (l *processList) Len() int { - return len(l.procs) -} - -func (l *processList) WeightAt(idx int) int { - if idx >= len(l.procs) { - return 0 - } - return weighProcess(l.procs[idx]) -} - -func (l *processList) ToChunk(start, end int, weight int) { - l.chunker.Accept(l.procs[start:end], weight) -} - -// chunkProps is used to track weight and size of chunks -type chunkProps struct { - weight int - size int -} - -// chunkPropsTracker tracks weight and size of chunked payloads -type chunkPropsTracker struct { - props []chunkProps - idx int -} - -// TakenSize returns the size allocated to the current chunk -func (c *chunkPropsTracker) TakenSize() int { - if c.idx < len(c.props) { - return c.props[c.idx].size - } - return 0 -} - -// TakenWeight returns the weight allocated to the current chunk -func (c *chunkPropsTracker) TakenWeight() int { - if c.idx < len(c.props) { - return c.props[c.idx].weight - } - return 0 -} - -// Append creates a new chunk at the end (cases when it is known any previously allocated chunks cannot fit the payload) -func (c *chunkPropsTracker) Append() { - c.idx = len(c.props) -} - -// Next moves to the next chunk or allocates a new chunk if the current chunk is the last -func (c *chunkPropsTracker) Next() { - c.idx++ -} - -// collectorProcChunker implements allocation of chunks to `model.CollectorProc` -type collectorProcChunker struct { - chunkPropsTracker - container *model.Container - collectorProcs []*model.CollectorProc -} - -// collectprProcChunker implements both `chunkAllocator` and `processChunker` -var _ processChunker = &collectorProcChunker{} -var _ util.ChunkAllocator = &collectorProcChunker{} - -func (c *collectorProcChunker) Accept(procs []*model.Process, weight int) { - if c.idx >= len(c.collectorProcs) { - // If we are outside of the range of allocated chunks, allocate a new one - c.collectorProcs = append(c.collectorProcs, &model.CollectorProc{}) - c.props = append(c.props, chunkProps{}) - } - - collectorProc := c.collectorProcs[c.idx] - - // Note that we are currently not accounting for the container size/weight in calculations - if c.container != nil { - collectorProc.Containers = append(collectorProc.Containers, c.container) + chunker.OnAccept = func(t *model.CollectorProc) { + if ctr != nil { + t.Containers = append(t.Containers, ctr) + } } - collectorProc.Processes = append(collectorProc.Processes, procs...) - c.props[c.idx].size += len(procs) - c.props[c.idx].weight += weight -} - -func (c *collectorProcChunker) setLastChunk() { - c.idx = 0 - if len(c.collectorProcs) > 1 { - c.idx = len(c.collectorProcs) - 1 + list := &util.PayloadList[*model.Process]{ + Items: procs, + WeightAt: func(i int) int { + return weighProcess(procs[i]) + }, } + util.ChunkPayloadsBySizeAndWeight[model.CollectorProc, *model.Process](list, chunker, maxChunkSize, maxChunkWeight) } -func (c *collectorProcChunker) appendContainerWithoutProcesses(ctr *model.Container) { - if len(c.collectorProcs) == 0 { - c.collectorProcs = append(c.collectorProcs, &model.CollectorProc{}) +func appendContainerWithoutProcesses(ctr *model.Container, collectorProcs *[]model.CollectorProc) { + if len(*collectorProcs) == 0 { + *collectorProcs = append(*collectorProcs, model.CollectorProc{}) } - collectorProc := c.collectorProcs[len(c.collectorProcs)-1] + collectorProc := &(*collectorProcs)[len(*collectorProcs)-1] collectorProc.Containers = append(collectorProc.Containers, ctr) } diff --git a/pkg/process/checks/chunking_test.go b/pkg/process/checks/chunking_test.go index 045465e374960..46a5c8e16037b 100644 --- a/pkg/process/checks/chunking_test.go +++ b/pkg/process/checks/chunking_test.go @@ -36,7 +36,7 @@ func TestChunkProcessesBySizeAndWeight(t *testing.T) { procsByCtr map[string][]*model.Process maxChunkSize int maxChunkWeight int - expectedChunks []*model.CollectorProc + expectedChunks []model.CollectorProc }{ { name: "chunk by size only", @@ -60,7 +60,7 @@ func TestChunkProcessesBySizeAndWeight(t *testing.T) { }, maxChunkSize: 3, maxChunkWeight: 1000, - expectedChunks: []*model.CollectorProc{ + expectedChunks: []model.CollectorProc{ { Containers: []*model.Container{ ctr("foo"), @@ -108,7 +108,7 @@ func TestChunkProcessesBySizeAndWeight(t *testing.T) { }, maxChunkSize: 3, maxChunkWeight: 1000, - expectedChunks: []*model.CollectorProc{ + expectedChunks: []model.CollectorProc{ { Containers: []*model.Container{ ctr("foo"), @@ -155,7 +155,7 @@ func TestChunkProcessesBySizeAndWeight(t *testing.T) { }, maxChunkSize: 3, maxChunkWeight: 1000, - expectedChunks: []*model.CollectorProc{ + expectedChunks: []model.CollectorProc{ { Processes: []*model.Process{ proc(100, "top"), @@ -204,7 +204,7 @@ func TestChunkProcessesBySizeAndWeight(t *testing.T) { }, maxChunkSize: 3, maxChunkWeight: 1000, - expectedChunks: []*model.CollectorProc{ + expectedChunks: []model.CollectorProc{ { Containers: []*model.Container{ ctr("foo"), @@ -232,7 +232,8 @@ func TestChunkProcessesBySizeAndWeight(t *testing.T) { for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { chunks, totalProcs, totalContainers := chunkProcessesAndContainers(tc.procsByCtr, tc.containers, tc.maxChunkSize, tc.maxChunkWeight) - assert.Equal(t, tc.expectedChunks, chunks) + assert.Equal(t, tc.expectedChunks, *chunks) + expectedProcs := 0 for _, procs := range tc.procsByCtr { diff --git a/pkg/process/checks/container.go b/pkg/process/checks/container.go index 7255e33fd4116..c75de77e5338d 100644 --- a/pkg/process/checks/container.go +++ b/pkg/process/checks/container.go @@ -12,7 +12,6 @@ import ( model "github.com/DataDog/agent-payload/v5/process" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/statsd" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/util/cloudproviders" @@ -23,14 +22,16 @@ const ( cacheValidityNoRT = 2 * time.Second ) -// Container is a singleton ContainerCheck. -var Container = &ContainerCheck{} +// NewContainerCheck returns an instance of the ContainerCheck. +func NewContainerCheck() Check { + return &ContainerCheck{} +} // ContainerCheck is a check that returns container metadata and stats. type ContainerCheck struct { sync.Mutex - sysInfo *model.SystemInfo + hostInfo *HostInfo containerProvider util.ContainerProvider lastRates map[string]*util.ContainerRateMetrics networkID string @@ -41,9 +42,9 @@ type ContainerCheck struct { } // Init initializes a ContainerCheck instance. -func (c *ContainerCheck) Init(cfg *config.AgentConfig, info *model.SystemInfo) error { +func (c *ContainerCheck) Init(_ *SysProbeConfig, info *HostInfo) error { c.containerProvider = util.GetSharedContainerProvider() - c.sysInfo = info + c.hostInfo = info networkID, err := cloudproviders.GetNetworkID(context.TODO()) if err != nil { @@ -56,18 +57,29 @@ func (c *ContainerCheck) Init(cfg *config.AgentConfig, info *model.SystemInfo) e return nil } +// IsEnabled returns true if the check is enabled by configuration +func (c *ContainerCheck) IsEnabled() bool { + // TODO - move config check logic here + return true +} + +// SupportsRunOptions returns true if the check supports RunOptions +func (c *ContainerCheck) SupportsRunOptions() bool { + return false +} + // Name returns the name of the ProcessCheck. func (c *ContainerCheck) Name() string { return ContainerCheckName } -// RealTime indicates if this check only runs in real-time mode. -func (c *ContainerCheck) RealTime() bool { return false } +// Realtime indicates if this check only runs in real-time mode. +func (c *ContainerCheck) Realtime() bool { return false } // ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares func (c *ContainerCheck) ShouldSaveLastRun() bool { return true } // Run runs the ContainerCheck to collect a list of running ctrList and the // stats for each container. -func (c *ContainerCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { +func (c *ContainerCheck) Run(nextGroupID func() int32, options *RunOptions) (RunResult, error) { c.Lock() defer c.Unlock() startTime := time.Now() @@ -97,22 +109,23 @@ func (c *ContainerCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.Me } chunked := chunkContainers(containers, groupSize) messages := make([]model.MessageBody, 0, groupSize) + groupID := nextGroupID() for i := 0; i < groupSize; i++ { messages = append(messages, &model.CollectorContainer{ - HostName: cfg.HostName, + HostName: c.hostInfo.HostName, NetworkId: c.networkID, - Info: c.sysInfo, + Info: c.hostInfo.SystemInfo, Containers: chunked[i], GroupId: groupID, GroupSize: int32(groupSize), - ContainerHostType: cfg.ContainerHostType, + ContainerHostType: c.hostInfo.ContainerHostType, }) } numContainers := float64(len(containers)) statsd.Client.Gauge("datadog.process.containers.host_count", numContainers, []string{}, 1) //nolint:errcheck log.Debugf("collected %d containers in %s", int(numContainers), time.Now().Sub(startTime)) - return messages, nil + return StandardRunResult(messages), nil } // Cleanup frees any resource held by the ContainerCheck before the agent exits diff --git a/pkg/process/checks/container_rt.go b/pkg/process/checks/container_rt.go index 5e7b536f5c0e3..284f162c2a02c 100644 --- a/pkg/process/checks/container_rt.go +++ b/pkg/process/checks/container_rt.go @@ -10,7 +10,6 @@ import ( model "github.com/DataDog/agent-payload/v5/process" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/system" @@ -20,36 +19,49 @@ const ( cacheValidityRT = 500 * time.Millisecond ) -// RTContainer is a singleton RTContainerCheck. -var RTContainer = &RTContainerCheck{} +// NewRTContainerCheck returns an instance of the RTContainerCheck. +func NewRTContainerCheck() Check { + return &RTContainerCheck{} +} // RTContainerCheck collects numeric statistics about live ctrList. type RTContainerCheck struct { maxBatchSize int - sysInfo *model.SystemInfo + hostInfo *HostInfo containerProvider util.ContainerProvider lastRates map[string]*util.ContainerRateMetrics } // Init initializes a RTContainerCheck instance. -func (r *RTContainerCheck) Init(_ *config.AgentConfig, sysInfo *model.SystemInfo) error { +func (r *RTContainerCheck) Init(_ *SysProbeConfig, hostInfo *HostInfo) error { r.maxBatchSize = getMaxBatchSize() - r.sysInfo = sysInfo + r.hostInfo = hostInfo r.containerProvider = util.GetSharedContainerProvider() return nil } +// IsEnabled returns true if the check is enabled by configuration +func (r *RTContainerCheck) IsEnabled() bool { + // TODO - move config check logic here + return true +} + +// SupportsRunOptions returns true if the check supports RunOptions +func (r *RTContainerCheck) SupportsRunOptions() bool { + return false +} + // Name returns the name of the RTContainerCheck. func (r *RTContainerCheck) Name() string { return RTContainerCheckName } -// RealTime indicates if this check only runs in real-time mode. -func (r *RTContainerCheck) RealTime() bool { return true } +// Realtime indicates if this check only runs in real-time mode. +func (r *RTContainerCheck) Realtime() bool { return true } // ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares func (r *RTContainerCheck) ShouldSaveLastRun() bool { return true } // Run runs the real-time container check getting container-level stats from the Cgroups and Docker APIs. -func (r *RTContainerCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { +func (r *RTContainerCheck) Run(nextGroupID func() int32, _ *RunOptions) (RunResult, error) { var err error var containers []*model.Container var lastRates map[string]*util.ContainerRateMetrics @@ -71,19 +83,20 @@ func (r *RTContainerCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model. } chunked := convertAndChunkContainers(containers, groupSize) messages := make([]model.MessageBody, 0, groupSize) + groupID := nextGroupID() for i := 0; i < groupSize; i++ { messages = append(messages, &model.CollectorContainerRealTime{ - HostName: cfg.HostName, + HostName: r.hostInfo.HostName, Stats: chunked[i], NumCpus: int32(system.HostCPUCount()), - TotalMemory: r.sysInfo.TotalMemory, + TotalMemory: r.hostInfo.SystemInfo.TotalMemory, GroupId: groupID, GroupSize: int32(groupSize), - ContainerHostType: cfg.ContainerHostType, + ContainerHostType: r.hostInfo.ContainerHostType, }) } - return messages, nil + return StandardRunResult(messages), nil } // Cleanup frees any resource held by the RTContainerCheck before the agent exits diff --git a/pkg/process/checks/host_info.go b/pkg/process/checks/host_info.go new file mode 100644 index 0000000000000..46ca91fc60c45 --- /dev/null +++ b/pkg/process/checks/host_info.go @@ -0,0 +1,158 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package checks + +import ( + "bytes" + "context" + "fmt" + "os" + "os/exec" + "strings" + "time" + + model "github.com/DataDog/agent-payload/v5/process" + "google.golang.org/grpc" + + "github.com/DataDog/datadog-agent/pkg/config" + pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo" + "github.com/DataDog/datadog-agent/pkg/util/fargate" + ddgrpc "github.com/DataDog/datadog-agent/pkg/util/grpc" + "github.com/DataDog/datadog-agent/pkg/util/hostname/validate" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +// HostInfo describes details of host information shared between various checks +type HostInfo struct { + SystemInfo *model.SystemInfo + HostName string + // host type of the agent, used to populate container payload with additional host information + ContainerHostType model.ContainerHostType +} + +// CollectHostInfo collects host information +func CollectHostInfo() (*HostInfo, error) { + sysInfo, err := CollectSystemInfo() + if err != nil { + return nil, err + } + + hostName, err := resolveHostName() + if err != nil { + return nil, err + } + + return &HostInfo{ + SystemInfo: sysInfo, + HostName: hostName, + ContainerHostType: getContainerHostType(), + }, nil +} + +func resolveHostName() (string, error) { + var hostName string + if config.Datadog.IsSet("hostname") { + hostName = config.Datadog.GetString("hostname") + } + + if err := validate.ValidHostname(hostName); err != nil { + // lookup hostname if there is no config override or if the override is invalid + agentBin := config.Datadog.GetString("process_config.dd_agent_bin") + connectionTimeout := config.Datadog.GetDuration("process_config.grpc_connection_timeout_secs") * time.Second + var err error + hostName, err = getHostname(context.Background(), agentBin, connectionTimeout) + if err != nil { + return "", log.Errorf("cannot get hostname: %v", err) + } + } + return hostName, nil +} + +// getHostname attempts to resolve the hostname in the following order: the main datadog agent via grpc, the main agent +// via cli and lastly falling back to os.Hostname() if it is unavailable +func getHostname(ctx context.Context, ddAgentBin string, grpcConnectionTimeout time.Duration) (string, error) { + // Fargate is handled as an exceptional case (there is no concept of a host, so we use the ARN in-place). + if fargate.IsFargateInstance() { + hostname, err := fargate.GetFargateHost(ctx) + if err == nil { + return hostname, nil + } + log.Errorf("failed to get Fargate host: %v", err) + } + + // Get the hostname via gRPC from the main agent if a hostname has not been set either from config/fargate + hostname, err := getHostnameFromGRPC(ctx, ddgrpc.GetDDAgentClient, grpcConnectionTimeout) + if err == nil { + return hostname, nil + } + log.Errorf("failed to get hostname from grpc: %v", err) + + // If the hostname is not set then we fallback to use the agent binary + hostname, err = getHostnameFromCmd(ddAgentBin, exec.Command) + if err == nil { + return hostname, nil + } + log.Errorf("failed to get hostname from cmd: %v", err) + + return os.Hostname() +} + +type cmdFunc = func(name string, arg ...string) *exec.Cmd + +// getHostnameCmd shells out to obtain the hostname used by the infra agent +func getHostnameFromCmd(ddAgentBin string, cmdFn cmdFunc) (string, error) { + cmd := cmdFn(ddAgentBin, "hostname") + + // Copying all environment variables to child process + // Windows: Required, so the child process can load DLLs, etc. + // Linux: Optional, but will make use of DD_HOSTNAME and DOCKER_DD_AGENT if they exist + cmd.Env = append(cmd.Env, os.Environ()...) + + var stdout, stderr bytes.Buffer + cmd.Stdout = &stdout + cmd.Stderr = &stderr + + err := cmd.Run() + if err != nil { + return "", err + } + + hostname := strings.TrimSpace(stdout.String()) + if hostname == "" { + return "", fmt.Errorf("error retrieving dd-agent hostname %s", stderr.String()) + } + + return hostname, nil +} + +// getHostnameFromGRPC retrieves the hostname from the main datadog agent via GRPC +func getHostnameFromGRPC(ctx context.Context, grpcClientFn func(ctx context.Context, opts ...grpc.DialOption) (pb.AgentClient, error), grpcConnectionTimeout time.Duration) (string, error) { + ctx, cancel := context.WithTimeout(ctx, grpcConnectionTimeout) + defer cancel() + + ddAgentClient, err := grpcClientFn(ctx) + if err != nil { + return "", fmt.Errorf("cannot connect to datadog agent via grpc: %w", err) + } + reply, err := ddAgentClient.GetHostname(ctx, &pb.HostnameRequest{}) + if err != nil { + return "", fmt.Errorf("cannot get hostname from datadog agent via grpc: %w", err) + } + + log.Debugf("retrieved hostname:%s from datadog agent via grpc", reply.Hostname) + return reply.Hostname, nil +} + +// getContainerHostType uses the fargate library to detect container environment and returns the protobuf version of it +func getContainerHostType() model.ContainerHostType { + switch fargate.GetOrchestrator() { + case fargate.ECS: + return model.ContainerHostType_fargateECS + case fargate.EKS: + return model.ContainerHostType_fargateEKS + } + return model.ContainerHostType_notSpecified +} diff --git a/pkg/process/checks/host_info_test.go b/pkg/process/checks/host_info_test.go new file mode 100644 index 0000000000000..1ebca833067bf --- /dev/null +++ b/pkg/process/checks/host_info_test.go @@ -0,0 +1,143 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package checks + +import ( + "context" + "errors" + "fmt" + "os" + "os/exec" + "testing" + "time" + + "github.com/golang/mock/gomock" + "github.com/stretchr/testify/assert" + "google.golang.org/grpc" + + "github.com/DataDog/datadog-agent/pkg/config" + pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo" + mocks "github.com/DataDog/datadog-agent/pkg/proto/pbgo/mocks" +) + +func TestGetHostname(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + + ctx := context.Background() + h, err := getHostname(ctx, config.Datadog.GetString("process_config.dd_agent_bin"), 0) + assert.Nil(t, err) + // verify we fall back to getting os hostname + expectedHostname, _ := os.Hostname() + assert.Equal(t, expectedHostname, h) +} + +func TestGetHostnameFromGRPC(t *testing.T) { + ctx := context.Background() + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + mockClient := mocks.NewMockAgentClient(ctrl) + + mockClient.EXPECT().GetHostname( + gomock.Any(), + &pb.HostnameRequest{}, + ).Return(&pb.HostnameReply{Hostname: "unit-test-hostname"}, nil) + + t.Run("hostname returns from grpc", func(t *testing.T) { + hostname, err := getHostnameFromGRPC(ctx, func(ctx context.Context, opts ...grpc.DialOption) (pb.AgentClient, error) { + return mockClient, nil + }, config.DefaultGRPCConnectionTimeoutSecs*time.Second) + + assert.Nil(t, err) + assert.Equal(t, "unit-test-hostname", hostname) + }) + + t.Run("grpc client is unavailable", func(t *testing.T) { + grpcErr := errors.New("no grpc client") + hostname, err := getHostnameFromGRPC(ctx, func(ctx context.Context, opts ...grpc.DialOption) (pb.AgentClient, error) { + return nil, grpcErr + }, config.DefaultGRPCConnectionTimeoutSecs*time.Second) + + assert.NotNil(t, err) + assert.Equal(t, grpcErr, errors.Unwrap(err)) + assert.Empty(t, hostname) + }) +} + +func TestGetHostnameFromCmd(t *testing.T) { + t.Run("valid hostname", func(t *testing.T) { + h, err := getHostnameFromCmd("agent-success", fakeExecCommand) + assert.Nil(t, err) + assert.Equal(t, "unit_test_hostname", h) + }) + + t.Run("no hostname returned", func(t *testing.T) { + h, err := getHostnameFromCmd("agent-empty_hostname", fakeExecCommand) + assert.NotNil(t, err) + assert.Equal(t, "", h) + }) +} + +func TestInvalidHostname(t *testing.T) { + config.SetDetectedFeatures(config.FeatureMap{}) + defer config.SetDetectedFeatures(nil) + + // Lower the GRPC timeout, otherwise the test will time out in CI + config.Datadog.Set("process_config.grpc_connection_timeout_secs", 1) + config.Datadog.Set("hostname", "localhost") + + expectedHostname, _ := os.Hostname() + + hostName, err := resolveHostName() + assert.NoError(t, err) + + assert.Equal(t, expectedHostname, hostName) +} + +// TestGetHostnameShellCmd is a method that is called as a substitute for a dd-agent shell command, +// the GO_TEST_PROCESS flag ensures that if it is called as part of the test suite, it is skipped. +func TestGetHostnameShellCmd(t *testing.T) { + if os.Getenv("GO_TEST_PROCESS") != "1" { + return + } + defer os.Exit(0) + + args := os.Args + for len(args) > 0 { + if args[0] == "--" { + args = args[1:] + break + } + args = args[1:] + } + + if len(args) == 0 { + fmt.Fprintf(os.Stderr, "No command\n") + os.Exit(2) + } + + cmd, args := args[0], args[1:] + switch cmd { + case "agent-success": + assert.EqualValues(t, []string{"hostname"}, args) + fmt.Fprintf(os.Stdout, "unit_test_hostname") + case "agent-empty_hostname": + assert.EqualValues(t, []string{"hostname"}, args) + fmt.Fprintf(os.Stdout, "") + } +} + +// fakeExecCommand is a function that initialises a new exec.Cmd, one which will +// simply call TestShellProcessSuccess rather than the command it is provided. It will +// also pass through the command and its arguments as an argument to TestShellProcessSuccess +func fakeExecCommand(command string, args ...string) *exec.Cmd { + cs := []string{"-test.run=TestGetHostnameShellCmd", "--", command} + cs = append(cs, args...) + cmd := exec.Command(os.Args[0], cs...) + cmd.Env = []string{"GO_TEST_PROCESS=1"} + return cmd +} diff --git a/pkg/process/checks/mocks/check.go b/pkg/process/checks/mocks/check.go index e57834d69e4de..8f30fca00e4d7 100644 --- a/pkg/process/checks/mocks/check.go +++ b/pkg/process/checks/mocks/check.go @@ -1,12 +1,10 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks import ( - config "github.com/DataDog/datadog-agent/pkg/process/config" + checks "github.com/DataDog/datadog-agent/pkg/process/checks" mock "github.com/stretchr/testify/mock" - - process "github.com/DataDog/agent-payload/v5/process" ) // Check is an autogenerated mock type for the Check type @@ -19,13 +17,13 @@ func (_m *Check) Cleanup() { _m.Called() } -// Init provides a mock function with given fields: cfg, info -func (_m *Check) Init(cfg *config.AgentConfig, info *process.SystemInfo) error { - ret := _m.Called(cfg, info) +// Init provides a mock function with given fields: syscfg, info +func (_m *Check) Init(syscfg *checks.SysProbeConfig, info *checks.HostInfo) error { + ret := _m.Called(syscfg, info) var r0 error - if rf, ok := ret.Get(0).(func(*config.AgentConfig, *process.SystemInfo) error); ok { - r0 = rf(cfg, info) + if rf, ok := ret.Get(0).(func(*checks.SysProbeConfig, *checks.HostInfo) error); ok { + r0 = rf(syscfg, info) } else { r0 = ret.Error(0) } @@ -33,6 +31,20 @@ func (_m *Check) Init(cfg *config.AgentConfig, info *process.SystemInfo) error { return r0 } +// IsEnabled provides a mock function with given fields: +func (_m *Check) IsEnabled() bool { + ret := _m.Called() + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + // Name provides a mock function with given fields: func (_m *Check) Name() string { ret := _m.Called() @@ -47,8 +59,8 @@ func (_m *Check) Name() string { return r0 } -// RealTime provides a mock function with given fields: -func (_m *Check) RealTime() bool { +// Realtime provides a mock function with given fields: +func (_m *Check) Realtime() bool { ret := _m.Called() var r0 bool @@ -61,22 +73,22 @@ func (_m *Check) RealTime() bool { return r0 } -// Run provides a mock function with given fields: cfg, groupID -func (_m *Check) Run(cfg *config.AgentConfig, groupID int32) ([]process.MessageBody, error) { - ret := _m.Called(cfg, groupID) +// Run provides a mock function with given fields: nextGroupID, options +func (_m *Check) Run(nextGroupID func() int32, options *checks.RunOptions) (checks.RunResult, error) { + ret := _m.Called(nextGroupID, options) - var r0 []process.MessageBody - if rf, ok := ret.Get(0).(func(*config.AgentConfig, int32) []process.MessageBody); ok { - r0 = rf(cfg, groupID) + var r0 checks.RunResult + if rf, ok := ret.Get(0).(func(func() int32, *checks.RunOptions) checks.RunResult); ok { + r0 = rf(nextGroupID, options) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).([]process.MessageBody) + r0 = ret.Get(0).(checks.RunResult) } } var r1 error - if rf, ok := ret.Get(1).(func(*config.AgentConfig, int32) error); ok { - r1 = rf(cfg, groupID) + if rf, ok := ret.Get(1).(func(func() int32, *checks.RunOptions) error); ok { + r1 = rf(nextGroupID, options) } else { r1 = ret.Error(1) } @@ -98,6 +110,20 @@ func (_m *Check) ShouldSaveLastRun() bool { return r0 } +// SupportsRunOptions provides a mock function with given fields: +func (_m *Check) SupportsRunOptions() bool { + ret := _m.Called() + + var r0 bool + if rf, ok := ret.Get(0).(func() bool); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(bool) + } + + return r0 +} + type mockConstructorTestingTNewCheck interface { mock.TestingT Cleanup(func()) diff --git a/pkg/process/checks/mocks/check_with_real_time.go b/pkg/process/checks/mocks/check_with_real_time.go deleted file mode 100644 index 4513eacb99aa2..0000000000000 --- a/pkg/process/checks/mocks/check_with_real_time.go +++ /dev/null @@ -1,153 +0,0 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. - -package mocks - -import ( - checks "github.com/DataDog/datadog-agent/pkg/process/checks" - config "github.com/DataDog/datadog-agent/pkg/process/config" - - mock "github.com/stretchr/testify/mock" - - process "github.com/DataDog/agent-payload/v5/process" -) - -// CheckWithRealTime is an autogenerated mock type for the CheckWithRealTime type -type CheckWithRealTime struct { - mock.Mock -} - -// Cleanup provides a mock function with given fields: -func (_m *CheckWithRealTime) Cleanup() { - _m.Called() -} - -// Init provides a mock function with given fields: cfg, info -func (_m *CheckWithRealTime) Init(cfg *config.AgentConfig, info *process.SystemInfo) error { - ret := _m.Called(cfg, info) - - var r0 error - if rf, ok := ret.Get(0).(func(*config.AgentConfig, *process.SystemInfo) error); ok { - r0 = rf(cfg, info) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// Name provides a mock function with given fields: -func (_m *CheckWithRealTime) Name() string { - ret := _m.Called() - - var r0 string - if rf, ok := ret.Get(0).(func() string); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(string) - } - - return r0 -} - -// RealTime provides a mock function with given fields: -func (_m *CheckWithRealTime) RealTime() bool { - ret := _m.Called() - - var r0 bool - if rf, ok := ret.Get(0).(func() bool); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(bool) - } - - return r0 -} - -// RealTimeName provides a mock function with given fields: -func (_m *CheckWithRealTime) RealTimeName() string { - ret := _m.Called() - - var r0 string - if rf, ok := ret.Get(0).(func() string); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(string) - } - - return r0 -} - -// Run provides a mock function with given fields: cfg, groupID -func (_m *CheckWithRealTime) Run(cfg *config.AgentConfig, groupID int32) ([]process.MessageBody, error) { - ret := _m.Called(cfg, groupID) - - var r0 []process.MessageBody - if rf, ok := ret.Get(0).(func(*config.AgentConfig, int32) []process.MessageBody); ok { - r0 = rf(cfg, groupID) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]process.MessageBody) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(*config.AgentConfig, int32) error); ok { - r1 = rf(cfg, groupID) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// RunWithOptions provides a mock function with given fields: cfg, nextGroupID, options -func (_m *CheckWithRealTime) RunWithOptions(cfg *config.AgentConfig, nextGroupID func() int32, options checks.RunOptions) (*checks.RunResult, error) { - ret := _m.Called(cfg, nextGroupID, options) - - var r0 *checks.RunResult - if rf, ok := ret.Get(0).(func(*config.AgentConfig, func() int32, checks.RunOptions) *checks.RunResult); ok { - r0 = rf(cfg, nextGroupID, options) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*checks.RunResult) - } - } - - var r1 error - if rf, ok := ret.Get(1).(func(*config.AgentConfig, func() int32, checks.RunOptions) error); ok { - r1 = rf(cfg, nextGroupID, options) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// ShouldSaveLastRun provides a mock function with given fields: -func (_m *CheckWithRealTime) ShouldSaveLastRun() bool { - ret := _m.Called() - - var r0 bool - if rf, ok := ret.Get(0).(func() bool); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(bool) - } - - return r0 -} - -type mockConstructorTestingTNewCheckWithRealTime interface { - mock.TestingT - Cleanup(func()) -} - -// NewCheckWithRealTime creates a new instance of CheckWithRealTime. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -func NewCheckWithRealTime(t mockConstructorTestingTNewCheckWithRealTime) *CheckWithRealTime { - mock := &CheckWithRealTime{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/pkg/process/checks/net.go b/pkg/process/checks/net.go index 97e4bf11dbda2..fa93c51670c36 100644 --- a/pkg/process/checks/net.go +++ b/pkg/process/checks/net.go @@ -12,26 +12,20 @@ import ( "time" model "github.com/DataDog/agent-payload/v5/process" - "go.uber.org/atomic" "github.com/DataDog/datadog-agent/pkg/ebpf" "github.com/DataDog/datadog-agent/pkg/metadata/host" "github.com/DataDog/datadog-agent/pkg/network/dns" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/metadata/parser" "github.com/DataDog/datadog-agent/pkg/process/net" "github.com/DataDog/datadog-agent/pkg/process/net/resolver" putil "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/util/cloudproviders" "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/util/subscriptions" ) var ( - // Connections is a singleton ConnectionsCheck. - Connections = &ConnectionsCheck{ - lastConnsByPID: &atomic.Value{}, - } - // LocalResolver is a singleton LocalResolver LocalResolver = &resolver.LocalResolver{} @@ -42,28 +36,40 @@ var ( ProcessAgentClientID = "process-agent-unique-id" ) +// NewConnectionsCheck returns an instance of the ConnectionsCheck. +func NewConnectionsCheck() Check { + return &ConnectionsCheck{} +} + // ConnectionsCheck collects statistics about live TCP and UDP connections. type ConnectionsCheck struct { + hostInfo *HostInfo + maxConnsPerMessage int tracerClientID string networkID string notInitializedLogLimit *putil.LogLimit - // store the last collection result by PID, currently used to populate network data for processes - // it's in format map[int32][]*model.Connections - lastConnsByPID *atomic.Value + dockerFilter *parser.DockerProxy serviceExtractor *parser.ServiceExtractor processData *ProcessData + + processConnRatesTransmitter subscriptions.Transmitter[ProcessConnRates] } +// ProcessConnRates describes connection rates for processes +type ProcessConnRates map[int32]*model.ProcessNetworks + // Init initializes a ConnectionsCheck instance. -func (c *ConnectionsCheck) Init(cfg *config.AgentConfig, _ *model.SystemInfo) error { +func (c *ConnectionsCheck) Init(syscfg *SysProbeConfig, hostInfo *HostInfo) error { + c.hostInfo = hostInfo + c.maxConnsPerMessage = syscfg.MaxConnsPerMessage c.notInitializedLogLimit = putil.NewLogLimit(1, time.Minute*10) // We use the current process PID as the system-probe client ID c.tracerClientID = ProcessAgentClientID // Calling the remote tracer will cause it to initialize and check connectivity - net.SetSystemProbePath(cfg.SystemProbeAddress) + net.SetSystemProbePath(syscfg.SystemProbeAddress) tu, err := net.GetRemoteSystemProbeUtil() if err != nil { @@ -87,14 +93,26 @@ func (c *ConnectionsCheck) Init(cfg *config.AgentConfig, _ *model.SystemInfo) er c.serviceExtractor = parser.NewServiceExtractor() c.processData.Register(c.dockerFilter) c.processData.Register(c.serviceExtractor) + return nil } +// IsEnabled returns true if the check is enabled by configuration +func (c *ConnectionsCheck) IsEnabled() bool { + // TODO - move config check logic here + return true +} + +// SupportsRunOptions returns true if the check supports RunOptions +func (c *ConnectionsCheck) SupportsRunOptions() bool { + return false +} + // Name returns the name of the ConnectionsCheck. func (c *ConnectionsCheck) Name() string { return ConnectionsCheckName } -// RealTime indicates if this check only runs in real-time mode. -func (c *ConnectionsCheck) RealTime() bool { return false } +// Realtime indicates if this check only runs in real-time mode. +func (c *ConnectionsCheck) Realtime() bool { return false } // ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares func (c *ConnectionsCheck) ShouldSaveLastRun() bool { return false } @@ -104,7 +122,7 @@ func (c *ConnectionsCheck) ShouldSaveLastRun() bool { return false } // For each connection we'll return a `model.Connection` // that will be bundled up into a `CollectorConnections`. // See agent.proto for the schema of the message and models. -func (c *ConnectionsCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { +func (c *ConnectionsCheck) Run(nextGroupID func() int32, _ *RunOptions) (RunResult, error) { start := time.Now() conns, err := c.getConnections() @@ -126,10 +144,13 @@ func (c *ConnectionsCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model. // Resolve the Raddr side of connections for local containers LocalResolver.Resolve(conns) - c.lastConnsByPID.Store(getConnectionsByPID(conns)) + c.notifyProcessConnRates(conns) log.Debugf("collected connections in %s", time.Since(start)) - return batchConnections(cfg, groupID, conns.Conns, conns.Dns, c.networkID, conns.ConnTelemetryMap, conns.CompilationTelemetryByAsset, conns.KernelHeaderFetchResult, conns.CORETelemetryByAsset, conns.Domains, conns.Routes, conns.Tags, conns.AgentConfiguration, c.serviceExtractor), nil + + groupID := nextGroupID() + messages := batchConnections(c.hostInfo, c.maxConnsPerMessage, groupID, conns.Conns, conns.Dns, c.networkID, conns.ConnTelemetryMap, conns.CompilationTelemetryByAsset, conns.KernelHeaderFetchResult, conns.CORETelemetryByAsset, conns.Domains, conns.Routes, conns.Tags, conns.AgentConfiguration, c.serviceExtractor) + return StandardRunResult(messages), nil } // Cleanup frees any resource held by the ConnectionsCheck before the agent exits @@ -146,20 +167,31 @@ func (c *ConnectionsCheck) getConnections() (*model.Connections, error) { return tu.GetConnections(c.tracerClientID) } -func (c *ConnectionsCheck) getLastConnectionsByPID() map[int32][]*model.Connection { - if result := c.lastConnsByPID.Load(); result != nil { - return result.(map[int32][]*model.Connection) +func (c *ConnectionsCheck) notifyProcessConnRates(conns *model.Connections) { + if len(c.processConnRatesTransmitter.Chs) == 0 { + return } - return nil -} -// getConnectionsByPID groups a list of connection objects by PID -func getConnectionsByPID(conns *model.Connections) map[int32][]*model.Connection { - result := make(map[int32][]*model.Connection) - for _, conn := range conns.Conns { - result[conn.Pid] = append(result[conn.Pid], conn) + connCheckIntervalS := int(GetInterval(ConnectionsCheckName) / time.Second) + + connRates := make(ProcessConnRates) + for _, c := range conns.Conns { + rates, ok := connRates[c.Pid] + if !ok { + connRates[c.Pid] = &model.ProcessNetworks{ConnectionRate: 1, BytesRate: float32(c.LastBytesReceived) + float32(c.LastBytesSent)} + continue + } + + rates.BytesRate += float32(c.LastBytesSent) + float32(c.LastBytesReceived) + rates.ConnectionRate++ } - return result + + for _, rates := range connRates { + rates.BytesRate /= float32(connCheckIntervalS) + rates.ConnectionRate /= float32(connCheckIntervalS) + } + + c.processConnRatesTransmitter.Notify(connRates) } func convertDNSEntry(dnstable map[string]*model.DNSDatabaseEntry, namemap map[string]int32, namedb *[]string, ip string, entry *model.DNSEntry) { @@ -245,7 +277,8 @@ func remapDNSStatsByOffset(c *model.Connection, indexToOffset []int32) { // Connections are split up into a chunks of a configured size conns per message to limit the message size on intake. func batchConnections( - cfg *config.AgentConfig, + hostInfo *HostInfo, + maxConnsPerMessage int, groupID int32, cxs []*model.Connection, dns map[string]*model.DNSEntry, @@ -260,12 +293,12 @@ func batchConnections( agentCfg *model.AgentConfiguration, serviceExtractor *parser.ServiceExtractor, ) []model.MessageBody { - groupSize := groupSize(len(cxs), cfg.MaxConnsPerMessage) + groupSize := groupSize(len(cxs), maxConnsPerMessage) batches := make([]model.MessageBody, 0, groupSize) dnsEncoder := model.NewV2DNSEncoder() - if len(cxs) > cfg.MaxConnsPerMessage { + if len(cxs) > maxConnsPerMessage { // Sort connections by remote IP/PID for more efficient resolution sort.Slice(cxs, func(i, j int) bool { if cxs[i].Raddr.Ip != cxs[j].Raddr.Ip { @@ -276,7 +309,7 @@ func batchConnections( } for len(cxs) > 0 { - batchSize := min(cfg.MaxConnsPerMessage, len(cxs)) + batchSize := min(maxConnsPerMessage, len(cxs)) batchConns := cxs[:batchSize] // Connections for this particular batch ctrIDForPID := make(map[int32]string) @@ -364,7 +397,7 @@ func batchConnections( } cc := &model.CollectorConnections{ AgentConfiguration: agentCfg, - HostName: cfg.HostName, + HostName: hostInfo.HostName, NetworkId: networkID, Connections: batchConns, GroupId: groupID, @@ -372,7 +405,7 @@ func batchConnections( ContainerForPid: ctrIDForPID, EncodedDomainDatabase: encodedNameDb, EncodedDnsLookups: mappedDNSLookups, - ContainerHostType: cfg.ContainerHostType, + ContainerHostType: hostInfo.ContainerHostType, Routes: batchRoutes, EncodedConnectionsTags: tagsEncoder.Buffer(), } diff --git a/pkg/process/checks/net_test.go b/pkg/process/checks/net_test.go index fd96cabac03c3..e5aec3d9effa8 100644 --- a/pkg/process/checks/net_test.go +++ b/pkg/process/checks/net_test.go @@ -15,7 +15,6 @@ import ( ddconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/network/dns" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/metadata/parser" "github.com/DataDog/datadog-agent/pkg/process/procutil" ) @@ -55,9 +54,9 @@ func TestDNSNameEncoding(t *testing.T) { "1.1.2.4": {Names: []string{"host4.domain.com"}}, "1.1.2.5": {Names: nil}, } - cfg := config.NewDefaultAgentConfig() ex := parser.NewServiceExtractor() - chunks := batchConnections(cfg, 0, p, dns, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, nil, nil, ex) + maxConnsPerMessage := 10 + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, p, dns, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, nil, nil, ex) assert.Equal(t, len(chunks), 1) chunk := chunks[0] @@ -80,8 +79,6 @@ func TestDNSNameEncoding(t *testing.T) { } func TestNetworkConnectionBatching(t *testing.T) { - cfg := config.NewDefaultAgentConfig() - for i, tc := range []struct { cur, last []*model.Connection maxSize int @@ -119,13 +116,12 @@ func TestNetworkConnectionBatching(t *testing.T) { expectedChunks: 3, }, } { - cfg.MaxConnsPerMessage = tc.maxSize ctm := map[string]int64{} rctm := map[string]*model.RuntimeCompilationTelemetry{} khfr := model.KernelHeaderFetchResult_FetchNotAttempted coretm := map[string]model.COREResult{} ex := parser.NewServiceExtractor() - chunks := batchConnections(cfg, 0, tc.cur, map[string]*model.DNSEntry{}, "nid", ctm, rctm, khfr, coretm, nil, nil, nil, nil, ex) + chunks := batchConnections(&HostInfo{}, tc.maxSize, 0, tc.cur, map[string]*model.DNSEntry{}, "nid", ctm, rctm, khfr, coretm, nil, nil, nil, nil, ex) assert.Len(t, chunks, tc.expectedChunks, "len %d", i) total := 0 @@ -163,10 +159,9 @@ func TestNetworkConnectionBatchingWithDNS(t *testing.T) { "1.1.2.3": {Names: []string{"datacat.edu"}}, } - cfg := config.NewDefaultAgentConfig() - cfg.MaxConnsPerMessage = 1 + maxConnsPerMessage := 1 ex := parser.NewServiceExtractor() - chunks := batchConnections(cfg, 0, p, dns, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, nil, nil, ex) + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, p, dns, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, nil, nil, ex) assert.Len(t, chunks, 4) total := 0 @@ -204,10 +199,9 @@ func TestBatchSimilarConnectionsTogether(t *testing.T) { p[4].Raddr.Ip = "1.2.3.4" p[5].Raddr.Ip = "1.3.4.5" - cfg := config.NewDefaultAgentConfig() - cfg.MaxConnsPerMessage = 2 + maxConnsPerMessage := 2 ex := parser.NewServiceExtractor() - chunks := batchConnections(cfg, 0, p, map[string]*model.DNSEntry{}, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, nil, nil, ex) + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, p, map[string]*model.DNSEntry{}, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, nil, nil, ex) assert.Len(t, chunks, 3) total := 0 @@ -289,10 +283,9 @@ func TestNetworkConnectionBatchingWithDomainsByQueryType(t *testing.T) { } dnsmap := map[string]*model.DNSEntry{} - cfg := config.NewDefaultAgentConfig() - cfg.MaxConnsPerMessage = 1 + maxConnsPerMessage := 1 ex := parser.NewServiceExtractor() - chunks := batchConnections(cfg, 0, conns, dnsmap, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, domains, nil, nil, nil, ex) + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, conns, dnsmap, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, domains, nil, nil, nil, ex) assert.Len(t, chunks, 4) total := 0 @@ -408,10 +401,9 @@ func TestNetworkConnectionBatchingWithDomains(t *testing.T) { } dnsmap := map[string]*model.DNSEntry{} - cfg := config.NewDefaultAgentConfig() - cfg.MaxConnsPerMessage = 1 + maxConnsPerMessage := 1 ex := parser.NewServiceExtractor() - chunks := batchConnections(cfg, 0, conns, dnsmap, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, domains, nil, nil, nil, ex) + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, conns, dnsmap, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, domains, nil, nil, nil, ex) assert.Len(t, chunks, 4) total := 0 @@ -518,10 +510,9 @@ func TestNetworkConnectionBatchingWithRoutes(t *testing.T) { conns[6].RouteIdx = 3 conns[7].RouteIdx = 2 - cfg := config.NewDefaultAgentConfig() - cfg.MaxConnsPerMessage = 4 + maxConnsPerMessage := 4 ex := parser.NewServiceExtractor() - chunks := batchConnections(cfg, 0, conns, nil, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, routes, nil, nil, ex) + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, conns, nil, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, routes, nil, nil, ex) assert.Len(t, chunks, 2) total := 0 @@ -587,10 +578,9 @@ func TestNetworkConnectionTags(t *testing.T) { } foundTags := []fakeConn{} - cfg := config.NewDefaultAgentConfig() - cfg.MaxConnsPerMessage = 4 + maxConnsPerMessage := 4 ex := parser.NewServiceExtractor() - chunks := batchConnections(cfg, 0, conns, nil, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, tags, nil, ex) + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, conns, nil, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, tags, nil, ex) assert.Len(t, chunks, 2) total := 0 @@ -625,11 +615,11 @@ func TestNetworkConnectionTagsWithService(t *testing.T) { mockConfig := ddconfig.Mock(t) mockConfig.Set("service_monitoring_config.process_service_inference.enabled", true) - cfg := config.NewDefaultAgentConfig() + maxConnsPerMessage := 1 ex := parser.NewServiceExtractor() ex.Extract(procsByPid) - chunks := batchConnections(cfg, 0, conns, nil, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, tags, nil, ex) + chunks := batchConnections(&HostInfo{}, maxConnsPerMessage, 0, conns, nil, "nid", nil, nil, model.KernelHeaderFetchResult_FetchNotAttempted, nil, nil, nil, tags, nil, ex) assert.Len(t, chunks, 1) connections := chunks[0].(*model.CollectorConnections) diff --git a/pkg/process/checks/pod.go b/pkg/process/checks/pod.go index 8a4f5d9b28eb9..c55ec9792fb2d 100644 --- a/pkg/process/checks/pod.go +++ b/pkg/process/checks/pod.go @@ -13,50 +13,60 @@ import ( "fmt" "time" - model "github.com/DataDog/agent-payload/v5/process" - "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors" k8sProcessors "github.com/DataDog/datadog-agent/pkg/collector/corechecks/cluster/orchestrator/processors/k8s" "github.com/DataDog/datadog-agent/pkg/orchestrator" oconfig "github.com/DataDog/datadog-agent/pkg/orchestrator/config" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/clustername" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/kubelet" ) -// Pod is a singleton PodCheck. -var Pod = &PodCheck{ - config: oconfig.NewDefaultOrchestratorConfig(), +// NewPodCheck returns an instance of the Pod check +func NewPodCheck() Check { + return &PodCheck{ + config: oconfig.NewDefaultOrchestratorConfig(), + } } // PodCheck is a check that returns container metadata and stats. type PodCheck struct { - sysInfo *model.SystemInfo + hostInfo *HostInfo containerFailedLogLimit *util.LogLimit processor *processors.Processor config *oconfig.OrchestratorConfig } // Init initializes a PodCheck instance. -func (c *PodCheck) Init(_ *config.AgentConfig, info *model.SystemInfo) error { +func (c *PodCheck) Init(_ *SysProbeConfig, hostInfo *HostInfo) error { + c.hostInfo = hostInfo c.containerFailedLogLimit = util.NewLogLimit(10, time.Minute*10) c.processor = processors.NewProcessor(new(k8sProcessors.PodHandlers)) - c.sysInfo = info return c.config.Load() } +// IsEnabled returns true if the check is enabled by configuration +func (c *PodCheck) IsEnabled() bool { + // TODO - move config check logic here + return true +} + +// SupportsRunOptions returns true if the check supports RunOptions +func (c *PodCheck) SupportsRunOptions() bool { + return false +} + // Name returns the name of the ProcessCheck. func (c *PodCheck) Name() string { return PodCheckName } -// RealTime indicates if this check only runs in real-time mode. -func (c *PodCheck) RealTime() bool { return false } +// Realtime indicates if this check only runs in real-time mode. +func (c *PodCheck) Realtime() bool { return false } // ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares func (c *PodCheck) ShouldSaveLastRun() bool { return true } // Run runs the PodCheck to collect a list of running pods -func (c *PodCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { +func (c *PodCheck) Run(nextGroupID func() int32, _ *RunOptions) (RunResult, error) { kubeUtil, err := kubelet.GetKubeUtil() if err != nil { return nil, err @@ -72,10 +82,11 @@ func (c *PodCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageB return nil, err } + groupID := nextGroupID() ctx := &processors.ProcessorContext{ ClusterID: clusterID, Cfg: c.config, - HostName: cfg.HostName, + HostName: c.hostInfo.HostName, MsgGroupID: groupID, NodeType: orchestrator.K8sPod, ApiGroupVersionTag: fmt.Sprintf("kube_api_version:%s", "v1"), @@ -93,7 +104,7 @@ func (c *PodCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageB orchestrator.SetCacheStats(len(podList), processed, ctx.NodeType) - return metadataMessages, nil + return StandardRunResult(metadataMessages), nil } // Cleanup frees any resource held by the PodCheck before the agent exits diff --git a/pkg/process/checks/pod_null.go b/pkg/process/checks/pod_null.go index bd9e80de2d56b..6421837a50490 100644 --- a/pkg/process/checks/pod_null.go +++ b/pkg/process/checks/pod_null.go @@ -10,38 +10,44 @@ package checks import ( "fmt" - - model "github.com/DataDog/agent-payload/v5/process" - - "github.com/DataDog/datadog-agent/pkg/process/config" ) -// Pod is a singleton PodCheck. -var Pod = &PodCheck{} +// NewPodCheck returns an instance of the Pod check +func NewPodCheck() Check { + return &PodCheck{} +} // PodCheck is a check that returns container metadata and stats. type PodCheck struct { - sysInfo *model.SystemInfo } // Init initializes a PodCheck instance. -func (c *PodCheck) Init(cfg *config.AgentConfig, info *model.SystemInfo) error { - c.sysInfo = info +func (c *PodCheck) Init(_ *SysProbeConfig, hostInfo *HostInfo) error { return nil } +// IsEnabled returns true if the check is enabled by configuration +func (c *PodCheck) IsEnabled() bool { + return false +} + +// SupportsRunOptions returns true if the check supports RunOptions +func (c *PodCheck) SupportsRunOptions() bool { + return false +} + // Name returns the name of the ProcessCheck. func (c *PodCheck) Name() string { return "pod" } -// RealTime indicates if this check only runs in real-time mode. -func (c *PodCheck) RealTime() bool { return false } +// Realtime indicates if this check only runs in real-time mode. +func (c *PodCheck) Realtime() bool { return false } // ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares func (c *PodCheck) ShouldSaveLastRun() bool { return true } // Run runs the PodCheck to collect a list of running pods -func (c *PodCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { - return nil, fmt.Errorf("Not implemented") +func (c *PodCheck) Run(_ func() int32, _ *RunOptions) (RunResult, error) { + return nil, fmt.Errorf("not implemented") } // Cleanup frees any resource held by the PodCheck before the agent exits diff --git a/pkg/process/checks/process.go b/pkg/process/checks/process.go index 69895c3b55c0b..2f671acb6646b 100644 --- a/pkg/process/checks/process.go +++ b/pkg/process/checks/process.go @@ -14,15 +14,16 @@ import ( model "github.com/DataDog/agent-payload/v5/process" "github.com/DataDog/gopsutil/cpu" + "go.uber.org/atomic" ddconfig "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/net" "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/process/statsd" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/util/cloudproviders" "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/util/subscriptions" ) const ( @@ -34,15 +35,19 @@ const ( configDisallowList = configPrefix + "blacklist_patterns" ) -// Process is a singleton ProcessCheck. -var Process = &ProcessCheck{ - scrubber: procutil.NewDefaultDataScrubber(), +// NewProcessCehck returns an instance of the ProcessCheck. +func NewProcessCheck() Check { + return &ProcessCheck{ + scrubber: procutil.NewDefaultDataScrubber(), + } } -var _ CheckWithRealTime = (*ProcessCheck)(nil) - var errEmptyCPUTime = errors.New("empty CPU time information returned") +const ( + ProcessDiscoveryHint int32 = 1 << iota // 1 +) + // ProcessCheck collects full state, including cmdline args and related metadata, // for live and running processes. The instance will store some state between // checks that will be used for rates, cpu calculations, etc. @@ -54,7 +59,7 @@ type ProcessCheck struct { // disallowList to hide processes disallowList []*regexp.Regexp - sysInfo *model.SystemInfo + hostInfo *HostInfo lastCPUTime cpu.TimesStat lastProcs map[int32]*procutil.Process lastRun time.Time @@ -78,12 +83,19 @@ type ProcessCheck struct { maxBatchSize int maxBatchBytes int + + checkCount uint32 + skipAmount uint32 + + lastConnRates *atomic.Pointer[ProcessConnRates] + connRatesReceiver subscriptions.Receiver[ProcessConnRates] } // Init initializes the singleton ProcessCheck. -func (p *ProcessCheck) Init(_ *config.AgentConfig, info *model.SystemInfo) error { - p.sysInfo = info - p.probe = newProcessProbe(procutil.WithPermission(Process.SysprobeProcessModuleEnabled)) +func (p *ProcessCheck) Init(syscfg *SysProbeConfig, info *HostInfo) error { + p.hostInfo = info + p.SysprobeProcessModuleEnabled = syscfg.ProcessModuleEnabled + p.probe = newProcessProbe(procutil.WithPermission(syscfg.ProcessModuleEnabled)) p.containerProvider = util.GetSharedContainerProvider() p.notInitializedLogLimit = util.NewLogLimit(1, time.Minute*10) @@ -97,44 +109,73 @@ func (p *ProcessCheck) Init(_ *config.AgentConfig, info *model.SystemInfo) error p.maxBatchSize = getMaxBatchSize() p.maxBatchBytes = getMaxBatchBytes() + p.skipAmount = uint32(ddconfig.Datadog.GetInt32("process_config.process_discovery.hint_frequency")) + if p.skipAmount == 0 { + log.Warnf("process_config.process_discovery.hint_frequency must be greater than 0. using default value %d", + ddconfig.DefaultProcessDiscoveryHintFrequency) + ddconfig.Datadog.Set("process_config.process_discovery.hint_frequency", ddconfig.DefaultProcessDiscoveryHintFrequency) + p.skipAmount = ddconfig.DefaultProcessDiscoveryHintFrequency + } + initScrubber(p.scrubber) p.disallowList = initDisallowList() + + p.initConnRates() return nil } -// Name returns the name of the ProcessCheck. -func (p *ProcessCheck) Name() string { return ProcessCheckName } +func (p *ProcessCheck) initConnRates() { + p.lastConnRates = atomic.NewPointer[ProcessConnRates](nil) + p.connRatesReceiver = subscriptions.NewReceiver[ProcessConnRates]() -// RealTimeName returns the name of the RTProcessCheck -func (p *ProcessCheck) RealTimeName() string { return RTProcessCheckName } - -// RealTime indicates if this check only runs in real-time mode. -func (p *ProcessCheck) RealTime() bool { return false } + go p.updateConnRates() +} -// ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares -func (p *ProcessCheck) ShouldSaveLastRun() bool { return true } +func (p *ProcessCheck) updateConnRates() { + for { + connRates, ok := <-p.connRatesReceiver.Ch + if !ok { + return + } + p.lastConnRates.Store(&connRates) + } +} -// Run runs the ProcessCheck to collect a list of running processes and relevant -// stats for each. On most POSIX systems this will use a mix of procfs and other -// OS-specific APIs to collect this information. The bulk of this collection is -// abstracted into the `gopsutil` library. -// Processes are split up into a chunks of at most 100 processes per message to -// limit the message size on intake. -// See agent.proto for the schema of the message and models used. -func (p *ProcessCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { - result, err := p.run(cfg, groupID, false) - if err != nil { - return nil, err +func (p *ProcessCheck) getLastConnRates() ProcessConnRates { + if p.lastConnRates == nil { + return nil } + if result := p.lastConnRates.Load(); result != nil { + return *result + } + return nil +} - return result.Standard, nil +// IsEnabled returns true if the check is enabled by configuration +func (p *ProcessCheck) IsEnabled() bool { + // TODO - move config check logic here + return true } +// SupportsRunOptions returns true if the check supports RunOptions +func (p *ProcessCheck) SupportsRunOptions() bool { + return true +} + +// Name returns the name of the ProcessCheck. +func (p *ProcessCheck) Name() string { return ProcessCheckName } + +// Realtime indicates if this check only runs in real-time mode. +func (p *ProcessCheck) Realtime() bool { return false } + +// ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares +func (p *ProcessCheck) ShouldSaveLastRun() bool { return true } + // Cleanup frees any resource held by the ProcessCheck before the agent exits func (p *ProcessCheck) Cleanup() {} -func (p *ProcessCheck) run(cfg *config.AgentConfig, groupID int32, collectRealTime bool) (*RunResult, error) { +func (p *ProcessCheck) run(groupID int32, collectRealTime bool) (RunResult, error) { start := time.Now() cpuTimes, err := cpu.Times(false) if err != nil { @@ -188,12 +229,15 @@ func (p *ProcessCheck) run(cfg *config.AgentConfig, groupID int32, collectRealTi p.realtimeLastProcs = procsToStats(p.lastProcs) p.realtimeLastRun = p.lastRun } - return &RunResult{}, nil + return CombinedRunResult{}, nil } - connsByPID := Connections.getLastConnectionsByPID() - procsByCtr := fmtProcesses(cfg, p.scrubber, p.disallowList, procs, p.lastProcs, pidToCid, cpuTimes[0], p.lastCPUTime, p.lastRun, connsByPID) - messages, totalProcs, totalContainers := createProcCtrMessages(procsByCtr, containers, cfg, p.maxBatchSize, p.maxBatchBytes, p.sysInfo, groupID, p.networkID) + collectorProcHints := p.generateHints() + p.checkCount++ + + connsRates := p.getLastConnRates() + procsByCtr := fmtProcesses(p.scrubber, p.disallowList, procs, p.lastProcs, pidToCid, cpuTimes[0], p.lastCPUTime, p.lastRun, connsRates) + messages, totalProcs, totalContainers := createProcCtrMessages(p.hostInfo, procsByCtr, containers, p.maxBatchSize, p.maxBatchBytes, groupID, p.networkID, collectorProcHints) // Store the last state for comparison on the next run. // Note: not storing the filtered in case there are new processes that haven't had a chance to show up twice. @@ -201,7 +245,7 @@ func (p *ProcessCheck) run(cfg *config.AgentConfig, groupID int32, collectRealTi p.lastCPUTime = cpuTimes[0] p.lastRun = time.Now() - result := &RunResult{ + result := &CombinedRunResult{ Standard: messages, } if collectRealTime { @@ -209,24 +253,24 @@ func (p *ProcessCheck) run(cfg *config.AgentConfig, groupID int32, collectRealTi if p.realtimeLastProcs != nil { // TODO: deduplicate chunking with RT collection - chunkedStats := fmtProcessStats(cfg, p.maxBatchSize, stats, p.realtimeLastProcs, pidToCid, cpuTimes[0], p.realtimeLastCPUTime, p.realtimeLastRun, connsByPID) + chunkedStats := fmtProcessStats(p.maxBatchSize, stats, p.realtimeLastProcs, pidToCid, cpuTimes[0], p.realtimeLastCPUTime, p.realtimeLastRun, connsRates) groupSize := len(chunkedStats) chunkedCtrStats := convertAndChunkContainers(containers, groupSize) messages := make([]model.MessageBody, 0, groupSize) for i := 0; i < groupSize; i++ { messages = append(messages, &model.CollectorRealTime{ - HostName: cfg.HostName, + HostName: p.hostInfo.HostName, Stats: chunkedStats[i], ContainerStats: chunkedCtrStats[i], GroupId: groupID, GroupSize: int32(groupSize), - NumCpus: int32(len(p.sysInfo.Cpus)), - TotalMemory: p.sysInfo.TotalMemory, - ContainerHostType: cfg.ContainerHostType, + NumCpus: int32(len(p.hostInfo.SystemInfo.Cpus)), + TotalMemory: p.hostInfo.SystemInfo.TotalMemory, + ContainerHostType: p.hostInfo.ContainerHostType, }) } - result.RealTime = messages + result.Realtime = messages } p.realtimeLastCPUTime = p.lastCPUTime @@ -241,6 +285,16 @@ func (p *ProcessCheck) run(cfg *config.AgentConfig, groupID int32, collectRealTi return result, nil } +func (p *ProcessCheck) generateHints() int32 { + var hints int32 + + if p.checkCount%p.skipAmount == 0 { + log.Tracef("generated a process discovery hint on check #%d", p.checkCount) + hints |= ProcessDiscoveryHint + } + return hints +} + func procsToStats(procs map[int32]*procutil.Process) map[int32]*procutil.Stats { stats := map[int32]*procutil.Stats{} for pid, proc := range procs { @@ -249,42 +303,47 @@ func procsToStats(procs map[int32]*procutil.Process) map[int32]*procutil.Stats { return stats } -// RunWithOptions collects process data (regular metadata + stats) and/or realtime process data (stats only) -// Messages are grouped as RunResult instances with CheckName identifying the type -func (p *ProcessCheck) RunWithOptions(cfg *config.AgentConfig, nextGroupID func() int32, options RunOptions) (*RunResult, error) { +// Run collects process data (regular metadata + stats) and/or realtime process data (stats only) +func (p *ProcessCheck) Run(nextGroupID func() int32, options *RunOptions) (RunResult, error) { + if options == nil { + return p.run(nextGroupID(), false) + } + if options.RunStandard { log.Tracef("Running process check") - return p.run(cfg, nextGroupID(), options.RunRealTime) + return p.run(nextGroupID(), options.RunRealtime) } - if options.RunRealTime { + if options.RunRealtime { log.Tracef("Running rtprocess check") - return p.runRealtime(cfg, nextGroupID()) + return p.runRealtime(nextGroupID()) } return nil, errors.New("invalid run options for check") } func createProcCtrMessages( + hostInfo *HostInfo, procsByCtr map[string][]*model.Process, containers []*model.Container, - cfg *config.AgentConfig, maxBatchSize int, maxBatchWeight int, - sysInfo *model.SystemInfo, groupID int32, networkID string, + hints int32, ) ([]model.MessageBody, int, int) { collectorProcs, totalProcs, totalContainers := chunkProcessesAndContainers(procsByCtr, containers, maxBatchSize, maxBatchWeight) // fill in GroupSize for each CollectorProc and convert them to final messages // also count containers and processes - messages := make([]model.MessageBody, 0, len(collectorProcs)) - for _, m := range collectorProcs { - m.GroupSize = int32(len(collectorProcs)) - m.HostName = cfg.HostName + messages := make([]model.MessageBody, 0, len(*collectorProcs)) + for idx := range *collectorProcs { + m := &(*collectorProcs)[idx] + m.GroupSize = int32(len(*collectorProcs)) + m.HostName = hostInfo.HostName m.NetworkId = networkID - m.Info = sysInfo + m.Info = hostInfo.SystemInfo m.GroupId = groupID - m.ContainerHostType = cfg.ContainerHostType + m.ContainerHostType = hostInfo.ContainerHostType + m.Hints = &model.CollectorProc_HintMask{HintMask: hints} messages = append(messages, m) } @@ -299,8 +358,12 @@ func chunkProcessesAndContainers( containers []*model.Container, maxChunkSize int, maxChunkWeight int, -) ([]*model.CollectorProc, int, int) { - chunker := &collectorProcChunker{} +) (*[]model.CollectorProc, int, int) { + chunker := &util.ChunkAllocator[model.CollectorProc, *model.Process]{ + AppendToChunk: func(c *model.CollectorProc, ps []*model.Process) { + c.Processes = append(c.Processes, ps...) + }, + } totalProcs := len(procsByCtr[emptyCtrID]) @@ -313,23 +376,21 @@ func chunkProcessesAndContainers( chunkProcessesBySizeAndWeight(procs, ctr, maxChunkSize, maxChunkWeight, chunker) } - return chunker.collectorProcs, totalProcs, totalContainers + return chunker.GetChunks(), totalProcs, totalContainers } // fmtProcesses goes through each process, converts them to process object and group them by containers // non-container processes would be in a single group with key as empty string "" func fmtProcesses( - cfg *config.AgentConfig, scrubber *procutil.DataScrubber, disallowList []*regexp.Regexp, procs, lastProcs map[int32]*procutil.Process, ctrByProc map[int]string, syst2, syst1 cpu.TimesStat, lastRun time.Time, - connsByPID map[int32][]*model.Connection, + connRates ProcessConnRates, ) map[string][]*model.Process { procsByCtr := make(map[string][]*model.Process) - connCheckIntervalS := int(GetInterval(ConnectionsCheckName) / time.Second) for _, fp := range procs { if skipProcess(disallowList, fp, lastProcs) { @@ -353,7 +414,10 @@ func fmtProcesses( VoluntaryCtxSwitches: uint64(fp.Stats.CtxSwitches.Voluntary), InvoluntaryCtxSwitches: uint64(fp.Stats.CtxSwitches.Involuntary), ContainerId: ctrByProc[int(fp.Pid)], - Networks: formatNetworks(connsByPID[fp.Pid], connCheckIntervalS), + } + + if connRates != nil { + proc.Networks = connRates[fp.Pid] } _, ok := procsByCtr[proc.ContainerId] if !ok { diff --git a/pkg/process/checks/process_common_test.go b/pkg/process/checks/process_common_test.go index 9037d01ff59ab..79d9de727e84f 100644 --- a/pkg/process/checks/process_common_test.go +++ b/pkg/process/checks/process_common_test.go @@ -74,7 +74,6 @@ func makeProcessModel(t *testing.T, process *procutil.Process) *model.Process { }, CreateTime: process.Stats.CreateTime, IoStat: &model.IOStat{}, - Networks: &model.ProcessNetworks{}, } } @@ -95,8 +94,7 @@ func makeProcessStatModels(t *testing.T, processes ...*procutil.Process) []*mode SystemPct: float32(cpu.SystemPct), TotalPct: float32(cpu.UserPct + cpu.SystemPct), }, - IoStat: &model.IOStat{}, - Networks: &model.ProcessNetworks{}, + IoStat: &model.IOStat{}, }) } diff --git a/pkg/process/checks/process_discovery_check.go b/pkg/process/checks/process_discovery_check.go index efcf724b38705..6a31e2602a526 100644 --- a/pkg/process/checks/process_discovery_check.go +++ b/pkg/process/checks/process_discovery_check.go @@ -11,46 +11,58 @@ import ( model "github.com/DataDog/agent-payload/v5/process" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/procutil" ) -// ProcessDiscovery is a ProcessDiscoveryCheck singleton. ProcessDiscovery should not be instantiated elsewhere. -var ProcessDiscovery = &ProcessDiscoveryCheck{} +// NewProcessDiscoveryCheck returns an instance of the ProcessDiscoveryCheck. +func NewProcessDiscoveryCheck() Check { + return &ProcessDiscoveryCheck{} +} // ProcessDiscoveryCheck is a check that gathers basic process metadata. // It uses its own ProcessDiscovery payload. // The goal of this check is to collect information about possible integrations that may be enabled by the end user. type ProcessDiscoveryCheck struct { probe procutil.Probe - info *model.SystemInfo + info *HostInfo initCalled bool maxBatchSize int } // Init initializes the ProcessDiscoveryCheck. It is a runtime error to call Run without first having called Init. -func (d *ProcessDiscoveryCheck) Init(_ *config.AgentConfig, info *model.SystemInfo) error { +func (d *ProcessDiscoveryCheck) Init(syscfg *SysProbeConfig, info *HostInfo) error { d.info = info d.initCalled = true - d.probe = newProcessProbe(procutil.WithPermission(Process.SysprobeProcessModuleEnabled)) + d.probe = newProcessProbe(procutil.WithPermission(syscfg.ProcessModuleEnabled)) d.maxBatchSize = getMaxBatchSize() return nil } +// IsEnabled returns true if the check is enabled by configuration +func (d *ProcessDiscoveryCheck) IsEnabled() bool { + // TODO - move config check logic here + return true +} + +// SupportsRunOptions returns true if the check supports RunOptions +func (d *ProcessDiscoveryCheck) SupportsRunOptions() bool { + return false +} + // Name returns the name of the ProcessDiscoveryCheck. func (d *ProcessDiscoveryCheck) Name() string { return DiscoveryCheckName } -// RealTime returns a value that says whether this check should be run in real time. -func (d *ProcessDiscoveryCheck) RealTime() bool { return false } +// Realtime returns a value that says whether this check should be run in real time. +func (d *ProcessDiscoveryCheck) Realtime() bool { return false } // ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares func (d *ProcessDiscoveryCheck) ShouldSaveLastRun() bool { return true } // Run collects process metadata, and packages it into a CollectorProcessDiscovery payload to be sent. // It is a runtime error to call Run without first having called Init. -func (d *ProcessDiscoveryCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { +func (d *ProcessDiscoveryCheck) Run(nextGroupID func() int32, _ *RunOptions) (RunResult, error) { if !d.initCalled { return nil, fmt.Errorf("ProcessDiscoveryCheck.Run called before Init") } @@ -62,15 +74,17 @@ func (d *ProcessDiscoveryCheck) Run(cfg *config.AgentConfig, groupID int32) ([]m } host := &model.Host{ - Name: cfg.HostName, - NumCpus: calculateNumCores(d.info), - TotalMemory: d.info.TotalMemory, + Name: d.info.HostName, + NumCpus: calculateNumCores(d.info.SystemInfo), + TotalMemory: d.info.SystemInfo.TotalMemory, } procDiscoveryChunks := chunkProcessDiscoveries(pidMapToProcDiscoveries(procs), d.maxBatchSize) payload := make([]model.MessageBody, len(procDiscoveryChunks)) + + groupID := nextGroupID() for i, procDiscoveryChunk := range procDiscoveryChunks { payload[i] = &model.CollectorProcDiscovery{ - HostName: cfg.HostName, + HostName: d.info.HostName, GroupId: groupID, GroupSize: int32(len(procDiscoveryChunks)), ProcessDiscoveries: procDiscoveryChunk, @@ -78,7 +92,7 @@ func (d *ProcessDiscoveryCheck) Run(cfg *config.AgentConfig, groupID int32) ([]m } } - return payload, nil + return StandardRunResult(payload), nil } // Cleanup frees any resource held by the ProcessDiscoveryCheck before the agent exits diff --git a/pkg/process/checks/process_discovery_check_test.go b/pkg/process/checks/process_discovery_check_test.go index 41eedd1996771..c72f254dcef39 100644 --- a/pkg/process/checks/process_discovery_check_test.go +++ b/pkg/process/checks/process_discovery_check_test.go @@ -10,10 +10,14 @@ import ( model "github.com/DataDog/agent-payload/v5/process" "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/pkg/process/config" ) +func testGroupId(groupID int32) func() int32 { + return func() int32 { + return groupID + } +} + func TestProcessDiscoveryCheck(t *testing.T) { prev := getMaxBatchSize defer func() { @@ -23,18 +27,23 @@ func TestProcessDiscoveryCheck(t *testing.T) { maxBatchSize := 10 getMaxBatchSize = func() int { return maxBatchSize } - cfg := &config.AgentConfig{} - ProcessDiscovery.Init(cfg, &model.SystemInfo{ - Cpus: []*model.CPUInfo{{Number: 0}}, - TotalMemory: 0, - }) + check := &ProcessDiscoveryCheck{} + check.Init( + &SysProbeConfig{}, + &HostInfo{ + SystemInfo: &model.SystemInfo{ + Cpus: []*model.CPUInfo{{Number: 0}}, + TotalMemory: 0, + }, + }, + ) // Test check runs without error - result, err := ProcessDiscovery.Run(cfg, 0) + result, err := check.Run(testGroupId(0), nil) assert.NoError(t, err) // Test that result has the proper number of chunks, and that those chunks are of the correct type - for _, elem := range result { + for _, elem := range result.Payloads() { assert.IsType(t, &model.CollectorProcDiscovery{}, elem) collectorProcDiscovery := elem.(*model.CollectorProcDiscovery) for _, proc := range collectorProcDiscovery.ProcessDiscoveries { diff --git a/pkg/process/checks/process_events_fallback.go b/pkg/process/checks/process_events_fallback.go index 33448c5618425..59c45717d4292 100644 --- a/pkg/process/checks/process_events_fallback.go +++ b/pkg/process/checks/process_events_fallback.go @@ -10,35 +10,43 @@ package checks import ( "errors" - - model "github.com/DataDog/agent-payload/v5/process" - - "github.com/DataDog/datadog-agent/pkg/process/config" ) -// ProcessEvents is a ProcessEventsCheck singleton -var ProcessEvents = &ProcessEventsCheck{} +// NewProcessEventsCheck returns an instance of the ProcessEventsCheck. +func NewProcessEventsCheck() Check { + return &ProcessEventsCheck{} +} // ProcessEventsCheck collects process lifecycle events such as exec and exit signals type ProcessEventsCheck struct { } // Init initializes the ProcessEventsCheck. -func (e *ProcessEventsCheck) Init(_ *config.AgentConfig, info *model.SystemInfo) error { +func (e *ProcessEventsCheck) Init(_ *SysProbeConfig, _ *HostInfo) error { return nil } +// IsEnabled returns true if the check is enabled by configuration +func (e *ProcessEventsCheck) IsEnabled() bool { + return false +} + +// SupportsRunOptions returns true if the check supports RunOptions +func (e *ProcessEventsCheck) SupportsRunOptions() bool { + return false +} + // Name returns the name of the ProcessEventsCheck. func (e *ProcessEventsCheck) Name() string { return ProcessEventsCheckName } -// RealTime returns a value that says whether this check should be run in real time. -func (e *ProcessEventsCheck) RealTime() bool { return false } +// Realtime returns a value that says whether this check should be run in real time. +func (e *ProcessEventsCheck) Realtime() bool { return false } // ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares func (e *ProcessEventsCheck) ShouldSaveLastRun() bool { return true } // Run fetches process lifecycle events that have been stored in-memory since the last check run -func (e *ProcessEventsCheck) Run(cfg *config.AgentConfig, groupID int32) ([]model.MessageBody, error) { +func (e *ProcessEventsCheck) Run(nextGroupID func() int32, _ *RunOptions) (RunResult, error) { return nil, errors.New("the process_events check is not supported on this system") } diff --git a/pkg/process/checks/process_events_linux.go b/pkg/process/checks/process_events_linux.go index aef0280697c73..b52c8044f8b1c 100644 --- a/pkg/process/checks/process_events_linux.go +++ b/pkg/process/checks/process_events_linux.go @@ -17,15 +17,16 @@ import ( payload "github.com/DataDog/agent-payload/v5/process" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/events" "github.com/DataDog/datadog-agent/pkg/process/events/model" "github.com/DataDog/datadog-agent/pkg/process/statsd" "github.com/DataDog/datadog-agent/pkg/util/log" ) -// ProcessEvents is a ProcessEventsCheck singleton -var ProcessEvents = &ProcessEventsCheck{} +// NewProcessEventsCheck returns an instance of the ProcessEventsCheck. +func NewProcessEventsCheck() Check { + return &ProcessEventsCheck{} +} // ProcessEventsCheck collects process lifecycle events such as exec and exit signals type ProcessEventsCheck struct { @@ -33,13 +34,13 @@ type ProcessEventsCheck struct { store events.Store listener *events.SysProbeListener - sysInfo *payload.SystemInfo + hostInfo *HostInfo maxBatchSize int } // Init initializes the ProcessEventsCheck. -func (e *ProcessEventsCheck) Init(_ *config.AgentConfig, info *payload.SystemInfo) error { +func (e *ProcessEventsCheck) Init(_ *SysProbeConfig, info *HostInfo) error { e.initMutex.Lock() defer e.initMutex.Unlock() @@ -48,7 +49,7 @@ func (e *ProcessEventsCheck) Init(_ *config.AgentConfig, info *payload.SystemInf } log.Info("Initializing process_events check") - e.sysInfo = info + e.hostInfo = info e.maxBatchSize = getMaxBatchSize() store, err := events.NewRingStore(statsd.Client) @@ -79,17 +80,28 @@ func (e *ProcessEventsCheck) start() { e.listener.Run() } +// IsEnabled returns true if the check is enabled by configuration +func (e *ProcessEventsCheck) IsEnabled() bool { + // TODO - move config check logic here + return true +} + +// SupportsRunOptions returns true if the check supports RunOptions +func (e *ProcessEventsCheck) SupportsRunOptions() bool { + return false +} + // Name returns the name of the ProcessEventsCheck. func (e *ProcessEventsCheck) Name() string { return ProcessEventsCheckName } -// RealTime returns a value that says whether this check should be run in real time. -func (e *ProcessEventsCheck) RealTime() bool { return false } +// Realtime returns a value that says whether this check should be run in real time. +func (e *ProcessEventsCheck) Realtime() bool { return false } // ShouldSaveLastRun indicates if the output from the last run should be saved for use in flares func (e *ProcessEventsCheck) ShouldSaveLastRun() bool { return true } // Run fetches process lifecycle events that have been stored in-memory since the last check run -func (e *ProcessEventsCheck) Run(cfg *config.AgentConfig, groupID int32) ([]payload.MessageBody, error) { +func (e *ProcessEventsCheck) Run(nextGroupID func() int32, _ *RunOptions) (RunResult, error) { if !e.isCheckCorrectlySetup() { return nil, errors.New("the process_events check hasn't been correctly initialized") } @@ -104,17 +116,18 @@ func (e *ProcessEventsCheck) Run(cfg *config.AgentConfig, groupID int32) ([]payl chunks := chunkProcessEvents(payloadEvents, e.maxBatchSize) messages := make([]payload.MessageBody, len(chunks)) + groupID := nextGroupID() for c, chunk := range chunks { messages[c] = &payload.CollectorProcEvent{ - Hostname: cfg.HostName, - Info: e.sysInfo, + Hostname: e.hostInfo.HostName, + Info: e.hostInfo.SystemInfo, Events: chunk, GroupId: groupID, GroupSize: int32(len(chunks)), } } - return messages, nil + return StandardRunResult(messages), nil } // Cleanup frees any resource held by the ProcessEventsCheck before the agent exits diff --git a/pkg/process/checks/process_events_linux_test.go b/pkg/process/checks/process_events_linux_test.go index f041f91031ac3..2e242bf1aa17f 100644 --- a/pkg/process/checks/process_events_linux_test.go +++ b/pkg/process/checks/process_events_linux_test.go @@ -19,7 +19,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/events" "github.com/DataDog/datadog-agent/pkg/process/events/model" "github.com/DataDog/datadog-agent/pkg/security/api" @@ -243,17 +242,17 @@ func TestProcessEventsCheck(t *testing.T) { maxBatchSize: 10, listener: listener, store: store, + hostInfo: &HostInfo{}, } check.start() - cfg := &config.AgentConfig{} events := make([]*payload.ProcessEvent, 0) assert.Eventually(t, func() bool { // Run the process_events check until all expected events are collected - msgs, err := check.Run(cfg, 0) + msgs, err := check.Run(testGroupId(0), nil) require.NoError(t, err) - for _, msg := range msgs { + for _, msg := range msgs.Payloads() { collectorProc, ok := msg.(*payload.CollectorProcEvent) require.True(t, ok) events = append(events, collectorProc.Events...) diff --git a/pkg/process/checks/process_nix_test.go b/pkg/process/checks/process_nix_test.go index cf4111164073a..c8a62ef7c4425 100644 --- a/pkg/process/checks/process_nix_test.go +++ b/pkg/process/checks/process_nix_test.go @@ -20,7 +20,6 @@ import ( model "github.com/DataDog/agent-payload/v5/process" "github.com/DataDog/gopsutil/cpu" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/procutil" ) @@ -46,8 +45,8 @@ func TestBasicProcessMessages(t *testing.T) { } lastRun := time.Now().Add(-5 * time.Second) syst1, syst2 := cpu.TimesStat{}, cpu.TimesStat{} - cfg := config.NewDefaultAgentConfig() sysInfo := &model.SystemInfo{} + hostInfo := &HostInfo{SystemInfo: sysInfo} for i, tc := range []struct { testName string @@ -121,10 +120,9 @@ func TestBasicProcessMessages(t *testing.T) { for _, s := range tc.disallowList { disallowList = append(disallowList, regexp.MustCompile(s)) } - networks := make(map[int32][]*model.Connection) - procs := fmtProcesses(cfg, procutil.NewDefaultDataScrubber(), disallowList, tc.processes, tc.processes, tc.pidToCid, syst2, syst1, lastRun, networks) - messages, totalProcs, totalContainers := createProcCtrMessages(procs, tc.containers, cfg, tc.maxSize, maxBatchBytes, sysInfo, int32(i), "nid") + procs := fmtProcesses(procutil.NewDefaultDataScrubber(), disallowList, tc.processes, tc.processes, tc.pidToCid, syst2, syst1, lastRun, nil) + messages, totalProcs, totalContainers := createProcCtrMessages(hostInfo, procs, tc.containers, tc.maxSize, maxBatchBytes, int32(i), "nid", 0) assert.Equal(t, tc.expectedChunks, len(messages)) @@ -226,24 +224,23 @@ func TestContainerProcessChunking(t *testing.T) { }, } { t.Run(tc.testName, func(t *testing.T) { - networks := make(map[int32][]*model.Connection) procs, ctrs, pidToCid := generateCtrProcs(tc.ctrProcs) procsByPid := procsToHash(procs) lastRun := time.Now().Add(-5 * time.Second) syst1, syst2 := cpu.TimesStat{}, cpu.TimesStat{} - cfg := config.NewDefaultAgentConfig() sysInfo := &model.SystemInfo{} + hostInfo := &HostInfo{SystemInfo: sysInfo} - processes := fmtProcesses(cfg, procutil.NewDefaultDataScrubber(), nil, procsByPid, procsByPid, pidToCid, syst2, syst1, lastRun, networks) - messages, totalProcs, totalContainers := createProcCtrMessages(processes, ctrs, cfg, tc.maxSize, maxBatchBytes, sysInfo, int32(i), "nid") + processes := fmtProcesses(procutil.NewDefaultDataScrubber(), nil, procsByPid, procsByPid, pidToCid, syst2, syst1, lastRun, nil) + messages, totalProcs, totalContainers := createProcCtrMessages(hostInfo, processes, ctrs, tc.maxSize, maxBatchBytes, int32(i), "nid", 0) assert.Equal(t, tc.expectedProcCount, totalProcs) assert.Equal(t, tc.expectedCtrCount, totalContainers) // sort and verify messages sortMsgs(messages) - verifyBatchedMsgs(t, cfg, tc.expectedBatches, messages) + verifyBatchedMsgs(t, hostInfo, tc.expectedBatches, messages) }) } } @@ -277,7 +274,7 @@ func sortMsgs(m []model.MessageBody) { }) } -func verifyBatchedMsgs(t *testing.T, cfg *config.AgentConfig, expected []map[string]int, msgs []model.MessageBody) { +func verifyBatchedMsgs(t *testing.T, hostInfo *HostInfo, expected []map[string]int, msgs []model.MessageBody) { assert := assert.New(t) assert.Equal(len(expected), len(msgs), "Number of messages created") @@ -285,7 +282,7 @@ func verifyBatchedMsgs(t *testing.T, cfg *config.AgentConfig, expected []map[str for i, msg := range msgs { payload := msg.(*model.CollectorProc) - assert.Equal(cfg.ContainerHostType, payload.ContainerHostType) + assert.Equal(hostInfo.ContainerHostType, payload.ContainerHostType) actualCtrPIDCounts := map[string]int{} diff --git a/pkg/process/checks/process_rt.go b/pkg/process/checks/process_rt.go index 0c5674286e393..29facb565a079 100644 --- a/pkg/process/checks/process_rt.go +++ b/pkg/process/checks/process_rt.go @@ -11,7 +11,6 @@ import ( model "github.com/DataDog/agent-payload/v5/process" "github.com/DataDog/gopsutil/cpu" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/net" "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/process/util" @@ -20,7 +19,7 @@ import ( // runRealtime runs the realtime ProcessCheck to collect statistics about the running processes. // Underying procutil.Probe is responsible for the actual implementation -func (p *ProcessCheck) runRealtime(cfg *config.AgentConfig, groupID int32) (*RunResult, error) { +func (p *ProcessCheck) runRealtime(groupID int32) (RunResult, error) { cpuTimes, err := cpu.Times(false) if err != nil { return nil, err @@ -31,7 +30,7 @@ func (p *ProcessCheck) runRealtime(cfg *config.AgentConfig, groupID int32) (*Run // if processCheck haven't fetched any PIDs, return early if len(p.lastPIDs) == 0 { - return &RunResult{}, nil + return CombinedRunResult{}, nil } procs, err := p.probe.StatsForPIDs(p.lastPIDs, time.Now()) @@ -59,26 +58,24 @@ func (p *ProcessCheck) runRealtime(cfg *config.AgentConfig, groupID int32) (*Run p.realtimeLastCPUTime = cpuTimes[0] p.realtimeLastRun = time.Now() log.Debug("first run of rtprocess check - no stats to report") - return &RunResult{}, nil + return CombinedRunResult{}, nil } - connsByPID := Connections.getLastConnectionsByPID() - - chunkedStats := fmtProcessStats(cfg, p.maxBatchSize, procs, p.realtimeLastProcs, pidToCid, cpuTimes[0], p.realtimeLastCPUTime, p.realtimeLastRun, connsByPID) + chunkedStats := fmtProcessStats(p.maxBatchSize, procs, p.realtimeLastProcs, pidToCid, cpuTimes[0], p.realtimeLastCPUTime, p.realtimeLastRun, p.getLastConnRates()) groupSize := len(chunkedStats) chunkedCtrStats := convertAndChunkContainers(containers, groupSize) messages := make([]model.MessageBody, 0, groupSize) for i := 0; i < groupSize; i++ { messages = append(messages, &model.CollectorRealTime{ - HostName: cfg.HostName, + HostName: p.hostInfo.HostName, Stats: chunkedStats[i], ContainerStats: chunkedCtrStats[i], GroupId: groupID, GroupSize: int32(groupSize), - NumCpus: int32(len(p.sysInfo.Cpus)), - TotalMemory: p.sysInfo.TotalMemory, - ContainerHostType: cfg.ContainerHostType, + NumCpus: int32(len(p.hostInfo.SystemInfo.Cpus)), + TotalMemory: p.hostInfo.SystemInfo.TotalMemory, + ContainerHostType: p.hostInfo.ContainerHostType, }) } @@ -88,23 +85,18 @@ func (p *ProcessCheck) runRealtime(cfg *config.AgentConfig, groupID int32) (*Run p.realtimeLastProcs = procs p.realtimeLastCPUTime = cpuTimes[0] - return &RunResult{ - RealTime: messages, - }, nil + return CombinedRunResult{Realtime: messages}, nil } // fmtProcessStats formats and chunks a slice of ProcessStat into chunks. func fmtProcessStats( - cfg *config.AgentConfig, maxBatchSize int, procs, lastProcs map[int32]*procutil.Stats, pidToCid map[int]string, syst2, syst1 cpu.TimesStat, lastRun time.Time, - connsByPID map[int32][]*model.Connection, + connRates ProcessConnRates, ) [][]*model.ProcessStat { - connCheckIntervalS := int(GetInterval(ConnectionsCheckName) / time.Second) - chunked := make([][]*model.ProcessStat, 0) chunk := make([]*model.ProcessStat, 0, maxBatchSize) @@ -127,7 +119,7 @@ func fmtProcessStats( ioStat = formatIO(fp, lastProcs[pid].IOStat, lastRun) } - chunk = append(chunk, &model.ProcessStat{ + stat := &model.ProcessStat{ Pid: pid, CreateTime: fp.CreateTime, Memory: formatMemory(fp), @@ -140,8 +132,13 @@ func fmtProcessStats( VoluntaryCtxSwitches: uint64(fp.CtxSwitches.Voluntary), InvoluntaryCtxSwitches: uint64(fp.CtxSwitches.Involuntary), ContainerId: pidToCid[int(pid)], - Networks: formatNetworks(connsByPID[pid], connCheckIntervalS), - }) + } + if connRates != nil { + stat.Networks = connRates[pid] + } + + chunk = append(chunk, stat) + if len(chunk) == maxBatchSize { chunked = append(chunked, chunk) chunk = make([]*model.ProcessStat, 0, maxBatchSize) diff --git a/pkg/process/checks/process_rt_test.go b/pkg/process/checks/process_rt_test.go index bf9ac0b851938..895ca78ab8bd5 100644 --- a/pkg/process/checks/process_rt_test.go +++ b/pkg/process/checks/process_rt_test.go @@ -13,7 +13,6 @@ import ( "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/procutil" ) @@ -21,16 +20,15 @@ func TestProcessCheckRealtimeBeforeStandard(t *testing.T) { processCheck, _ := processCheckWithMockProbe(t) // If the standard process check hasn't run yet, nothing is returned - expected := &RunResult{} + expected := CombinedRunResult{} - actual, err := processCheck.runRealtime(config.NewDefaultAgentConfig(), 0) + actual, err := processCheck.runRealtime(0) require.NoError(t, err) assert.Equal(t, expected, actual) } func TestProcessCheckRealtimeFirstRun(t *testing.T) { processCheck, probe := processCheckWithMockProbe(t) - cfg := config.NewDefaultAgentConfig() proc1 := makeProcess(1, "git clone google.com") proc2 := makeProcess(2, "mine-bitcoins -all -x") @@ -46,19 +44,18 @@ func TestProcessCheckRealtimeFirstRun(t *testing.T) { probe.On("StatsForPIDs", mock.Anything, mock.Anything).Return(statsByPid, nil) // Run the standard process check once to populate last seen pids - processCheck.run(cfg, 0, false) + processCheck.run(0, false) // The first realtime check returns nothing - expected := &RunResult{} + expected := CombinedRunResult{} - actual, err := processCheck.runRealtime(cfg, 0) + actual, err := processCheck.runRealtime(0) require.NoError(t, err) assert.Equal(t, expected, actual) } func TestProcessCheckRealtimeSecondRun(t *testing.T) { processCheck, probe := processCheckWithMockProbe(t) - cfg := config.NewDefaultAgentConfig() proc1 := makeProcess(1, "git clone google.com") proc2 := makeProcess(2, "mine-bitcoins -all -x") @@ -74,19 +71,19 @@ func TestProcessCheckRealtimeSecondRun(t *testing.T) { probe.On("StatsForPIDs", mock.Anything, mock.Anything).Return(statsByPid, nil) // Run the standard process check once to populate last seen pids - processCheck.run(cfg, 0, false) + processCheck.run(0, false) // The first realtime check returns nothing - first, err := processCheck.runRealtime(cfg, 0) + first, err := processCheck.runRealtime(0) require.NoError(t, err) - assert.Equal(t, &RunResult{}, first) + assert.Equal(t, CombinedRunResult{}, first) expected := makeProcessStatModels(t, proc1, proc2, proc3, proc4, proc5) - actual, err := processCheck.runRealtime(cfg, 0) + actual, err := processCheck.runRealtime(0) require.NoError(t, err) - require.Len(t, actual.RealTime, 1) - rt := actual.RealTime[0].(*model.CollectorRealTime) + require.Len(t, actual.RealtimePayloads(), 1) + rt := actual.RealtimePayloads()[0].(*model.CollectorRealTime) assert.ElementsMatch(t, expected, rt.Stats) assert.Equal(t, int32(1), rt.GroupSize) - assert.Equal(t, int32(len(processCheck.sysInfo.Cpus)), rt.NumCpus) + assert.Equal(t, int32(len(processCheck.hostInfo.SystemInfo.Cpus)), rt.NumCpus) } diff --git a/pkg/process/checks/process_test.go b/pkg/process/checks/process_test.go index 9c34b8f87db6d..f18833fe48639 100644 --- a/pkg/process/checks/process_test.go +++ b/pkg/process/checks/process_test.go @@ -17,7 +17,6 @@ import ( "github.com/stretchr/testify/require" ddconfig "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/process/config" "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/process/procutil/mocks" "github.com/DataDog/datadog-agent/pkg/process/util" @@ -26,24 +25,32 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/containers" metricsmock "github.com/DataDog/datadog-agent/pkg/util/containers/metrics/mock" "github.com/DataDog/datadog-agent/pkg/util/containers/metrics/provider" + "github.com/DataDog/datadog-agent/pkg/util/subscriptions" "github.com/DataDog/datadog-agent/pkg/workloadmeta" ) func processCheckWithMockProbe(t *testing.T) (*ProcessCheck, *mocks.Probe) { t.Helper() probe := mocks.NewProbe(t) - return &ProcessCheck{ - probe: probe, - scrubber: procutil.NewDefaultDataScrubber(), - sysInfo: &model.SystemInfo{ - Cpus: []*model.CPUInfo{ - {CoreId: "1"}, - {CoreId: "2"}, - {CoreId: "3"}, - {CoreId: "4"}, - }, + sysInfo := &model.SystemInfo{ + Cpus: []*model.CPUInfo{ + {CoreId: "1"}, + {CoreId: "2"}, + {CoreId: "3"}, + {CoreId: "4"}, }, + } + hostInfo := &HostInfo{ + SystemInfo: sysInfo, + } + + return &ProcessCheck{ + probe: probe, + scrubber: procutil.NewDefaultDataScrubber(), + hostInfo: hostInfo, containerProvider: mockContainerProvider(t), + checkCount: 0, + skipAmount: 2, }, probe } @@ -84,9 +91,9 @@ func TestProcessCheckFirstRun(t *testing.T) { Return(processesByPid, nil) // The first run returns nothing because processes must be observed on two consecutive runs - expected := &RunResult{} + expected := CombinedRunResult{} - actual, err := processCheck.run(config.NewDefaultAgentConfig(), 0, false) + actual, err := processCheck.run(0, false) require.NoError(t, err) assert.Equal(t, expected, actual) } @@ -106,41 +113,46 @@ func TestProcessCheckSecondRun(t *testing.T) { Return(processesByPid, nil) // The first run returns nothing because processes must be observed on two consecutive runs - first, err := processCheck.run(config.NewDefaultAgentConfig(), 0, false) + first, err := processCheck.run(0, false) require.NoError(t, err) - assert.Equal(t, &RunResult{}, first) + assert.Equal(t, CombinedRunResult{}, first) expected := []model.MessageBody{ &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc1)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, + Hints: &model.CollectorProc_HintMask{HintMask: 0b1}, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc2)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, + Hints: &model.CollectorProc_HintMask{HintMask: 0b1}, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc3)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, + Hints: &model.CollectorProc_HintMask{HintMask: 0b1}, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc4)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, + Hints: &model.CollectorProc_HintMask{HintMask: 0b1}, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc5)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, + Hints: &model.CollectorProc_HintMask{HintMask: 0b1}, }, } - actual, err := processCheck.run(config.NewDefaultAgentConfig(), 0, false) + actual, err := processCheck.run(0, false) require.NoError(t, err) - assert.ElementsMatch(t, expected, actual.Standard) // ordering is not guaranteed - assert.Nil(t, actual.RealTime) + assert.ElementsMatch(t, expected, actual.Payloads()) // ordering is not guaranteed + assert.Nil(t, actual.RealtimePayloads()) } func TestProcessCheckWithRealtime(t *testing.T) { @@ -157,47 +169,52 @@ func TestProcessCheckWithRealtime(t *testing.T) { Return(processesByPid, nil) // The first run returns nothing because processes must be observed on two consecutive runs - first, err := processCheck.run(config.NewDefaultAgentConfig(), 0, true) + first, err := processCheck.run(0, true) require.NoError(t, err) - assert.Equal(t, &RunResult{}, first) + assert.Equal(t, CombinedRunResult{}, first) expectedProcs := []model.MessageBody{ &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc1)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, + Hints: &model.CollectorProc_HintMask{HintMask: 0b1}, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc2)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, + Hints: &model.CollectorProc_HintMask{HintMask: 0b1}, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc3)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, + Hints: &model.CollectorProc_HintMask{HintMask: 0b1}, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc4)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, + Hints: &model.CollectorProc_HintMask{HintMask: 0b1}, }, &model.CollectorProc{ Processes: []*model.Process{makeProcessModel(t, proc5)}, GroupSize: int32(len(processesByPid)), - Info: processCheck.sysInfo, + Info: processCheck.hostInfo.SystemInfo, + Hints: &model.CollectorProc_HintMask{HintMask: 0b1}, }, } expectedStats := makeProcessStatModels(t, proc1, proc2, proc3, proc4, proc5) - actual, err := processCheck.run(config.NewDefaultAgentConfig(), 0, true) + actual, err := processCheck.run(0, true) require.NoError(t, err) - assert.ElementsMatch(t, expectedProcs, actual.Standard) // ordering is not guaranteed - require.Len(t, actual.RealTime, 1) - rt := actual.RealTime[0].(*model.CollectorRealTime) + assert.ElementsMatch(t, expectedProcs, actual.Payloads()) // ordering is not guaranteed + require.Len(t, actual.RealtimePayloads(), 1) + rt := actual.RealtimePayloads()[0].(*model.CollectorRealTime) assert.ElementsMatch(t, expectedStats, rt.Stats) assert.Equal(t, int32(1), rt.GroupSize) - assert.Equal(t, int32(len(processCheck.sysInfo.Cpus)), rt.NumCpus) + assert.Equal(t, int32(len(processCheck.hostInfo.SystemInfo.Cpus)), rt.NumCpus) } func TestOnlyEnvConfigArgsScrubbingEnabled(t *testing.T) { @@ -304,3 +321,97 @@ func TestDisallowList(t *testing.T) { fmt.Sprintf("Case %v failed", c)) } } + +func TestConnRates(t *testing.T) { + p := &ProcessCheck{} + + p.initConnRates() + + var transmitter subscriptions.Transmitter[ProcessConnRates] + transmitter.Chs = append(transmitter.Chs, p.connRatesReceiver.Ch) + + rates := ProcessConnRates{ + 1: &model.ProcessNetworks{}, + } + transmitter.Notify(rates) + + close(p.connRatesReceiver.Ch) + + assert.Eventually(t, func() bool { return p.getLastConnRates() != nil }, 10*time.Second, time.Millisecond) + assert.Equal(t, rates, p.getLastConnRates()) +} + +func TestProcessCheckHints(t *testing.T) { + processCheck, probe := processCheckWithMockProbe(t) + + now := time.Now().Unix() + proc1 := makeProcessWithCreateTime(1, "git clone google.com", now) + processesByPid := map[int32]*procutil.Process{1: proc1} + + probe.On("ProcessesByPID", mock.Anything, mock.Anything). + Return(processesByPid, nil) + + // The first run returns nothing because processes must be observed on two consecutive runs + first, err := processCheck.run(0, false) + require.NoError(t, err) + assert.Equal(t, CombinedRunResult{}, first) + + expected := []model.MessageBody{ + &model.CollectorProc{ + Processes: []*model.Process{makeProcessModel(t, proc1)}, + GroupSize: int32(len(processesByPid)), + Info: processCheck.hostInfo.SystemInfo, + Hints: &model.CollectorProc_HintMask{HintMask: 0b1}, + }, + } + actual, err := processCheck.run(0, false) + require.NoError(t, err) + assert.ElementsMatch(t, expected, actual.Payloads()) // ordering is not guaranteed + assert.Nil(t, actual.RealtimePayloads()) + + expectedUnspecified := []model.MessageBody{ + &model.CollectorProc{ + Processes: []*model.Process{makeProcessModel(t, proc1)}, + GroupSize: int32(len(processesByPid)), + Info: processCheck.hostInfo.SystemInfo, + Hints: &model.CollectorProc_HintMask{HintMask: 0}, + }, + } + + actual, err = processCheck.run(0, false) + require.NoError(t, err) + assert.ElementsMatch(t, expectedUnspecified, actual.Payloads()) // ordering is not guaranteed + assert.Nil(t, actual.RealtimePayloads()) + + expectedDiscovery := []model.MessageBody{ + &model.CollectorProc{ + Processes: []*model.Process{makeProcessModel(t, proc1)}, + GroupSize: int32(len(processesByPid)), + Info: processCheck.hostInfo.SystemInfo, + Hints: &model.CollectorProc_HintMask{HintMask: 0b1}, + }, + } + + actual, err = processCheck.run(0, false) + require.NoError(t, err) + assert.ElementsMatch(t, expectedDiscovery, actual.Payloads()) // ordering is not guaranteed +} + +func BenchmarkProcessCheck(b *testing.B) { + processCheck, probe := processCheckWithMockProbe(&testing.T{}) + + now := time.Now().Unix() + proc1 := makeProcessWithCreateTime(1, "git clone google.com", now) + proc2 := makeProcessWithCreateTime(2, "mine-bitcoins -all -x", now+1) + proc3 := makeProcessWithCreateTime(3, "foo --version", now+2) + proc4 := makeProcessWithCreateTime(4, "foo -bar -bim", now+3) + proc5 := makeProcessWithCreateTime(5, "datadog-process-agent --cfgpath datadog.conf", now+2) + processesByPid := map[int32]*procutil.Process{1: proc1, 2: proc2, 3: proc3, 4: proc4, 5: proc5} + + probe.On("ProcessesByPID", mock.Anything, mock.Anything).Return(processesByPid, nil) + + for n := 0; n < b.N; n++ { + _, err := processCheck.run(0, false) + require.NoError(b, err) + } +} diff --git a/pkg/process/checks/process_windows_test.go b/pkg/process/checks/process_windows_test.go index 2c2400df3e480..63229c34404c5 100644 --- a/pkg/process/checks/process_windows_test.go +++ b/pkg/process/checks/process_windows_test.go @@ -23,14 +23,14 @@ func TestPerfCountersConfigSetting(t *testing.T) { t.Run("use toolhelp API", func(t *testing.T) { cfg := config.Mock(t) cfg.Set("process_config.windows.use_perf_counters", false) - probe := newProcessProbe(procutil.WithPermission(Process.SysprobeProcessModuleEnabled)) + probe := newProcessProbe(procutil.WithPermission(false)) assert.IsType(t, procutil.NewWindowsToolhelpProbe(), probe) }) t.Run("use PDH api", func(t *testing.T) { cfg := config.Mock(t) cfg.Set("process_config.windows.use_perf_counters", true) - probe := newProcessProbe(procutil.WithPermission(Process.SysprobeProcessModuleEnabled)) + probe := newProcessProbe(procutil.WithPermission(false)) assert.IsType(t, procutil.NewProcessProbe(), probe) }) } diff --git a/pkg/process/checks/runner.go b/pkg/process/checks/runner.go index 5c6f9fdca8dbd..0868c69e0d568 100644 --- a/pkg/process/checks/runner.go +++ b/pkg/process/checks/runner.go @@ -72,7 +72,7 @@ func (r *runnerWithRealTime) run() { if rtEnabled || r.counter == 0 { r.RunCheck(RunOptions{ RunStandard: r.counter == 0, - RunRealTime: rtEnabled, + RunRealtime: rtEnabled, }) } diff --git a/pkg/process/checks/runner_test.go b/pkg/process/checks/runner_test.go index 5841d50d3ead6..ed4f7d6575bfb 100644 --- a/pkg/process/checks/runner_test.go +++ b/pkg/process/checks/runner_test.go @@ -16,15 +16,15 @@ import ( var ( runOptionsWithStandard = RunOptions{ RunStandard: true, - RunRealTime: false, + RunRealtime: false, } runOptionsWithRealTime = RunOptions{ RunStandard: false, - RunRealTime: true, + RunRealtime: true, } runOptionsWithBoth = RunOptions{ RunStandard: true, - RunRealTime: true, + RunRealtime: true, } ) diff --git a/pkg/process/checks/system_info.go b/pkg/process/checks/system_info.go index da8fd2eaa05bd..7041006ee96aa 100644 --- a/pkg/process/checks/system_info.go +++ b/pkg/process/checks/system_info.go @@ -14,14 +14,12 @@ import ( "github.com/DataDog/gopsutil/mem" model "github.com/DataDog/agent-payload/v5/process" - - "github.com/DataDog/datadog-agent/pkg/process/config" ) // CollectSystemInfo collects a set of system-level information that will not // change until a restart. This bit of information should be passed along with // the process messages. -func CollectSystemInfo(cfg *config.AgentConfig) (*model.SystemInfo, error) { +func CollectSystemInfo() (*model.SystemInfo, error) { hi, err := host.Info() if err != nil { return nil, err diff --git a/pkg/process/checks/system_info_darwin.go b/pkg/process/checks/system_info_darwin.go index 2e3f0a7eafdcc..ac844cb054d27 100644 --- a/pkg/process/checks/system_info_darwin.go +++ b/pkg/process/checks/system_info_darwin.go @@ -16,8 +16,6 @@ import ( "github.com/DataDog/gopsutil/host" "github.com/DataDog/gopsutil/mem" "golang.org/x/sys/unix" - - "github.com/DataDog/datadog-agent/pkg/process/config" ) type statsProvider interface { @@ -60,7 +58,7 @@ func patchCPUInfo(gopsutilCPUInfo []cpu.InfoStat) ([]cpu.InfoStat, error) { // CollectSystemInfo collects a set of system-level information that will not // change until a restart. This bit of information should be passed along with // the process messages. -func CollectSystemInfo(_ *config.AgentConfig) (*model.SystemInfo, error) { +func CollectSystemInfo() (*model.SystemInfo, error) { hi, err := host.Info() if err != nil { return nil, err diff --git a/pkg/process/checks/system_info_windows.go b/pkg/process/checks/system_info_windows.go index 4690133db0d07..2b1e3ee32539e 100644 --- a/pkg/process/checks/system_info_windows.go +++ b/pkg/process/checks/system_info_windows.go @@ -15,14 +15,12 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/winutil" model "github.com/DataDog/agent-payload/v5/process" - - "github.com/DataDog/datadog-agent/pkg/process/config" ) // CollectSystemInfo collects a set of system-level information that will not // change until a restart. This bit of information should be passed along with // the process messages. -func CollectSystemInfo(cfg *config.AgentConfig) (*model.SystemInfo, error) { +func CollectSystemInfo() (*model.SystemInfo, error) { hi, err := platform.GetArchInfo() if err != nil { return nil, err diff --git a/pkg/process/config/config.go b/pkg/process/config/config.go deleted file mode 100644 index 6c6a7de4a70a9..0000000000000 --- a/pkg/process/config/config.go +++ /dev/null @@ -1,273 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package config - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "os" - "os/exec" - "strings" - "time" - - model "github.com/DataDog/agent-payload/v5/process" - "google.golang.org/grpc" - - sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" - "github.com/DataDog/datadog-agent/pkg/config" - "github.com/DataDog/datadog-agent/pkg/config/settings" - "github.com/DataDog/datadog-agent/pkg/process/util" - pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo" - "github.com/DataDog/datadog-agent/pkg/util/fargate" - ddgrpc "github.com/DataDog/datadog-agent/pkg/util/grpc" - "github.com/DataDog/datadog-agent/pkg/util/hostname/validate" - "github.com/DataDog/datadog-agent/pkg/util/log" -) - -type cmdFunc = func(name string, arg ...string) *exec.Cmd - -// AgentConfig is the global config for the process-agent. This information -// is sourced from config files and the environment variables. -// AgentConfig is shared across process-agent checks and should only contain shared objects and -// settings that cannot be read directly from the global Config object. -// For any other setting, use `pkg/config`. -type AgentConfig struct { - HostName string - MaxConnsPerMessage int - - // host type of the agent, used to populate container payload with additional host information - ContainerHostType model.ContainerHostType - - // System probe collection configuration - SystemProbeAddress string -} - -// NewDefaultAgentConfig returns an AgentConfig with defaults initialized -func NewDefaultAgentConfig() *AgentConfig { - ac := &AgentConfig{ - MaxConnsPerMessage: 600, - HostName: "", - - ContainerHostType: model.ContainerHostType_notSpecified, - - // System probe collection configuration - SystemProbeAddress: defaultSystemProbeAddress, - } - - // Set default values for proc/sys paths if unset. - // Don't set this is /host is not mounted to use context within container. - // Generally only applicable for container-only cases like Fargate. - if config.IsContainerized() && util.PathExists("/host") { - if v := os.Getenv("HOST_PROC"); v == "" { - os.Setenv("HOST_PROC", "/host/proc") - } - if v := os.Getenv("HOST_SYS"); v == "" { - os.Setenv("HOST_SYS", "/host/sys") - } - } - - return ac -} - -// LoadConfigIfExists takes a path to either a directory containing datadog.yaml or a direct path to a datadog.yaml file -// and loads it into ddconfig.Datadog. It does this silently, and does not produce any logs. -func LoadConfigIfExists(path string) error { - if path != "" { - if util.PathExists(path) { - config.Datadog.AddConfigPath(path) - if strings.HasSuffix(path, ".yaml") { // If they set a config file directly, let's try to honor that - config.Datadog.SetConfigFile(path) - } - - if _, err := config.LoadWithoutSecret(); err != nil { - return err - } - } else { - log.Infof("no config exists at %s, ignoring...", path) - } - } - return nil -} - -// NewAgentConfig returns an AgentConfig using a configuration file. It can be nil -// if there is no file available. In this case we'll configure only via environment. -func NewAgentConfig(loggerName config.LoggerName, yamlPath string, syscfg *sysconfig.Config) (*AgentConfig, error) { - cfg := NewDefaultAgentConfig() - if err := cfg.LoadAgentConfig(yamlPath); err != nil { - return nil, err - } - - // (Re)configure the logging from our configuration - logFile := config.Datadog.GetString("process_config.log_file") - if err := setupLogger(loggerName, logFile); err != nil { - log.Errorf("failed to setup configured logger: %s", err) - return nil, err - } - - if syscfg.Enabled { - cfg.MaxConnsPerMessage = syscfg.MaxConnsPerMessage - cfg.SystemProbeAddress = syscfg.SocketAddress - } - - if err := validate.ValidHostname(cfg.HostName); err != nil { - // lookup hostname if there is no config override or if the override is invalid - agentBin := config.Datadog.GetString("process_config.dd_agent_bin") - connectionTimeout := config.Datadog.GetDuration("process_config.grpc_connection_timeout_secs") * time.Second - if hostname, err := getHostname(context.TODO(), agentBin, connectionTimeout); err == nil { - cfg.HostName = hostname - } else { - log.Errorf("Cannot get hostname: %v", err) - } - } - - cfg.ContainerHostType = getContainerHostType() - - return cfg, nil -} - -// InitRuntimeSettings registers settings to be added to the runtime config. -func InitRuntimeSettings() { - // NOTE: Any settings you want to register should simply be added here - processRuntimeSettings := []settings.RuntimeSetting{ - settings.LogLevelRuntimeSetting{}, - } - - // Before we begin listening, register runtime settings - for _, setting := range processRuntimeSettings { - err := settings.RegisterRuntimeSetting(setting) - if err != nil { - _ = log.Warnf("cannot initialize the runtime setting %s: %v", setting.Name(), err) - } - } -} - -// getContainerHostType uses the fargate library to detect container environment and returns the protobuf version of it -func getContainerHostType() model.ContainerHostType { - switch fargate.GetOrchestrator() { - case fargate.ECS: - return model.ContainerHostType_fargateECS - case fargate.EKS: - return model.ContainerHostType_fargateEKS - } - return model.ContainerHostType_notSpecified -} - -// loadEnvVariables reads env variables specific to process-agent and overrides the corresponding settings -// in the global Config object. -// This function is used to handle historic process-agent env vars. New settings should be -// handled directly in the /pkg/config/process.go file -func loadEnvVariables() { - // The following environment variables will be loaded in the order listed, meaning variables - // further down the list may override prior variables. - for _, variable := range []struct{ env, cfg string }{ - {"DD_ORCHESTRATOR_URL", "orchestrator_explorer.orchestrator_dd_url"}, - {"HTTPS_PROXY", "proxy.https"}, - } { - if v, ok := os.LookupEnv(variable.env); ok { - config.Datadog.Set(variable.cfg, v) - } - } - - if v := os.Getenv("DD_ORCHESTRATOR_ADDITIONAL_ENDPOINTS"); v != "" { - endpoints := make(map[string][]string) - if err := json.Unmarshal([]byte(v), &endpoints); err != nil { - log.Errorf(`Could not parse DD_ORCHESTRATOR_ADDITIONAL_ENDPOINTS: %v. It must be of the form '{"https://process.agent.datadoghq.com": ["apikey1", ...], ...}'.`, err) - } else { - config.Datadog.Set("orchestrator_explorer.orchestrator_additional_endpoints", endpoints) - } - } -} - -// getHostname attempts to resolve the hostname in the following order: the main datadog agent via grpc, the main agent -// via cli and lastly falling back to os.Hostname() if it is unavailable -func getHostname(ctx context.Context, ddAgentBin string, grpcConnectionTimeout time.Duration) (string, error) { - // Fargate is handled as an exceptional case (there is no concept of a host, so we use the ARN in-place). - if fargate.IsFargateInstance() { - hostname, err := fargate.GetFargateHost(ctx) - if err == nil { - return hostname, nil - } - log.Errorf("failed to get Fargate host: %v", err) - } - - // Get the hostname via gRPC from the main agent if a hostname has not been set either from config/fargate - hostname, err := getHostnameFromGRPC(ctx, ddgrpc.GetDDAgentClient, grpcConnectionTimeout) - if err == nil { - return hostname, nil - } - log.Errorf("failed to get hostname from grpc: %v", err) - - // If the hostname is not set then we fallback to use the agent binary - hostname, err = getHostnameFromCmd(ddAgentBin, exec.Command) - if err == nil { - return hostname, nil - } - log.Errorf("failed to get hostname from cmd: %v", err) - - return os.Hostname() -} - -// getHostnameCmd shells out to obtain the hostname used by the infra agent -func getHostnameFromCmd(ddAgentBin string, cmdFn cmdFunc) (string, error) { - cmd := cmdFn(ddAgentBin, "hostname") - - // Copying all environment variables to child process - // Windows: Required, so the child process can load DLLs, etc. - // Linux: Optional, but will make use of DD_HOSTNAME and DOCKER_DD_AGENT if they exist - cmd.Env = append(cmd.Env, os.Environ()...) - - var stdout, stderr bytes.Buffer - cmd.Stdout = &stdout - cmd.Stderr = &stderr - - err := cmd.Run() - if err != nil { - return "", err - } - - hostname := strings.TrimSpace(stdout.String()) - if hostname == "" { - return "", fmt.Errorf("error retrieving dd-agent hostname %s", stderr.String()) - } - - return hostname, nil -} - -// getHostnameFromGRPC retrieves the hostname from the main datadog agent via GRPC -func getHostnameFromGRPC(ctx context.Context, grpcClientFn func(ctx context.Context, opts ...grpc.DialOption) (pb.AgentClient, error), grpcConnectionTimeout time.Duration) (string, error) { - ctx, cancel := context.WithTimeout(ctx, grpcConnectionTimeout) - defer cancel() - - ddAgentClient, err := grpcClientFn(ctx) - if err != nil { - return "", fmt.Errorf("cannot connect to datadog agent via grpc: %w", err) - } - reply, err := ddAgentClient.GetHostname(ctx, &pb.HostnameRequest{}) - if err != nil { - return "", fmt.Errorf("cannot get hostname from datadog agent via grpc: %w", err) - } - - log.Debugf("retrieved hostname:%s from datadog agent via grpc", reply.Hostname) - return reply.Hostname, nil -} - -func setupLogger(loggerName config.LoggerName, logFile string) error { - if config.Datadog.GetBool("disable_file_logging") { - logFile = "" - } - - return config.SetupLogger( - loggerName, - config.Datadog.GetString("log_level"), - logFile, - config.GetSyslogURI(), - config.Datadog.GetBool("syslog_rfc"), - config.Datadog.GetBool("log_to_console"), - config.Datadog.GetBool("log_format_json"), - ) -} diff --git a/pkg/process/config/config_darwin.go b/pkg/process/config/config_darwin.go deleted file mode 100644 index 1063d68ff41be..0000000000000 --- a/pkg/process/config/config_darwin.go +++ /dev/null @@ -1,9 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package config - -// defaultSystemProbeAddress is the default unix socket path to be used for connecting to the system probe -const defaultSystemProbeAddress = "/opt/datadog-agent/run/sysprobe.sock" diff --git a/pkg/process/config/config_nix.go b/pkg/process/config/config_nix.go deleted file mode 100644 index 30ac2928bff19..0000000000000 --- a/pkg/process/config/config_nix.go +++ /dev/null @@ -1,12 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build !windows && !darwin -// +build !windows,!darwin - -package config - -// defaultSystemProbeAddress is the default unix socket path to be used for connecting to the system probe -const defaultSystemProbeAddress = "/opt/datadog-agent/run/sysprobe.sock" diff --git a/pkg/process/config/config_nix_test.go b/pkg/process/config/config_nix_test.go deleted file mode 100644 index 4d25a4a6ec9bc..0000000000000 --- a/pkg/process/config/config_nix_test.go +++ /dev/null @@ -1,100 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build linux && secrets -// +build linux,secrets - -package config - -import ( - "fmt" - "os" - "os/exec" - "sync" - "testing" - - // This test calls ContainerProvider behind the scene, need to initialize the linux provider - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - "github.com/DataDog/datadog-agent/pkg/config" -) - -var secretScriptBuilder sync.Once - -func setupSecretScript() error { - script := "./testdata/secret" - goCmd, err := exec.LookPath("go") - if err != nil { - return fmt.Errorf("Couldn't find golang binary in path") - } - - buildCmd := exec.Command(goCmd, "build", "-o", script, fmt.Sprintf("%s.go", script)) - if err := buildCmd.Start(); err != nil { - return fmt.Errorf("Couldn't build script %v: %s", script, err) - } - if err := buildCmd.Wait(); err != nil { - return fmt.Errorf("Couldn't wait the end of the build for script %v: %s", script, err) - } - - // Permissions required for the secret script - err = os.Chmod(script, 0700) - if err != nil { - return err - } - - return os.Chown(script, os.Geteuid(), os.Getgid()) -} - -// TestAgentConfigYamlEnc tests the secrets feature on the file TestDDAgentConfigYamlEnc -func TestAgentConfigYamlEnc(t *testing.T) { - secretScriptBuilder.Do(func() { require.NoError(t, setupSecretScript()) }) - - newConfig() - defer restoreGlobalConfig() - // Secrets settings are initialized only once by initConfig in the agent package so we have to setup them - config.InitConfig(config.Datadog) - config.Datadog.Set("secret_backend_timeout", 15) - config.Datadog.Set("secret_backend_output_max_size", 1024) - - _ = loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlEnc.yaml", "") - assert.Equal(t, "secret-my_api_key", config.Datadog.GetString("api_key")) -} - -// TestAgentConfigYamlEnc2 tests the secrets feature on the file TestDDAgentConfigYamlEnc2 -func TestAgentConfigYamlEnc2(t *testing.T) { - secretScriptBuilder.Do(func() { require.NoError(t, setupSecretScript()) }) - - newConfig() - defer restoreGlobalConfig() - // Secrets settings are initialized only once by initConfig in the agent package so we have to setup them - config.InitConfig(config.Datadog) - config.Datadog.Set("secret_backend_timeout", 15) - config.Datadog.Set("secret_backend_output_max_size", 1024) - _ = loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlEnc2.yaml", "") - - assert.Equal(t, "secret-encrypted_key", config.Datadog.GetString("api_key")) - assert.Equal(t, "secret-burrito.com", config.Datadog.GetString("process_config.process_dd_url")) -} - -func TestAgentEncryptedVariablesSecrets(t *testing.T) { - secretScriptBuilder.Do(func() { require.NoError(t, setupSecretScript()) }) - - newConfig() - defer restoreGlobalConfig() - - // Secrets settings are initialized only once by initConfig in the agent package so we have to setup them - config.InitConfig(config.Datadog) - config.Datadog.Set("secret_backend_timeout", 15) - config.Datadog.Set("secret_backend_output_max_size", 1024) - - t.Setenv("DD_API_KEY", "ENC[my_api_key]") - t.Setenv("DD_HOSTNAME", "ENC[my-host]") // Valid hostnames do not use underscores - - agentConfig := loadAgentConfigForTest(t, "./testdata/TestEnvSiteConfig-Enc.yaml", "") - - assert.Equal(t, "secret-my_api_key", config.Datadog.Get("api_key")) - assert.Equal(t, "secret-my-host", agentConfig.HostName) -} diff --git a/pkg/process/config/config_test.go b/pkg/process/config/config_test.go deleted file mode 100644 index 0d27ba0dcfe84..0000000000000 --- a/pkg/process/config/config_test.go +++ /dev/null @@ -1,310 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build linux || windows -// +build linux windows - -package config - -import ( - "context" - "errors" - "fmt" - "os" - "os/exec" - "runtime" - "strings" - "testing" - "time" - - sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" - "github.com/DataDog/datadog-agent/pkg/config" - pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo" - mocks "github.com/DataDog/datadog-agent/pkg/proto/pbgo/mocks" - - "github.com/golang/mock/gomock" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "google.golang.org/grpc" -) - -var originalConfig = config.Datadog - -const ( - ns = "process_config" -) - -func key(pieces ...string) string { - return strings.Join(pieces, ".") -} - -func restoreGlobalConfig() { - config.Datadog = originalConfig -} - -func newConfig() { - config.Datadog = config.NewConfig("datadog", "DD", strings.NewReplacer(".", "_")) - config.InitConfig(config.Datadog) - // force timeout to 0s, otherwise each test waits 60s - config.Datadog.Set(key(ns, "grpc_connection_timeout_secs"), 0) -} - -func loadAgentConfigForTest(t *testing.T, path, networksYamlPath string) *AgentConfig { - config.InitSystemProbeConfig(config.Datadog) - - require.NoError(t, LoadConfigIfExists(path)) - - syscfg, err := sysconfig.Merge(networksYamlPath) - require.NoError(t, err) - - cfg, err := NewAgentConfig("test", path, syscfg) - require.NoError(t, err) - return cfg -} - -// TestEnvGrpcConnectionTimeoutSecs tests DD_PROCESS_CONFIG_GRPC_CONNECTION_TIMEOUT_SECS. -// This environment variable cannot be tested with the other environment variables because it is overridden. -func TestEnvGrpcConnectionTimeoutSecs(t *testing.T) { - syscfg, err := sysconfig.Merge("") - require.NoError(t, err) - - t.Run("DD_PROCESS_CONFIG_GRPC_CONNECTION_TIMEOUT_SECS", func(t *testing.T) { - t.Setenv("DD_PROCESS_CONFIG_GRPC_CONNECTION_TIMEOUT_SECS", "1") - _, _ = NewAgentConfig("test", "", syscfg) - assert.Equal(t, 1, config.Datadog.GetInt("process_config.grpc_connection_timeout_secs")) - }) - - t.Run("DD_PROCESS_AGENT_GRPC_CONNECTION_TIMEOUT_SECS", func(t *testing.T) { - t.Setenv("DD_PROCESS_AGENT_GRPC_CONNECTION_TIMEOUT_SECS", "2") - _, _ = NewAgentConfig("test", "", syscfg) - assert.Equal(t, 2, config.Datadog.GetInt("process_config.grpc_connection_timeout_secs")) - }) -} - -func TestYamlConfig(t *testing.T) { - // Reset the config - config.Datadog = config.NewConfig("datadog", "DD", strings.NewReplacer(".", "_")) - - f, err := os.CreateTemp("", "yamlConfigTest*.yaml") - defer os.Remove(f.Name()) - assert.NoError(t, err) - - _, err = f.WriteString(` -log_level: debug -log_to_console: false -process_config: - log_file: /tmp/test - dd_agent_bin: /tmp/test - grpc_connection_timeout_secs: 1 - remote_tagger: true - process_discovery: - enabled: true - interval: 1h -`) - require.NoError(t, err) - - require.NoError(t, LoadConfigIfExists(f.Name())) - - assert.Equal(t, "debug", config.Datadog.GetString("log_level")) - assert.False(t, config.Datadog.GetBool("log_to_console")) - assert.Equal(t, "/tmp/test", config.Datadog.GetString("process_config.log_file")) - assert.Equal(t, "/tmp/test", config.Datadog.GetString("process_config.dd_agent_bin")) - assert.Equal(t, 1, config.Datadog.GetInt("process_config.grpc_connection_timeout_secs")) - assert.True(t, config.Datadog.GetBool("process_config.remote_tagger")) - assert.True(t, config.Datadog.GetBool("process_config.process_discovery.enabled")) - assert.Equal(t, time.Hour, config.Datadog.GetDuration("process_config.process_discovery.interval")) -} - -func TestOnlyEnvConfigLogLevelOverride(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - t.Setenv("DD_LOG_LEVEL", "error") - t.Setenv("LOG_LEVEL", "debug") - - syscfg, err := sysconfig.Merge("") - require.NoError(t, err) - _, _ = NewAgentConfig("test", "", syscfg) - assert.Equal(t, "error", config.Datadog.GetString("log_level")) -} - -func TestGetHostname(t *testing.T) { - ctx := context.Background() - _ = NewDefaultAgentConfig() - h, err := getHostname(ctx, config.Datadog.GetString("process_config.dd_agent_bin"), 0) - assert.Nil(t, err) - // verify we fall back to getting os hostname - expectedHostname, _ := os.Hostname() - assert.Equal(t, expectedHostname, h) -} - -func TestDefaultConfig(t *testing.T) { - assert := assert.New(t) - - // assert that some sane defaults are set - assert.Equal("info", config.Datadog.GetString("log_level")) - - t.Setenv("DOCKER_DD_AGENT", "yes") - _ = NewDefaultAgentConfig() - assert.Equal(os.Getenv("HOST_PROC"), "") - assert.Equal(os.Getenv("HOST_SYS"), "") - t.Setenv("DOCKER_DD_AGENT", "no") - assert.Equal(config.DefaultProcessExpVarPort, config.Datadog.GetInt("process_config.expvar_port")) - - assert.Equal("info", config.Datadog.GetString("log_level")) - assert.True(config.Datadog.GetBool("log_to_console")) - assert.Equal(config.DefaultProcessAgentLogFile, config.Datadog.GetString("process_config.log_file")) - assert.Equal(config.DefaultDDAgentBin, config.Datadog.GetString("process_config.dd_agent_bin")) - assert.Equal(config.DefaultGRPCConnectionTimeoutSecs, config.Datadog.GetInt("process_config.grpc_connection_timeout_secs")) - assert.False(config.Datadog.GetBool("process_config.remote_tagger")) - assert.False(config.Datadog.GetBool("process_config.remote_workloadmeta")) - assert.True(config.Datadog.GetBool("process_config.process_discovery.enabled")) - assert.Equal(4*time.Hour, config.Datadog.GetDuration("process_config.process_discovery.interval")) -} - -func TestAgentConfigYamlAndSystemProbeConfig(t *testing.T) { - newConfig() - defer restoreGlobalConfig() - - assert := assert.New(t) - - _ = loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml", "") - - assert.Equal("apikey_20", config.Datadog.GetString("api_key")) - assert.Equal("http://my-process-app.datadoghq.com", config.Datadog.GetString("process_config.process_dd_url")) - assert.Equal(10, config.Datadog.GetInt("process_config.queue_size")) - assert.Equal(5065, config.Datadog.GetInt("process_config.expvar_port")) - - newConfig() - agentConfig := loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml", "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net.yaml") - - assert.Equal("apikey_20", config.Datadog.GetString("api_key")) - assert.Equal("http://my-process-app.datadoghq.com", config.Datadog.GetString("process_config.process_dd_url")) - assert.Equal("server-01", agentConfig.HostName) - assert.Equal(10, config.Datadog.GetInt("process_config.queue_size")) - if runtime.GOOS != "windows" { - assert.Equal("/var/my-location/system-probe.log", agentConfig.SystemProbeAddress) - } - - newConfig() - _ = loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml", "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-2.yaml") - - assert.Equal("apikey_20", config.Datadog.GetString("api_key")) - assert.Equal("http://my-process-app.datadoghq.com", config.Datadog.GetString("process_config.process_dd_url")) - assert.Equal(10, config.Datadog.GetInt("process_config.queue_size")) - - newConfig() - agentConfig = loadAgentConfigForTest(t, "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml", "./testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-Windows.yaml") - - if runtime.GOOS == "windows" { - assert.Equal("localhost:4444", agentConfig.SystemProbeAddress) - } -} - -func TestGetHostnameFromGRPC(t *testing.T) { - ctx := context.Background() - ctrl := gomock.NewController(t) - defer ctrl.Finish() - - mockClient := mocks.NewMockAgentClient(ctrl) - - mockClient.EXPECT().GetHostname( - gomock.Any(), - &pb.HostnameRequest{}, - ).Return(&pb.HostnameReply{Hostname: "unit-test-hostname"}, nil) - - t.Run("hostname returns from grpc", func(t *testing.T) { - hostname, err := getHostnameFromGRPC(ctx, func(ctx context.Context, opts ...grpc.DialOption) (pb.AgentClient, error) { - return mockClient, nil - }, config.DefaultGRPCConnectionTimeoutSecs*time.Second) - - assert.Nil(t, err) - assert.Equal(t, "unit-test-hostname", hostname) - }) - - t.Run("grpc client is unavailable", func(t *testing.T) { - grpcErr := errors.New("no grpc client") - hostname, err := getHostnameFromGRPC(ctx, func(ctx context.Context, opts ...grpc.DialOption) (pb.AgentClient, error) { - return nil, grpcErr - }, config.DefaultGRPCConnectionTimeoutSecs*time.Second) - - assert.NotNil(t, err) - assert.Equal(t, grpcErr, errors.Unwrap(err)) - assert.Empty(t, hostname) - }) -} - -func TestGetHostnameFromCmd(t *testing.T) { - t.Run("valid hostname", func(t *testing.T) { - h, err := getHostnameFromCmd("agent-success", fakeExecCommand) - assert.Nil(t, err) - assert.Equal(t, "unit_test_hostname", h) - }) - - t.Run("no hostname returned", func(t *testing.T) { - h, err := getHostnameFromCmd("agent-empty_hostname", fakeExecCommand) - assert.NotNil(t, err) - assert.Equal(t, "", h) - }) -} - -func TestInvalidHostname(t *testing.T) { - syscfg, err := sysconfig.Merge("") - require.NoError(t, err) - - // Lower the GRPC timeout, otherwise the test will time out in CI - config.Datadog.Set("process_config.grpc_connection_timeout_secs", 1) - - // Input yaml file has an invalid hostname (localhost) so we expect to configure via environment - agentConfig, err := NewAgentConfig("test", "./testdata/TestDDAgentConfigYamlOnly-InvalidHostname.yaml", syscfg) - require.NoError(t, err) - - expectedHostname, _ := os.Hostname() - assert.Equal(t, expectedHostname, agentConfig.HostName) -} - -// TestGetHostnameShellCmd is a method that is called as a substitute for a dd-agent shell command, -// the GO_TEST_PROCESS flag ensures that if it is called as part of the test suite, it is skipped. -func TestGetHostnameShellCmd(t *testing.T) { - if os.Getenv("GO_TEST_PROCESS") != "1" { - return - } - defer os.Exit(0) - - args := os.Args - for len(args) > 0 { - if args[0] == "--" { - args = args[1:] - break - } - args = args[1:] - } - - if len(args) == 0 { - fmt.Fprintf(os.Stderr, "No command\n") - os.Exit(2) - } - - cmd, args := args[0], args[1:] - switch cmd { - case "agent-success": - assert.EqualValues(t, []string{"hostname"}, args) - fmt.Fprintf(os.Stdout, "unit_test_hostname") - case "agent-empty_hostname": - assert.EqualValues(t, []string{"hostname"}, args) - fmt.Fprintf(os.Stdout, "") - } -} - -// fakeExecCommand is a function that initialises a new exec.Cmd, one which will -// simply call TestShellProcessSuccess rather than the command it is provided. It will -// also pass through the command and its arguments as an argument to TestShellProcessSuccess -func fakeExecCommand(command string, args ...string) *exec.Cmd { - cs := []string{"-test.run=TestGetHostnameShellCmd", "--", command} - cs = append(cs, args...) - cmd := exec.Command(os.Args[0], cs...) - cmd.Env = []string{"GO_TEST_PROCESS=1"} - return cmd -} diff --git a/pkg/process/config/config_windows.go b/pkg/process/config/config_windows.go deleted file mode 100644 index fc74322c321ea..0000000000000 --- a/pkg/process/config/config_windows.go +++ /dev/null @@ -1,12 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -//go:build windows -// +build windows - -package config - -// defaultSystemProbeAddress is the default address to be used for connecting to the system probe -const defaultSystemProbeAddress = "localhost:3333" diff --git a/pkg/process/config/testdata/TestDDAgentConfig-NetConfig.yaml b/pkg/process/config/testdata/TestDDAgentConfig-NetConfig.yaml deleted file mode 100644 index 62f9f5f33b633..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfig-NetConfig.yaml +++ /dev/null @@ -1,2 +0,0 @@ -network_config: - enabled: true diff --git a/pkg/process/config/testdata/TestDDAgentConfig-OOMKillOnly.yaml b/pkg/process/config/testdata/TestDDAgentConfig-OOMKillOnly.yaml deleted file mode 100644 index 2dd3fe2cefbba..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfig-OOMKillOnly.yaml +++ /dev/null @@ -1,2 +0,0 @@ -system_probe_config: - enable_oom_kill: true diff --git a/pkg/process/config/testdata/TestDDAgentConfigBothVersions.yaml b/pkg/process/config/testdata/TestDDAgentConfigBothVersions.yaml deleted file mode 100644 index b792ebf4e8dce..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigBothVersions.yaml +++ /dev/null @@ -1,7 +0,0 @@ -api_key: apikey_20 - -process_config: - process_dd_url: http://my-process-app.datadoghq.com - queue_size: 10 - windows: - args_refresh_interval: 40 \ No newline at end of file diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-2.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-2.yaml deleted file mode 100644 index 97f2dde7f03e9..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-2.yaml +++ /dev/null @@ -1,28 +0,0 @@ -system_probe_config: - enabled: true - sysprobe_socket: /var/my-location/system-probe.log - disable_tcp: true - disable_udp: true - disable_ipv6: true - disable_dns_inspection: false - excluded_linux_versions: - - 5.5.0 - - 4.2.1 - closed_channel_size: 1000 - source_excludes: - 127.0.0.1: - - "5005" - 172.0.0.1/20: - - "*" - "*": - - "443" - dest_excludes: - 2001:db8::2:1: - - "5005" - 172.0.0.1/20: - - "*" - "*": - - "*" - -network_config: - enabled: false diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-Windows.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-Windows.yaml deleted file mode 100644 index ee20a6dde1ebd..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net-Windows.yaml +++ /dev/null @@ -1,7 +0,0 @@ -system_probe_config: - enabled: true - bpf_debug: true - sysprobe_socket: localhost:4444 - -network_config: - enabled: true diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net.yaml deleted file mode 100644 index 3e215ccb09cbd..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig-Net.yaml +++ /dev/null @@ -1,7 +0,0 @@ -system_probe_config: - enabled: true - bpf_debug: true - sysprobe_socket: /var/my-location/system-probe.log - -network_config: - enabled: true diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml deleted file mode 100644 index a2d5ac69ca5c2..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlAndSystemProbeConfig.yaml +++ /dev/null @@ -1,16 +0,0 @@ -api_key: apikey_20 -hostname: server-01 - -process_agent_enabled: true -process_config: - process_dd_url: http://my-process-app.datadoghq.com - enabled: 'true' - queue_size: 10 - intervals: - container: 8 - process: 30 - windows: - args_refresh_interval: 100 - add_new_args: false - scrub_args: false - expvar_port: 5065 diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlEnc.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlEnc.yaml deleted file mode 100644 index 0054a16c1765d..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlEnc.yaml +++ /dev/null @@ -1,5 +0,0 @@ -api_key: "ENC[my_api_key]" - -process_config: - enabled: 'true' -secret_backend_command: "./testdata/secret" diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlEnc2.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlEnc2.yaml deleted file mode 100644 index d56efdaa64b92..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlEnc2.yaml +++ /dev/null @@ -1,6 +0,0 @@ -api_key: "ENC[encrypted_key]" - -process_config: - enabled: 'true' - process_dd_url: "ENC[burrito.com]" -secret_backend_command: "./testdata/secret" diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-2.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-2.yaml deleted file mode 100644 index 412f677510743..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-2.yaml +++ /dev/null @@ -1,13 +0,0 @@ -api_key: apikey_20 - -process_agent_enabled: true -process_config: - enabled: 'false' - queue_size: 10 - intervals: - container: 8 - process: 30 - windows: - args_refresh_interval: -1 - add_new_args: true - scrub_args: true diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-3.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-3.yaml deleted file mode 100644 index a341991c78259..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-3.yaml +++ /dev/null @@ -1,9 +0,0 @@ -api_key: apikey_20 - -process_agent_enabled: true -process_config: - enabled: 'disabled' - queue_size: 10 - intervals: - container: 8 - process: 30 diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-4.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-4.yaml deleted file mode 100644 index a509048f5f855..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-4.yaml +++ /dev/null @@ -1,13 +0,0 @@ -api_key: apikey_20 - -process_agent_enabled: true -process_config: - enabled: 'disabled' - additional_endpoints: - https://process.datadoghq.eu: - - foo - - bar - queue_size: 10 - intervals: - container: 8 - process: 30 diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-5.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-5.yaml deleted file mode 100644 index a539f6d62cc83..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-5.yaml +++ /dev/null @@ -1,7 +0,0 @@ -api_key: apikey_20 -site: datadoghq.eu - -process_agent_enabled: true -process_config: - enabled: 'true' - process_dd_url: http://test-process.datadoghq.com diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-6.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-6.yaml deleted file mode 100644 index 7c8f74dfeb52b..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-6.yaml +++ /dev/null @@ -1,6 +0,0 @@ -api_key: apikey_20 -site: datacathq.eu - -process_agent_enabled: true -process_config: - enabled: 'true' diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-InvalidHostname.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-InvalidHostname.yaml deleted file mode 100644 index 84048df948c13..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly-InvalidHostname.yaml +++ /dev/null @@ -1,5 +0,0 @@ -hostname: localhost - -process_agent_enabled: true -process_config: - enabled: 'true' diff --git a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly.yaml b/pkg/process/config/testdata/TestDDAgentConfigYamlOnly.yaml deleted file mode 100644 index 021fea35cb7f1..0000000000000 --- a/pkg/process/config/testdata/TestDDAgentConfigYamlOnly.yaml +++ /dev/null @@ -1,14 +0,0 @@ -api_key: apikey_20 - -process_agent_enabled: true -process_config: - enabled: 'true' - grpc_connection_timeout_secs: 0 - queue_size: 10 - intervals: - container: 8 - process: 30 - windows: - args_refresh_interval: 100 - add_new_args: false - scrub_args: false diff --git a/pkg/process/config/testdata/TestEnvSiteConfig-Enc.yaml b/pkg/process/config/testdata/TestEnvSiteConfig-Enc.yaml deleted file mode 100644 index d2168f39a2d8f..0000000000000 --- a/pkg/process/config/testdata/TestEnvSiteConfig-Enc.yaml +++ /dev/null @@ -1,8 +0,0 @@ -site: datacathq.eu - -process_agent_enabled: true -process_config: - enabled: 'true' - process_dd_url: https://burrito.com -secret_backend_command: "./testdata/secret" - diff --git a/pkg/process/config/testdata/secret.go b/pkg/process/config/testdata/secret.go deleted file mode 100644 index 2e036517d61bd..0000000000000 --- a/pkg/process/config/testdata/secret.go +++ /dev/null @@ -1,47 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package main - -import ( - "encoding/json" - "fmt" - "os" -) - -type Input struct { - Version string `json:"version"` - Secrets []string `json:"secrets"` -} - -type SecretOutput struct { - Value string `json:"value"` - // Use pointer for error so if it's not provided null will be used - Error *string `json:"error"` -} - -func main() { - in := Input{} - err := json.NewDecoder(os.Stdin).Decode(&in) - if err != nil { - fmt.Fprintf(os.Stderr, "error occurred decoding input: %s", err) - os.Exit(1) - } - - // Append secret to all the secrets requested - - out := map[string]SecretOutput{} - for _, s := range in.Secrets { - out[s] = SecretOutput{ - Value: fmt.Sprintf("secret-%s", s), - } - } - - err = json.NewEncoder(os.Stdout).Encode(out) - if err != nil { - fmt.Fprintf(os.Stderr, "error occurred encoding output: %s", err) - os.Exit(1) - } -} diff --git a/pkg/process/config/yaml_config.go b/pkg/process/config/yaml_config.go deleted file mode 100644 index 698820491f7c1..0000000000000 --- a/pkg/process/config/yaml_config.go +++ /dev/null @@ -1,28 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2016-present Datadog, Inc. - -package config - -import ( - "path/filepath" - - "github.com/DataDog/datadog-agent/pkg/config" -) - -// LoadAgentConfig loads process-agent specific configurations based on the global Config object -func (a *AgentConfig) LoadAgentConfig(path string) error { - loadEnvVariables() - - // Resolve any secrets - if err := config.ResolveSecrets(config.Datadog, filepath.Base(path)); err != nil { - return err - } - - if config.Datadog.IsSet("hostname") { - a.HostName = config.Datadog.GetString("hostname") - } - - return nil -} diff --git a/pkg/process/events/listener_linux.go b/pkg/process/events/listener_linux.go index 7ad2b1da8f311..be4ffe86bdb90 100644 --- a/pkg/process/events/listener_linux.go +++ b/pkg/process/events/listener_linux.go @@ -46,7 +46,7 @@ type SysProbeListener struct { // NewListener returns a new SysProbeListener to listen for process events func NewListener(handler EventHandler) (*SysProbeListener, error) { - socketPath := ddconfig.Datadog.GetString("runtime_security_config.socket") + socketPath := ddconfig.SystemProbe.GetString("runtime_security_config.socket") if socketPath == "" { return nil, errors.New("runtime_security_config.socket must be set") } diff --git a/pkg/process/events/store.go b/pkg/process/events/store.go index 6800348fb6b25..be72396672d54 100644 --- a/pkg/process/events/store.go +++ b/pkg/process/events/store.go @@ -58,9 +58,9 @@ type pullRequest struct { // head points to the oldest event in the buffer, where data should be consumed from // tail points to the node where the next event will be inserted into // head = tail if -// * the store is empty, in which case the underlying ringNode doesn't have any data -// * the store is full. Subsequent Push operations override the data pointed by head and move both head and tail -// to the next position +// - the store is empty, in which case the underlying ringNode doesn't have any data +// - the store is full. Subsequent Push operations override the data pointed by head and move both head and tail +// to the next position type RingStore struct { head int tail int diff --git a/pkg/process/metadata/parser/dockerproxy_test.go b/pkg/process/metadata/parser/dockerproxy_test.go index d4cfa5a55e4b4..9418bd1f3b9b5 100644 --- a/pkg/process/metadata/parser/dockerproxy_test.go +++ b/pkg/process/metadata/parser/dockerproxy_test.go @@ -16,14 +16,14 @@ import ( // The example below represents the following scenario: // -// * Two containers (in this example a redis-client and a redis-server) are -// running on the same host (IP 10.0.2.15) +// - Two containers (in this example a redis-client and a redis-server) are +// running on the same host (IP 10.0.2.15) // -// * The redis-server binds to host port 32769 -// (`docker run --rm -d -p 6379:32769 redis:alpine`) +// - The redis-server binds to host port 32769 +// (`docker run --rm -d -p 6379:32769 redis:alpine`) // -// * The redis-client communicates to redis-server via the host IP/port -// (`docker run --rm redis:alpine redis-cli -h 10.0.2.15 -p 32769 set foo bar`) +// - The redis-client communicates to redis-server via the host IP/port +// (`docker run --rm redis:alpine redis-cli -h 10.0.2.15 -p 32769 set foo bar`) // // Since the two containers are co-located within the same host and the communication // is done via the Host IP/Port, network traffic flows through docker-proxy. diff --git a/pkg/process/monitor/process_monitor.go b/pkg/process/monitor/process_monitor.go index 6d652c5b19732..77426f989481b 100644 --- a/pkg/process/monitor/process_monitor.go +++ b/pkg/process/monitor/process_monitor.go @@ -60,7 +60,6 @@ type ProcessMonitor struct { procEventCallbacks map[ProcessEventType][]*ProcessCallback runningPids map[uint32]interface{} callbackRunner chan func() - callbackRunnerDone chan struct{} } type ProcessEventType int @@ -93,24 +92,27 @@ type ProcessCallback struct { // This monitor can monitor.Subscribe(callback, filter) callback on particular event // like process EXEC, EXIT. The callback will be called when the filter will match. // Filter can be applied on : -// process name (NAME) -// by default ANY is applied +// +// process name (NAME) +// by default ANY is applied // // Typical initialization: -// mon := GetProcessMonitor() -// mon.Subscribe(callback) -// mon.Initialize() +// +// mon := GetProcessMonitor() +// mon.Subscribe(callback) +// mon.Initialize() // // note: o GetProcessMonitor() will always return the same instance -// as we can only register once with netlink process event -// o mon.Subscribe() will subscribe callback before or after the Initialization -// o mon.Initialize() will scan current processes and call subscribed callback // -// o callback{Event: EXIT, Metadata: ANY} callback is called for all exit events, system wide -// o callback{Event: EXIT, Metadata: NAME} callback will be called if we seen the process Exec event, -// the metadata will be saved between Exec and Exit event per pid -// then the Exit callback will evaluate the same metadata on Exit. -// We need to save the metadata here as /proc/pid doesn't exist anymore. +// as we can only register once with netlink process event +// o mon.Subscribe() will subscribe callback before or after the Initialization +// o mon.Initialize() will scan current processes and call subscribed callback +// +// o callback{Event: EXIT, Metadata: ANY} callback is called for all exit events, system wide +// o callback{Event: EXIT, Metadata: NAME} callback will be called if we seen the process Exec event, +// the metadata will be saved between Exec and Exit event per pid +// then the Exit callback will evaluate the same metadata on Exit. +// We need to save the metadata here as /proc/pid doesn't exist anymore. func GetProcessMonitor() *ProcessMonitor { once.Do(func() { processMonitor = &ProcessMonitor{ @@ -140,16 +142,17 @@ func (p *ProcessMonitor) evalEXECCallback(c *ProcessCallback, pid uint32) { return } - var err error - var proc *process.Process - // We receive the Exec event first and /proc could be slow to update - end := time.Now().Add(10 * time.Millisecond) - for end.After(time.Now()) { - proc, err = process.NewProcess(int32(pid)) - if err == nil { - break + proc, err := process.NewProcess(int32(pid)) + if err != nil { + // We receive the Exec event first and /proc could be slow to update + end := time.Now().Add(10 * time.Millisecond) + for end.After(time.Now()) { + proc, err = process.NewProcess(int32(pid)) + if err == nil { + break + } + time.Sleep(time.Millisecond) } - time.Sleep(time.Millisecond) } if err != nil { // short living process can hit here (or later proc.Name() parsing) @@ -204,26 +207,19 @@ func (pm *ProcessMonitor) Initialize() error { pm.events = make(chan netlink.ProcEvent, processMonitorMaxEvents) pm.done = make(chan struct{}) - pm.errors = make(chan error) + pm.errors = make(chan error, 10) if err := netlink.ProcEventMonitor(pm.events, pm.done, pm.errors); err != nil { return fmt.Errorf("couldn't initialize process monitor: %s", err) } - pm.callbackRunnerDone = make(chan struct{}, runtime.NumCPU()) pm.callbackRunner = make(chan func(), runtime.NumCPU()) for i := 0; i < runtime.NumCPU(); i++ { pm.wg.Add(1) go func() { defer pm.wg.Done() - for { - select { - case <-pm.callbackRunnerDone: - return - case call, ok := <-pm.callbackRunner: - if !ok { - continue - } + for call := range pm.callbackRunner { + if call != nil { call() } } @@ -237,12 +233,12 @@ func (pm *ProcessMonitor) Initialize() error { defer func() { log.Info("netlink process monitor ended") pm.wg.Done() + close(pm.callbackRunner) }() for { select { case <-pm.done: return - case event, ok := <-pm.events: if !ok { return @@ -270,7 +266,7 @@ func (pm *ProcessMonitor) Initialize() error { if !ok { return } - log.Errorf("process montior error: %s", err) + log.Errorf("process monitor error: %s", err) pm.Stop() return } @@ -297,9 +293,10 @@ func (pm *ProcessMonitor) Initialize() error { // will remove the previously registered callback from the list // // By design : 1/ a callback object can be registered only once -// 2/ Exec callback with a Metadata (!=ANY) must be registred before the sibling Exit metadata, -// otherwise the Subscribe() will return an error as no metadata will be saved between Exec and Exit, -// please refer to GetProcessMonitor() +// +// 2/ Exec callback with a Metadata (!=ANY) must be registred before the sibling Exit metadata, +// otherwise the Subscribe() will return an error as no metadata will be saved between Exec and Exit, +// please refer to GetProcessMonitor() func (pm *ProcessMonitor) Subscribe(callback *ProcessCallback) (UnSubscribe func(), err error) { pm.m.Lock() defer pm.m.Unlock() @@ -346,15 +343,19 @@ func (pm *ProcessMonitor) Subscribe(callback *ProcessCallback) (UnSubscribe func func (pm *ProcessMonitor) Stop() { pm.m.Lock() - defer pm.m.Unlock() + if pm.refcount == 0 { + pm.m.Unlock() + return + } + pm.refcount-- if pm.refcount > 0 { + pm.m.Unlock() return } - close(pm.callbackRunnerDone) + pm.isInitialized = false + pm.m.Unlock() close(pm.done) pm.wg.Wait() - - pm.isInitialized = false } diff --git a/pkg/process/net/mocks/sys_probe_util.go b/pkg/process/net/mocks/sys_probe_util.go index fd62825d2a6c9..6626b400338d8 100644 --- a/pkg/process/net/mocks/sys_probe_util.go +++ b/pkg/process/net/mocks/sys_probe_util.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/process/net/resolver/resolver.go b/pkg/process/net/resolver/resolver.go index 68c39ae340b63..16f204dde497e 100644 --- a/pkg/process/net/resolver/resolver.go +++ b/pkg/process/net/resolver/resolver.go @@ -85,11 +85,24 @@ func (l *LocalResolver) Resolve(c *model.Connections) { } raddr.ContainerId = l.addrToCtrID[addr] + if conn.Laddr == nil { + continue + } + // resolve laddr - cid, ok := l.ctrForPid[int(conn.Pid)] - if !ok { + // + // if process monitoring is enabled in the system-probe, + // then laddr container id may be set, so check that + // first + cid := conn.Laddr.ContainerId + if cid == "" { + cid, _ = l.ctrForPid[int(conn.Pid)] + } + + if cid == "" { continue } + conn.Laddr.ContainerId = cid ip := procutil.AddressFromString(conn.Laddr.Ip) diff --git a/pkg/process/procutil/mocks/probe.go b/pkg/process/procutil/mocks/probe.go index 1d5c5e2bbbc77..ceaa025a4e87e 100644 --- a/pkg/process/procutil/mocks/probe.go +++ b/pkg/process/procutil/mocks/probe.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/process/util/chunking.go b/pkg/process/util/chunking.go index b9857414a824b..d7479afa4fc0c 100644 --- a/pkg/process/util/chunking.go +++ b/pkg/process/util/chunking.go @@ -5,26 +5,100 @@ package util -// PayloadList is an abstract list of payloads subject to chunking -type PayloadList interface { - // Len returns the length of the list - Len() int - // WeightAt returns weight for the payload at position `idx` in the list - WeightAt(idx int) int - // ToChunk copies a slice from the list to an abstract connected chunker providing the cumulative weight of the chunk - ToChunk(start, end int, weight int) +type WeightAt func(int) int + +// PayloadList is a wrapper for payloads subject to chunking +type PayloadList[T any] struct { + // The items to chunk + Items []T + // A function which returns the weight of an item at the given index + WeightAt WeightAt +} + +// Len returns the number of items in the list +func (l *PayloadList[T]) Len() int { + return len(l.Items) +} + +// chunkProps is used to track weight and size of chunks +type chunkProps struct { + weight int + size int +} + +type AppendToChunk[T any, P any] func(t *T, ps []P) +type OnAccept[T any] func(t *T) + +// ChunkAllocator manages operations for chunk allocation. The type T is the type of the chunk, and the type P is the +// type of the payload. +type ChunkAllocator[T any, P any] struct { + props []chunkProps + idx int + chunks []T + + // A function which adds the group of payloads to the chunk + AppendToChunk AppendToChunk[T, P] + // An optional callback that allows for manipulation the chunk when a payload is added + OnAccept OnAccept[T] +} + +// TakenSize returns the size allocated to the current chunk +func (c *ChunkAllocator[T, P]) TakenSize() int { + if c.idx < len(c.props) { + return c.props[c.idx].size + } + return 0 +} + +// TakenWeight returns the weight allocated to the current chunk +func (c *ChunkAllocator[T, P]) TakenWeight() int { + if c.idx < len(c.props) { + return c.props[c.idx].weight + } + return 0 +} + +// Append creates a new chunk at the end (cases when it is known any previously allocated chunks cannot fit the payload) +func (c *ChunkAllocator[T, P]) Append() { + c.idx = len(c.props) +} + +// Next moves to the next chunk or allocates a new chunk if the current chunk is the last +func (c *ChunkAllocator[T, P]) Next() { + c.idx++ +} + +// SetLastChunk sets the last chunk in case there is space at end across multiple runs +func (c *ChunkAllocator[T, P]) SetLastChunk() { + c.idx = 0 + if len(c.chunks) > 1 { + c.idx = len(c.chunks) - 1 + } +} + +// SetActiveChunk allows for rewinding in the case of multiple runs +func (c *ChunkAllocator[T, P]) SetActiveChunk(i int) { + c.idx = i +} + +// Accept accepts a group of payloads into the current chunk +func (c *ChunkAllocator[T, P]) Accept(ps []P, weight int) { + if c.idx >= len(c.chunks) { + // If we are outside of the range of allocated chunks, allocate a new one + c.chunks = append(c.chunks, *new(T)) + c.props = append(c.props, chunkProps{}) + } + + if c.OnAccept != nil { + c.OnAccept(&c.chunks[c.idx]) + } + c.AppendToChunk(&c.chunks[c.idx], ps) + c.props[c.idx].size += len(ps) + c.props[c.idx].weight += weight } -// ChunkAllocator abstracts management operations for chunk allocation -type ChunkAllocator interface { - // TakenSize returns the size allocated to the current chunk - TakenSize() int - // TakenWeight returns the weight allocated to the current chunk - TakenWeight() int - // Append creates a new chunk at the end (cases when it is known any previously allocated chunks cannot fit the payload) - Append() - // Next moves to the next chunk or allocates a new chunk if the current chunk is the last - Next() +func (c *ChunkAllocator[T, P]) GetChunks() *[]T { + return &c.chunks } // ChunkPayloadsBySizeAndWeight allocates chunks of payloads taking max allowed size and max allowed weight @@ -35,7 +109,8 @@ type ChunkAllocator interface { // - consider case when the current item exceeds the max allowed weight and create a new chunk at the end (`Append`) // this implementation allows for multiple passes through the chunks, which can be useful in cases with different payload types // being allocated within chunks -func ChunkPayloadsBySizeAndWeight(l PayloadList, a ChunkAllocator, maxChunkSize int, maxChunkWeight int) { +// See PayloadList and ChunkAllocator for a description of the type params. +func ChunkPayloadsBySizeAndWeight[T any, P any](l *PayloadList[P], a *ChunkAllocator[T, P], maxChunkSize int, maxChunkWeight int) { start := 0 chunkWeight := 0 // Take available size and available weight by consulting the current chunk @@ -51,7 +126,7 @@ func ChunkPayloadsBySizeAndWeight(l PayloadList, a ChunkAllocator, maxChunkSize // We are exceeding available size or available weight and it is time to create a new chunk if size > 0 { // We already accumulated some items - create a new chunk - l.ToChunk(start, i, chunkWeight) + a.Accept(l.Items[start:i], chunkWeight) a.Next() } // Reset chunk weight @@ -66,7 +141,7 @@ func ChunkPayloadsBySizeAndWeight(l PayloadList, a ChunkAllocator, maxChunkSize a.Append() } // Chunk a single iem - l.ToChunk(i, i+1, itemWeight) + a.Accept(l.Items[i:i+1], itemWeight) a.Next() // Skip over this single item start = i + 1 @@ -77,7 +152,7 @@ func ChunkPayloadsBySizeAndWeight(l PayloadList, a ChunkAllocator, maxChunkSize a.Next() } } - // Reset available size and available weight based ont he current chunk + // Reset available size and available weight based on the current chunk availableSize = maxChunkSize - a.TakenSize() availableWeight = maxChunkWeight - a.TakenWeight() } @@ -88,6 +163,6 @@ func ChunkPayloadsBySizeAndWeight(l PayloadList, a ChunkAllocator, maxChunkSize } // Chunk the remainder of payloads if start < l.Len() { - l.ToChunk(start, l.Len(), chunkWeight) + a.Accept(l.Items[start:], chunkWeight) } } diff --git a/pkg/process/util/chunking_test.go b/pkg/process/util/chunking_test.go index 3a6c0ead13236..61b871fac992b 100644 --- a/pkg/process/util/chunking_test.go +++ b/pkg/process/util/chunking_test.go @@ -17,84 +17,6 @@ type testPayload struct { weight int } -type testPayloadList struct { - payloads []*testPayload - chunker testPayloadChunker -} - -type testPayloadChunker interface { - Accept(payloads []*testPayload, weight int) -} - -func (l *testPayloadList) Len() int { - return len(l.payloads) -} - -func (l *testPayloadList) WeightAt(idx int) int { - if idx >= len(l.payloads) { - return 0 - } - return l.payloads[idx].weight -} - -func (l *testPayloadList) ToChunk(start, end int, weight int) { - l.chunker.Accept(l.payloads[start:end], weight) -} - -// chunkProps is used to track weight and size of chunks -type chunkProps struct { - weight int - size int -} - -// chunkPropsTracker tracks weight and size of chunked payloads -type chunkPropsTracker struct { - props []chunkProps - idx int -} - -// TakenSize returns the size allocated to the current chunk -func (c *chunkPropsTracker) TakenSize() int { - if c.idx < len(c.props) { - return c.props[c.idx].size - } - return 0 -} - -// TakenWeight returns the weight allocated to the current chunk -func (c *chunkPropsTracker) TakenWeight() int { - if c.idx < len(c.props) { - return c.props[c.idx].weight - } - return 0 -} - -// Append creates a new chunk at the end (cases when it is known any previously allocated chunks cannot fit the payload) -func (c *chunkPropsTracker) Append() { - c.idx = len(c.props) -} - -// Next moves to the next chunk or allocates a new chunk if the current chunk is the last -func (c *chunkPropsTracker) Next() { - c.idx++ -} - -type testChunker struct { - chunkPropsTracker - chunks [][]*testPayload -} - -func (c *testChunker) Accept(payloads []*testPayload, weight int) { - if c.idx >= len(c.chunks) { - c.chunks = append(c.chunks, []*testPayload{}) - c.props = append(c.props, chunkProps{}) - } - - c.chunks[c.idx] = append(c.chunks[c.idx], payloads...) - c.props[c.idx].size += len(payloads) - c.props[c.idx].weight += weight -} - type chunkGroup struct { weights []int start int @@ -108,7 +30,7 @@ type chunkTest struct { expectedIDs [][]int } -func (ct *chunkTest) runGroup(id int, chunker *testChunker, g chunkGroup) { +func (ct *chunkTest) runGroup(id int, chunker *ChunkAllocator[[]*testPayload, *testPayload], g chunkGroup) { payloads := make([]*testPayload, len(g.weights)) for i := range payloads { payloads[i] = &testPayload{ @@ -118,18 +40,24 @@ func (ct *chunkTest) runGroup(id int, chunker *testChunker, g chunkGroup) { id++ } - list := &testPayloadList{ - payloads: payloads, - chunker: chunker, + list := &PayloadList[*testPayload]{ + Items: payloads, + WeightAt: func(i int) int { + return payloads[i].weight + }, } - chunker.idx = g.start + chunker.SetActiveChunk(g.start) ChunkPayloadsBySizeAndWeight(list, chunker, ct.maxChunkSize, ct.maxChunkWeight) } func (ct *chunkTest) run(t *testing.T) { t.Helper() - chunker := &testChunker{} + chunker := &ChunkAllocator[[]*testPayload, *testPayload]{ + AppendToChunk: func(c *[]*testPayload, ps []*testPayload) { + *c = append(*c, ps...) + }, + } id := 1 for _, g := range ct.groups { @@ -137,8 +65,8 @@ func (ct *chunkTest) run(t *testing.T) { id += len(g.weights) } actualIDs := make([][]int, len(chunker.chunks)) - for i := range chunker.chunks { - for _, p := range chunker.chunks[i] { + for i := range *chunker.GetChunks() { + for _, p := range (*chunker.GetChunks())[i] { actualIDs[i] = append(actualIDs[i], p.id) } } diff --git a/pkg/process/util/containers_test.go b/pkg/process/util/containers_test.go index 2dbe31bbfef72..85eb6262f6530 100644 --- a/pkg/process/util/containers_test.go +++ b/pkg/process/util/containers_test.go @@ -402,17 +402,17 @@ func TestGetContainers(t *testing.T) { // Step 2: Test proper rate computation // cID1Metrics.ContainerStats.Timestamp = testTime.Add(10 * time.Second) - cID1Metrics.ContainerStats.CPU.User = pointer.Float64Ptr(6000000000) - cID1Metrics.ContainerStats.CPU.System = pointer.Float64Ptr(4000000000) - cID1Metrics.ContainerStats.CPU.Total = pointer.Float64Ptr(2000000000) - cID1Metrics.ContainerStats.IO.ReadBytes = pointer.Float64Ptr(400) - cID1Metrics.ContainerStats.IO.WriteBytes = pointer.Float64Ptr(800) - cID1Metrics.ContainerStats.Memory.UsageTotal = pointer.Float64Ptr(43000) + cID1Metrics.ContainerStats.CPU.User = pointer.Ptr(6000000000.0) + cID1Metrics.ContainerStats.CPU.System = pointer.Ptr(4000000000.0) + cID1Metrics.ContainerStats.CPU.Total = pointer.Ptr(2000000000.0) + cID1Metrics.ContainerStats.IO.ReadBytes = pointer.Ptr(400.0) + cID1Metrics.ContainerStats.IO.WriteBytes = pointer.Ptr(800.0) + cID1Metrics.ContainerStats.Memory.UsageTotal = pointer.Ptr(43000.0) cID1Metrics.NetworkStats.Timestamp = testTime.Add(10 * time.Second) - cID1Metrics.NetworkStats.BytesRcvd = pointer.Float64Ptr(83) - cID1Metrics.NetworkStats.BytesSent = pointer.Float64Ptr(82) - cID1Metrics.NetworkStats.PacketsRcvd = pointer.Float64Ptr(821) - cID1Metrics.NetworkStats.PacketsSent = pointer.Float64Ptr(820) + cID1Metrics.NetworkStats.BytesRcvd = pointer.Ptr(83.0) + cID1Metrics.NetworkStats.BytesSent = pointer.Ptr(82.0) + cID1Metrics.NetworkStats.PacketsRcvd = pointer.Ptr(821.0) + cID1Metrics.NetworkStats.PacketsSent = pointer.Ptr(820.0) metricsCollector.SetContainerEntry("cID1", cID1Metrics) // Remove one container from previous rates diff --git a/pkg/proto/datadog/remoteconfig/remoteconfig.proto b/pkg/proto/datadog/remoteconfig/remoteconfig.proto index 4b502a89cdad4..c5204d16517f9 100644 --- a/pkg/proto/datadog/remoteconfig/remoteconfig.proto +++ b/pkg/proto/datadog/remoteconfig/remoteconfig.proto @@ -53,6 +53,7 @@ message LatestConfigsRequest { bool has_error = 11; string error = 12; string trace_agent_env = 13; + string org_uuid = 14; } message LatestConfigsResponse { @@ -93,6 +94,7 @@ message ClientTracer { message ClientAgent { string name = 1; string version = 2; + string cluster_name = 3; } message ConfigState { diff --git a/pkg/proto/pbgo/api.pb.go b/pkg/proto/pbgo/api.pb.go index 3569d3def2e28..197f152ae1071 100644 --- a/pkg/proto/pbgo/api.pb.go +++ b/pkg/proto/pbgo/api.pb.go @@ -276,50 +276,54 @@ type AgentSecureClient interface { // subscribes to added, removed, or changed entities in the Tagger // and streams them to clients as events. // can be called through the HTTP gateway, and events will be streamed as JSON: - // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ - // -XPOST -k https://localhost:5001/v1/grpc/tagger/stream_entities - // { - // "result": { - // "entity": { - // "id": { - // "prefix": "kubernetes_pod_uid", - // "uid": "4025461f832caf3fceb7fc2a32f879c6" - // }, - // "hash": "cad4fc8fc409fcc1", - // "lowCardinalityTags": [ - // "kube_namespace:kube-system", - // "pod_phase:running" - // ] - // } - // } - //} + // + // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ + // -XPOST -k https://localhost:5001/v1/grpc/tagger/stream_entities + // { + // "result": { + // "entity": { + // "id": { + // "prefix": "kubernetes_pod_uid", + // "uid": "4025461f832caf3fceb7fc2a32f879c6" + // }, + // "hash": "cad4fc8fc409fcc1", + // "lowCardinalityTags": [ + // "kube_namespace:kube-system", + // "pod_phase:running" + // ] + // } + // } + // } TaggerStreamEntities(ctx context.Context, in *StreamTagsRequest, opts ...grpc.CallOption) (AgentSecure_TaggerStreamEntitiesClient, error) // fetches an entity from the Tagger with the desired cardinality tags. // can be called through the HTTP gateway, and entity will be returned as JSON: - // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ - // -XPOST -k -H "Content-Type: application/json" \ - // --data '{"id":{"prefix":"kubernetes_pod_uid","uid":"d575fb58-82dc-418e-bfb1-aececc9bc507"}}' \ - // https://localhost:5001/v1/grpc/tagger/fetch_entity - // { - // "id": { - // "prefix": "kubernetes_pod_uid", - // "uid": "d575fb58-82dc-418e-bfb1-aececc9bc507" - // }, - // "tags": [ - // "kube_namespace:kube-system", - // "pod_phase:running", - // "kube_deployment:coredns", - // "kube_service:kube-dns" - // ] - //} + // + // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ + // -XPOST -k -H "Content-Type: application/json" \ + // --data '{"id":{"prefix":"kubernetes_pod_uid","uid":"d575fb58-82dc-418e-bfb1-aececc9bc507"}}' \ + // https://localhost:5001/v1/grpc/tagger/fetch_entity + // { + // "id": { + // "prefix": "kubernetes_pod_uid", + // "uid": "d575fb58-82dc-418e-bfb1-aececc9bc507" + // }, + // "tags": [ + // "kube_namespace:kube-system", + // "pod_phase:running", + // "kube_deployment:coredns", + // "kube_service:kube-dns" + // ] + // } TaggerFetchEntity(ctx context.Context, in *FetchEntityRequest, opts ...grpc.CallOption) (*FetchEntityResponse, error) // Trigger a dogstatsd capture. Only one capture can be triggered at a time. // Can be called through the HTTP gateway, and entity will be returned as JSON: - // TODO: add the curl code here + // + // TODO: add the curl code here DogstatsdCaptureTrigger(ctx context.Context, in *CaptureTriggerRequest, opts ...grpc.CallOption) (*CaptureTriggerResponse, error) // Trigger a dogstatsd capture. Only one capture can be triggered at a time. // Can be called through the HTTP gateway, and entity will be returned as JSON: - // TODO: add the curl code here + // + // TODO: add the curl code here DogstatsdSetTaggerState(ctx context.Context, in *TaggerState, opts ...grpc.CallOption) (*TaggerStateResponse, error) ClientGetConfigs(ctx context.Context, in *ClientGetConfigsRequest, opts ...grpc.CallOption) (*ClientGetConfigsResponse, error) GetConfigState(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*GetStateConfigResponse, error) @@ -327,18 +331,23 @@ type AgentSecureClient interface { // streams them to clients as events. // Can be called through the HTTP gateway, and events will be streamed as JSON. // Example call that receives all the events: - // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ - // -XPOST -k https://localhost:5001/v1/grpc/workloadmeta/stream_entities + // + // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ + // -XPOST -k https://localhost:5001/v1/grpc/workloadmeta/stream_entities + // // Example call that receives only unset events: - // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ - // -XPOST -k -H "Content-Type: application/json" \ - // --data '{"filter":{"eventType":2}}' \ - // https://localhost:5001/v1/grpc/workloadmeta/stream_entities + // + // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ + // -XPOST -k -H "Content-Type: application/json" \ + // --data '{"filter":{"eventType":2}}' \ + // https://localhost:5001/v1/grpc/workloadmeta/stream_entities + // // Example call that receives only from the cluster orchestrator: - // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ - // -XPOST -k -H "Content-Type: application/json" \ - // --data '{"filter":{"source":3}}' \ - // https://localhost:5001/v1/grpc/workloadmeta/stream_entities + // + // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ + // -XPOST -k -H "Content-Type: application/json" \ + // --data '{"filter":{"source":3}}' \ + // https://localhost:5001/v1/grpc/workloadmeta/stream_entities WorkloadmetaStreamEntities(ctx context.Context, in *WorkloadmetaStreamRequest, opts ...grpc.CallOption) (AgentSecure_WorkloadmetaStreamEntitiesClient, error) } @@ -464,50 +473,54 @@ type AgentSecureServer interface { // subscribes to added, removed, or changed entities in the Tagger // and streams them to clients as events. // can be called through the HTTP gateway, and events will be streamed as JSON: - // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ - // -XPOST -k https://localhost:5001/v1/grpc/tagger/stream_entities - // { - // "result": { - // "entity": { - // "id": { - // "prefix": "kubernetes_pod_uid", - // "uid": "4025461f832caf3fceb7fc2a32f879c6" - // }, - // "hash": "cad4fc8fc409fcc1", - // "lowCardinalityTags": [ - // "kube_namespace:kube-system", - // "pod_phase:running" - // ] - // } - // } - //} + // + // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ + // -XPOST -k https://localhost:5001/v1/grpc/tagger/stream_entities + // { + // "result": { + // "entity": { + // "id": { + // "prefix": "kubernetes_pod_uid", + // "uid": "4025461f832caf3fceb7fc2a32f879c6" + // }, + // "hash": "cad4fc8fc409fcc1", + // "lowCardinalityTags": [ + // "kube_namespace:kube-system", + // "pod_phase:running" + // ] + // } + // } + // } TaggerStreamEntities(*StreamTagsRequest, AgentSecure_TaggerStreamEntitiesServer) error // fetches an entity from the Tagger with the desired cardinality tags. // can be called through the HTTP gateway, and entity will be returned as JSON: - // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ - // -XPOST -k -H "Content-Type: application/json" \ - // --data '{"id":{"prefix":"kubernetes_pod_uid","uid":"d575fb58-82dc-418e-bfb1-aececc9bc507"}}' \ - // https://localhost:5001/v1/grpc/tagger/fetch_entity - // { - // "id": { - // "prefix": "kubernetes_pod_uid", - // "uid": "d575fb58-82dc-418e-bfb1-aececc9bc507" - // }, - // "tags": [ - // "kube_namespace:kube-system", - // "pod_phase:running", - // "kube_deployment:coredns", - // "kube_service:kube-dns" - // ] - //} + // + // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ + // -XPOST -k -H "Content-Type: application/json" \ + // --data '{"id":{"prefix":"kubernetes_pod_uid","uid":"d575fb58-82dc-418e-bfb1-aececc9bc507"}}' \ + // https://localhost:5001/v1/grpc/tagger/fetch_entity + // { + // "id": { + // "prefix": "kubernetes_pod_uid", + // "uid": "d575fb58-82dc-418e-bfb1-aececc9bc507" + // }, + // "tags": [ + // "kube_namespace:kube-system", + // "pod_phase:running", + // "kube_deployment:coredns", + // "kube_service:kube-dns" + // ] + // } TaggerFetchEntity(context.Context, *FetchEntityRequest) (*FetchEntityResponse, error) // Trigger a dogstatsd capture. Only one capture can be triggered at a time. // Can be called through the HTTP gateway, and entity will be returned as JSON: - // TODO: add the curl code here + // + // TODO: add the curl code here DogstatsdCaptureTrigger(context.Context, *CaptureTriggerRequest) (*CaptureTriggerResponse, error) // Trigger a dogstatsd capture. Only one capture can be triggered at a time. // Can be called through the HTTP gateway, and entity will be returned as JSON: - // TODO: add the curl code here + // + // TODO: add the curl code here DogstatsdSetTaggerState(context.Context, *TaggerState) (*TaggerStateResponse, error) ClientGetConfigs(context.Context, *ClientGetConfigsRequest) (*ClientGetConfigsResponse, error) GetConfigState(context.Context, *empty.Empty) (*GetStateConfigResponse, error) @@ -515,18 +528,23 @@ type AgentSecureServer interface { // streams them to clients as events. // Can be called through the HTTP gateway, and events will be streamed as JSON. // Example call that receives all the events: - // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ - // -XPOST -k https://localhost:5001/v1/grpc/workloadmeta/stream_entities + // + // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ + // -XPOST -k https://localhost:5001/v1/grpc/workloadmeta/stream_entities + // // Example call that receives only unset events: - // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ - // -XPOST -k -H "Content-Type: application/json" \ - // --data '{"filter":{"eventType":2}}' \ - // https://localhost:5001/v1/grpc/workloadmeta/stream_entities + // + // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ + // -XPOST -k -H "Content-Type: application/json" \ + // --data '{"filter":{"eventType":2}}' \ + // https://localhost:5001/v1/grpc/workloadmeta/stream_entities + // // Example call that receives only from the cluster orchestrator: - // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ - // -XPOST -k -H "Content-Type: application/json" \ - // --data '{"filter":{"source":3}}' \ - // https://localhost:5001/v1/grpc/workloadmeta/stream_entities + // + // $ curl -H "authorization: Bearer $(cat /etc/datadog-agent/auth_token)" \ + // -XPOST -k -H "Content-Type: application/json" \ + // --data '{"filter":{"source":3}}' \ + // https://localhost:5001/v1/grpc/workloadmeta/stream_entities WorkloadmetaStreamEntities(*WorkloadmetaStreamRequest, AgentSecure_WorkloadmetaStreamEntitiesServer) error } diff --git a/pkg/proto/pbgo/mocks/api_mockgen.pb.go b/pkg/proto/pbgo/mocks/api_mockgen.pb.go index e7c2edecd01cc..59116ac7fb7f0 100644 --- a/pkg/proto/pbgo/mocks/api_mockgen.pb.go +++ b/pkg/proto/pbgo/mocks/api_mockgen.pb.go @@ -1,5 +1,5 @@ // Code generated by MockGen. DO NOT EDIT. -// Source: /workspaces/datadog-agent/pkg/proto/pbgo/api.pb.go +// Source: /Users/kyle.ames/go/src/github.com/DataDog/datadog-agent/pkg/proto/pbgo/api.pb.go // Package mock_pbgo is a generated GoMock package. package mock_pbgo diff --git a/pkg/proto/pbgo/remoteconfig.pb.go b/pkg/proto/pbgo/remoteconfig.pb.go index bc21b43d67d75..a0c8174b8558c 100644 --- a/pkg/proto/pbgo/remoteconfig.pb.go +++ b/pkg/proto/pbgo/remoteconfig.pb.go @@ -361,6 +361,7 @@ type LatestConfigsRequest struct { HasError bool `protobuf:"varint,11,opt,name=has_error,json=hasError,proto3" json:"has_error,omitempty"` Error string `protobuf:"bytes,12,opt,name=error,proto3" json:"error,omitempty"` TraceAgentEnv string `protobuf:"bytes,13,opt,name=trace_agent_env,json=traceAgentEnv,proto3" json:"trace_agent_env,omitempty"` + OrgUuid string `protobuf:"bytes,14,opt,name=org_uuid,json=orgUuid,proto3" json:"org_uuid,omitempty"` } func (x *LatestConfigsRequest) Reset() { @@ -479,6 +480,13 @@ func (x *LatestConfigsRequest) GetTraceAgentEnv() string { return "" } +func (x *LatestConfigsRequest) GetOrgUuid() string { + if x != nil { + return x.OrgUuid + } + return "" +} + type LatestConfigsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -800,8 +808,9 @@ type ClientAgent struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + ClusterName string `protobuf:"bytes,3,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` } func (x *ClientAgent) Reset() { @@ -850,6 +859,13 @@ func (x *ClientAgent) GetVersion() string { return "" } +func (x *ClientAgent) GetClusterName() string { + if x != nil { + return x.ClusterName + } + return "" +} + type ConfigState struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1570,7 +1586,7 @@ var file_datadog_remoteconfig_remoteconfig_proto_rawDesc = []byte{ 0x0a, 0x03, 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x72, 0x61, 0x77, 0x22, 0x2c, 0x0a, 0x04, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x10, 0x0a, 0x03, - 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x72, 0x61, 0x77, 0x22, 0xaa, + 0x72, 0x61, 0x77, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x72, 0x61, 0x77, 0x22, 0xc5, 0x04, 0x0a, 0x14, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, @@ -1605,185 +1621,189 @@ var file_datadog_remoteconfig_remoteconfig_proto_rawDesc = []byte{ 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x76, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, - 0x61, 0x63, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x76, 0x22, 0xd6, 0x01, 0x0a, 0x15, - 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, - 0x6d, 0x65, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x61, - 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x4d, 0x65, 0x74, 0x61, 0x73, 0x12, 0x44, 0x0a, 0x0e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x52, 0x0d, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, - 0x69, 0x6c, 0x65, 0x73, 0x22, 0x25, 0x0a, 0x0f, 0x4f, 0x72, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0xef, 0x02, 0x0a, 0x06, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x72, 0x61, 0x63, - 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x72, 0x61, 0x63, - 0x65, 0x72, 0x12, 0x41, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x72, 0x61, - 0x63, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x64, 0x61, 0x74, 0x61, - 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, - 0x72, 0x61, 0x63, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x67, 0x65, 0x6e, - 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x12, 0x3e, 0x0a, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x67, - 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x22, 0x0a, - 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0xd1, 0x01, - 0x0a, 0x0c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x12, 0x1d, - 0x0a, 0x0a, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, - 0x63, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, - 0x76, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x12, 0x1f, 0x0a, 0x0b, - 0x61, 0x70, 0x70, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, - 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, - 0x73, 0x22, 0x3b, 0x0a, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x93, - 0x01, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, - 0x75, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, - 0x63, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x80, 0x02, 0x0a, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x72, 0x6f, 0x6f, 0x74, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x40, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, - 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, - 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x30, 0x0a, 0x14, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, - 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x12, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x48, 0x0a, 0x0e, 0x54, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x46, 0x69, 0x6c, 0x65, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6c, 0x67, - 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x6c, - 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x4a, 0x04, 0x08, 0x02, 0x10, - 0x03, 0x22, 0x74, 0x0a, 0x0e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x4d, - 0x65, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, - 0x36, 0x0a, 0x06, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x48, 0x61, 0x73, 0x68, 0x52, - 0x06, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x17, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x12, 0x4e, 0x0a, 0x13, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x11, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x18, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, + 0x61, 0x63, 0x65, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x76, 0x12, 0x19, 0x0a, 0x08, 0x6f, + 0x72, 0x67, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, + 0x72, 0x67, 0x55, 0x75, 0x69, 0x64, 0x22, 0xd6, 0x01, 0x0a, 0x15, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, - 0x05, 0x72, 0x6f, 0x6f, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, - 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x0b, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, - 0x22, 0x3d, 0x0a, 0x0d, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x68, - 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, - 0xc2, 0x04, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0c, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x37, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x60, 0x0a, 0x0e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, + 0x12, 0x3e, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, + 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x65, + 0x74, 0x61, 0x73, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x65, 0x74, 0x61, 0x73, + 0x12, 0x44, 0x0a, 0x0e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x74, + 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, + 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x52, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x12, 0x37, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x46, 0x69, + 0x6c, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x22, + 0x25, 0x0a, 0x0f, 0x4f, 0x72, 0x67, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0xef, 0x02, 0x0a, 0x06, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x12, 0x31, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, + 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x12, 0x41, 0x0a, + 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x63, + 0x65, 0x72, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, + 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x0c, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x52, 0x0b, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6c, + 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, + 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x4a, 0x04, 0x08, 0x04, + 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0xd1, 0x01, 0x0a, 0x0c, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x75, 0x6e, + 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, + 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, + 0x75, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, + 0x75, 0x61, 0x67, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, + 0x61, 0x63, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, + 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x22, 0x5e, 0x0a, 0x0b, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x93, 0x01, 0x0a, + 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x6c, 0x79, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x22, 0x80, 0x02, 0x0a, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x72, 0x6f, 0x6f, 0x74, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x40, + 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, + 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x61, 0x73, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x61, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x14, 0x0a, + 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x12, 0x30, 0x0a, 0x14, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x5f, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x12, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x48, 0x0a, 0x0e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, + 0x69, 0x6c, 0x65, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6c, 0x67, 0x6f, 0x72, + 0x69, 0x74, 0x68, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x6c, 0x67, 0x6f, + 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, + 0x74, 0x0a, 0x0e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, + 0x61, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x12, 0x36, 0x0a, + 0x06, 0x68, 0x61, 0x73, 0x68, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x48, 0x61, 0x73, 0x68, 0x52, 0x06, 0x68, + 0x61, 0x73, 0x68, 0x65, 0x73, 0x22, 0x99, 0x01, 0x0a, 0x17, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x12, 0x4e, 0x0a, 0x13, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x11, + 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, + 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x18, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x47, 0x65, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x72, 0x6f, 0x6f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x05, 0x72, + 0x6f, 0x6f, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x37, + 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0x3d, + 0x0a, 0x0d, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, + 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x22, 0xc2, 0x04, + 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x66, 0x0a, 0x10, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x0f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x1a, 0x5d, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x5f, 0x0a, 0x12, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, - 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x1a, 0x42, 0x0a, 0x14, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0xeb, 0x01, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x50, - 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x56, 0x31, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x65, - 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, - 0x75, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, - 0x44, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, - 0x49, 0x44, 0x22, 0x67, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x50, 0x72, 0x65, 0x64, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x53, 0x0a, 0x14, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, - 0x5f, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x31, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x50, 0x72, 0x65, 0x64, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x56, 0x31, 0x52, 0x12, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x50, - 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x56, 0x31, 0x42, 0x10, 0x5a, 0x0e, 0x70, - 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x67, 0x6f, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x60, 0x0a, 0x0e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x64, + 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x65, + 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x66, 0x0a, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x3b, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, + 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x1a, 0x5d, + 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5f, 0x0a, + 0x12, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, + 0x0a, 0x14, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0xeb, 0x01, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x50, 0x72, 0x65, + 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x56, 0x31, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x20, + 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, + 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x70, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, + 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, + 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x44, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x44, + 0x22, 0x67, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x73, 0x12, 0x53, 0x0a, 0x14, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x5f, 0x70, + 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x31, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x64, 0x6f, 0x67, 0x2e, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x65, 0x72, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x56, 0x31, 0x52, 0x12, 0x74, 0x72, 0x61, 0x63, 0x65, 0x72, 0x50, 0x72, 0x65, + 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x56, 0x31, 0x42, 0x10, 0x5a, 0x0e, 0x70, 0x6b, 0x67, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x70, 0x62, 0x67, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/quantile/bin.go b/pkg/quantile/bin.go index e1f6426ef5dd9..8a0e99d8c9b13 100644 --- a/pkg/quantile/bin.go +++ b/pkg/quantile/bin.go @@ -35,8 +35,9 @@ func (b *bin) incrSafe(by int) int { // appendSafe appends 1 or more bins with the given key safely handing overflow by // inserting multiple buckets when needed. -// (1) n <= maxBinWidth : 1 bin -// (2) n > maxBinWidth : >1 bin +// +// (1) n <= maxBinWidth : 1 bin +// (2) n > maxBinWidth : >1 bin func appendSafe(bins []bin, k Key, n int) []bin { if n <= maxBinWidth { return append(bins, bin{k: k, n: uint16(n)}) diff --git a/pkg/quantile/config.go b/pkg/quantile/config.go index f230feba51d66..965abdea6bac5 100644 --- a/pkg/quantile/config.go +++ b/pkg/quantile/config.go @@ -80,7 +80,8 @@ func (c *Config) binLow(k Key) float64 { } // key returns a value k such that: -// γ^k <= v < γ^(k+1) +// +// γ^k <= v < γ^(k+1) func (c *Config) key(v float64) Key { switch { case v < 0: diff --git a/pkg/quantile/print.go b/pkg/quantile/print.go index 984a10d89cf57..c7c0517e62240 100644 --- a/pkg/quantile/print.go +++ b/pkg/quantile/print.go @@ -28,7 +28,8 @@ type memSized interface { // printBins pretty prints bins to w. // // output: -// :... +// +// :... func printBins(w io.Writer, bins []bin, maxPerLine int) { for i, b := range bins { prefix := "" diff --git a/pkg/quantile/sparse.go b/pkg/quantile/sparse.go index 1faaa96690bb3..6a41c23b5e468 100644 --- a/pkg/quantile/sparse.go +++ b/pkg/quantile/sparse.go @@ -31,8 +31,9 @@ func (s *Sketch) String() string { } // MemSize returns memory use in bytes: -// used: uses len(bins) -// allocated: uses cap(bins) +// +// used: uses len(bins) +// allocated: uses cap(bins) func (s *Sketch) MemSize() (used, allocated int) { const ( basicSize = int(unsafe.Sizeof(summary.Summary{})) @@ -85,8 +86,9 @@ func (s *Sketch) Merge(c *Config, o *Sketch) { // Quantile returns v such that s.count*q items are <= v. // // Special cases are: -// Quantile(c, q <= 0) = min -// Quantile(c, q >= 1) = max +// +// Quantile(c, q <= 0) = min +// Quantile(c, q >= 1) = max func (s *Sketch) Quantile(c *Config, q float64) float64 { switch { case s.count == 0: diff --git a/pkg/quantile/store.go b/pkg/quantile/store.go index 91ab14fc3f72d..af62ac0109aff 100644 --- a/pkg/quantile/store.go +++ b/pkg/quantile/store.go @@ -36,8 +36,9 @@ func (s *sparseStore) Cols() (k []int32, n []uint32) { } // MemSize returns memory use in bytes: -// used: uses len(bins) -// allocated: uses cap(bins) +// +// used: uses len(bins) +// allocated: uses cap(bins) func (s *sparseStore) MemSize() (used, allocated int) { const ( binSize = int(unsafe.Sizeof(bin{})) @@ -248,8 +249,9 @@ func (s *sparseStore) insert(c *Config, keys []Key) { // bufCountLeadingEqual returns the number of consecutive keys in a[i:] that equal a[i]. // given: -// i = 0 1 2 3 4 5 6 -// a = 4 5 6 8 8 8 9 +// +// i = 0 1 2 3 4 5 6 +// a = 4 5 6 8 8 8 9 // // bufCountLeadingEqual(a, 3) = 3, a[3] = 8 // bufCountLeadingEqual(a, 4) = 2, a[4] = 8 diff --git a/pkg/quantile/store_test.go b/pkg/quantile/store_test.go index 6068041f280ef..14ca24d109e22 100644 --- a/pkg/quantile/store_test.go +++ b/pkg/quantile/store_test.go @@ -12,7 +12,9 @@ import ( ) // buildStore creates a store with the bins defined by a simple dsl: -// : : ... +// +// : : ... +// // For example, `0:3 1:1 2:1 2:1 3:max` // TODO: move to main_test.go func buildStore(t *testing.T, dsl string) *sparseStore { diff --git a/pkg/quantile/summary/equal.go b/pkg/quantile/summary/equal.go index 0be9eee506565..2c08c3755c388 100644 --- a/pkg/quantile/summary/equal.go +++ b/pkg/quantile/summary/equal.go @@ -17,10 +17,11 @@ const ( // ulpDistance is the absolute difference in units of least precision. // // Special cases are (order of arguments doesn't matter): -// ulpDistance(NaN, b) = max -// ulpDistance(+Inf, -Inf) = max -// ulpDistance(+Inf, +Inf) = 0 -// ulpDistance(-Inf, -Inf) = 0 +// +// ulpDistance(NaN, b) = max +// ulpDistance(+Inf, -Inf) = max +// ulpDistance(+Inf, +Inf) = 0 +// ulpDistance(-Inf, -Inf) = 0 func ulpDistance(a, b float64) uint64 { switch { case a == b: diff --git a/pkg/remoteconfig/state/configs.go b/pkg/remoteconfig/state/configs.go index 7051a342969f6..ea813dcce348b 100644 --- a/pkg/remoteconfig/state/configs.go +++ b/pkg/remoteconfig/state/configs.go @@ -22,7 +22,7 @@ import ( 4. Add a method on the `Repository` to retrieved typed configs for the product. */ -var allProducts = []string{ProductAPMSampling, ProductCWSDD, ProductCWSCustom, ProductASMFeatures, ProductASMDD, ProductASMData} +var allProducts = []string{ProductAPMSampling, ProductCWSDD, ProductCWSCustom, ProductASMFeatures, ProductASMDD, ProductASMData, ProductAPMTracing} const ( // ProductAPMSampling is the apm sampling product @@ -37,6 +37,8 @@ const ( ProductASMDD = "ASM_DD" // ProductASMData is the ASM product used to configure WAF rules data ProductASMData = "ASM_DATA" + // ProductAPMTracing is the apm tracing product + ProductAPMTracing = "APM_TRACING" ) // ErrNoConfigVersion occurs when a target file's custom meta is missing the config version @@ -58,6 +60,8 @@ func parseConfig(product string, raw []byte, metadata Metadata) (interface{}, er c, err = parseConfigASMDD(raw, metadata) case ProductASMData: c, err = parseConfigASMData(raw, metadata) + case ProductAPMTracing: + c, err = parseConfigAPMTracing(raw, metadata) default: return nil, fmt.Errorf("unknown product - %s", product) } @@ -314,6 +318,34 @@ func (r *Repository) ASMDataConfigs() map[string]ASMDataConfig { return typedConfigs } +type APMTracingConfig struct { + Config []byte + Metadata Metadata +} + +func parseConfigAPMTracing(data []byte, metadata Metadata) (APMTracingConfig, error) { + // Delegate the parsing responsibility to the cluster agent + return APMTracingConfig{ + Config: data, + Metadata: metadata, + }, nil +} + +// APMTracingConfigs returns the currently active APMTracing configs +func (r *Repository) APMTracingConfigs() map[string]APMTracingConfig { + typedConfigs := make(map[string]APMTracingConfig) + configs := r.getConfigs(ProductAPMTracing) + for path, conf := range configs { + // We control this, so if this has gone wrong something has gone horribly wrong + typed, ok := conf.(APMTracingConfig) + if !ok { + panic("unexpected config stored as APMTracingConfig") + } + typedConfigs[path] = typed + } + return typedConfigs +} + // Metadata stores remote config metadata for a given configuration type Metadata struct { Product string diff --git a/cmd/cluster-agent/app/health.go b/pkg/runtime/gomemlimit.go similarity index 53% rename from cmd/cluster-agent/app/health.go rename to pkg/runtime/gomemlimit.go index 8d4b852e6062a..a1f01e6034bd1 100644 --- a/cmd/cluster-agent/app/health.go +++ b/pkg/runtime/gomemlimit.go @@ -3,15 +3,15 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build kubeapiserver -// +build kubeapiserver +//go:build !linux || !go1.19 -package app +package runtime import ( - "github.com/DataDog/datadog-agent/cmd/cluster-agent/commands" + "errors" ) -func init() { - ClusterAgentCmd.AddCommand(commands.Health(loggerName, &confPath, &flagNoColor)) +// SetGoMemLimit configures Go memory limit based on cgroups. Only supported on Linux. +func SetGoMemLimit(isContainerized bool) error { + return errors.New("unsupported") } diff --git a/pkg/runtime/gomemlimit_linux.go b/pkg/runtime/gomemlimit_linux.go new file mode 100644 index 0000000000000..309d292a7ab37 --- /dev/null +++ b/pkg/runtime/gomemlimit_linux.go @@ -0,0 +1,51 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux && go1.19 + +package runtime + +import ( + "errors" + "os" + "runtime/debug" + + "github.com/DataDog/datadog-agent/pkg/util/cgroups" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +// SetGoMemLimit configures Go memory soft limit based on cgroups. +// The soft limit is set to 90% of the cgroup memory hard limit. +// The function is noop if +// - GOMEMLIMIT is set already +// - There is no cgroup limit +// +// Read more about Go memory limit in https://tip.golang.org/doc/gc-guide#Memory_limit +func SetGoMemLimit(isContainerized bool) error { + if _, ok := os.LookupEnv("GOMEMLIMIT"); ok { + log.Debug("GOMEMLIMIT is set already, doing nothing") + return nil + } + selfReader, err := cgroups.NewSelfReader("/proc", isContainerized) + if err != nil { + return err + } + cgroup := selfReader.GetCgroup(cgroups.SelfCgroupIdentifier) + if cgroup == nil { + return errors.New("cannot get cgroup") + } + var stats cgroups.MemoryStats + if err := cgroup.GetMemoryStats(&stats); err != nil { + return err + } + if stats.Limit == nil { + log.Debug("Cgroup memory limit not found, doing nothing") + return nil + } + softLimit := int64(0.9 * float64(*stats.Limit)) + log.Infof("Cgroup memory limit is %d, setting gomemlimit to %d", *stats.Limit, softLimit) + debug.SetMemoryLimit(softLimit) + return nil +} diff --git a/pkg/sbom/forwarder.go b/pkg/sbom/forwarder.go new file mode 100644 index 0000000000000..fd42e48946856 --- /dev/null +++ b/pkg/sbom/forwarder.go @@ -0,0 +1,59 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package sbom + +import ( + "fmt" + "net/url" + + "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/config/resolver" + "github.com/DataDog/datadog-agent/pkg/forwarder" + "github.com/DataDog/datadog-agent/pkg/util/flavor" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +func buildKeysPerDomains(conf config.Config) (map[string][]string, error) { + mainURL := config.GetMainEndpointWithConfig(conf, "https://sbom-intake.", "sbom.dd_url") + if _, err := url.Parse(mainURL); err != nil { + return nil, fmt.Errorf("could not parse sbom main endpoint: %w", err) + } + + keysPerDomain := map[string][]string{ + mainURL: { + conf.GetString("api_key"), + }, + } + + if !conf.IsSet("sbom.additional_endpoints") { + return keysPerDomain, nil + } + + additionalEndpoints := conf.GetStringMapStringSlice("sbom.additional_endpoints") + + return config.MergeAdditionalEndpoints(keysPerDomain, additionalEndpoints) +} + +// NewForwarder returns a forwarder for SBOM events +func NewForwarder() *forwarder.DefaultForwarder { + if !config.Datadog.GetBool("sbom.enabled") { + return nil + } + + if flavor.GetFlavor() != flavor.DefaultAgent { + return nil + } + + keysPerDomain, err := buildKeysPerDomains(config.Datadog) + if err != nil { + log.Errorf("Cannot build keys per domains: %v", err) + return nil + } + + options := forwarder.NewOptionsWithResolvers(resolver.NewSingleDomainResolvers(keysPerDomain)) + + return forwarder.NewDefaultForwarder(options) +} diff --git a/pkg/secrets/check_rights_nix.go b/pkg/secrets/check_rights_nix.go index f1fd18d12dfa9..9ce04d09f8d90 100644 --- a/pkg/secrets/check_rights_nix.go +++ b/pkg/secrets/check_rights_nix.go @@ -10,13 +10,10 @@ package secrets import ( "fmt" - "os" "os/user" - "strconv" "syscall" ) -// checkRights validates that a secret backend has supported permissions func checkRights(path string, allowGroupExec bool) error { var stat syscall.Stat_t if err := syscall.Stat(path, &stat); err != nil { @@ -93,52 +90,3 @@ func checkGroupPermission(stat *syscall.Stat_t, usr *user.User, userGroups []str return nil } - -// checkConfigFilePermissions validates that a config file has supported permissions when using secret_backend_command_sha256 hash -var checkConfigFilePermissions = func(path string) error { - var stat syscall.Stat_t - if err := syscall.Stat(path, &stat); err != nil { - return fmt.Errorf("unable to check permissions for '%s': can't stat it: %s", path, err) - } - - if stat.Mode&syscall.S_IWOTH != 0 { - return fmt.Errorf("invalid config file permissions for '%s': cannot have o+w permission", path) - } - - usr, err := user.Current() - if err != nil { - return fmt.Errorf("can't query current user: %s", err) - } - - groups, err := usr.GroupIds() - if err != nil { - return fmt.Errorf("can't query user groups: %s", err) - } - - if strconv.FormatInt(int64(stat.Uid), 10) != usr.Uid { - return fmt.Errorf("invalid config file permissions for '%s': not owned by %s", path, usr.Uid) - } - - for _, g := range groups { - if strconv.FormatInt(int64(stat.Gid), 10) == g { - return nil - } - } - - return fmt.Errorf("invalid config file permissions for '%s': not owned by any groups for user %s", path, usr.Uid) -} - -// lockOpenFile opens the file and prevents overwrite and delete by another process -func lockOpenFile(path string) (*os.File, error) { - fd, err := syscall.Open(path, syscall.O_CREAT|syscall.O_RDONLY, 0600) - if err != nil { - return nil, err - } - - if err = syscall.Flock(fd, syscall.LOCK_EX); err != nil { - syscall.Close(fd) - return nil, err - } - - return os.NewFile(uintptr(fd), path), nil -} diff --git a/pkg/secrets/check_rights_nix_test.go b/pkg/secrets/check_rights_nix_test.go index 22669a2cf6f39..5f8d3668c0d43 100644 --- a/pkg/secrets/check_rights_nix_test.go +++ b/pkg/secrets/check_rights_nix_test.go @@ -144,22 +144,3 @@ func Test_checkGroupPermission(t *testing.T) { }) } } - -func TestCheckConfigFilePermissionsOtherRights(t *testing.T) { - tmpfile, err := os.CreateTemp("", "agent-config-file") - require.Nil(t, err) - defer os.Remove(tmpfile.Name()) - - // file exists - require.Error(t, checkConfigFilePermissions("/does not exists")) - - require.NoError(t, os.Chmod(tmpfile.Name(), 0660)) - require.NoError(t, checkConfigFilePermissions(tmpfile.Name())) - - // other should have no write right - require.NoError(t, os.Chmod(tmpfile.Name(), 0664)) - require.NoError(t, checkConfigFilePermissions(tmpfile.Name())) - - require.NoError(t, os.Chmod(tmpfile.Name(), 0666)) - require.Error(t, checkConfigFilePermissions(tmpfile.Name())) -} diff --git a/pkg/secrets/check_rights_windows.go b/pkg/secrets/check_rights_windows.go index a6746271e0ada..559386ca1530b 100644 --- a/pkg/secrets/check_rights_windows.go +++ b/pkg/secrets/check_rights_windows.go @@ -11,7 +11,6 @@ package secrets import ( "fmt" "os" - "syscall" "unsafe" "golang.org/x/sys/windows" @@ -189,99 +188,10 @@ var getDDAgentUserSID = func() (*windows.SID, error) { return nil, fmt.Errorf("could not read installedDomain in registry: %s", err) } - sid, _, _, err := windows.LookupSID(domain, user) - return sid, err -} - -// checkConfigFilePermissions validates that a config file has supported permissions when using secret_backend_command_sha256 hash -var checkConfigFilePermissions = func(filename string) error { - if _, err := os.Stat(filename); err != nil { - if os.IsNotExist(err) { - return fmt.Errorf("config file '%s' does not exist", filename) - } - return fmt.Errorf("unable to check permissions for config file '%s': %s", filename, err) - } - - fileDacl, err := getACL(filename) - if err != nil { - return fmt.Errorf("could not query ACLs for config file '%s': %s", filename, err) - } - - var aclSizeInfo winutil.AclSizeInformation - err = winutil.GetAclInformation(fileDacl, &aclSizeInfo, winutil.AclSizeInformationEnum) - if err != nil { - return fmt.Errorf("could not query ACLs for config file '%s': %s", filename, err) - } - - // create the sids that are acceptable to us (local system account and - // administrators group) - localSystem, err := getLocalSystemSID() - if err != nil { - return fmt.Errorf("could not query Local System SID: %s", err) - } - defer windows.FreeSid(localSystem) - - administrators, err := getAdministratorsSID() - if err != nil { - return fmt.Errorf("could not query Administrator SID: %s", err) - } - defer windows.FreeSid(administrators) - - secretUser, err := getSecretUserSID() - if err != nil { - return err - } - - for i := uint32(0); i < aclSizeInfo.AceCount; i++ { - var pAce *winutil.AccessAllowedAce - if err := winutil.GetAce(fileDacl, i, &pAce); err != nil { - return fmt.Errorf("could not query a ACE on '%s': %s", filename, err) - } - - if pAce.AceType == winutil.ACCESS_DENIED_ACE_TYPE { - return fmt.Errorf("invalid permissions for config file '%s': explicit DENY not supported", filename) - } - - if pAce.AceType == winutil.ACCESS_ALLOWED_ACE_TYPE { - compareSid := (*windows.SID)(unsafe.Pointer(&pAce.SidStart)) - compareIsLocalSystem := windows.EqualSid(compareSid, localSystem) - compareIsAdministrators := windows.EqualSid(compareSid, administrators) - compareIsSecretUser := windows.EqualSid(compareSid, secretUser) - allowedAccountForWrite := compareIsLocalSystem || compareIsAdministrators || compareIsSecretUser - hasOnlyAllowForRead := pAce.AccessMask&^(windows.FILE_GENERIC_READ) == 0 - if !allowedAccountForWrite && !hasOnlyAllowForRead { - return fmt.Errorf("invalid permissions for config file '%s': users/groups other than LOCAL_SYSTEM, Administrators or %s have rights on it", filename, secretUser) - } - } + if domain != "" { + user = domain + `\` + user } - return nil -} - -// lockOpenFile opens the file and prevents overwrite and delete by another process -func lockOpenFile(name string) (*os.File, error) { - h, err := winOpenFileShareRead(name) - if err != nil { - return nil, err - } - return os.NewFile(uintptr(h), name), nil -} - -// winOpenFileShareRead opens the file in FILE_SHARE_READ sharing mode -func winOpenFileShareRead(path string) (syscall.Handle, error) { - const fileFlagNormal = 0x00000080 - filename, err := syscall.UTF16PtrFromString(path) - if err != nil { - return syscall.Handle(0), err - } - handle, err := syscall.CreateFile( - filename, - syscall.GENERIC_READ, - syscall.FILE_SHARE_READ, - nil, - syscall.OPEN_EXISTING, - fileFlagNormal, - 0) - - return handle, err + sid, _, _, err := windows.LookupSID("", user) + return sid, err } diff --git a/pkg/secrets/fetch_secret.go b/pkg/secrets/fetch_secret.go index 60207c8585d58..c3da015324c4e 100644 --- a/pkg/secrets/fetch_secret.go +++ b/pkg/secrets/fetch_secret.go @@ -11,33 +11,21 @@ package secrets import ( "bytes" "context" - "crypto/sha256" "encoding/json" "errors" "fmt" - "hash" - "io" - "os" "os/exec" - "path/filepath" "strconv" "strings" "time" - "github.com/dustin/go-humanize" - "github.com/DataDog/datadog-agent/pkg/telemetry" "github.com/DataDog/datadog-agent/pkg/util/common" "github.com/DataDog/datadog-agent/pkg/util/log" ) -const ( - // PayloadVersion defines the current payload version sent to a secret backend - PayloadVersion = "1.0" - - // maxHashFileLimit is the limit for the size of hashing of the binary - maxHashFileLimit = 1024 * 1024 * 1024 // 1Gi -) +// PayloadVersion defines the current payload version sent to a secret backend +const PayloadVersion = "1.0" var ( tlmSecretBackendElapsed = telemetry.NewGauge("secret_backend", "elapsed_ms", []string{"command", "exit_code"}, "Elapsed time of secret backend invocation") @@ -66,33 +54,7 @@ func execCommand(inputPayload string) ([]byte, error) { } defer done() - if secretBackendCommandSHA256 != "" { - if !filepath.IsAbs(secretBackendCommand) { - return nil, fmt.Errorf("error while running '%s': absolute path required with SHA256", secretBackendCommand) - } - - if err := checkConfigFilePermissions(configFileUsed); err != nil { - return nil, err - } - - f, err := lockOpenFile(secretBackendCommand) - if err != nil { - return nil, err - } - defer f.Close() //nolint:errcheck - - sha256, err := fileHashSHA256(f) - if err != nil { - return nil, err - } - - if !strings.EqualFold(sha256, secretBackendCommandSHA256) { - return nil, fmt.Errorf("error while running '%s': SHA256 mismatch, actual '%s' expected '%s'", secretBackendCommand, sha256, secretBackendCommandSHA256) - } - - } - - if err = checkRights(cmd.Path, secretBackendCommandAllowGroupExec); err != nil { + if err := checkRights(cmd.Path, secretBackendCommandAllowGroupExec); err != nil { return nil, err } @@ -200,52 +162,3 @@ func fetchSecret(secretsHandle []string, origin string) (map[string]string, erro } return res, nil } - -func fileHashSHA256(f *os.File) (string, error) { - stat, err := f.Stat() - if err != nil { - return "", err - } - - if !stat.Mode().IsRegular() || - (stat.Mode()&(os.ModeSymlink|os.ModeSocket|os.ModeCharDevice|os.ModeDevice|os.ModeNamedPipe) != 0) { - return "", fmt.Errorf("expecting regular file, got 0x%x", stat.Mode()) - } - - h := sha256.New() - - fileSize := stat.Size() - if fileSize == 0 { - return formatHash(h), nil - } - - if fileSize > maxHashFileLimit { - return "", fmt.Errorf("file size exceeds the limit of %s", humanize.Bytes(maxHashFileLimit)) - } - - r := io.LimitReader(f, maxHashFileLimit) - - var bufSize int64 = 102400 - if fileSize < bufSize { - bufSize = fileSize - } - - buffer := make([]byte, bufSize) - - for { - read, err := r.Read(buffer) - if err != nil { - if err != io.EOF { - return "", err - } - break - } - h.Write(buffer[:read]) - } - - return formatHash(h), nil -} - -func formatHash(h hash.Hash) string { - return fmt.Sprintf("%x", h.Sum(nil)) -} diff --git a/pkg/secrets/fetch_secret_test.go b/pkg/secrets/fetch_secret_test.go index 57a40eec705c6..86324390643f4 100644 --- a/pkg/secrets/fetch_secret_test.go +++ b/pkg/secrets/fetch_secret_test.go @@ -13,7 +13,6 @@ import ( "fmt" "os" "os/exec" - "path/filepath" "runtime" "testing" @@ -89,8 +88,7 @@ func TestExecCommandError(t *testing.T) { defer func() { secretBackendCommand = "" secretBackendArguments = []string{} - secretBackendTimeout = defaultSecretBackendTimeout - SecretBackendOutputMaxSize = defaultSecretBackendOutputMaxSize + secretBackendTimeout = 0 }() inputPayload := "{\"version\": \"" + PayloadVersion + "\" , \"secrets\": [\"sec1\", \"sec2\"]}" @@ -148,63 +146,6 @@ func TestExecCommandError(t *testing.T) { assert.Equal(t, "error while running './test/response_too_long/response_too_long"+binExtension+"': command output was too long: exceeded 20 bytes", err.Error()) } -func TestExecCommandWithHash(t *testing.T) { - prevCheckConfigFilePermissions := checkConfigFilePermissions - checkConfigFilePermissions = func(string) error { return nil } - defer func() { - secretBackendCommand = "" - secretBackendArguments = []string{} - secretBackendTimeout = defaultSecretBackendTimeout - secretBackendCommandSHA256 = "" - SecretBackendOutputMaxSize = defaultSecretBackendOutputMaxSize - checkConfigFilePermissions = prevCheckConfigFilePermissions - }() - - inputPayload := `{"version": ""` + PayloadVersion + `" , "secrets": ["sec1", "sec2"]}` - - // test simple with hash (no error) - secretBackendCommand, _ = filepath.Abs("./test/simple/simple" + binExtension) - setCorrectRight(secretBackendCommand) - f, err := os.Open(secretBackendCommand) - require.NoError(t, err) - hash, err := fileHashSHA256(f) - _ = f.Close() - require.NoError(t, err) - secretBackendCommandSHA256 = hash - resp, err := execCommand(inputPayload) - require.NoError(t, err) - require.Equal(t, []byte(`{"handle1":{"value":"simple_password"}}`), resp) -} - -func TestExecCommandErrorNotAbsPath(t *testing.T) { - secretBackendCommand = "test/simple/simple.go" - secretBackendCommandSHA256 = "foo" - defer func() { - secretBackendCommand = "" - secretBackendCommandSHA256 = "" - }() - resp, err := execCommand("") - assert.Nil(t, resp) - assert.EqualError(t, err, `error while running 'test/simple/simple.go': absolute path required with SHA256`) -} - -func TestExecCommandErrorHashMismatch(t *testing.T) { - var err error - secretBackendCommand, err = filepath.Abs("./test/simple/simple.go") - require.NoError(t, err) - secretBackendCommandSHA256 = "foo" - prevCheckConfigFilePermissions := checkConfigFilePermissions - checkConfigFilePermissions = func(string) error { return nil } - defer func() { - secretBackendCommand = "" - secretBackendCommandSHA256 = "" - checkConfigFilePermissions = prevCheckConfigFilePermissions - }() - resp, err := execCommand("") - assert.Nil(t, resp) - assert.EqualError(t, err, `error while running '`+secretBackendCommand+`': SHA256 mismatch, actual '0e47e4f4749aa31a8d0c92607b75c251efdf9602fec15f060a18ad4aabbf0d1f' expected 'foo'`) -} - func TestFetchSecretExecError(t *testing.T) { defer func() { secretCache = map[string]string{} @@ -305,12 +246,3 @@ func TestFetchSecret(t *testing.T) { }, secretCache) assert.Equal(t, map[string]common.StringSet{"handle1": common.NewStringSet("test"), "handle2": common.NewStringSet("test")}, secretOrigin) } - -func TestCheckHash(t *testing.T) { - f, err := os.Open("test/simple/simple.go") - assert.NoError(t, err) - defer f.Close() //nolint:errcheck - hash, err := fileHashSHA256(f) - assert.NoError(t, err) - assert.Equal(t, "0e47e4f4749aa31a8d0c92607b75c251efdf9602fec15f060a18ad4aabbf0d1f", hash) -} diff --git a/pkg/secrets/info.go b/pkg/secrets/info.go index f42c2a456fe34..4019d6adc9c8b 100644 --- a/pkg/secrets/info.go +++ b/pkg/secrets/info.go @@ -14,13 +14,12 @@ import ( // SecretInfo export troubleshooting information about the decrypted secrets type SecretInfo struct { - ExecutablePath string - ExecutablePathSHA256 string - Rights string - RightDetails string - UnixOwner string - UnixGroup string - SecretsHandles map[string][]string + ExecutablePath string + Rights string + RightDetails string + UnixOwner string + UnixGroup string + SecretsHandles map[string][]string } // Print output a SecretInfo to a io.Writer @@ -28,12 +27,6 @@ func (si *SecretInfo) Print(w io.Writer) { fmt.Fprintf(w, "=== Checking executable rights ===\n") fmt.Fprintf(w, "Executable path: %s\n", si.ExecutablePath) - sha256 := si.ExecutablePathSHA256 - if si.ExecutablePathSHA256 == "" { - sha256 = "Not configured" - } - fmt.Fprintf(w, "Executable path SHA256: %s\n", sha256) - fmt.Fprintf(w, "Check Rights: %s\n", si.Rights) fmt.Fprintf(w, "\nRights Detail:\n") diff --git a/pkg/secrets/no_secrets.go b/pkg/secrets/no_secrets.go index e20c4be7404be..3e9cf6972c0a9 100644 --- a/pkg/secrets/no_secrets.go +++ b/pkg/secrets/no_secrets.go @@ -18,8 +18,7 @@ import ( var SecretBackendOutputMaxSize = 1024 * 1024 // Init placeholder when compiled without the 'secrets' build tag -func Init(command string, arguments []string, timeout int, maxSize int, groupExecPerm bool, sha256 string, configFile string) { -} +func Init(command string, arguments []string, timeout int, maxSize int, groupExecPerm bool) {} // Decrypt encrypted secrets are not available on windows func Decrypt(data []byte, origin string) ([]byte, error) { @@ -28,5 +27,5 @@ func Decrypt(data []byte, origin string) ([]byte, error) { // GetDebugInfo exposes debug informations about secrets to be included in a flare func GetDebugInfo() (*SecretInfo, error) { - return nil, fmt.Errorf("secret feature is not available in this version of the agent") + return nil, fmt.Errorf("Secret feature is not available in this version of the agent") } diff --git a/pkg/secrets/secrets.go b/pkg/secrets/secrets.go index b0aad691c2d71..763fe4c848883 100644 --- a/pkg/secrets/secrets.go +++ b/pkg/secrets/secrets.go @@ -18,11 +18,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" ) -const ( - defaultSecretBackendTimeout = 5 - defaultSecretBackendOutputMaxSize = 1024 * 1024 -) - var ( secretCache map[string]string // list of handles and where they were found @@ -30,13 +25,11 @@ var ( secretBackendCommand string secretBackendArguments []string - secretBackendTimeout = defaultSecretBackendTimeout + secretBackendTimeout = 5 secretBackendCommandAllowGroupExec bool - secretBackendCommandSHA256 string - configFileUsed string // SecretBackendOutputMaxSize defines max size of the JSON output from a secrets reader backend - SecretBackendOutputMaxSize = defaultSecretBackendOutputMaxSize + SecretBackendOutputMaxSize = 1024 * 1024 ) func init() { @@ -47,14 +40,12 @@ func init() { // Init initializes the command and other options of the secrets package. Since // this package is used by the 'config' package to decrypt itself we can't // directly use it. -func Init(command string, arguments []string, timeout int, maxSize int, groupExecPerm bool, sha256 string, configFile string) { +func Init(command string, arguments []string, timeout int, maxSize int, groupExecPerm bool) { secretBackendCommand = command secretBackendArguments = arguments secretBackendTimeout = timeout SecretBackendOutputMaxSize = maxSize secretBackendCommandAllowGroupExec = groupExecPerm - secretBackendCommandSHA256 = sha256 - configFileUsed = configFile if secretBackendCommandAllowGroupExec { log.Warnf("Agent configuration relax permissions constraint on the secret backend cmd, Group can read and exec") } @@ -212,10 +203,7 @@ func GetDebugInfo() (*SecretInfo, error) { if secretBackendCommand == "" { return nil, fmt.Errorf("No secret_backend_command set: secrets feature is not enabled") } - info := &SecretInfo{ - ExecutablePath: secretBackendCommand, - ExecutablePathSHA256: secretBackendCommandSHA256, - } + info := &SecretInfo{ExecutablePath: secretBackendCommand} info.populateRights() info.SecretsHandles = map[string][]string{} diff --git a/pkg/security/api/mocks/security_module__get_process_events_client.go b/pkg/security/api/mocks/security_module__get_process_events_client.go index a465f757aac0a..55980bf049ac1 100644 --- a/pkg/security/api/mocks/security_module__get_process_events_client.go +++ b/pkg/security/api/mocks/security_module__get_process_events_client.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/security/api/mocks/security_module_client.go b/pkg/security/api/mocks/security_module_client.go index 76085bbc3ab6d..3d5c0bbf93cef 100644 --- a/pkg/security/api/mocks/security_module_client.go +++ b/pkg/security/api/mocks/security_module_client.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/security/api/mocks/security_module_server.go b/pkg/security/api/mocks/security_module_server.go index 8bd63b22baa98..7a8a4c5f9f4f6 100644 --- a/pkg/security/api/mocks/security_module_server.go +++ b/pkg/security/api/mocks/security_module_server.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.15.0. DO NOT EDIT. +// Code generated by mockery v2.16.0. DO NOT EDIT. package mocks diff --git a/pkg/security/config/config.go b/pkg/security/config/config.go index 2dc50dc6bfbf4..9cf03fd6cc411 100644 --- a/pkg/security/config/config.go +++ b/pkg/security/config/config.go @@ -149,6 +149,9 @@ type Config struct { // ActivityDumpSyscallMonitorPeriod defines the minimum amount of time to wait between 2 syscalls event for the same // process. ActivityDumpSyscallMonitorPeriod time.Duration + // ActivityDumpMaxDumpCountPerWorkload defines the maximum amount of dumps that the agent should send for a workload + ActivityDumpMaxDumpCountPerWorkload int + // # Dynamic configuration fields: // ActivityDumpMaxDumpSize defines the maximum size of a dump ActivityDumpMaxDumpSize func() int @@ -171,6 +174,12 @@ type Config struct { RuntimeCompiledConstantsEnabled bool // RuntimeCompiledConstantsIsSet is set if the runtime compiled constants option is user-set RuntimeCompiledConstantsIsSet bool + // NetworkProcessEventMonitoringEnabled is set to true if `runtime_security_config.event_monitoring.network_process.enabled` + // is set to true + NetworkProcessEventMonitoringEnabled bool + // ProcessEventMonitoringEnabled is set to true if `runtime_security_config.event_monitoring.process.enabled` + // is set to true + ProcessEventMonitoringEnabled bool // EventMonitoring enables event monitoring. Send events to external consumer. EventMonitoring bool // RemoteConfigurationEnabled defines whether to use remote monitoring @@ -201,74 +210,77 @@ func setEnv() { func NewConfig(cfg *config.Config) (*Config, error) { c := &Config{ Config: *ebpf.NewConfig(), - RuntimeEnabled: coreconfig.Datadog.GetBool("runtime_security_config.enabled"), - FIMEnabled: coreconfig.Datadog.GetBool("runtime_security_config.fim_enabled"), - EventMonitoring: coreconfig.Datadog.GetBool("runtime_security_config.event_monitoring.enabled"), - EnableKernelFilters: coreconfig.Datadog.GetBool("runtime_security_config.enable_kernel_filters"), - EnableApprovers: coreconfig.Datadog.GetBool("runtime_security_config.enable_approvers"), - EnableDiscarders: coreconfig.Datadog.GetBool("runtime_security_config.enable_discarders"), - FlushDiscarderWindow: coreconfig.Datadog.GetInt("runtime_security_config.flush_discarder_window"), - SocketPath: coreconfig.Datadog.GetString("runtime_security_config.socket"), - EventServerBurst: coreconfig.Datadog.GetInt("runtime_security_config.event_server.burst"), - EventServerRate: coreconfig.Datadog.GetInt("runtime_security_config.event_server.rate"), - EventServerRetention: coreconfig.Datadog.GetInt("runtime_security_config.event_server.retention"), - PIDCacheSize: coreconfig.Datadog.GetInt("runtime_security_config.pid_cache_size"), - LoadControllerEventsCountThreshold: int64(coreconfig.Datadog.GetInt("runtime_security_config.load_controller.events_count_threshold")), - LoadControllerDiscarderTimeout: time.Duration(coreconfig.Datadog.GetInt("runtime_security_config.load_controller.discarder_timeout")) * time.Second, - LoadControllerControlPeriod: time.Duration(coreconfig.Datadog.GetInt("runtime_security_config.load_controller.control_period")) * time.Second, - StatsPollingInterval: time.Duration(coreconfig.Datadog.GetInt("runtime_security_config.events_stats.polling_interval")) * time.Second, - StatsTagsCardinality: coreconfig.Datadog.GetString("runtime_security_config.events_stats.tags_cardinality"), + RuntimeEnabled: coreconfig.SystemProbe.GetBool("runtime_security_config.enabled"), + FIMEnabled: coreconfig.SystemProbe.GetBool("runtime_security_config.fim_enabled"), + EnableKernelFilters: coreconfig.SystemProbe.GetBool("runtime_security_config.enable_kernel_filters"), + EnableApprovers: coreconfig.SystemProbe.GetBool("runtime_security_config.enable_approvers"), + EnableDiscarders: coreconfig.SystemProbe.GetBool("runtime_security_config.enable_discarders"), + FlushDiscarderWindow: coreconfig.SystemProbe.GetInt("runtime_security_config.flush_discarder_window"), + SocketPath: coreconfig.SystemProbe.GetString("runtime_security_config.socket"), + EventServerBurst: coreconfig.SystemProbe.GetInt("runtime_security_config.event_server.burst"), + EventServerRate: coreconfig.SystemProbe.GetInt("runtime_security_config.event_server.rate"), + EventServerRetention: coreconfig.SystemProbe.GetInt("runtime_security_config.event_server.retention"), + PIDCacheSize: coreconfig.SystemProbe.GetInt("runtime_security_config.pid_cache_size"), + LoadControllerEventsCountThreshold: int64(coreconfig.SystemProbe.GetInt("runtime_security_config.load_controller.events_count_threshold")), + LoadControllerDiscarderTimeout: time.Duration(coreconfig.SystemProbe.GetInt("runtime_security_config.load_controller.discarder_timeout")) * time.Second, + LoadControllerControlPeriod: time.Duration(coreconfig.SystemProbe.GetInt("runtime_security_config.load_controller.control_period")) * time.Second, + StatsPollingInterval: time.Duration(coreconfig.SystemProbe.GetInt("runtime_security_config.events_stats.polling_interval")) * time.Second, + StatsTagsCardinality: coreconfig.SystemProbe.GetString("runtime_security_config.events_stats.tags_cardinality"), StatsdAddr: fmt.Sprintf("%s:%d", cfg.StatsdHost, cfg.StatsdPort), - AgentMonitoringEvents: coreconfig.Datadog.GetBool("runtime_security_config.agent_monitoring_events"), - CustomSensitiveWords: coreconfig.Datadog.GetStringSlice("runtime_security_config.custom_sensitive_words"), - ERPCDentryResolutionEnabled: coreconfig.Datadog.GetBool("runtime_security_config.erpc_dentry_resolution_enabled"), - MapDentryResolutionEnabled: coreconfig.Datadog.GetBool("runtime_security_config.map_dentry_resolution_enabled"), - DentryCacheSize: coreconfig.Datadog.GetInt("runtime_security_config.dentry_cache_size"), - RemoteTaggerEnabled: coreconfig.Datadog.GetBool("runtime_security_config.remote_tagger"), - LogPatterns: coreconfig.Datadog.GetStringSlice("runtime_security_config.log_patterns"), - LogTags: coreconfig.Datadog.GetStringSlice("runtime_security_config.log_tags"), - SelfTestEnabled: coreconfig.Datadog.GetBool("runtime_security_config.self_test.enabled"), - SelfTestSendReport: coreconfig.Datadog.GetBool("runtime_security_config.self_test.send_report"), - RuntimeMonitor: coreconfig.Datadog.GetBool("runtime_security_config.runtime_monitor.enabled"), - NetworkEnabled: coreconfig.Datadog.GetBool("runtime_security_config.network.enabled"), - NetworkLazyInterfacePrefixes: coreconfig.Datadog.GetStringSlice("runtime_security_config.network.lazy_interface_prefixes"), - NetworkClassifierPriority: uint16(coreconfig.Datadog.GetInt("runtime_security_config.network.classifier_priority")), - NetworkClassifierHandle: uint16(coreconfig.Datadog.GetInt("runtime_security_config.network.classifier_handle")), - RemoteConfigurationEnabled: coreconfig.Datadog.GetBool("runtime_security_config.remote_configuration.enabled"), - EventStreamUseRingBuffer: coreconfig.Datadog.GetBool("runtime_security_config.event_stream.use_ring_buffer"), - EventStreamBufferSize: coreconfig.Datadog.GetInt("runtime_security_config.event_stream.buffer_size"), - EnvsWithValue: coreconfig.Datadog.GetStringSlice("runtime_security_config.envs_with_value"), + AgentMonitoringEvents: coreconfig.SystemProbe.GetBool("runtime_security_config.agent_monitoring_events"), + CustomSensitiveWords: coreconfig.SystemProbe.GetStringSlice("runtime_security_config.custom_sensitive_words"), + ERPCDentryResolutionEnabled: coreconfig.SystemProbe.GetBool("runtime_security_config.erpc_dentry_resolution_enabled"), + MapDentryResolutionEnabled: coreconfig.SystemProbe.GetBool("runtime_security_config.map_dentry_resolution_enabled"), + DentryCacheSize: coreconfig.SystemProbe.GetInt("runtime_security_config.dentry_cache_size"), + RemoteTaggerEnabled: coreconfig.SystemProbe.GetBool("runtime_security_config.remote_tagger"), + LogPatterns: coreconfig.SystemProbe.GetStringSlice("runtime_security_config.log_patterns"), + LogTags: coreconfig.SystemProbe.GetStringSlice("runtime_security_config.log_tags"), + SelfTestEnabled: coreconfig.SystemProbe.GetBool("runtime_security_config.self_test.enabled"), + SelfTestSendReport: coreconfig.SystemProbe.GetBool("runtime_security_config.self_test.send_report"), + RuntimeMonitor: coreconfig.SystemProbe.GetBool("runtime_security_config.runtime_monitor.enabled"), + NetworkEnabled: coreconfig.SystemProbe.GetBool("runtime_security_config.network.enabled"), + NetworkLazyInterfacePrefixes: coreconfig.SystemProbe.GetStringSlice("runtime_security_config.network.lazy_interface_prefixes"), + NetworkClassifierPriority: uint16(coreconfig.SystemProbe.GetInt("runtime_security_config.network.classifier_priority")), + NetworkClassifierHandle: uint16(coreconfig.SystemProbe.GetInt("runtime_security_config.network.classifier_handle")), + RemoteConfigurationEnabled: coreconfig.SystemProbe.GetBool("runtime_security_config.remote_configuration.enabled"), + EventStreamUseRingBuffer: coreconfig.SystemProbe.GetBool("runtime_security_config.event_stream.use_ring_buffer"), + EventStreamBufferSize: coreconfig.SystemProbe.GetInt("runtime_security_config.event_stream.buffer_size"), + EnvsWithValue: coreconfig.SystemProbe.GetStringSlice("runtime_security_config.envs_with_value"), // policy & ruleset - PoliciesDir: coreconfig.Datadog.GetString("runtime_security_config.policies.dir"), - WatchPoliciesDir: coreconfig.Datadog.GetBool("runtime_security_config.policies.watch_dir"), - PolicyMonitorEnabled: coreconfig.Datadog.GetBool("runtime_security_config.policies.monitor.enabled"), + PoliciesDir: coreconfig.SystemProbe.GetString("runtime_security_config.policies.dir"), + WatchPoliciesDir: coreconfig.SystemProbe.GetBool("runtime_security_config.policies.watch_dir"), + PolicyMonitorEnabled: coreconfig.SystemProbe.GetBool("runtime_security_config.policies.monitor.enabled"), // runtime compilation - RuntimeCompilationEnabled: coreconfig.Datadog.GetBool("runtime_security_config.runtime_compilation.enabled"), - RuntimeCompiledConstantsEnabled: coreconfig.Datadog.GetBool("runtime_security_config.runtime_compilation.compiled_constants_enabled"), - RuntimeCompiledConstantsIsSet: coreconfig.Datadog.IsSet("runtime_security_config.runtime_compilation.compiled_constants_enabled"), + RuntimeCompilationEnabled: coreconfig.SystemProbe.GetBool("runtime_security_config.runtime_compilation.enabled"), + RuntimeCompiledConstantsEnabled: coreconfig.SystemProbe.GetBool("runtime_security_config.runtime_compilation.compiled_constants_enabled"), + RuntimeCompiledConstantsIsSet: coreconfig.SystemProbe.IsSet("runtime_security_config.runtime_compilation.compiled_constants_enabled"), + + NetworkProcessEventMonitoringEnabled: coreconfig.SystemProbe.GetBool("event_monitoring_config.network_process.enabled"), + ProcessEventMonitoringEnabled: coreconfig.SystemProbe.GetBool("event_monitoring_config.process.enabled"), // activity dump - ActivityDumpEnabled: coreconfig.Datadog.GetBool("runtime_security_config.activity_dump.enabled"), - ActivityDumpCleanupPeriod: time.Duration(coreconfig.Datadog.GetInt("runtime_security_config.activity_dump.cleanup_period")) * time.Second, - ActivityDumpTagsResolutionPeriod: time.Duration(coreconfig.Datadog.GetInt("runtime_security_config.activity_dump.tags_resolution_period")) * time.Second, - ActivityDumpLoadControlPeriod: time.Duration(coreconfig.Datadog.GetInt("runtime_security_config.activity_dump.load_controller_period")) * time.Minute, - ActivityDumpPathMergeEnabled: coreconfig.Datadog.GetBool("runtime_security_config.activity_dump.path_merge.enabled"), - ActivityDumpTracedCgroupsCount: coreconfig.Datadog.GetInt("runtime_security_config.activity_dump.traced_cgroups_count"), - ActivityDumpTracedEventTypes: model.ParseEventTypeStringSlice(coreconfig.Datadog.GetStringSlice("runtime_security_config.activity_dump.traced_event_types")), - ActivityDumpCgroupDumpTimeout: time.Duration(coreconfig.Datadog.GetInt("runtime_security_config.activity_dump.cgroup_dump_timeout")) * time.Minute, - ActivityDumpRateLimiter: coreconfig.Datadog.GetInt("runtime_security_config.activity_dump.rate_limiter"), - ActivityDumpCgroupWaitListTimeout: time.Duration(coreconfig.Datadog.GetInt("runtime_security_config.activity_dump.cgroup_wait_list_timeout")) * time.Minute, - ActivityDumpCgroupDifferentiateArgs: coreconfig.Datadog.GetBool("runtime_security_config.activity_dump.cgroup_differentiate_args"), - ActivityDumpLocalStorageDirectory: coreconfig.Datadog.GetString("runtime_security_config.activity_dump.local_storage.output_directory"), - ActivityDumpLocalStorageMaxDumpsCount: coreconfig.Datadog.GetInt("runtime_security_config.activity_dump.local_storage.max_dumps_count"), - ActivityDumpLocalStorageCompression: coreconfig.Datadog.GetBool("runtime_security_config.activity_dump.local_storage.compression"), - ActivityDumpRemoteStorageCompression: coreconfig.Datadog.GetBool("runtime_security_config.activity_dump.remote_storage.compression"), - ActivityDumpSyscallMonitorPeriod: time.Duration(coreconfig.Datadog.GetInt("runtime_security_config.activity_dump.syscall_monitor.period")) * time.Second, + ActivityDumpEnabled: coreconfig.SystemProbe.GetBool("runtime_security_config.activity_dump.enabled"), + ActivityDumpCleanupPeriod: time.Duration(coreconfig.SystemProbe.GetInt("runtime_security_config.activity_dump.cleanup_period")) * time.Second, + ActivityDumpTagsResolutionPeriod: time.Duration(coreconfig.SystemProbe.GetInt("runtime_security_config.activity_dump.tags_resolution_period")) * time.Second, + ActivityDumpLoadControlPeriod: time.Duration(coreconfig.SystemProbe.GetInt("runtime_security_config.activity_dump.load_controller_period")) * time.Minute, + ActivityDumpPathMergeEnabled: coreconfig.SystemProbe.GetBool("runtime_security_config.activity_dump.path_merge.enabled"), + ActivityDumpTracedCgroupsCount: coreconfig.SystemProbe.GetInt("runtime_security_config.activity_dump.traced_cgroups_count"), + ActivityDumpTracedEventTypes: model.ParseEventTypeStringSlice(coreconfig.SystemProbe.GetStringSlice("runtime_security_config.activity_dump.traced_event_types")), + ActivityDumpCgroupDumpTimeout: time.Duration(coreconfig.SystemProbe.GetInt("runtime_security_config.activity_dump.cgroup_dump_timeout")) * time.Minute, + ActivityDumpRateLimiter: coreconfig.SystemProbe.GetInt("runtime_security_config.activity_dump.rate_limiter"), + ActivityDumpCgroupWaitListTimeout: time.Duration(coreconfig.SystemProbe.GetInt("runtime_security_config.activity_dump.cgroup_wait_list_timeout")) * time.Minute, + ActivityDumpCgroupDifferentiateArgs: coreconfig.SystemProbe.GetBool("runtime_security_config.activity_dump.cgroup_differentiate_args"), + ActivityDumpLocalStorageDirectory: coreconfig.SystemProbe.GetString("runtime_security_config.activity_dump.local_storage.output_directory"), + ActivityDumpLocalStorageMaxDumpsCount: coreconfig.SystemProbe.GetInt("runtime_security_config.activity_dump.local_storage.max_dumps_count"), + ActivityDumpLocalStorageCompression: coreconfig.SystemProbe.GetBool("runtime_security_config.activity_dump.local_storage.compression"), + ActivityDumpRemoteStorageCompression: coreconfig.SystemProbe.GetBool("runtime_security_config.activity_dump.remote_storage.compression"), + ActivityDumpSyscallMonitorPeriod: time.Duration(coreconfig.SystemProbe.GetInt("runtime_security_config.activity_dump.syscall_monitor.period")) * time.Second, + ActivityDumpMaxDumpCountPerWorkload: coreconfig.SystemProbe.GetInt("runtime_security_config.activity_dump.max_dump_count_per_workload"), // activity dump dynamic fields ActivityDumpMaxDumpSize: func() int { - mds := coreconfig.Datadog.GetInt("runtime_security_config.activity_dump.max_dump_size") + mds := coreconfig.SystemProbe.GetInt("runtime_security_config.activity_dump.max_dump_size") if mds < MinMaxDumSize { mds = MinMaxDumSize } @@ -276,6 +288,8 @@ func NewConfig(cfg *config.Config) (*Config, error) { }, } + c.NetworkProcessEventMonitoringEnabled = c.NetworkProcessEventMonitoringEnabled && cfg.ModuleIsEnabled(config.NetworkTracerModule) + if err := c.sanitize(); err != nil { return nil, fmt.Errorf("invalid CWS configuration: %w", err) } @@ -383,14 +397,14 @@ func (c *Config) sanitizeRuntimeSecurityConfigActivityDump() error { c.ActivityDumpTracedEventTypes = append(c.ActivityDumpTracedEventTypes, model.ExecEventType) } - if formats := coreconfig.Datadog.GetStringSlice("runtime_security_config.activity_dump.local_storage.formats"); len(formats) > 0 { + if formats := coreconfig.SystemProbe.GetStringSlice("runtime_security_config.activity_dump.local_storage.formats"); len(formats) > 0 { var err error c.ActivityDumpLocalStorageFormats, err = ParseStorageFormats(formats) if err != nil { return fmt.Errorf("invalid value for runtime_security_config.activity_dump.local_storage.formats: %w", err) } } - if formats := coreconfig.Datadog.GetStringSlice("runtime_security_config.activity_dump.remote_storage.formats"); len(formats) > 0 { + if formats := coreconfig.SystemProbe.GetStringSlice("runtime_security_config.activity_dump.remote_storage.formats"); len(formats) > 0 { var err error c.ActivityDumpRemoteStorageFormats, err = ParseStorageFormats(formats) if err != nil { diff --git a/pkg/security/ebpf/c/activity_dump.h b/pkg/security/ebpf/c/activity_dump.h index e626088950d59..28985047d5cc7 100644 --- a/pkg/security/ebpf/c/activity_dump.h +++ b/pkg/security/ebpf/c/activity_dump.h @@ -364,7 +364,9 @@ enum rate_limiter_algo_ids { __attribute__((always_inline)) u8 activity_dump_rate_limiter_reset_period(u64 now, struct activity_dump_rate_limiter_ctx* rate_ctx_p) { rate_ctx_p->current_period = now; rate_ctx_p->counter = 0; +#ifndef __BALOUM__ // do not change algo during unit tests rate_ctx_p->algo_id = now % RL_ALGO_TOTAL_NUMBER; +#endif /* __BALOUM__ */ return 1; } diff --git a/pkg/security/ebpf/c/activity_dump_ratelimiter_test.h b/pkg/security/ebpf/c/activity_dump_ratelimiter_test.h new file mode 100644 index 0000000000000..b0984ff58c9ba --- /dev/null +++ b/pkg/security/ebpf/c/activity_dump_ratelimiter_test.h @@ -0,0 +1,128 @@ +#ifndef _ACTIVITY_DUMP_RATELIMITER_TEST_H_ +#define _ACTIVITY_DUMP_RATELIMITER_TEST_H_ + +#include "defs.h" +#include "activity_dump.h" +#include "baloum.h" +#include "utils.h" + +#define AD_RL_TEST_RATE 500 +#define NUMBER_OF_PERIOD_PER_TEST 10 + +SEC("test/ad_ratelimiter_basic") +int test_ad_ratelimiter_basic() +{ + u64 now = bpf_ktime_get_ns(); + + struct activity_dump_config config; + config.events_rate = AD_RL_TEST_RATE; + + struct activity_dump_rate_limiter_ctx ctx; + ctx.counter = 0; + ctx.current_period = now; + ctx.algo_id = RL_ALGO_BASIC; // force algo basic + u32 cookie = 0; + bpf_map_update_elem(&activity_dump_rate_limiters, &cookie, &ctx, BPF_ANY); + + for (int period_cpt = 0; period_cpt < NUMBER_OF_PERIOD_PER_TEST; period_cpt++, now += SEC_TO_NS(2)) { + assert_not_zero(activity_dump_rate_limiter_allow(&config, cookie, now, 0), + "event not allowed which should be"); + for (int i = 0; i < AD_RL_TEST_RATE; i++) { + assert_not_zero(activity_dump_rate_limiter_allow(&config, cookie, now + i, 1), + "event not allowed which should be"); + } + + assert_zero(activity_dump_rate_limiter_allow(&config, cookie, now, 0), + "event allowed which should not be"); + for (int i = 0; i < AD_RL_TEST_RATE; i++) { + assert_zero(activity_dump_rate_limiter_allow(&config, cookie, now + i, 1), + "event allowed which should not be"); + } + assert_zero(activity_dump_rate_limiter_allow(&config, cookie, now, 0), + "event allowed which should not be"); + } + return 0; +} + +SEC("test/ad_ratelimiter_basic_half") +int test_ad_ratelimiter_basic_half() +{ + u64 now = bpf_ktime_get_ns(); + + struct activity_dump_config config; + config.events_rate = AD_RL_TEST_RATE; + + struct activity_dump_rate_limiter_ctx ctx; + ctx.counter = 0; + ctx.current_period = now; + ctx.algo_id = RL_ALGO_BASIC_HALF; // force algo basic half + u32 cookie = 0; + bpf_map_update_elem(&activity_dump_rate_limiters, &cookie, &ctx, BPF_ANY); + + for (int period_cpt = 0; period_cpt < NUMBER_OF_PERIOD_PER_TEST; period_cpt++, now += SEC_TO_NS(1)) { + assert_not_zero(activity_dump_rate_limiter_allow(&config, cookie, now, 0), + "event not allowed which should be"); + for (int i = 0; i < AD_RL_TEST_RATE / 2; i++) { + assert_not_zero(activity_dump_rate_limiter_allow(&config, cookie, now + i, 1), + "event not allowed which should be"); + } + + assert_zero(activity_dump_rate_limiter_allow(&config, cookie, now, 0), + "event allowed which should not be"); + for (int i = 0; i < AD_RL_TEST_RATE / 2; i++) { + assert_zero(activity_dump_rate_limiter_allow(&config, cookie, now + i, 1), + "event allowed which should not be"); + } + assert_zero(activity_dump_rate_limiter_allow(&config, cookie, now, 0), + "event allowed which should not be"); + } + return 0; +} + +__attribute__((always_inline)) int test_ad_ratelimiter_variable_droprate(int algo) +{ + u64 now = bpf_ktime_get_ns(); + + struct activity_dump_config config; + config.events_rate = AD_RL_TEST_RATE; + + struct activity_dump_rate_limiter_ctx ctx; + ctx.counter = 0; + ctx.current_period = now; + ctx.algo_id = algo; // force algo + u32 cookie = 0; + bpf_map_update_elem(&activity_dump_rate_limiters, &cookie, &ctx, BPF_ANY); + + for (int period_cpt = 0; period_cpt < NUMBER_OF_PERIOD_PER_TEST; period_cpt++, now += SEC_TO_NS(2)) { + assert_not_zero(activity_dump_rate_limiter_allow(&config, cookie, now, 0), + "event not allowed which should be"); + for (int i = 0; i < AD_RL_TEST_RATE / 4; i++) { + assert_not_zero(activity_dump_rate_limiter_allow(&config, cookie, now + i, 1), + "event not allowed which should be"); + } + + int total_allowed = 0; + for (int i = 0; i < AD_RL_TEST_RATE * 10; i++) { + if (activity_dump_rate_limiter_allow(&config, cookie, now + i, 1)) { + total_allowed++; + } + } + assert_greater_than(total_allowed, AD_RL_TEST_RATE * 3 / 4, "nope"); + assert_lesser_than(total_allowed, AD_RL_TEST_RATE / 10, "nope"); + } + return 0; +} + +SEC("test/ad_ratelimiter_decreasing_droprate") +int test_ad_ratelimiter_decreasing_droprate() +{ + return test_ad_ratelimiter_variable_droprate(RL_ALGO_DECREASING_DROPRATE); +} + +SEC("test/ad_ratelimiter_increasing_droprate") +int test_ad_ratelimiter_increasing_droprate() +{ + return test_ad_ratelimiter_variable_droprate(RL_ALGO_INCREASING_DROPRATE); +} + +#endif /* _ACTIVITY_DUMP_RATELIMITER_TEST_H_ */ diff --git a/pkg/security/ebpf/c/baloum.h b/pkg/security/ebpf/c/baloum.h new file mode 100644 index 0000000000000..c4e387808adc9 --- /dev/null +++ b/pkg/security/ebpf/c/baloum.h @@ -0,0 +1,106 @@ +#ifdef __BALOUM__ + +#ifndef _BALOUM_H__ +#define _BALOUM_H__ + +struct baloum_ctx +{ + __u64 arg0; + __u64 arg1; + __u64 arg2; + __u64 arg3; + __u64 arg4; +}; +static void *(*baloum_malloc)(__u32 size) = (void *)0xffff; +static int (*baloum_call)(struct baloum_ctx *ctx, const char *section) = (void *)0xfffe; +static int (*baloum_strcmp)(const char *s1, const char *s2) = (void *)0xfffd; +static int (*baloum_memcmp)(const void *b1, const void *b2, __u32 size) = (void *)0xfffc; +static int (*baloum_sleep)(__u64 ns) = (void *)0xfffb; + +#define assert_memcmp(b1, b2, s, msg) \ + if (baloum_memcmp(b1, b2, s) != 0) \ + { \ + bpf_printk("assert line %d : b1 != b2 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_strcmp(s1, s2, msg) \ + if (baloum_strcmp(s1, s2) != 0) \ + { \ + bpf_printk("assert line %d : s1 != s2 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_equals(v1, v2, msg) \ + if (v1 != v2) \ + { \ + bpf_printk("assert line %d : v1 != v2 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_zero(v1, msg) \ + if (v1 != 0) \ + { \ + bpf_printk("assert line %d : v1 == 0 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_not_zero(v1, msg) \ + if (v1 == 0) \ + { \ + bpf_printk("assert line %d : v1 != 0 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_not_equals(v1, v2, msg) \ + if (v1 == v2) \ + { \ + bpf_printk("assert line %d : v1 == v2 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_greater_than(v1, v2, msg) \ + if (v1 > v2) \ + { \ + bpf_printk("assert line %d : v1 == v2 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_lesser_than(v1, v2, msg) \ + if (v1 < v2) \ + { \ + bpf_printk("assert line %d : v1 == v2 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_greater_or_equal_than(v1, v2, msg) \ + if (v1 >= v2) \ + { \ + bpf_printk("assert line %d : v1 == v2 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_lesser_or_equal_than(v1, v2, msg) \ + if (v1 <= v2) \ + { \ + bpf_printk("assert line %d : v1 == v2 : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_not_null(v1, msg) \ + if (v1 == NULL) \ + { \ + bpf_printk("assert line %d : v1 == NULL : %s", __LINE__, msg); \ + return -1; \ + } + +#define assert_null(v1, msg) \ + if (v1 != NULL) \ + { \ + bpf_printk("assert line %d : v1 != NULL : %s", __LINE__, msg); \ + return -1; \ + } + +#endif + +#endif diff --git a/pkg/security/ebpf/c/defs.h b/pkg/security/ebpf/c/defs.h index 7c97ec9608a04..9e48615d18fd8 100644 --- a/pkg/security/ebpf/c/defs.h +++ b/pkg/security/ebpf/c/defs.h @@ -251,6 +251,7 @@ struct process_context_t { u32 tid; u32 netns; u32 is_kworker; + u64 inode; }; struct container_context_t { diff --git a/pkg/security/ebpf/c/dentry_resolver.h b/pkg/security/ebpf/c/dentry_resolver.h index f58dec606cfbb..4c8d41346ddd4 100644 --- a/pkg/security/ebpf/c/dentry_resolver.h +++ b/pkg/security/ebpf/c/dentry_resolver.h @@ -125,6 +125,7 @@ int __attribute__((always_inline)) resolve_dentry_tail_call(void *ctx, struct de } *params = (struct is_discarded_by_inode_t){ .discarder_type = input->discarder_type, + // TODO(safchain) do we need the pid ????? .tgid = bpf_get_current_pid_tgid() >> 32, .now = bpf_ktime_get_ns(), .ad_state = input->ad_state, diff --git a/pkg/security/ebpf/c/discarders.h b/pkg/security/ebpf/c/discarders.h index 0800cfe7e568c..4018f452913b0 100644 --- a/pkg/security/ebpf/c/discarders.h +++ b/pkg/security/ebpf/c/discarders.h @@ -1,14 +1,13 @@ #ifndef _DISCARDERS_H #define _DISCARDERS_H +#include "utils.h" + #define REVISION_ARRAY_SIZE 4096 #define INODE_DISCARDER_TYPE 0 #define PID_DISCARDER_TYPE 1 -#define NS_TO_SEC(x) x / 1000000000 -#define SEC_TO_NS(x) x * 1000000000 - struct discarder_stats_t { u64 discarders_added; u64 event_discarded; @@ -43,9 +42,9 @@ struct bpf_map_def SEC("maps/discarders_revision") discarders_revision = { }; u64 __attribute__((always_inline)) get_discarder_retention() { - u64 retention; + u64 retention = 0; LOAD_CONSTANT("discarder_retention", retention); - return retention; + return retention ? retention : SEC_TO_NS(5); } int __attribute__((always_inline)) monitor_discarder_added(u64 event_type) { @@ -162,7 +161,7 @@ u64* __attribute__((always_inline)) get_discarder_timestamp(struct discarder_par // This function is doing the same thing as the one before, but can only work if `params` is a pointer to a map value // and not a pointer to the stack since kernels < 4.15 does not allow this. On the other hand it is faster and needs less // instructions. -u64* __attribute__((always_inline)) get_discarder_timestamp_from_map(struct discarder_params_t *params, u64 event_type) { +u64 * __attribute__((always_inline)) get_discarder_timestamp_from_map(struct discarder_params_t *params, u64 event_type) { if (EVENT_FIRST_DISCARDER <= event_type && event_type < EVENT_LAST_DISCARDER) { return ¶ms->timestamps[event_type-EVENT_FIRST_DISCARDER]; } @@ -213,6 +212,18 @@ struct bpf_map_def SEC("maps/inode_discarders") inode_discarders = { int __attribute__((always_inline)) expire_inode_discarders(u32 mount_id, u64 inode); +struct inode_discarder_params_t * __attribute__((always_inline)) get_inode_discarder_params(u32 mount_id, u64 inode, u32 is_leaf) { + struct inode_discarder_t key = { + .path_key = { + .ino = inode, + .mount_id = mount_id, + }, + .is_leaf = is_leaf, + }; + + return bpf_map_lookup_elem(&inode_discarders, &key); +} + int __attribute__((always_inline)) discard_inode(u64 event_type, u32 mount_id, u64 inode, u64 timeout, u32 is_leaf) { if (!mount_id || !inode) { return 0; diff --git a/pkg/security/ebpf/c/discarders_test.h b/pkg/security/ebpf/c/discarders_test.h new file mode 100644 index 0000000000000..0afd31605f5b3 --- /dev/null +++ b/pkg/security/ebpf/c/discarders_test.h @@ -0,0 +1,194 @@ +#ifndef _DISCARDERS_TEST_H +#define _DISCARDERS_TEST_H + +#include "defs.h" +#include "discarders.h" +#include "baloum.h" + +int __attribute__((always_inline)) _is_discarded_by_inode(u64 event_type, u32 mount_id, u64 inode) { + struct is_discarded_by_inode_t params = { + .discarder_type = event_type, + .discarder = { + .path_key.ino = inode, + .path_key.mount_id = mount_id, + } + }; + + return is_discarded_by_inode(¶ms); +} + +SEC("test/discarders_event_mask") +int test_discarders_event_mask() +{ + u32 mount_id = 123; + u64 inode = 456; + + int ret = discard_inode(EVENT_OPEN, mount_id, inode, 0, 0); + assert_zero(ret, "failed to discard the inode"); + + struct inode_discarder_params_t *inode_params = get_inode_discarder_params(mount_id, inode, 0); + assert_not_null(inode_params, "unable to find the inode discarder entry"); + + ret = mask_has_event(inode_params->params.event_mask, EVENT_OPEN); + assert_not_zero(ret, "event not found in mask"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id, inode); + assert_not_zero(ret, "inode should be discarded"); + + // add another event type + ret = discard_inode(EVENT_CHMOD, mount_id, inode, 0, 0); + assert_zero(ret, "failed to discard the inode"); + + // check that we have now both open and chmod event discarded + inode_params = get_inode_discarder_params(mount_id, inode, 0); + assert_not_null(inode_params, "unable to find the inode discarder entry"); + + ret = mask_has_event(inode_params->params.event_mask, EVENT_OPEN); + assert_not_zero(ret, "event not found in mask"); + + ret = mask_has_event(inode_params->params.event_mask, EVENT_CHMOD); + assert_not_zero(ret, "event not found in mask"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id, inode); + assert_not_zero(ret, "inode should be discarded"); + + ret = _is_discarded_by_inode(EVENT_CHMOD, mount_id, inode); + assert_not_zero(ret, "inode should be discarded"); + + return 0; +} + +SEC("test/discarders_retention") +int test_discarders_retention() +{ + u32 mount_id = 123; + u64 inode = 456; + + int ret = discard_inode(EVENT_OPEN, mount_id, inode, 0, 0); + assert_zero(ret, "failed to discard the inode"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id, inode); + assert_not_zero(ret, "inode should be discarded"); + + // expire the discarder + expire_inode_discarders(mount_id, inode); + + // shouldn't be discarded anymore + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id, inode); + assert_zero(ret, "inode shouldn't be discarded"); + + // we shouldn't be able to add a new discarder for the same inode during the retention period + // TODO(safchain) should return an error value + ret = discard_inode(EVENT_OPEN, mount_id, inode, 0, 0); + assert_zero(ret, "able to discard the inode"); + + // shouldn't still be discarded + ret = _is_discarded_by_inode(EVENT_CHMOD, mount_id, inode); + assert_zero(ret, "inode shouldn't be discarded"); + + // wait the retention period + baloum_sleep(get_discarder_retention() + 1); + + // the retention period is now over, we should be able to add a discarder + ret = discard_inode(EVENT_OPEN, mount_id, inode, 0, 0); + assert_zero(ret, "failed to discard the inode"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id, inode); + assert_not_zero(ret, "inode should be discarded"); + + return 0; +} + +SEC("test/discarders_revision") +int test_discarders_revision() +{ + u32 mount_id1 = 123; + u64 inode1 = 456; + + u32 mount_id2 = 456; + u64 inode2 = 789; + + int ret = discard_inode(EVENT_OPEN, mount_id1, inode1, 0, 0); + assert_zero(ret, "failed to discard the inode"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id1, inode1); + assert_not_zero(ret, "inode should be discarded"); + + ret = discard_inode(EVENT_OPEN, mount_id2, inode2, 0, 0); + assert_zero(ret, "failed to discard the inode"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id2, inode2); + assert_not_zero(ret, "inode should be discarded"); + + // expire the discarders + bump_discarders_revision(); + + // now all the discarders whatever their mount id should be discarded + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id1, inode1); + assert_zero(ret, "inode shouldn't be discarded"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id2, inode2); + assert_zero(ret, "inode shouldn't be discarded"); + + // check that we added a retention period + ret = discard_inode(EVENT_OPEN, mount_id1, inode1, 0, 0); + assert_zero(ret, "able to discard the inode"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id1, inode1); + assert_zero(ret, "inode shouldn't be discarded"); + + // wait the retention period + baloum_sleep(get_discarder_retention() + 1); + + ret = discard_inode(EVENT_OPEN, mount_id1, inode1, 0, 0); + assert_zero(ret, "able to discard the inode"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id1, inode1); + assert_not_zero(ret, "inode should be discarded"); + + return 0; +} + +SEC("test/discarders_mount_revision") +int test_discarders_mount_revision() +{ + u32 mount_id1 = 123; + u64 inode1 = 456; + + u32 mount_id2 = 456; + u64 inode2 = 789; + + int ret = discard_inode(EVENT_OPEN, mount_id1, inode1, 0, 0); + assert_zero(ret, "failed to discard the inode"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id1, inode1); + assert_not_zero(ret, "inode should be discarded"); + + ret = discard_inode(EVENT_OPEN, mount_id2, inode2, 0, 0); + assert_zero(ret, "failed to discard the inode"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id2, inode2); + assert_not_zero(ret, "inode should be discarded"); + + // bump the revision + bump_mount_discarder_revision(mount_id1); + + // now the inode1 shouldn't be discarded anymore + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id1, inode1); + assert_zero(ret, "inode shouldn't be discarded"); + + // while node2 should still be + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id2, inode2); + assert_not_zero(ret, "inode should be discarded"); + + // we are allowed to re-add inode1 right away + ret = discard_inode(EVENT_OPEN, mount_id1, inode1, 0, 0); + assert_zero(ret, "failed to discard the inode"); + + ret = _is_discarded_by_inode(EVENT_OPEN, mount_id1, inode1); + assert_not_zero(ret, "inode should be discarded"); + + return 0; +} + +#endif \ No newline at end of file diff --git a/pkg/security/ebpf/c/exec.h b/pkg/security/ebpf/c/exec.h index c78e82b5463b7..3955ce35737c2 100644 --- a/pkg/security/ebpf/c/exec.h +++ b/pkg/security/ebpf/c/exec.h @@ -11,9 +11,10 @@ #define MAX_PERF_STR_BUFF_LEN 256 #define MAX_STR_BUFF_LEN (1 << 15) -#define MAX_ARRAY_ELEMENT_PER_TAIL 23 #define MAX_ARRAY_ELEMENT_SIZE 4096 -#define MAX_ARGS_ELEMENTS 140 +#define MAX_ARRAY_ELEMENT_PER_TAIL 28 +#define MAX_ARGS_ELEMENTS (MAX_ARRAY_ELEMENT_PER_TAIL * (32 / 2)) // split tailcall limit +#define MAX_ARGS_READ_PER_TAIL 208 struct args_envs_event_t { struct kevent_t event; @@ -26,11 +27,15 @@ struct str_array_buffer_t { char value[MAX_STR_BUFF_LEN]; }; +#define EXEC_GET_ENVS_OFFSET 0 +#define EXEC_PARSE_ARGS_ENVS_SPLIT 1 +#define EXEC_PARSE_ARGS_ENVS 2 + struct bpf_map_def SEC("maps/args_envs_progs") args_envs_progs = { .type = BPF_MAP_TYPE_PROG_ARRAY, .key_size = sizeof(u32), .value_size = sizeof(u32), - .max_entries = 10, + .max_entries = 3, }; struct bpf_map_def SEC("maps/str_array_buffers") str_array_buffers = { @@ -148,112 +153,15 @@ struct proc_cache_t __attribute__((always_inline)) *get_proc_from_cookie(u32 coo return bpf_map_lookup_elem(&proc_cache, &cookie); } -void __attribute__((always_inline)) parse_str_array(struct pt_regs *ctx, struct str_array_ref_t *array_ref, u64 event_type) { - const char **array = array_ref->array; - int index = array_ref->index; - if (index == 255) { - return; - } - - array_ref->truncated = 0; - - u32 key = 0; - struct str_array_buffer_t *buff = bpf_map_lookup_elem(&str_array_buffers, &key); - if (!buff) { - return; - } - - const char *str; - bpf_probe_read(&str, sizeof(str), (void *)&array[index]); - - struct args_envs_event_t event = { - .id = array_ref->id, - }; - - int i = 0; - int n = 0; - - void *perf_ptr = &buff->value[0]; - -#pragma unroll - for (i = 0; i < MAX_ARRAY_ELEMENT_PER_TAIL; i++) { - void *ptr = &(buff->value[(event.size + sizeof(n)) & (MAX_STR_BUFF_LEN - MAX_ARRAY_ELEMENT_SIZE - 1)]); - - n = bpf_probe_read_str(ptr, MAX_ARRAY_ELEMENT_SIZE, (void *)str); - if (n > 0) { - n--; // remove trailing 0 - - // insert size before the string - bpf_probe_read(&(buff->value[event.size&(MAX_STR_BUFF_LEN - MAX_ARRAY_ELEMENT_SIZE - 1)]), sizeof(n), &n); - - int len = n + sizeof(n); - if (event.size + len >= MAX_PERF_STR_BUFF_LEN) { - // copy value to the event - bpf_probe_read(&event.value, MAX_PERF_STR_BUFF_LEN, perf_ptr); - - // an only one argument overflow the limit - if (event.size == 0) { - event.size = MAX_PERF_STR_BUFF_LEN; - index++; - } - - send_event(ctx, event_type, event); - event.size = 0; - } else { - event.size += len; - index++; - } - - bpf_probe_read(&str, sizeof(str), (void *)&array[index]); - } else { - index = 255; // stop here - break; - } - } - array_ref->index = index; - array_ref->truncated = i == MAX_ARRAY_ELEMENT_PER_TAIL; - - // flush remaining values - if (event.size > 0) { - bpf_probe_read(&event.value, MAX_PERF_STR_BUFF_LEN, perf_ptr); - - send_event(ctx, event_type, event); - } -} - -SEC("kprobe/parse_args_envs") -int kprobe_parse_args_envs(struct pt_regs *ctx) { - struct syscall_cache_t *syscall = peek_syscall(EVENT_EXEC); - if (!syscall) { - return 0; - } - - struct str_array_ref_t *array = &syscall->exec.args; - if (syscall->exec.next_tail > MAX_ARGS_ELEMENTS / MAX_ARRAY_ELEMENT_PER_TAIL) { - array = &syscall->exec.envs; - } - - parse_str_array(ctx, array, EVENT_ARGS_ENVS); - - syscall->exec.next_tail++; - - bpf_tail_call_compat(ctx, &args_envs_progs, syscall->exec.next_tail); - - return 0; -} - int __attribute__((always_inline)) trace__sys_execveat(struct pt_regs *ctx, const char **argv, const char **env) { struct syscall_cache_t syscall = { .type = EVENT_EXEC, .exec = { .args = { .id = bpf_get_prandom_u32(), - .array = argv, - .index = 0, }, .envs = { .id = bpf_get_prandom_u32(), - .array = env, } } }; @@ -669,40 +577,8 @@ int kprobe_exit_itimers(struct pt_regs *ctx) { return 0; } -int __attribute__((always_inline)) parse_args_and_env(struct pt_regs *ctx) { - struct syscall_cache_t *syscall = peek_syscall(EVENT_EXEC); - if (!syscall) { - return 0; - } - - // call it here before the memory get replaced - fill_span_context(&syscall->exec.span_context); - - bpf_tail_call_compat(ctx, &args_envs_progs, syscall->exec.next_tail); - return 0; -} - -SEC("kprobe/prepare_binprm") -int kprobe_prepare_binprm(struct pt_regs *ctx) { - return parse_args_and_env(ctx); -} - -SEC("kprobe/bprm_execve") -int kprobe_bprm_execve(struct pt_regs *ctx) { - return parse_args_and_env(ctx); -} - -SEC("kprobe/security_bprm_check") -int kprobe_security_bprm_check(struct pt_regs *ctx) { - return parse_args_and_env(ctx); -} - -void __attribute__((always_inline)) fill_args_envs(struct exec_event_t *event, struct syscall_cache_t *syscall) { - event->args_id = syscall->exec.args.id; - event->args_truncated = syscall->exec.args.truncated; - event->envs_id = syscall->exec.envs.id; - event->envs_truncated = syscall->exec.envs.truncated; -} +// the following functions must use the {peek,pop}_current_or_impersonated_exec_syscall to retrieve the syscall context +// because the task performing the exec syscall may change its pid in the flush_old_exec() kernel function struct syscall_cache_t *__attribute__((always_inline)) peek_current_or_impersonated_exec_syscall() { struct syscall_cache_t *syscall = peek_syscall(EVENT_EXEC); @@ -748,6 +624,205 @@ struct syscall_cache_t *__attribute__((always_inline)) pop_current_or_impersonat return syscall; } +int __attribute__((always_inline)) fill_exec_context(struct pt_regs *ctx) { + struct syscall_cache_t *syscall = peek_current_or_impersonated_exec_syscall(); + if (!syscall) { + return 0; + } + + // call it here before the memory get replaced + fill_span_context(&syscall->exec.span_context); + + return 0; +} + +SEC("kprobe/prepare_binprm") +int kprobe_prepare_binprm(struct pt_regs *ctx) { + return fill_exec_context(ctx); +} + +SEC("kprobe/bprm_execve") +int kprobe_bprm_execve(struct pt_regs *ctx) { + return fill_exec_context(ctx); +} + +SEC("kprobe/security_bprm_check") +int kprobe_security_bprm_check(struct pt_regs *ctx) { + return fill_exec_context(ctx); +} + +SEC("kprobe/get_envs_offset") +int kprobe_get_envs_offset(struct pt_regs *ctx) { + struct syscall_cache_t *syscall = peek_current_or_impersonated_exec_syscall(); + if (!syscall) { + return 0; + } + + u32 key = 0; + struct str_array_buffer_t *buff = bpf_map_lookup_elem(&str_array_buffers, &key); + if (!buff) { + return 0; + } + + int i; + long bytes_read; + const char *args_start = syscall->exec.args_envs_ctx.args_start; + u64 offset = syscall->exec.args_envs_ctx.envs_offset; + u32 args_count = syscall->exec.args_envs_ctx.args_count; + +#pragma unroll + for (i = 0; i < MAX_ARGS_READ_PER_TAIL && args_count < syscall->exec.args.count; i++) { + bytes_read = bpf_probe_read_str(&buff->value[0], MAX_ARRAY_ELEMENT_SIZE, (void *)(args_start + offset)); + if (bytes_read <= 0 || bytes_read == MAX_ARRAY_ELEMENT_SIZE) { + syscall->exec.args_envs_ctx.envs_offset = 0; + return 0; + } + offset += bytes_read; + args_count++; + } + + syscall->exec.args_envs_ctx.envs_offset = offset; + syscall->exec.args_envs_ctx.args_count = args_count; + + if (args_count == syscall->exec.args.count) { + return 0; + } + + bpf_tail_call_compat(ctx, &args_envs_progs, EXEC_GET_ENVS_OFFSET); + + // make sure to reset envs_offset if the tailcall limit is reached and all args couldn't be read + if (args_count != syscall->exec.args.count) { + syscall->exec.args_envs_ctx.envs_offset = 0; + } + + return 0; +} + +void __attribute__((always_inline)) parse_args_envs(struct pt_regs *ctx, struct args_envs_parsing_context_t *args_envs_ctx, struct args_envs_t *args_envs) { + const char *args_start = args_envs_ctx->args_start; + int offset = args_envs_ctx->parsing_offset; + + args_envs->truncated = 0; + + u32 key = 0; + struct str_array_buffer_t *buff = bpf_map_lookup_elem(&str_array_buffers, &key); + if (!buff) { + return; + } + + struct args_envs_event_t event = { + .id = args_envs->id, + }; + + int i = 0; + int bytes_read = 0; + + void *buff_ptr = &buff->value[0]; + +#pragma unroll + for (i = 0; i < MAX_ARRAY_ELEMENT_PER_TAIL; i++) { + void *string_array_ptr = &(buff->value[(event.size + sizeof(bytes_read)) & (MAX_STR_BUFF_LEN - MAX_ARRAY_ELEMENT_SIZE - 1)]); + + bytes_read = bpf_probe_read_str(string_array_ptr, MAX_ARRAY_ELEMENT_SIZE, (void *)(args_start + offset)); + if (bytes_read > 0) { + bytes_read--; // remove trailing 0 + + // insert size before the string + bpf_probe_read(&(buff->value[event.size&(MAX_STR_BUFF_LEN - MAX_ARRAY_ELEMENT_SIZE - 1)]), sizeof(bytes_read), &bytes_read); + + int data_length = bytes_read + sizeof(bytes_read); + if (event.size + data_length >= MAX_PERF_STR_BUFF_LEN) { + // copy value to the event + bpf_probe_read(&event.value, MAX_PERF_STR_BUFF_LEN, buff_ptr); + + // only one argument overflows the limit + if (event.size == 0) { + event.size = MAX_PERF_STR_BUFF_LEN; + args_envs->counter++; + offset += bytes_read + 1; // count trailing 0 + } + + send_event(ctx, EVENT_ARGS_ENVS, event); + event.size = 0; + } else { + event.size += data_length; + args_envs->counter++; + offset += bytes_read + 1; + } + + if (args_envs->counter == args_envs->count) { + break; + } + } else { + break; + } + } + args_envs_ctx->parsing_offset = offset; + args_envs->truncated = i == MAX_ARRAY_ELEMENT_PER_TAIL; + + // flush remaining values + if (event.size > 0) { + bpf_probe_read(&event.value, MAX_PERF_STR_BUFF_LEN, buff_ptr); + + send_event(ctx, EVENT_ARGS_ENVS, event); + } +} + +SEC("kprobe/parse_args_envs_split") +int kprobe_parse_args_envs_split(struct pt_regs *ctx) { + struct syscall_cache_t *syscall = peek_current_or_impersonated_exec_syscall(); + if (!syscall) { + return 0; + } + + struct args_envs_t *args_envs; + + if (syscall->exec.args.counter < syscall->exec.args.count && syscall->exec.args.counter <= MAX_ARGS_ELEMENTS) { + args_envs = &syscall->exec.args; + } else if (syscall->exec.envs.counter < syscall->exec.envs.count) { + if (syscall->exec.envs.counter == 0) { + syscall->exec.args_envs_ctx.parsing_offset = syscall->exec.args_envs_ctx.envs_offset; + } + args_envs = &syscall->exec.envs; + } else { + return 0; + } + + parse_args_envs(ctx, &syscall->exec.args_envs_ctx, args_envs); + + bpf_tail_call_compat(ctx, &args_envs_progs, EXEC_PARSE_ARGS_ENVS_SPLIT); + + args_envs->truncated = 1; + + return 0; +} + +SEC("kprobe/parse_args_envs") +int kprobe_parse_args_envs(struct pt_regs *ctx) { + struct syscall_cache_t *syscall = peek_current_or_impersonated_exec_syscall(); + if (!syscall) { + return 0; + } + + struct args_envs_t *args_envs; + + if (syscall->exec.args.counter < syscall->exec.args.count) { + args_envs = &syscall->exec.args; + } else if (syscall->exec.envs.counter < syscall->exec.envs.count) { + args_envs = &syscall->exec.envs; + } else { + return 0; + } + + parse_args_envs(ctx, &syscall->exec.args_envs_ctx, args_envs); + + bpf_tail_call_compat(ctx, &args_envs_progs, EXEC_PARSE_ARGS_ENVS); + + args_envs->truncated = 1; + + return 0; +} + int __attribute__((always_inline)) fetch_interpreter(struct pt_regs *ctx, struct linux_binprm *bprm) { struct syscall_cache_t *syscall = peek_current_or_impersonated_exec_syscall(); if (!syscall) { @@ -777,7 +852,76 @@ int __attribute__((always_inline)) fetch_interpreter(struct pt_regs *ctx, struct return handle_interpreted_exec_event(ctx, syscall, interpreter); } -int __attribute__((always_inline)) send_exec_event(struct pt_regs *ctx, struct linux_binprm *bprm) { +SEC("kprobe/setup_new_exec") +int kprobe_setup_new_exec_interp(struct pt_regs *ctx) { + struct linux_binprm *bprm = (struct linux_binprm *) PT_REGS_PARM1(ctx); + return fetch_interpreter(ctx, bprm); +} + +SEC("kprobe/setup_new_exec") +int kprobe_setup_new_exec_args_envs(struct pt_regs *ctx) { + struct syscall_cache_t *syscall = peek_current_or_impersonated_exec_syscall(); + if (!syscall) { + return 0; + } + + void *bprm = (void *)PT_REGS_PARM1(ctx); + + int argc = 0; + u64 argc_offset; + LOAD_CONSTANT("linux_binprm_argc_offset", argc_offset); + bpf_probe_read(&argc, sizeof(argc), (char *)bprm + argc_offset); + + int envc = 0; + u64 envc_offset; + LOAD_CONSTANT("linux_binprm_envc_offset", envc_offset); + bpf_probe_read(&envc, sizeof(envc), (char *)bprm + envc_offset); + + unsigned long p = 0; + u64 p_offset; + LOAD_CONSTANT("linux_binprm_p_offset", p_offset); + bpf_probe_read(&p, sizeof(p), (char *)bprm + p_offset); + // if we fail to retrieve the pointer to the args then don't bother parsing them + if (p == 0) { + return 0; + } + + syscall->exec.args_envs_ctx.args_start = (char *)p; + syscall->exec.args_envs_ctx.args_count = 0; + syscall->exec.args_envs_ctx.parsing_offset = 0; + syscall->exec.args_envs_ctx.envs_offset = 0; + syscall->exec.args.count = argc; + syscall->exec.envs.count = envc; + + bpf_tail_call_compat(ctx, &args_envs_progs, EXEC_GET_ENVS_OFFSET); + + return 0; +} + +SEC("kprobe/setup_arg_pages") +int kprobe_setup_arg_pages(struct pt_regs *ctx) { + struct syscall_cache_t *syscall = peek_current_or_impersonated_exec_syscall(); + if (!syscall) { + return 0; + } + + if (syscall->exec.args_envs_ctx.envs_offset != 0) { + bpf_tail_call_compat(ctx, &args_envs_progs, EXEC_PARSE_ARGS_ENVS_SPLIT); + } else { + bpf_tail_call_compat(ctx, &args_envs_progs, EXEC_PARSE_ARGS_ENVS); + } + + return 0; +} + +void __attribute__((always_inline)) fill_args_envs(struct exec_event_t *event, struct syscall_cache_t *syscall) { + event->args_id = syscall->exec.args.id; + event->args_truncated = syscall->exec.args.truncated; + event->envs_id = syscall->exec.envs.id; + event->envs_truncated = syscall->exec.envs.truncated; +} + +int __attribute__((always_inline)) send_exec_event(struct pt_regs *ctx) { struct syscall_cache_t *syscall = pop_current_or_impersonated_exec_syscall(); if (!syscall) { return 0; @@ -829,36 +973,9 @@ int __attribute__((always_inline)) send_exec_event(struct pt_regs *ctx, struct l return 0; } -SEC("kprobe/security_bprm_committed_creds") -int kprobe_security_bprm_committed_creds(struct pt_regs *ctx) { - u64 setup_new_exec_is_last; - LOAD_CONSTANT("setup_new_exec_is_last", setup_new_exec_is_last); - - struct linux_binprm *bprm = (struct linux_binprm *) PT_REGS_PARM1(ctx); - - if (setup_new_exec_is_last) { - fetch_interpreter(ctx, bprm); - } else { - send_exec_event(ctx, bprm); - } - - return 0; -} - -SEC("kprobe/setup_new_exec") -int kprobe_setup_new_exec(struct pt_regs *ctx) { - u64 setup_new_exec_is_last; - LOAD_CONSTANT("setup_new_exec_is_last", setup_new_exec_is_last); - - struct linux_binprm *bprm = (struct linux_binprm *) PT_REGS_PARM1(ctx); - - if (setup_new_exec_is_last) { - send_exec_event(ctx, bprm); - } else { - fetch_interpreter(ctx, bprm); - } - - return 0; +SEC("kprobe/mprotect_fixup") +int kprobe_mprotect_fixup(struct pt_regs *ctx) { + return send_exec_event(ctx); } #endif diff --git a/pkg/security/ebpf/c/prebuilt/probe.c b/pkg/security/ebpf/c/prebuilt/probe.c index 8dafff3b5f3c4..b6087dd65f0d7 100644 --- a/pkg/security/ebpf/c/prebuilt/probe.c +++ b/pkg/security/ebpf/c/prebuilt/probe.c @@ -105,6 +105,11 @@ void __attribute__((always_inline)) invalidate_inode(struct pt_regs *ctx, u32 mo } } +// unit tests +#ifdef __BALOUM__ +#include "tests.h" +#endif + __u32 _version SEC("version") = 0xFFFFFFFE; char LICENSE[] SEC("license") = "GPL"; diff --git a/pkg/security/ebpf/c/process.h b/pkg/security/ebpf/c/process.h index d68af44ca818a..94f6b176a57c6 100644 --- a/pkg/security/ebpf/c/process.h +++ b/pkg/security/ebpf/c/process.h @@ -138,7 +138,12 @@ static struct proc_cache_t * __attribute__((always_inline)) fill_process_context data->is_kworker = 1; } - return get_proc_cache(tgid); + struct proc_cache_t *pc = get_proc_cache(tgid); + if (pc) { + data->inode = pc->entry.executable.path_key.ino; + } + + return pc; } static struct proc_cache_t * __attribute__((always_inline)) fill_process_context(struct process_context_t *data) { diff --git a/pkg/security/ebpf/c/syscalls.h b/pkg/security/ebpf/c/syscalls.h index 7e1933cd7a66a..6c1b8d05790bb 100644 --- a/pkg/security/ebpf/c/syscalls.h +++ b/pkg/security/ebpf/c/syscalls.h @@ -12,11 +12,18 @@ enum { ASYNC_SYSCALL }; -struct str_array_ref_t { +struct args_envs_t { + u32 count; // argc/envc retrieved from the kernel + u32 counter; // counter incremented while parsing args/envs u32 id; - u8 index; u8 truncated; - const char **array; +}; + +struct args_envs_parsing_context_t { + const char *args_start; + u64 envs_offset; + u64 parsing_offset; + u32 args_count; }; struct dentry_resolver_input_t { @@ -137,11 +144,11 @@ struct syscall_cache_t { struct { struct dentry *dentry; struct file_t file; - struct str_array_ref_t args; - struct str_array_ref_t envs; + struct args_envs_t args; + struct args_envs_t envs; + struct args_envs_parsing_context_t args_envs_ctx; struct span_context_t span_context; struct linux_binprm_t linux_binprm; - u32 next_tail; u8 is_parsed; } exec; diff --git a/pkg/security/ebpf/c/tests.h b/pkg/security/ebpf/c/tests.h new file mode 100644 index 0000000000000..9e9652d486857 --- /dev/null +++ b/pkg/security/ebpf/c/tests.h @@ -0,0 +1,7 @@ +#ifndef _TESTS_H +#define _TESTS_H + +#include "discarders_test.h" +#include "activity_dump_ratelimiter_test.h" + +#endif diff --git a/pkg/security/ebpf/c/utils.h b/pkg/security/ebpf/c/utils.h new file mode 100644 index 0000000000000..4fd4dc6bbb059 --- /dev/null +++ b/pkg/security/ebpf/c/utils.h @@ -0,0 +1,7 @@ +#ifndef _UTILS_H_ +#define _UTILS_H_ + +#define NS_TO_SEC(x) (x) / 1000000000 +#define SEC_TO_NS(x) (x) * 1000000000 + +#endif /* _UTILS_H_ */ diff --git a/pkg/security/ebpf/loader.go b/pkg/security/ebpf/loader.go index 9cef286ce2268..8f4d94aff4658 100644 --- a/pkg/security/ebpf/loader.go +++ b/pkg/security/ebpf/loader.go @@ -9,10 +9,13 @@ package ebpf import ( + "strings" + "github.com/DataDog/datadog-agent/pkg/ebpf/bytecode" "github.com/DataDog/datadog-agent/pkg/security/config" "github.com/DataDog/datadog-agent/pkg/security/seclog" "github.com/DataDog/datadog-go/v5/statsd" + manager "github.com/DataDog/ebpf-manager" ) // ProbeLoader defines an eBPF ProbeLoader @@ -95,3 +98,13 @@ func (l *OffsetGuesserLoader) Close() error { func (l *OffsetGuesserLoader) Load() (bytecode.AssetReader, error) { return bytecode.GetReader(l.config.BPFDir, "runtime-security-offset-guesser.o") } + +// IsSyscallWrapperRequired checks whether the wrapper is required +func IsSyscallWrapperRequired() (bool, error) { + openSyscall, err := manager.GetSyscallFnName("open") + if err != nil { + return false, err + } + + return !strings.HasPrefix(openSyscall, "SyS_") && !strings.HasPrefix(openSyscall, "sys_"), nil +} diff --git a/pkg/security/ebpf/probes/all.go b/pkg/security/ebpf/probes/all.go index aa887711dbee6..4a69fe8dbfb70 100644 --- a/pkg/security/ebpf/probes/all.go +++ b/pkg/security/ebpf/probes/all.go @@ -46,10 +46,12 @@ func init() { numCPU = 1 } - if numCPU < 64 { - defaultEventsRingBufferSize = uint32(64 * 256 * os.Getpagesize()) + if numCPU <= 16 { + defaultEventsRingBufferSize = uint32(8 * 256 * os.Getpagesize()) + } else if numCPU <= 64 { + defaultEventsRingBufferSize = uint32(16 * 256 * os.Getpagesize()) } else { - defaultEventsRingBufferSize = uint32(128 * 256 * os.Getpagesize()) + defaultEventsRingBufferSize = uint32(32 * 256 * os.Getpagesize()) } } diff --git a/pkg/security/ebpf/probes/const.go b/pkg/security/ebpf/probes/const.go index 71127a796433e..8201677b70b4d 100644 --- a/pkg/security/ebpf/probes/const.go +++ b/pkg/security/ebpf/probes/const.go @@ -81,3 +81,12 @@ const ( // TCDNSRequestParserKey is the key to DNS request parser program TCDNSRequestParserKey ) + +const ( + // ExecGetEnvsOffsetKey is the key to the program that computes the environment variables offset + ExecGetEnvsOffsetKey uint32 = iota + // ExecParseArgsEnvsSplitKey is the key to the program that splits the parsing of arguments and environment variables between tailcalls + ExecParseArgsEnvsSplitKey + // ExecParseArgsEnvsKey is the key to the program that parses arguments and then environment variables + ExecParseArgsEnvsKey +) diff --git a/pkg/security/ebpf/probes/event_types.go b/pkg/security/ebpf/probes/event_types.go index 068db081e9dc6..e3cee9d0efb08 100644 --- a/pkg/security/ebpf/probes/event_types.go +++ b/pkg/security/ebpf/probes/event_types.go @@ -81,14 +81,16 @@ func GetSelectorsPerEventType() map[eval.EventType][]manager.ProbesSelector { &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "tracepoint/raw_syscalls/sys_exit", EBPFFuncName: "sys_exit"}}, &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "tracepoint/sched/sched_process_fork", EBPFFuncName: "sched_process_fork"}}, &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/do_exit", EBPFFuncName: "kprobe_do_exit"}}, - &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/security_bprm_committed_creds", EBPFFuncName: "kprobe_security_bprm_committed_creds"}}, - &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/exit_itimers", EBPFFuncName: "kprobe_exit_itimers"}}, &manager.BestEffort{Selectors: []manager.ProbesSelector{ &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/prepare_binprm", EBPFFuncName: "kprobe_prepare_binprm"}}, &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/bprm_execve", EBPFFuncName: "kprobe_bprm_execve"}}, &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/security_bprm_check", EBPFFuncName: "kprobe_security_bprm_check"}}, }}, - &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/setup_new_exec", EBPFFuncName: "kprobe_setup_new_exec"}}, + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/setup_new_exec", EBPFFuncName: "kprobe_setup_new_exec_interp"}}, + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID + "_a", EBPFSection: "kprobe/setup_new_exec", EBPFFuncName: "kprobe_setup_new_exec_args_envs"}}, + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/setup_arg_pages", EBPFFuncName: "kprobe_setup_arg_pages"}}, + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/mprotect_fixup", EBPFFuncName: "kprobe_mprotect_fixup"}}, + &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/exit_itimers", EBPFFuncName: "kprobe_exit_itimers"}}, &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/vfs_open", EBPFFuncName: "kprobe_vfs_open"}}, &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/do_dentry_open", EBPFFuncName: "kprobe_do_dentry_open"}}, &manager.ProbeSelector{ProbeIdentificationPair: manager.ProbeIdentificationPair{UID: SecurityAgentUID, EBPFSection: "kprobe/commit_creds", EBPFFuncName: "kprobe_commit_creds"}}, diff --git a/pkg/security/ebpf/probes/exec.go b/pkg/security/ebpf/probes/exec.go index 0f1c834c56993..43687c00d0ec8 100644 --- a/pkg/security/ebpf/probes/exec.go +++ b/pkg/security/ebpf/probes/exec.go @@ -12,6 +12,27 @@ import manager "github.com/DataDog/ebpf-manager" // execProbes holds the list of probes used to track processes execution var execProbes = []*manager.Probe{ + { + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + UID: SecurityAgentUID, + EBPFSection: "kprobe/prepare_binprm", + EBPFFuncName: "kprobe_prepare_binprm", + }, + }, + { + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + UID: SecurityAgentUID, + EBPFSection: "kprobe/bprm_execve", + EBPFFuncName: "kprobe_bprm_execve", + }, + }, + { + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + UID: SecurityAgentUID, + EBPFSection: "kprobe/security_bprm_check", + EBPFFuncName: "kprobe_security_bprm_check", + }, + }, { ProbeIdentificationPair: manager.ProbeIdentificationPair{ UID: SecurityAgentUID, @@ -85,36 +106,29 @@ var execProbes = []*manager.Probe{ { ProbeIdentificationPair: manager.ProbeIdentificationPair{ UID: SecurityAgentUID, - EBPFSection: "kprobe/prepare_binprm", - EBPFFuncName: "kprobe_prepare_binprm", - }, - }, - { - ProbeIdentificationPair: manager.ProbeIdentificationPair{ - UID: SecurityAgentUID, - EBPFSection: "kprobe/bprm_execve", - EBPFFuncName: "kprobe_bprm_execve", + EBPFSection: "kprobe/setup_new_exec", + EBPFFuncName: "kprobe_setup_new_exec_interp", }, }, { ProbeIdentificationPair: manager.ProbeIdentificationPair{ - UID: SecurityAgentUID, - EBPFSection: "kprobe/security_bprm_check", - EBPFFuncName: "kprobe_security_bprm_check", + UID: SecurityAgentUID + "_a", + EBPFSection: "kprobe/setup_new_exec", + EBPFFuncName: "kprobe_setup_new_exec_args_envs", }, }, { ProbeIdentificationPair: manager.ProbeIdentificationPair{ UID: SecurityAgentUID, - EBPFSection: "kprobe/setup_new_exec", - EBPFFuncName: "kprobe_setup_new_exec", + EBPFSection: "kprobe/setup_arg_pages", + EBPFFuncName: "kprobe_setup_arg_pages", }, }, { ProbeIdentificationPair: manager.ProbeIdentificationPair{ UID: SecurityAgentUID, - EBPFSection: "kprobe/security_bprm_committed_creds", - EBPFFuncName: "kprobe_security_bprm_committed_creds", + EBPFSection: "kprobe/mprotect_fixup", + EBPFFuncName: "kprobe_mprotect_fixup", }, }, { @@ -227,19 +241,30 @@ func getExecProbes() []*manager.Probe { } func getExecTailCallRoutes() []manager.TailCallRoute { - var routes []manager.TailCallRoute - - for i := uint32(0); i != 10; i++ { - route := manager.TailCallRoute{ + return []manager.TailCallRoute{ + { + ProgArrayName: "args_envs_progs", + Key: ExecGetEnvsOffsetKey, + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + EBPFSection: "kprobe/get_envs_offset", + EBPFFuncName: "kprobe_get_envs_offset", + }, + }, + { ProgArrayName: "args_envs_progs", - Key: i, + Key: ExecParseArgsEnvsSplitKey, + ProbeIdentificationPair: manager.ProbeIdentificationPair{ + EBPFSection: "kprobe/parse_args_envs_split", + EBPFFuncName: "kprobe_parse_args_envs_split", + }, + }, + { + ProgArrayName: "args_envs_progs", + Key: ExecParseArgsEnvsKey, ProbeIdentificationPair: manager.ProbeIdentificationPair{ EBPFSection: "kprobe/parse_args_envs", EBPFFuncName: "kprobe_parse_args_envs", }, - } - routes = append(routes, route) + }, } - - return routes } diff --git a/pkg/security/ebpf/tests/activity_dump_ratelimiter_test.go b/pkg/security/ebpf/tests/activity_dump_ratelimiter_test.go new file mode 100644 index 0000000000000..277a37e03a427 --- /dev/null +++ b/pkg/security/ebpf/tests/activity_dump_ratelimiter_test.go @@ -0,0 +1,47 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux && ebpf_bindata +// +build linux,ebpf_bindata + +package tests + +import ( + "testing" + + "github.com/safchain/baloum/pkg/baloum" +) + +func TestActivityDumpRateLimiterBasic(t *testing.T) { + var ctx baloum.StdContext + code, err := newVM(t).RunProgram(&ctx, "test/ad_ratelimiter_basic") + if err != nil || code != 0 { + t.Errorf("unexpected error: %v, %d", err, code) + } +} + +func TestActivityDumpRateLimiterBasicHalf(t *testing.T) { + var ctx baloum.StdContext + code, err := newVM(t).RunProgram(&ctx, "test/ad_ratelimiter_basic_half") + if err != nil || code != 0 { + t.Errorf("unexpected error: %v, %d", err, code) + } +} + +func TestActivityDumpRateLimiterDecreasingDroprate(t *testing.T) { + var ctx baloum.StdContext + code, err := newVM(t).RunProgram(&ctx, "test/ad_ratelimiter_decreasing_droprate") + if err != nil || code != 0 { + t.Errorf("unexpected error: %v, %d", err, code) + } +} + +func TestActivityDumpRateLimiterIncreasingDroprate(t *testing.T) { + var ctx baloum.StdContext + code, err := newVM(t).RunProgram(&ctx, "test/ad_ratelimiter_increasing_droprate") + if err != nil || code != 0 { + t.Errorf("unexpected error: %v, %d", err, code) + } +} diff --git a/pkg/security/ebpf/tests/discarders_test.go b/pkg/security/ebpf/tests/discarders_test.go new file mode 100644 index 0000000000000..06d0b9d400f2d --- /dev/null +++ b/pkg/security/ebpf/tests/discarders_test.go @@ -0,0 +1,47 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux && ebpf_bindata +// +build linux,ebpf_bindata + +package tests + +import ( + "testing" + + "github.com/safchain/baloum/pkg/baloum" +) + +func TestDiscarderEventMask(t *testing.T) { + var ctx baloum.StdContext + code, err := newVM(t).RunProgram(&ctx, "test/discarders_event_mask") + if err != nil || code != 0 { + t.Errorf("unexpected error: %v, %d", err, code) + } +} + +func TestDiscarderRetention(t *testing.T) { + var ctx baloum.StdContext + code, err := newVM(t).RunProgram(&ctx, "test/discarders_retention") + if err != nil || code != 0 { + t.Errorf("unexpected error: %v, %d", err, code) + } +} + +func TestDiscarderRevision(t *testing.T) { + var ctx baloum.StdContext + code, err := newVM(t).RunProgram(&ctx, "test/discarders_revision") + if err != nil || code != 0 { + t.Errorf("unexpected error: %v, %d", err, code) + } +} + +func TestDiscarderMountRevision(t *testing.T) { + var ctx baloum.StdContext + code, err := newVM(t).RunProgram(&ctx, "test/discarders_mount_revision") + if err != nil || code != 0 { + t.Errorf("unexpected error: %v, %d", err, code) + } +} diff --git a/pkg/security/ebpf/tests/helpers_test.go b/pkg/security/ebpf/tests/helpers_test.go new file mode 100644 index 0000000000000..a0192ba542b09 --- /dev/null +++ b/pkg/security/ebpf/tests/helpers_test.go @@ -0,0 +1,100 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux && ebpf_bindata +// +build linux,ebpf_bindata + +package tests + +import ( + "flag" + "os" + "testing" + "time" + + "github.com/DataDog/datadog-agent/pkg/security/config" + secebpf "github.com/DataDog/datadog-agent/pkg/security/ebpf" + "github.com/DataDog/datadog-go/v5/statsd" + "github.com/cilium/ebpf" + "github.com/safchain/baloum/pkg/baloum" +) + +type testLogger struct { + t *testing.T + trace bool +} + +func (l *testLogger) Info(params ...interface{}) { + l.t.Log(params...) +} + +func (l *testLogger) Infof(format string, params ...interface{}) { + l.t.Logf(format, params...) +} + +func (l *testLogger) Debug(params ...interface{}) { + if l.trace { + l.t.Log(params...) + } +} + +func (l *testLogger) Debugf(format string, params ...interface{}) { + if l.trace { + l.t.Logf(format, params...) + } +} + +func (l *testLogger) Error(params ...interface{}) { + l.t.Error(params...) +} + +func (l *testLogger) Errorf(format string, params ...interface{}) { + l.t.Errorf(format, params...) +} + +var trace bool + +func newVM(t *testing.T) *baloum.VM { + useSyscallWrapper, err := secebpf.IsSyscallWrapperRequired() + if err != nil { + t.Fatal(err) + } + + loader := secebpf.NewProbeLoader(&config.Config{}, useSyscallWrapper, &statsd.NoOpClient{}) + reader, _, err := loader.Load() + if err != nil { + t.Fatal(err) + } + + spec, err := ebpf.LoadCollectionSpecFromReader(reader) + if err != nil { + t.Fatal(err) + } + + var now time.Time + + fncs := baloum.Fncs{ + TracePrintk: func(vm *baloum.VM, format string, args ...interface{}) error { + t.Logf(format, args...) + return nil + }, + // fake the time duration to speed up the tests + KtimeGetNS: func(vm *baloum.VM) (uint64, error) { + return uint64(now.UnixNano()), nil + }, + Sleep: func(vm *baloum.VM, duration time.Duration) error { + now = now.Add(duration) + return nil + }, + } + + return baloum.NewVM(spec, baloum.Opts{Fncs: fncs, Logger: &testLogger{t: t, trace: trace}}) +} + +func TestMain(m *testing.M) { + flag.BoolVar(&trace, "trace", false, "enable eBPF VM instruction tracing") + flag.Parse() + os.Exit(m.Run()) +} diff --git a/pkg/security/events/custom.go b/pkg/security/events/custom.go index c92d49f7a6996..8ded6863003ca 100644 --- a/pkg/security/events/custom.go +++ b/pkg/security/events/custom.go @@ -6,9 +6,8 @@ package events import ( - "encoding/json" - "github.com/mailru/easyjson" + "github.com/mailru/easyjson/jwriter" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/model" @@ -86,16 +85,6 @@ func (ce *CustomEvent) GetEventType() model.EventType { return ce.eventType } -// MarshalJSON is the JSON marshaller function of the custom event -func (ce *CustomEvent) MarshalJSON() ([]byte, error) { - return easyjson.Marshal(ce.marshaler) -} - -// String returns the string representation of a custom event -func (ce *CustomEvent) String() string { - d, err := json.Marshal(ce) - if err != nil { - return err.Error() - } - return string(d) +func (ce *CustomEvent) MarshalEasyJSON(w *jwriter.Writer) { + ce.marshaler.MarshalEasyJSON(w) } diff --git a/pkg/security/metrics/metrics.go b/pkg/security/metrics/metrics.go index af0ea3fbf5650..b4f236e28ecd1 100644 --- a/pkg/security/metrics/metrics.go +++ b/pkg/security/metrics/metrics.go @@ -192,6 +192,12 @@ var ( // be sent because they are too big // Tags: format, compression MetricActivityDumpEntityTooLarge = newAgentMetric(".activity_dump.entity_too_large") + // MetricActivityDumpBrokenLineageDrop is the name of the metric used to report the number of events dropped due to broken ancestors lineage + // Tags: - + MetricActivityDumpBrokenLineageDrop = newRuntimeMetric(".activity_dump.broken_lineage_drop") + // MetricActivityDumpEmptyDropped is the name of the metric used to report the number of activity dumps dropped because they were empty + // Tags: - + MetricActivityDumpEmptyDropped = newRuntimeMetric(".activity_dump.empty_dump_dropped") // Namespace resolver metrics diff --git a/pkg/security/module/event.go b/pkg/security/module/event.go index de7e39b91647c..c73444f372316 100644 --- a/pkg/security/module/event.go +++ b/pkg/security/module/event.go @@ -35,4 +35,5 @@ type Event interface { // EventSender defines an event sender type EventSender interface { SendEvent(rule *rules.Rule, event Event, extTagsCb func() []string, service string) + SendProcessEventData(data []byte) } diff --git a/pkg/security/module/event_monitors.go b/pkg/security/module/event_monitors.go index 2fa98d4c4cc52..5189c60042d0f 100644 --- a/pkg/security/module/event_monitors.go +++ b/pkg/security/module/event_monitors.go @@ -9,17 +9,39 @@ package module import ( + netevents "github.com/DataDog/datadog-agent/pkg/network/events" "github.com/DataDog/datadog-agent/pkg/security/secl/model" + "github.com/DataDog/datadog-agent/pkg/util/log" ) // InitEventMonitors initialize event monitors func InitEventMonitors(module *Module) { initProcessMonitor(module) + initNetworkProcessMonitor(module) } func initProcessMonitor(module *Module) { + if !module.config.ProcessEventMonitoringEnabled { + return + } + pm := NewProcessMonitoring(module) module.probe.AddEventHandler(model.ForkEventType, pm) module.probe.AddEventHandler(model.ExecEventType, pm) module.probe.AddEventHandler(model.ExitEventType, pm) + + log.Info("process monitoring initialized") +} + +func initNetworkProcessMonitor(module *Module) { + if !module.config.NetworkProcessEventMonitoringEnabled { + return + } + + m := netevents.Handler() + module.probe.AddEventHandler(model.ForkEventType, m) + module.probe.AddEventHandler(model.ExecEventType, m) + module.probe.AddEventHandler(model.ExitEventType, m) + + log.Info("network process monitoring initialized") } diff --git a/pkg/security/module/module.go b/pkg/security/module/module.go index 6d6d36e197604..56c946ff5ff59 100644 --- a/pkg/security/module/module.go +++ b/pkg/security/module/module.go @@ -19,15 +19,14 @@ import ( "sync" "syscall" "time" - "unsafe" - "github.com/DataDog/datadog-go/v5/statsd" "github.com/hashicorp/go-multierror" "go.uber.org/atomic" "google.golang.org/grpc" "github.com/DataDog/datadog-agent/cmd/system-probe/api/module" sapi "github.com/DataDog/datadog-agent/pkg/security/api" + "github.com/DataDog/datadog-agent/pkg/security/config" sconfig "github.com/DataDog/datadog-agent/pkg/security/config" "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/metrics" @@ -40,6 +39,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/seclog" "github.com/DataDog/datadog-agent/pkg/security/utils" "github.com/DataDog/datadog-agent/pkg/version" + "github.com/DataDog/datadog-go/v5/statsd" ) const ( @@ -119,9 +119,7 @@ func (m *Module) Init() error { m.probe.AddActivityDumpHandler(m) // initialize extra event monitors - if m.config.EventMonitoring { - InitEventMonitors(m) - } + InitEventMonitors(m) // initialize the eBPF manager and load the programs and maps in the kernel. At this stage, the probes are not // running yet. @@ -262,12 +260,12 @@ func (m *Module) displayReport(report *sprobe.Report) { seclog.Debugf("Policy report: %s", content) } -func (m *Module) getEventTypeEnabled() map[eval.EventType]bool { +func getEventTypeEnabled(config *config.Config) map[eval.EventType]bool { enabled := make(map[eval.EventType]bool) categories := model.GetEventTypePerCategory() - if m.config.FIMEnabled { + if config.FIMEnabled { if eventTypes, exists := categories[model.FIMCategory]; exists { for _, eventType := range eventTypes { enabled[eventType] = true @@ -275,7 +273,7 @@ func (m *Module) getEventTypeEnabled() map[eval.EventType]bool { } } - if m.config.NetworkEnabled { + if config.NetworkEnabled { if eventTypes, exists := categories[model.NetworkCategory]; exists { for _, eventType := range eventTypes { enabled[eventType] = true @@ -283,7 +281,7 @@ func (m *Module) getEventTypeEnabled() map[eval.EventType]bool { } } - if m.config.RuntimeEnabled { + if config.RuntimeEnabled { // everything but FIM for _, category := range model.GetAllCategories() { if category == model.FIMCategory || category == model.NetworkCategory { @@ -325,38 +323,11 @@ func (m *Module) ReloadPolicies() error { return m.LoadPolicies(m.policyProviders, true) } -func (m *Module) newRuleOpts() (opts rules.Opts) { - opts. - WithSupportedDiscarders(sprobe.SupportedDiscarders). - WithEventTypeEnabled(m.getEventTypeEnabled()). - WithReservedRuleIDs(events.AllCustomRuleIDs()). - WithLogger(seclog.DefaultLogger) - return -} - -func (m *Module) newEvalOpts() (evalOpts eval.Opts) { - evalOpts. - WithConstants(model.SECLConstants). - WithLegacyFields(model.SECLLegacyFields) - return evalOpts -} - func (m *Module) getApproverRuleset(policyProviders []rules.PolicyProvider) (*rules.RuleSet, *multierror.Error) { - evalOpts := m.newEvalOpts() - evalOpts.WithVariables(model.SECLVariables) - - opts := m.newRuleOpts() - opts.WithStateScopes(map[rules.Scope]rules.VariableProviderFactory{ - "process": func() rules.VariableProvider { - return eval.NewScopedVariables(func(ctx *eval.Context) unsafe.Pointer { - return unsafe.Pointer(&(*model.Event)(ctx.Object).ProcessContext) - }, nil) - }, - }) + ruleOpts, evalOpts := rules.NewEvalOpts(getEventTypeEnabled(m.config)) // approver ruleset - model := &model.Model{} - approverRuleSet := rules.NewRuleSet(model, model.NewEvent, &opts, &evalOpts) + approverRuleSet := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, ruleOpts, evalOpts) // load policies loadApproversErrs := approverRuleSet.LoadPolicies(m.policyLoader, m.policyOpts) @@ -390,22 +361,8 @@ func (m *Module) LoadPolicies(policyProviders []rules.PolicyProvider, sendLoaded return err } - opts := m.newRuleOpts() - opts. - WithStateScopes(map[rules.Scope]rules.VariableProviderFactory{ - "process": func() rules.VariableProvider { - scoper := func(ctx *eval.Context) unsafe.Pointer { - return unsafe.Pointer((*sprobe.Event)(ctx.Object).ProcessCacheEntry) - } - return m.probe.GetResolvers().ProcessResolver.NewProcessVariables(scoper) - }, - }) - - evalOpts := m.newEvalOpts() - evalOpts.WithVariables(model.SECLVariables) - // standard ruleset - ruleSet := m.probe.NewRuleSet(&opts, &evalOpts) + ruleSet := m.probe.NewRuleSet() loadErrs := ruleSet.LoadPolicies(m.policyLoader, m.policyOpts) if loadApproversErrs.ErrorOrNil() == nil && loadErrs.ErrorOrNil() != nil { @@ -492,13 +449,11 @@ func (m *Module) EventDiscarderFound(rs *rules.RuleSet, event eval.Event, field return } - if err := m.probe.OnNewDiscarder(rs, event.(*sprobe.Event), field, eventType); err != nil { - seclog.Trace(err) - } + m.probe.OnNewDiscarder(rs, event.(*model.Event), field, eventType) } // HandleEvent is called by the probe when an event arrives from the kernel -func (m *Module) HandleEvent(event *sprobe.Event) { +func (m *Module) HandleEvent(event *model.Event) { // if the event should have been discarded in kernel space, we don't need to evaluate it if event.SavedByActivityDumps { return @@ -516,14 +471,17 @@ func (m *Module) HandleCustomEvent(rule *rules.Rule, event *events.CustomEvent) // RuleMatch is called by the ruleset when a rule matches func (m *Module) RuleMatch(rule *rules.Rule, event eval.Event) { - // prepare the event - m.probe.OnRuleMatch(rule, event.(*sprobe.Event)) + ev := event.(*model.Event) + + // ensure that all the fields are resolved before sending + ev.FieldHandlers.ResolveContainerID(ev, &ev.ContainerContext) + ev.FieldHandlers.ResolveContainerTags(ev, &ev.ContainerContext) // needs to be resolved here, outside of the callback as using process tree // which can be modified during queuing - service := event.(*sprobe.Event).GetProcessServiceTag() + service := ev.FieldHandlers.GetProcessServiceTag(ev) - id := event.(*sprobe.Event).ContainerContext.ID + id := ev.ContainerContext.ID extTagsCb := func() []string { var tags []string @@ -541,7 +499,7 @@ func (m *Module) RuleMatch(rule *rules.Rule, event eval.Event) { } // send if not selftest related events - if m.selfTester == nil || !m.selfTester.IsExpectedEvent(rule, event) { + if m.selfTester == nil || !m.selfTester.IsExpectedEvent(rule, event, m.probe) { m.eventSender.SendEvent(rule, event, extTagsCb, service) } } @@ -555,6 +513,16 @@ func (m *Module) SendEvent(rule *rules.Rule, event Event, extTagsCb func() []str } } +// SendProcessEvent sends a process event using the provided EventSender interface +func (m *Module) SendProcessEvent(data []byte) { + m.eventSender.SendProcessEventData(data) +} + +// SendProcessEventData implements the EventSender interface forwarding a process event to the APIServer +func (m *Module) SendProcessEventData(data []byte) { + m.apiServer.SendProcessEvent(data) +} + // HandleActivityDump sends an activity dump to the backend func (m *Module) HandleActivityDump(dump *sapi.ActivityDumpStreamMessage) { m.apiServer.SendActivityDump(dump) @@ -611,7 +579,7 @@ func (m *Module) statsSender() { } // Event monitoring may run independently of CWS products - if m.config.EventMonitoring { + if m.config.NetworkProcessEventMonitoringEnabled || m.config.ProcessEventMonitoringEnabled { _ = m.statsdClient.Gauge(metrics.MetricEventMonitoringRunning, 1, tags, 1) } case <-m.ctx.Done(): @@ -665,13 +633,19 @@ func getStatdClient(cfg *sconfig.Config, opts ...Opts) (statsd.ClientInterface, } // NewModule instantiates a runtime security system-probe module -func NewModule(cfg *sconfig.Config, opts ...Opts) (module.Module, error) { - statsdClient, err := getStatdClient(cfg, opts...) +func NewModule(cfg *sconfig.Config, opts Opts) (module.Module, error) { + statsdClient, err := getStatdClient(cfg, opts) if err != nil { return nil, err } - probe, err := sprobe.NewProbe(cfg, statsdClient) + probeOpts := sprobe.Opts{ + StatsdClient: statsdClient, + DontDiscardRuntime: opts.DontDiscardRuntime, + EventTypeEnabled: getEventTypeEnabled(cfg), + } + + probe, err := sprobe.NewProbe(cfg, probeOpts) if err != nil { return nil, err } @@ -701,8 +675,8 @@ func NewModule(cfg *sconfig.Config, opts ...Opts) (module.Module, error) { } m.apiServer.module = m - if len(opts) > 0 && opts[0].EventSender != nil { - m.eventSender = opts[0].EventSender + if opts.EventSender != nil { + m.eventSender = opts.EventSender } else { m.eventSender = m } diff --git a/pkg/security/module/opts.go b/pkg/security/module/opts.go index 5a4167719d626..ae4a02939c160 100644 --- a/pkg/security/module/opts.go +++ b/pkg/security/module/opts.go @@ -14,6 +14,7 @@ import ( // Opts define module options type Opts struct { - StatsdClient statsd.ClientInterface - EventSender EventSender + StatsdClient statsd.ClientInterface + EventSender EventSender + DontDiscardRuntime bool } diff --git a/pkg/security/module/policy_monitor.go b/pkg/security/module/policy_monitor.go index b62a06b8c248c..8514001f28dfd 100644 --- a/pkg/security/module/policy_monitor.go +++ b/pkg/security/module/policy_monitor.go @@ -189,17 +189,15 @@ func NewRuleSetLoadedEvent(rs *rules.RuleSet, err *multierror.Error) (*rules.Rul var policyState *PolicyState var exists bool - for _, policy := range rs.GetPolicies() { - // rule successfully loaded - for _, ruleDef := range policy.Rules { - policyName := ruleDef.Policy.Name - - if policyState, exists = mp[policyName]; !exists { - policyState = PolicyStateFromRuleDefinition(ruleDef) - mp[policyName] = policyState - } - policyState.Rules = append(policyState.Rules, RuleStateFromDefinition(ruleDef, "loaded", "")) + for _, rule := range rs.GetRules() { + ruleDef := rule.Definition + policyName := ruleDef.Policy.Name + + if policyState, exists = mp[policyName]; !exists { + policyState = PolicyStateFromRuleDefinition(ruleDef) + mp[policyName] = policyState } + policyState.Rules = append(policyState.Rules, RuleStateFromDefinition(ruleDef, "loaded", "")) } // rules ignored due to errors @@ -211,6 +209,8 @@ func NewRuleSetLoadedEvent(rs *rules.RuleSet, err *multierror.Error) (*rules.Rul if _, exists := mp[policyName]; !exists { policyState = PolicyStateFromRuleDefinition(rerr.Definition) mp[policyName] = policyState + } else { + policyState = mp[policyName] } policyState.Rules = append(policyState.Rules, RuleStateFromDefinition(rerr.Definition, string(rerr.Type()), rerr.Err.Error())) } diff --git a/pkg/security/module/process_monitor.go b/pkg/security/module/process_monitor.go index cb0bc752fe2a6..3cc3bc5598029 100644 --- a/pkg/security/module/process_monitor.go +++ b/pkg/security/module/process_monitor.go @@ -11,7 +11,7 @@ package module import ( "github.com/DataDog/datadog-agent/pkg/process/events/model" "github.com/DataDog/datadog-agent/pkg/security/events" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + smodel "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -22,9 +22,9 @@ type ProcessMonitoring struct { } // HandleEvent implement the EventHandler interface -func (p *ProcessMonitoring) HandleEvent(event *sprobe.Event) { +func (p *ProcessMonitoring) HandleEvent(event *smodel.Event) { // Force resolution of all event fields before exposing it through the API server - event.ResolveFields(false) + event.ResolveFields() event.ResolveEventTimestamp() entry, _ := event.ResolveProcessCacheEntry() @@ -62,7 +62,7 @@ func (p *ProcessMonitoring) HandleEvent(event *sprobe.Event) { return } - p.module.apiServer.SendProcessEvent(data) + p.module.SendProcessEvent(data) } // HandleCustomEvent implement the EventHandler interface diff --git a/pkg/security/module/rule_filters_model.go b/pkg/security/module/rule_filters_model.go index 6856466fa7373..b8f4c26acaf59 100644 --- a/pkg/security/module/rule_filters_model.go +++ b/pkg/security/module/rule_filters_model.go @@ -7,7 +7,6 @@ package module import ( "reflect" - "unsafe" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" ) @@ -43,10 +42,6 @@ func (e *RuleFilterEvent) GetTags() []string { return []string{} } -func (e *RuleFilterEvent) GetPointer() unsafe.Pointer { - return unsafe.Pointer(e) -} - func (m *RuleFilterModel) ValidateField(key string, value eval.FieldValue) error { return nil } diff --git a/pkg/security/module/rule_filters_model_linux.go b/pkg/security/module/rule_filters_model_linux.go index f94adc524dd1e..0ab7d9c0e7ac3 100644 --- a/pkg/security/module/rule_filters_model_linux.go +++ b/pkg/security/module/rule_filters_model_linux.go @@ -40,7 +40,7 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, regID eval.RegisterID) case "kernel.version.major": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - kv := (*RuleFilterEvent)(ctx.Object).kv + kv := ctx.Event.(*RuleFilterEvent).kv if ubuntuKernelVersion := kv.UbuntuKernelVersion(); ubuntuKernelVersion != nil { return int(ubuntuKernelVersion.Major) } @@ -51,7 +51,7 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, regID eval.RegisterID) case "kernel.version.minor": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - kv := (*RuleFilterEvent)(ctx.Object).kv + kv := ctx.Event.(*RuleFilterEvent).kv if ubuntuKernelVersion := kv.UbuntuKernelVersion(); ubuntuKernelVersion != nil { return int(ubuntuKernelVersion.Minor) } @@ -62,7 +62,7 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, regID eval.RegisterID) case "kernel.version.patch": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - kv := (*RuleFilterEvent)(ctx.Object).kv + kv := ctx.Event.(*RuleFilterEvent).kv if ubuntuKernelVersion := kv.UbuntuKernelVersion(); ubuntuKernelVersion != nil { return int(ubuntuKernelVersion.Patch) } @@ -73,7 +73,7 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, regID eval.RegisterID) case "kernel.version.abi": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - kv := (*RuleFilterEvent)(ctx.Object).kv + kv := ctx.Event.(*RuleFilterEvent).kv if ubuntuKernelVersion := kv.UbuntuKernelVersion(); ubuntuKernelVersion != nil { return int(ubuntuKernelVersion.Abi) } @@ -84,7 +84,7 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, regID eval.RegisterID) case "kernel.version.flavor": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - kv := (*RuleFilterEvent)(ctx.Object).kv + kv := ctx.Event.(*RuleFilterEvent).kv if ubuntuKernelVersion := kv.UbuntuKernelVersion(); ubuntuKernelVersion != nil { return ubuntuKernelVersion.Flavor } @@ -99,70 +99,70 @@ func (m *RuleFilterModel) GetEvaluator(field eval.Field, regID eval.RegisterID) }, nil case "os.id": return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { return (*RuleFilterEvent)(ctx.Object).kv.OsRelease["ID"] }, + EvalFnc: func(ctx *eval.Context) string { return ctx.Event.(*RuleFilterEvent).kv.OsRelease["ID"] }, Field: field, }, nil case "os.platform_id": return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { return (*RuleFilterEvent)(ctx.Object).kv.OsRelease["PLATFORM_ID"] }, + EvalFnc: func(ctx *eval.Context) string { return ctx.Event.(*RuleFilterEvent).kv.OsRelease["PLATFORM_ID"] }, Field: field, }, nil case "os.version_id": return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { return (*RuleFilterEvent)(ctx.Object).kv.OsRelease["VERSION_ID"] }, + EvalFnc: func(ctx *eval.Context) string { return ctx.Event.(*RuleFilterEvent).kv.OsRelease["VERSION_ID"] }, Field: field, }, nil case "os.is_amazon_linux": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsAmazonLinuxKernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsAmazonLinuxKernel() }, Field: field, }, nil case "os.is_cos": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsCOSKernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsCOSKernel() }, Field: field, }, nil case "os.is_debian": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsDebianKernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsDebianKernel() }, Field: field, }, nil case "os.is_oracle": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsOracleUEKKernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsOracleUEKKernel() }, Field: field, }, nil case "os.is_rhel": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*RuleFilterEvent)(ctx.Object).kv.IsRH7Kernel() || (*RuleFilterEvent)(ctx.Object).kv.IsRH8Kernel() + return ctx.Event.(*RuleFilterEvent).kv.IsRH7Kernel() || ctx.Event.(*RuleFilterEvent).kv.IsRH8Kernel() }, Field: field, }, nil case "os.is_rhel7": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsRH7Kernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsRH7Kernel() }, Field: field, }, nil case "os.is_rhel8": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsRH8Kernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsRH8Kernel() }, Field: field, }, nil case "os.is_sles": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsSLESKernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsSLESKernel() }, Field: field, }, nil case "os.is_sles12": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsSuse12Kernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsSuse12Kernel() }, Field: field, }, nil case "os.is_sles15": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*RuleFilterEvent)(ctx.Object).kv.IsSuse15Kernel() }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*RuleFilterEvent).kv.IsSuse15Kernel() }, Field: field, }, nil } diff --git a/pkg/security/module/rule_filters_model_nolinux.go b/pkg/security/module/rule_filters_model_nolinux.go index da6e24177801a..fe4ab010bf67e 100644 --- a/pkg/security/module/rule_filters_model_nolinux.go +++ b/pkg/security/module/rule_filters_model_nolinux.go @@ -20,8 +20,8 @@ type RuleFilterEvent struct { type RuleFilterModel struct { } -func NewRuleFilterModel() (*RuleFilterModel, error) { - return &RuleFilterModel{}, nil +func NewRuleFilterModel() *RuleFilterModel { + return &RuleFilterModel{} } func (m *RuleFilterModel) NewEvent() eval.Event { diff --git a/pkg/security/module/server.go b/pkg/security/module/server.go index 1b919992e2ba3..f63299dc52f12 100644 --- a/pkg/security/module/server.go +++ b/pkg/security/module/server.go @@ -19,6 +19,7 @@ import ( "github.com/DataDog/datadog-go/v5/statsd" easyjson "github.com/mailru/easyjson" + jwriter "github.com/mailru/easyjson/jwriter" "go.uber.org/atomic" "golang.org/x/time/rate" @@ -439,7 +440,7 @@ func (a *APIServer) SendEvent(rule *rules.Rule, event Event, extTagsCb func() [] ruleEvent.AgentContext.PolicyVersion = policy.Version } - probeJSON, err := json.Marshal(event) + probeJSON, err := marshalEvent(event, a.probe) if err != nil { seclog.Errorf("failed to marshal event: %v", err) return @@ -477,6 +478,22 @@ func (a *APIServer) SendEvent(rule *rules.Rule, event Event, extTagsCb func() [] a.enqueue(msg) } +func marshalEvent(event Event, probe *sprobe.Probe) ([]byte, error) { + if ev, ok := event.(*model.Event); ok { + return sprobe.MarshalEvent(ev, probe) + } + + if m, ok := event.(easyjson.Marshaler); ok { + w := &jwriter.Writer{ + Flags: jwriter.NilSliceAsEmpty | jwriter.NilMapAsEmpty, + } + m.MarshalEasyJSON(w) + return w.BuildBytes() + } + + return json.Marshal(event) +} + // expireEvent updates the count of expired messages for the appropriate rule func (a *APIServer) expireEvent(msg *api.SecurityEventMessage) { a.expiredEventsLock.RLock() diff --git a/pkg/security/probe/accessors.go b/pkg/security/probe/accessors.go deleted file mode 100644 index 3d82457120331..0000000000000 --- a/pkg/security/probe/accessors.go +++ /dev/null @@ -1,33004 +0,0 @@ -//go:build linux -// +build linux - -// Code generated - DO NOT EDIT. -package probe - -import ( - "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" - "github.com/DataDog/datadog-agent/pkg/security/secl/model" - _ "github.com/DataDog/datadog-agent/pkg/security/secl/model" - "net" - "reflect" - "unsafe" -) - -// suppress unused package warning -var ( - _ *unsafe.Pointer -) - -func (m *Model) GetIterator(field eval.Field) (eval.Iterator, error) { - switch field { - case "process.ancestors": - return &model.ProcessAncestorsIterator{}, nil - case "ptrace.tracee.ancestors": - return &model.ProcessAncestorsIterator{}, nil - case "signal.target.ancestors": - return &model.ProcessAncestorsIterator{}, nil - } - return nil, &eval.ErrIteratorNotSupported{Field: field} -} -func (m *Model) GetEventTypes() []eval.EventType { - return []eval.EventType{ - eval.EventType("bind"), - eval.EventType("bpf"), - eval.EventType("capset"), - eval.EventType("chmod"), - eval.EventType("chown"), - eval.EventType("dns"), - eval.EventType("exec"), - eval.EventType("exit"), - eval.EventType("link"), - eval.EventType("load_module"), - eval.EventType("mkdir"), - eval.EventType("mmap"), - eval.EventType("mount"), - eval.EventType("mprotect"), - eval.EventType("open"), - eval.EventType("ptrace"), - eval.EventType("removexattr"), - eval.EventType("rename"), - eval.EventType("rmdir"), - eval.EventType("selinux"), - eval.EventType("setgid"), - eval.EventType("setuid"), - eval.EventType("setxattr"), - eval.EventType("signal"), - eval.EventType("splice"), - eval.EventType("unlink"), - eval.EventType("unload_module"), - eval.EventType("utimes"), - } -} -func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Evaluator, error) { - switch field { - case "async": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Async - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bind.addr.family": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Bind.AddrFamily) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bind.addr.ip": - return &eval.CIDREvaluator{ - EvalFnc: func(ctx *eval.Context) net.IPNet { - return (*Event)(ctx.Object).Bind.Addr.IPNet - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bind.addr.port": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Bind.Addr.Port) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bind.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Bind.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.cmd": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Cmd) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.map.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).BPF.Map.Name - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.map.type": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Map.Type) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.prog.attach_type": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Program.AttachType) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.prog.helpers": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - result := make([]int, len((*Event)(ctx.Object).ResolveHelpers(&(*Event)(ctx.Object).BPF.Program))) - for i, v := range (*Event)(ctx.Object).ResolveHelpers(&(*Event)(ctx.Object).BPF.Program) { - result[i] = int(v) - } - return result - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "bpf.prog.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).BPF.Program.Name - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.prog.tag": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).BPF.Program.Tag - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.prog.type": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Program.Type) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "bpf.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "capset.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Capset.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "capset.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Capset.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.destination.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.destination.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Chmod.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Chmod.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Chmod.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Chmod.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Chmod.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Chmod.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Chmod.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Chmod.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chmod.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Chmod.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chmod.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.destination.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.destination.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveChownGID(&(*Event)(ctx.Object).Chown) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.destination.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.destination.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveChownUID(&(*Event)(ctx.Object).Chown) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Chown.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Chown.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Chown.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Chown.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Chown.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Chown.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Chown.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Chown.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "chown.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Chown.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "chown.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveContainerID(&(*Event)(ctx.Object).ContainerContext) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "container.tags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveContainerTags(&(*Event)(ctx.Object).ContainerContext) - }, - Field: field, - Weight: 9999 * eval.HandlerWeight, - }, nil - case "dns.id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.ID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "dns.question.class": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Class) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "dns.question.count": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Count) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "dns.question.length": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Size) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "dns.question.name": - return &eval.StringEvaluator{ - OpOverrides: eval.DNSNameCmp, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).DNS.Name - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "dns.question.name.length": - return &eval.IntEvaluator{ - OpOverrides: eval.DNSNameCmp, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).DNS.Name) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "dns.question.type": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Type) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgs((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "exec.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsFlags((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsOptions((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessArgsTruncated((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgv((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "exec.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgv0((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "exec.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveProcessCreatedAt((*Event)(ctx.Object).Exec.Process)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvp((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvs((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated((*Event)(ctx.Object).Exec.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Exec.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Exec.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Exec.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exec.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exec.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exec.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exec.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Exec.Process.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Exec.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exec.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exec.Process.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exec.Process.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exec.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgs((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "exit.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsFlags((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsOptions((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessArgsTruncated((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgv((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "exit.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgv0((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "exit.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.cause": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Cause) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.code": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Code) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveProcessCreatedAt((*Event)(ctx.Object).Exit.Process)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvp((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvs((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated((*Event)(ctx.Object).Exit.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Exit.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Exit.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Exit.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exit.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exit.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exit.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exit.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Exit.Process.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Exit.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "exit.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exit.Process.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exit.Process.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "exit.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Link.Target) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Link.Target.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Link.Target.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Link.Target) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Link.Target)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Link.Target) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Link.Target)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Link.Target.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.destination.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.destination.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Link.Target.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Link.Source) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Link.Source.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Link.Source.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Link.Source) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Link.Source)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Link.Source) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Link.Source)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Link.Source.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "link.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Link.Source.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "link.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).LoadModule.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).LoadModule.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).LoadModule.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).LoadModule.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).LoadModule.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).LoadModule.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).LoadModule.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).LoadModule.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).LoadModule.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "load_module.loaded_from_memory": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).LoadModule.LoadedFromMemory - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.Name - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "load_module.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.destination.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.destination.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Mkdir.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Mkdir.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Mkdir.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Mkdir.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Mkdir.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Mkdir.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Mkdir.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Mkdir.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mkdir.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Mkdir.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mkdir.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).MMap.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).MMap.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).MMap.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).MMap.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).MMap.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).MMap.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).MMap.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).MMap.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).MMap.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mmap.flags": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MMap.Flags - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.protection": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MMap.Protection - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mmap.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mount.fs_type": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mount.Mount.FSType - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mount.mountpoint.path": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveMountPointPath(&(*Event)(ctx.Object).Mount) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mount.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mount.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mount.source.path": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveMountSourcePath(&(*Event)(ctx.Object).Mount) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "mprotect.req_protection": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MProtect.ReqProtection - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mprotect.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MProtect.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "mprotect.vm_protection": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MProtect.VMProtection - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.destination.ip": - return &eval.CIDREvaluator{ - EvalFnc: func(ctx *eval.Context) net.IPNet { - return (*Event)(ctx.Object).NetworkContext.Destination.IPNet - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.destination.port": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Destination.Port) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.device.ifindex": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Device.IfIndex) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.device.ifname": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveNetworkDeviceIfName(&(*Event)(ctx.Object).NetworkContext.Device) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "network.l3_protocol": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.L3Protocol) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.l4_protocol": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.L4Protocol) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.size": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Size) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.source.ip": - return &eval.CIDREvaluator{ - EvalFnc: func(ctx *eval.Context) net.IPNet { - return (*Event)(ctx.Object).NetworkContext.Source.IPNet - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "network.source.port": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Source.Port) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.destination.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Open.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Open.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Open.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Open.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Open.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Open.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Open.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Open.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Open.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "open.flags": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.Flags) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "open.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.ancestors.args": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgs(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "process.ancestors.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsFlags(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsOptions(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.args_truncated": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsTruncated(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgv(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "process.ancestors.argv0": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgv0(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "process.ancestors.cap_effective": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.CapEffective) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.cap_permitted": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.CapPermitted) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.comm": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Comm - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.container.id": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.ContainerID - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.cookie": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Cookie) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.created_at": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int((*Event)(ctx.Object).ResolveProcessCreatedAt(&element.ProcessContext.Process)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.egid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.EGID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.egroup": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.EGroup - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvp(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvs(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.envs_truncated": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.euid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.EUID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.euser": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.EUser - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.change_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.filesystem": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.in_upper_layer": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, false) - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.inode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.mode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.modification_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.mount_id": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.name": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.name.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.path": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.path.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.rights": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.FileEvent.FileFields)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.file.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.fsgid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.FSGID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.fsgroup": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.FSGroup - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.fsuid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.FSUID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.fsuser": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.FSUser - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.Group - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.change_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.filesystem": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.in_upper_layer": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, false) - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.inode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.mode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.modification_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.mount_id": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.name": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.name.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.path": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.path.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.rights": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.interpreter.file.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.is_kworker": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.PIDContext.IsKworker - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.is_thread": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.IsThread - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.pid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PIDContext.Pid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.ppid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PPid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.tid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PIDContext.Tid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.tty_name": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.TTYName - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.ancestors.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.User - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "process.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgs(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "process.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsFlags(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsOptions(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessArgsTruncated(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgv(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "process.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgv0(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "process.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveProcessCreatedAt(&(*Event)(ctx.Object).ProcessContext.Process)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvp(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvs(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&(*Event)(ctx.Object).ProcessContext.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ProcessContext.Process.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ProcessContext.Process.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveProcessArgs((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "process.parent.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgsFlags((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgsOptions((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveProcessArgsTruncated((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgv((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "process.parent.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveProcessArgv0((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "process.parent.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ResolveProcessCreatedAt((*Event)(ctx.Object).ProcessContext.Parent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessEnvp((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessEnvs((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated((*Event)(ctx.Object).ProcessContext.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return false - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return false - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "process.parent.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return false - } - return (*Event)(ctx.Object).ProcessContext.Parent.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return false - } - return (*Event)(ctx.Object).ProcessContext.Parent.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.parent.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { - return "" - } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "process.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.request": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Request) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.ancestors.args": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgs(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsFlags(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsOptions(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.args_truncated": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsTruncated(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgv(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.argv0": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgv0(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.cap_effective": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.CapEffective) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.cap_permitted": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.CapPermitted) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.comm": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Comm - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.container.id": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.ContainerID - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.cookie": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Cookie) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.created_at": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int((*Event)(ctx.Object).ResolveProcessCreatedAt(&element.ProcessContext.Process)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.egid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.EGID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.egroup": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.EGroup - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvp(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvs(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.envs_truncated": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.euid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.EUID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.euser": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.EUser - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.change_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.filesystem": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.in_upper_layer": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, false) - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.inode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.mode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.modification_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.mount_id": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.name": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.name.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.path": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.path.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.rights": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.FileEvent.FileFields)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.file.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.fsgid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.FSGID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.fsgroup": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.FSGroup - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.fsuid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.FSUID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.fsuser": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.FSUser - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.Group - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.change_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.filesystem": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, false) - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.inode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.mode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.modification_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.mount_id": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.name": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.name.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.path": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.path.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.rights": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.interpreter.file.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.is_kworker": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.PIDContext.IsKworker - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.is_thread": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.IsThread - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.pid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PIDContext.Pid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.ppid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PPid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.tid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PIDContext.Tid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.tty_name": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.TTYName - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.ancestors.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.User - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "ptrace.tracee.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgs(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "ptrace.tracee.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsFlags(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsOptions(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessArgsTruncated(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgv(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "ptrace.tracee.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgv0(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "ptrace.tracee.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveProcessCreatedAt(&(*Event)(ctx.Object).PTrace.Tracee.Process)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvp(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvs(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&(*Event)(ctx.Object).PTrace.Tracee.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).PTrace.Tracee.Process.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).PTrace.Tracee.Process.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveProcessArgs((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgsFlags((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgsOptions((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveProcessArgsTruncated((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgv((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveProcessArgv0((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ResolveProcessCreatedAt((*Event)(ctx.Object).PTrace.Tracee.Parent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessEnvp((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessEnvs((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated((*Event)(ctx.Object).PTrace.Tracee.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return false - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return false - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "ptrace.tracee.parent.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return false - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return false - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.parent.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { - return "" - } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "ptrace.tracee.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.destination.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveXAttrName(&(*Event)(ctx.Object).RemoveXAttr) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.destination.namespace": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveXAttrNamespace(&(*Event)(ctx.Object).RemoveXAttr) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).RemoveXAttr.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).RemoveXAttr.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).RemoveXAttr.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).RemoveXAttr.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).RemoveXAttr.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).RemoveXAttr.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).RemoveXAttr.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).RemoveXAttr.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "removexattr.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).RemoveXAttr.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "removexattr.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Rename.New) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Rename.New.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Rename.New.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Rename.New) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Rename.New)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Rename.New) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Rename.New)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Rename.New.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.destination.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.destination.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Rename.New.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Rename.Old) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Rename.Old.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Rename.Old.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Rename.Old) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Rename.Old)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Rename.Old) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Rename.Old)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Rename.Old.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rename.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Rename.Old.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rename.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Rmdir.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Rmdir.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Rmdir.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Rmdir.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Rmdir.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Rmdir.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Rmdir.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Rmdir.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "rmdir.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Rmdir.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "rmdir.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "selinux.bool.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSELinuxBoolName(&(*Event)(ctx.Object).SELinux) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "selinux.bool.state": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SELinux.BoolChangeValue - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "selinux.bool_commit.state": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).SELinux.BoolCommitValue - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "selinux.enforce.status": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SELinux.EnforceStatus - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setgid.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetGID.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setgid.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSetgidEGroup(&(*Event)(ctx.Object).SetGID) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setgid.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetGID.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setgid.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSetgidFSGroup(&(*Event)(ctx.Object).SetGID) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setgid.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetGID.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setgid.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSetgidGroup(&(*Event)(ctx.Object).SetGID) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setuid.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetUID.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setuid.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSetuidEUser(&(*Event)(ctx.Object).SetUID) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setuid.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetUID.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setuid.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSetuidFSUser(&(*Event)(ctx.Object).SetUID) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setuid.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetUID.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setuid.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveSetuidUser(&(*Event)(ctx.Object).SetUID) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.destination.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveXAttrName(&(*Event)(ctx.Object).SetXAttr) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.destination.namespace": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveXAttrNamespace(&(*Event)(ctx.Object).SetXAttr) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).SetXAttr.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).SetXAttr.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).SetXAttr.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).SetXAttr.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).SetXAttr.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).SetXAttr.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).SetXAttr.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).SetXAttr.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "setxattr.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).SetXAttr.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "setxattr.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.PID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.ancestors.args": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgs(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "signal.target.ancestors.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsFlags(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsOptions(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.args_truncated": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgsTruncated(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgv(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "signal.target.ancestors.argv0": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessArgv0(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: 100 * eval.IteratorWeight, - }, nil - case "signal.target.ancestors.cap_effective": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.CapEffective) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.cap_permitted": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.CapPermitted) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.comm": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Comm - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.container.id": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.ContainerID - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.cookie": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Cookie) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.created_at": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int((*Event)(ctx.Object).ResolveProcessCreatedAt(&element.ProcessContext.Process)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.egid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.EGID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.egroup": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.EGroup - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvp(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvs(&element.ProcessContext.Process) - results = append(results, result...) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.envs_truncated": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&element.ProcessContext.Process) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.euid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.EUID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.euser": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.EUser - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.change_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.filesystem": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.in_upper_layer": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, false) - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.inode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.mode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.modification_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.mount_id": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.name": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.name.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.path": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.path.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.rights": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.FileEvent.FileFields)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.file.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.IsNotKworker() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.fsgid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.FSGID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.fsgroup": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.FSGroup - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.fsuid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.FSUID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.fsuser": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.FSUser - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.Group - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.change_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.filesystem": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.gid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.group": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.in_upper_layer": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, false) - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.inode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.mode": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.modification_time": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.mount_id": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.name": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.name.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.path": - return &eval.StringArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.path.length": - return &eval.IntArrayEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.rights": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, 0) - value = iterator.Next() - continue - } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.interpreter.file.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - if !element.ProcessContext.Process.HasInterpreter() { - results = append(results, "") - value = iterator.Next() - continue - } - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.is_kworker": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.PIDContext.IsKworker - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.is_thread": - return &eval.BoolArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []bool { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]bool)(ptr); result != nil { - return *result - } - } - var results []bool - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.IsThread - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.pid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PIDContext.Pid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.ppid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PPid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.tid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.PIDContext.Tid) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.tty_name": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.TTYName - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.uid": - return &eval.IntArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []int { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]int)(ptr); result != nil { - return *result - } - } - var results []int - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.Credentials.UID) - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.ancestors.user": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]string)(ptr); result != nil { - return *result - } - } - var results []string - iterator := &model.ProcessAncestorsIterator{} - value := iterator.Front(ctx) - for value != nil { - element := (*model.ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Credentials.User - results = append(results, result) - value = iterator.Next() - } - ctx.Cache[field] = unsafe.Pointer(&results) - return results - }, Field: field, - Weight: eval.IteratorWeight, - }, nil - case "signal.target.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgs(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "signal.target.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsFlags(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgsOptions(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessArgsTruncated(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessArgv(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "signal.target.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveProcessArgv0(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "signal.target.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveProcessCreatedAt(&(*Event)(ctx.Object).Signal.Target.Process)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvp(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ResolveProcessEnvs(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&(*Event)(ctx.Object).Signal.Target.Process) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Signal.Target.Process.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Signal.Target.Process.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.args": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveProcessArgs((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "signal.target.parent.args_flags": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgsFlags((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.args_options": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgsOptions((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.args_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveProcessArgsTruncated((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.argv": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessArgv((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "signal.target.parent.argv0": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).ResolveProcessArgv0((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: 100 * eval.HandlerWeight, - }, nil - case "signal.target.parent.cap_effective": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.CapEffective) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.cap_permitted": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.CapPermitted) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.comm": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Comm - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.container.id": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.ContainerID - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.cookie": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Cookie) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.created_at": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).ResolveProcessCreatedAt((*Event)(ctx.Object).Signal.Target.Parent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.egid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.EGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.egroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.EGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.envp": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessEnvp((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.envs": - return &eval.StringArrayEvaluator{ - EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return []string{} - } - return (*Event)(ctx.Object).ResolveProcessEnvs((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.envs_truncated": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return false - } - return (*Event)(ctx.Object).ResolveProcessEnvsTruncated((*Event)(ctx.Object).Signal.Target.Parent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.euid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.EUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.euser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.EUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return false - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.fsgid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSGID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.fsgroup": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSGroup - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.fsuid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSUID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.fsuser": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSUser - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.Group - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return false - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return false - } - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.interpreter.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.interpreter.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { - return "" - } - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "signal.target.parent.is_kworker": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return false - } - return (*Event)(ctx.Object).Signal.Target.Parent.PIDContext.IsKworker - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.is_thread": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return false - } - return (*Event)(ctx.Object).Signal.Target.Parent.IsThread - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return 0 - } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.parent.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { - return "" - } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.pid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.PIDContext.Pid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.ppid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.PPid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.tid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.PIDContext.Tid) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.tty_name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.TTYName - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.target.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.User - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "signal.type": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Type) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Splice.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Splice.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Splice.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Splice.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Splice.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Splice.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Splice.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Splice.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Splice.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "splice.pipe_entry_flag": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.PipeEntryFlag) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.pipe_exit_flag": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.PipeExitFlag) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "splice.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Unlink.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Unlink.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Unlink.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Unlink.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Unlink.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Unlink.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Unlink.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Unlink.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Unlink.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "unlink.flags": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.Flags) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unlink.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unload_module.name": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).UnloadModule.Name - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "unload_module.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).UnloadModule.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.change_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.CTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.filesystem": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFilesystem(&(*Event)(ctx.Object).Utimes.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.gid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.GID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.group": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsGroup(&(*Event)(ctx.Object).Utimes.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.in_upper_layer": - return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&(*Event)(ctx.Object).Utimes.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.inode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.Inode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.mode": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.Mode) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.modification_time": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.MTime) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.mount_id": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.MountID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.name": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Utimes.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.name.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkBasename, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFileBasename(&(*Event)(ctx.Object).Utimes.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.path": - return &eval.StringEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Utimes.File) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.path.length": - return &eval.IntEvaluator{ - OpOverrides: model.ProcessSymlinkPathname, - EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ResolveFilePath(&(*Event)(ctx.Object).Utimes.File)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.rights": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ResolveRights(&(*Event)(ctx.Object).Utimes.File.FileFields)) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.file.uid": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.UID) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - case "utimes.file.user": - return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ResolveFileFieldsUser(&(*Event)(ctx.Object).Utimes.File.FileFields) - }, - Field: field, - Weight: eval.HandlerWeight, - }, nil - case "utimes.retval": - return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.SyscallEvent.Retval) - }, - Field: field, - Weight: eval.FunctionWeight, - }, nil - } - return nil, &eval.ErrFieldNotFound{Field: field} -} -func (e *Event) GetFields() []eval.Field { - return []eval.Field{ - "async", - "bind.addr.family", - "bind.addr.ip", - "bind.addr.port", - "bind.retval", - "bpf.cmd", - "bpf.map.name", - "bpf.map.type", - "bpf.prog.attach_type", - "bpf.prog.helpers", - "bpf.prog.name", - "bpf.prog.tag", - "bpf.prog.type", - "bpf.retval", - "capset.cap_effective", - "capset.cap_permitted", - "chmod.file.change_time", - "chmod.file.destination.mode", - "chmod.file.destination.rights", - "chmod.file.filesystem", - "chmod.file.gid", - "chmod.file.group", - "chmod.file.in_upper_layer", - "chmod.file.inode", - "chmod.file.mode", - "chmod.file.modification_time", - "chmod.file.mount_id", - "chmod.file.name", - "chmod.file.name.length", - "chmod.file.path", - "chmod.file.path.length", - "chmod.file.rights", - "chmod.file.uid", - "chmod.file.user", - "chmod.retval", - "chown.file.change_time", - "chown.file.destination.gid", - "chown.file.destination.group", - "chown.file.destination.uid", - "chown.file.destination.user", - "chown.file.filesystem", - "chown.file.gid", - "chown.file.group", - "chown.file.in_upper_layer", - "chown.file.inode", - "chown.file.mode", - "chown.file.modification_time", - "chown.file.mount_id", - "chown.file.name", - "chown.file.name.length", - "chown.file.path", - "chown.file.path.length", - "chown.file.rights", - "chown.file.uid", - "chown.file.user", - "chown.retval", - "container.id", - "container.tags", - "dns.id", - "dns.question.class", - "dns.question.count", - "dns.question.length", - "dns.question.name", - "dns.question.name.length", - "dns.question.type", - "exec.args", - "exec.args_flags", - "exec.args_options", - "exec.args_truncated", - "exec.argv", - "exec.argv0", - "exec.cap_effective", - "exec.cap_permitted", - "exec.comm", - "exec.container.id", - "exec.cookie", - "exec.created_at", - "exec.egid", - "exec.egroup", - "exec.envp", - "exec.envs", - "exec.envs_truncated", - "exec.euid", - "exec.euser", - "exec.file.change_time", - "exec.file.filesystem", - "exec.file.gid", - "exec.file.group", - "exec.file.in_upper_layer", - "exec.file.inode", - "exec.file.mode", - "exec.file.modification_time", - "exec.file.mount_id", - "exec.file.name", - "exec.file.name.length", - "exec.file.path", - "exec.file.path.length", - "exec.file.rights", - "exec.file.uid", - "exec.file.user", - "exec.fsgid", - "exec.fsgroup", - "exec.fsuid", - "exec.fsuser", - "exec.gid", - "exec.group", - "exec.interpreter.file.change_time", - "exec.interpreter.file.filesystem", - "exec.interpreter.file.gid", - "exec.interpreter.file.group", - "exec.interpreter.file.in_upper_layer", - "exec.interpreter.file.inode", - "exec.interpreter.file.mode", - "exec.interpreter.file.modification_time", - "exec.interpreter.file.mount_id", - "exec.interpreter.file.name", - "exec.interpreter.file.name.length", - "exec.interpreter.file.path", - "exec.interpreter.file.path.length", - "exec.interpreter.file.rights", - "exec.interpreter.file.uid", - "exec.interpreter.file.user", - "exec.is_kworker", - "exec.is_thread", - "exec.pid", - "exec.ppid", - "exec.tid", - "exec.tty_name", - "exec.uid", - "exec.user", - "exit.args", - "exit.args_flags", - "exit.args_options", - "exit.args_truncated", - "exit.argv", - "exit.argv0", - "exit.cap_effective", - "exit.cap_permitted", - "exit.cause", - "exit.code", - "exit.comm", - "exit.container.id", - "exit.cookie", - "exit.created_at", - "exit.egid", - "exit.egroup", - "exit.envp", - "exit.envs", - "exit.envs_truncated", - "exit.euid", - "exit.euser", - "exit.file.change_time", - "exit.file.filesystem", - "exit.file.gid", - "exit.file.group", - "exit.file.in_upper_layer", - "exit.file.inode", - "exit.file.mode", - "exit.file.modification_time", - "exit.file.mount_id", - "exit.file.name", - "exit.file.name.length", - "exit.file.path", - "exit.file.path.length", - "exit.file.rights", - "exit.file.uid", - "exit.file.user", - "exit.fsgid", - "exit.fsgroup", - "exit.fsuid", - "exit.fsuser", - "exit.gid", - "exit.group", - "exit.interpreter.file.change_time", - "exit.interpreter.file.filesystem", - "exit.interpreter.file.gid", - "exit.interpreter.file.group", - "exit.interpreter.file.in_upper_layer", - "exit.interpreter.file.inode", - "exit.interpreter.file.mode", - "exit.interpreter.file.modification_time", - "exit.interpreter.file.mount_id", - "exit.interpreter.file.name", - "exit.interpreter.file.name.length", - "exit.interpreter.file.path", - "exit.interpreter.file.path.length", - "exit.interpreter.file.rights", - "exit.interpreter.file.uid", - "exit.interpreter.file.user", - "exit.is_kworker", - "exit.is_thread", - "exit.pid", - "exit.ppid", - "exit.tid", - "exit.tty_name", - "exit.uid", - "exit.user", - "link.file.change_time", - "link.file.destination.change_time", - "link.file.destination.filesystem", - "link.file.destination.gid", - "link.file.destination.group", - "link.file.destination.in_upper_layer", - "link.file.destination.inode", - "link.file.destination.mode", - "link.file.destination.modification_time", - "link.file.destination.mount_id", - "link.file.destination.name", - "link.file.destination.name.length", - "link.file.destination.path", - "link.file.destination.path.length", - "link.file.destination.rights", - "link.file.destination.uid", - "link.file.destination.user", - "link.file.filesystem", - "link.file.gid", - "link.file.group", - "link.file.in_upper_layer", - "link.file.inode", - "link.file.mode", - "link.file.modification_time", - "link.file.mount_id", - "link.file.name", - "link.file.name.length", - "link.file.path", - "link.file.path.length", - "link.file.rights", - "link.file.uid", - "link.file.user", - "link.retval", - "load_module.file.change_time", - "load_module.file.filesystem", - "load_module.file.gid", - "load_module.file.group", - "load_module.file.in_upper_layer", - "load_module.file.inode", - "load_module.file.mode", - "load_module.file.modification_time", - "load_module.file.mount_id", - "load_module.file.name", - "load_module.file.name.length", - "load_module.file.path", - "load_module.file.path.length", - "load_module.file.rights", - "load_module.file.uid", - "load_module.file.user", - "load_module.loaded_from_memory", - "load_module.name", - "load_module.retval", - "mkdir.file.change_time", - "mkdir.file.destination.mode", - "mkdir.file.destination.rights", - "mkdir.file.filesystem", - "mkdir.file.gid", - "mkdir.file.group", - "mkdir.file.in_upper_layer", - "mkdir.file.inode", - "mkdir.file.mode", - "mkdir.file.modification_time", - "mkdir.file.mount_id", - "mkdir.file.name", - "mkdir.file.name.length", - "mkdir.file.path", - "mkdir.file.path.length", - "mkdir.file.rights", - "mkdir.file.uid", - "mkdir.file.user", - "mkdir.retval", - "mmap.file.change_time", - "mmap.file.filesystem", - "mmap.file.gid", - "mmap.file.group", - "mmap.file.in_upper_layer", - "mmap.file.inode", - "mmap.file.mode", - "mmap.file.modification_time", - "mmap.file.mount_id", - "mmap.file.name", - "mmap.file.name.length", - "mmap.file.path", - "mmap.file.path.length", - "mmap.file.rights", - "mmap.file.uid", - "mmap.file.user", - "mmap.flags", - "mmap.protection", - "mmap.retval", - "mount.fs_type", - "mount.mountpoint.path", - "mount.retval", - "mount.source.path", - "mprotect.req_protection", - "mprotect.retval", - "mprotect.vm_protection", - "network.destination.ip", - "network.destination.port", - "network.device.ifindex", - "network.device.ifname", - "network.l3_protocol", - "network.l4_protocol", - "network.size", - "network.source.ip", - "network.source.port", - "open.file.change_time", - "open.file.destination.mode", - "open.file.filesystem", - "open.file.gid", - "open.file.group", - "open.file.in_upper_layer", - "open.file.inode", - "open.file.mode", - "open.file.modification_time", - "open.file.mount_id", - "open.file.name", - "open.file.name.length", - "open.file.path", - "open.file.path.length", - "open.file.rights", - "open.file.uid", - "open.file.user", - "open.flags", - "open.retval", - "process.ancestors.args", - "process.ancestors.args_flags", - "process.ancestors.args_options", - "process.ancestors.args_truncated", - "process.ancestors.argv", - "process.ancestors.argv0", - "process.ancestors.cap_effective", - "process.ancestors.cap_permitted", - "process.ancestors.comm", - "process.ancestors.container.id", - "process.ancestors.cookie", - "process.ancestors.created_at", - "process.ancestors.egid", - "process.ancestors.egroup", - "process.ancestors.envp", - "process.ancestors.envs", - "process.ancestors.envs_truncated", - "process.ancestors.euid", - "process.ancestors.euser", - "process.ancestors.file.change_time", - "process.ancestors.file.filesystem", - "process.ancestors.file.gid", - "process.ancestors.file.group", - "process.ancestors.file.in_upper_layer", - "process.ancestors.file.inode", - "process.ancestors.file.mode", - "process.ancestors.file.modification_time", - "process.ancestors.file.mount_id", - "process.ancestors.file.name", - "process.ancestors.file.name.length", - "process.ancestors.file.path", - "process.ancestors.file.path.length", - "process.ancestors.file.rights", - "process.ancestors.file.uid", - "process.ancestors.file.user", - "process.ancestors.fsgid", - "process.ancestors.fsgroup", - "process.ancestors.fsuid", - "process.ancestors.fsuser", - "process.ancestors.gid", - "process.ancestors.group", - "process.ancestors.interpreter.file.change_time", - "process.ancestors.interpreter.file.filesystem", - "process.ancestors.interpreter.file.gid", - "process.ancestors.interpreter.file.group", - "process.ancestors.interpreter.file.in_upper_layer", - "process.ancestors.interpreter.file.inode", - "process.ancestors.interpreter.file.mode", - "process.ancestors.interpreter.file.modification_time", - "process.ancestors.interpreter.file.mount_id", - "process.ancestors.interpreter.file.name", - "process.ancestors.interpreter.file.name.length", - "process.ancestors.interpreter.file.path", - "process.ancestors.interpreter.file.path.length", - "process.ancestors.interpreter.file.rights", - "process.ancestors.interpreter.file.uid", - "process.ancestors.interpreter.file.user", - "process.ancestors.is_kworker", - "process.ancestors.is_thread", - "process.ancestors.pid", - "process.ancestors.ppid", - "process.ancestors.tid", - "process.ancestors.tty_name", - "process.ancestors.uid", - "process.ancestors.user", - "process.args", - "process.args_flags", - "process.args_options", - "process.args_truncated", - "process.argv", - "process.argv0", - "process.cap_effective", - "process.cap_permitted", - "process.comm", - "process.container.id", - "process.cookie", - "process.created_at", - "process.egid", - "process.egroup", - "process.envp", - "process.envs", - "process.envs_truncated", - "process.euid", - "process.euser", - "process.file.change_time", - "process.file.filesystem", - "process.file.gid", - "process.file.group", - "process.file.in_upper_layer", - "process.file.inode", - "process.file.mode", - "process.file.modification_time", - "process.file.mount_id", - "process.file.name", - "process.file.name.length", - "process.file.path", - "process.file.path.length", - "process.file.rights", - "process.file.uid", - "process.file.user", - "process.fsgid", - "process.fsgroup", - "process.fsuid", - "process.fsuser", - "process.gid", - "process.group", - "process.interpreter.file.change_time", - "process.interpreter.file.filesystem", - "process.interpreter.file.gid", - "process.interpreter.file.group", - "process.interpreter.file.in_upper_layer", - "process.interpreter.file.inode", - "process.interpreter.file.mode", - "process.interpreter.file.modification_time", - "process.interpreter.file.mount_id", - "process.interpreter.file.name", - "process.interpreter.file.name.length", - "process.interpreter.file.path", - "process.interpreter.file.path.length", - "process.interpreter.file.rights", - "process.interpreter.file.uid", - "process.interpreter.file.user", - "process.is_kworker", - "process.is_thread", - "process.parent.args", - "process.parent.args_flags", - "process.parent.args_options", - "process.parent.args_truncated", - "process.parent.argv", - "process.parent.argv0", - "process.parent.cap_effective", - "process.parent.cap_permitted", - "process.parent.comm", - "process.parent.container.id", - "process.parent.cookie", - "process.parent.created_at", - "process.parent.egid", - "process.parent.egroup", - "process.parent.envp", - "process.parent.envs", - "process.parent.envs_truncated", - "process.parent.euid", - "process.parent.euser", - "process.parent.file.change_time", - "process.parent.file.filesystem", - "process.parent.file.gid", - "process.parent.file.group", - "process.parent.file.in_upper_layer", - "process.parent.file.inode", - "process.parent.file.mode", - "process.parent.file.modification_time", - "process.parent.file.mount_id", - "process.parent.file.name", - "process.parent.file.name.length", - "process.parent.file.path", - "process.parent.file.path.length", - "process.parent.file.rights", - "process.parent.file.uid", - "process.parent.file.user", - "process.parent.fsgid", - "process.parent.fsgroup", - "process.parent.fsuid", - "process.parent.fsuser", - "process.parent.gid", - "process.parent.group", - "process.parent.interpreter.file.change_time", - "process.parent.interpreter.file.filesystem", - "process.parent.interpreter.file.gid", - "process.parent.interpreter.file.group", - "process.parent.interpreter.file.in_upper_layer", - "process.parent.interpreter.file.inode", - "process.parent.interpreter.file.mode", - "process.parent.interpreter.file.modification_time", - "process.parent.interpreter.file.mount_id", - "process.parent.interpreter.file.name", - "process.parent.interpreter.file.name.length", - "process.parent.interpreter.file.path", - "process.parent.interpreter.file.path.length", - "process.parent.interpreter.file.rights", - "process.parent.interpreter.file.uid", - "process.parent.interpreter.file.user", - "process.parent.is_kworker", - "process.parent.is_thread", - "process.parent.pid", - "process.parent.ppid", - "process.parent.tid", - "process.parent.tty_name", - "process.parent.uid", - "process.parent.user", - "process.pid", - "process.ppid", - "process.tid", - "process.tty_name", - "process.uid", - "process.user", - "ptrace.request", - "ptrace.retval", - "ptrace.tracee.ancestors.args", - "ptrace.tracee.ancestors.args_flags", - "ptrace.tracee.ancestors.args_options", - "ptrace.tracee.ancestors.args_truncated", - "ptrace.tracee.ancestors.argv", - "ptrace.tracee.ancestors.argv0", - "ptrace.tracee.ancestors.cap_effective", - "ptrace.tracee.ancestors.cap_permitted", - "ptrace.tracee.ancestors.comm", - "ptrace.tracee.ancestors.container.id", - "ptrace.tracee.ancestors.cookie", - "ptrace.tracee.ancestors.created_at", - "ptrace.tracee.ancestors.egid", - "ptrace.tracee.ancestors.egroup", - "ptrace.tracee.ancestors.envp", - "ptrace.tracee.ancestors.envs", - "ptrace.tracee.ancestors.envs_truncated", - "ptrace.tracee.ancestors.euid", - "ptrace.tracee.ancestors.euser", - "ptrace.tracee.ancestors.file.change_time", - "ptrace.tracee.ancestors.file.filesystem", - "ptrace.tracee.ancestors.file.gid", - "ptrace.tracee.ancestors.file.group", - "ptrace.tracee.ancestors.file.in_upper_layer", - "ptrace.tracee.ancestors.file.inode", - "ptrace.tracee.ancestors.file.mode", - "ptrace.tracee.ancestors.file.modification_time", - "ptrace.tracee.ancestors.file.mount_id", - "ptrace.tracee.ancestors.file.name", - "ptrace.tracee.ancestors.file.name.length", - "ptrace.tracee.ancestors.file.path", - "ptrace.tracee.ancestors.file.path.length", - "ptrace.tracee.ancestors.file.rights", - "ptrace.tracee.ancestors.file.uid", - "ptrace.tracee.ancestors.file.user", - "ptrace.tracee.ancestors.fsgid", - "ptrace.tracee.ancestors.fsgroup", - "ptrace.tracee.ancestors.fsuid", - "ptrace.tracee.ancestors.fsuser", - "ptrace.tracee.ancestors.gid", - "ptrace.tracee.ancestors.group", - "ptrace.tracee.ancestors.interpreter.file.change_time", - "ptrace.tracee.ancestors.interpreter.file.filesystem", - "ptrace.tracee.ancestors.interpreter.file.gid", - "ptrace.tracee.ancestors.interpreter.file.group", - "ptrace.tracee.ancestors.interpreter.file.in_upper_layer", - "ptrace.tracee.ancestors.interpreter.file.inode", - "ptrace.tracee.ancestors.interpreter.file.mode", - "ptrace.tracee.ancestors.interpreter.file.modification_time", - "ptrace.tracee.ancestors.interpreter.file.mount_id", - "ptrace.tracee.ancestors.interpreter.file.name", - "ptrace.tracee.ancestors.interpreter.file.name.length", - "ptrace.tracee.ancestors.interpreter.file.path", - "ptrace.tracee.ancestors.interpreter.file.path.length", - "ptrace.tracee.ancestors.interpreter.file.rights", - "ptrace.tracee.ancestors.interpreter.file.uid", - "ptrace.tracee.ancestors.interpreter.file.user", - "ptrace.tracee.ancestors.is_kworker", - "ptrace.tracee.ancestors.is_thread", - "ptrace.tracee.ancestors.pid", - "ptrace.tracee.ancestors.ppid", - "ptrace.tracee.ancestors.tid", - "ptrace.tracee.ancestors.tty_name", - "ptrace.tracee.ancestors.uid", - "ptrace.tracee.ancestors.user", - "ptrace.tracee.args", - "ptrace.tracee.args_flags", - "ptrace.tracee.args_options", - "ptrace.tracee.args_truncated", - "ptrace.tracee.argv", - "ptrace.tracee.argv0", - "ptrace.tracee.cap_effective", - "ptrace.tracee.cap_permitted", - "ptrace.tracee.comm", - "ptrace.tracee.container.id", - "ptrace.tracee.cookie", - "ptrace.tracee.created_at", - "ptrace.tracee.egid", - "ptrace.tracee.egroup", - "ptrace.tracee.envp", - "ptrace.tracee.envs", - "ptrace.tracee.envs_truncated", - "ptrace.tracee.euid", - "ptrace.tracee.euser", - "ptrace.tracee.file.change_time", - "ptrace.tracee.file.filesystem", - "ptrace.tracee.file.gid", - "ptrace.tracee.file.group", - "ptrace.tracee.file.in_upper_layer", - "ptrace.tracee.file.inode", - "ptrace.tracee.file.mode", - "ptrace.tracee.file.modification_time", - "ptrace.tracee.file.mount_id", - "ptrace.tracee.file.name", - "ptrace.tracee.file.name.length", - "ptrace.tracee.file.path", - "ptrace.tracee.file.path.length", - "ptrace.tracee.file.rights", - "ptrace.tracee.file.uid", - "ptrace.tracee.file.user", - "ptrace.tracee.fsgid", - "ptrace.tracee.fsgroup", - "ptrace.tracee.fsuid", - "ptrace.tracee.fsuser", - "ptrace.tracee.gid", - "ptrace.tracee.group", - "ptrace.tracee.interpreter.file.change_time", - "ptrace.tracee.interpreter.file.filesystem", - "ptrace.tracee.interpreter.file.gid", - "ptrace.tracee.interpreter.file.group", - "ptrace.tracee.interpreter.file.in_upper_layer", - "ptrace.tracee.interpreter.file.inode", - "ptrace.tracee.interpreter.file.mode", - "ptrace.tracee.interpreter.file.modification_time", - "ptrace.tracee.interpreter.file.mount_id", - "ptrace.tracee.interpreter.file.name", - "ptrace.tracee.interpreter.file.name.length", - "ptrace.tracee.interpreter.file.path", - "ptrace.tracee.interpreter.file.path.length", - "ptrace.tracee.interpreter.file.rights", - "ptrace.tracee.interpreter.file.uid", - "ptrace.tracee.interpreter.file.user", - "ptrace.tracee.is_kworker", - "ptrace.tracee.is_thread", - "ptrace.tracee.parent.args", - "ptrace.tracee.parent.args_flags", - "ptrace.tracee.parent.args_options", - "ptrace.tracee.parent.args_truncated", - "ptrace.tracee.parent.argv", - "ptrace.tracee.parent.argv0", - "ptrace.tracee.parent.cap_effective", - "ptrace.tracee.parent.cap_permitted", - "ptrace.tracee.parent.comm", - "ptrace.tracee.parent.container.id", - "ptrace.tracee.parent.cookie", - "ptrace.tracee.parent.created_at", - "ptrace.tracee.parent.egid", - "ptrace.tracee.parent.egroup", - "ptrace.tracee.parent.envp", - "ptrace.tracee.parent.envs", - "ptrace.tracee.parent.envs_truncated", - "ptrace.tracee.parent.euid", - "ptrace.tracee.parent.euser", - "ptrace.tracee.parent.file.change_time", - "ptrace.tracee.parent.file.filesystem", - "ptrace.tracee.parent.file.gid", - "ptrace.tracee.parent.file.group", - "ptrace.tracee.parent.file.in_upper_layer", - "ptrace.tracee.parent.file.inode", - "ptrace.tracee.parent.file.mode", - "ptrace.tracee.parent.file.modification_time", - "ptrace.tracee.parent.file.mount_id", - "ptrace.tracee.parent.file.name", - "ptrace.tracee.parent.file.name.length", - "ptrace.tracee.parent.file.path", - "ptrace.tracee.parent.file.path.length", - "ptrace.tracee.parent.file.rights", - "ptrace.tracee.parent.file.uid", - "ptrace.tracee.parent.file.user", - "ptrace.tracee.parent.fsgid", - "ptrace.tracee.parent.fsgroup", - "ptrace.tracee.parent.fsuid", - "ptrace.tracee.parent.fsuser", - "ptrace.tracee.parent.gid", - "ptrace.tracee.parent.group", - "ptrace.tracee.parent.interpreter.file.change_time", - "ptrace.tracee.parent.interpreter.file.filesystem", - "ptrace.tracee.parent.interpreter.file.gid", - "ptrace.tracee.parent.interpreter.file.group", - "ptrace.tracee.parent.interpreter.file.in_upper_layer", - "ptrace.tracee.parent.interpreter.file.inode", - "ptrace.tracee.parent.interpreter.file.mode", - "ptrace.tracee.parent.interpreter.file.modification_time", - "ptrace.tracee.parent.interpreter.file.mount_id", - "ptrace.tracee.parent.interpreter.file.name", - "ptrace.tracee.parent.interpreter.file.name.length", - "ptrace.tracee.parent.interpreter.file.path", - "ptrace.tracee.parent.interpreter.file.path.length", - "ptrace.tracee.parent.interpreter.file.rights", - "ptrace.tracee.parent.interpreter.file.uid", - "ptrace.tracee.parent.interpreter.file.user", - "ptrace.tracee.parent.is_kworker", - "ptrace.tracee.parent.is_thread", - "ptrace.tracee.parent.pid", - "ptrace.tracee.parent.ppid", - "ptrace.tracee.parent.tid", - "ptrace.tracee.parent.tty_name", - "ptrace.tracee.parent.uid", - "ptrace.tracee.parent.user", - "ptrace.tracee.pid", - "ptrace.tracee.ppid", - "ptrace.tracee.tid", - "ptrace.tracee.tty_name", - "ptrace.tracee.uid", - "ptrace.tracee.user", - "removexattr.file.change_time", - "removexattr.file.destination.name", - "removexattr.file.destination.namespace", - "removexattr.file.filesystem", - "removexattr.file.gid", - "removexattr.file.group", - "removexattr.file.in_upper_layer", - "removexattr.file.inode", - "removexattr.file.mode", - "removexattr.file.modification_time", - "removexattr.file.mount_id", - "removexattr.file.name", - "removexattr.file.name.length", - "removexattr.file.path", - "removexattr.file.path.length", - "removexattr.file.rights", - "removexattr.file.uid", - "removexattr.file.user", - "removexattr.retval", - "rename.file.change_time", - "rename.file.destination.change_time", - "rename.file.destination.filesystem", - "rename.file.destination.gid", - "rename.file.destination.group", - "rename.file.destination.in_upper_layer", - "rename.file.destination.inode", - "rename.file.destination.mode", - "rename.file.destination.modification_time", - "rename.file.destination.mount_id", - "rename.file.destination.name", - "rename.file.destination.name.length", - "rename.file.destination.path", - "rename.file.destination.path.length", - "rename.file.destination.rights", - "rename.file.destination.uid", - "rename.file.destination.user", - "rename.file.filesystem", - "rename.file.gid", - "rename.file.group", - "rename.file.in_upper_layer", - "rename.file.inode", - "rename.file.mode", - "rename.file.modification_time", - "rename.file.mount_id", - "rename.file.name", - "rename.file.name.length", - "rename.file.path", - "rename.file.path.length", - "rename.file.rights", - "rename.file.uid", - "rename.file.user", - "rename.retval", - "rmdir.file.change_time", - "rmdir.file.filesystem", - "rmdir.file.gid", - "rmdir.file.group", - "rmdir.file.in_upper_layer", - "rmdir.file.inode", - "rmdir.file.mode", - "rmdir.file.modification_time", - "rmdir.file.mount_id", - "rmdir.file.name", - "rmdir.file.name.length", - "rmdir.file.path", - "rmdir.file.path.length", - "rmdir.file.rights", - "rmdir.file.uid", - "rmdir.file.user", - "rmdir.retval", - "selinux.bool.name", - "selinux.bool.state", - "selinux.bool_commit.state", - "selinux.enforce.status", - "setgid.egid", - "setgid.egroup", - "setgid.fsgid", - "setgid.fsgroup", - "setgid.gid", - "setgid.group", - "setuid.euid", - "setuid.euser", - "setuid.fsuid", - "setuid.fsuser", - "setuid.uid", - "setuid.user", - "setxattr.file.change_time", - "setxattr.file.destination.name", - "setxattr.file.destination.namespace", - "setxattr.file.filesystem", - "setxattr.file.gid", - "setxattr.file.group", - "setxattr.file.in_upper_layer", - "setxattr.file.inode", - "setxattr.file.mode", - "setxattr.file.modification_time", - "setxattr.file.mount_id", - "setxattr.file.name", - "setxattr.file.name.length", - "setxattr.file.path", - "setxattr.file.path.length", - "setxattr.file.rights", - "setxattr.file.uid", - "setxattr.file.user", - "setxattr.retval", - "signal.pid", - "signal.retval", - "signal.target.ancestors.args", - "signal.target.ancestors.args_flags", - "signal.target.ancestors.args_options", - "signal.target.ancestors.args_truncated", - "signal.target.ancestors.argv", - "signal.target.ancestors.argv0", - "signal.target.ancestors.cap_effective", - "signal.target.ancestors.cap_permitted", - "signal.target.ancestors.comm", - "signal.target.ancestors.container.id", - "signal.target.ancestors.cookie", - "signal.target.ancestors.created_at", - "signal.target.ancestors.egid", - "signal.target.ancestors.egroup", - "signal.target.ancestors.envp", - "signal.target.ancestors.envs", - "signal.target.ancestors.envs_truncated", - "signal.target.ancestors.euid", - "signal.target.ancestors.euser", - "signal.target.ancestors.file.change_time", - "signal.target.ancestors.file.filesystem", - "signal.target.ancestors.file.gid", - "signal.target.ancestors.file.group", - "signal.target.ancestors.file.in_upper_layer", - "signal.target.ancestors.file.inode", - "signal.target.ancestors.file.mode", - "signal.target.ancestors.file.modification_time", - "signal.target.ancestors.file.mount_id", - "signal.target.ancestors.file.name", - "signal.target.ancestors.file.name.length", - "signal.target.ancestors.file.path", - "signal.target.ancestors.file.path.length", - "signal.target.ancestors.file.rights", - "signal.target.ancestors.file.uid", - "signal.target.ancestors.file.user", - "signal.target.ancestors.fsgid", - "signal.target.ancestors.fsgroup", - "signal.target.ancestors.fsuid", - "signal.target.ancestors.fsuser", - "signal.target.ancestors.gid", - "signal.target.ancestors.group", - "signal.target.ancestors.interpreter.file.change_time", - "signal.target.ancestors.interpreter.file.filesystem", - "signal.target.ancestors.interpreter.file.gid", - "signal.target.ancestors.interpreter.file.group", - "signal.target.ancestors.interpreter.file.in_upper_layer", - "signal.target.ancestors.interpreter.file.inode", - "signal.target.ancestors.interpreter.file.mode", - "signal.target.ancestors.interpreter.file.modification_time", - "signal.target.ancestors.interpreter.file.mount_id", - "signal.target.ancestors.interpreter.file.name", - "signal.target.ancestors.interpreter.file.name.length", - "signal.target.ancestors.interpreter.file.path", - "signal.target.ancestors.interpreter.file.path.length", - "signal.target.ancestors.interpreter.file.rights", - "signal.target.ancestors.interpreter.file.uid", - "signal.target.ancestors.interpreter.file.user", - "signal.target.ancestors.is_kworker", - "signal.target.ancestors.is_thread", - "signal.target.ancestors.pid", - "signal.target.ancestors.ppid", - "signal.target.ancestors.tid", - "signal.target.ancestors.tty_name", - "signal.target.ancestors.uid", - "signal.target.ancestors.user", - "signal.target.args", - "signal.target.args_flags", - "signal.target.args_options", - "signal.target.args_truncated", - "signal.target.argv", - "signal.target.argv0", - "signal.target.cap_effective", - "signal.target.cap_permitted", - "signal.target.comm", - "signal.target.container.id", - "signal.target.cookie", - "signal.target.created_at", - "signal.target.egid", - "signal.target.egroup", - "signal.target.envp", - "signal.target.envs", - "signal.target.envs_truncated", - "signal.target.euid", - "signal.target.euser", - "signal.target.file.change_time", - "signal.target.file.filesystem", - "signal.target.file.gid", - "signal.target.file.group", - "signal.target.file.in_upper_layer", - "signal.target.file.inode", - "signal.target.file.mode", - "signal.target.file.modification_time", - "signal.target.file.mount_id", - "signal.target.file.name", - "signal.target.file.name.length", - "signal.target.file.path", - "signal.target.file.path.length", - "signal.target.file.rights", - "signal.target.file.uid", - "signal.target.file.user", - "signal.target.fsgid", - "signal.target.fsgroup", - "signal.target.fsuid", - "signal.target.fsuser", - "signal.target.gid", - "signal.target.group", - "signal.target.interpreter.file.change_time", - "signal.target.interpreter.file.filesystem", - "signal.target.interpreter.file.gid", - "signal.target.interpreter.file.group", - "signal.target.interpreter.file.in_upper_layer", - "signal.target.interpreter.file.inode", - "signal.target.interpreter.file.mode", - "signal.target.interpreter.file.modification_time", - "signal.target.interpreter.file.mount_id", - "signal.target.interpreter.file.name", - "signal.target.interpreter.file.name.length", - "signal.target.interpreter.file.path", - "signal.target.interpreter.file.path.length", - "signal.target.interpreter.file.rights", - "signal.target.interpreter.file.uid", - "signal.target.interpreter.file.user", - "signal.target.is_kworker", - "signal.target.is_thread", - "signal.target.parent.args", - "signal.target.parent.args_flags", - "signal.target.parent.args_options", - "signal.target.parent.args_truncated", - "signal.target.parent.argv", - "signal.target.parent.argv0", - "signal.target.parent.cap_effective", - "signal.target.parent.cap_permitted", - "signal.target.parent.comm", - "signal.target.parent.container.id", - "signal.target.parent.cookie", - "signal.target.parent.created_at", - "signal.target.parent.egid", - "signal.target.parent.egroup", - "signal.target.parent.envp", - "signal.target.parent.envs", - "signal.target.parent.envs_truncated", - "signal.target.parent.euid", - "signal.target.parent.euser", - "signal.target.parent.file.change_time", - "signal.target.parent.file.filesystem", - "signal.target.parent.file.gid", - "signal.target.parent.file.group", - "signal.target.parent.file.in_upper_layer", - "signal.target.parent.file.inode", - "signal.target.parent.file.mode", - "signal.target.parent.file.modification_time", - "signal.target.parent.file.mount_id", - "signal.target.parent.file.name", - "signal.target.parent.file.name.length", - "signal.target.parent.file.path", - "signal.target.parent.file.path.length", - "signal.target.parent.file.rights", - "signal.target.parent.file.uid", - "signal.target.parent.file.user", - "signal.target.parent.fsgid", - "signal.target.parent.fsgroup", - "signal.target.parent.fsuid", - "signal.target.parent.fsuser", - "signal.target.parent.gid", - "signal.target.parent.group", - "signal.target.parent.interpreter.file.change_time", - "signal.target.parent.interpreter.file.filesystem", - "signal.target.parent.interpreter.file.gid", - "signal.target.parent.interpreter.file.group", - "signal.target.parent.interpreter.file.in_upper_layer", - "signal.target.parent.interpreter.file.inode", - "signal.target.parent.interpreter.file.mode", - "signal.target.parent.interpreter.file.modification_time", - "signal.target.parent.interpreter.file.mount_id", - "signal.target.parent.interpreter.file.name", - "signal.target.parent.interpreter.file.name.length", - "signal.target.parent.interpreter.file.path", - "signal.target.parent.interpreter.file.path.length", - "signal.target.parent.interpreter.file.rights", - "signal.target.parent.interpreter.file.uid", - "signal.target.parent.interpreter.file.user", - "signal.target.parent.is_kworker", - "signal.target.parent.is_thread", - "signal.target.parent.pid", - "signal.target.parent.ppid", - "signal.target.parent.tid", - "signal.target.parent.tty_name", - "signal.target.parent.uid", - "signal.target.parent.user", - "signal.target.pid", - "signal.target.ppid", - "signal.target.tid", - "signal.target.tty_name", - "signal.target.uid", - "signal.target.user", - "signal.type", - "splice.file.change_time", - "splice.file.filesystem", - "splice.file.gid", - "splice.file.group", - "splice.file.in_upper_layer", - "splice.file.inode", - "splice.file.mode", - "splice.file.modification_time", - "splice.file.mount_id", - "splice.file.name", - "splice.file.name.length", - "splice.file.path", - "splice.file.path.length", - "splice.file.rights", - "splice.file.uid", - "splice.file.user", - "splice.pipe_entry_flag", - "splice.pipe_exit_flag", - "splice.retval", - "unlink.file.change_time", - "unlink.file.filesystem", - "unlink.file.gid", - "unlink.file.group", - "unlink.file.in_upper_layer", - "unlink.file.inode", - "unlink.file.mode", - "unlink.file.modification_time", - "unlink.file.mount_id", - "unlink.file.name", - "unlink.file.name.length", - "unlink.file.path", - "unlink.file.path.length", - "unlink.file.rights", - "unlink.file.uid", - "unlink.file.user", - "unlink.flags", - "unlink.retval", - "unload_module.name", - "unload_module.retval", - "utimes.file.change_time", - "utimes.file.filesystem", - "utimes.file.gid", - "utimes.file.group", - "utimes.file.in_upper_layer", - "utimes.file.inode", - "utimes.file.mode", - "utimes.file.modification_time", - "utimes.file.mount_id", - "utimes.file.name", - "utimes.file.name.length", - "utimes.file.path", - "utimes.file.path.length", - "utimes.file.rights", - "utimes.file.uid", - "utimes.file.user", - "utimes.retval", - } -} -func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { - switch field { - case "async": - return e.Async, nil - case "bind.addr.family": - return int(e.Bind.AddrFamily), nil - case "bind.addr.ip": - return e.Bind.Addr.IPNet, nil - case "bind.addr.port": - return int(e.Bind.Addr.Port), nil - case "bind.retval": - return int(e.Bind.SyscallEvent.Retval), nil - case "bpf.cmd": - return int(e.BPF.Cmd), nil - case "bpf.map.name": - return e.BPF.Map.Name, nil - case "bpf.map.type": - return int(e.BPF.Map.Type), nil - case "bpf.prog.attach_type": - return int(e.BPF.Program.AttachType), nil - case "bpf.prog.helpers": - result := make([]int, len(e.ResolveHelpers(&e.BPF.Program))) - for i, v := range e.ResolveHelpers(&e.BPF.Program) { - result[i] = int(v) - } - return result, nil - case "bpf.prog.name": - return e.BPF.Program.Name, nil - case "bpf.prog.tag": - return e.BPF.Program.Tag, nil - case "bpf.prog.type": - return int(e.BPF.Program.Type), nil - case "bpf.retval": - return int(e.BPF.SyscallEvent.Retval), nil - case "capset.cap_effective": - return int(e.Capset.CapEffective), nil - case "capset.cap_permitted": - return int(e.Capset.CapPermitted), nil - case "chmod.file.change_time": - return int(e.Chmod.File.FileFields.CTime), nil - case "chmod.file.destination.mode": - return int(e.Chmod.Mode), nil - case "chmod.file.destination.rights": - return int(e.Chmod.Mode), nil - case "chmod.file.filesystem": - return e.ResolveFileFilesystem(&e.Chmod.File), nil - case "chmod.file.gid": - return int(e.Chmod.File.FileFields.GID), nil - case "chmod.file.group": - return e.ResolveFileFieldsGroup(&e.Chmod.File.FileFields), nil - case "chmod.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Chmod.File.FileFields), nil - case "chmod.file.inode": - return int(e.Chmod.File.FileFields.Inode), nil - case "chmod.file.mode": - return int(e.Chmod.File.FileFields.Mode), nil - case "chmod.file.modification_time": - return int(e.Chmod.File.FileFields.MTime), nil - case "chmod.file.mount_id": - return int(e.Chmod.File.FileFields.MountID), nil - case "chmod.file.name": - return e.ResolveFileBasename(&e.Chmod.File), nil - case "chmod.file.name.length": - return e.ResolveFileBasename(&e.Chmod.File), nil - case "chmod.file.path": - return e.ResolveFilePath(&e.Chmod.File), nil - case "chmod.file.path.length": - return e.ResolveFilePath(&e.Chmod.File), nil - case "chmod.file.rights": - return int(e.ResolveRights(&e.Chmod.File.FileFields)), nil - case "chmod.file.uid": - return int(e.Chmod.File.FileFields.UID), nil - case "chmod.file.user": - return e.ResolveFileFieldsUser(&e.Chmod.File.FileFields), nil - case "chmod.retval": - return int(e.Chmod.SyscallEvent.Retval), nil - case "chown.file.change_time": - return int(e.Chown.File.FileFields.CTime), nil - case "chown.file.destination.gid": - return int(e.Chown.GID), nil - case "chown.file.destination.group": - return e.ResolveChownGID(&e.Chown), nil - case "chown.file.destination.uid": - return int(e.Chown.UID), nil - case "chown.file.destination.user": - return e.ResolveChownUID(&e.Chown), nil - case "chown.file.filesystem": - return e.ResolveFileFilesystem(&e.Chown.File), nil - case "chown.file.gid": - return int(e.Chown.File.FileFields.GID), nil - case "chown.file.group": - return e.ResolveFileFieldsGroup(&e.Chown.File.FileFields), nil - case "chown.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Chown.File.FileFields), nil - case "chown.file.inode": - return int(e.Chown.File.FileFields.Inode), nil - case "chown.file.mode": - return int(e.Chown.File.FileFields.Mode), nil - case "chown.file.modification_time": - return int(e.Chown.File.FileFields.MTime), nil - case "chown.file.mount_id": - return int(e.Chown.File.FileFields.MountID), nil - case "chown.file.name": - return e.ResolveFileBasename(&e.Chown.File), nil - case "chown.file.name.length": - return e.ResolveFileBasename(&e.Chown.File), nil - case "chown.file.path": - return e.ResolveFilePath(&e.Chown.File), nil - case "chown.file.path.length": - return e.ResolveFilePath(&e.Chown.File), nil - case "chown.file.rights": - return int(e.ResolveRights(&e.Chown.File.FileFields)), nil - case "chown.file.uid": - return int(e.Chown.File.FileFields.UID), nil - case "chown.file.user": - return e.ResolveFileFieldsUser(&e.Chown.File.FileFields), nil - case "chown.retval": - return int(e.Chown.SyscallEvent.Retval), nil - case "container.id": - return e.ResolveContainerID(&e.ContainerContext), nil - case "container.tags": - return e.ResolveContainerTags(&e.ContainerContext), nil - case "dns.id": - return int(e.DNS.ID), nil - case "dns.question.class": - return int(e.DNS.Class), nil - case "dns.question.count": - return int(e.DNS.Count), nil - case "dns.question.length": - return int(e.DNS.Size), nil - case "dns.question.name": - return e.DNS.Name, nil - case "dns.question.name.length": - return len(e.DNS.Name), nil - case "dns.question.type": - return int(e.DNS.Type), nil - case "exec.args": - return e.ResolveProcessArgs(e.Exec.Process), nil - case "exec.args_flags": - return e.ResolveProcessArgsFlags(e.Exec.Process), nil - case "exec.args_options": - return e.ResolveProcessArgsOptions(e.Exec.Process), nil - case "exec.args_truncated": - return e.ResolveProcessArgsTruncated(e.Exec.Process), nil - case "exec.argv": - return e.ResolveProcessArgv(e.Exec.Process), nil - case "exec.argv0": - return e.ResolveProcessArgv0(e.Exec.Process), nil - case "exec.cap_effective": - return int(e.Exec.Process.Credentials.CapEffective), nil - case "exec.cap_permitted": - return int(e.Exec.Process.Credentials.CapPermitted), nil - case "exec.comm": - return e.Exec.Process.Comm, nil - case "exec.container.id": - return e.Exec.Process.ContainerID, nil - case "exec.cookie": - return int(e.Exec.Process.Cookie), nil - case "exec.created_at": - return int(e.ResolveProcessCreatedAt(e.Exec.Process)), nil - case "exec.egid": - return int(e.Exec.Process.Credentials.EGID), nil - case "exec.egroup": - return e.Exec.Process.Credentials.EGroup, nil - case "exec.envp": - return e.ResolveProcessEnvp(e.Exec.Process), nil - case "exec.envs": - return e.ResolveProcessEnvs(e.Exec.Process), nil - case "exec.envs_truncated": - return e.ResolveProcessEnvsTruncated(e.Exec.Process), nil - case "exec.euid": - return int(e.Exec.Process.Credentials.EUID), nil - case "exec.euser": - return e.Exec.Process.Credentials.EUser, nil - case "exec.file.change_time": - return int(e.Exec.Process.FileEvent.FileFields.CTime), nil - case "exec.file.filesystem": - return e.ResolveFileFilesystem(&e.Exec.Process.FileEvent), nil - case "exec.file.gid": - return int(e.Exec.Process.FileEvent.FileFields.GID), nil - case "exec.file.group": - return e.ResolveFileFieldsGroup(&e.Exec.Process.FileEvent.FileFields), nil - case "exec.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Exec.Process.FileEvent.FileFields), nil - case "exec.file.inode": - return int(e.Exec.Process.FileEvent.FileFields.Inode), nil - case "exec.file.mode": - return int(e.Exec.Process.FileEvent.FileFields.Mode), nil - case "exec.file.modification_time": - return int(e.Exec.Process.FileEvent.FileFields.MTime), nil - case "exec.file.mount_id": - return int(e.Exec.Process.FileEvent.FileFields.MountID), nil - case "exec.file.name": - return e.ResolveFileBasename(&e.Exec.Process.FileEvent), nil - case "exec.file.name.length": - return e.ResolveFileBasename(&e.Exec.Process.FileEvent), nil - case "exec.file.path": - return e.ResolveFilePath(&e.Exec.Process.FileEvent), nil - case "exec.file.path.length": - return e.ResolveFilePath(&e.Exec.Process.FileEvent), nil - case "exec.file.rights": - return int(e.ResolveRights(&e.Exec.Process.FileEvent.FileFields)), nil - case "exec.file.uid": - return int(e.Exec.Process.FileEvent.FileFields.UID), nil - case "exec.file.user": - return e.ResolveFileFieldsUser(&e.Exec.Process.FileEvent.FileFields), nil - case "exec.fsgid": - return int(e.Exec.Process.Credentials.FSGID), nil - case "exec.fsgroup": - return e.Exec.Process.Credentials.FSGroup, nil - case "exec.fsuid": - return int(e.Exec.Process.Credentials.FSUID), nil - case "exec.fsuser": - return e.Exec.Process.Credentials.FSUser, nil - case "exec.gid": - return int(e.Exec.Process.Credentials.GID), nil - case "exec.group": - return e.Exec.Process.Credentials.Group, nil - case "exec.interpreter.file.change_time": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "exec.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.Exec.Process.LinuxBinprm.FileEvent), nil - case "exec.interpreter.file.gid": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID), nil - case "exec.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.Exec.Process.LinuxBinprm.FileEvent.FileFields), nil - case "exec.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Exec.Process.LinuxBinprm.FileEvent.FileFields), nil - case "exec.interpreter.file.inode": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "exec.interpreter.file.mode": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "exec.interpreter.file.modification_time": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "exec.interpreter.file.mount_id": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "exec.interpreter.file.name": - return e.ResolveFileBasename(&e.Exec.Process.LinuxBinprm.FileEvent), nil - case "exec.interpreter.file.name.length": - return e.ResolveFileBasename(&e.Exec.Process.LinuxBinprm.FileEvent), nil - case "exec.interpreter.file.path": - return e.ResolveFilePath(&e.Exec.Process.LinuxBinprm.FileEvent), nil - case "exec.interpreter.file.path.length": - return e.ResolveFilePath(&e.Exec.Process.LinuxBinprm.FileEvent), nil - case "exec.interpreter.file.rights": - return int(e.ResolveRights(&e.Exec.Process.LinuxBinprm.FileEvent.FileFields)), nil - case "exec.interpreter.file.uid": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID), nil - case "exec.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.Exec.Process.LinuxBinprm.FileEvent.FileFields), nil - case "exec.is_kworker": - return e.Exec.Process.PIDContext.IsKworker, nil - case "exec.is_thread": - return e.Exec.Process.IsThread, nil - case "exec.pid": - return int(e.Exec.Process.PIDContext.Pid), nil - case "exec.ppid": - return int(e.Exec.Process.PPid), nil - case "exec.tid": - return int(e.Exec.Process.PIDContext.Tid), nil - case "exec.tty_name": - return e.Exec.Process.TTYName, nil - case "exec.uid": - return int(e.Exec.Process.Credentials.UID), nil - case "exec.user": - return e.Exec.Process.Credentials.User, nil - case "exit.args": - return e.ResolveProcessArgs(e.Exit.Process), nil - case "exit.args_flags": - return e.ResolveProcessArgsFlags(e.Exit.Process), nil - case "exit.args_options": - return e.ResolveProcessArgsOptions(e.Exit.Process), nil - case "exit.args_truncated": - return e.ResolveProcessArgsTruncated(e.Exit.Process), nil - case "exit.argv": - return e.ResolveProcessArgv(e.Exit.Process), nil - case "exit.argv0": - return e.ResolveProcessArgv0(e.Exit.Process), nil - case "exit.cap_effective": - return int(e.Exit.Process.Credentials.CapEffective), nil - case "exit.cap_permitted": - return int(e.Exit.Process.Credentials.CapPermitted), nil - case "exit.cause": - return int(e.Exit.Cause), nil - case "exit.code": - return int(e.Exit.Code), nil - case "exit.comm": - return e.Exit.Process.Comm, nil - case "exit.container.id": - return e.Exit.Process.ContainerID, nil - case "exit.cookie": - return int(e.Exit.Process.Cookie), nil - case "exit.created_at": - return int(e.ResolveProcessCreatedAt(e.Exit.Process)), nil - case "exit.egid": - return int(e.Exit.Process.Credentials.EGID), nil - case "exit.egroup": - return e.Exit.Process.Credentials.EGroup, nil - case "exit.envp": - return e.ResolveProcessEnvp(e.Exit.Process), nil - case "exit.envs": - return e.ResolveProcessEnvs(e.Exit.Process), nil - case "exit.envs_truncated": - return e.ResolveProcessEnvsTruncated(e.Exit.Process), nil - case "exit.euid": - return int(e.Exit.Process.Credentials.EUID), nil - case "exit.euser": - return e.Exit.Process.Credentials.EUser, nil - case "exit.file.change_time": - return int(e.Exit.Process.FileEvent.FileFields.CTime), nil - case "exit.file.filesystem": - return e.ResolveFileFilesystem(&e.Exit.Process.FileEvent), nil - case "exit.file.gid": - return int(e.Exit.Process.FileEvent.FileFields.GID), nil - case "exit.file.group": - return e.ResolveFileFieldsGroup(&e.Exit.Process.FileEvent.FileFields), nil - case "exit.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Exit.Process.FileEvent.FileFields), nil - case "exit.file.inode": - return int(e.Exit.Process.FileEvent.FileFields.Inode), nil - case "exit.file.mode": - return int(e.Exit.Process.FileEvent.FileFields.Mode), nil - case "exit.file.modification_time": - return int(e.Exit.Process.FileEvent.FileFields.MTime), nil - case "exit.file.mount_id": - return int(e.Exit.Process.FileEvent.FileFields.MountID), nil - case "exit.file.name": - return e.ResolveFileBasename(&e.Exit.Process.FileEvent), nil - case "exit.file.name.length": - return e.ResolveFileBasename(&e.Exit.Process.FileEvent), nil - case "exit.file.path": - return e.ResolveFilePath(&e.Exit.Process.FileEvent), nil - case "exit.file.path.length": - return e.ResolveFilePath(&e.Exit.Process.FileEvent), nil - case "exit.file.rights": - return int(e.ResolveRights(&e.Exit.Process.FileEvent.FileFields)), nil - case "exit.file.uid": - return int(e.Exit.Process.FileEvent.FileFields.UID), nil - case "exit.file.user": - return e.ResolveFileFieldsUser(&e.Exit.Process.FileEvent.FileFields), nil - case "exit.fsgid": - return int(e.Exit.Process.Credentials.FSGID), nil - case "exit.fsgroup": - return e.Exit.Process.Credentials.FSGroup, nil - case "exit.fsuid": - return int(e.Exit.Process.Credentials.FSUID), nil - case "exit.fsuser": - return e.Exit.Process.Credentials.FSUser, nil - case "exit.gid": - return int(e.Exit.Process.Credentials.GID), nil - case "exit.group": - return e.Exit.Process.Credentials.Group, nil - case "exit.interpreter.file.change_time": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "exit.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.Exit.Process.LinuxBinprm.FileEvent), nil - case "exit.interpreter.file.gid": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID), nil - case "exit.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.Exit.Process.LinuxBinprm.FileEvent.FileFields), nil - case "exit.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Exit.Process.LinuxBinprm.FileEvent.FileFields), nil - case "exit.interpreter.file.inode": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "exit.interpreter.file.mode": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "exit.interpreter.file.modification_time": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "exit.interpreter.file.mount_id": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "exit.interpreter.file.name": - return e.ResolveFileBasename(&e.Exit.Process.LinuxBinprm.FileEvent), nil - case "exit.interpreter.file.name.length": - return e.ResolveFileBasename(&e.Exit.Process.LinuxBinprm.FileEvent), nil - case "exit.interpreter.file.path": - return e.ResolveFilePath(&e.Exit.Process.LinuxBinprm.FileEvent), nil - case "exit.interpreter.file.path.length": - return e.ResolveFilePath(&e.Exit.Process.LinuxBinprm.FileEvent), nil - case "exit.interpreter.file.rights": - return int(e.ResolveRights(&e.Exit.Process.LinuxBinprm.FileEvent.FileFields)), nil - case "exit.interpreter.file.uid": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID), nil - case "exit.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.Exit.Process.LinuxBinprm.FileEvent.FileFields), nil - case "exit.is_kworker": - return e.Exit.Process.PIDContext.IsKworker, nil - case "exit.is_thread": - return e.Exit.Process.IsThread, nil - case "exit.pid": - return int(e.Exit.Process.PIDContext.Pid), nil - case "exit.ppid": - return int(e.Exit.Process.PPid), nil - case "exit.tid": - return int(e.Exit.Process.PIDContext.Tid), nil - case "exit.tty_name": - return e.Exit.Process.TTYName, nil - case "exit.uid": - return int(e.Exit.Process.Credentials.UID), nil - case "exit.user": - return e.Exit.Process.Credentials.User, nil - case "link.file.change_time": - return int(e.Link.Source.FileFields.CTime), nil - case "link.file.destination.change_time": - return int(e.Link.Target.FileFields.CTime), nil - case "link.file.destination.filesystem": - return e.ResolveFileFilesystem(&e.Link.Target), nil - case "link.file.destination.gid": - return int(e.Link.Target.FileFields.GID), nil - case "link.file.destination.group": - return e.ResolveFileFieldsGroup(&e.Link.Target.FileFields), nil - case "link.file.destination.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Link.Target.FileFields), nil - case "link.file.destination.inode": - return int(e.Link.Target.FileFields.Inode), nil - case "link.file.destination.mode": - return int(e.Link.Target.FileFields.Mode), nil - case "link.file.destination.modification_time": - return int(e.Link.Target.FileFields.MTime), nil - case "link.file.destination.mount_id": - return int(e.Link.Target.FileFields.MountID), nil - case "link.file.destination.name": - return e.ResolveFileBasename(&e.Link.Target), nil - case "link.file.destination.name.length": - return e.ResolveFileBasename(&e.Link.Target), nil - case "link.file.destination.path": - return e.ResolveFilePath(&e.Link.Target), nil - case "link.file.destination.path.length": - return e.ResolveFilePath(&e.Link.Target), nil - case "link.file.destination.rights": - return int(e.ResolveRights(&e.Link.Target.FileFields)), nil - case "link.file.destination.uid": - return int(e.Link.Target.FileFields.UID), nil - case "link.file.destination.user": - return e.ResolveFileFieldsUser(&e.Link.Target.FileFields), nil - case "link.file.filesystem": - return e.ResolveFileFilesystem(&e.Link.Source), nil - case "link.file.gid": - return int(e.Link.Source.FileFields.GID), nil - case "link.file.group": - return e.ResolveFileFieldsGroup(&e.Link.Source.FileFields), nil - case "link.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Link.Source.FileFields), nil - case "link.file.inode": - return int(e.Link.Source.FileFields.Inode), nil - case "link.file.mode": - return int(e.Link.Source.FileFields.Mode), nil - case "link.file.modification_time": - return int(e.Link.Source.FileFields.MTime), nil - case "link.file.mount_id": - return int(e.Link.Source.FileFields.MountID), nil - case "link.file.name": - return e.ResolveFileBasename(&e.Link.Source), nil - case "link.file.name.length": - return e.ResolveFileBasename(&e.Link.Source), nil - case "link.file.path": - return e.ResolveFilePath(&e.Link.Source), nil - case "link.file.path.length": - return e.ResolveFilePath(&e.Link.Source), nil - case "link.file.rights": - return int(e.ResolveRights(&e.Link.Source.FileFields)), nil - case "link.file.uid": - return int(e.Link.Source.FileFields.UID), nil - case "link.file.user": - return e.ResolveFileFieldsUser(&e.Link.Source.FileFields), nil - case "link.retval": - return int(e.Link.SyscallEvent.Retval), nil - case "load_module.file.change_time": - return int(e.LoadModule.File.FileFields.CTime), nil - case "load_module.file.filesystem": - return e.ResolveFileFilesystem(&e.LoadModule.File), nil - case "load_module.file.gid": - return int(e.LoadModule.File.FileFields.GID), nil - case "load_module.file.group": - return e.ResolveFileFieldsGroup(&e.LoadModule.File.FileFields), nil - case "load_module.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.LoadModule.File.FileFields), nil - case "load_module.file.inode": - return int(e.LoadModule.File.FileFields.Inode), nil - case "load_module.file.mode": - return int(e.LoadModule.File.FileFields.Mode), nil - case "load_module.file.modification_time": - return int(e.LoadModule.File.FileFields.MTime), nil - case "load_module.file.mount_id": - return int(e.LoadModule.File.FileFields.MountID), nil - case "load_module.file.name": - return e.ResolveFileBasename(&e.LoadModule.File), nil - case "load_module.file.name.length": - return e.ResolveFileBasename(&e.LoadModule.File), nil - case "load_module.file.path": - return e.ResolveFilePath(&e.LoadModule.File), nil - case "load_module.file.path.length": - return e.ResolveFilePath(&e.LoadModule.File), nil - case "load_module.file.rights": - return int(e.ResolveRights(&e.LoadModule.File.FileFields)), nil - case "load_module.file.uid": - return int(e.LoadModule.File.FileFields.UID), nil - case "load_module.file.user": - return e.ResolveFileFieldsUser(&e.LoadModule.File.FileFields), nil - case "load_module.loaded_from_memory": - return e.LoadModule.LoadedFromMemory, nil - case "load_module.name": - return e.LoadModule.Name, nil - case "load_module.retval": - return int(e.LoadModule.SyscallEvent.Retval), nil - case "mkdir.file.change_time": - return int(e.Mkdir.File.FileFields.CTime), nil - case "mkdir.file.destination.mode": - return int(e.Mkdir.Mode), nil - case "mkdir.file.destination.rights": - return int(e.Mkdir.Mode), nil - case "mkdir.file.filesystem": - return e.ResolveFileFilesystem(&e.Mkdir.File), nil - case "mkdir.file.gid": - return int(e.Mkdir.File.FileFields.GID), nil - case "mkdir.file.group": - return e.ResolveFileFieldsGroup(&e.Mkdir.File.FileFields), nil - case "mkdir.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Mkdir.File.FileFields), nil - case "mkdir.file.inode": - return int(e.Mkdir.File.FileFields.Inode), nil - case "mkdir.file.mode": - return int(e.Mkdir.File.FileFields.Mode), nil - case "mkdir.file.modification_time": - return int(e.Mkdir.File.FileFields.MTime), nil - case "mkdir.file.mount_id": - return int(e.Mkdir.File.FileFields.MountID), nil - case "mkdir.file.name": - return e.ResolveFileBasename(&e.Mkdir.File), nil - case "mkdir.file.name.length": - return e.ResolveFileBasename(&e.Mkdir.File), nil - case "mkdir.file.path": - return e.ResolveFilePath(&e.Mkdir.File), nil - case "mkdir.file.path.length": - return e.ResolveFilePath(&e.Mkdir.File), nil - case "mkdir.file.rights": - return int(e.ResolveRights(&e.Mkdir.File.FileFields)), nil - case "mkdir.file.uid": - return int(e.Mkdir.File.FileFields.UID), nil - case "mkdir.file.user": - return e.ResolveFileFieldsUser(&e.Mkdir.File.FileFields), nil - case "mkdir.retval": - return int(e.Mkdir.SyscallEvent.Retval), nil - case "mmap.file.change_time": - return int(e.MMap.File.FileFields.CTime), nil - case "mmap.file.filesystem": - return e.ResolveFileFilesystem(&e.MMap.File), nil - case "mmap.file.gid": - return int(e.MMap.File.FileFields.GID), nil - case "mmap.file.group": - return e.ResolveFileFieldsGroup(&e.MMap.File.FileFields), nil - case "mmap.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.MMap.File.FileFields), nil - case "mmap.file.inode": - return int(e.MMap.File.FileFields.Inode), nil - case "mmap.file.mode": - return int(e.MMap.File.FileFields.Mode), nil - case "mmap.file.modification_time": - return int(e.MMap.File.FileFields.MTime), nil - case "mmap.file.mount_id": - return int(e.MMap.File.FileFields.MountID), nil - case "mmap.file.name": - return e.ResolveFileBasename(&e.MMap.File), nil - case "mmap.file.name.length": - return e.ResolveFileBasename(&e.MMap.File), nil - case "mmap.file.path": - return e.ResolveFilePath(&e.MMap.File), nil - case "mmap.file.path.length": - return e.ResolveFilePath(&e.MMap.File), nil - case "mmap.file.rights": - return int(e.ResolveRights(&e.MMap.File.FileFields)), nil - case "mmap.file.uid": - return int(e.MMap.File.FileFields.UID), nil - case "mmap.file.user": - return e.ResolveFileFieldsUser(&e.MMap.File.FileFields), nil - case "mmap.flags": - return e.MMap.Flags, nil - case "mmap.protection": - return e.MMap.Protection, nil - case "mmap.retval": - return int(e.MMap.SyscallEvent.Retval), nil - case "mount.fs_type": - return e.Mount.Mount.FSType, nil - case "mount.mountpoint.path": - return e.ResolveMountPointPath(&e.Mount), nil - case "mount.retval": - return int(e.Mount.SyscallEvent.Retval), nil - case "mount.source.path": - return e.ResolveMountSourcePath(&e.Mount), nil - case "mprotect.req_protection": - return e.MProtect.ReqProtection, nil - case "mprotect.retval": - return int(e.MProtect.SyscallEvent.Retval), nil - case "mprotect.vm_protection": - return e.MProtect.VMProtection, nil - case "network.destination.ip": - return e.NetworkContext.Destination.IPNet, nil - case "network.destination.port": - return int(e.NetworkContext.Destination.Port), nil - case "network.device.ifindex": - return int(e.NetworkContext.Device.IfIndex), nil - case "network.device.ifname": - return e.ResolveNetworkDeviceIfName(&e.NetworkContext.Device), nil - case "network.l3_protocol": - return int(e.NetworkContext.L3Protocol), nil - case "network.l4_protocol": - return int(e.NetworkContext.L4Protocol), nil - case "network.size": - return int(e.NetworkContext.Size), nil - case "network.source.ip": - return e.NetworkContext.Source.IPNet, nil - case "network.source.port": - return int(e.NetworkContext.Source.Port), nil - case "open.file.change_time": - return int(e.Open.File.FileFields.CTime), nil - case "open.file.destination.mode": - return int(e.Open.Mode), nil - case "open.file.filesystem": - return e.ResolveFileFilesystem(&e.Open.File), nil - case "open.file.gid": - return int(e.Open.File.FileFields.GID), nil - case "open.file.group": - return e.ResolveFileFieldsGroup(&e.Open.File.FileFields), nil - case "open.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Open.File.FileFields), nil - case "open.file.inode": - return int(e.Open.File.FileFields.Inode), nil - case "open.file.mode": - return int(e.Open.File.FileFields.Mode), nil - case "open.file.modification_time": - return int(e.Open.File.FileFields.MTime), nil - case "open.file.mount_id": - return int(e.Open.File.FileFields.MountID), nil - case "open.file.name": - return e.ResolveFileBasename(&e.Open.File), nil - case "open.file.name.length": - return e.ResolveFileBasename(&e.Open.File), nil - case "open.file.path": - return e.ResolveFilePath(&e.Open.File), nil - case "open.file.path.length": - return e.ResolveFilePath(&e.Open.File), nil - case "open.file.rights": - return int(e.ResolveRights(&e.Open.File.FileFields)), nil - case "open.file.uid": - return int(e.Open.File.FileFields.UID), nil - case "open.file.user": - return e.ResolveFileFieldsUser(&e.Open.File.FileFields), nil - case "open.flags": - return int(e.Open.Flags), nil - case "open.retval": - return int(e.Open.SyscallEvent.Retval), nil - case "process.ancestors.args": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgs(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.args_flags": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsFlags(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.args_options": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsOptions(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.args_truncated": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsTruncated(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.argv": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgv(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.argv0": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgv0(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.cap_effective": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.CapEffective) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.cap_permitted": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.CapPermitted) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.comm": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Comm - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.container.id": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.ContainerID - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.cookie": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Cookie) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.created_at": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveProcessCreatedAt(&element.ProcessContext.Process)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.egid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.EGID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.egroup": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.EGroup - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.envp": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvp(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.envs": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvs(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.envs_truncated": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.euid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.EUID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.euser": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.EUser - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.change_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.filesystem": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.in_upper_layer": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.inode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.mode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.modification_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.mount_id": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.name.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.path": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.path.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.rights": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.FileEvent.FileFields)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.file.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.fsgid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.FSGID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.fsgroup": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.FSGroup - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.fsuid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.FSUID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.fsuser": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.FSUser - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.Group - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.change_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.filesystem": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.in_upper_layer": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.inode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.mode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.modification_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.mount_id": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.name.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.path": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.path.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.rights": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.interpreter.file.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.is_kworker": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.PIDContext.IsKworker - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.is_thread": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.IsThread - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.pid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PIDContext.Pid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.ppid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PPid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.tid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PIDContext.Tid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.tty_name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.TTYName - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.ancestors.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.User - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "process.args": - return e.ResolveProcessArgs(&e.ProcessContext.Process), nil - case "process.args_flags": - return e.ResolveProcessArgsFlags(&e.ProcessContext.Process), nil - case "process.args_options": - return e.ResolveProcessArgsOptions(&e.ProcessContext.Process), nil - case "process.args_truncated": - return e.ResolveProcessArgsTruncated(&e.ProcessContext.Process), nil - case "process.argv": - return e.ResolveProcessArgv(&e.ProcessContext.Process), nil - case "process.argv0": - return e.ResolveProcessArgv0(&e.ProcessContext.Process), nil - case "process.cap_effective": - return int(e.ProcessContext.Process.Credentials.CapEffective), nil - case "process.cap_permitted": - return int(e.ProcessContext.Process.Credentials.CapPermitted), nil - case "process.comm": - return e.ProcessContext.Process.Comm, nil - case "process.container.id": - return e.ProcessContext.Process.ContainerID, nil - case "process.cookie": - return int(e.ProcessContext.Process.Cookie), nil - case "process.created_at": - return int(e.ResolveProcessCreatedAt(&e.ProcessContext.Process)), nil - case "process.egid": - return int(e.ProcessContext.Process.Credentials.EGID), nil - case "process.egroup": - return e.ProcessContext.Process.Credentials.EGroup, nil - case "process.envp": - return e.ResolveProcessEnvp(&e.ProcessContext.Process), nil - case "process.envs": - return e.ResolveProcessEnvs(&e.ProcessContext.Process), nil - case "process.envs_truncated": - return e.ResolveProcessEnvsTruncated(&e.ProcessContext.Process), nil - case "process.euid": - return int(e.ProcessContext.Process.Credentials.EUID), nil - case "process.euser": - return e.ProcessContext.Process.Credentials.EUser, nil - case "process.file.change_time": - return int(e.ProcessContext.Process.FileEvent.FileFields.CTime), nil - case "process.file.filesystem": - return e.ResolveFileFilesystem(&e.ProcessContext.Process.FileEvent), nil - case "process.file.gid": - return int(e.ProcessContext.Process.FileEvent.FileFields.GID), nil - case "process.file.group": - return e.ResolveFileFieldsGroup(&e.ProcessContext.Process.FileEvent.FileFields), nil - case "process.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.ProcessContext.Process.FileEvent.FileFields), nil - case "process.file.inode": - return int(e.ProcessContext.Process.FileEvent.FileFields.Inode), nil - case "process.file.mode": - return int(e.ProcessContext.Process.FileEvent.FileFields.Mode), nil - case "process.file.modification_time": - return int(e.ProcessContext.Process.FileEvent.FileFields.MTime), nil - case "process.file.mount_id": - return int(e.ProcessContext.Process.FileEvent.FileFields.MountID), nil - case "process.file.name": - return e.ResolveFileBasename(&e.ProcessContext.Process.FileEvent), nil - case "process.file.name.length": - return e.ResolveFileBasename(&e.ProcessContext.Process.FileEvent), nil - case "process.file.path": - return e.ResolveFilePath(&e.ProcessContext.Process.FileEvent), nil - case "process.file.path.length": - return e.ResolveFilePath(&e.ProcessContext.Process.FileEvent), nil - case "process.file.rights": - return int(e.ResolveRights(&e.ProcessContext.Process.FileEvent.FileFields)), nil - case "process.file.uid": - return int(e.ProcessContext.Process.FileEvent.FileFields.UID), nil - case "process.file.user": - return e.ResolveFileFieldsUser(&e.ProcessContext.Process.FileEvent.FileFields), nil - case "process.fsgid": - return int(e.ProcessContext.Process.Credentials.FSGID), nil - case "process.fsgroup": - return e.ProcessContext.Process.Credentials.FSGroup, nil - case "process.fsuid": - return int(e.ProcessContext.Process.Credentials.FSUID), nil - case "process.fsuser": - return e.ProcessContext.Process.Credentials.FSUser, nil - case "process.gid": - return int(e.ProcessContext.Process.Credentials.GID), nil - case "process.group": - return e.ProcessContext.Process.Credentials.Group, nil - case "process.interpreter.file.change_time": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "process.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.ProcessContext.Process.LinuxBinprm.FileEvent), nil - case "process.interpreter.file.gid": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID), nil - case "process.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields), nil - case "process.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields), nil - case "process.interpreter.file.inode": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "process.interpreter.file.mode": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "process.interpreter.file.modification_time": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "process.interpreter.file.mount_id": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "process.interpreter.file.name": - return e.ResolveFileBasename(&e.ProcessContext.Process.LinuxBinprm.FileEvent), nil - case "process.interpreter.file.name.length": - return e.ResolveFileBasename(&e.ProcessContext.Process.LinuxBinprm.FileEvent), nil - case "process.interpreter.file.path": - return e.ResolveFilePath(&e.ProcessContext.Process.LinuxBinprm.FileEvent), nil - case "process.interpreter.file.path.length": - return e.ResolveFilePath(&e.ProcessContext.Process.LinuxBinprm.FileEvent), nil - case "process.interpreter.file.rights": - return int(e.ResolveRights(&e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)), nil - case "process.interpreter.file.uid": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID), nil - case "process.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields), nil - case "process.is_kworker": - return e.ProcessContext.Process.PIDContext.IsKworker, nil - case "process.is_thread": - return e.ProcessContext.Process.IsThread, nil - case "process.parent.args": - return e.ResolveProcessArgs(e.ProcessContext.Parent), nil - case "process.parent.args_flags": - return e.ResolveProcessArgsFlags(e.ProcessContext.Parent), nil - case "process.parent.args_options": - return e.ResolveProcessArgsOptions(e.ProcessContext.Parent), nil - case "process.parent.args_truncated": - return e.ResolveProcessArgsTruncated(e.ProcessContext.Parent), nil - case "process.parent.argv": - return e.ResolveProcessArgv(e.ProcessContext.Parent), nil - case "process.parent.argv0": - return e.ResolveProcessArgv0(e.ProcessContext.Parent), nil - case "process.parent.cap_effective": - return int(e.ProcessContext.Parent.Credentials.CapEffective), nil - case "process.parent.cap_permitted": - return int(e.ProcessContext.Parent.Credentials.CapPermitted), nil - case "process.parent.comm": - return e.ProcessContext.Parent.Comm, nil - case "process.parent.container.id": - return e.ProcessContext.Parent.ContainerID, nil - case "process.parent.cookie": - return int(e.ProcessContext.Parent.Cookie), nil - case "process.parent.created_at": - return int(e.ResolveProcessCreatedAt(e.ProcessContext.Parent)), nil - case "process.parent.egid": - return int(e.ProcessContext.Parent.Credentials.EGID), nil - case "process.parent.egroup": - return e.ProcessContext.Parent.Credentials.EGroup, nil - case "process.parent.envp": - return e.ResolveProcessEnvp(e.ProcessContext.Parent), nil - case "process.parent.envs": - return e.ResolveProcessEnvs(e.ProcessContext.Parent), nil - case "process.parent.envs_truncated": - return e.ResolveProcessEnvsTruncated(e.ProcessContext.Parent), nil - case "process.parent.euid": - return int(e.ProcessContext.Parent.Credentials.EUID), nil - case "process.parent.euser": - return e.ProcessContext.Parent.Credentials.EUser, nil - case "process.parent.file.change_time": - return int(e.ProcessContext.Parent.FileEvent.FileFields.CTime), nil - case "process.parent.file.filesystem": - return e.ResolveFileFilesystem(&e.ProcessContext.Parent.FileEvent), nil - case "process.parent.file.gid": - return int(e.ProcessContext.Parent.FileEvent.FileFields.GID), nil - case "process.parent.file.group": - return e.ResolveFileFieldsGroup(&e.ProcessContext.Parent.FileEvent.FileFields), nil - case "process.parent.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.ProcessContext.Parent.FileEvent.FileFields), nil - case "process.parent.file.inode": - return int(e.ProcessContext.Parent.FileEvent.FileFields.Inode), nil - case "process.parent.file.mode": - return int(e.ProcessContext.Parent.FileEvent.FileFields.Mode), nil - case "process.parent.file.modification_time": - return int(e.ProcessContext.Parent.FileEvent.FileFields.MTime), nil - case "process.parent.file.mount_id": - return int(e.ProcessContext.Parent.FileEvent.FileFields.MountID), nil - case "process.parent.file.name": - return e.ResolveFileBasename(&e.ProcessContext.Parent.FileEvent), nil - case "process.parent.file.name.length": - return e.ResolveFileBasename(&e.ProcessContext.Parent.FileEvent), nil - case "process.parent.file.path": - return e.ResolveFilePath(&e.ProcessContext.Parent.FileEvent), nil - case "process.parent.file.path.length": - return e.ResolveFilePath(&e.ProcessContext.Parent.FileEvent), nil - case "process.parent.file.rights": - return int(e.ResolveRights(&e.ProcessContext.Parent.FileEvent.FileFields)), nil - case "process.parent.file.uid": - return int(e.ProcessContext.Parent.FileEvent.FileFields.UID), nil - case "process.parent.file.user": - return e.ResolveFileFieldsUser(&e.ProcessContext.Parent.FileEvent.FileFields), nil - case "process.parent.fsgid": - return int(e.ProcessContext.Parent.Credentials.FSGID), nil - case "process.parent.fsgroup": - return e.ProcessContext.Parent.Credentials.FSGroup, nil - case "process.parent.fsuid": - return int(e.ProcessContext.Parent.Credentials.FSUID), nil - case "process.parent.fsuser": - return e.ProcessContext.Parent.Credentials.FSUser, nil - case "process.parent.gid": - return int(e.ProcessContext.Parent.Credentials.GID), nil - case "process.parent.group": - return e.ProcessContext.Parent.Credentials.Group, nil - case "process.parent.interpreter.file.change_time": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "process.parent.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.ProcessContext.Parent.LinuxBinprm.FileEvent), nil - case "process.parent.interpreter.file.gid": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil - case "process.parent.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "process.parent.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "process.parent.interpreter.file.inode": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "process.parent.interpreter.file.mode": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "process.parent.interpreter.file.modification_time": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "process.parent.interpreter.file.mount_id": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "process.parent.interpreter.file.name": - return e.ResolveFileBasename(&e.ProcessContext.Parent.LinuxBinprm.FileEvent), nil - case "process.parent.interpreter.file.name.length": - return e.ResolveFileBasename(&e.ProcessContext.Parent.LinuxBinprm.FileEvent), nil - case "process.parent.interpreter.file.path": - return e.ResolveFilePath(&e.ProcessContext.Parent.LinuxBinprm.FileEvent), nil - case "process.parent.interpreter.file.path.length": - return e.ResolveFilePath(&e.ProcessContext.Parent.LinuxBinprm.FileEvent), nil - case "process.parent.interpreter.file.rights": - return int(e.ResolveRights(&e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields)), nil - case "process.parent.interpreter.file.uid": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil - case "process.parent.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "process.parent.is_kworker": - return e.ProcessContext.Parent.PIDContext.IsKworker, nil - case "process.parent.is_thread": - return e.ProcessContext.Parent.IsThread, nil - case "process.parent.pid": - return int(e.ProcessContext.Parent.PIDContext.Pid), nil - case "process.parent.ppid": - return int(e.ProcessContext.Parent.PPid), nil - case "process.parent.tid": - return int(e.ProcessContext.Parent.PIDContext.Tid), nil - case "process.parent.tty_name": - return e.ProcessContext.Parent.TTYName, nil - case "process.parent.uid": - return int(e.ProcessContext.Parent.Credentials.UID), nil - case "process.parent.user": - return e.ProcessContext.Parent.Credentials.User, nil - case "process.pid": - return int(e.ProcessContext.Process.PIDContext.Pid), nil - case "process.ppid": - return int(e.ProcessContext.Process.PPid), nil - case "process.tid": - return int(e.ProcessContext.Process.PIDContext.Tid), nil - case "process.tty_name": - return e.ProcessContext.Process.TTYName, nil - case "process.uid": - return int(e.ProcessContext.Process.Credentials.UID), nil - case "process.user": - return e.ProcessContext.Process.Credentials.User, nil - case "ptrace.request": - return int(e.PTrace.Request), nil - case "ptrace.retval": - return int(e.PTrace.SyscallEvent.Retval), nil - case "ptrace.tracee.ancestors.args": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgs(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.args_flags": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsFlags(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.args_options": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsOptions(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.args_truncated": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsTruncated(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.argv": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgv(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.argv0": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgv0(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.cap_effective": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.CapEffective) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.cap_permitted": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.CapPermitted) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.comm": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Comm - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.container.id": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.ContainerID - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.cookie": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Cookie) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.created_at": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveProcessCreatedAt(&element.ProcessContext.Process)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.egid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.EGID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.egroup": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.EGroup - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.envp": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvp(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.envs": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvs(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.envs_truncated": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.euid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.EUID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.euser": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.EUser - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.change_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.filesystem": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.in_upper_layer": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.inode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.mode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.modification_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.mount_id": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.name.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.path": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.path.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.rights": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.FileEvent.FileFields)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.file.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.fsgid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.FSGID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.fsgroup": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.FSGroup - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.fsuid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.FSUID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.fsuser": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.FSUser - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.Group - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.change_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.filesystem": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.inode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.mode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.modification_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.mount_id": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.name.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.path": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.path.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.rights": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.interpreter.file.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.is_kworker": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.PIDContext.IsKworker - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.is_thread": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.IsThread - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.pid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PIDContext.Pid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.ppid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PPid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.tid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PIDContext.Tid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.tty_name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.TTYName - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.ancestors.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.User - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "ptrace.tracee.args": - return e.ResolveProcessArgs(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.args_flags": - return e.ResolveProcessArgsFlags(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.args_options": - return e.ResolveProcessArgsOptions(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.args_truncated": - return e.ResolveProcessArgsTruncated(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.argv": - return e.ResolveProcessArgv(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.argv0": - return e.ResolveProcessArgv0(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.cap_effective": - return int(e.PTrace.Tracee.Process.Credentials.CapEffective), nil - case "ptrace.tracee.cap_permitted": - return int(e.PTrace.Tracee.Process.Credentials.CapPermitted), nil - case "ptrace.tracee.comm": - return e.PTrace.Tracee.Process.Comm, nil - case "ptrace.tracee.container.id": - return e.PTrace.Tracee.Process.ContainerID, nil - case "ptrace.tracee.cookie": - return int(e.PTrace.Tracee.Process.Cookie), nil - case "ptrace.tracee.created_at": - return int(e.ResolveProcessCreatedAt(&e.PTrace.Tracee.Process)), nil - case "ptrace.tracee.egid": - return int(e.PTrace.Tracee.Process.Credentials.EGID), nil - case "ptrace.tracee.egroup": - return e.PTrace.Tracee.Process.Credentials.EGroup, nil - case "ptrace.tracee.envp": - return e.ResolveProcessEnvp(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.envs": - return e.ResolveProcessEnvs(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.envs_truncated": - return e.ResolveProcessEnvsTruncated(&e.PTrace.Tracee.Process), nil - case "ptrace.tracee.euid": - return int(e.PTrace.Tracee.Process.Credentials.EUID), nil - case "ptrace.tracee.euser": - return e.PTrace.Tracee.Process.Credentials.EUser, nil - case "ptrace.tracee.file.change_time": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.CTime), nil - case "ptrace.tracee.file.filesystem": - return e.ResolveFileFilesystem(&e.PTrace.Tracee.Process.FileEvent), nil - case "ptrace.tracee.file.gid": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.GID), nil - case "ptrace.tracee.file.group": - return e.ResolveFileFieldsGroup(&e.PTrace.Tracee.Process.FileEvent.FileFields), nil - case "ptrace.tracee.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.PTrace.Tracee.Process.FileEvent.FileFields), nil - case "ptrace.tracee.file.inode": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.Inode), nil - case "ptrace.tracee.file.mode": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.Mode), nil - case "ptrace.tracee.file.modification_time": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.MTime), nil - case "ptrace.tracee.file.mount_id": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.MountID), nil - case "ptrace.tracee.file.name": - return e.ResolveFileBasename(&e.PTrace.Tracee.Process.FileEvent), nil - case "ptrace.tracee.file.name.length": - return e.ResolveFileBasename(&e.PTrace.Tracee.Process.FileEvent), nil - case "ptrace.tracee.file.path": - return e.ResolveFilePath(&e.PTrace.Tracee.Process.FileEvent), nil - case "ptrace.tracee.file.path.length": - return e.ResolveFilePath(&e.PTrace.Tracee.Process.FileEvent), nil - case "ptrace.tracee.file.rights": - return int(e.ResolveRights(&e.PTrace.Tracee.Process.FileEvent.FileFields)), nil - case "ptrace.tracee.file.uid": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.UID), nil - case "ptrace.tracee.file.user": - return e.ResolveFileFieldsUser(&e.PTrace.Tracee.Process.FileEvent.FileFields), nil - case "ptrace.tracee.fsgid": - return int(e.PTrace.Tracee.Process.Credentials.FSGID), nil - case "ptrace.tracee.fsgroup": - return e.PTrace.Tracee.Process.Credentials.FSGroup, nil - case "ptrace.tracee.fsuid": - return int(e.PTrace.Tracee.Process.Credentials.FSUID), nil - case "ptrace.tracee.fsuser": - return e.PTrace.Tracee.Process.Credentials.FSUser, nil - case "ptrace.tracee.gid": - return int(e.PTrace.Tracee.Process.Credentials.GID), nil - case "ptrace.tracee.group": - return e.PTrace.Tracee.Process.Credentials.Group, nil - case "ptrace.tracee.interpreter.file.change_time": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "ptrace.tracee.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.interpreter.file.gid": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID), nil - case "ptrace.tracee.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields), nil - case "ptrace.tracee.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields), nil - case "ptrace.tracee.interpreter.file.inode": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "ptrace.tracee.interpreter.file.mode": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "ptrace.tracee.interpreter.file.modification_time": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "ptrace.tracee.interpreter.file.mount_id": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "ptrace.tracee.interpreter.file.name": - return e.ResolveFileBasename(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.interpreter.file.name.length": - return e.ResolveFileBasename(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.interpreter.file.path": - return e.ResolveFilePath(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.interpreter.file.path.length": - return e.ResolveFilePath(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.interpreter.file.rights": - return int(e.ResolveRights(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields)), nil - case "ptrace.tracee.interpreter.file.uid": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID), nil - case "ptrace.tracee.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields), nil - case "ptrace.tracee.is_kworker": - return e.PTrace.Tracee.Process.PIDContext.IsKworker, nil - case "ptrace.tracee.is_thread": - return e.PTrace.Tracee.Process.IsThread, nil - case "ptrace.tracee.parent.args": - return e.ResolveProcessArgs(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.args_flags": - return e.ResolveProcessArgsFlags(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.args_options": - return e.ResolveProcessArgsOptions(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.args_truncated": - return e.ResolveProcessArgsTruncated(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.argv": - return e.ResolveProcessArgv(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.argv0": - return e.ResolveProcessArgv0(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.cap_effective": - return int(e.PTrace.Tracee.Parent.Credentials.CapEffective), nil - case "ptrace.tracee.parent.cap_permitted": - return int(e.PTrace.Tracee.Parent.Credentials.CapPermitted), nil - case "ptrace.tracee.parent.comm": - return e.PTrace.Tracee.Parent.Comm, nil - case "ptrace.tracee.parent.container.id": - return e.PTrace.Tracee.Parent.ContainerID, nil - case "ptrace.tracee.parent.cookie": - return int(e.PTrace.Tracee.Parent.Cookie), nil - case "ptrace.tracee.parent.created_at": - return int(e.ResolveProcessCreatedAt(e.PTrace.Tracee.Parent)), nil - case "ptrace.tracee.parent.egid": - return int(e.PTrace.Tracee.Parent.Credentials.EGID), nil - case "ptrace.tracee.parent.egroup": - return e.PTrace.Tracee.Parent.Credentials.EGroup, nil - case "ptrace.tracee.parent.envp": - return e.ResolveProcessEnvp(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.envs": - return e.ResolveProcessEnvs(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.envs_truncated": - return e.ResolveProcessEnvsTruncated(e.PTrace.Tracee.Parent), nil - case "ptrace.tracee.parent.euid": - return int(e.PTrace.Tracee.Parent.Credentials.EUID), nil - case "ptrace.tracee.parent.euser": - return e.PTrace.Tracee.Parent.Credentials.EUser, nil - case "ptrace.tracee.parent.file.change_time": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.CTime), nil - case "ptrace.tracee.parent.file.filesystem": - return e.ResolveFileFilesystem(&e.PTrace.Tracee.Parent.FileEvent), nil - case "ptrace.tracee.parent.file.gid": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.GID), nil - case "ptrace.tracee.parent.file.group": - return e.ResolveFileFieldsGroup(&e.PTrace.Tracee.Parent.FileEvent.FileFields), nil - case "ptrace.tracee.parent.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.PTrace.Tracee.Parent.FileEvent.FileFields), nil - case "ptrace.tracee.parent.file.inode": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.Inode), nil - case "ptrace.tracee.parent.file.mode": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode), nil - case "ptrace.tracee.parent.file.modification_time": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.MTime), nil - case "ptrace.tracee.parent.file.mount_id": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.MountID), nil - case "ptrace.tracee.parent.file.name": - return e.ResolveFileBasename(&e.PTrace.Tracee.Parent.FileEvent), nil - case "ptrace.tracee.parent.file.name.length": - return e.ResolveFileBasename(&e.PTrace.Tracee.Parent.FileEvent), nil - case "ptrace.tracee.parent.file.path": - return e.ResolveFilePath(&e.PTrace.Tracee.Parent.FileEvent), nil - case "ptrace.tracee.parent.file.path.length": - return e.ResolveFilePath(&e.PTrace.Tracee.Parent.FileEvent), nil - case "ptrace.tracee.parent.file.rights": - return int(e.ResolveRights(&e.PTrace.Tracee.Parent.FileEvent.FileFields)), nil - case "ptrace.tracee.parent.file.uid": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.UID), nil - case "ptrace.tracee.parent.file.user": - return e.ResolveFileFieldsUser(&e.PTrace.Tracee.Parent.FileEvent.FileFields), nil - case "ptrace.tracee.parent.fsgid": - return int(e.PTrace.Tracee.Parent.Credentials.FSGID), nil - case "ptrace.tracee.parent.fsgroup": - return e.PTrace.Tracee.Parent.Credentials.FSGroup, nil - case "ptrace.tracee.parent.fsuid": - return int(e.PTrace.Tracee.Parent.Credentials.FSUID), nil - case "ptrace.tracee.parent.fsuser": - return e.PTrace.Tracee.Parent.Credentials.FSUser, nil - case "ptrace.tracee.parent.gid": - return int(e.PTrace.Tracee.Parent.Credentials.GID), nil - case "ptrace.tracee.parent.group": - return e.PTrace.Tracee.Parent.Credentials.Group, nil - case "ptrace.tracee.parent.interpreter.file.change_time": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "ptrace.tracee.parent.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.parent.interpreter.file.gid": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil - case "ptrace.tracee.parent.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "ptrace.tracee.parent.interpreter.file.inode": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "ptrace.tracee.parent.interpreter.file.mode": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "ptrace.tracee.parent.interpreter.file.modification_time": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "ptrace.tracee.parent.interpreter.file.mount_id": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "ptrace.tracee.parent.interpreter.file.name": - return e.ResolveFileBasename(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.parent.interpreter.file.name.length": - return e.ResolveFileBasename(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.parent.interpreter.file.path": - return e.ResolveFilePath(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.parent.interpreter.file.path.length": - return e.ResolveFilePath(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil - case "ptrace.tracee.parent.interpreter.file.rights": - return int(e.ResolveRights(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields)), nil - case "ptrace.tracee.parent.interpreter.file.uid": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil - case "ptrace.tracee.parent.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "ptrace.tracee.parent.is_kworker": - return e.PTrace.Tracee.Parent.PIDContext.IsKworker, nil - case "ptrace.tracee.parent.is_thread": - return e.PTrace.Tracee.Parent.IsThread, nil - case "ptrace.tracee.parent.pid": - return int(e.PTrace.Tracee.Parent.PIDContext.Pid), nil - case "ptrace.tracee.parent.ppid": - return int(e.PTrace.Tracee.Parent.PPid), nil - case "ptrace.tracee.parent.tid": - return int(e.PTrace.Tracee.Parent.PIDContext.Tid), nil - case "ptrace.tracee.parent.tty_name": - return e.PTrace.Tracee.Parent.TTYName, nil - case "ptrace.tracee.parent.uid": - return int(e.PTrace.Tracee.Parent.Credentials.UID), nil - case "ptrace.tracee.parent.user": - return e.PTrace.Tracee.Parent.Credentials.User, nil - case "ptrace.tracee.pid": - return int(e.PTrace.Tracee.Process.PIDContext.Pid), nil - case "ptrace.tracee.ppid": - return int(e.PTrace.Tracee.Process.PPid), nil - case "ptrace.tracee.tid": - return int(e.PTrace.Tracee.Process.PIDContext.Tid), nil - case "ptrace.tracee.tty_name": - return e.PTrace.Tracee.Process.TTYName, nil - case "ptrace.tracee.uid": - return int(e.PTrace.Tracee.Process.Credentials.UID), nil - case "ptrace.tracee.user": - return e.PTrace.Tracee.Process.Credentials.User, nil - case "removexattr.file.change_time": - return int(e.RemoveXAttr.File.FileFields.CTime), nil - case "removexattr.file.destination.name": - return e.ResolveXAttrName(&e.RemoveXAttr), nil - case "removexattr.file.destination.namespace": - return e.ResolveXAttrNamespace(&e.RemoveXAttr), nil - case "removexattr.file.filesystem": - return e.ResolveFileFilesystem(&e.RemoveXAttr.File), nil - case "removexattr.file.gid": - return int(e.RemoveXAttr.File.FileFields.GID), nil - case "removexattr.file.group": - return e.ResolveFileFieldsGroup(&e.RemoveXAttr.File.FileFields), nil - case "removexattr.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.RemoveXAttr.File.FileFields), nil - case "removexattr.file.inode": - return int(e.RemoveXAttr.File.FileFields.Inode), nil - case "removexattr.file.mode": - return int(e.RemoveXAttr.File.FileFields.Mode), nil - case "removexattr.file.modification_time": - return int(e.RemoveXAttr.File.FileFields.MTime), nil - case "removexattr.file.mount_id": - return int(e.RemoveXAttr.File.FileFields.MountID), nil - case "removexattr.file.name": - return e.ResolveFileBasename(&e.RemoveXAttr.File), nil - case "removexattr.file.name.length": - return e.ResolveFileBasename(&e.RemoveXAttr.File), nil - case "removexattr.file.path": - return e.ResolveFilePath(&e.RemoveXAttr.File), nil - case "removexattr.file.path.length": - return e.ResolveFilePath(&e.RemoveXAttr.File), nil - case "removexattr.file.rights": - return int(e.ResolveRights(&e.RemoveXAttr.File.FileFields)), nil - case "removexattr.file.uid": - return int(e.RemoveXAttr.File.FileFields.UID), nil - case "removexattr.file.user": - return e.ResolveFileFieldsUser(&e.RemoveXAttr.File.FileFields), nil - case "removexattr.retval": - return int(e.RemoveXAttr.SyscallEvent.Retval), nil - case "rename.file.change_time": - return int(e.Rename.Old.FileFields.CTime), nil - case "rename.file.destination.change_time": - return int(e.Rename.New.FileFields.CTime), nil - case "rename.file.destination.filesystem": - return e.ResolveFileFilesystem(&e.Rename.New), nil - case "rename.file.destination.gid": - return int(e.Rename.New.FileFields.GID), nil - case "rename.file.destination.group": - return e.ResolveFileFieldsGroup(&e.Rename.New.FileFields), nil - case "rename.file.destination.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Rename.New.FileFields), nil - case "rename.file.destination.inode": - return int(e.Rename.New.FileFields.Inode), nil - case "rename.file.destination.mode": - return int(e.Rename.New.FileFields.Mode), nil - case "rename.file.destination.modification_time": - return int(e.Rename.New.FileFields.MTime), nil - case "rename.file.destination.mount_id": - return int(e.Rename.New.FileFields.MountID), nil - case "rename.file.destination.name": - return e.ResolveFileBasename(&e.Rename.New), nil - case "rename.file.destination.name.length": - return e.ResolveFileBasename(&e.Rename.New), nil - case "rename.file.destination.path": - return e.ResolveFilePath(&e.Rename.New), nil - case "rename.file.destination.path.length": - return e.ResolveFilePath(&e.Rename.New), nil - case "rename.file.destination.rights": - return int(e.ResolveRights(&e.Rename.New.FileFields)), nil - case "rename.file.destination.uid": - return int(e.Rename.New.FileFields.UID), nil - case "rename.file.destination.user": - return e.ResolveFileFieldsUser(&e.Rename.New.FileFields), nil - case "rename.file.filesystem": - return e.ResolveFileFilesystem(&e.Rename.Old), nil - case "rename.file.gid": - return int(e.Rename.Old.FileFields.GID), nil - case "rename.file.group": - return e.ResolveFileFieldsGroup(&e.Rename.Old.FileFields), nil - case "rename.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Rename.Old.FileFields), nil - case "rename.file.inode": - return int(e.Rename.Old.FileFields.Inode), nil - case "rename.file.mode": - return int(e.Rename.Old.FileFields.Mode), nil - case "rename.file.modification_time": - return int(e.Rename.Old.FileFields.MTime), nil - case "rename.file.mount_id": - return int(e.Rename.Old.FileFields.MountID), nil - case "rename.file.name": - return e.ResolveFileBasename(&e.Rename.Old), nil - case "rename.file.name.length": - return e.ResolveFileBasename(&e.Rename.Old), nil - case "rename.file.path": - return e.ResolveFilePath(&e.Rename.Old), nil - case "rename.file.path.length": - return e.ResolveFilePath(&e.Rename.Old), nil - case "rename.file.rights": - return int(e.ResolveRights(&e.Rename.Old.FileFields)), nil - case "rename.file.uid": - return int(e.Rename.Old.FileFields.UID), nil - case "rename.file.user": - return e.ResolveFileFieldsUser(&e.Rename.Old.FileFields), nil - case "rename.retval": - return int(e.Rename.SyscallEvent.Retval), nil - case "rmdir.file.change_time": - return int(e.Rmdir.File.FileFields.CTime), nil - case "rmdir.file.filesystem": - return e.ResolveFileFilesystem(&e.Rmdir.File), nil - case "rmdir.file.gid": - return int(e.Rmdir.File.FileFields.GID), nil - case "rmdir.file.group": - return e.ResolveFileFieldsGroup(&e.Rmdir.File.FileFields), nil - case "rmdir.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Rmdir.File.FileFields), nil - case "rmdir.file.inode": - return int(e.Rmdir.File.FileFields.Inode), nil - case "rmdir.file.mode": - return int(e.Rmdir.File.FileFields.Mode), nil - case "rmdir.file.modification_time": - return int(e.Rmdir.File.FileFields.MTime), nil - case "rmdir.file.mount_id": - return int(e.Rmdir.File.FileFields.MountID), nil - case "rmdir.file.name": - return e.ResolveFileBasename(&e.Rmdir.File), nil - case "rmdir.file.name.length": - return e.ResolveFileBasename(&e.Rmdir.File), nil - case "rmdir.file.path": - return e.ResolveFilePath(&e.Rmdir.File), nil - case "rmdir.file.path.length": - return e.ResolveFilePath(&e.Rmdir.File), nil - case "rmdir.file.rights": - return int(e.ResolveRights(&e.Rmdir.File.FileFields)), nil - case "rmdir.file.uid": - return int(e.Rmdir.File.FileFields.UID), nil - case "rmdir.file.user": - return e.ResolveFileFieldsUser(&e.Rmdir.File.FileFields), nil - case "rmdir.retval": - return int(e.Rmdir.SyscallEvent.Retval), nil - case "selinux.bool.name": - return e.ResolveSELinuxBoolName(&e.SELinux), nil - case "selinux.bool.state": - return e.SELinux.BoolChangeValue, nil - case "selinux.bool_commit.state": - return e.SELinux.BoolCommitValue, nil - case "selinux.enforce.status": - return e.SELinux.EnforceStatus, nil - case "setgid.egid": - return int(e.SetGID.EGID), nil - case "setgid.egroup": - return e.ResolveSetgidEGroup(&e.SetGID), nil - case "setgid.fsgid": - return int(e.SetGID.FSGID), nil - case "setgid.fsgroup": - return e.ResolveSetgidFSGroup(&e.SetGID), nil - case "setgid.gid": - return int(e.SetGID.GID), nil - case "setgid.group": - return e.ResolveSetgidGroup(&e.SetGID), nil - case "setuid.euid": - return int(e.SetUID.EUID), nil - case "setuid.euser": - return e.ResolveSetuidEUser(&e.SetUID), nil - case "setuid.fsuid": - return int(e.SetUID.FSUID), nil - case "setuid.fsuser": - return e.ResolveSetuidFSUser(&e.SetUID), nil - case "setuid.uid": - return int(e.SetUID.UID), nil - case "setuid.user": - return e.ResolveSetuidUser(&e.SetUID), nil - case "setxattr.file.change_time": - return int(e.SetXAttr.File.FileFields.CTime), nil - case "setxattr.file.destination.name": - return e.ResolveXAttrName(&e.SetXAttr), nil - case "setxattr.file.destination.namespace": - return e.ResolveXAttrNamespace(&e.SetXAttr), nil - case "setxattr.file.filesystem": - return e.ResolveFileFilesystem(&e.SetXAttr.File), nil - case "setxattr.file.gid": - return int(e.SetXAttr.File.FileFields.GID), nil - case "setxattr.file.group": - return e.ResolveFileFieldsGroup(&e.SetXAttr.File.FileFields), nil - case "setxattr.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.SetXAttr.File.FileFields), nil - case "setxattr.file.inode": - return int(e.SetXAttr.File.FileFields.Inode), nil - case "setxattr.file.mode": - return int(e.SetXAttr.File.FileFields.Mode), nil - case "setxattr.file.modification_time": - return int(e.SetXAttr.File.FileFields.MTime), nil - case "setxattr.file.mount_id": - return int(e.SetXAttr.File.FileFields.MountID), nil - case "setxattr.file.name": - return e.ResolveFileBasename(&e.SetXAttr.File), nil - case "setxattr.file.name.length": - return e.ResolveFileBasename(&e.SetXAttr.File), nil - case "setxattr.file.path": - return e.ResolveFilePath(&e.SetXAttr.File), nil - case "setxattr.file.path.length": - return e.ResolveFilePath(&e.SetXAttr.File), nil - case "setxattr.file.rights": - return int(e.ResolveRights(&e.SetXAttr.File.FileFields)), nil - case "setxattr.file.uid": - return int(e.SetXAttr.File.FileFields.UID), nil - case "setxattr.file.user": - return e.ResolveFileFieldsUser(&e.SetXAttr.File.FileFields), nil - case "setxattr.retval": - return int(e.SetXAttr.SyscallEvent.Retval), nil - case "signal.pid": - return int(e.Signal.PID), nil - case "signal.retval": - return int(e.Signal.SyscallEvent.Retval), nil - case "signal.target.ancestors.args": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgs(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.args_flags": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsFlags(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.args_options": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsOptions(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.args_truncated": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgsTruncated(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.argv": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgv(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.argv0": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessArgv0(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.cap_effective": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.CapEffective) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.cap_permitted": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.CapPermitted) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.comm": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Comm - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.container.id": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.ContainerID - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.cookie": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Cookie) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.created_at": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveProcessCreatedAt(&element.ProcessContext.Process)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.egid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.EGID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.egroup": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.EGroup - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.envp": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvp(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.envs": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvs(&element.ProcessContext.Process) - values = append(values, result...) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.envs_truncated": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveProcessEnvsTruncated(&element.ProcessContext.Process) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.euid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.EUID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.euser": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.EUser - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.change_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.CTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.filesystem": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.in_upper_layer": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.inode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Inode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.mode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.modification_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.mount_id": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.MountID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.name.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.path": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.path.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.rights": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.FileEvent.FileFields)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.file.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.fsgid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.FSGID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.fsgroup": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.FSGroup - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.fsuid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.FSUID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.fsuser": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.FSUser - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.Group - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.change_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.filesystem": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFilesystem(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.gid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.group": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsGroup(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.in_upper_layer": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsInUpperLayer(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.inode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.mode": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.modification_time": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.mount_id": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.name.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFileBasename(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.path": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.path.length": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := len((*Event)(ctx.Object).ResolveFilePath(&element.ProcessContext.Process.LinuxBinprm.FileEvent)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.rights": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int((*Event)(ctx.Object).ResolveRights(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.interpreter.file.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := (*Event)(ctx.Object).ResolveFileFieldsUser(&element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.is_kworker": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.PIDContext.IsKworker - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.is_thread": - var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.IsThread - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.pid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PIDContext.Pid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.ppid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PPid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.tid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.PIDContext.Tid) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.tty_name": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.TTYName - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.uid": - var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.Credentials.UID) - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.ancestors.user": - var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) - iterator := &model.ProcessAncestorsIterator{} - ptr := iterator.Front(ctx) - for ptr != nil { - element := (*model.ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Credentials.User - values = append(values, result) - ptr = iterator.Next() - } - return values, nil - case "signal.target.args": - return e.ResolveProcessArgs(&e.Signal.Target.Process), nil - case "signal.target.args_flags": - return e.ResolveProcessArgsFlags(&e.Signal.Target.Process), nil - case "signal.target.args_options": - return e.ResolveProcessArgsOptions(&e.Signal.Target.Process), nil - case "signal.target.args_truncated": - return e.ResolveProcessArgsTruncated(&e.Signal.Target.Process), nil - case "signal.target.argv": - return e.ResolveProcessArgv(&e.Signal.Target.Process), nil - case "signal.target.argv0": - return e.ResolveProcessArgv0(&e.Signal.Target.Process), nil - case "signal.target.cap_effective": - return int(e.Signal.Target.Process.Credentials.CapEffective), nil - case "signal.target.cap_permitted": - return int(e.Signal.Target.Process.Credentials.CapPermitted), nil - case "signal.target.comm": - return e.Signal.Target.Process.Comm, nil - case "signal.target.container.id": - return e.Signal.Target.Process.ContainerID, nil - case "signal.target.cookie": - return int(e.Signal.Target.Process.Cookie), nil - case "signal.target.created_at": - return int(e.ResolveProcessCreatedAt(&e.Signal.Target.Process)), nil - case "signal.target.egid": - return int(e.Signal.Target.Process.Credentials.EGID), nil - case "signal.target.egroup": - return e.Signal.Target.Process.Credentials.EGroup, nil - case "signal.target.envp": - return e.ResolveProcessEnvp(&e.Signal.Target.Process), nil - case "signal.target.envs": - return e.ResolveProcessEnvs(&e.Signal.Target.Process), nil - case "signal.target.envs_truncated": - return e.ResolveProcessEnvsTruncated(&e.Signal.Target.Process), nil - case "signal.target.euid": - return int(e.Signal.Target.Process.Credentials.EUID), nil - case "signal.target.euser": - return e.Signal.Target.Process.Credentials.EUser, nil - case "signal.target.file.change_time": - return int(e.Signal.Target.Process.FileEvent.FileFields.CTime), nil - case "signal.target.file.filesystem": - return e.ResolveFileFilesystem(&e.Signal.Target.Process.FileEvent), nil - case "signal.target.file.gid": - return int(e.Signal.Target.Process.FileEvent.FileFields.GID), nil - case "signal.target.file.group": - return e.ResolveFileFieldsGroup(&e.Signal.Target.Process.FileEvent.FileFields), nil - case "signal.target.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Signal.Target.Process.FileEvent.FileFields), nil - case "signal.target.file.inode": - return int(e.Signal.Target.Process.FileEvent.FileFields.Inode), nil - case "signal.target.file.mode": - return int(e.Signal.Target.Process.FileEvent.FileFields.Mode), nil - case "signal.target.file.modification_time": - return int(e.Signal.Target.Process.FileEvent.FileFields.MTime), nil - case "signal.target.file.mount_id": - return int(e.Signal.Target.Process.FileEvent.FileFields.MountID), nil - case "signal.target.file.name": - return e.ResolveFileBasename(&e.Signal.Target.Process.FileEvent), nil - case "signal.target.file.name.length": - return e.ResolveFileBasename(&e.Signal.Target.Process.FileEvent), nil - case "signal.target.file.path": - return e.ResolveFilePath(&e.Signal.Target.Process.FileEvent), nil - case "signal.target.file.path.length": - return e.ResolveFilePath(&e.Signal.Target.Process.FileEvent), nil - case "signal.target.file.rights": - return int(e.ResolveRights(&e.Signal.Target.Process.FileEvent.FileFields)), nil - case "signal.target.file.uid": - return int(e.Signal.Target.Process.FileEvent.FileFields.UID), nil - case "signal.target.file.user": - return e.ResolveFileFieldsUser(&e.Signal.Target.Process.FileEvent.FileFields), nil - case "signal.target.fsgid": - return int(e.Signal.Target.Process.Credentials.FSGID), nil - case "signal.target.fsgroup": - return e.Signal.Target.Process.Credentials.FSGroup, nil - case "signal.target.fsuid": - return int(e.Signal.Target.Process.Credentials.FSUID), nil - case "signal.target.fsuser": - return e.Signal.Target.Process.Credentials.FSUser, nil - case "signal.target.gid": - return int(e.Signal.Target.Process.Credentials.GID), nil - case "signal.target.group": - return e.Signal.Target.Process.Credentials.Group, nil - case "signal.target.interpreter.file.change_time": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "signal.target.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.Signal.Target.Process.LinuxBinprm.FileEvent), nil - case "signal.target.interpreter.file.gid": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID), nil - case "signal.target.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields), nil - case "signal.target.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields), nil - case "signal.target.interpreter.file.inode": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "signal.target.interpreter.file.mode": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "signal.target.interpreter.file.modification_time": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "signal.target.interpreter.file.mount_id": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "signal.target.interpreter.file.name": - return e.ResolveFileBasename(&e.Signal.Target.Process.LinuxBinprm.FileEvent), nil - case "signal.target.interpreter.file.name.length": - return e.ResolveFileBasename(&e.Signal.Target.Process.LinuxBinprm.FileEvent), nil - case "signal.target.interpreter.file.path": - return e.ResolveFilePath(&e.Signal.Target.Process.LinuxBinprm.FileEvent), nil - case "signal.target.interpreter.file.path.length": - return e.ResolveFilePath(&e.Signal.Target.Process.LinuxBinprm.FileEvent), nil - case "signal.target.interpreter.file.rights": - return int(e.ResolveRights(&e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields)), nil - case "signal.target.interpreter.file.uid": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID), nil - case "signal.target.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields), nil - case "signal.target.is_kworker": - return e.Signal.Target.Process.PIDContext.IsKworker, nil - case "signal.target.is_thread": - return e.Signal.Target.Process.IsThread, nil - case "signal.target.parent.args": - return e.ResolveProcessArgs(e.Signal.Target.Parent), nil - case "signal.target.parent.args_flags": - return e.ResolveProcessArgsFlags(e.Signal.Target.Parent), nil - case "signal.target.parent.args_options": - return e.ResolveProcessArgsOptions(e.Signal.Target.Parent), nil - case "signal.target.parent.args_truncated": - return e.ResolveProcessArgsTruncated(e.Signal.Target.Parent), nil - case "signal.target.parent.argv": - return e.ResolveProcessArgv(e.Signal.Target.Parent), nil - case "signal.target.parent.argv0": - return e.ResolveProcessArgv0(e.Signal.Target.Parent), nil - case "signal.target.parent.cap_effective": - return int(e.Signal.Target.Parent.Credentials.CapEffective), nil - case "signal.target.parent.cap_permitted": - return int(e.Signal.Target.Parent.Credentials.CapPermitted), nil - case "signal.target.parent.comm": - return e.Signal.Target.Parent.Comm, nil - case "signal.target.parent.container.id": - return e.Signal.Target.Parent.ContainerID, nil - case "signal.target.parent.cookie": - return int(e.Signal.Target.Parent.Cookie), nil - case "signal.target.parent.created_at": - return int(e.ResolveProcessCreatedAt(e.Signal.Target.Parent)), nil - case "signal.target.parent.egid": - return int(e.Signal.Target.Parent.Credentials.EGID), nil - case "signal.target.parent.egroup": - return e.Signal.Target.Parent.Credentials.EGroup, nil - case "signal.target.parent.envp": - return e.ResolveProcessEnvp(e.Signal.Target.Parent), nil - case "signal.target.parent.envs": - return e.ResolveProcessEnvs(e.Signal.Target.Parent), nil - case "signal.target.parent.envs_truncated": - return e.ResolveProcessEnvsTruncated(e.Signal.Target.Parent), nil - case "signal.target.parent.euid": - return int(e.Signal.Target.Parent.Credentials.EUID), nil - case "signal.target.parent.euser": - return e.Signal.Target.Parent.Credentials.EUser, nil - case "signal.target.parent.file.change_time": - return int(e.Signal.Target.Parent.FileEvent.FileFields.CTime), nil - case "signal.target.parent.file.filesystem": - return e.ResolveFileFilesystem(&e.Signal.Target.Parent.FileEvent), nil - case "signal.target.parent.file.gid": - return int(e.Signal.Target.Parent.FileEvent.FileFields.GID), nil - case "signal.target.parent.file.group": - return e.ResolveFileFieldsGroup(&e.Signal.Target.Parent.FileEvent.FileFields), nil - case "signal.target.parent.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Signal.Target.Parent.FileEvent.FileFields), nil - case "signal.target.parent.file.inode": - return int(e.Signal.Target.Parent.FileEvent.FileFields.Inode), nil - case "signal.target.parent.file.mode": - return int(e.Signal.Target.Parent.FileEvent.FileFields.Mode), nil - case "signal.target.parent.file.modification_time": - return int(e.Signal.Target.Parent.FileEvent.FileFields.MTime), nil - case "signal.target.parent.file.mount_id": - return int(e.Signal.Target.Parent.FileEvent.FileFields.MountID), nil - case "signal.target.parent.file.name": - return e.ResolveFileBasename(&e.Signal.Target.Parent.FileEvent), nil - case "signal.target.parent.file.name.length": - return e.ResolveFileBasename(&e.Signal.Target.Parent.FileEvent), nil - case "signal.target.parent.file.path": - return e.ResolveFilePath(&e.Signal.Target.Parent.FileEvent), nil - case "signal.target.parent.file.path.length": - return e.ResolveFilePath(&e.Signal.Target.Parent.FileEvent), nil - case "signal.target.parent.file.rights": - return int(e.ResolveRights(&e.Signal.Target.Parent.FileEvent.FileFields)), nil - case "signal.target.parent.file.uid": - return int(e.Signal.Target.Parent.FileEvent.FileFields.UID), nil - case "signal.target.parent.file.user": - return e.ResolveFileFieldsUser(&e.Signal.Target.Parent.FileEvent.FileFields), nil - case "signal.target.parent.fsgid": - return int(e.Signal.Target.Parent.Credentials.FSGID), nil - case "signal.target.parent.fsgroup": - return e.Signal.Target.Parent.Credentials.FSGroup, nil - case "signal.target.parent.fsuid": - return int(e.Signal.Target.Parent.Credentials.FSUID), nil - case "signal.target.parent.fsuser": - return e.Signal.Target.Parent.Credentials.FSUser, nil - case "signal.target.parent.gid": - return int(e.Signal.Target.Parent.Credentials.GID), nil - case "signal.target.parent.group": - return e.Signal.Target.Parent.Credentials.Group, nil - case "signal.target.parent.interpreter.file.change_time": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil - case "signal.target.parent.interpreter.file.filesystem": - return e.ResolveFileFilesystem(&e.Signal.Target.Parent.LinuxBinprm.FileEvent), nil - case "signal.target.parent.interpreter.file.gid": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil - case "signal.target.parent.interpreter.file.group": - return e.ResolveFileFieldsGroup(&e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "signal.target.parent.interpreter.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "signal.target.parent.interpreter.file.inode": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil - case "signal.target.parent.interpreter.file.mode": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil - case "signal.target.parent.interpreter.file.modification_time": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil - case "signal.target.parent.interpreter.file.mount_id": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil - case "signal.target.parent.interpreter.file.name": - return e.ResolveFileBasename(&e.Signal.Target.Parent.LinuxBinprm.FileEvent), nil - case "signal.target.parent.interpreter.file.name.length": - return e.ResolveFileBasename(&e.Signal.Target.Parent.LinuxBinprm.FileEvent), nil - case "signal.target.parent.interpreter.file.path": - return e.ResolveFilePath(&e.Signal.Target.Parent.LinuxBinprm.FileEvent), nil - case "signal.target.parent.interpreter.file.path.length": - return e.ResolveFilePath(&e.Signal.Target.Parent.LinuxBinprm.FileEvent), nil - case "signal.target.parent.interpreter.file.rights": - return int(e.ResolveRights(&e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields)), nil - case "signal.target.parent.interpreter.file.uid": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil - case "signal.target.parent.interpreter.file.user": - return e.ResolveFileFieldsUser(&e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields), nil - case "signal.target.parent.is_kworker": - return e.Signal.Target.Parent.PIDContext.IsKworker, nil - case "signal.target.parent.is_thread": - return e.Signal.Target.Parent.IsThread, nil - case "signal.target.parent.pid": - return int(e.Signal.Target.Parent.PIDContext.Pid), nil - case "signal.target.parent.ppid": - return int(e.Signal.Target.Parent.PPid), nil - case "signal.target.parent.tid": - return int(e.Signal.Target.Parent.PIDContext.Tid), nil - case "signal.target.parent.tty_name": - return e.Signal.Target.Parent.TTYName, nil - case "signal.target.parent.uid": - return int(e.Signal.Target.Parent.Credentials.UID), nil - case "signal.target.parent.user": - return e.Signal.Target.Parent.Credentials.User, nil - case "signal.target.pid": - return int(e.Signal.Target.Process.PIDContext.Pid), nil - case "signal.target.ppid": - return int(e.Signal.Target.Process.PPid), nil - case "signal.target.tid": - return int(e.Signal.Target.Process.PIDContext.Tid), nil - case "signal.target.tty_name": - return e.Signal.Target.Process.TTYName, nil - case "signal.target.uid": - return int(e.Signal.Target.Process.Credentials.UID), nil - case "signal.target.user": - return e.Signal.Target.Process.Credentials.User, nil - case "signal.type": - return int(e.Signal.Type), nil - case "splice.file.change_time": - return int(e.Splice.File.FileFields.CTime), nil - case "splice.file.filesystem": - return e.ResolveFileFilesystem(&e.Splice.File), nil - case "splice.file.gid": - return int(e.Splice.File.FileFields.GID), nil - case "splice.file.group": - return e.ResolveFileFieldsGroup(&e.Splice.File.FileFields), nil - case "splice.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Splice.File.FileFields), nil - case "splice.file.inode": - return int(e.Splice.File.FileFields.Inode), nil - case "splice.file.mode": - return int(e.Splice.File.FileFields.Mode), nil - case "splice.file.modification_time": - return int(e.Splice.File.FileFields.MTime), nil - case "splice.file.mount_id": - return int(e.Splice.File.FileFields.MountID), nil - case "splice.file.name": - return e.ResolveFileBasename(&e.Splice.File), nil - case "splice.file.name.length": - return e.ResolveFileBasename(&e.Splice.File), nil - case "splice.file.path": - return e.ResolveFilePath(&e.Splice.File), nil - case "splice.file.path.length": - return e.ResolveFilePath(&e.Splice.File), nil - case "splice.file.rights": - return int(e.ResolveRights(&e.Splice.File.FileFields)), nil - case "splice.file.uid": - return int(e.Splice.File.FileFields.UID), nil - case "splice.file.user": - return e.ResolveFileFieldsUser(&e.Splice.File.FileFields), nil - case "splice.pipe_entry_flag": - return int(e.Splice.PipeEntryFlag), nil - case "splice.pipe_exit_flag": - return int(e.Splice.PipeExitFlag), nil - case "splice.retval": - return int(e.Splice.SyscallEvent.Retval), nil - case "unlink.file.change_time": - return int(e.Unlink.File.FileFields.CTime), nil - case "unlink.file.filesystem": - return e.ResolveFileFilesystem(&e.Unlink.File), nil - case "unlink.file.gid": - return int(e.Unlink.File.FileFields.GID), nil - case "unlink.file.group": - return e.ResolveFileFieldsGroup(&e.Unlink.File.FileFields), nil - case "unlink.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Unlink.File.FileFields), nil - case "unlink.file.inode": - return int(e.Unlink.File.FileFields.Inode), nil - case "unlink.file.mode": - return int(e.Unlink.File.FileFields.Mode), nil - case "unlink.file.modification_time": - return int(e.Unlink.File.FileFields.MTime), nil - case "unlink.file.mount_id": - return int(e.Unlink.File.FileFields.MountID), nil - case "unlink.file.name": - return e.ResolveFileBasename(&e.Unlink.File), nil - case "unlink.file.name.length": - return e.ResolveFileBasename(&e.Unlink.File), nil - case "unlink.file.path": - return e.ResolveFilePath(&e.Unlink.File), nil - case "unlink.file.path.length": - return e.ResolveFilePath(&e.Unlink.File), nil - case "unlink.file.rights": - return int(e.ResolveRights(&e.Unlink.File.FileFields)), nil - case "unlink.file.uid": - return int(e.Unlink.File.FileFields.UID), nil - case "unlink.file.user": - return e.ResolveFileFieldsUser(&e.Unlink.File.FileFields), nil - case "unlink.flags": - return int(e.Unlink.Flags), nil - case "unlink.retval": - return int(e.Unlink.SyscallEvent.Retval), nil - case "unload_module.name": - return e.UnloadModule.Name, nil - case "unload_module.retval": - return int(e.UnloadModule.SyscallEvent.Retval), nil - case "utimes.file.change_time": - return int(e.Utimes.File.FileFields.CTime), nil - case "utimes.file.filesystem": - return e.ResolveFileFilesystem(&e.Utimes.File), nil - case "utimes.file.gid": - return int(e.Utimes.File.FileFields.GID), nil - case "utimes.file.group": - return e.ResolveFileFieldsGroup(&e.Utimes.File.FileFields), nil - case "utimes.file.in_upper_layer": - return e.ResolveFileFieldsInUpperLayer(&e.Utimes.File.FileFields), nil - case "utimes.file.inode": - return int(e.Utimes.File.FileFields.Inode), nil - case "utimes.file.mode": - return int(e.Utimes.File.FileFields.Mode), nil - case "utimes.file.modification_time": - return int(e.Utimes.File.FileFields.MTime), nil - case "utimes.file.mount_id": - return int(e.Utimes.File.FileFields.MountID), nil - case "utimes.file.name": - return e.ResolveFileBasename(&e.Utimes.File), nil - case "utimes.file.name.length": - return e.ResolveFileBasename(&e.Utimes.File), nil - case "utimes.file.path": - return e.ResolveFilePath(&e.Utimes.File), nil - case "utimes.file.path.length": - return e.ResolveFilePath(&e.Utimes.File), nil - case "utimes.file.rights": - return int(e.ResolveRights(&e.Utimes.File.FileFields)), nil - case "utimes.file.uid": - return int(e.Utimes.File.FileFields.UID), nil - case "utimes.file.user": - return e.ResolveFileFieldsUser(&e.Utimes.File.FileFields), nil - case "utimes.retval": - return int(e.Utimes.SyscallEvent.Retval), nil - } - return nil, &eval.ErrFieldNotFound{Field: field} -} -func (e *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { - switch field { - case "async": - return "*", nil - case "bind.addr.family": - return "bind", nil - case "bind.addr.ip": - return "bind", nil - case "bind.addr.port": - return "bind", nil - case "bind.retval": - return "bind", nil - case "bpf.cmd": - return "bpf", nil - case "bpf.map.name": - return "bpf", nil - case "bpf.map.type": - return "bpf", nil - case "bpf.prog.attach_type": - return "bpf", nil - case "bpf.prog.helpers": - return "bpf", nil - case "bpf.prog.name": - return "bpf", nil - case "bpf.prog.tag": - return "bpf", nil - case "bpf.prog.type": - return "bpf", nil - case "bpf.retval": - return "bpf", nil - case "capset.cap_effective": - return "capset", nil - case "capset.cap_permitted": - return "capset", nil - case "chmod.file.change_time": - return "chmod", nil - case "chmod.file.destination.mode": - return "chmod", nil - case "chmod.file.destination.rights": - return "chmod", nil - case "chmod.file.filesystem": - return "chmod", nil - case "chmod.file.gid": - return "chmod", nil - case "chmod.file.group": - return "chmod", nil - case "chmod.file.in_upper_layer": - return "chmod", nil - case "chmod.file.inode": - return "chmod", nil - case "chmod.file.mode": - return "chmod", nil - case "chmod.file.modification_time": - return "chmod", nil - case "chmod.file.mount_id": - return "chmod", nil - case "chmod.file.name": - return "chmod", nil - case "chmod.file.name.length": - return "chmod", nil - case "chmod.file.path": - return "chmod", nil - case "chmod.file.path.length": - return "chmod", nil - case "chmod.file.rights": - return "chmod", nil - case "chmod.file.uid": - return "chmod", nil - case "chmod.file.user": - return "chmod", nil - case "chmod.retval": - return "chmod", nil - case "chown.file.change_time": - return "chown", nil - case "chown.file.destination.gid": - return "chown", nil - case "chown.file.destination.group": - return "chown", nil - case "chown.file.destination.uid": - return "chown", nil - case "chown.file.destination.user": - return "chown", nil - case "chown.file.filesystem": - return "chown", nil - case "chown.file.gid": - return "chown", nil - case "chown.file.group": - return "chown", nil - case "chown.file.in_upper_layer": - return "chown", nil - case "chown.file.inode": - return "chown", nil - case "chown.file.mode": - return "chown", nil - case "chown.file.modification_time": - return "chown", nil - case "chown.file.mount_id": - return "chown", nil - case "chown.file.name": - return "chown", nil - case "chown.file.name.length": - return "chown", nil - case "chown.file.path": - return "chown", nil - case "chown.file.path.length": - return "chown", nil - case "chown.file.rights": - return "chown", nil - case "chown.file.uid": - return "chown", nil - case "chown.file.user": - return "chown", nil - case "chown.retval": - return "chown", nil - case "container.id": - return "*", nil - case "container.tags": - return "*", nil - case "dns.id": - return "dns", nil - case "dns.question.class": - return "dns", nil - case "dns.question.count": - return "dns", nil - case "dns.question.length": - return "dns", nil - case "dns.question.name": - return "dns", nil - case "dns.question.name.length": - return "dns", nil - case "dns.question.type": - return "dns", nil - case "exec.args": - return "exec", nil - case "exec.args_flags": - return "exec", nil - case "exec.args_options": - return "exec", nil - case "exec.args_truncated": - return "exec", nil - case "exec.argv": - return "exec", nil - case "exec.argv0": - return "exec", nil - case "exec.cap_effective": - return "exec", nil - case "exec.cap_permitted": - return "exec", nil - case "exec.comm": - return "exec", nil - case "exec.container.id": - return "exec", nil - case "exec.cookie": - return "exec", nil - case "exec.created_at": - return "exec", nil - case "exec.egid": - return "exec", nil - case "exec.egroup": - return "exec", nil - case "exec.envp": - return "exec", nil - case "exec.envs": - return "exec", nil - case "exec.envs_truncated": - return "exec", nil - case "exec.euid": - return "exec", nil - case "exec.euser": - return "exec", nil - case "exec.file.change_time": - return "exec", nil - case "exec.file.filesystem": - return "exec", nil - case "exec.file.gid": - return "exec", nil - case "exec.file.group": - return "exec", nil - case "exec.file.in_upper_layer": - return "exec", nil - case "exec.file.inode": - return "exec", nil - case "exec.file.mode": - return "exec", nil - case "exec.file.modification_time": - return "exec", nil - case "exec.file.mount_id": - return "exec", nil - case "exec.file.name": - return "exec", nil - case "exec.file.name.length": - return "exec", nil - case "exec.file.path": - return "exec", nil - case "exec.file.path.length": - return "exec", nil - case "exec.file.rights": - return "exec", nil - case "exec.file.uid": - return "exec", nil - case "exec.file.user": - return "exec", nil - case "exec.fsgid": - return "exec", nil - case "exec.fsgroup": - return "exec", nil - case "exec.fsuid": - return "exec", nil - case "exec.fsuser": - return "exec", nil - case "exec.gid": - return "exec", nil - case "exec.group": - return "exec", nil - case "exec.interpreter.file.change_time": - return "exec", nil - case "exec.interpreter.file.filesystem": - return "exec", nil - case "exec.interpreter.file.gid": - return "exec", nil - case "exec.interpreter.file.group": - return "exec", nil - case "exec.interpreter.file.in_upper_layer": - return "exec", nil - case "exec.interpreter.file.inode": - return "exec", nil - case "exec.interpreter.file.mode": - return "exec", nil - case "exec.interpreter.file.modification_time": - return "exec", nil - case "exec.interpreter.file.mount_id": - return "exec", nil - case "exec.interpreter.file.name": - return "exec", nil - case "exec.interpreter.file.name.length": - return "exec", nil - case "exec.interpreter.file.path": - return "exec", nil - case "exec.interpreter.file.path.length": - return "exec", nil - case "exec.interpreter.file.rights": - return "exec", nil - case "exec.interpreter.file.uid": - return "exec", nil - case "exec.interpreter.file.user": - return "exec", nil - case "exec.is_kworker": - return "exec", nil - case "exec.is_thread": - return "exec", nil - case "exec.pid": - return "exec", nil - case "exec.ppid": - return "exec", nil - case "exec.tid": - return "exec", nil - case "exec.tty_name": - return "exec", nil - case "exec.uid": - return "exec", nil - case "exec.user": - return "exec", nil - case "exit.args": - return "exit", nil - case "exit.args_flags": - return "exit", nil - case "exit.args_options": - return "exit", nil - case "exit.args_truncated": - return "exit", nil - case "exit.argv": - return "exit", nil - case "exit.argv0": - return "exit", nil - case "exit.cap_effective": - return "exit", nil - case "exit.cap_permitted": - return "exit", nil - case "exit.cause": - return "exit", nil - case "exit.code": - return "exit", nil - case "exit.comm": - return "exit", nil - case "exit.container.id": - return "exit", nil - case "exit.cookie": - return "exit", nil - case "exit.created_at": - return "exit", nil - case "exit.egid": - return "exit", nil - case "exit.egroup": - return "exit", nil - case "exit.envp": - return "exit", nil - case "exit.envs": - return "exit", nil - case "exit.envs_truncated": - return "exit", nil - case "exit.euid": - return "exit", nil - case "exit.euser": - return "exit", nil - case "exit.file.change_time": - return "exit", nil - case "exit.file.filesystem": - return "exit", nil - case "exit.file.gid": - return "exit", nil - case "exit.file.group": - return "exit", nil - case "exit.file.in_upper_layer": - return "exit", nil - case "exit.file.inode": - return "exit", nil - case "exit.file.mode": - return "exit", nil - case "exit.file.modification_time": - return "exit", nil - case "exit.file.mount_id": - return "exit", nil - case "exit.file.name": - return "exit", nil - case "exit.file.name.length": - return "exit", nil - case "exit.file.path": - return "exit", nil - case "exit.file.path.length": - return "exit", nil - case "exit.file.rights": - return "exit", nil - case "exit.file.uid": - return "exit", nil - case "exit.file.user": - return "exit", nil - case "exit.fsgid": - return "exit", nil - case "exit.fsgroup": - return "exit", nil - case "exit.fsuid": - return "exit", nil - case "exit.fsuser": - return "exit", nil - case "exit.gid": - return "exit", nil - case "exit.group": - return "exit", nil - case "exit.interpreter.file.change_time": - return "exit", nil - case "exit.interpreter.file.filesystem": - return "exit", nil - case "exit.interpreter.file.gid": - return "exit", nil - case "exit.interpreter.file.group": - return "exit", nil - case "exit.interpreter.file.in_upper_layer": - return "exit", nil - case "exit.interpreter.file.inode": - return "exit", nil - case "exit.interpreter.file.mode": - return "exit", nil - case "exit.interpreter.file.modification_time": - return "exit", nil - case "exit.interpreter.file.mount_id": - return "exit", nil - case "exit.interpreter.file.name": - return "exit", nil - case "exit.interpreter.file.name.length": - return "exit", nil - case "exit.interpreter.file.path": - return "exit", nil - case "exit.interpreter.file.path.length": - return "exit", nil - case "exit.interpreter.file.rights": - return "exit", nil - case "exit.interpreter.file.uid": - return "exit", nil - case "exit.interpreter.file.user": - return "exit", nil - case "exit.is_kworker": - return "exit", nil - case "exit.is_thread": - return "exit", nil - case "exit.pid": - return "exit", nil - case "exit.ppid": - return "exit", nil - case "exit.tid": - return "exit", nil - case "exit.tty_name": - return "exit", nil - case "exit.uid": - return "exit", nil - case "exit.user": - return "exit", nil - case "link.file.change_time": - return "link", nil - case "link.file.destination.change_time": - return "link", nil - case "link.file.destination.filesystem": - return "link", nil - case "link.file.destination.gid": - return "link", nil - case "link.file.destination.group": - return "link", nil - case "link.file.destination.in_upper_layer": - return "link", nil - case "link.file.destination.inode": - return "link", nil - case "link.file.destination.mode": - return "link", nil - case "link.file.destination.modification_time": - return "link", nil - case "link.file.destination.mount_id": - return "link", nil - case "link.file.destination.name": - return "link", nil - case "link.file.destination.name.length": - return "link", nil - case "link.file.destination.path": - return "link", nil - case "link.file.destination.path.length": - return "link", nil - case "link.file.destination.rights": - return "link", nil - case "link.file.destination.uid": - return "link", nil - case "link.file.destination.user": - return "link", nil - case "link.file.filesystem": - return "link", nil - case "link.file.gid": - return "link", nil - case "link.file.group": - return "link", nil - case "link.file.in_upper_layer": - return "link", nil - case "link.file.inode": - return "link", nil - case "link.file.mode": - return "link", nil - case "link.file.modification_time": - return "link", nil - case "link.file.mount_id": - return "link", nil - case "link.file.name": - return "link", nil - case "link.file.name.length": - return "link", nil - case "link.file.path": - return "link", nil - case "link.file.path.length": - return "link", nil - case "link.file.rights": - return "link", nil - case "link.file.uid": - return "link", nil - case "link.file.user": - return "link", nil - case "link.retval": - return "link", nil - case "load_module.file.change_time": - return "load_module", nil - case "load_module.file.filesystem": - return "load_module", nil - case "load_module.file.gid": - return "load_module", nil - case "load_module.file.group": - return "load_module", nil - case "load_module.file.in_upper_layer": - return "load_module", nil - case "load_module.file.inode": - return "load_module", nil - case "load_module.file.mode": - return "load_module", nil - case "load_module.file.modification_time": - return "load_module", nil - case "load_module.file.mount_id": - return "load_module", nil - case "load_module.file.name": - return "load_module", nil - case "load_module.file.name.length": - return "load_module", nil - case "load_module.file.path": - return "load_module", nil - case "load_module.file.path.length": - return "load_module", nil - case "load_module.file.rights": - return "load_module", nil - case "load_module.file.uid": - return "load_module", nil - case "load_module.file.user": - return "load_module", nil - case "load_module.loaded_from_memory": - return "load_module", nil - case "load_module.name": - return "load_module", nil - case "load_module.retval": - return "load_module", nil - case "mkdir.file.change_time": - return "mkdir", nil - case "mkdir.file.destination.mode": - return "mkdir", nil - case "mkdir.file.destination.rights": - return "mkdir", nil - case "mkdir.file.filesystem": - return "mkdir", nil - case "mkdir.file.gid": - return "mkdir", nil - case "mkdir.file.group": - return "mkdir", nil - case "mkdir.file.in_upper_layer": - return "mkdir", nil - case "mkdir.file.inode": - return "mkdir", nil - case "mkdir.file.mode": - return "mkdir", nil - case "mkdir.file.modification_time": - return "mkdir", nil - case "mkdir.file.mount_id": - return "mkdir", nil - case "mkdir.file.name": - return "mkdir", nil - case "mkdir.file.name.length": - return "mkdir", nil - case "mkdir.file.path": - return "mkdir", nil - case "mkdir.file.path.length": - return "mkdir", nil - case "mkdir.file.rights": - return "mkdir", nil - case "mkdir.file.uid": - return "mkdir", nil - case "mkdir.file.user": - return "mkdir", nil - case "mkdir.retval": - return "mkdir", nil - case "mmap.file.change_time": - return "mmap", nil - case "mmap.file.filesystem": - return "mmap", nil - case "mmap.file.gid": - return "mmap", nil - case "mmap.file.group": - return "mmap", nil - case "mmap.file.in_upper_layer": - return "mmap", nil - case "mmap.file.inode": - return "mmap", nil - case "mmap.file.mode": - return "mmap", nil - case "mmap.file.modification_time": - return "mmap", nil - case "mmap.file.mount_id": - return "mmap", nil - case "mmap.file.name": - return "mmap", nil - case "mmap.file.name.length": - return "mmap", nil - case "mmap.file.path": - return "mmap", nil - case "mmap.file.path.length": - return "mmap", nil - case "mmap.file.rights": - return "mmap", nil - case "mmap.file.uid": - return "mmap", nil - case "mmap.file.user": - return "mmap", nil - case "mmap.flags": - return "mmap", nil - case "mmap.protection": - return "mmap", nil - case "mmap.retval": - return "mmap", nil - case "mount.fs_type": - return "mount", nil - case "mount.mountpoint.path": - return "mount", nil - case "mount.retval": - return "mount", nil - case "mount.source.path": - return "mount", nil - case "mprotect.req_protection": - return "mprotect", nil - case "mprotect.retval": - return "mprotect", nil - case "mprotect.vm_protection": - return "mprotect", nil - case "network.destination.ip": - return "*", nil - case "network.destination.port": - return "*", nil - case "network.device.ifindex": - return "*", nil - case "network.device.ifname": - return "*", nil - case "network.l3_protocol": - return "*", nil - case "network.l4_protocol": - return "*", nil - case "network.size": - return "*", nil - case "network.source.ip": - return "*", nil - case "network.source.port": - return "*", nil - case "open.file.change_time": - return "open", nil - case "open.file.destination.mode": - return "open", nil - case "open.file.filesystem": - return "open", nil - case "open.file.gid": - return "open", nil - case "open.file.group": - return "open", nil - case "open.file.in_upper_layer": - return "open", nil - case "open.file.inode": - return "open", nil - case "open.file.mode": - return "open", nil - case "open.file.modification_time": - return "open", nil - case "open.file.mount_id": - return "open", nil - case "open.file.name": - return "open", nil - case "open.file.name.length": - return "open", nil - case "open.file.path": - return "open", nil - case "open.file.path.length": - return "open", nil - case "open.file.rights": - return "open", nil - case "open.file.uid": - return "open", nil - case "open.file.user": - return "open", nil - case "open.flags": - return "open", nil - case "open.retval": - return "open", nil - case "process.ancestors.args": - return "*", nil - case "process.ancestors.args_flags": - return "*", nil - case "process.ancestors.args_options": - return "*", nil - case "process.ancestors.args_truncated": - return "*", nil - case "process.ancestors.argv": - return "*", nil - case "process.ancestors.argv0": - return "*", nil - case "process.ancestors.cap_effective": - return "*", nil - case "process.ancestors.cap_permitted": - return "*", nil - case "process.ancestors.comm": - return "*", nil - case "process.ancestors.container.id": - return "*", nil - case "process.ancestors.cookie": - return "*", nil - case "process.ancestors.created_at": - return "*", nil - case "process.ancestors.egid": - return "*", nil - case "process.ancestors.egroup": - return "*", nil - case "process.ancestors.envp": - return "*", nil - case "process.ancestors.envs": - return "*", nil - case "process.ancestors.envs_truncated": - return "*", nil - case "process.ancestors.euid": - return "*", nil - case "process.ancestors.euser": - return "*", nil - case "process.ancestors.file.change_time": - return "*", nil - case "process.ancestors.file.filesystem": - return "*", nil - case "process.ancestors.file.gid": - return "*", nil - case "process.ancestors.file.group": - return "*", nil - case "process.ancestors.file.in_upper_layer": - return "*", nil - case "process.ancestors.file.inode": - return "*", nil - case "process.ancestors.file.mode": - return "*", nil - case "process.ancestors.file.modification_time": - return "*", nil - case "process.ancestors.file.mount_id": - return "*", nil - case "process.ancestors.file.name": - return "*", nil - case "process.ancestors.file.name.length": - return "*", nil - case "process.ancestors.file.path": - return "*", nil - case "process.ancestors.file.path.length": - return "*", nil - case "process.ancestors.file.rights": - return "*", nil - case "process.ancestors.file.uid": - return "*", nil - case "process.ancestors.file.user": - return "*", nil - case "process.ancestors.fsgid": - return "*", nil - case "process.ancestors.fsgroup": - return "*", nil - case "process.ancestors.fsuid": - return "*", nil - case "process.ancestors.fsuser": - return "*", nil - case "process.ancestors.gid": - return "*", nil - case "process.ancestors.group": - return "*", nil - case "process.ancestors.interpreter.file.change_time": - return "*", nil - case "process.ancestors.interpreter.file.filesystem": - return "*", nil - case "process.ancestors.interpreter.file.gid": - return "*", nil - case "process.ancestors.interpreter.file.group": - return "*", nil - case "process.ancestors.interpreter.file.in_upper_layer": - return "*", nil - case "process.ancestors.interpreter.file.inode": - return "*", nil - case "process.ancestors.interpreter.file.mode": - return "*", nil - case "process.ancestors.interpreter.file.modification_time": - return "*", nil - case "process.ancestors.interpreter.file.mount_id": - return "*", nil - case "process.ancestors.interpreter.file.name": - return "*", nil - case "process.ancestors.interpreter.file.name.length": - return "*", nil - case "process.ancestors.interpreter.file.path": - return "*", nil - case "process.ancestors.interpreter.file.path.length": - return "*", nil - case "process.ancestors.interpreter.file.rights": - return "*", nil - case "process.ancestors.interpreter.file.uid": - return "*", nil - case "process.ancestors.interpreter.file.user": - return "*", nil - case "process.ancestors.is_kworker": - return "*", nil - case "process.ancestors.is_thread": - return "*", nil - case "process.ancestors.pid": - return "*", nil - case "process.ancestors.ppid": - return "*", nil - case "process.ancestors.tid": - return "*", nil - case "process.ancestors.tty_name": - return "*", nil - case "process.ancestors.uid": - return "*", nil - case "process.ancestors.user": - return "*", nil - case "process.args": - return "*", nil - case "process.args_flags": - return "*", nil - case "process.args_options": - return "*", nil - case "process.args_truncated": - return "*", nil - case "process.argv": - return "*", nil - case "process.argv0": - return "*", nil - case "process.cap_effective": - return "*", nil - case "process.cap_permitted": - return "*", nil - case "process.comm": - return "*", nil - case "process.container.id": - return "*", nil - case "process.cookie": - return "*", nil - case "process.created_at": - return "*", nil - case "process.egid": - return "*", nil - case "process.egroup": - return "*", nil - case "process.envp": - return "*", nil - case "process.envs": - return "*", nil - case "process.envs_truncated": - return "*", nil - case "process.euid": - return "*", nil - case "process.euser": - return "*", nil - case "process.file.change_time": - return "*", nil - case "process.file.filesystem": - return "*", nil - case "process.file.gid": - return "*", nil - case "process.file.group": - return "*", nil - case "process.file.in_upper_layer": - return "*", nil - case "process.file.inode": - return "*", nil - case "process.file.mode": - return "*", nil - case "process.file.modification_time": - return "*", nil - case "process.file.mount_id": - return "*", nil - case "process.file.name": - return "*", nil - case "process.file.name.length": - return "*", nil - case "process.file.path": - return "*", nil - case "process.file.path.length": - return "*", nil - case "process.file.rights": - return "*", nil - case "process.file.uid": - return "*", nil - case "process.file.user": - return "*", nil - case "process.fsgid": - return "*", nil - case "process.fsgroup": - return "*", nil - case "process.fsuid": - return "*", nil - case "process.fsuser": - return "*", nil - case "process.gid": - return "*", nil - case "process.group": - return "*", nil - case "process.interpreter.file.change_time": - return "*", nil - case "process.interpreter.file.filesystem": - return "*", nil - case "process.interpreter.file.gid": - return "*", nil - case "process.interpreter.file.group": - return "*", nil - case "process.interpreter.file.in_upper_layer": - return "*", nil - case "process.interpreter.file.inode": - return "*", nil - case "process.interpreter.file.mode": - return "*", nil - case "process.interpreter.file.modification_time": - return "*", nil - case "process.interpreter.file.mount_id": - return "*", nil - case "process.interpreter.file.name": - return "*", nil - case "process.interpreter.file.name.length": - return "*", nil - case "process.interpreter.file.path": - return "*", nil - case "process.interpreter.file.path.length": - return "*", nil - case "process.interpreter.file.rights": - return "*", nil - case "process.interpreter.file.uid": - return "*", nil - case "process.interpreter.file.user": - return "*", nil - case "process.is_kworker": - return "*", nil - case "process.is_thread": - return "*", nil - case "process.parent.args": - return "*", nil - case "process.parent.args_flags": - return "*", nil - case "process.parent.args_options": - return "*", nil - case "process.parent.args_truncated": - return "*", nil - case "process.parent.argv": - return "*", nil - case "process.parent.argv0": - return "*", nil - case "process.parent.cap_effective": - return "*", nil - case "process.parent.cap_permitted": - return "*", nil - case "process.parent.comm": - return "*", nil - case "process.parent.container.id": - return "*", nil - case "process.parent.cookie": - return "*", nil - case "process.parent.created_at": - return "*", nil - case "process.parent.egid": - return "*", nil - case "process.parent.egroup": - return "*", nil - case "process.parent.envp": - return "*", nil - case "process.parent.envs": - return "*", nil - case "process.parent.envs_truncated": - return "*", nil - case "process.parent.euid": - return "*", nil - case "process.parent.euser": - return "*", nil - case "process.parent.file.change_time": - return "*", nil - case "process.parent.file.filesystem": - return "*", nil - case "process.parent.file.gid": - return "*", nil - case "process.parent.file.group": - return "*", nil - case "process.parent.file.in_upper_layer": - return "*", nil - case "process.parent.file.inode": - return "*", nil - case "process.parent.file.mode": - return "*", nil - case "process.parent.file.modification_time": - return "*", nil - case "process.parent.file.mount_id": - return "*", nil - case "process.parent.file.name": - return "*", nil - case "process.parent.file.name.length": - return "*", nil - case "process.parent.file.path": - return "*", nil - case "process.parent.file.path.length": - return "*", nil - case "process.parent.file.rights": - return "*", nil - case "process.parent.file.uid": - return "*", nil - case "process.parent.file.user": - return "*", nil - case "process.parent.fsgid": - return "*", nil - case "process.parent.fsgroup": - return "*", nil - case "process.parent.fsuid": - return "*", nil - case "process.parent.fsuser": - return "*", nil - case "process.parent.gid": - return "*", nil - case "process.parent.group": - return "*", nil - case "process.parent.interpreter.file.change_time": - return "*", nil - case "process.parent.interpreter.file.filesystem": - return "*", nil - case "process.parent.interpreter.file.gid": - return "*", nil - case "process.parent.interpreter.file.group": - return "*", nil - case "process.parent.interpreter.file.in_upper_layer": - return "*", nil - case "process.parent.interpreter.file.inode": - return "*", nil - case "process.parent.interpreter.file.mode": - return "*", nil - case "process.parent.interpreter.file.modification_time": - return "*", nil - case "process.parent.interpreter.file.mount_id": - return "*", nil - case "process.parent.interpreter.file.name": - return "*", nil - case "process.parent.interpreter.file.name.length": - return "*", nil - case "process.parent.interpreter.file.path": - return "*", nil - case "process.parent.interpreter.file.path.length": - return "*", nil - case "process.parent.interpreter.file.rights": - return "*", nil - case "process.parent.interpreter.file.uid": - return "*", nil - case "process.parent.interpreter.file.user": - return "*", nil - case "process.parent.is_kworker": - return "*", nil - case "process.parent.is_thread": - return "*", nil - case "process.parent.pid": - return "*", nil - case "process.parent.ppid": - return "*", nil - case "process.parent.tid": - return "*", nil - case "process.parent.tty_name": - return "*", nil - case "process.parent.uid": - return "*", nil - case "process.parent.user": - return "*", nil - case "process.pid": - return "*", nil - case "process.ppid": - return "*", nil - case "process.tid": - return "*", nil - case "process.tty_name": - return "*", nil - case "process.uid": - return "*", nil - case "process.user": - return "*", nil - case "ptrace.request": - return "ptrace", nil - case "ptrace.retval": - return "ptrace", nil - case "ptrace.tracee.ancestors.args": - return "ptrace", nil - case "ptrace.tracee.ancestors.args_flags": - return "ptrace", nil - case "ptrace.tracee.ancestors.args_options": - return "ptrace", nil - case "ptrace.tracee.ancestors.args_truncated": - return "ptrace", nil - case "ptrace.tracee.ancestors.argv": - return "ptrace", nil - case "ptrace.tracee.ancestors.argv0": - return "ptrace", nil - case "ptrace.tracee.ancestors.cap_effective": - return "ptrace", nil - case "ptrace.tracee.ancestors.cap_permitted": - return "ptrace", nil - case "ptrace.tracee.ancestors.comm": - return "ptrace", nil - case "ptrace.tracee.ancestors.container.id": - return "ptrace", nil - case "ptrace.tracee.ancestors.cookie": - return "ptrace", nil - case "ptrace.tracee.ancestors.created_at": - return "ptrace", nil - case "ptrace.tracee.ancestors.egid": - return "ptrace", nil - case "ptrace.tracee.ancestors.egroup": - return "ptrace", nil - case "ptrace.tracee.ancestors.envp": - return "ptrace", nil - case "ptrace.tracee.ancestors.envs": - return "ptrace", nil - case "ptrace.tracee.ancestors.envs_truncated": - return "ptrace", nil - case "ptrace.tracee.ancestors.euid": - return "ptrace", nil - case "ptrace.tracee.ancestors.euser": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.change_time": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.filesystem": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.gid": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.group": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.in_upper_layer": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.inode": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.mode": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.modification_time": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.mount_id": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.name": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.name.length": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.path": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.path.length": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.rights": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.uid": - return "ptrace", nil - case "ptrace.tracee.ancestors.file.user": - return "ptrace", nil - case "ptrace.tracee.ancestors.fsgid": - return "ptrace", nil - case "ptrace.tracee.ancestors.fsgroup": - return "ptrace", nil - case "ptrace.tracee.ancestors.fsuid": - return "ptrace", nil - case "ptrace.tracee.ancestors.fsuser": - return "ptrace", nil - case "ptrace.tracee.ancestors.gid": - return "ptrace", nil - case "ptrace.tracee.ancestors.group": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.change_time": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.filesystem": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.gid": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.group": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.inode": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.mode": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.modification_time": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.mount_id": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.name": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.name.length": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.path": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.path.length": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.rights": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.uid": - return "ptrace", nil - case "ptrace.tracee.ancestors.interpreter.file.user": - return "ptrace", nil - case "ptrace.tracee.ancestors.is_kworker": - return "ptrace", nil - case "ptrace.tracee.ancestors.is_thread": - return "ptrace", nil - case "ptrace.tracee.ancestors.pid": - return "ptrace", nil - case "ptrace.tracee.ancestors.ppid": - return "ptrace", nil - case "ptrace.tracee.ancestors.tid": - return "ptrace", nil - case "ptrace.tracee.ancestors.tty_name": - return "ptrace", nil - case "ptrace.tracee.ancestors.uid": - return "ptrace", nil - case "ptrace.tracee.ancestors.user": - return "ptrace", nil - case "ptrace.tracee.args": - return "ptrace", nil - case "ptrace.tracee.args_flags": - return "ptrace", nil - case "ptrace.tracee.args_options": - return "ptrace", nil - case "ptrace.tracee.args_truncated": - return "ptrace", nil - case "ptrace.tracee.argv": - return "ptrace", nil - case "ptrace.tracee.argv0": - return "ptrace", nil - case "ptrace.tracee.cap_effective": - return "ptrace", nil - case "ptrace.tracee.cap_permitted": - return "ptrace", nil - case "ptrace.tracee.comm": - return "ptrace", nil - case "ptrace.tracee.container.id": - return "ptrace", nil - case "ptrace.tracee.cookie": - return "ptrace", nil - case "ptrace.tracee.created_at": - return "ptrace", nil - case "ptrace.tracee.egid": - return "ptrace", nil - case "ptrace.tracee.egroup": - return "ptrace", nil - case "ptrace.tracee.envp": - return "ptrace", nil - case "ptrace.tracee.envs": - return "ptrace", nil - case "ptrace.tracee.envs_truncated": - return "ptrace", nil - case "ptrace.tracee.euid": - return "ptrace", nil - case "ptrace.tracee.euser": - return "ptrace", nil - case "ptrace.tracee.file.change_time": - return "ptrace", nil - case "ptrace.tracee.file.filesystem": - return "ptrace", nil - case "ptrace.tracee.file.gid": - return "ptrace", nil - case "ptrace.tracee.file.group": - return "ptrace", nil - case "ptrace.tracee.file.in_upper_layer": - return "ptrace", nil - case "ptrace.tracee.file.inode": - return "ptrace", nil - case "ptrace.tracee.file.mode": - return "ptrace", nil - case "ptrace.tracee.file.modification_time": - return "ptrace", nil - case "ptrace.tracee.file.mount_id": - return "ptrace", nil - case "ptrace.tracee.file.name": - return "ptrace", nil - case "ptrace.tracee.file.name.length": - return "ptrace", nil - case "ptrace.tracee.file.path": - return "ptrace", nil - case "ptrace.tracee.file.path.length": - return "ptrace", nil - case "ptrace.tracee.file.rights": - return "ptrace", nil - case "ptrace.tracee.file.uid": - return "ptrace", nil - case "ptrace.tracee.file.user": - return "ptrace", nil - case "ptrace.tracee.fsgid": - return "ptrace", nil - case "ptrace.tracee.fsgroup": - return "ptrace", nil - case "ptrace.tracee.fsuid": - return "ptrace", nil - case "ptrace.tracee.fsuser": - return "ptrace", nil - case "ptrace.tracee.gid": - return "ptrace", nil - case "ptrace.tracee.group": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.change_time": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.filesystem": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.gid": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.group": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.in_upper_layer": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.inode": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.mode": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.modification_time": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.mount_id": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.name": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.name.length": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.path": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.path.length": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.rights": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.uid": - return "ptrace", nil - case "ptrace.tracee.interpreter.file.user": - return "ptrace", nil - case "ptrace.tracee.is_kworker": - return "ptrace", nil - case "ptrace.tracee.is_thread": - return "ptrace", nil - case "ptrace.tracee.parent.args": - return "ptrace", nil - case "ptrace.tracee.parent.args_flags": - return "ptrace", nil - case "ptrace.tracee.parent.args_options": - return "ptrace", nil - case "ptrace.tracee.parent.args_truncated": - return "ptrace", nil - case "ptrace.tracee.parent.argv": - return "ptrace", nil - case "ptrace.tracee.parent.argv0": - return "ptrace", nil - case "ptrace.tracee.parent.cap_effective": - return "ptrace", nil - case "ptrace.tracee.parent.cap_permitted": - return "ptrace", nil - case "ptrace.tracee.parent.comm": - return "ptrace", nil - case "ptrace.tracee.parent.container.id": - return "ptrace", nil - case "ptrace.tracee.parent.cookie": - return "ptrace", nil - case "ptrace.tracee.parent.created_at": - return "ptrace", nil - case "ptrace.tracee.parent.egid": - return "ptrace", nil - case "ptrace.tracee.parent.egroup": - return "ptrace", nil - case "ptrace.tracee.parent.envp": - return "ptrace", nil - case "ptrace.tracee.parent.envs": - return "ptrace", nil - case "ptrace.tracee.parent.envs_truncated": - return "ptrace", nil - case "ptrace.tracee.parent.euid": - return "ptrace", nil - case "ptrace.tracee.parent.euser": - return "ptrace", nil - case "ptrace.tracee.parent.file.change_time": - return "ptrace", nil - case "ptrace.tracee.parent.file.filesystem": - return "ptrace", nil - case "ptrace.tracee.parent.file.gid": - return "ptrace", nil - case "ptrace.tracee.parent.file.group": - return "ptrace", nil - case "ptrace.tracee.parent.file.in_upper_layer": - return "ptrace", nil - case "ptrace.tracee.parent.file.inode": - return "ptrace", nil - case "ptrace.tracee.parent.file.mode": - return "ptrace", nil - case "ptrace.tracee.parent.file.modification_time": - return "ptrace", nil - case "ptrace.tracee.parent.file.mount_id": - return "ptrace", nil - case "ptrace.tracee.parent.file.name": - return "ptrace", nil - case "ptrace.tracee.parent.file.name.length": - return "ptrace", nil - case "ptrace.tracee.parent.file.path": - return "ptrace", nil - case "ptrace.tracee.parent.file.path.length": - return "ptrace", nil - case "ptrace.tracee.parent.file.rights": - return "ptrace", nil - case "ptrace.tracee.parent.file.uid": - return "ptrace", nil - case "ptrace.tracee.parent.file.user": - return "ptrace", nil - case "ptrace.tracee.parent.fsgid": - return "ptrace", nil - case "ptrace.tracee.parent.fsgroup": - return "ptrace", nil - case "ptrace.tracee.parent.fsuid": - return "ptrace", nil - case "ptrace.tracee.parent.fsuser": - return "ptrace", nil - case "ptrace.tracee.parent.gid": - return "ptrace", nil - case "ptrace.tracee.parent.group": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.change_time": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.filesystem": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.gid": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.group": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.inode": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.mode": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.modification_time": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.mount_id": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.name": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.name.length": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.path": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.path.length": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.rights": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.uid": - return "ptrace", nil - case "ptrace.tracee.parent.interpreter.file.user": - return "ptrace", nil - case "ptrace.tracee.parent.is_kworker": - return "ptrace", nil - case "ptrace.tracee.parent.is_thread": - return "ptrace", nil - case "ptrace.tracee.parent.pid": - return "ptrace", nil - case "ptrace.tracee.parent.ppid": - return "ptrace", nil - case "ptrace.tracee.parent.tid": - return "ptrace", nil - case "ptrace.tracee.parent.tty_name": - return "ptrace", nil - case "ptrace.tracee.parent.uid": - return "ptrace", nil - case "ptrace.tracee.parent.user": - return "ptrace", nil - case "ptrace.tracee.pid": - return "ptrace", nil - case "ptrace.tracee.ppid": - return "ptrace", nil - case "ptrace.tracee.tid": - return "ptrace", nil - case "ptrace.tracee.tty_name": - return "ptrace", nil - case "ptrace.tracee.uid": - return "ptrace", nil - case "ptrace.tracee.user": - return "ptrace", nil - case "removexattr.file.change_time": - return "removexattr", nil - case "removexattr.file.destination.name": - return "removexattr", nil - case "removexattr.file.destination.namespace": - return "removexattr", nil - case "removexattr.file.filesystem": - return "removexattr", nil - case "removexattr.file.gid": - return "removexattr", nil - case "removexattr.file.group": - return "removexattr", nil - case "removexattr.file.in_upper_layer": - return "removexattr", nil - case "removexattr.file.inode": - return "removexattr", nil - case "removexattr.file.mode": - return "removexattr", nil - case "removexattr.file.modification_time": - return "removexattr", nil - case "removexattr.file.mount_id": - return "removexattr", nil - case "removexattr.file.name": - return "removexattr", nil - case "removexattr.file.name.length": - return "removexattr", nil - case "removexattr.file.path": - return "removexattr", nil - case "removexattr.file.path.length": - return "removexattr", nil - case "removexattr.file.rights": - return "removexattr", nil - case "removexattr.file.uid": - return "removexattr", nil - case "removexattr.file.user": - return "removexattr", nil - case "removexattr.retval": - return "removexattr", nil - case "rename.file.change_time": - return "rename", nil - case "rename.file.destination.change_time": - return "rename", nil - case "rename.file.destination.filesystem": - return "rename", nil - case "rename.file.destination.gid": - return "rename", nil - case "rename.file.destination.group": - return "rename", nil - case "rename.file.destination.in_upper_layer": - return "rename", nil - case "rename.file.destination.inode": - return "rename", nil - case "rename.file.destination.mode": - return "rename", nil - case "rename.file.destination.modification_time": - return "rename", nil - case "rename.file.destination.mount_id": - return "rename", nil - case "rename.file.destination.name": - return "rename", nil - case "rename.file.destination.name.length": - return "rename", nil - case "rename.file.destination.path": - return "rename", nil - case "rename.file.destination.path.length": - return "rename", nil - case "rename.file.destination.rights": - return "rename", nil - case "rename.file.destination.uid": - return "rename", nil - case "rename.file.destination.user": - return "rename", nil - case "rename.file.filesystem": - return "rename", nil - case "rename.file.gid": - return "rename", nil - case "rename.file.group": - return "rename", nil - case "rename.file.in_upper_layer": - return "rename", nil - case "rename.file.inode": - return "rename", nil - case "rename.file.mode": - return "rename", nil - case "rename.file.modification_time": - return "rename", nil - case "rename.file.mount_id": - return "rename", nil - case "rename.file.name": - return "rename", nil - case "rename.file.name.length": - return "rename", nil - case "rename.file.path": - return "rename", nil - case "rename.file.path.length": - return "rename", nil - case "rename.file.rights": - return "rename", nil - case "rename.file.uid": - return "rename", nil - case "rename.file.user": - return "rename", nil - case "rename.retval": - return "rename", nil - case "rmdir.file.change_time": - return "rmdir", nil - case "rmdir.file.filesystem": - return "rmdir", nil - case "rmdir.file.gid": - return "rmdir", nil - case "rmdir.file.group": - return "rmdir", nil - case "rmdir.file.in_upper_layer": - return "rmdir", nil - case "rmdir.file.inode": - return "rmdir", nil - case "rmdir.file.mode": - return "rmdir", nil - case "rmdir.file.modification_time": - return "rmdir", nil - case "rmdir.file.mount_id": - return "rmdir", nil - case "rmdir.file.name": - return "rmdir", nil - case "rmdir.file.name.length": - return "rmdir", nil - case "rmdir.file.path": - return "rmdir", nil - case "rmdir.file.path.length": - return "rmdir", nil - case "rmdir.file.rights": - return "rmdir", nil - case "rmdir.file.uid": - return "rmdir", nil - case "rmdir.file.user": - return "rmdir", nil - case "rmdir.retval": - return "rmdir", nil - case "selinux.bool.name": - return "selinux", nil - case "selinux.bool.state": - return "selinux", nil - case "selinux.bool_commit.state": - return "selinux", nil - case "selinux.enforce.status": - return "selinux", nil - case "setgid.egid": - return "setgid", nil - case "setgid.egroup": - return "setgid", nil - case "setgid.fsgid": - return "setgid", nil - case "setgid.fsgroup": - return "setgid", nil - case "setgid.gid": - return "setgid", nil - case "setgid.group": - return "setgid", nil - case "setuid.euid": - return "setuid", nil - case "setuid.euser": - return "setuid", nil - case "setuid.fsuid": - return "setuid", nil - case "setuid.fsuser": - return "setuid", nil - case "setuid.uid": - return "setuid", nil - case "setuid.user": - return "setuid", nil - case "setxattr.file.change_time": - return "setxattr", nil - case "setxattr.file.destination.name": - return "setxattr", nil - case "setxattr.file.destination.namespace": - return "setxattr", nil - case "setxattr.file.filesystem": - return "setxattr", nil - case "setxattr.file.gid": - return "setxattr", nil - case "setxattr.file.group": - return "setxattr", nil - case "setxattr.file.in_upper_layer": - return "setxattr", nil - case "setxattr.file.inode": - return "setxattr", nil - case "setxattr.file.mode": - return "setxattr", nil - case "setxattr.file.modification_time": - return "setxattr", nil - case "setxattr.file.mount_id": - return "setxattr", nil - case "setxattr.file.name": - return "setxattr", nil - case "setxattr.file.name.length": - return "setxattr", nil - case "setxattr.file.path": - return "setxattr", nil - case "setxattr.file.path.length": - return "setxattr", nil - case "setxattr.file.rights": - return "setxattr", nil - case "setxattr.file.uid": - return "setxattr", nil - case "setxattr.file.user": - return "setxattr", nil - case "setxattr.retval": - return "setxattr", nil - case "signal.pid": - return "signal", nil - case "signal.retval": - return "signal", nil - case "signal.target.ancestors.args": - return "signal", nil - case "signal.target.ancestors.args_flags": - return "signal", nil - case "signal.target.ancestors.args_options": - return "signal", nil - case "signal.target.ancestors.args_truncated": - return "signal", nil - case "signal.target.ancestors.argv": - return "signal", nil - case "signal.target.ancestors.argv0": - return "signal", nil - case "signal.target.ancestors.cap_effective": - return "signal", nil - case "signal.target.ancestors.cap_permitted": - return "signal", nil - case "signal.target.ancestors.comm": - return "signal", nil - case "signal.target.ancestors.container.id": - return "signal", nil - case "signal.target.ancestors.cookie": - return "signal", nil - case "signal.target.ancestors.created_at": - return "signal", nil - case "signal.target.ancestors.egid": - return "signal", nil - case "signal.target.ancestors.egroup": - return "signal", nil - case "signal.target.ancestors.envp": - return "signal", nil - case "signal.target.ancestors.envs": - return "signal", nil - case "signal.target.ancestors.envs_truncated": - return "signal", nil - case "signal.target.ancestors.euid": - return "signal", nil - case "signal.target.ancestors.euser": - return "signal", nil - case "signal.target.ancestors.file.change_time": - return "signal", nil - case "signal.target.ancestors.file.filesystem": - return "signal", nil - case "signal.target.ancestors.file.gid": - return "signal", nil - case "signal.target.ancestors.file.group": - return "signal", nil - case "signal.target.ancestors.file.in_upper_layer": - return "signal", nil - case "signal.target.ancestors.file.inode": - return "signal", nil - case "signal.target.ancestors.file.mode": - return "signal", nil - case "signal.target.ancestors.file.modification_time": - return "signal", nil - case "signal.target.ancestors.file.mount_id": - return "signal", nil - case "signal.target.ancestors.file.name": - return "signal", nil - case "signal.target.ancestors.file.name.length": - return "signal", nil - case "signal.target.ancestors.file.path": - return "signal", nil - case "signal.target.ancestors.file.path.length": - return "signal", nil - case "signal.target.ancestors.file.rights": - return "signal", nil - case "signal.target.ancestors.file.uid": - return "signal", nil - case "signal.target.ancestors.file.user": - return "signal", nil - case "signal.target.ancestors.fsgid": - return "signal", nil - case "signal.target.ancestors.fsgroup": - return "signal", nil - case "signal.target.ancestors.fsuid": - return "signal", nil - case "signal.target.ancestors.fsuser": - return "signal", nil - case "signal.target.ancestors.gid": - return "signal", nil - case "signal.target.ancestors.group": - return "signal", nil - case "signal.target.ancestors.interpreter.file.change_time": - return "signal", nil - case "signal.target.ancestors.interpreter.file.filesystem": - return "signal", nil - case "signal.target.ancestors.interpreter.file.gid": - return "signal", nil - case "signal.target.ancestors.interpreter.file.group": - return "signal", nil - case "signal.target.ancestors.interpreter.file.in_upper_layer": - return "signal", nil - case "signal.target.ancestors.interpreter.file.inode": - return "signal", nil - case "signal.target.ancestors.interpreter.file.mode": - return "signal", nil - case "signal.target.ancestors.interpreter.file.modification_time": - return "signal", nil - case "signal.target.ancestors.interpreter.file.mount_id": - return "signal", nil - case "signal.target.ancestors.interpreter.file.name": - return "signal", nil - case "signal.target.ancestors.interpreter.file.name.length": - return "signal", nil - case "signal.target.ancestors.interpreter.file.path": - return "signal", nil - case "signal.target.ancestors.interpreter.file.path.length": - return "signal", nil - case "signal.target.ancestors.interpreter.file.rights": - return "signal", nil - case "signal.target.ancestors.interpreter.file.uid": - return "signal", nil - case "signal.target.ancestors.interpreter.file.user": - return "signal", nil - case "signal.target.ancestors.is_kworker": - return "signal", nil - case "signal.target.ancestors.is_thread": - return "signal", nil - case "signal.target.ancestors.pid": - return "signal", nil - case "signal.target.ancestors.ppid": - return "signal", nil - case "signal.target.ancestors.tid": - return "signal", nil - case "signal.target.ancestors.tty_name": - return "signal", nil - case "signal.target.ancestors.uid": - return "signal", nil - case "signal.target.ancestors.user": - return "signal", nil - case "signal.target.args": - return "signal", nil - case "signal.target.args_flags": - return "signal", nil - case "signal.target.args_options": - return "signal", nil - case "signal.target.args_truncated": - return "signal", nil - case "signal.target.argv": - return "signal", nil - case "signal.target.argv0": - return "signal", nil - case "signal.target.cap_effective": - return "signal", nil - case "signal.target.cap_permitted": - return "signal", nil - case "signal.target.comm": - return "signal", nil - case "signal.target.container.id": - return "signal", nil - case "signal.target.cookie": - return "signal", nil - case "signal.target.created_at": - return "signal", nil - case "signal.target.egid": - return "signal", nil - case "signal.target.egroup": - return "signal", nil - case "signal.target.envp": - return "signal", nil - case "signal.target.envs": - return "signal", nil - case "signal.target.envs_truncated": - return "signal", nil - case "signal.target.euid": - return "signal", nil - case "signal.target.euser": - return "signal", nil - case "signal.target.file.change_time": - return "signal", nil - case "signal.target.file.filesystem": - return "signal", nil - case "signal.target.file.gid": - return "signal", nil - case "signal.target.file.group": - return "signal", nil - case "signal.target.file.in_upper_layer": - return "signal", nil - case "signal.target.file.inode": - return "signal", nil - case "signal.target.file.mode": - return "signal", nil - case "signal.target.file.modification_time": - return "signal", nil - case "signal.target.file.mount_id": - return "signal", nil - case "signal.target.file.name": - return "signal", nil - case "signal.target.file.name.length": - return "signal", nil - case "signal.target.file.path": - return "signal", nil - case "signal.target.file.path.length": - return "signal", nil - case "signal.target.file.rights": - return "signal", nil - case "signal.target.file.uid": - return "signal", nil - case "signal.target.file.user": - return "signal", nil - case "signal.target.fsgid": - return "signal", nil - case "signal.target.fsgroup": - return "signal", nil - case "signal.target.fsuid": - return "signal", nil - case "signal.target.fsuser": - return "signal", nil - case "signal.target.gid": - return "signal", nil - case "signal.target.group": - return "signal", nil - case "signal.target.interpreter.file.change_time": - return "signal", nil - case "signal.target.interpreter.file.filesystem": - return "signal", nil - case "signal.target.interpreter.file.gid": - return "signal", nil - case "signal.target.interpreter.file.group": - return "signal", nil - case "signal.target.interpreter.file.in_upper_layer": - return "signal", nil - case "signal.target.interpreter.file.inode": - return "signal", nil - case "signal.target.interpreter.file.mode": - return "signal", nil - case "signal.target.interpreter.file.modification_time": - return "signal", nil - case "signal.target.interpreter.file.mount_id": - return "signal", nil - case "signal.target.interpreter.file.name": - return "signal", nil - case "signal.target.interpreter.file.name.length": - return "signal", nil - case "signal.target.interpreter.file.path": - return "signal", nil - case "signal.target.interpreter.file.path.length": - return "signal", nil - case "signal.target.interpreter.file.rights": - return "signal", nil - case "signal.target.interpreter.file.uid": - return "signal", nil - case "signal.target.interpreter.file.user": - return "signal", nil - case "signal.target.is_kworker": - return "signal", nil - case "signal.target.is_thread": - return "signal", nil - case "signal.target.parent.args": - return "signal", nil - case "signal.target.parent.args_flags": - return "signal", nil - case "signal.target.parent.args_options": - return "signal", nil - case "signal.target.parent.args_truncated": - return "signal", nil - case "signal.target.parent.argv": - return "signal", nil - case "signal.target.parent.argv0": - return "signal", nil - case "signal.target.parent.cap_effective": - return "signal", nil - case "signal.target.parent.cap_permitted": - return "signal", nil - case "signal.target.parent.comm": - return "signal", nil - case "signal.target.parent.container.id": - return "signal", nil - case "signal.target.parent.cookie": - return "signal", nil - case "signal.target.parent.created_at": - return "signal", nil - case "signal.target.parent.egid": - return "signal", nil - case "signal.target.parent.egroup": - return "signal", nil - case "signal.target.parent.envp": - return "signal", nil - case "signal.target.parent.envs": - return "signal", nil - case "signal.target.parent.envs_truncated": - return "signal", nil - case "signal.target.parent.euid": - return "signal", nil - case "signal.target.parent.euser": - return "signal", nil - case "signal.target.parent.file.change_time": - return "signal", nil - case "signal.target.parent.file.filesystem": - return "signal", nil - case "signal.target.parent.file.gid": - return "signal", nil - case "signal.target.parent.file.group": - return "signal", nil - case "signal.target.parent.file.in_upper_layer": - return "signal", nil - case "signal.target.parent.file.inode": - return "signal", nil - case "signal.target.parent.file.mode": - return "signal", nil - case "signal.target.parent.file.modification_time": - return "signal", nil - case "signal.target.parent.file.mount_id": - return "signal", nil - case "signal.target.parent.file.name": - return "signal", nil - case "signal.target.parent.file.name.length": - return "signal", nil - case "signal.target.parent.file.path": - return "signal", nil - case "signal.target.parent.file.path.length": - return "signal", nil - case "signal.target.parent.file.rights": - return "signal", nil - case "signal.target.parent.file.uid": - return "signal", nil - case "signal.target.parent.file.user": - return "signal", nil - case "signal.target.parent.fsgid": - return "signal", nil - case "signal.target.parent.fsgroup": - return "signal", nil - case "signal.target.parent.fsuid": - return "signal", nil - case "signal.target.parent.fsuser": - return "signal", nil - case "signal.target.parent.gid": - return "signal", nil - case "signal.target.parent.group": - return "signal", nil - case "signal.target.parent.interpreter.file.change_time": - return "signal", nil - case "signal.target.parent.interpreter.file.filesystem": - return "signal", nil - case "signal.target.parent.interpreter.file.gid": - return "signal", nil - case "signal.target.parent.interpreter.file.group": - return "signal", nil - case "signal.target.parent.interpreter.file.in_upper_layer": - return "signal", nil - case "signal.target.parent.interpreter.file.inode": - return "signal", nil - case "signal.target.parent.interpreter.file.mode": - return "signal", nil - case "signal.target.parent.interpreter.file.modification_time": - return "signal", nil - case "signal.target.parent.interpreter.file.mount_id": - return "signal", nil - case "signal.target.parent.interpreter.file.name": - return "signal", nil - case "signal.target.parent.interpreter.file.name.length": - return "signal", nil - case "signal.target.parent.interpreter.file.path": - return "signal", nil - case "signal.target.parent.interpreter.file.path.length": - return "signal", nil - case "signal.target.parent.interpreter.file.rights": - return "signal", nil - case "signal.target.parent.interpreter.file.uid": - return "signal", nil - case "signal.target.parent.interpreter.file.user": - return "signal", nil - case "signal.target.parent.is_kworker": - return "signal", nil - case "signal.target.parent.is_thread": - return "signal", nil - case "signal.target.parent.pid": - return "signal", nil - case "signal.target.parent.ppid": - return "signal", nil - case "signal.target.parent.tid": - return "signal", nil - case "signal.target.parent.tty_name": - return "signal", nil - case "signal.target.parent.uid": - return "signal", nil - case "signal.target.parent.user": - return "signal", nil - case "signal.target.pid": - return "signal", nil - case "signal.target.ppid": - return "signal", nil - case "signal.target.tid": - return "signal", nil - case "signal.target.tty_name": - return "signal", nil - case "signal.target.uid": - return "signal", nil - case "signal.target.user": - return "signal", nil - case "signal.type": - return "signal", nil - case "splice.file.change_time": - return "splice", nil - case "splice.file.filesystem": - return "splice", nil - case "splice.file.gid": - return "splice", nil - case "splice.file.group": - return "splice", nil - case "splice.file.in_upper_layer": - return "splice", nil - case "splice.file.inode": - return "splice", nil - case "splice.file.mode": - return "splice", nil - case "splice.file.modification_time": - return "splice", nil - case "splice.file.mount_id": - return "splice", nil - case "splice.file.name": - return "splice", nil - case "splice.file.name.length": - return "splice", nil - case "splice.file.path": - return "splice", nil - case "splice.file.path.length": - return "splice", nil - case "splice.file.rights": - return "splice", nil - case "splice.file.uid": - return "splice", nil - case "splice.file.user": - return "splice", nil - case "splice.pipe_entry_flag": - return "splice", nil - case "splice.pipe_exit_flag": - return "splice", nil - case "splice.retval": - return "splice", nil - case "unlink.file.change_time": - return "unlink", nil - case "unlink.file.filesystem": - return "unlink", nil - case "unlink.file.gid": - return "unlink", nil - case "unlink.file.group": - return "unlink", nil - case "unlink.file.in_upper_layer": - return "unlink", nil - case "unlink.file.inode": - return "unlink", nil - case "unlink.file.mode": - return "unlink", nil - case "unlink.file.modification_time": - return "unlink", nil - case "unlink.file.mount_id": - return "unlink", nil - case "unlink.file.name": - return "unlink", nil - case "unlink.file.name.length": - return "unlink", nil - case "unlink.file.path": - return "unlink", nil - case "unlink.file.path.length": - return "unlink", nil - case "unlink.file.rights": - return "unlink", nil - case "unlink.file.uid": - return "unlink", nil - case "unlink.file.user": - return "unlink", nil - case "unlink.flags": - return "unlink", nil - case "unlink.retval": - return "unlink", nil - case "unload_module.name": - return "unload_module", nil - case "unload_module.retval": - return "unload_module", nil - case "utimes.file.change_time": - return "utimes", nil - case "utimes.file.filesystem": - return "utimes", nil - case "utimes.file.gid": - return "utimes", nil - case "utimes.file.group": - return "utimes", nil - case "utimes.file.in_upper_layer": - return "utimes", nil - case "utimes.file.inode": - return "utimes", nil - case "utimes.file.mode": - return "utimes", nil - case "utimes.file.modification_time": - return "utimes", nil - case "utimes.file.mount_id": - return "utimes", nil - case "utimes.file.name": - return "utimes", nil - case "utimes.file.name.length": - return "utimes", nil - case "utimes.file.path": - return "utimes", nil - case "utimes.file.path.length": - return "utimes", nil - case "utimes.file.rights": - return "utimes", nil - case "utimes.file.uid": - return "utimes", nil - case "utimes.file.user": - return "utimes", nil - case "utimes.retval": - return "utimes", nil - } - return "", &eval.ErrFieldNotFound{Field: field} -} -func (e *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { - switch field { - case "async": - return reflect.Bool, nil - case "bind.addr.family": - return reflect.Int, nil - case "bind.addr.ip": - return reflect.Struct, nil - case "bind.addr.port": - return reflect.Int, nil - case "bind.retval": - return reflect.Int, nil - case "bpf.cmd": - return reflect.Int, nil - case "bpf.map.name": - return reflect.String, nil - case "bpf.map.type": - return reflect.Int, nil - case "bpf.prog.attach_type": - return reflect.Int, nil - case "bpf.prog.helpers": - return reflect.Int, nil - case "bpf.prog.name": - return reflect.String, nil - case "bpf.prog.tag": - return reflect.String, nil - case "bpf.prog.type": - return reflect.Int, nil - case "bpf.retval": - return reflect.Int, nil - case "capset.cap_effective": - return reflect.Int, nil - case "capset.cap_permitted": - return reflect.Int, nil - case "chmod.file.change_time": - return reflect.Int, nil - case "chmod.file.destination.mode": - return reflect.Int, nil - case "chmod.file.destination.rights": - return reflect.Int, nil - case "chmod.file.filesystem": - return reflect.String, nil - case "chmod.file.gid": - return reflect.Int, nil - case "chmod.file.group": - return reflect.String, nil - case "chmod.file.in_upper_layer": - return reflect.Bool, nil - case "chmod.file.inode": - return reflect.Int, nil - case "chmod.file.mode": - return reflect.Int, nil - case "chmod.file.modification_time": - return reflect.Int, nil - case "chmod.file.mount_id": - return reflect.Int, nil - case "chmod.file.name": - return reflect.String, nil - case "chmod.file.name.length": - return reflect.Int, nil - case "chmod.file.path": - return reflect.String, nil - case "chmod.file.path.length": - return reflect.Int, nil - case "chmod.file.rights": - return reflect.Int, nil - case "chmod.file.uid": - return reflect.Int, nil - case "chmod.file.user": - return reflect.String, nil - case "chmod.retval": - return reflect.Int, nil - case "chown.file.change_time": - return reflect.Int, nil - case "chown.file.destination.gid": - return reflect.Int, nil - case "chown.file.destination.group": - return reflect.String, nil - case "chown.file.destination.uid": - return reflect.Int, nil - case "chown.file.destination.user": - return reflect.String, nil - case "chown.file.filesystem": - return reflect.String, nil - case "chown.file.gid": - return reflect.Int, nil - case "chown.file.group": - return reflect.String, nil - case "chown.file.in_upper_layer": - return reflect.Bool, nil - case "chown.file.inode": - return reflect.Int, nil - case "chown.file.mode": - return reflect.Int, nil - case "chown.file.modification_time": - return reflect.Int, nil - case "chown.file.mount_id": - return reflect.Int, nil - case "chown.file.name": - return reflect.String, nil - case "chown.file.name.length": - return reflect.Int, nil - case "chown.file.path": - return reflect.String, nil - case "chown.file.path.length": - return reflect.Int, nil - case "chown.file.rights": - return reflect.Int, nil - case "chown.file.uid": - return reflect.Int, nil - case "chown.file.user": - return reflect.String, nil - case "chown.retval": - return reflect.Int, nil - case "container.id": - return reflect.String, nil - case "container.tags": - return reflect.String, nil - case "dns.id": - return reflect.Int, nil - case "dns.question.class": - return reflect.Int, nil - case "dns.question.count": - return reflect.Int, nil - case "dns.question.length": - return reflect.Int, nil - case "dns.question.name": - return reflect.String, nil - case "dns.question.name.length": - return reflect.Int, nil - case "dns.question.type": - return reflect.Int, nil - case "exec.args": - return reflect.String, nil - case "exec.args_flags": - return reflect.String, nil - case "exec.args_options": - return reflect.String, nil - case "exec.args_truncated": - return reflect.Bool, nil - case "exec.argv": - return reflect.String, nil - case "exec.argv0": - return reflect.String, nil - case "exec.cap_effective": - return reflect.Int, nil - case "exec.cap_permitted": - return reflect.Int, nil - case "exec.comm": - return reflect.String, nil - case "exec.container.id": - return reflect.String, nil - case "exec.cookie": - return reflect.Int, nil - case "exec.created_at": - return reflect.Int, nil - case "exec.egid": - return reflect.Int, nil - case "exec.egroup": - return reflect.String, nil - case "exec.envp": - return reflect.String, nil - case "exec.envs": - return reflect.String, nil - case "exec.envs_truncated": - return reflect.Bool, nil - case "exec.euid": - return reflect.Int, nil - case "exec.euser": - return reflect.String, nil - case "exec.file.change_time": - return reflect.Int, nil - case "exec.file.filesystem": - return reflect.String, nil - case "exec.file.gid": - return reflect.Int, nil - case "exec.file.group": - return reflect.String, nil - case "exec.file.in_upper_layer": - return reflect.Bool, nil - case "exec.file.inode": - return reflect.Int, nil - case "exec.file.mode": - return reflect.Int, nil - case "exec.file.modification_time": - return reflect.Int, nil - case "exec.file.mount_id": - return reflect.Int, nil - case "exec.file.name": - return reflect.String, nil - case "exec.file.name.length": - return reflect.Int, nil - case "exec.file.path": - return reflect.String, nil - case "exec.file.path.length": - return reflect.Int, nil - case "exec.file.rights": - return reflect.Int, nil - case "exec.file.uid": - return reflect.Int, nil - case "exec.file.user": - return reflect.String, nil - case "exec.fsgid": - return reflect.Int, nil - case "exec.fsgroup": - return reflect.String, nil - case "exec.fsuid": - return reflect.Int, nil - case "exec.fsuser": - return reflect.String, nil - case "exec.gid": - return reflect.Int, nil - case "exec.group": - return reflect.String, nil - case "exec.interpreter.file.change_time": - return reflect.Int, nil - case "exec.interpreter.file.filesystem": - return reflect.String, nil - case "exec.interpreter.file.gid": - return reflect.Int, nil - case "exec.interpreter.file.group": - return reflect.String, nil - case "exec.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "exec.interpreter.file.inode": - return reflect.Int, nil - case "exec.interpreter.file.mode": - return reflect.Int, nil - case "exec.interpreter.file.modification_time": - return reflect.Int, nil - case "exec.interpreter.file.mount_id": - return reflect.Int, nil - case "exec.interpreter.file.name": - return reflect.String, nil - case "exec.interpreter.file.name.length": - return reflect.Int, nil - case "exec.interpreter.file.path": - return reflect.String, nil - case "exec.interpreter.file.path.length": - return reflect.Int, nil - case "exec.interpreter.file.rights": - return reflect.Int, nil - case "exec.interpreter.file.uid": - return reflect.Int, nil - case "exec.interpreter.file.user": - return reflect.String, nil - case "exec.is_kworker": - return reflect.Bool, nil - case "exec.is_thread": - return reflect.Bool, nil - case "exec.pid": - return reflect.Int, nil - case "exec.ppid": - return reflect.Int, nil - case "exec.tid": - return reflect.Int, nil - case "exec.tty_name": - return reflect.String, nil - case "exec.uid": - return reflect.Int, nil - case "exec.user": - return reflect.String, nil - case "exit.args": - return reflect.String, nil - case "exit.args_flags": - return reflect.String, nil - case "exit.args_options": - return reflect.String, nil - case "exit.args_truncated": - return reflect.Bool, nil - case "exit.argv": - return reflect.String, nil - case "exit.argv0": - return reflect.String, nil - case "exit.cap_effective": - return reflect.Int, nil - case "exit.cap_permitted": - return reflect.Int, nil - case "exit.cause": - return reflect.Int, nil - case "exit.code": - return reflect.Int, nil - case "exit.comm": - return reflect.String, nil - case "exit.container.id": - return reflect.String, nil - case "exit.cookie": - return reflect.Int, nil - case "exit.created_at": - return reflect.Int, nil - case "exit.egid": - return reflect.Int, nil - case "exit.egroup": - return reflect.String, nil - case "exit.envp": - return reflect.String, nil - case "exit.envs": - return reflect.String, nil - case "exit.envs_truncated": - return reflect.Bool, nil - case "exit.euid": - return reflect.Int, nil - case "exit.euser": - return reflect.String, nil - case "exit.file.change_time": - return reflect.Int, nil - case "exit.file.filesystem": - return reflect.String, nil - case "exit.file.gid": - return reflect.Int, nil - case "exit.file.group": - return reflect.String, nil - case "exit.file.in_upper_layer": - return reflect.Bool, nil - case "exit.file.inode": - return reflect.Int, nil - case "exit.file.mode": - return reflect.Int, nil - case "exit.file.modification_time": - return reflect.Int, nil - case "exit.file.mount_id": - return reflect.Int, nil - case "exit.file.name": - return reflect.String, nil - case "exit.file.name.length": - return reflect.Int, nil - case "exit.file.path": - return reflect.String, nil - case "exit.file.path.length": - return reflect.Int, nil - case "exit.file.rights": - return reflect.Int, nil - case "exit.file.uid": - return reflect.Int, nil - case "exit.file.user": - return reflect.String, nil - case "exit.fsgid": - return reflect.Int, nil - case "exit.fsgroup": - return reflect.String, nil - case "exit.fsuid": - return reflect.Int, nil - case "exit.fsuser": - return reflect.String, nil - case "exit.gid": - return reflect.Int, nil - case "exit.group": - return reflect.String, nil - case "exit.interpreter.file.change_time": - return reflect.Int, nil - case "exit.interpreter.file.filesystem": - return reflect.String, nil - case "exit.interpreter.file.gid": - return reflect.Int, nil - case "exit.interpreter.file.group": - return reflect.String, nil - case "exit.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "exit.interpreter.file.inode": - return reflect.Int, nil - case "exit.interpreter.file.mode": - return reflect.Int, nil - case "exit.interpreter.file.modification_time": - return reflect.Int, nil - case "exit.interpreter.file.mount_id": - return reflect.Int, nil - case "exit.interpreter.file.name": - return reflect.String, nil - case "exit.interpreter.file.name.length": - return reflect.Int, nil - case "exit.interpreter.file.path": - return reflect.String, nil - case "exit.interpreter.file.path.length": - return reflect.Int, nil - case "exit.interpreter.file.rights": - return reflect.Int, nil - case "exit.interpreter.file.uid": - return reflect.Int, nil - case "exit.interpreter.file.user": - return reflect.String, nil - case "exit.is_kworker": - return reflect.Bool, nil - case "exit.is_thread": - return reflect.Bool, nil - case "exit.pid": - return reflect.Int, nil - case "exit.ppid": - return reflect.Int, nil - case "exit.tid": - return reflect.Int, nil - case "exit.tty_name": - return reflect.String, nil - case "exit.uid": - return reflect.Int, nil - case "exit.user": - return reflect.String, nil - case "link.file.change_time": - return reflect.Int, nil - case "link.file.destination.change_time": - return reflect.Int, nil - case "link.file.destination.filesystem": - return reflect.String, nil - case "link.file.destination.gid": - return reflect.Int, nil - case "link.file.destination.group": - return reflect.String, nil - case "link.file.destination.in_upper_layer": - return reflect.Bool, nil - case "link.file.destination.inode": - return reflect.Int, nil - case "link.file.destination.mode": - return reflect.Int, nil - case "link.file.destination.modification_time": - return reflect.Int, nil - case "link.file.destination.mount_id": - return reflect.Int, nil - case "link.file.destination.name": - return reflect.String, nil - case "link.file.destination.name.length": - return reflect.Int, nil - case "link.file.destination.path": - return reflect.String, nil - case "link.file.destination.path.length": - return reflect.Int, nil - case "link.file.destination.rights": - return reflect.Int, nil - case "link.file.destination.uid": - return reflect.Int, nil - case "link.file.destination.user": - return reflect.String, nil - case "link.file.filesystem": - return reflect.String, nil - case "link.file.gid": - return reflect.Int, nil - case "link.file.group": - return reflect.String, nil - case "link.file.in_upper_layer": - return reflect.Bool, nil - case "link.file.inode": - return reflect.Int, nil - case "link.file.mode": - return reflect.Int, nil - case "link.file.modification_time": - return reflect.Int, nil - case "link.file.mount_id": - return reflect.Int, nil - case "link.file.name": - return reflect.String, nil - case "link.file.name.length": - return reflect.Int, nil - case "link.file.path": - return reflect.String, nil - case "link.file.path.length": - return reflect.Int, nil - case "link.file.rights": - return reflect.Int, nil - case "link.file.uid": - return reflect.Int, nil - case "link.file.user": - return reflect.String, nil - case "link.retval": - return reflect.Int, nil - case "load_module.file.change_time": - return reflect.Int, nil - case "load_module.file.filesystem": - return reflect.String, nil - case "load_module.file.gid": - return reflect.Int, nil - case "load_module.file.group": - return reflect.String, nil - case "load_module.file.in_upper_layer": - return reflect.Bool, nil - case "load_module.file.inode": - return reflect.Int, nil - case "load_module.file.mode": - return reflect.Int, nil - case "load_module.file.modification_time": - return reflect.Int, nil - case "load_module.file.mount_id": - return reflect.Int, nil - case "load_module.file.name": - return reflect.String, nil - case "load_module.file.name.length": - return reflect.Int, nil - case "load_module.file.path": - return reflect.String, nil - case "load_module.file.path.length": - return reflect.Int, nil - case "load_module.file.rights": - return reflect.Int, nil - case "load_module.file.uid": - return reflect.Int, nil - case "load_module.file.user": - return reflect.String, nil - case "load_module.loaded_from_memory": - return reflect.Bool, nil - case "load_module.name": - return reflect.String, nil - case "load_module.retval": - return reflect.Int, nil - case "mkdir.file.change_time": - return reflect.Int, nil - case "mkdir.file.destination.mode": - return reflect.Int, nil - case "mkdir.file.destination.rights": - return reflect.Int, nil - case "mkdir.file.filesystem": - return reflect.String, nil - case "mkdir.file.gid": - return reflect.Int, nil - case "mkdir.file.group": - return reflect.String, nil - case "mkdir.file.in_upper_layer": - return reflect.Bool, nil - case "mkdir.file.inode": - return reflect.Int, nil - case "mkdir.file.mode": - return reflect.Int, nil - case "mkdir.file.modification_time": - return reflect.Int, nil - case "mkdir.file.mount_id": - return reflect.Int, nil - case "mkdir.file.name": - return reflect.String, nil - case "mkdir.file.name.length": - return reflect.Int, nil - case "mkdir.file.path": - return reflect.String, nil - case "mkdir.file.path.length": - return reflect.Int, nil - case "mkdir.file.rights": - return reflect.Int, nil - case "mkdir.file.uid": - return reflect.Int, nil - case "mkdir.file.user": - return reflect.String, nil - case "mkdir.retval": - return reflect.Int, nil - case "mmap.file.change_time": - return reflect.Int, nil - case "mmap.file.filesystem": - return reflect.String, nil - case "mmap.file.gid": - return reflect.Int, nil - case "mmap.file.group": - return reflect.String, nil - case "mmap.file.in_upper_layer": - return reflect.Bool, nil - case "mmap.file.inode": - return reflect.Int, nil - case "mmap.file.mode": - return reflect.Int, nil - case "mmap.file.modification_time": - return reflect.Int, nil - case "mmap.file.mount_id": - return reflect.Int, nil - case "mmap.file.name": - return reflect.String, nil - case "mmap.file.name.length": - return reflect.Int, nil - case "mmap.file.path": - return reflect.String, nil - case "mmap.file.path.length": - return reflect.Int, nil - case "mmap.file.rights": - return reflect.Int, nil - case "mmap.file.uid": - return reflect.Int, nil - case "mmap.file.user": - return reflect.String, nil - case "mmap.flags": - return reflect.Int, nil - case "mmap.protection": - return reflect.Int, nil - case "mmap.retval": - return reflect.Int, nil - case "mount.fs_type": - return reflect.String, nil - case "mount.mountpoint.path": - return reflect.String, nil - case "mount.retval": - return reflect.Int, nil - case "mount.source.path": - return reflect.String, nil - case "mprotect.req_protection": - return reflect.Int, nil - case "mprotect.retval": - return reflect.Int, nil - case "mprotect.vm_protection": - return reflect.Int, nil - case "network.destination.ip": - return reflect.Struct, nil - case "network.destination.port": - return reflect.Int, nil - case "network.device.ifindex": - return reflect.Int, nil - case "network.device.ifname": - return reflect.String, nil - case "network.l3_protocol": - return reflect.Int, nil - case "network.l4_protocol": - return reflect.Int, nil - case "network.size": - return reflect.Int, nil - case "network.source.ip": - return reflect.Struct, nil - case "network.source.port": - return reflect.Int, nil - case "open.file.change_time": - return reflect.Int, nil - case "open.file.destination.mode": - return reflect.Int, nil - case "open.file.filesystem": - return reflect.String, nil - case "open.file.gid": - return reflect.Int, nil - case "open.file.group": - return reflect.String, nil - case "open.file.in_upper_layer": - return reflect.Bool, nil - case "open.file.inode": - return reflect.Int, nil - case "open.file.mode": - return reflect.Int, nil - case "open.file.modification_time": - return reflect.Int, nil - case "open.file.mount_id": - return reflect.Int, nil - case "open.file.name": - return reflect.String, nil - case "open.file.name.length": - return reflect.Int, nil - case "open.file.path": - return reflect.String, nil - case "open.file.path.length": - return reflect.Int, nil - case "open.file.rights": - return reflect.Int, nil - case "open.file.uid": - return reflect.Int, nil - case "open.file.user": - return reflect.String, nil - case "open.flags": - return reflect.Int, nil - case "open.retval": - return reflect.Int, nil - case "process.ancestors.args": - return reflect.String, nil - case "process.ancestors.args_flags": - return reflect.String, nil - case "process.ancestors.args_options": - return reflect.String, nil - case "process.ancestors.args_truncated": - return reflect.Bool, nil - case "process.ancestors.argv": - return reflect.String, nil - case "process.ancestors.argv0": - return reflect.String, nil - case "process.ancestors.cap_effective": - return reflect.Int, nil - case "process.ancestors.cap_permitted": - return reflect.Int, nil - case "process.ancestors.comm": - return reflect.String, nil - case "process.ancestors.container.id": - return reflect.String, nil - case "process.ancestors.cookie": - return reflect.Int, nil - case "process.ancestors.created_at": - return reflect.Int, nil - case "process.ancestors.egid": - return reflect.Int, nil - case "process.ancestors.egroup": - return reflect.String, nil - case "process.ancestors.envp": - return reflect.String, nil - case "process.ancestors.envs": - return reflect.String, nil - case "process.ancestors.envs_truncated": - return reflect.Bool, nil - case "process.ancestors.euid": - return reflect.Int, nil - case "process.ancestors.euser": - return reflect.String, nil - case "process.ancestors.file.change_time": - return reflect.Int, nil - case "process.ancestors.file.filesystem": - return reflect.String, nil - case "process.ancestors.file.gid": - return reflect.Int, nil - case "process.ancestors.file.group": - return reflect.String, nil - case "process.ancestors.file.in_upper_layer": - return reflect.Bool, nil - case "process.ancestors.file.inode": - return reflect.Int, nil - case "process.ancestors.file.mode": - return reflect.Int, nil - case "process.ancestors.file.modification_time": - return reflect.Int, nil - case "process.ancestors.file.mount_id": - return reflect.Int, nil - case "process.ancestors.file.name": - return reflect.String, nil - case "process.ancestors.file.name.length": - return reflect.Int, nil - case "process.ancestors.file.path": - return reflect.String, nil - case "process.ancestors.file.path.length": - return reflect.Int, nil - case "process.ancestors.file.rights": - return reflect.Int, nil - case "process.ancestors.file.uid": - return reflect.Int, nil - case "process.ancestors.file.user": - return reflect.String, nil - case "process.ancestors.fsgid": - return reflect.Int, nil - case "process.ancestors.fsgroup": - return reflect.String, nil - case "process.ancestors.fsuid": - return reflect.Int, nil - case "process.ancestors.fsuser": - return reflect.String, nil - case "process.ancestors.gid": - return reflect.Int, nil - case "process.ancestors.group": - return reflect.String, nil - case "process.ancestors.interpreter.file.change_time": - return reflect.Int, nil - case "process.ancestors.interpreter.file.filesystem": - return reflect.String, nil - case "process.ancestors.interpreter.file.gid": - return reflect.Int, nil - case "process.ancestors.interpreter.file.group": - return reflect.String, nil - case "process.ancestors.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "process.ancestors.interpreter.file.inode": - return reflect.Int, nil - case "process.ancestors.interpreter.file.mode": - return reflect.Int, nil - case "process.ancestors.interpreter.file.modification_time": - return reflect.Int, nil - case "process.ancestors.interpreter.file.mount_id": - return reflect.Int, nil - case "process.ancestors.interpreter.file.name": - return reflect.String, nil - case "process.ancestors.interpreter.file.name.length": - return reflect.Int, nil - case "process.ancestors.interpreter.file.path": - return reflect.String, nil - case "process.ancestors.interpreter.file.path.length": - return reflect.Int, nil - case "process.ancestors.interpreter.file.rights": - return reflect.Int, nil - case "process.ancestors.interpreter.file.uid": - return reflect.Int, nil - case "process.ancestors.interpreter.file.user": - return reflect.String, nil - case "process.ancestors.is_kworker": - return reflect.Bool, nil - case "process.ancestors.is_thread": - return reflect.Bool, nil - case "process.ancestors.pid": - return reflect.Int, nil - case "process.ancestors.ppid": - return reflect.Int, nil - case "process.ancestors.tid": - return reflect.Int, nil - case "process.ancestors.tty_name": - return reflect.String, nil - case "process.ancestors.uid": - return reflect.Int, nil - case "process.ancestors.user": - return reflect.String, nil - case "process.args": - return reflect.String, nil - case "process.args_flags": - return reflect.String, nil - case "process.args_options": - return reflect.String, nil - case "process.args_truncated": - return reflect.Bool, nil - case "process.argv": - return reflect.String, nil - case "process.argv0": - return reflect.String, nil - case "process.cap_effective": - return reflect.Int, nil - case "process.cap_permitted": - return reflect.Int, nil - case "process.comm": - return reflect.String, nil - case "process.container.id": - return reflect.String, nil - case "process.cookie": - return reflect.Int, nil - case "process.created_at": - return reflect.Int, nil - case "process.egid": - return reflect.Int, nil - case "process.egroup": - return reflect.String, nil - case "process.envp": - return reflect.String, nil - case "process.envs": - return reflect.String, nil - case "process.envs_truncated": - return reflect.Bool, nil - case "process.euid": - return reflect.Int, nil - case "process.euser": - return reflect.String, nil - case "process.file.change_time": - return reflect.Int, nil - case "process.file.filesystem": - return reflect.String, nil - case "process.file.gid": - return reflect.Int, nil - case "process.file.group": - return reflect.String, nil - case "process.file.in_upper_layer": - return reflect.Bool, nil - case "process.file.inode": - return reflect.Int, nil - case "process.file.mode": - return reflect.Int, nil - case "process.file.modification_time": - return reflect.Int, nil - case "process.file.mount_id": - return reflect.Int, nil - case "process.file.name": - return reflect.String, nil - case "process.file.name.length": - return reflect.Int, nil - case "process.file.path": - return reflect.String, nil - case "process.file.path.length": - return reflect.Int, nil - case "process.file.rights": - return reflect.Int, nil - case "process.file.uid": - return reflect.Int, nil - case "process.file.user": - return reflect.String, nil - case "process.fsgid": - return reflect.Int, nil - case "process.fsgroup": - return reflect.String, nil - case "process.fsuid": - return reflect.Int, nil - case "process.fsuser": - return reflect.String, nil - case "process.gid": - return reflect.Int, nil - case "process.group": - return reflect.String, nil - case "process.interpreter.file.change_time": - return reflect.Int, nil - case "process.interpreter.file.filesystem": - return reflect.String, nil - case "process.interpreter.file.gid": - return reflect.Int, nil - case "process.interpreter.file.group": - return reflect.String, nil - case "process.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "process.interpreter.file.inode": - return reflect.Int, nil - case "process.interpreter.file.mode": - return reflect.Int, nil - case "process.interpreter.file.modification_time": - return reflect.Int, nil - case "process.interpreter.file.mount_id": - return reflect.Int, nil - case "process.interpreter.file.name": - return reflect.String, nil - case "process.interpreter.file.name.length": - return reflect.Int, nil - case "process.interpreter.file.path": - return reflect.String, nil - case "process.interpreter.file.path.length": - return reflect.Int, nil - case "process.interpreter.file.rights": - return reflect.Int, nil - case "process.interpreter.file.uid": - return reflect.Int, nil - case "process.interpreter.file.user": - return reflect.String, nil - case "process.is_kworker": - return reflect.Bool, nil - case "process.is_thread": - return reflect.Bool, nil - case "process.parent.args": - return reflect.String, nil - case "process.parent.args_flags": - return reflect.String, nil - case "process.parent.args_options": - return reflect.String, nil - case "process.parent.args_truncated": - return reflect.Bool, nil - case "process.parent.argv": - return reflect.String, nil - case "process.parent.argv0": - return reflect.String, nil - case "process.parent.cap_effective": - return reflect.Int, nil - case "process.parent.cap_permitted": - return reflect.Int, nil - case "process.parent.comm": - return reflect.String, nil - case "process.parent.container.id": - return reflect.String, nil - case "process.parent.cookie": - return reflect.Int, nil - case "process.parent.created_at": - return reflect.Int, nil - case "process.parent.egid": - return reflect.Int, nil - case "process.parent.egroup": - return reflect.String, nil - case "process.parent.envp": - return reflect.String, nil - case "process.parent.envs": - return reflect.String, nil - case "process.parent.envs_truncated": - return reflect.Bool, nil - case "process.parent.euid": - return reflect.Int, nil - case "process.parent.euser": - return reflect.String, nil - case "process.parent.file.change_time": - return reflect.Int, nil - case "process.parent.file.filesystem": - return reflect.String, nil - case "process.parent.file.gid": - return reflect.Int, nil - case "process.parent.file.group": - return reflect.String, nil - case "process.parent.file.in_upper_layer": - return reflect.Bool, nil - case "process.parent.file.inode": - return reflect.Int, nil - case "process.parent.file.mode": - return reflect.Int, nil - case "process.parent.file.modification_time": - return reflect.Int, nil - case "process.parent.file.mount_id": - return reflect.Int, nil - case "process.parent.file.name": - return reflect.String, nil - case "process.parent.file.name.length": - return reflect.Int, nil - case "process.parent.file.path": - return reflect.String, nil - case "process.parent.file.path.length": - return reflect.Int, nil - case "process.parent.file.rights": - return reflect.Int, nil - case "process.parent.file.uid": - return reflect.Int, nil - case "process.parent.file.user": - return reflect.String, nil - case "process.parent.fsgid": - return reflect.Int, nil - case "process.parent.fsgroup": - return reflect.String, nil - case "process.parent.fsuid": - return reflect.Int, nil - case "process.parent.fsuser": - return reflect.String, nil - case "process.parent.gid": - return reflect.Int, nil - case "process.parent.group": - return reflect.String, nil - case "process.parent.interpreter.file.change_time": - return reflect.Int, nil - case "process.parent.interpreter.file.filesystem": - return reflect.String, nil - case "process.parent.interpreter.file.gid": - return reflect.Int, nil - case "process.parent.interpreter.file.group": - return reflect.String, nil - case "process.parent.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "process.parent.interpreter.file.inode": - return reflect.Int, nil - case "process.parent.interpreter.file.mode": - return reflect.Int, nil - case "process.parent.interpreter.file.modification_time": - return reflect.Int, nil - case "process.parent.interpreter.file.mount_id": - return reflect.Int, nil - case "process.parent.interpreter.file.name": - return reflect.String, nil - case "process.parent.interpreter.file.name.length": - return reflect.Int, nil - case "process.parent.interpreter.file.path": - return reflect.String, nil - case "process.parent.interpreter.file.path.length": - return reflect.Int, nil - case "process.parent.interpreter.file.rights": - return reflect.Int, nil - case "process.parent.interpreter.file.uid": - return reflect.Int, nil - case "process.parent.interpreter.file.user": - return reflect.String, nil - case "process.parent.is_kworker": - return reflect.Bool, nil - case "process.parent.is_thread": - return reflect.Bool, nil - case "process.parent.pid": - return reflect.Int, nil - case "process.parent.ppid": - return reflect.Int, nil - case "process.parent.tid": - return reflect.Int, nil - case "process.parent.tty_name": - return reflect.String, nil - case "process.parent.uid": - return reflect.Int, nil - case "process.parent.user": - return reflect.String, nil - case "process.pid": - return reflect.Int, nil - case "process.ppid": - return reflect.Int, nil - case "process.tid": - return reflect.Int, nil - case "process.tty_name": - return reflect.String, nil - case "process.uid": - return reflect.Int, nil - case "process.user": - return reflect.String, nil - case "ptrace.request": - return reflect.Int, nil - case "ptrace.retval": - return reflect.Int, nil - case "ptrace.tracee.ancestors.args": - return reflect.String, nil - case "ptrace.tracee.ancestors.args_flags": - return reflect.String, nil - case "ptrace.tracee.ancestors.args_options": - return reflect.String, nil - case "ptrace.tracee.ancestors.args_truncated": - return reflect.Bool, nil - case "ptrace.tracee.ancestors.argv": - return reflect.String, nil - case "ptrace.tracee.ancestors.argv0": - return reflect.String, nil - case "ptrace.tracee.ancestors.cap_effective": - return reflect.Int, nil - case "ptrace.tracee.ancestors.cap_permitted": - return reflect.Int, nil - case "ptrace.tracee.ancestors.comm": - return reflect.String, nil - case "ptrace.tracee.ancestors.container.id": - return reflect.String, nil - case "ptrace.tracee.ancestors.cookie": - return reflect.Int, nil - case "ptrace.tracee.ancestors.created_at": - return reflect.Int, nil - case "ptrace.tracee.ancestors.egid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.egroup": - return reflect.String, nil - case "ptrace.tracee.ancestors.envp": - return reflect.String, nil - case "ptrace.tracee.ancestors.envs": - return reflect.String, nil - case "ptrace.tracee.ancestors.envs_truncated": - return reflect.Bool, nil - case "ptrace.tracee.ancestors.euid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.euser": - return reflect.String, nil - case "ptrace.tracee.ancestors.file.change_time": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.filesystem": - return reflect.String, nil - case "ptrace.tracee.ancestors.file.gid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.group": - return reflect.String, nil - case "ptrace.tracee.ancestors.file.in_upper_layer": - return reflect.Bool, nil - case "ptrace.tracee.ancestors.file.inode": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.mode": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.modification_time": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.mount_id": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.name": - return reflect.String, nil - case "ptrace.tracee.ancestors.file.name.length": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.path": - return reflect.String, nil - case "ptrace.tracee.ancestors.file.path.length": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.rights": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.uid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.file.user": - return reflect.String, nil - case "ptrace.tracee.ancestors.fsgid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.fsgroup": - return reflect.String, nil - case "ptrace.tracee.ancestors.fsuid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.fsuser": - return reflect.String, nil - case "ptrace.tracee.ancestors.gid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.group": - return reflect.String, nil - case "ptrace.tracee.ancestors.interpreter.file.change_time": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.filesystem": - return reflect.String, nil - case "ptrace.tracee.ancestors.interpreter.file.gid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.group": - return reflect.String, nil - case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "ptrace.tracee.ancestors.interpreter.file.inode": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.mode": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.modification_time": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.mount_id": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.name": - return reflect.String, nil - case "ptrace.tracee.ancestors.interpreter.file.name.length": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.path": - return reflect.String, nil - case "ptrace.tracee.ancestors.interpreter.file.path.length": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.rights": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.uid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.interpreter.file.user": - return reflect.String, nil - case "ptrace.tracee.ancestors.is_kworker": - return reflect.Bool, nil - case "ptrace.tracee.ancestors.is_thread": - return reflect.Bool, nil - case "ptrace.tracee.ancestors.pid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.ppid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.tid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.tty_name": - return reflect.String, nil - case "ptrace.tracee.ancestors.uid": - return reflect.Int, nil - case "ptrace.tracee.ancestors.user": - return reflect.String, nil - case "ptrace.tracee.args": - return reflect.String, nil - case "ptrace.tracee.args_flags": - return reflect.String, nil - case "ptrace.tracee.args_options": - return reflect.String, nil - case "ptrace.tracee.args_truncated": - return reflect.Bool, nil - case "ptrace.tracee.argv": - return reflect.String, nil - case "ptrace.tracee.argv0": - return reflect.String, nil - case "ptrace.tracee.cap_effective": - return reflect.Int, nil - case "ptrace.tracee.cap_permitted": - return reflect.Int, nil - case "ptrace.tracee.comm": - return reflect.String, nil - case "ptrace.tracee.container.id": - return reflect.String, nil - case "ptrace.tracee.cookie": - return reflect.Int, nil - case "ptrace.tracee.created_at": - return reflect.Int, nil - case "ptrace.tracee.egid": - return reflect.Int, nil - case "ptrace.tracee.egroup": - return reflect.String, nil - case "ptrace.tracee.envp": - return reflect.String, nil - case "ptrace.tracee.envs": - return reflect.String, nil - case "ptrace.tracee.envs_truncated": - return reflect.Bool, nil - case "ptrace.tracee.euid": - return reflect.Int, nil - case "ptrace.tracee.euser": - return reflect.String, nil - case "ptrace.tracee.file.change_time": - return reflect.Int, nil - case "ptrace.tracee.file.filesystem": - return reflect.String, nil - case "ptrace.tracee.file.gid": - return reflect.Int, nil - case "ptrace.tracee.file.group": - return reflect.String, nil - case "ptrace.tracee.file.in_upper_layer": - return reflect.Bool, nil - case "ptrace.tracee.file.inode": - return reflect.Int, nil - case "ptrace.tracee.file.mode": - return reflect.Int, nil - case "ptrace.tracee.file.modification_time": - return reflect.Int, nil - case "ptrace.tracee.file.mount_id": - return reflect.Int, nil - case "ptrace.tracee.file.name": - return reflect.String, nil - case "ptrace.tracee.file.name.length": - return reflect.Int, nil - case "ptrace.tracee.file.path": - return reflect.String, nil - case "ptrace.tracee.file.path.length": - return reflect.Int, nil - case "ptrace.tracee.file.rights": - return reflect.Int, nil - case "ptrace.tracee.file.uid": - return reflect.Int, nil - case "ptrace.tracee.file.user": - return reflect.String, nil - case "ptrace.tracee.fsgid": - return reflect.Int, nil - case "ptrace.tracee.fsgroup": - return reflect.String, nil - case "ptrace.tracee.fsuid": - return reflect.Int, nil - case "ptrace.tracee.fsuser": - return reflect.String, nil - case "ptrace.tracee.gid": - return reflect.Int, nil - case "ptrace.tracee.group": - return reflect.String, nil - case "ptrace.tracee.interpreter.file.change_time": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.filesystem": - return reflect.String, nil - case "ptrace.tracee.interpreter.file.gid": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.group": - return reflect.String, nil - case "ptrace.tracee.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "ptrace.tracee.interpreter.file.inode": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.mode": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.modification_time": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.mount_id": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.name": - return reflect.String, nil - case "ptrace.tracee.interpreter.file.name.length": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.path": - return reflect.String, nil - case "ptrace.tracee.interpreter.file.path.length": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.rights": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.uid": - return reflect.Int, nil - case "ptrace.tracee.interpreter.file.user": - return reflect.String, nil - case "ptrace.tracee.is_kworker": - return reflect.Bool, nil - case "ptrace.tracee.is_thread": - return reflect.Bool, nil - case "ptrace.tracee.parent.args": - return reflect.String, nil - case "ptrace.tracee.parent.args_flags": - return reflect.String, nil - case "ptrace.tracee.parent.args_options": - return reflect.String, nil - case "ptrace.tracee.parent.args_truncated": - return reflect.Bool, nil - case "ptrace.tracee.parent.argv": - return reflect.String, nil - case "ptrace.tracee.parent.argv0": - return reflect.String, nil - case "ptrace.tracee.parent.cap_effective": - return reflect.Int, nil - case "ptrace.tracee.parent.cap_permitted": - return reflect.Int, nil - case "ptrace.tracee.parent.comm": - return reflect.String, nil - case "ptrace.tracee.parent.container.id": - return reflect.String, nil - case "ptrace.tracee.parent.cookie": - return reflect.Int, nil - case "ptrace.tracee.parent.created_at": - return reflect.Int, nil - case "ptrace.tracee.parent.egid": - return reflect.Int, nil - case "ptrace.tracee.parent.egroup": - return reflect.String, nil - case "ptrace.tracee.parent.envp": - return reflect.String, nil - case "ptrace.tracee.parent.envs": - return reflect.String, nil - case "ptrace.tracee.parent.envs_truncated": - return reflect.Bool, nil - case "ptrace.tracee.parent.euid": - return reflect.Int, nil - case "ptrace.tracee.parent.euser": - return reflect.String, nil - case "ptrace.tracee.parent.file.change_time": - return reflect.Int, nil - case "ptrace.tracee.parent.file.filesystem": - return reflect.String, nil - case "ptrace.tracee.parent.file.gid": - return reflect.Int, nil - case "ptrace.tracee.parent.file.group": - return reflect.String, nil - case "ptrace.tracee.parent.file.in_upper_layer": - return reflect.Bool, nil - case "ptrace.tracee.parent.file.inode": - return reflect.Int, nil - case "ptrace.tracee.parent.file.mode": - return reflect.Int, nil - case "ptrace.tracee.parent.file.modification_time": - return reflect.Int, nil - case "ptrace.tracee.parent.file.mount_id": - return reflect.Int, nil - case "ptrace.tracee.parent.file.name": - return reflect.String, nil - case "ptrace.tracee.parent.file.name.length": - return reflect.Int, nil - case "ptrace.tracee.parent.file.path": - return reflect.String, nil - case "ptrace.tracee.parent.file.path.length": - return reflect.Int, nil - case "ptrace.tracee.parent.file.rights": - return reflect.Int, nil - case "ptrace.tracee.parent.file.uid": - return reflect.Int, nil - case "ptrace.tracee.parent.file.user": - return reflect.String, nil - case "ptrace.tracee.parent.fsgid": - return reflect.Int, nil - case "ptrace.tracee.parent.fsgroup": - return reflect.String, nil - case "ptrace.tracee.parent.fsuid": - return reflect.Int, nil - case "ptrace.tracee.parent.fsuser": - return reflect.String, nil - case "ptrace.tracee.parent.gid": - return reflect.Int, nil - case "ptrace.tracee.parent.group": - return reflect.String, nil - case "ptrace.tracee.parent.interpreter.file.change_time": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.filesystem": - return reflect.String, nil - case "ptrace.tracee.parent.interpreter.file.gid": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.group": - return reflect.String, nil - case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "ptrace.tracee.parent.interpreter.file.inode": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.mode": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.modification_time": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.mount_id": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.name": - return reflect.String, nil - case "ptrace.tracee.parent.interpreter.file.name.length": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.path": - return reflect.String, nil - case "ptrace.tracee.parent.interpreter.file.path.length": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.rights": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.uid": - return reflect.Int, nil - case "ptrace.tracee.parent.interpreter.file.user": - return reflect.String, nil - case "ptrace.tracee.parent.is_kworker": - return reflect.Bool, nil - case "ptrace.tracee.parent.is_thread": - return reflect.Bool, nil - case "ptrace.tracee.parent.pid": - return reflect.Int, nil - case "ptrace.tracee.parent.ppid": - return reflect.Int, nil - case "ptrace.tracee.parent.tid": - return reflect.Int, nil - case "ptrace.tracee.parent.tty_name": - return reflect.String, nil - case "ptrace.tracee.parent.uid": - return reflect.Int, nil - case "ptrace.tracee.parent.user": - return reflect.String, nil - case "ptrace.tracee.pid": - return reflect.Int, nil - case "ptrace.tracee.ppid": - return reflect.Int, nil - case "ptrace.tracee.tid": - return reflect.Int, nil - case "ptrace.tracee.tty_name": - return reflect.String, nil - case "ptrace.tracee.uid": - return reflect.Int, nil - case "ptrace.tracee.user": - return reflect.String, nil - case "removexattr.file.change_time": - return reflect.Int, nil - case "removexattr.file.destination.name": - return reflect.String, nil - case "removexattr.file.destination.namespace": - return reflect.String, nil - case "removexattr.file.filesystem": - return reflect.String, nil - case "removexattr.file.gid": - return reflect.Int, nil - case "removexattr.file.group": - return reflect.String, nil - case "removexattr.file.in_upper_layer": - return reflect.Bool, nil - case "removexattr.file.inode": - return reflect.Int, nil - case "removexattr.file.mode": - return reflect.Int, nil - case "removexattr.file.modification_time": - return reflect.Int, nil - case "removexattr.file.mount_id": - return reflect.Int, nil - case "removexattr.file.name": - return reflect.String, nil - case "removexattr.file.name.length": - return reflect.Int, nil - case "removexattr.file.path": - return reflect.String, nil - case "removexattr.file.path.length": - return reflect.Int, nil - case "removexattr.file.rights": - return reflect.Int, nil - case "removexattr.file.uid": - return reflect.Int, nil - case "removexattr.file.user": - return reflect.String, nil - case "removexattr.retval": - return reflect.Int, nil - case "rename.file.change_time": - return reflect.Int, nil - case "rename.file.destination.change_time": - return reflect.Int, nil - case "rename.file.destination.filesystem": - return reflect.String, nil - case "rename.file.destination.gid": - return reflect.Int, nil - case "rename.file.destination.group": - return reflect.String, nil - case "rename.file.destination.in_upper_layer": - return reflect.Bool, nil - case "rename.file.destination.inode": - return reflect.Int, nil - case "rename.file.destination.mode": - return reflect.Int, nil - case "rename.file.destination.modification_time": - return reflect.Int, nil - case "rename.file.destination.mount_id": - return reflect.Int, nil - case "rename.file.destination.name": - return reflect.String, nil - case "rename.file.destination.name.length": - return reflect.Int, nil - case "rename.file.destination.path": - return reflect.String, nil - case "rename.file.destination.path.length": - return reflect.Int, nil - case "rename.file.destination.rights": - return reflect.Int, nil - case "rename.file.destination.uid": - return reflect.Int, nil - case "rename.file.destination.user": - return reflect.String, nil - case "rename.file.filesystem": - return reflect.String, nil - case "rename.file.gid": - return reflect.Int, nil - case "rename.file.group": - return reflect.String, nil - case "rename.file.in_upper_layer": - return reflect.Bool, nil - case "rename.file.inode": - return reflect.Int, nil - case "rename.file.mode": - return reflect.Int, nil - case "rename.file.modification_time": - return reflect.Int, nil - case "rename.file.mount_id": - return reflect.Int, nil - case "rename.file.name": - return reflect.String, nil - case "rename.file.name.length": - return reflect.Int, nil - case "rename.file.path": - return reflect.String, nil - case "rename.file.path.length": - return reflect.Int, nil - case "rename.file.rights": - return reflect.Int, nil - case "rename.file.uid": - return reflect.Int, nil - case "rename.file.user": - return reflect.String, nil - case "rename.retval": - return reflect.Int, nil - case "rmdir.file.change_time": - return reflect.Int, nil - case "rmdir.file.filesystem": - return reflect.String, nil - case "rmdir.file.gid": - return reflect.Int, nil - case "rmdir.file.group": - return reflect.String, nil - case "rmdir.file.in_upper_layer": - return reflect.Bool, nil - case "rmdir.file.inode": - return reflect.Int, nil - case "rmdir.file.mode": - return reflect.Int, nil - case "rmdir.file.modification_time": - return reflect.Int, nil - case "rmdir.file.mount_id": - return reflect.Int, nil - case "rmdir.file.name": - return reflect.String, nil - case "rmdir.file.name.length": - return reflect.Int, nil - case "rmdir.file.path": - return reflect.String, nil - case "rmdir.file.path.length": - return reflect.Int, nil - case "rmdir.file.rights": - return reflect.Int, nil - case "rmdir.file.uid": - return reflect.Int, nil - case "rmdir.file.user": - return reflect.String, nil - case "rmdir.retval": - return reflect.Int, nil - case "selinux.bool.name": - return reflect.String, nil - case "selinux.bool.state": - return reflect.String, nil - case "selinux.bool_commit.state": - return reflect.Bool, nil - case "selinux.enforce.status": - return reflect.String, nil - case "setgid.egid": - return reflect.Int, nil - case "setgid.egroup": - return reflect.String, nil - case "setgid.fsgid": - return reflect.Int, nil - case "setgid.fsgroup": - return reflect.String, nil - case "setgid.gid": - return reflect.Int, nil - case "setgid.group": - return reflect.String, nil - case "setuid.euid": - return reflect.Int, nil - case "setuid.euser": - return reflect.String, nil - case "setuid.fsuid": - return reflect.Int, nil - case "setuid.fsuser": - return reflect.String, nil - case "setuid.uid": - return reflect.Int, nil - case "setuid.user": - return reflect.String, nil - case "setxattr.file.change_time": - return reflect.Int, nil - case "setxattr.file.destination.name": - return reflect.String, nil - case "setxattr.file.destination.namespace": - return reflect.String, nil - case "setxattr.file.filesystem": - return reflect.String, nil - case "setxattr.file.gid": - return reflect.Int, nil - case "setxattr.file.group": - return reflect.String, nil - case "setxattr.file.in_upper_layer": - return reflect.Bool, nil - case "setxattr.file.inode": - return reflect.Int, nil - case "setxattr.file.mode": - return reflect.Int, nil - case "setxattr.file.modification_time": - return reflect.Int, nil - case "setxattr.file.mount_id": - return reflect.Int, nil - case "setxattr.file.name": - return reflect.String, nil - case "setxattr.file.name.length": - return reflect.Int, nil - case "setxattr.file.path": - return reflect.String, nil - case "setxattr.file.path.length": - return reflect.Int, nil - case "setxattr.file.rights": - return reflect.Int, nil - case "setxattr.file.uid": - return reflect.Int, nil - case "setxattr.file.user": - return reflect.String, nil - case "setxattr.retval": - return reflect.Int, nil - case "signal.pid": - return reflect.Int, nil - case "signal.retval": - return reflect.Int, nil - case "signal.target.ancestors.args": - return reflect.String, nil - case "signal.target.ancestors.args_flags": - return reflect.String, nil - case "signal.target.ancestors.args_options": - return reflect.String, nil - case "signal.target.ancestors.args_truncated": - return reflect.Bool, nil - case "signal.target.ancestors.argv": - return reflect.String, nil - case "signal.target.ancestors.argv0": - return reflect.String, nil - case "signal.target.ancestors.cap_effective": - return reflect.Int, nil - case "signal.target.ancestors.cap_permitted": - return reflect.Int, nil - case "signal.target.ancestors.comm": - return reflect.String, nil - case "signal.target.ancestors.container.id": - return reflect.String, nil - case "signal.target.ancestors.cookie": - return reflect.Int, nil - case "signal.target.ancestors.created_at": - return reflect.Int, nil - case "signal.target.ancestors.egid": - return reflect.Int, nil - case "signal.target.ancestors.egroup": - return reflect.String, nil - case "signal.target.ancestors.envp": - return reflect.String, nil - case "signal.target.ancestors.envs": - return reflect.String, nil - case "signal.target.ancestors.envs_truncated": - return reflect.Bool, nil - case "signal.target.ancestors.euid": - return reflect.Int, nil - case "signal.target.ancestors.euser": - return reflect.String, nil - case "signal.target.ancestors.file.change_time": - return reflect.Int, nil - case "signal.target.ancestors.file.filesystem": - return reflect.String, nil - case "signal.target.ancestors.file.gid": - return reflect.Int, nil - case "signal.target.ancestors.file.group": - return reflect.String, nil - case "signal.target.ancestors.file.in_upper_layer": - return reflect.Bool, nil - case "signal.target.ancestors.file.inode": - return reflect.Int, nil - case "signal.target.ancestors.file.mode": - return reflect.Int, nil - case "signal.target.ancestors.file.modification_time": - return reflect.Int, nil - case "signal.target.ancestors.file.mount_id": - return reflect.Int, nil - case "signal.target.ancestors.file.name": - return reflect.String, nil - case "signal.target.ancestors.file.name.length": - return reflect.Int, nil - case "signal.target.ancestors.file.path": - return reflect.String, nil - case "signal.target.ancestors.file.path.length": - return reflect.Int, nil - case "signal.target.ancestors.file.rights": - return reflect.Int, nil - case "signal.target.ancestors.file.uid": - return reflect.Int, nil - case "signal.target.ancestors.file.user": - return reflect.String, nil - case "signal.target.ancestors.fsgid": - return reflect.Int, nil - case "signal.target.ancestors.fsgroup": - return reflect.String, nil - case "signal.target.ancestors.fsuid": - return reflect.Int, nil - case "signal.target.ancestors.fsuser": - return reflect.String, nil - case "signal.target.ancestors.gid": - return reflect.Int, nil - case "signal.target.ancestors.group": - return reflect.String, nil - case "signal.target.ancestors.interpreter.file.change_time": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.filesystem": - return reflect.String, nil - case "signal.target.ancestors.interpreter.file.gid": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.group": - return reflect.String, nil - case "signal.target.ancestors.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "signal.target.ancestors.interpreter.file.inode": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.mode": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.modification_time": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.mount_id": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.name": - return reflect.String, nil - case "signal.target.ancestors.interpreter.file.name.length": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.path": - return reflect.String, nil - case "signal.target.ancestors.interpreter.file.path.length": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.rights": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.uid": - return reflect.Int, nil - case "signal.target.ancestors.interpreter.file.user": - return reflect.String, nil - case "signal.target.ancestors.is_kworker": - return reflect.Bool, nil - case "signal.target.ancestors.is_thread": - return reflect.Bool, nil - case "signal.target.ancestors.pid": - return reflect.Int, nil - case "signal.target.ancestors.ppid": - return reflect.Int, nil - case "signal.target.ancestors.tid": - return reflect.Int, nil - case "signal.target.ancestors.tty_name": - return reflect.String, nil - case "signal.target.ancestors.uid": - return reflect.Int, nil - case "signal.target.ancestors.user": - return reflect.String, nil - case "signal.target.args": - return reflect.String, nil - case "signal.target.args_flags": - return reflect.String, nil - case "signal.target.args_options": - return reflect.String, nil - case "signal.target.args_truncated": - return reflect.Bool, nil - case "signal.target.argv": - return reflect.String, nil - case "signal.target.argv0": - return reflect.String, nil - case "signal.target.cap_effective": - return reflect.Int, nil - case "signal.target.cap_permitted": - return reflect.Int, nil - case "signal.target.comm": - return reflect.String, nil - case "signal.target.container.id": - return reflect.String, nil - case "signal.target.cookie": - return reflect.Int, nil - case "signal.target.created_at": - return reflect.Int, nil - case "signal.target.egid": - return reflect.Int, nil - case "signal.target.egroup": - return reflect.String, nil - case "signal.target.envp": - return reflect.String, nil - case "signal.target.envs": - return reflect.String, nil - case "signal.target.envs_truncated": - return reflect.Bool, nil - case "signal.target.euid": - return reflect.Int, nil - case "signal.target.euser": - return reflect.String, nil - case "signal.target.file.change_time": - return reflect.Int, nil - case "signal.target.file.filesystem": - return reflect.String, nil - case "signal.target.file.gid": - return reflect.Int, nil - case "signal.target.file.group": - return reflect.String, nil - case "signal.target.file.in_upper_layer": - return reflect.Bool, nil - case "signal.target.file.inode": - return reflect.Int, nil - case "signal.target.file.mode": - return reflect.Int, nil - case "signal.target.file.modification_time": - return reflect.Int, nil - case "signal.target.file.mount_id": - return reflect.Int, nil - case "signal.target.file.name": - return reflect.String, nil - case "signal.target.file.name.length": - return reflect.Int, nil - case "signal.target.file.path": - return reflect.String, nil - case "signal.target.file.path.length": - return reflect.Int, nil - case "signal.target.file.rights": - return reflect.Int, nil - case "signal.target.file.uid": - return reflect.Int, nil - case "signal.target.file.user": - return reflect.String, nil - case "signal.target.fsgid": - return reflect.Int, nil - case "signal.target.fsgroup": - return reflect.String, nil - case "signal.target.fsuid": - return reflect.Int, nil - case "signal.target.fsuser": - return reflect.String, nil - case "signal.target.gid": - return reflect.Int, nil - case "signal.target.group": - return reflect.String, nil - case "signal.target.interpreter.file.change_time": - return reflect.Int, nil - case "signal.target.interpreter.file.filesystem": - return reflect.String, nil - case "signal.target.interpreter.file.gid": - return reflect.Int, nil - case "signal.target.interpreter.file.group": - return reflect.String, nil - case "signal.target.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "signal.target.interpreter.file.inode": - return reflect.Int, nil - case "signal.target.interpreter.file.mode": - return reflect.Int, nil - case "signal.target.interpreter.file.modification_time": - return reflect.Int, nil - case "signal.target.interpreter.file.mount_id": - return reflect.Int, nil - case "signal.target.interpreter.file.name": - return reflect.String, nil - case "signal.target.interpreter.file.name.length": - return reflect.Int, nil - case "signal.target.interpreter.file.path": - return reflect.String, nil - case "signal.target.interpreter.file.path.length": - return reflect.Int, nil - case "signal.target.interpreter.file.rights": - return reflect.Int, nil - case "signal.target.interpreter.file.uid": - return reflect.Int, nil - case "signal.target.interpreter.file.user": - return reflect.String, nil - case "signal.target.is_kworker": - return reflect.Bool, nil - case "signal.target.is_thread": - return reflect.Bool, nil - case "signal.target.parent.args": - return reflect.String, nil - case "signal.target.parent.args_flags": - return reflect.String, nil - case "signal.target.parent.args_options": - return reflect.String, nil - case "signal.target.parent.args_truncated": - return reflect.Bool, nil - case "signal.target.parent.argv": - return reflect.String, nil - case "signal.target.parent.argv0": - return reflect.String, nil - case "signal.target.parent.cap_effective": - return reflect.Int, nil - case "signal.target.parent.cap_permitted": - return reflect.Int, nil - case "signal.target.parent.comm": - return reflect.String, nil - case "signal.target.parent.container.id": - return reflect.String, nil - case "signal.target.parent.cookie": - return reflect.Int, nil - case "signal.target.parent.created_at": - return reflect.Int, nil - case "signal.target.parent.egid": - return reflect.Int, nil - case "signal.target.parent.egroup": - return reflect.String, nil - case "signal.target.parent.envp": - return reflect.String, nil - case "signal.target.parent.envs": - return reflect.String, nil - case "signal.target.parent.envs_truncated": - return reflect.Bool, nil - case "signal.target.parent.euid": - return reflect.Int, nil - case "signal.target.parent.euser": - return reflect.String, nil - case "signal.target.parent.file.change_time": - return reflect.Int, nil - case "signal.target.parent.file.filesystem": - return reflect.String, nil - case "signal.target.parent.file.gid": - return reflect.Int, nil - case "signal.target.parent.file.group": - return reflect.String, nil - case "signal.target.parent.file.in_upper_layer": - return reflect.Bool, nil - case "signal.target.parent.file.inode": - return reflect.Int, nil - case "signal.target.parent.file.mode": - return reflect.Int, nil - case "signal.target.parent.file.modification_time": - return reflect.Int, nil - case "signal.target.parent.file.mount_id": - return reflect.Int, nil - case "signal.target.parent.file.name": - return reflect.String, nil - case "signal.target.parent.file.name.length": - return reflect.Int, nil - case "signal.target.parent.file.path": - return reflect.String, nil - case "signal.target.parent.file.path.length": - return reflect.Int, nil - case "signal.target.parent.file.rights": - return reflect.Int, nil - case "signal.target.parent.file.uid": - return reflect.Int, nil - case "signal.target.parent.file.user": - return reflect.String, nil - case "signal.target.parent.fsgid": - return reflect.Int, nil - case "signal.target.parent.fsgroup": - return reflect.String, nil - case "signal.target.parent.fsuid": - return reflect.Int, nil - case "signal.target.parent.fsuser": - return reflect.String, nil - case "signal.target.parent.gid": - return reflect.Int, nil - case "signal.target.parent.group": - return reflect.String, nil - case "signal.target.parent.interpreter.file.change_time": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.filesystem": - return reflect.String, nil - case "signal.target.parent.interpreter.file.gid": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.group": - return reflect.String, nil - case "signal.target.parent.interpreter.file.in_upper_layer": - return reflect.Bool, nil - case "signal.target.parent.interpreter.file.inode": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.mode": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.modification_time": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.mount_id": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.name": - return reflect.String, nil - case "signal.target.parent.interpreter.file.name.length": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.path": - return reflect.String, nil - case "signal.target.parent.interpreter.file.path.length": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.rights": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.uid": - return reflect.Int, nil - case "signal.target.parent.interpreter.file.user": - return reflect.String, nil - case "signal.target.parent.is_kworker": - return reflect.Bool, nil - case "signal.target.parent.is_thread": - return reflect.Bool, nil - case "signal.target.parent.pid": - return reflect.Int, nil - case "signal.target.parent.ppid": - return reflect.Int, nil - case "signal.target.parent.tid": - return reflect.Int, nil - case "signal.target.parent.tty_name": - return reflect.String, nil - case "signal.target.parent.uid": - return reflect.Int, nil - case "signal.target.parent.user": - return reflect.String, nil - case "signal.target.pid": - return reflect.Int, nil - case "signal.target.ppid": - return reflect.Int, nil - case "signal.target.tid": - return reflect.Int, nil - case "signal.target.tty_name": - return reflect.String, nil - case "signal.target.uid": - return reflect.Int, nil - case "signal.target.user": - return reflect.String, nil - case "signal.type": - return reflect.Int, nil - case "splice.file.change_time": - return reflect.Int, nil - case "splice.file.filesystem": - return reflect.String, nil - case "splice.file.gid": - return reflect.Int, nil - case "splice.file.group": - return reflect.String, nil - case "splice.file.in_upper_layer": - return reflect.Bool, nil - case "splice.file.inode": - return reflect.Int, nil - case "splice.file.mode": - return reflect.Int, nil - case "splice.file.modification_time": - return reflect.Int, nil - case "splice.file.mount_id": - return reflect.Int, nil - case "splice.file.name": - return reflect.String, nil - case "splice.file.name.length": - return reflect.Int, nil - case "splice.file.path": - return reflect.String, nil - case "splice.file.path.length": - return reflect.Int, nil - case "splice.file.rights": - return reflect.Int, nil - case "splice.file.uid": - return reflect.Int, nil - case "splice.file.user": - return reflect.String, nil - case "splice.pipe_entry_flag": - return reflect.Int, nil - case "splice.pipe_exit_flag": - return reflect.Int, nil - case "splice.retval": - return reflect.Int, nil - case "unlink.file.change_time": - return reflect.Int, nil - case "unlink.file.filesystem": - return reflect.String, nil - case "unlink.file.gid": - return reflect.Int, nil - case "unlink.file.group": - return reflect.String, nil - case "unlink.file.in_upper_layer": - return reflect.Bool, nil - case "unlink.file.inode": - return reflect.Int, nil - case "unlink.file.mode": - return reflect.Int, nil - case "unlink.file.modification_time": - return reflect.Int, nil - case "unlink.file.mount_id": - return reflect.Int, nil - case "unlink.file.name": - return reflect.String, nil - case "unlink.file.name.length": - return reflect.Int, nil - case "unlink.file.path": - return reflect.String, nil - case "unlink.file.path.length": - return reflect.Int, nil - case "unlink.file.rights": - return reflect.Int, nil - case "unlink.file.uid": - return reflect.Int, nil - case "unlink.file.user": - return reflect.String, nil - case "unlink.flags": - return reflect.Int, nil - case "unlink.retval": - return reflect.Int, nil - case "unload_module.name": - return reflect.String, nil - case "unload_module.retval": - return reflect.Int, nil - case "utimes.file.change_time": - return reflect.Int, nil - case "utimes.file.filesystem": - return reflect.String, nil - case "utimes.file.gid": - return reflect.Int, nil - case "utimes.file.group": - return reflect.String, nil - case "utimes.file.in_upper_layer": - return reflect.Bool, nil - case "utimes.file.inode": - return reflect.Int, nil - case "utimes.file.mode": - return reflect.Int, nil - case "utimes.file.modification_time": - return reflect.Int, nil - case "utimes.file.mount_id": - return reflect.Int, nil - case "utimes.file.name": - return reflect.String, nil - case "utimes.file.name.length": - return reflect.Int, nil - case "utimes.file.path": - return reflect.String, nil - case "utimes.file.path.length": - return reflect.Int, nil - case "utimes.file.rights": - return reflect.Int, nil - case "utimes.file.uid": - return reflect.Int, nil - case "utimes.file.user": - return reflect.String, nil - case "utimes.retval": - return reflect.Int, nil - } - return reflect.Invalid, &eval.ErrFieldNotFound{Field: field} -} -func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { - switch field { - case "async": - var ok bool - if e.Async, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Async"} - } - return nil - case "bind.addr.family": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Bind.AddrFamily"} - } - e.Bind.AddrFamily = uint16(v) - return nil - case "bind.addr.ip": - v, ok := value.(net.IPNet) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Bind.Addr.IPNet"} - } - e.Bind.Addr.IPNet = v - return nil - case "bind.addr.port": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Bind.Addr.Port"} - } - e.Bind.Addr.Port = uint16(v) - return nil - case "bind.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Bind.SyscallEvent.Retval"} - } - e.Bind.SyscallEvent.Retval = int64(v) - return nil - case "bpf.cmd": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Cmd"} - } - e.BPF.Cmd = uint32(v) - return nil - case "bpf.map.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Map.Name"} - } - e.BPF.Map.Name = str - return nil - case "bpf.map.type": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Map.Type"} - } - e.BPF.Map.Type = uint32(v) - return nil - case "bpf.prog.attach_type": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Program.AttachType"} - } - e.BPF.Program.AttachType = uint32(v) - return nil - case "bpf.prog.helpers": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Helpers"} - } - e.BPF.Program.Helpers = append(e.BPF.Program.Helpers, uint32(v)) - return nil - case "bpf.prog.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Name"} - } - e.BPF.Program.Name = str - return nil - case "bpf.prog.tag": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Tag"} - } - e.BPF.Program.Tag = str - return nil - case "bpf.prog.type": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Type"} - } - e.BPF.Program.Type = uint32(v) - return nil - case "bpf.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "BPF.SyscallEvent.Retval"} - } - e.BPF.SyscallEvent.Retval = int64(v) - return nil - case "capset.cap_effective": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Capset.CapEffective"} - } - e.Capset.CapEffective = uint64(v) - return nil - case "capset.cap_permitted": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Capset.CapPermitted"} - } - e.Capset.CapPermitted = uint64(v) - return nil - case "chmod.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.CTime"} - } - e.Chmod.File.FileFields.CTime = uint64(v) - return nil - case "chmod.file.destination.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.Mode"} - } - e.Chmod.Mode = uint32(v) - return nil - case "chmod.file.destination.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.Mode"} - } - e.Chmod.Mode = uint32(v) - return nil - case "chmod.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.Filesystem"} - } - e.Chmod.File.Filesystem = str - return nil - case "chmod.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.GID"} - } - e.Chmod.File.FileFields.GID = uint32(v) - return nil - case "chmod.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Group"} - } - e.Chmod.File.FileFields.Group = str - return nil - case "chmod.file.in_upper_layer": - var ok bool - if e.Chmod.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.InUpperLayer"} - } - return nil - case "chmod.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Inode"} - } - e.Chmod.File.FileFields.Inode = uint64(v) - return nil - case "chmod.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Mode"} - } - e.Chmod.File.FileFields.Mode = uint16(v) - return nil - case "chmod.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.MTime"} - } - e.Chmod.File.FileFields.MTime = uint64(v) - return nil - case "chmod.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.MountID"} - } - e.Chmod.File.FileFields.MountID = uint32(v) - return nil - case "chmod.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.BasenameStr"} - } - e.Chmod.File.BasenameStr = str - return nil - case "chmod.file.name.length": - return &eval.ErrFieldReadOnly{Field: "chmod.file.name.length"} - case "chmod.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.PathnameStr"} - } - e.Chmod.File.PathnameStr = str - return nil - case "chmod.file.path.length": - return &eval.ErrFieldReadOnly{Field: "chmod.file.path.length"} - case "chmod.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Mode"} - } - e.Chmod.File.FileFields.Mode = uint16(v) - return nil - case "chmod.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.UID"} - } - e.Chmod.File.FileFields.UID = uint32(v) - return nil - case "chmod.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.User"} - } - e.Chmod.File.FileFields.User = str - return nil - case "chmod.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chmod.SyscallEvent.Retval"} - } - e.Chmod.SyscallEvent.Retval = int64(v) - return nil - case "chown.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.CTime"} - } - e.Chown.File.FileFields.CTime = uint64(v) - return nil - case "chown.file.destination.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.GID"} - } - e.Chown.GID = int64(v) - return nil - case "chown.file.destination.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.Group"} - } - e.Chown.Group = str - return nil - case "chown.file.destination.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.UID"} - } - e.Chown.UID = int64(v) - return nil - case "chown.file.destination.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.User"} - } - e.Chown.User = str - return nil - case "chown.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.Filesystem"} - } - e.Chown.File.Filesystem = str - return nil - case "chown.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.GID"} - } - e.Chown.File.FileFields.GID = uint32(v) - return nil - case "chown.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Group"} - } - e.Chown.File.FileFields.Group = str - return nil - case "chown.file.in_upper_layer": - var ok bool - if e.Chown.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.InUpperLayer"} - } - return nil - case "chown.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Inode"} - } - e.Chown.File.FileFields.Inode = uint64(v) - return nil - case "chown.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Mode"} - } - e.Chown.File.FileFields.Mode = uint16(v) - return nil - case "chown.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.MTime"} - } - e.Chown.File.FileFields.MTime = uint64(v) - return nil - case "chown.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.MountID"} - } - e.Chown.File.FileFields.MountID = uint32(v) - return nil - case "chown.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.BasenameStr"} - } - e.Chown.File.BasenameStr = str - return nil - case "chown.file.name.length": - return &eval.ErrFieldReadOnly{Field: "chown.file.name.length"} - case "chown.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.PathnameStr"} - } - e.Chown.File.PathnameStr = str - return nil - case "chown.file.path.length": - return &eval.ErrFieldReadOnly{Field: "chown.file.path.length"} - case "chown.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Mode"} - } - e.Chown.File.FileFields.Mode = uint16(v) - return nil - case "chown.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.UID"} - } - e.Chown.File.FileFields.UID = uint32(v) - return nil - case "chown.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.User"} - } - e.Chown.File.FileFields.User = str - return nil - case "chown.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Chown.SyscallEvent.Retval"} - } - e.Chown.SyscallEvent.Retval = int64(v) - return nil - case "container.id": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ContainerContext.ID"} - } - e.ContainerContext.ID = str - return nil - case "container.tags": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ContainerContext.Tags"} - } - e.ContainerContext.Tags = append(e.ContainerContext.Tags, str) - return nil - case "dns.id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "DNS.ID"} - } - e.DNS.ID = uint16(v) - return nil - case "dns.question.class": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "DNS.Class"} - } - e.DNS.Class = uint16(v) - return nil - case "dns.question.count": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "DNS.Count"} - } - e.DNS.Count = uint16(v) - return nil - case "dns.question.length": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "DNS.Size"} - } - e.DNS.Size = uint16(v) - return nil - case "dns.question.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "DNS.Name"} - } - e.DNS.Name = str - return nil - case "dns.question.name.length": - return &eval.ErrFieldReadOnly{Field: "dns.question.name.length"} - case "dns.question.type": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "DNS.Type"} - } - e.DNS.Type = uint16(v) - return nil - case "exec.args": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Args"} - } - e.Exec.Process.Args = str - return nil - case "exec.args_flags": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv"} - } - e.Exec.Process.Argv = append(e.Exec.Process.Argv, str) - return nil - case "exec.args_options": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv"} - } - e.Exec.Process.Argv = append(e.Exec.Process.Argv, str) - return nil - case "exec.args_truncated": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - var ok bool - if e.Exec.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.ArgsTruncated"} - } - return nil - case "exec.argv": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv"} - } - e.Exec.Process.Argv = append(e.Exec.Process.Argv, str) - return nil - case "exec.argv0": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv0"} - } - e.Exec.Process.Argv0 = str - return nil - case "exec.cap_effective": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.CapEffective"} - } - e.Exec.Process.Credentials.CapEffective = uint64(v) - return nil - case "exec.cap_permitted": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.CapPermitted"} - } - e.Exec.Process.Credentials.CapPermitted = uint64(v) - return nil - case "exec.comm": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Comm"} - } - e.Exec.Process.Comm = str - return nil - case "exec.container.id": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.ContainerID"} - } - e.Exec.Process.ContainerID = str - return nil - case "exec.cookie": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Cookie"} - } - e.Exec.Process.Cookie = uint32(v) - return nil - case "exec.created_at": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.CreatedAt"} - } - e.Exec.Process.CreatedAt = uint64(v) - return nil - case "exec.egid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EGID"} - } - e.Exec.Process.Credentials.EGID = uint32(v) - return nil - case "exec.egroup": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EGroup"} - } - e.Exec.Process.Credentials.EGroup = str - return nil - case "exec.envp": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Envp"} - } - e.Exec.Process.Envp = append(e.Exec.Process.Envp, str) - return nil - case "exec.envs": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Envs"} - } - e.Exec.Process.Envs = append(e.Exec.Process.Envs, str) - return nil - case "exec.envs_truncated": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - var ok bool - if e.Exec.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.EnvsTruncated"} - } - return nil - case "exec.euid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EUID"} - } - e.Exec.Process.Credentials.EUID = uint32(v) - return nil - case "exec.euser": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EUser"} - } - e.Exec.Process.Credentials.EUser = str - return nil - case "exec.file.change_time": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.CTime"} - } - e.Exec.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "exec.file.filesystem": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.Filesystem"} - } - e.Exec.Process.FileEvent.Filesystem = str - return nil - case "exec.file.gid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.GID"} - } - e.Exec.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "exec.file.group": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Group"} - } - e.Exec.Process.FileEvent.FileFields.Group = str - return nil - case "exec.file.in_upper_layer": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - var ok bool - if e.Exec.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "exec.file.inode": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Inode"} - } - e.Exec.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "exec.file.mode": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Mode"} - } - e.Exec.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exec.file.modification_time": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.MTime"} - } - e.Exec.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "exec.file.mount_id": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.MountID"} - } - e.Exec.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "exec.file.name": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.BasenameStr"} - } - e.Exec.Process.FileEvent.BasenameStr = str - return nil - case "exec.file.name.length": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exec.file.name.length"} - case "exec.file.path": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.PathnameStr"} - } - e.Exec.Process.FileEvent.PathnameStr = str - return nil - case "exec.file.path.length": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exec.file.path.length"} - case "exec.file.rights": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Mode"} - } - e.Exec.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exec.file.uid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.UID"} - } - e.Exec.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "exec.file.user": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.User"} - } - e.Exec.Process.FileEvent.FileFields.User = str - return nil - case "exec.fsgid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSGID"} - } - e.Exec.Process.Credentials.FSGID = uint32(v) - return nil - case "exec.fsgroup": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSGroup"} - } - e.Exec.Process.Credentials.FSGroup = str - return nil - case "exec.fsuid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSUID"} - } - e.Exec.Process.Credentials.FSUID = uint32(v) - return nil - case "exec.fsuser": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSUser"} - } - e.Exec.Process.Credentials.FSUser = str - return nil - case "exec.gid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.GID"} - } - e.Exec.Process.Credentials.GID = uint32(v) - return nil - case "exec.group": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.Group"} - } - e.Exec.Process.Credentials.Group = str - return nil - case "exec.interpreter.file.change_time": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "exec.interpreter.file.filesystem": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.Exec.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "exec.interpreter.file.gid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "exec.interpreter.file.group": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "exec.interpreter.file.in_upper_layer": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - var ok bool - if e.Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "exec.interpreter.file.inode": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "exec.interpreter.file.mode": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exec.interpreter.file.modification_time": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "exec.interpreter.file.mount_id": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "exec.interpreter.file.name": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.Exec.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "exec.interpreter.file.name.length": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exec.interpreter.file.name.length"} - case "exec.interpreter.file.path": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.Exec.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "exec.interpreter.file.path.length": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exec.interpreter.file.path.length"} - case "exec.interpreter.file.rights": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exec.interpreter.file.uid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "exec.interpreter.file.user": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "exec.is_kworker": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - var ok bool - if e.Exec.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PIDContext.IsKworker"} - } - return nil - case "exec.is_thread": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - var ok bool - if e.Exec.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.IsThread"} - } - return nil - case "exec.pid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PIDContext.Pid"} - } - e.Exec.Process.PIDContext.Pid = uint32(v) - return nil - case "exec.ppid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PPid"} - } - e.Exec.Process.PPid = uint32(v) - return nil - case "exec.tid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PIDContext.Tid"} - } - e.Exec.Process.PIDContext.Tid = uint32(v) - return nil - case "exec.tty_name": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.TTYName"} - } - e.Exec.Process.TTYName = str - return nil - case "exec.uid": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.UID"} - } - e.Exec.Process.Credentials.UID = uint32(v) - return nil - case "exec.user": - if e.Exec.Process == nil { - e.Exec.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.User"} - } - e.Exec.Process.Credentials.User = str - return nil - case "exit.args": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Args"} - } - e.Exit.Process.Args = str - return nil - case "exit.args_flags": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv"} - } - e.Exit.Process.Argv = append(e.Exit.Process.Argv, str) - return nil - case "exit.args_options": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv"} - } - e.Exit.Process.Argv = append(e.Exit.Process.Argv, str) - return nil - case "exit.args_truncated": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - var ok bool - if e.Exit.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.ArgsTruncated"} - } - return nil - case "exit.argv": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv"} - } - e.Exit.Process.Argv = append(e.Exit.Process.Argv, str) - return nil - case "exit.argv0": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv0"} - } - e.Exit.Process.Argv0 = str - return nil - case "exit.cap_effective": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.CapEffective"} - } - e.Exit.Process.Credentials.CapEffective = uint64(v) - return nil - case "exit.cap_permitted": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.CapPermitted"} - } - e.Exit.Process.Credentials.CapPermitted = uint64(v) - return nil - case "exit.cause": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Cause"} - } - e.Exit.Cause = uint32(v) - return nil - case "exit.code": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Code"} - } - e.Exit.Code = uint32(v) - return nil - case "exit.comm": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Comm"} - } - e.Exit.Process.Comm = str - return nil - case "exit.container.id": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.ContainerID"} - } - e.Exit.Process.ContainerID = str - return nil - case "exit.cookie": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Cookie"} - } - e.Exit.Process.Cookie = uint32(v) - return nil - case "exit.created_at": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.CreatedAt"} - } - e.Exit.Process.CreatedAt = uint64(v) - return nil - case "exit.egid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EGID"} - } - e.Exit.Process.Credentials.EGID = uint32(v) - return nil - case "exit.egroup": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EGroup"} - } - e.Exit.Process.Credentials.EGroup = str - return nil - case "exit.envp": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Envp"} - } - e.Exit.Process.Envp = append(e.Exit.Process.Envp, str) - return nil - case "exit.envs": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Envs"} - } - e.Exit.Process.Envs = append(e.Exit.Process.Envs, str) - return nil - case "exit.envs_truncated": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - var ok bool - if e.Exit.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.EnvsTruncated"} - } - return nil - case "exit.euid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EUID"} - } - e.Exit.Process.Credentials.EUID = uint32(v) - return nil - case "exit.euser": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EUser"} - } - e.Exit.Process.Credentials.EUser = str - return nil - case "exit.file.change_time": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.CTime"} - } - e.Exit.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "exit.file.filesystem": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.Filesystem"} - } - e.Exit.Process.FileEvent.Filesystem = str - return nil - case "exit.file.gid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.GID"} - } - e.Exit.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "exit.file.group": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Group"} - } - e.Exit.Process.FileEvent.FileFields.Group = str - return nil - case "exit.file.in_upper_layer": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - var ok bool - if e.Exit.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "exit.file.inode": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Inode"} - } - e.Exit.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "exit.file.mode": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Mode"} - } - e.Exit.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exit.file.modification_time": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.MTime"} - } - e.Exit.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "exit.file.mount_id": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.MountID"} - } - e.Exit.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "exit.file.name": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.BasenameStr"} - } - e.Exit.Process.FileEvent.BasenameStr = str - return nil - case "exit.file.name.length": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exit.file.name.length"} - case "exit.file.path": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.PathnameStr"} - } - e.Exit.Process.FileEvent.PathnameStr = str - return nil - case "exit.file.path.length": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exit.file.path.length"} - case "exit.file.rights": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Mode"} - } - e.Exit.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exit.file.uid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.UID"} - } - e.Exit.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "exit.file.user": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.User"} - } - e.Exit.Process.FileEvent.FileFields.User = str - return nil - case "exit.fsgid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSGID"} - } - e.Exit.Process.Credentials.FSGID = uint32(v) - return nil - case "exit.fsgroup": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSGroup"} - } - e.Exit.Process.Credentials.FSGroup = str - return nil - case "exit.fsuid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSUID"} - } - e.Exit.Process.Credentials.FSUID = uint32(v) - return nil - case "exit.fsuser": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSUser"} - } - e.Exit.Process.Credentials.FSUser = str - return nil - case "exit.gid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.GID"} - } - e.Exit.Process.Credentials.GID = uint32(v) - return nil - case "exit.group": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.Group"} - } - e.Exit.Process.Credentials.Group = str - return nil - case "exit.interpreter.file.change_time": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "exit.interpreter.file.filesystem": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.Exit.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "exit.interpreter.file.gid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "exit.interpreter.file.group": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "exit.interpreter.file.in_upper_layer": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - var ok bool - if e.Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "exit.interpreter.file.inode": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "exit.interpreter.file.mode": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exit.interpreter.file.modification_time": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "exit.interpreter.file.mount_id": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "exit.interpreter.file.name": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.Exit.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "exit.interpreter.file.name.length": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exit.interpreter.file.name.length"} - case "exit.interpreter.file.path": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.Exit.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "exit.interpreter.file.path.length": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "exit.interpreter.file.path.length"} - case "exit.interpreter.file.rights": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "exit.interpreter.file.uid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "exit.interpreter.file.user": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "exit.is_kworker": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - var ok bool - if e.Exit.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PIDContext.IsKworker"} - } - return nil - case "exit.is_thread": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - var ok bool - if e.Exit.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.IsThread"} - } - return nil - case "exit.pid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PIDContext.Pid"} - } - e.Exit.Process.PIDContext.Pid = uint32(v) - return nil - case "exit.ppid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PPid"} - } - e.Exit.Process.PPid = uint32(v) - return nil - case "exit.tid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PIDContext.Tid"} - } - e.Exit.Process.PIDContext.Tid = uint32(v) - return nil - case "exit.tty_name": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.TTYName"} - } - e.Exit.Process.TTYName = str - return nil - case "exit.uid": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.UID"} - } - e.Exit.Process.Credentials.UID = uint32(v) - return nil - case "exit.user": - if e.Exit.Process == nil { - e.Exit.Process = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.User"} - } - e.Exit.Process.Credentials.User = str - return nil - case "link.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.CTime"} - } - e.Link.Source.FileFields.CTime = uint64(v) - return nil - case "link.file.destination.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.CTime"} - } - e.Link.Target.FileFields.CTime = uint64(v) - return nil - case "link.file.destination.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.Filesystem"} - } - e.Link.Target.Filesystem = str - return nil - case "link.file.destination.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.GID"} - } - e.Link.Target.FileFields.GID = uint32(v) - return nil - case "link.file.destination.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Group"} - } - e.Link.Target.FileFields.Group = str - return nil - case "link.file.destination.in_upper_layer": - var ok bool - if e.Link.Target.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.InUpperLayer"} - } - return nil - case "link.file.destination.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Inode"} - } - e.Link.Target.FileFields.Inode = uint64(v) - return nil - case "link.file.destination.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Mode"} - } - e.Link.Target.FileFields.Mode = uint16(v) - return nil - case "link.file.destination.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.MTime"} - } - e.Link.Target.FileFields.MTime = uint64(v) - return nil - case "link.file.destination.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.MountID"} - } - e.Link.Target.FileFields.MountID = uint32(v) - return nil - case "link.file.destination.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.BasenameStr"} - } - e.Link.Target.BasenameStr = str - return nil - case "link.file.destination.name.length": - return &eval.ErrFieldReadOnly{Field: "link.file.destination.name.length"} - case "link.file.destination.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.PathnameStr"} - } - e.Link.Target.PathnameStr = str - return nil - case "link.file.destination.path.length": - return &eval.ErrFieldReadOnly{Field: "link.file.destination.path.length"} - case "link.file.destination.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Mode"} - } - e.Link.Target.FileFields.Mode = uint16(v) - return nil - case "link.file.destination.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.UID"} - } - e.Link.Target.FileFields.UID = uint32(v) - return nil - case "link.file.destination.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.User"} - } - e.Link.Target.FileFields.User = str - return nil - case "link.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.Filesystem"} - } - e.Link.Source.Filesystem = str - return nil - case "link.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.GID"} - } - e.Link.Source.FileFields.GID = uint32(v) - return nil - case "link.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Group"} - } - e.Link.Source.FileFields.Group = str - return nil - case "link.file.in_upper_layer": - var ok bool - if e.Link.Source.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.InUpperLayer"} - } - return nil - case "link.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Inode"} - } - e.Link.Source.FileFields.Inode = uint64(v) - return nil - case "link.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Mode"} - } - e.Link.Source.FileFields.Mode = uint16(v) - return nil - case "link.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.MTime"} - } - e.Link.Source.FileFields.MTime = uint64(v) - return nil - case "link.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.MountID"} - } - e.Link.Source.FileFields.MountID = uint32(v) - return nil - case "link.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.BasenameStr"} - } - e.Link.Source.BasenameStr = str - return nil - case "link.file.name.length": - return &eval.ErrFieldReadOnly{Field: "link.file.name.length"} - case "link.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.PathnameStr"} - } - e.Link.Source.PathnameStr = str - return nil - case "link.file.path.length": - return &eval.ErrFieldReadOnly{Field: "link.file.path.length"} - case "link.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Mode"} - } - e.Link.Source.FileFields.Mode = uint16(v) - return nil - case "link.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.UID"} - } - e.Link.Source.FileFields.UID = uint32(v) - return nil - case "link.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.User"} - } - e.Link.Source.FileFields.User = str - return nil - case "link.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Link.SyscallEvent.Retval"} - } - e.Link.SyscallEvent.Retval = int64(v) - return nil - case "load_module.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.CTime"} - } - e.LoadModule.File.FileFields.CTime = uint64(v) - return nil - case "load_module.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.Filesystem"} - } - e.LoadModule.File.Filesystem = str - return nil - case "load_module.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.GID"} - } - e.LoadModule.File.FileFields.GID = uint32(v) - return nil - case "load_module.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Group"} - } - e.LoadModule.File.FileFields.Group = str - return nil - case "load_module.file.in_upper_layer": - var ok bool - if e.LoadModule.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.InUpperLayer"} - } - return nil - case "load_module.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Inode"} - } - e.LoadModule.File.FileFields.Inode = uint64(v) - return nil - case "load_module.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Mode"} - } - e.LoadModule.File.FileFields.Mode = uint16(v) - return nil - case "load_module.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.MTime"} - } - e.LoadModule.File.FileFields.MTime = uint64(v) - return nil - case "load_module.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.MountID"} - } - e.LoadModule.File.FileFields.MountID = uint32(v) - return nil - case "load_module.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.BasenameStr"} - } - e.LoadModule.File.BasenameStr = str - return nil - case "load_module.file.name.length": - return &eval.ErrFieldReadOnly{Field: "load_module.file.name.length"} - case "load_module.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.PathnameStr"} - } - e.LoadModule.File.PathnameStr = str - return nil - case "load_module.file.path.length": - return &eval.ErrFieldReadOnly{Field: "load_module.file.path.length"} - case "load_module.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Mode"} - } - e.LoadModule.File.FileFields.Mode = uint16(v) - return nil - case "load_module.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.UID"} - } - e.LoadModule.File.FileFields.UID = uint32(v) - return nil - case "load_module.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.User"} - } - e.LoadModule.File.FileFields.User = str - return nil - case "load_module.loaded_from_memory": - var ok bool - if e.LoadModule.LoadedFromMemory, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.LoadedFromMemory"} - } - return nil - case "load_module.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.Name"} - } - e.LoadModule.Name = str - return nil - case "load_module.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "LoadModule.SyscallEvent.Retval"} - } - e.LoadModule.SyscallEvent.Retval = int64(v) - return nil - case "mkdir.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.CTime"} - } - e.Mkdir.File.FileFields.CTime = uint64(v) - return nil - case "mkdir.file.destination.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.Mode"} - } - e.Mkdir.Mode = uint32(v) - return nil - case "mkdir.file.destination.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.Mode"} - } - e.Mkdir.Mode = uint32(v) - return nil - case "mkdir.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.Filesystem"} - } - e.Mkdir.File.Filesystem = str - return nil - case "mkdir.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.GID"} - } - e.Mkdir.File.FileFields.GID = uint32(v) - return nil - case "mkdir.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Group"} - } - e.Mkdir.File.FileFields.Group = str - return nil - case "mkdir.file.in_upper_layer": - var ok bool - if e.Mkdir.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.InUpperLayer"} - } - return nil - case "mkdir.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Inode"} - } - e.Mkdir.File.FileFields.Inode = uint64(v) - return nil - case "mkdir.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Mode"} - } - e.Mkdir.File.FileFields.Mode = uint16(v) - return nil - case "mkdir.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.MTime"} - } - e.Mkdir.File.FileFields.MTime = uint64(v) - return nil - case "mkdir.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.MountID"} - } - e.Mkdir.File.FileFields.MountID = uint32(v) - return nil - case "mkdir.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.BasenameStr"} - } - e.Mkdir.File.BasenameStr = str - return nil - case "mkdir.file.name.length": - return &eval.ErrFieldReadOnly{Field: "mkdir.file.name.length"} - case "mkdir.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.PathnameStr"} - } - e.Mkdir.File.PathnameStr = str - return nil - case "mkdir.file.path.length": - return &eval.ErrFieldReadOnly{Field: "mkdir.file.path.length"} - case "mkdir.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Mode"} - } - e.Mkdir.File.FileFields.Mode = uint16(v) - return nil - case "mkdir.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.UID"} - } - e.Mkdir.File.FileFields.UID = uint32(v) - return nil - case "mkdir.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.User"} - } - e.Mkdir.File.FileFields.User = str - return nil - case "mkdir.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mkdir.SyscallEvent.Retval"} - } - e.Mkdir.SyscallEvent.Retval = int64(v) - return nil - case "mmap.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.CTime"} - } - e.MMap.File.FileFields.CTime = uint64(v) - return nil - case "mmap.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.Filesystem"} - } - e.MMap.File.Filesystem = str - return nil - case "mmap.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.GID"} - } - e.MMap.File.FileFields.GID = uint32(v) - return nil - case "mmap.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Group"} - } - e.MMap.File.FileFields.Group = str - return nil - case "mmap.file.in_upper_layer": - var ok bool - if e.MMap.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.InUpperLayer"} - } - return nil - case "mmap.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Inode"} - } - e.MMap.File.FileFields.Inode = uint64(v) - return nil - case "mmap.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Mode"} - } - e.MMap.File.FileFields.Mode = uint16(v) - return nil - case "mmap.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.MTime"} - } - e.MMap.File.FileFields.MTime = uint64(v) - return nil - case "mmap.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.MountID"} - } - e.MMap.File.FileFields.MountID = uint32(v) - return nil - case "mmap.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.BasenameStr"} - } - e.MMap.File.BasenameStr = str - return nil - case "mmap.file.name.length": - return &eval.ErrFieldReadOnly{Field: "mmap.file.name.length"} - case "mmap.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.PathnameStr"} - } - e.MMap.File.PathnameStr = str - return nil - case "mmap.file.path.length": - return &eval.ErrFieldReadOnly{Field: "mmap.file.path.length"} - case "mmap.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Mode"} - } - e.MMap.File.FileFields.Mode = uint16(v) - return nil - case "mmap.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.UID"} - } - e.MMap.File.FileFields.UID = uint32(v) - return nil - case "mmap.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.User"} - } - e.MMap.File.FileFields.User = str - return nil - case "mmap.flags": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.Flags"} - } - e.MMap.Flags = int(v) - return nil - case "mmap.protection": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.Protection"} - } - e.MMap.Protection = int(v) - return nil - case "mmap.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MMap.SyscallEvent.Retval"} - } - e.MMap.SyscallEvent.Retval = int64(v) - return nil - case "mount.fs_type": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mount.Mount.FSType"} - } - e.Mount.Mount.FSType = str - return nil - case "mount.mountpoint.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mount.MountPointPath"} - } - e.Mount.MountPointPath = str - return nil - case "mount.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mount.SyscallEvent.Retval"} - } - e.Mount.SyscallEvent.Retval = int64(v) - return nil - case "mount.source.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Mount.MountSourcePath"} - } - e.Mount.MountSourcePath = str - return nil - case "mprotect.req_protection": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MProtect.ReqProtection"} - } - e.MProtect.ReqProtection = int(v) - return nil - case "mprotect.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MProtect.SyscallEvent.Retval"} - } - e.MProtect.SyscallEvent.Retval = int64(v) - return nil - case "mprotect.vm_protection": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "MProtect.VMProtection"} - } - e.MProtect.VMProtection = int(v) - return nil - case "network.destination.ip": - v, ok := value.(net.IPNet) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Destination.IPNet"} - } - e.NetworkContext.Destination.IPNet = v - return nil - case "network.destination.port": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Destination.Port"} - } - e.NetworkContext.Destination.Port = uint16(v) - return nil - case "network.device.ifindex": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Device.IfIndex"} - } - e.NetworkContext.Device.IfIndex = uint32(v) - return nil - case "network.device.ifname": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Device.IfName"} - } - e.NetworkContext.Device.IfName = str - return nil - case "network.l3_protocol": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.L3Protocol"} - } - e.NetworkContext.L3Protocol = uint16(v) - return nil - case "network.l4_protocol": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.L4Protocol"} - } - e.NetworkContext.L4Protocol = uint16(v) - return nil - case "network.size": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Size"} - } - e.NetworkContext.Size = uint32(v) - return nil - case "network.source.ip": - v, ok := value.(net.IPNet) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Source.IPNet"} - } - e.NetworkContext.Source.IPNet = v - return nil - case "network.source.port": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Source.Port"} - } - e.NetworkContext.Source.Port = uint16(v) - return nil - case "open.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.CTime"} - } - e.Open.File.FileFields.CTime = uint64(v) - return nil - case "open.file.destination.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.Mode"} - } - e.Open.Mode = uint32(v) - return nil - case "open.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.Filesystem"} - } - e.Open.File.Filesystem = str - return nil - case "open.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.GID"} - } - e.Open.File.FileFields.GID = uint32(v) - return nil - case "open.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Group"} - } - e.Open.File.FileFields.Group = str - return nil - case "open.file.in_upper_layer": - var ok bool - if e.Open.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.InUpperLayer"} - } - return nil - case "open.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Inode"} - } - e.Open.File.FileFields.Inode = uint64(v) - return nil - case "open.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Mode"} - } - e.Open.File.FileFields.Mode = uint16(v) - return nil - case "open.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.MTime"} - } - e.Open.File.FileFields.MTime = uint64(v) - return nil - case "open.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.MountID"} - } - e.Open.File.FileFields.MountID = uint32(v) - return nil - case "open.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.BasenameStr"} - } - e.Open.File.BasenameStr = str - return nil - case "open.file.name.length": - return &eval.ErrFieldReadOnly{Field: "open.file.name.length"} - case "open.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.PathnameStr"} - } - e.Open.File.PathnameStr = str - return nil - case "open.file.path.length": - return &eval.ErrFieldReadOnly{Field: "open.file.path.length"} - case "open.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Mode"} - } - e.Open.File.FileFields.Mode = uint16(v) - return nil - case "open.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.UID"} - } - e.Open.File.FileFields.UID = uint32(v) - return nil - case "open.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.User"} - } - e.Open.File.FileFields.User = str - return nil - case "open.flags": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.Flags"} - } - e.Open.Flags = uint32(v) - return nil - case "open.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Open.SyscallEvent.Retval"} - } - e.Open.SyscallEvent.Retval = int64(v) - return nil - case "process.ancestors.args": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Args"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Args = str - return nil - case "process.ancestors.args_flags": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(e.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "process.ancestors.args_options": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(e.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "process.ancestors.args_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.ArgsTruncated"} - } - return nil - case "process.ancestors.argv": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(e.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "process.ancestors.argv0": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv0"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv0 = str - return nil - case "process.ancestors.cap_effective": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapEffective"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) - return nil - case "process.ancestors.cap_permitted": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapPermitted"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) - return nil - case "process.ancestors.comm": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Comm"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Comm = str - return nil - case "process.ancestors.container.id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.ContainerID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.ContainerID = str - return nil - case "process.ancestors.cookie": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Cookie"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Cookie = uint32(v) - return nil - case "process.ancestors.created_at": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.CreatedAt"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) - return nil - case "process.ancestors.egid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) - return nil - case "process.ancestors.egroup": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGroup"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGroup = str - return nil - case "process.ancestors.envp": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Envp"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Envp = append(e.ProcessContext.Ancestor.ProcessContext.Process.Envp, str) - return nil - case "process.ancestors.envs": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Envs"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Envs = append(e.ProcessContext.Ancestor.ProcessContext.Process.Envs, str) - return nil - case "process.ancestors.envs_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.EnvsTruncated"} - } - return nil - case "process.ancestors.euid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) - return nil - case "process.ancestors.euser": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUser"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUser = str - return nil - case "process.ancestors.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "process.ancestors.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.Filesystem"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str - return nil - case "process.ancestors.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "process.ancestors.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str - return nil - case "process.ancestors.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "process.ancestors.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "process.ancestors.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.ancestors.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "process.ancestors.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "process.ancestors.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.BasenameStr"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str - return nil - case "process.ancestors.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "process.ancestors.file.name.length"} - case "process.ancestors.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.PathnameStr"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str - return nil - case "process.ancestors.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "process.ancestors.file.path.length"} - case "process.ancestors.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.ancestors.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "process.ancestors.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.User"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str - return nil - case "process.ancestors.fsgid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) - return nil - case "process.ancestors.fsgroup": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGroup"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGroup = str - return nil - case "process.ancestors.fsuid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) - return nil - case "process.ancestors.fsuser": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUser"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUser = str - return nil - case "process.ancestors.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.GID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) - return nil - case "process.ancestors.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.Group"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.Group = str - return nil - case "process.ancestors.interpreter.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "process.ancestors.interpreter.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "process.ancestors.interpreter.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "process.ancestors.interpreter.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "process.ancestors.interpreter.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "process.ancestors.interpreter.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "process.ancestors.interpreter.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.ancestors.interpreter.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "process.ancestors.interpreter.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "process.ancestors.interpreter.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "process.ancestors.interpreter.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "process.ancestors.interpreter.file.name.length"} - case "process.ancestors.interpreter.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "process.ancestors.interpreter.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "process.ancestors.interpreter.file.path.length"} - case "process.ancestors.interpreter.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.ancestors.interpreter.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "process.ancestors.interpreter.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "process.ancestors.is_kworker": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PIDContext.IsKworker"} - } - return nil - case "process.ancestors.is_thread": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.IsThread"} - } - return nil - case "process.ancestors.pid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Pid"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) - return nil - case "process.ancestors.ppid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PPid"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.PPid = uint32(v) - return nil - case "process.ancestors.tid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Tid"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) - return nil - case "process.ancestors.tty_name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.TTYName"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.TTYName = str - return nil - case "process.ancestors.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.UID"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) - return nil - case "process.ancestors.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.User"} - } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.User = str - return nil - case "process.args": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Args"} - } - e.ProcessContext.Process.Args = str - return nil - case "process.args_flags": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv"} - } - e.ProcessContext.Process.Argv = append(e.ProcessContext.Process.Argv, str) - return nil - case "process.args_options": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv"} - } - e.ProcessContext.Process.Argv = append(e.ProcessContext.Process.Argv, str) - return nil - case "process.args_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - var ok bool - if e.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.ArgsTruncated"} - } - return nil - case "process.argv": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv"} - } - e.ProcessContext.Process.Argv = append(e.ProcessContext.Process.Argv, str) - return nil - case "process.argv0": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv0"} - } - e.ProcessContext.Process.Argv0 = str - return nil - case "process.cap_effective": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.CapEffective"} - } - e.ProcessContext.Process.Credentials.CapEffective = uint64(v) - return nil - case "process.cap_permitted": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.CapPermitted"} - } - e.ProcessContext.Process.Credentials.CapPermitted = uint64(v) - return nil - case "process.comm": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Comm"} - } - e.ProcessContext.Process.Comm = str - return nil - case "process.container.id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.ContainerID"} - } - e.ProcessContext.Process.ContainerID = str - return nil - case "process.cookie": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Cookie"} - } - e.ProcessContext.Process.Cookie = uint32(v) - return nil - case "process.created_at": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.CreatedAt"} - } - e.ProcessContext.Process.CreatedAt = uint64(v) - return nil - case "process.egid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EGID"} - } - e.ProcessContext.Process.Credentials.EGID = uint32(v) - return nil - case "process.egroup": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EGroup"} - } - e.ProcessContext.Process.Credentials.EGroup = str - return nil - case "process.envp": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Envp"} - } - e.ProcessContext.Process.Envp = append(e.ProcessContext.Process.Envp, str) - return nil - case "process.envs": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Envs"} - } - e.ProcessContext.Process.Envs = append(e.ProcessContext.Process.Envs, str) - return nil - case "process.envs_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - var ok bool - if e.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.EnvsTruncated"} - } - return nil - case "process.euid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EUID"} - } - e.ProcessContext.Process.Credentials.EUID = uint32(v) - return nil - case "process.euser": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EUser"} - } - e.ProcessContext.Process.Credentials.EUser = str - return nil - case "process.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.CTime"} - } - e.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "process.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.Filesystem"} - } - e.ProcessContext.Process.FileEvent.Filesystem = str - return nil - case "process.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.GID"} - } - e.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "process.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Group"} - } - e.ProcessContext.Process.FileEvent.FileFields.Group = str - return nil - case "process.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - var ok bool - if e.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "process.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Inode"} - } - e.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "process.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.MTime"} - } - e.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "process.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.MountID"} - } - e.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "process.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.BasenameStr"} - } - e.ProcessContext.Process.FileEvent.BasenameStr = str - return nil - case "process.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "process.file.name.length"} - case "process.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.PathnameStr"} - } - e.ProcessContext.Process.FileEvent.PathnameStr = str - return nil - case "process.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "process.file.path.length"} - case "process.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.UID"} - } - e.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "process.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.User"} - } - e.ProcessContext.Process.FileEvent.FileFields.User = str - return nil - case "process.fsgid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSGID"} - } - e.ProcessContext.Process.Credentials.FSGID = uint32(v) - return nil - case "process.fsgroup": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSGroup"} - } - e.ProcessContext.Process.Credentials.FSGroup = str - return nil - case "process.fsuid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSUID"} - } - e.ProcessContext.Process.Credentials.FSUID = uint32(v) - return nil - case "process.fsuser": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSUser"} - } - e.ProcessContext.Process.Credentials.FSUser = str - return nil - case "process.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.GID"} - } - e.ProcessContext.Process.Credentials.GID = uint32(v) - return nil - case "process.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.Group"} - } - e.ProcessContext.Process.Credentials.Group = str - return nil - case "process.interpreter.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "process.interpreter.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "process.interpreter.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "process.interpreter.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "process.interpreter.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - var ok bool - if e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "process.interpreter.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "process.interpreter.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.interpreter.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "process.interpreter.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "process.interpreter.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "process.interpreter.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "process.interpreter.file.name.length"} - case "process.interpreter.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "process.interpreter.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "process.interpreter.file.path.length"} - case "process.interpreter.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.interpreter.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "process.interpreter.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "process.is_kworker": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - var ok bool - if e.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PIDContext.IsKworker"} - } - return nil - case "process.is_thread": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - var ok bool - if e.ProcessContext.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.IsThread"} - } - return nil - case "process.parent.args": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Args"} - } - e.ProcessContext.Parent.Args = str - return nil - case "process.parent.args_flags": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv"} - } - e.ProcessContext.Parent.Argv = append(e.ProcessContext.Parent.Argv, str) - return nil - case "process.parent.args_options": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv"} - } - e.ProcessContext.Parent.Argv = append(e.ProcessContext.Parent.Argv, str) - return nil - case "process.parent.args_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - var ok bool - if e.ProcessContext.Parent.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.ArgsTruncated"} - } - return nil - case "process.parent.argv": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv"} - } - e.ProcessContext.Parent.Argv = append(e.ProcessContext.Parent.Argv, str) - return nil - case "process.parent.argv0": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv0"} - } - e.ProcessContext.Parent.Argv0 = str - return nil - case "process.parent.cap_effective": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.CapEffective"} - } - e.ProcessContext.Parent.Credentials.CapEffective = uint64(v) - return nil - case "process.parent.cap_permitted": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.CapPermitted"} - } - e.ProcessContext.Parent.Credentials.CapPermitted = uint64(v) - return nil - case "process.parent.comm": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Comm"} - } - e.ProcessContext.Parent.Comm = str - return nil - case "process.parent.container.id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.ContainerID"} - } - e.ProcessContext.Parent.ContainerID = str - return nil - case "process.parent.cookie": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Cookie"} - } - e.ProcessContext.Parent.Cookie = uint32(v) - return nil - case "process.parent.created_at": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.CreatedAt"} - } - e.ProcessContext.Parent.CreatedAt = uint64(v) - return nil - case "process.parent.egid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EGID"} - } - e.ProcessContext.Parent.Credentials.EGID = uint32(v) - return nil - case "process.parent.egroup": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EGroup"} - } - e.ProcessContext.Parent.Credentials.EGroup = str - return nil - case "process.parent.envp": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Envp"} - } - e.ProcessContext.Parent.Envp = append(e.ProcessContext.Parent.Envp, str) - return nil - case "process.parent.envs": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Envs"} - } - e.ProcessContext.Parent.Envs = append(e.ProcessContext.Parent.Envs, str) - return nil - case "process.parent.envs_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - var ok bool - if e.ProcessContext.Parent.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.EnvsTruncated"} - } - return nil - case "process.parent.euid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EUID"} - } - e.ProcessContext.Parent.Credentials.EUID = uint32(v) - return nil - case "process.parent.euser": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EUser"} - } - e.ProcessContext.Parent.Credentials.EUser = str - return nil - case "process.parent.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.CTime"} - } - e.ProcessContext.Parent.FileEvent.FileFields.CTime = uint64(v) - return nil - case "process.parent.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.Filesystem"} - } - e.ProcessContext.Parent.FileEvent.Filesystem = str - return nil - case "process.parent.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.GID"} - } - e.ProcessContext.Parent.FileEvent.FileFields.GID = uint32(v) - return nil - case "process.parent.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Group"} - } - e.ProcessContext.Parent.FileEvent.FileFields.Group = str - return nil - case "process.parent.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - var ok bool - if e.ProcessContext.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "process.parent.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Inode"} - } - e.ProcessContext.Parent.FileEvent.FileFields.Inode = uint64(v) - return nil - case "process.parent.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Parent.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.parent.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.MTime"} - } - e.ProcessContext.Parent.FileEvent.FileFields.MTime = uint64(v) - return nil - case "process.parent.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.MountID"} - } - e.ProcessContext.Parent.FileEvent.FileFields.MountID = uint32(v) - return nil - case "process.parent.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.BasenameStr"} - } - e.ProcessContext.Parent.FileEvent.BasenameStr = str - return nil - case "process.parent.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "process.parent.file.name.length"} - case "process.parent.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.PathnameStr"} - } - e.ProcessContext.Parent.FileEvent.PathnameStr = str - return nil - case "process.parent.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "process.parent.file.path.length"} - case "process.parent.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Parent.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.parent.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.UID"} - } - e.ProcessContext.Parent.FileEvent.FileFields.UID = uint32(v) - return nil - case "process.parent.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.User"} - } - e.ProcessContext.Parent.FileEvent.FileFields.User = str - return nil - case "process.parent.fsgid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSGID"} - } - e.ProcessContext.Parent.Credentials.FSGID = uint32(v) - return nil - case "process.parent.fsgroup": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSGroup"} - } - e.ProcessContext.Parent.Credentials.FSGroup = str - return nil - case "process.parent.fsuid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSUID"} - } - e.ProcessContext.Parent.Credentials.FSUID = uint32(v) - return nil - case "process.parent.fsuser": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSUser"} - } - e.ProcessContext.Parent.Credentials.FSUser = str - return nil - case "process.parent.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.GID"} - } - e.ProcessContext.Parent.Credentials.GID = uint32(v) - return nil - case "process.parent.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.Group"} - } - e.ProcessContext.Parent.Credentials.Group = str - return nil - case "process.parent.interpreter.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "process.parent.interpreter.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "process.parent.interpreter.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "process.parent.interpreter.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "process.parent.interpreter.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - var ok bool - if e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "process.parent.interpreter.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "process.parent.interpreter.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.parent.interpreter.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "process.parent.interpreter.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "process.parent.interpreter.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "process.parent.interpreter.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "process.parent.interpreter.file.name.length"} - case "process.parent.interpreter.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "process.parent.interpreter.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "process.parent.interpreter.file.path.length"} - case "process.parent.interpreter.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "process.parent.interpreter.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "process.parent.interpreter.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User"} - } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "process.parent.is_kworker": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - var ok bool - if e.ProcessContext.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PIDContext.IsKworker"} - } - return nil - case "process.parent.is_thread": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - var ok bool - if e.ProcessContext.Parent.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.IsThread"} - } - return nil - case "process.parent.pid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PIDContext.Pid"} - } - e.ProcessContext.Parent.PIDContext.Pid = uint32(v) - return nil - case "process.parent.ppid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PPid"} - } - e.ProcessContext.Parent.PPid = uint32(v) - return nil - case "process.parent.tid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PIDContext.Tid"} - } - e.ProcessContext.Parent.PIDContext.Tid = uint32(v) - return nil - case "process.parent.tty_name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.TTYName"} - } - e.ProcessContext.Parent.TTYName = str - return nil - case "process.parent.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.UID"} - } - e.ProcessContext.Parent.Credentials.UID = uint32(v) - return nil - case "process.parent.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.User"} - } - e.ProcessContext.Parent.Credentials.User = str - return nil - case "process.pid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PIDContext.Pid"} - } - e.ProcessContext.Process.PIDContext.Pid = uint32(v) - return nil - case "process.ppid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PPid"} - } - e.ProcessContext.Process.PPid = uint32(v) - return nil - case "process.tid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PIDContext.Tid"} - } - e.ProcessContext.Process.PIDContext.Tid = uint32(v) - return nil - case "process.tty_name": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.TTYName"} - } - e.ProcessContext.Process.TTYName = str - return nil - case "process.uid": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.UID"} - } - e.ProcessContext.Process.Credentials.UID = uint32(v) - return nil - case "process.user": - if e.ProcessContext == nil { - e.ProcessContext = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.User"} - } - e.ProcessContext.Process.Credentials.User = str - return nil - case "ptrace.request": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Request"} - } - e.PTrace.Request = uint32(v) - return nil - case "ptrace.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.SyscallEvent.Retval"} - } - e.PTrace.SyscallEvent.Retval = int64(v) - return nil - case "ptrace.tracee.ancestors.args": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Args"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Args = str - return nil - case "ptrace.tracee.ancestors.args_flags": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "ptrace.tracee.ancestors.args_options": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "ptrace.tracee.ancestors.args_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.ArgsTruncated"} - } - return nil - case "ptrace.tracee.ancestors.argv": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "ptrace.tracee.ancestors.argv0": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv0"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv0 = str - return nil - case "ptrace.tracee.ancestors.cap_effective": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapEffective"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) - return nil - case "ptrace.tracee.ancestors.cap_permitted": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapPermitted"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) - return nil - case "ptrace.tracee.ancestors.comm": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Comm"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Comm = str - return nil - case "ptrace.tracee.ancestors.container.id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.ContainerID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.ContainerID = str - return nil - case "ptrace.tracee.ancestors.cookie": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Cookie"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Cookie = uint32(v) - return nil - case "ptrace.tracee.ancestors.created_at": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.CreatedAt"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) - return nil - case "ptrace.tracee.ancestors.egid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) - return nil - case "ptrace.tracee.ancestors.egroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGroup"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGroup = str - return nil - case "ptrace.tracee.ancestors.envp": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Envp"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp, str) - return nil - case "ptrace.tracee.ancestors.envs": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Envs"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs, str) - return nil - case "ptrace.tracee.ancestors.envs_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.EnvsTruncated"} - } - return nil - case "ptrace.tracee.ancestors.euid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) - return nil - case "ptrace.tracee.ancestors.euser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUser"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUser = str - return nil - case "ptrace.tracee.ancestors.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "ptrace.tracee.ancestors.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.Filesystem"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str - return nil - case "ptrace.tracee.ancestors.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "ptrace.tracee.ancestors.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str - return nil - case "ptrace.tracee.ancestors.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "ptrace.tracee.ancestors.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "ptrace.tracee.ancestors.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.ancestors.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "ptrace.tracee.ancestors.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "ptrace.tracee.ancestors.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.BasenameStr"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str - return nil - case "ptrace.tracee.ancestors.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.file.name.length"} - case "ptrace.tracee.ancestors.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.PathnameStr"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str - return nil - case "ptrace.tracee.ancestors.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.file.path.length"} - case "ptrace.tracee.ancestors.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.ancestors.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "ptrace.tracee.ancestors.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.User"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str - return nil - case "ptrace.tracee.ancestors.fsgid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) - return nil - case "ptrace.tracee.ancestors.fsgroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGroup"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGroup = str - return nil - case "ptrace.tracee.ancestors.fsuid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) - return nil - case "ptrace.tracee.ancestors.fsuser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUser"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUser = str - return nil - case "ptrace.tracee.ancestors.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.GID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) - return nil - case "ptrace.tracee.ancestors.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.Group"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.Group = str - return nil - case "ptrace.tracee.ancestors.interpreter.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "ptrace.tracee.ancestors.interpreter.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "ptrace.tracee.ancestors.interpreter.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "ptrace.tracee.ancestors.interpreter.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.interpreter.file.name.length"} - case "ptrace.tracee.ancestors.interpreter.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "ptrace.tracee.ancestors.interpreter.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.interpreter.file.path.length"} - case "ptrace.tracee.ancestors.interpreter.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "ptrace.tracee.ancestors.interpreter.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "ptrace.tracee.ancestors.is_kworker": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.IsKworker"} - } - return nil - case "ptrace.tracee.ancestors.is_thread": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.IsThread"} - } - return nil - case "ptrace.tracee.ancestors.pid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Pid"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) - return nil - case "ptrace.tracee.ancestors.ppid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PPid"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.PPid = uint32(v) - return nil - case "ptrace.tracee.ancestors.tid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Tid"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) - return nil - case "ptrace.tracee.ancestors.tty_name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.TTYName"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.TTYName = str - return nil - case "ptrace.tracee.ancestors.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.UID"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) - return nil - case "ptrace.tracee.ancestors.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.User"} - } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.User = str - return nil - case "ptrace.tracee.args": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Args"} - } - e.PTrace.Tracee.Process.Args = str - return nil - case "ptrace.tracee.args_flags": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv"} - } - e.PTrace.Tracee.Process.Argv = append(e.PTrace.Tracee.Process.Argv, str) - return nil - case "ptrace.tracee.args_options": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv"} - } - e.PTrace.Tracee.Process.Argv = append(e.PTrace.Tracee.Process.Argv, str) - return nil - case "ptrace.tracee.args_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - var ok bool - if e.PTrace.Tracee.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.ArgsTruncated"} - } - return nil - case "ptrace.tracee.argv": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv"} - } - e.PTrace.Tracee.Process.Argv = append(e.PTrace.Tracee.Process.Argv, str) - return nil - case "ptrace.tracee.argv0": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv0"} - } - e.PTrace.Tracee.Process.Argv0 = str - return nil - case "ptrace.tracee.cap_effective": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.CapEffective"} - } - e.PTrace.Tracee.Process.Credentials.CapEffective = uint64(v) - return nil - case "ptrace.tracee.cap_permitted": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.CapPermitted"} - } - e.PTrace.Tracee.Process.Credentials.CapPermitted = uint64(v) - return nil - case "ptrace.tracee.comm": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Comm"} - } - e.PTrace.Tracee.Process.Comm = str - return nil - case "ptrace.tracee.container.id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.ContainerID"} - } - e.PTrace.Tracee.Process.ContainerID = str - return nil - case "ptrace.tracee.cookie": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Cookie"} - } - e.PTrace.Tracee.Process.Cookie = uint32(v) - return nil - case "ptrace.tracee.created_at": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.CreatedAt"} - } - e.PTrace.Tracee.Process.CreatedAt = uint64(v) - return nil - case "ptrace.tracee.egid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EGID"} - } - e.PTrace.Tracee.Process.Credentials.EGID = uint32(v) - return nil - case "ptrace.tracee.egroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EGroup"} - } - e.PTrace.Tracee.Process.Credentials.EGroup = str - return nil - case "ptrace.tracee.envp": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Envp"} - } - e.PTrace.Tracee.Process.Envp = append(e.PTrace.Tracee.Process.Envp, str) - return nil - case "ptrace.tracee.envs": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Envs"} - } - e.PTrace.Tracee.Process.Envs = append(e.PTrace.Tracee.Process.Envs, str) - return nil - case "ptrace.tracee.envs_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - var ok bool - if e.PTrace.Tracee.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.EnvsTruncated"} - } - return nil - case "ptrace.tracee.euid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EUID"} - } - e.PTrace.Tracee.Process.Credentials.EUID = uint32(v) - return nil - case "ptrace.tracee.euser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EUser"} - } - e.PTrace.Tracee.Process.Credentials.EUser = str - return nil - case "ptrace.tracee.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.CTime"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "ptrace.tracee.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.Filesystem"} - } - e.PTrace.Tracee.Process.FileEvent.Filesystem = str - return nil - case "ptrace.tracee.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.GID"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "ptrace.tracee.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Group"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.Group = str - return nil - case "ptrace.tracee.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - var ok bool - if e.PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "ptrace.tracee.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Inode"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "ptrace.tracee.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.MTime"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "ptrace.tracee.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.MountID"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "ptrace.tracee.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.BasenameStr"} - } - e.PTrace.Tracee.Process.FileEvent.BasenameStr = str - return nil - case "ptrace.tracee.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.file.name.length"} - case "ptrace.tracee.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.PathnameStr"} - } - e.PTrace.Tracee.Process.FileEvent.PathnameStr = str - return nil - case "ptrace.tracee.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.file.path.length"} - case "ptrace.tracee.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.UID"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "ptrace.tracee.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.User"} - } - e.PTrace.Tracee.Process.FileEvent.FileFields.User = str - return nil - case "ptrace.tracee.fsgid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSGID"} - } - e.PTrace.Tracee.Process.Credentials.FSGID = uint32(v) - return nil - case "ptrace.tracee.fsgroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSGroup"} - } - e.PTrace.Tracee.Process.Credentials.FSGroup = str - return nil - case "ptrace.tracee.fsuid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSUID"} - } - e.PTrace.Tracee.Process.Credentials.FSUID = uint32(v) - return nil - case "ptrace.tracee.fsuser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSUser"} - } - e.PTrace.Tracee.Process.Credentials.FSUser = str - return nil - case "ptrace.tracee.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.GID"} - } - e.PTrace.Tracee.Process.Credentials.GID = uint32(v) - return nil - case "ptrace.tracee.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.Group"} - } - e.PTrace.Tracee.Process.Credentials.Group = str - return nil - case "ptrace.tracee.interpreter.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "ptrace.tracee.interpreter.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "ptrace.tracee.interpreter.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "ptrace.tracee.interpreter.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "ptrace.tracee.interpreter.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - var ok bool - if e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "ptrace.tracee.interpreter.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "ptrace.tracee.interpreter.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.interpreter.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "ptrace.tracee.interpreter.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "ptrace.tracee.interpreter.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "ptrace.tracee.interpreter.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.interpreter.file.name.length"} - case "ptrace.tracee.interpreter.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "ptrace.tracee.interpreter.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.interpreter.file.path.length"} - case "ptrace.tracee.interpreter.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.interpreter.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "ptrace.tracee.interpreter.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "ptrace.tracee.is_kworker": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - var ok bool - if e.PTrace.Tracee.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PIDContext.IsKworker"} - } - return nil - case "ptrace.tracee.is_thread": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - var ok bool - if e.PTrace.Tracee.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.IsThread"} - } - return nil - case "ptrace.tracee.parent.args": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Args"} - } - e.PTrace.Tracee.Parent.Args = str - return nil - case "ptrace.tracee.parent.args_flags": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv"} - } - e.PTrace.Tracee.Parent.Argv = append(e.PTrace.Tracee.Parent.Argv, str) - return nil - case "ptrace.tracee.parent.args_options": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv"} - } - e.PTrace.Tracee.Parent.Argv = append(e.PTrace.Tracee.Parent.Argv, str) - return nil - case "ptrace.tracee.parent.args_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - var ok bool - if e.PTrace.Tracee.Parent.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.ArgsTruncated"} - } - return nil - case "ptrace.tracee.parent.argv": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv"} - } - e.PTrace.Tracee.Parent.Argv = append(e.PTrace.Tracee.Parent.Argv, str) - return nil - case "ptrace.tracee.parent.argv0": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv0"} - } - e.PTrace.Tracee.Parent.Argv0 = str - return nil - case "ptrace.tracee.parent.cap_effective": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.CapEffective"} - } - e.PTrace.Tracee.Parent.Credentials.CapEffective = uint64(v) - return nil - case "ptrace.tracee.parent.cap_permitted": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.CapPermitted"} - } - e.PTrace.Tracee.Parent.Credentials.CapPermitted = uint64(v) - return nil - case "ptrace.tracee.parent.comm": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Comm"} - } - e.PTrace.Tracee.Parent.Comm = str - return nil - case "ptrace.tracee.parent.container.id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.ContainerID"} - } - e.PTrace.Tracee.Parent.ContainerID = str - return nil - case "ptrace.tracee.parent.cookie": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Cookie"} - } - e.PTrace.Tracee.Parent.Cookie = uint32(v) - return nil - case "ptrace.tracee.parent.created_at": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.CreatedAt"} - } - e.PTrace.Tracee.Parent.CreatedAt = uint64(v) - return nil - case "ptrace.tracee.parent.egid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EGID"} - } - e.PTrace.Tracee.Parent.Credentials.EGID = uint32(v) - return nil - case "ptrace.tracee.parent.egroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EGroup"} - } - e.PTrace.Tracee.Parent.Credentials.EGroup = str - return nil - case "ptrace.tracee.parent.envp": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Envp"} - } - e.PTrace.Tracee.Parent.Envp = append(e.PTrace.Tracee.Parent.Envp, str) - return nil - case "ptrace.tracee.parent.envs": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Envs"} - } - e.PTrace.Tracee.Parent.Envs = append(e.PTrace.Tracee.Parent.Envs, str) - return nil - case "ptrace.tracee.parent.envs_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - var ok bool - if e.PTrace.Tracee.Parent.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.EnvsTruncated"} - } - return nil - case "ptrace.tracee.parent.euid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EUID"} - } - e.PTrace.Tracee.Parent.Credentials.EUID = uint32(v) - return nil - case "ptrace.tracee.parent.euser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EUser"} - } - e.PTrace.Tracee.Parent.Credentials.EUser = str - return nil - case "ptrace.tracee.parent.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.CTime"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.CTime = uint64(v) - return nil - case "ptrace.tracee.parent.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.Filesystem"} - } - e.PTrace.Tracee.Parent.FileEvent.Filesystem = str - return nil - case "ptrace.tracee.parent.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.GID"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.GID = uint32(v) - return nil - case "ptrace.tracee.parent.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Group"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Group = str - return nil - case "ptrace.tracee.parent.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - var ok bool - if e.PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "ptrace.tracee.parent.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Inode"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Inode = uint64(v) - return nil - case "ptrace.tracee.parent.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.parent.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.MTime"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.MTime = uint64(v) - return nil - case "ptrace.tracee.parent.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.MountID"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.MountID = uint32(v) - return nil - case "ptrace.tracee.parent.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.BasenameStr"} - } - e.PTrace.Tracee.Parent.FileEvent.BasenameStr = str - return nil - case "ptrace.tracee.parent.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.file.name.length"} - case "ptrace.tracee.parent.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.PathnameStr"} - } - e.PTrace.Tracee.Parent.FileEvent.PathnameStr = str - return nil - case "ptrace.tracee.parent.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.file.path.length"} - case "ptrace.tracee.parent.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.parent.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.UID"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.UID = uint32(v) - return nil - case "ptrace.tracee.parent.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.User"} - } - e.PTrace.Tracee.Parent.FileEvent.FileFields.User = str - return nil - case "ptrace.tracee.parent.fsgid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSGID"} - } - e.PTrace.Tracee.Parent.Credentials.FSGID = uint32(v) - return nil - case "ptrace.tracee.parent.fsgroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSGroup"} - } - e.PTrace.Tracee.Parent.Credentials.FSGroup = str - return nil - case "ptrace.tracee.parent.fsuid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSUID"} - } - e.PTrace.Tracee.Parent.Credentials.FSUID = uint32(v) - return nil - case "ptrace.tracee.parent.fsuser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSUser"} - } - e.PTrace.Tracee.Parent.Credentials.FSUser = str - return nil - case "ptrace.tracee.parent.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.GID"} - } - e.PTrace.Tracee.Parent.Credentials.GID = uint32(v) - return nil - case "ptrace.tracee.parent.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.Group"} - } - e.PTrace.Tracee.Parent.Credentials.Group = str - return nil - case "ptrace.tracee.parent.interpreter.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "ptrace.tracee.parent.interpreter.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "ptrace.tracee.parent.interpreter.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "ptrace.tracee.parent.interpreter.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - var ok bool - if e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "ptrace.tracee.parent.interpreter.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "ptrace.tracee.parent.interpreter.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.parent.interpreter.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "ptrace.tracee.parent.interpreter.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "ptrace.tracee.parent.interpreter.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "ptrace.tracee.parent.interpreter.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.interpreter.file.name.length"} - case "ptrace.tracee.parent.interpreter.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "ptrace.tracee.parent.interpreter.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.interpreter.file.path.length"} - case "ptrace.tracee.parent.interpreter.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "ptrace.tracee.parent.interpreter.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "ptrace.tracee.parent.interpreter.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User"} - } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "ptrace.tracee.parent.is_kworker": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - var ok bool - if e.PTrace.Tracee.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PIDContext.IsKworker"} - } - return nil - case "ptrace.tracee.parent.is_thread": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - var ok bool - if e.PTrace.Tracee.Parent.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.IsThread"} - } - return nil - case "ptrace.tracee.parent.pid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PIDContext.Pid"} - } - e.PTrace.Tracee.Parent.PIDContext.Pid = uint32(v) - return nil - case "ptrace.tracee.parent.ppid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PPid"} - } - e.PTrace.Tracee.Parent.PPid = uint32(v) - return nil - case "ptrace.tracee.parent.tid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PIDContext.Tid"} - } - e.PTrace.Tracee.Parent.PIDContext.Tid = uint32(v) - return nil - case "ptrace.tracee.parent.tty_name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.TTYName"} - } - e.PTrace.Tracee.Parent.TTYName = str - return nil - case "ptrace.tracee.parent.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.UID"} - } - e.PTrace.Tracee.Parent.Credentials.UID = uint32(v) - return nil - case "ptrace.tracee.parent.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.User"} - } - e.PTrace.Tracee.Parent.Credentials.User = str - return nil - case "ptrace.tracee.pid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PIDContext.Pid"} - } - e.PTrace.Tracee.Process.PIDContext.Pid = uint32(v) - return nil - case "ptrace.tracee.ppid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PPid"} - } - e.PTrace.Tracee.Process.PPid = uint32(v) - return nil - case "ptrace.tracee.tid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PIDContext.Tid"} - } - e.PTrace.Tracee.Process.PIDContext.Tid = uint32(v) - return nil - case "ptrace.tracee.tty_name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.TTYName"} - } - e.PTrace.Tracee.Process.TTYName = str - return nil - case "ptrace.tracee.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.UID"} - } - e.PTrace.Tracee.Process.Credentials.UID = uint32(v) - return nil - case "ptrace.tracee.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.User"} - } - e.PTrace.Tracee.Process.Credentials.User = str - return nil - case "removexattr.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.CTime"} - } - e.RemoveXAttr.File.FileFields.CTime = uint64(v) - return nil - case "removexattr.file.destination.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.Name"} - } - e.RemoveXAttr.Name = str - return nil - case "removexattr.file.destination.namespace": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.Namespace"} - } - e.RemoveXAttr.Namespace = str - return nil - case "removexattr.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.Filesystem"} - } - e.RemoveXAttr.File.Filesystem = str - return nil - case "removexattr.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.GID"} - } - e.RemoveXAttr.File.FileFields.GID = uint32(v) - return nil - case "removexattr.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Group"} - } - e.RemoveXAttr.File.FileFields.Group = str - return nil - case "removexattr.file.in_upper_layer": - var ok bool - if e.RemoveXAttr.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.InUpperLayer"} - } - return nil - case "removexattr.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Inode"} - } - e.RemoveXAttr.File.FileFields.Inode = uint64(v) - return nil - case "removexattr.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Mode"} - } - e.RemoveXAttr.File.FileFields.Mode = uint16(v) - return nil - case "removexattr.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.MTime"} - } - e.RemoveXAttr.File.FileFields.MTime = uint64(v) - return nil - case "removexattr.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.MountID"} - } - e.RemoveXAttr.File.FileFields.MountID = uint32(v) - return nil - case "removexattr.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.BasenameStr"} - } - e.RemoveXAttr.File.BasenameStr = str - return nil - case "removexattr.file.name.length": - return &eval.ErrFieldReadOnly{Field: "removexattr.file.name.length"} - case "removexattr.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.PathnameStr"} - } - e.RemoveXAttr.File.PathnameStr = str - return nil - case "removexattr.file.path.length": - return &eval.ErrFieldReadOnly{Field: "removexattr.file.path.length"} - case "removexattr.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Mode"} - } - e.RemoveXAttr.File.FileFields.Mode = uint16(v) - return nil - case "removexattr.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.UID"} - } - e.RemoveXAttr.File.FileFields.UID = uint32(v) - return nil - case "removexattr.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.User"} - } - e.RemoveXAttr.File.FileFields.User = str - return nil - case "removexattr.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.SyscallEvent.Retval"} - } - e.RemoveXAttr.SyscallEvent.Retval = int64(v) - return nil - case "rename.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.CTime"} - } - e.Rename.Old.FileFields.CTime = uint64(v) - return nil - case "rename.file.destination.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.CTime"} - } - e.Rename.New.FileFields.CTime = uint64(v) - return nil - case "rename.file.destination.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.Filesystem"} - } - e.Rename.New.Filesystem = str - return nil - case "rename.file.destination.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.GID"} - } - e.Rename.New.FileFields.GID = uint32(v) - return nil - case "rename.file.destination.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Group"} - } - e.Rename.New.FileFields.Group = str - return nil - case "rename.file.destination.in_upper_layer": - var ok bool - if e.Rename.New.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.InUpperLayer"} - } - return nil - case "rename.file.destination.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Inode"} - } - e.Rename.New.FileFields.Inode = uint64(v) - return nil - case "rename.file.destination.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Mode"} - } - e.Rename.New.FileFields.Mode = uint16(v) - return nil - case "rename.file.destination.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.MTime"} - } - e.Rename.New.FileFields.MTime = uint64(v) - return nil - case "rename.file.destination.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.MountID"} - } - e.Rename.New.FileFields.MountID = uint32(v) - return nil - case "rename.file.destination.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.BasenameStr"} - } - e.Rename.New.BasenameStr = str - return nil - case "rename.file.destination.name.length": - return &eval.ErrFieldReadOnly{Field: "rename.file.destination.name.length"} - case "rename.file.destination.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.PathnameStr"} - } - e.Rename.New.PathnameStr = str - return nil - case "rename.file.destination.path.length": - return &eval.ErrFieldReadOnly{Field: "rename.file.destination.path.length"} - case "rename.file.destination.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Mode"} - } - e.Rename.New.FileFields.Mode = uint16(v) - return nil - case "rename.file.destination.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.UID"} - } - e.Rename.New.FileFields.UID = uint32(v) - return nil - case "rename.file.destination.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.User"} - } - e.Rename.New.FileFields.User = str - return nil - case "rename.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.Filesystem"} - } - e.Rename.Old.Filesystem = str - return nil - case "rename.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.GID"} - } - e.Rename.Old.FileFields.GID = uint32(v) - return nil - case "rename.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Group"} - } - e.Rename.Old.FileFields.Group = str - return nil - case "rename.file.in_upper_layer": - var ok bool - if e.Rename.Old.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.InUpperLayer"} - } - return nil - case "rename.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Inode"} - } - e.Rename.Old.FileFields.Inode = uint64(v) - return nil - case "rename.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Mode"} - } - e.Rename.Old.FileFields.Mode = uint16(v) - return nil - case "rename.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.MTime"} - } - e.Rename.Old.FileFields.MTime = uint64(v) - return nil - case "rename.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.MountID"} - } - e.Rename.Old.FileFields.MountID = uint32(v) - return nil - case "rename.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.BasenameStr"} - } - e.Rename.Old.BasenameStr = str - return nil - case "rename.file.name.length": - return &eval.ErrFieldReadOnly{Field: "rename.file.name.length"} - case "rename.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.PathnameStr"} - } - e.Rename.Old.PathnameStr = str - return nil - case "rename.file.path.length": - return &eval.ErrFieldReadOnly{Field: "rename.file.path.length"} - case "rename.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Mode"} - } - e.Rename.Old.FileFields.Mode = uint16(v) - return nil - case "rename.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.UID"} - } - e.Rename.Old.FileFields.UID = uint32(v) - return nil - case "rename.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.User"} - } - e.Rename.Old.FileFields.User = str - return nil - case "rename.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rename.SyscallEvent.Retval"} - } - e.Rename.SyscallEvent.Retval = int64(v) - return nil - case "rmdir.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.CTime"} - } - e.Rmdir.File.FileFields.CTime = uint64(v) - return nil - case "rmdir.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.Filesystem"} - } - e.Rmdir.File.Filesystem = str - return nil - case "rmdir.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.GID"} - } - e.Rmdir.File.FileFields.GID = uint32(v) - return nil - case "rmdir.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Group"} - } - e.Rmdir.File.FileFields.Group = str - return nil - case "rmdir.file.in_upper_layer": - var ok bool - if e.Rmdir.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.InUpperLayer"} - } - return nil - case "rmdir.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Inode"} - } - e.Rmdir.File.FileFields.Inode = uint64(v) - return nil - case "rmdir.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Mode"} - } - e.Rmdir.File.FileFields.Mode = uint16(v) - return nil - case "rmdir.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.MTime"} - } - e.Rmdir.File.FileFields.MTime = uint64(v) - return nil - case "rmdir.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.MountID"} - } - e.Rmdir.File.FileFields.MountID = uint32(v) - return nil - case "rmdir.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.BasenameStr"} - } - e.Rmdir.File.BasenameStr = str - return nil - case "rmdir.file.name.length": - return &eval.ErrFieldReadOnly{Field: "rmdir.file.name.length"} - case "rmdir.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.PathnameStr"} - } - e.Rmdir.File.PathnameStr = str - return nil - case "rmdir.file.path.length": - return &eval.ErrFieldReadOnly{Field: "rmdir.file.path.length"} - case "rmdir.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Mode"} - } - e.Rmdir.File.FileFields.Mode = uint16(v) - return nil - case "rmdir.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.UID"} - } - e.Rmdir.File.FileFields.UID = uint32(v) - return nil - case "rmdir.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.User"} - } - e.Rmdir.File.FileFields.User = str - return nil - case "rmdir.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Rmdir.SyscallEvent.Retval"} - } - e.Rmdir.SyscallEvent.Retval = int64(v) - return nil - case "selinux.bool.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SELinux.BoolName"} - } - e.SELinux.BoolName = str - return nil - case "selinux.bool.state": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SELinux.BoolChangeValue"} - } - e.SELinux.BoolChangeValue = str - return nil - case "selinux.bool_commit.state": - var ok bool - if e.SELinux.BoolCommitValue, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "SELinux.BoolCommitValue"} - } - return nil - case "selinux.enforce.status": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SELinux.EnforceStatus"} - } - e.SELinux.EnforceStatus = str - return nil - case "setgid.egid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetGID.EGID"} - } - e.SetGID.EGID = uint32(v) - return nil - case "setgid.egroup": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetGID.EGroup"} - } - e.SetGID.EGroup = str - return nil - case "setgid.fsgid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetGID.FSGID"} - } - e.SetGID.FSGID = uint32(v) - return nil - case "setgid.fsgroup": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetGID.FSGroup"} - } - e.SetGID.FSGroup = str - return nil - case "setgid.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetGID.GID"} - } - e.SetGID.GID = uint32(v) - return nil - case "setgid.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetGID.Group"} - } - e.SetGID.Group = str - return nil - case "setuid.euid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetUID.EUID"} - } - e.SetUID.EUID = uint32(v) - return nil - case "setuid.euser": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetUID.EUser"} - } - e.SetUID.EUser = str - return nil - case "setuid.fsuid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetUID.FSUID"} - } - e.SetUID.FSUID = uint32(v) - return nil - case "setuid.fsuser": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetUID.FSUser"} - } - e.SetUID.FSUser = str - return nil - case "setuid.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetUID.UID"} - } - e.SetUID.UID = uint32(v) - return nil - case "setuid.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetUID.User"} - } - e.SetUID.User = str - return nil - case "setxattr.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.CTime"} - } - e.SetXAttr.File.FileFields.CTime = uint64(v) - return nil - case "setxattr.file.destination.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.Name"} - } - e.SetXAttr.Name = str - return nil - case "setxattr.file.destination.namespace": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.Namespace"} - } - e.SetXAttr.Namespace = str - return nil - case "setxattr.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.Filesystem"} - } - e.SetXAttr.File.Filesystem = str - return nil - case "setxattr.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.GID"} - } - e.SetXAttr.File.FileFields.GID = uint32(v) - return nil - case "setxattr.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Group"} - } - e.SetXAttr.File.FileFields.Group = str - return nil - case "setxattr.file.in_upper_layer": - var ok bool - if e.SetXAttr.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.InUpperLayer"} - } - return nil - case "setxattr.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Inode"} - } - e.SetXAttr.File.FileFields.Inode = uint64(v) - return nil - case "setxattr.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Mode"} - } - e.SetXAttr.File.FileFields.Mode = uint16(v) - return nil - case "setxattr.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.MTime"} - } - e.SetXAttr.File.FileFields.MTime = uint64(v) - return nil - case "setxattr.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.MountID"} - } - e.SetXAttr.File.FileFields.MountID = uint32(v) - return nil - case "setxattr.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.BasenameStr"} - } - e.SetXAttr.File.BasenameStr = str - return nil - case "setxattr.file.name.length": - return &eval.ErrFieldReadOnly{Field: "setxattr.file.name.length"} - case "setxattr.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.PathnameStr"} - } - e.SetXAttr.File.PathnameStr = str - return nil - case "setxattr.file.path.length": - return &eval.ErrFieldReadOnly{Field: "setxattr.file.path.length"} - case "setxattr.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Mode"} - } - e.SetXAttr.File.FileFields.Mode = uint16(v) - return nil - case "setxattr.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.UID"} - } - e.SetXAttr.File.FileFields.UID = uint32(v) - return nil - case "setxattr.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.User"} - } - e.SetXAttr.File.FileFields.User = str - return nil - case "setxattr.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "SetXAttr.SyscallEvent.Retval"} - } - e.SetXAttr.SyscallEvent.Retval = int64(v) - return nil - case "signal.pid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.PID"} - } - e.Signal.PID = uint32(v) - return nil - case "signal.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.SyscallEvent.Retval"} - } - e.Signal.SyscallEvent.Retval = int64(v) - return nil - case "signal.target.ancestors.args": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Args"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Args = str - return nil - case "signal.target.ancestors.args_flags": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(e.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "signal.target.ancestors.args_options": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(e.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "signal.target.ancestors.args_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.ArgsTruncated"} - } - return nil - case "signal.target.ancestors.argv": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(e.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) - return nil - case "signal.target.ancestors.argv0": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv0"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv0 = str - return nil - case "signal.target.ancestors.cap_effective": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapEffective"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) - return nil - case "signal.target.ancestors.cap_permitted": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapPermitted"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) - return nil - case "signal.target.ancestors.comm": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Comm"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Comm = str - return nil - case "signal.target.ancestors.container.id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.ContainerID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.ContainerID = str - return nil - case "signal.target.ancestors.cookie": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Cookie"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Cookie = uint32(v) - return nil - case "signal.target.ancestors.created_at": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.CreatedAt"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) - return nil - case "signal.target.ancestors.egid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) - return nil - case "signal.target.ancestors.egroup": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGroup"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGroup = str - return nil - case "signal.target.ancestors.envp": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Envp"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Envp = append(e.Signal.Target.Ancestor.ProcessContext.Process.Envp, str) - return nil - case "signal.target.ancestors.envs": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Envs"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Envs = append(e.Signal.Target.Ancestor.ProcessContext.Process.Envs, str) - return nil - case "signal.target.ancestors.envs_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.EnvsTruncated"} - } - return nil - case "signal.target.ancestors.euid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) - return nil - case "signal.target.ancestors.euser": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUser"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUser = str - return nil - case "signal.target.ancestors.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "signal.target.ancestors.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.Filesystem"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str - return nil - case "signal.target.ancestors.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "signal.target.ancestors.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str - return nil - case "signal.target.ancestors.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "signal.target.ancestors.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "signal.target.ancestors.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.ancestors.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "signal.target.ancestors.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "signal.target.ancestors.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.BasenameStr"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str - return nil - case "signal.target.ancestors.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.file.name.length"} - case "signal.target.ancestors.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.PathnameStr"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str - return nil - case "signal.target.ancestors.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.file.path.length"} - case "signal.target.ancestors.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.ancestors.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "signal.target.ancestors.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.User"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str - return nil - case "signal.target.ancestors.fsgid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) - return nil - case "signal.target.ancestors.fsgroup": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGroup"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGroup = str - return nil - case "signal.target.ancestors.fsuid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) - return nil - case "signal.target.ancestors.fsuser": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUser"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUser = str - return nil - case "signal.target.ancestors.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.GID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) - return nil - case "signal.target.ancestors.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.Group"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.Group = str - return nil - case "signal.target.ancestors.interpreter.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "signal.target.ancestors.interpreter.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "signal.target.ancestors.interpreter.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "signal.target.ancestors.interpreter.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "signal.target.ancestors.interpreter.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "signal.target.ancestors.interpreter.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "signal.target.ancestors.interpreter.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.ancestors.interpreter.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "signal.target.ancestors.interpreter.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "signal.target.ancestors.interpreter.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "signal.target.ancestors.interpreter.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.interpreter.file.name.length"} - case "signal.target.ancestors.interpreter.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "signal.target.ancestors.interpreter.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.interpreter.file.path.length"} - case "signal.target.ancestors.interpreter.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.ancestors.interpreter.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "signal.target.ancestors.interpreter.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "signal.target.ancestors.is_kworker": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PIDContext.IsKworker"} - } - return nil - case "signal.target.ancestors.is_thread": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.IsThread"} - } - return nil - case "signal.target.ancestors.pid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Pid"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) - return nil - case "signal.target.ancestors.ppid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PPid"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.PPid = uint32(v) - return nil - case "signal.target.ancestors.tid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Tid"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) - return nil - case "signal.target.ancestors.tty_name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.TTYName"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.TTYName = str - return nil - case "signal.target.ancestors.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.UID"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) - return nil - case "signal.target.ancestors.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &model.ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.User"} - } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.User = str - return nil - case "signal.target.args": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Args"} - } - e.Signal.Target.Process.Args = str - return nil - case "signal.target.args_flags": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv"} - } - e.Signal.Target.Process.Argv = append(e.Signal.Target.Process.Argv, str) - return nil - case "signal.target.args_options": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv"} - } - e.Signal.Target.Process.Argv = append(e.Signal.Target.Process.Argv, str) - return nil - case "signal.target.args_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - var ok bool - if e.Signal.Target.Process.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.ArgsTruncated"} - } - return nil - case "signal.target.argv": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv"} - } - e.Signal.Target.Process.Argv = append(e.Signal.Target.Process.Argv, str) - return nil - case "signal.target.argv0": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv0"} - } - e.Signal.Target.Process.Argv0 = str - return nil - case "signal.target.cap_effective": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.CapEffective"} - } - e.Signal.Target.Process.Credentials.CapEffective = uint64(v) - return nil - case "signal.target.cap_permitted": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.CapPermitted"} - } - e.Signal.Target.Process.Credentials.CapPermitted = uint64(v) - return nil - case "signal.target.comm": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Comm"} - } - e.Signal.Target.Process.Comm = str - return nil - case "signal.target.container.id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.ContainerID"} - } - e.Signal.Target.Process.ContainerID = str - return nil - case "signal.target.cookie": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Cookie"} - } - e.Signal.Target.Process.Cookie = uint32(v) - return nil - case "signal.target.created_at": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.CreatedAt"} - } - e.Signal.Target.Process.CreatedAt = uint64(v) - return nil - case "signal.target.egid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EGID"} - } - e.Signal.Target.Process.Credentials.EGID = uint32(v) - return nil - case "signal.target.egroup": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EGroup"} - } - e.Signal.Target.Process.Credentials.EGroup = str - return nil - case "signal.target.envp": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Envp"} - } - e.Signal.Target.Process.Envp = append(e.Signal.Target.Process.Envp, str) - return nil - case "signal.target.envs": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Envs"} - } - e.Signal.Target.Process.Envs = append(e.Signal.Target.Process.Envs, str) - return nil - case "signal.target.envs_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - var ok bool - if e.Signal.Target.Process.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.EnvsTruncated"} - } - return nil - case "signal.target.euid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EUID"} - } - e.Signal.Target.Process.Credentials.EUID = uint32(v) - return nil - case "signal.target.euser": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EUser"} - } - e.Signal.Target.Process.Credentials.EUser = str - return nil - case "signal.target.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.CTime"} - } - e.Signal.Target.Process.FileEvent.FileFields.CTime = uint64(v) - return nil - case "signal.target.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.Filesystem"} - } - e.Signal.Target.Process.FileEvent.Filesystem = str - return nil - case "signal.target.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.GID"} - } - e.Signal.Target.Process.FileEvent.FileFields.GID = uint32(v) - return nil - case "signal.target.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Group"} - } - e.Signal.Target.Process.FileEvent.FileFields.Group = str - return nil - case "signal.target.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - var ok bool - if e.Signal.Target.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "signal.target.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Inode"} - } - e.Signal.Target.Process.FileEvent.FileFields.Inode = uint64(v) - return nil - case "signal.target.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.MTime"} - } - e.Signal.Target.Process.FileEvent.FileFields.MTime = uint64(v) - return nil - case "signal.target.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.MountID"} - } - e.Signal.Target.Process.FileEvent.FileFields.MountID = uint32(v) - return nil - case "signal.target.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.BasenameStr"} - } - e.Signal.Target.Process.FileEvent.BasenameStr = str - return nil - case "signal.target.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.file.name.length"} - case "signal.target.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.PathnameStr"} - } - e.Signal.Target.Process.FileEvent.PathnameStr = str - return nil - case "signal.target.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.file.path.length"} - case "signal.target.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Process.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.UID"} - } - e.Signal.Target.Process.FileEvent.FileFields.UID = uint32(v) - return nil - case "signal.target.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.User"} - } - e.Signal.Target.Process.FileEvent.FileFields.User = str - return nil - case "signal.target.fsgid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSGID"} - } - e.Signal.Target.Process.Credentials.FSGID = uint32(v) - return nil - case "signal.target.fsgroup": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSGroup"} - } - e.Signal.Target.Process.Credentials.FSGroup = str - return nil - case "signal.target.fsuid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSUID"} - } - e.Signal.Target.Process.Credentials.FSUID = uint32(v) - return nil - case "signal.target.fsuser": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSUser"} - } - e.Signal.Target.Process.Credentials.FSUser = str - return nil - case "signal.target.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.GID"} - } - e.Signal.Target.Process.Credentials.GID = uint32(v) - return nil - case "signal.target.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.Group"} - } - e.Signal.Target.Process.Credentials.Group = str - return nil - case "signal.target.interpreter.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "signal.target.interpreter.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "signal.target.interpreter.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "signal.target.interpreter.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "signal.target.interpreter.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - var ok bool - if e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "signal.target.interpreter.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "signal.target.interpreter.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.interpreter.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "signal.target.interpreter.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "signal.target.interpreter.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "signal.target.interpreter.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.interpreter.file.name.length"} - case "signal.target.interpreter.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "signal.target.interpreter.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.interpreter.file.path.length"} - case "signal.target.interpreter.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.interpreter.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "signal.target.interpreter.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User"} - } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "signal.target.is_kworker": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - var ok bool - if e.Signal.Target.Process.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PIDContext.IsKworker"} - } - return nil - case "signal.target.is_thread": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - var ok bool - if e.Signal.Target.Process.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.IsThread"} - } - return nil - case "signal.target.parent.args": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Args"} - } - e.Signal.Target.Parent.Args = str - return nil - case "signal.target.parent.args_flags": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv"} - } - e.Signal.Target.Parent.Argv = append(e.Signal.Target.Parent.Argv, str) - return nil - case "signal.target.parent.args_options": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv"} - } - e.Signal.Target.Parent.Argv = append(e.Signal.Target.Parent.Argv, str) - return nil - case "signal.target.parent.args_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - var ok bool - if e.Signal.Target.Parent.ArgsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.ArgsTruncated"} - } - return nil - case "signal.target.parent.argv": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv"} - } - e.Signal.Target.Parent.Argv = append(e.Signal.Target.Parent.Argv, str) - return nil - case "signal.target.parent.argv0": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv0"} - } - e.Signal.Target.Parent.Argv0 = str - return nil - case "signal.target.parent.cap_effective": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.CapEffective"} - } - e.Signal.Target.Parent.Credentials.CapEffective = uint64(v) - return nil - case "signal.target.parent.cap_permitted": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.CapPermitted"} - } - e.Signal.Target.Parent.Credentials.CapPermitted = uint64(v) - return nil - case "signal.target.parent.comm": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Comm"} - } - e.Signal.Target.Parent.Comm = str - return nil - case "signal.target.parent.container.id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.ContainerID"} - } - e.Signal.Target.Parent.ContainerID = str - return nil - case "signal.target.parent.cookie": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Cookie"} - } - e.Signal.Target.Parent.Cookie = uint32(v) - return nil - case "signal.target.parent.created_at": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.CreatedAt"} - } - e.Signal.Target.Parent.CreatedAt = uint64(v) - return nil - case "signal.target.parent.egid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EGID"} - } - e.Signal.Target.Parent.Credentials.EGID = uint32(v) - return nil - case "signal.target.parent.egroup": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EGroup"} - } - e.Signal.Target.Parent.Credentials.EGroup = str - return nil - case "signal.target.parent.envp": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Envp"} - } - e.Signal.Target.Parent.Envp = append(e.Signal.Target.Parent.Envp, str) - return nil - case "signal.target.parent.envs": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Envs"} - } - e.Signal.Target.Parent.Envs = append(e.Signal.Target.Parent.Envs, str) - return nil - case "signal.target.parent.envs_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - var ok bool - if e.Signal.Target.Parent.EnvsTruncated, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.EnvsTruncated"} - } - return nil - case "signal.target.parent.euid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EUID"} - } - e.Signal.Target.Parent.Credentials.EUID = uint32(v) - return nil - case "signal.target.parent.euser": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EUser"} - } - e.Signal.Target.Parent.Credentials.EUser = str - return nil - case "signal.target.parent.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.CTime"} - } - e.Signal.Target.Parent.FileEvent.FileFields.CTime = uint64(v) - return nil - case "signal.target.parent.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.Filesystem"} - } - e.Signal.Target.Parent.FileEvent.Filesystem = str - return nil - case "signal.target.parent.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.GID"} - } - e.Signal.Target.Parent.FileEvent.FileFields.GID = uint32(v) - return nil - case "signal.target.parent.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Group"} - } - e.Signal.Target.Parent.FileEvent.FileFields.Group = str - return nil - case "signal.target.parent.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - var ok bool - if e.Signal.Target.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "signal.target.parent.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Inode"} - } - e.Signal.Target.Parent.FileEvent.FileFields.Inode = uint64(v) - return nil - case "signal.target.parent.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Parent.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.parent.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.MTime"} - } - e.Signal.Target.Parent.FileEvent.FileFields.MTime = uint64(v) - return nil - case "signal.target.parent.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.MountID"} - } - e.Signal.Target.Parent.FileEvent.FileFields.MountID = uint32(v) - return nil - case "signal.target.parent.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.BasenameStr"} - } - e.Signal.Target.Parent.FileEvent.BasenameStr = str - return nil - case "signal.target.parent.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.parent.file.name.length"} - case "signal.target.parent.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.PathnameStr"} - } - e.Signal.Target.Parent.FileEvent.PathnameStr = str - return nil - case "signal.target.parent.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.parent.file.path.length"} - case "signal.target.parent.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Parent.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.parent.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.UID"} - } - e.Signal.Target.Parent.FileEvent.FileFields.UID = uint32(v) - return nil - case "signal.target.parent.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.User"} - } - e.Signal.Target.Parent.FileEvent.FileFields.User = str - return nil - case "signal.target.parent.fsgid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSGID"} - } - e.Signal.Target.Parent.Credentials.FSGID = uint32(v) - return nil - case "signal.target.parent.fsgroup": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSGroup"} - } - e.Signal.Target.Parent.Credentials.FSGroup = str - return nil - case "signal.target.parent.fsuid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSUID"} - } - e.Signal.Target.Parent.Credentials.FSUID = uint32(v) - return nil - case "signal.target.parent.fsuser": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSUser"} - } - e.Signal.Target.Parent.Credentials.FSUser = str - return nil - case "signal.target.parent.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.GID"} - } - e.Signal.Target.Parent.Credentials.GID = uint32(v) - return nil - case "signal.target.parent.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.Group"} - } - e.Signal.Target.Parent.Credentials.Group = str - return nil - case "signal.target.parent.interpreter.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) - return nil - case "signal.target.parent.interpreter.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem = str - return nil - case "signal.target.parent.interpreter.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) - return nil - case "signal.target.parent.interpreter.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group = str - return nil - case "signal.target.parent.interpreter.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - var ok bool - if e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} - } - return nil - case "signal.target.parent.interpreter.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) - return nil - case "signal.target.parent.interpreter.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.parent.interpreter.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) - return nil - case "signal.target.parent.interpreter.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) - return nil - case "signal.target.parent.interpreter.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr = str - return nil - case "signal.target.parent.interpreter.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.parent.interpreter.file.name.length"} - case "signal.target.parent.interpreter.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr = str - return nil - case "signal.target.parent.interpreter.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - return &eval.ErrFieldReadOnly{Field: "signal.target.parent.interpreter.file.path.length"} - case "signal.target.parent.interpreter.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) - return nil - case "signal.target.parent.interpreter.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) - return nil - case "signal.target.parent.interpreter.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User"} - } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User = str - return nil - case "signal.target.parent.is_kworker": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - var ok bool - if e.Signal.Target.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PIDContext.IsKworker"} - } - return nil - case "signal.target.parent.is_thread": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - var ok bool - if e.Signal.Target.Parent.IsThread, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.IsThread"} - } - return nil - case "signal.target.parent.pid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PIDContext.Pid"} - } - e.Signal.Target.Parent.PIDContext.Pid = uint32(v) - return nil - case "signal.target.parent.ppid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PPid"} - } - e.Signal.Target.Parent.PPid = uint32(v) - return nil - case "signal.target.parent.tid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PIDContext.Tid"} - } - e.Signal.Target.Parent.PIDContext.Tid = uint32(v) - return nil - case "signal.target.parent.tty_name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.TTYName"} - } - e.Signal.Target.Parent.TTYName = str - return nil - case "signal.target.parent.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.UID"} - } - e.Signal.Target.Parent.Credentials.UID = uint32(v) - return nil - case "signal.target.parent.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &model.Process{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.User"} - } - e.Signal.Target.Parent.Credentials.User = str - return nil - case "signal.target.pid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PIDContext.Pid"} - } - e.Signal.Target.Process.PIDContext.Pid = uint32(v) - return nil - case "signal.target.ppid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PPid"} - } - e.Signal.Target.Process.PPid = uint32(v) - return nil - case "signal.target.tid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PIDContext.Tid"} - } - e.Signal.Target.Process.PIDContext.Tid = uint32(v) - return nil - case "signal.target.tty_name": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.TTYName"} - } - e.Signal.Target.Process.TTYName = str - return nil - case "signal.target.uid": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.UID"} - } - e.Signal.Target.Process.Credentials.UID = uint32(v) - return nil - case "signal.target.user": - if e.Signal.Target == nil { - e.Signal.Target = &model.ProcessContext{} - } - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.User"} - } - e.Signal.Target.Process.Credentials.User = str - return nil - case "signal.type": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Signal.Type"} - } - e.Signal.Type = uint32(v) - return nil - case "splice.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.CTime"} - } - e.Splice.File.FileFields.CTime = uint64(v) - return nil - case "splice.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.Filesystem"} - } - e.Splice.File.Filesystem = str - return nil - case "splice.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.GID"} - } - e.Splice.File.FileFields.GID = uint32(v) - return nil - case "splice.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Group"} - } - e.Splice.File.FileFields.Group = str - return nil - case "splice.file.in_upper_layer": - var ok bool - if e.Splice.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.InUpperLayer"} - } - return nil - case "splice.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Inode"} - } - e.Splice.File.FileFields.Inode = uint64(v) - return nil - case "splice.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Mode"} - } - e.Splice.File.FileFields.Mode = uint16(v) - return nil - case "splice.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.MTime"} - } - e.Splice.File.FileFields.MTime = uint64(v) - return nil - case "splice.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.MountID"} - } - e.Splice.File.FileFields.MountID = uint32(v) - return nil - case "splice.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.BasenameStr"} - } - e.Splice.File.BasenameStr = str - return nil - case "splice.file.name.length": - return &eval.ErrFieldReadOnly{Field: "splice.file.name.length"} - case "splice.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.PathnameStr"} - } - e.Splice.File.PathnameStr = str - return nil - case "splice.file.path.length": - return &eval.ErrFieldReadOnly{Field: "splice.file.path.length"} - case "splice.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Mode"} - } - e.Splice.File.FileFields.Mode = uint16(v) - return nil - case "splice.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.UID"} - } - e.Splice.File.FileFields.UID = uint32(v) - return nil - case "splice.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.User"} - } - e.Splice.File.FileFields.User = str - return nil - case "splice.pipe_entry_flag": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.PipeEntryFlag"} - } - e.Splice.PipeEntryFlag = uint32(v) - return nil - case "splice.pipe_exit_flag": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.PipeExitFlag"} - } - e.Splice.PipeExitFlag = uint32(v) - return nil - case "splice.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Splice.SyscallEvent.Retval"} - } - e.Splice.SyscallEvent.Retval = int64(v) - return nil - case "unlink.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.CTime"} - } - e.Unlink.File.FileFields.CTime = uint64(v) - return nil - case "unlink.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.Filesystem"} - } - e.Unlink.File.Filesystem = str - return nil - case "unlink.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.GID"} - } - e.Unlink.File.FileFields.GID = uint32(v) - return nil - case "unlink.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Group"} - } - e.Unlink.File.FileFields.Group = str - return nil - case "unlink.file.in_upper_layer": - var ok bool - if e.Unlink.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.InUpperLayer"} - } - return nil - case "unlink.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Inode"} - } - e.Unlink.File.FileFields.Inode = uint64(v) - return nil - case "unlink.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Mode"} - } - e.Unlink.File.FileFields.Mode = uint16(v) - return nil - case "unlink.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.MTime"} - } - e.Unlink.File.FileFields.MTime = uint64(v) - return nil - case "unlink.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.MountID"} - } - e.Unlink.File.FileFields.MountID = uint32(v) - return nil - case "unlink.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.BasenameStr"} - } - e.Unlink.File.BasenameStr = str - return nil - case "unlink.file.name.length": - return &eval.ErrFieldReadOnly{Field: "unlink.file.name.length"} - case "unlink.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.PathnameStr"} - } - e.Unlink.File.PathnameStr = str - return nil - case "unlink.file.path.length": - return &eval.ErrFieldReadOnly{Field: "unlink.file.path.length"} - case "unlink.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Mode"} - } - e.Unlink.File.FileFields.Mode = uint16(v) - return nil - case "unlink.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.UID"} - } - e.Unlink.File.FileFields.UID = uint32(v) - return nil - case "unlink.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.User"} - } - e.Unlink.File.FileFields.User = str - return nil - case "unlink.flags": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.Flags"} - } - e.Unlink.Flags = uint32(v) - return nil - case "unlink.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Unlink.SyscallEvent.Retval"} - } - e.Unlink.SyscallEvent.Retval = int64(v) - return nil - case "unload_module.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "UnloadModule.Name"} - } - e.UnloadModule.Name = str - return nil - case "unload_module.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "UnloadModule.SyscallEvent.Retval"} - } - e.UnloadModule.SyscallEvent.Retval = int64(v) - return nil - case "utimes.file.change_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.CTime"} - } - e.Utimes.File.FileFields.CTime = uint64(v) - return nil - case "utimes.file.filesystem": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.Filesystem"} - } - e.Utimes.File.Filesystem = str - return nil - case "utimes.file.gid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.GID"} - } - e.Utimes.File.FileFields.GID = uint32(v) - return nil - case "utimes.file.group": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Group"} - } - e.Utimes.File.FileFields.Group = str - return nil - case "utimes.file.in_upper_layer": - var ok bool - if e.Utimes.File.FileFields.InUpperLayer, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.InUpperLayer"} - } - return nil - case "utimes.file.inode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Inode"} - } - e.Utimes.File.FileFields.Inode = uint64(v) - return nil - case "utimes.file.mode": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Mode"} - } - e.Utimes.File.FileFields.Mode = uint16(v) - return nil - case "utimes.file.modification_time": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.MTime"} - } - e.Utimes.File.FileFields.MTime = uint64(v) - return nil - case "utimes.file.mount_id": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.MountID"} - } - e.Utimes.File.FileFields.MountID = uint32(v) - return nil - case "utimes.file.name": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.BasenameStr"} - } - e.Utimes.File.BasenameStr = str - return nil - case "utimes.file.name.length": - return &eval.ErrFieldReadOnly{Field: "utimes.file.name.length"} - case "utimes.file.path": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.PathnameStr"} - } - e.Utimes.File.PathnameStr = str - return nil - case "utimes.file.path.length": - return &eval.ErrFieldReadOnly{Field: "utimes.file.path.length"} - case "utimes.file.rights": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Mode"} - } - e.Utimes.File.FileFields.Mode = uint16(v) - return nil - case "utimes.file.uid": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.UID"} - } - e.Utimes.File.FileFields.UID = uint32(v) - return nil - case "utimes.file.user": - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.User"} - } - e.Utimes.File.FileFields.User = str - return nil - case "utimes.retval": - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "Utimes.SyscallEvent.Retval"} - } - e.Utimes.SyscallEvent.Retval = int64(v) - return nil - } - return &eval.ErrFieldNotFound{Field: field} -} diff --git a/pkg/security/probe/activity_dump.go b/pkg/security/probe/activity_dump.go index b04004c93a377..330347622a82c 100644 --- a/pkg/security/probe/activity_dump.go +++ b/pkg/security/probe/activity_dump.go @@ -102,6 +102,8 @@ type ActivityDump struct { processedCount map[model.EventType]*atomic.Uint64 addedRuntimeCount map[model.EventType]*atomic.Uint64 addedSnapshotCount map[model.EventType]*atomic.Uint64 + brokenLineageDrop *atomic.Uint64 + countedByLimiter bool shouldMergePaths bool pathMergedCount *atomic.Uint64 @@ -149,6 +151,7 @@ func NewEmptyActivityDump() *ActivityDump { processedCount: make(map[model.EventType]*atomic.Uint64), addedRuntimeCount: make(map[model.EventType]*atomic.Uint64), addedSnapshotCount: make(map[model.EventType]*atomic.Uint64), + brokenLineageDrop: atomic.NewUint64(0), pathMergedCount: atomic.NewUint64(0), StorageRequests: make(map[config.StorageFormat][]config.StorageRequest), } @@ -460,6 +463,12 @@ func (ad *ActivityDump) disable() error { func (ad *ActivityDump) Finalize(releaseTracedCgroupSpot bool) { ad.Lock() defer ad.Unlock() + ad.finalize(releaseTracedCgroupSpot) +} + +// finalize (thread unsafe) finalizes an active dump: envs and args are scrubbed, tags, service and container ID are set. If a cgroup +// spot can be released, the dump will be fully stopped. +func (ad *ActivityDump) finalize(releaseTracedCgroupSpot bool) { ad.DumpMetadata.End = time.Now() if releaseTracedCgroupSpot || len(ad.DumpMetadata.Comm) > 0 { @@ -504,7 +513,7 @@ func (ad *ActivityDump) debug(w io.Writer) { } } -func (ad *ActivityDump) isEventTypeTraced(event *Event) bool { +func (ad *ActivityDump) isEventTypeTraced(event *model.Event) bool { for _, evtType := range ad.LoadConfig.TracedEventTypes { if evtType == event.GetEventType() { return true @@ -513,9 +522,16 @@ func (ad *ActivityDump) isEventTypeTraced(event *Event) bool { return false } +// IsEmpty return true if the dump did not contain any nodes +func (ad *ActivityDump) IsEmpty() bool { + ad.Lock() + defer ad.Unlock() + return len(ad.ProcessActivityTree) == 0 +} + // Insert inserts the provided event in the active ActivityDump. This function returns true if a new entry was added, // false if the event was dropped. -func (ad *ActivityDump) Insert(event *Event) (newEntry bool) { +func (ad *ActivityDump) Insert(event *model.Event) (newEntry bool) { ad.Lock() defer ad.Unlock() @@ -541,7 +557,14 @@ func (ad *ActivityDump) Insert(event *Event) (newEntry bool) { }() // find the node where the event should be inserted - entry, _ := event.ResolveProcessCacheEntry() + entry, _ := event.FieldHandlers.ResolveProcessCacheEntry(event) + if entry == nil { + return false + } + if !entry.HasCompleteLineage() { // check that the process context lineage is complete, otherwise drop it + ad.brokenLineageDrop.Inc() + return false + } node := ad.findOrCreateProcessActivityNode(entry, Runtime) if node == nil { // a process node couldn't be found for the provided event as it doesn't match the ActivityDump query @@ -549,7 +572,7 @@ func (ad *ActivityDump) Insert(event *Event) (newEntry bool) { } // resolve fields - event.ResolveFields(true) + event.ResolveFieldsForAD() // the count of processed events is the count of events that matched the activity dump selector = the events for // which we successfully found a process activity node @@ -599,7 +622,7 @@ func (ad *ActivityDump) findOrCreateProcessActivityNode(entry *model.ProcessCach // find or create a ProcessActivityNode for the parent of the input ProcessCacheEntry. If the parent is a fork entry, // jump immediately to the next ancestor. - parentNode := ad.findOrCreateProcessActivityNode(entry.GetNextAncestorNoFork(), Snapshot) + parentNode := ad.findOrCreateProcessActivityNode(entry.GetNextAncestorBinary(), Snapshot) // if parentNode is nil, the parent of the current node is out of tree (either because the parent is null, or it // doesn't match the dump tags). @@ -616,6 +639,12 @@ func (ad *ActivityDump) findOrCreateProcessActivityNode(entry *model.ProcessCach return root } } + + // we're about to add a root process node, make sure this root node passes the root node sanitizer + if !ad.IsValidRootNode(entry) { + return node + } + // if it doesn't, create a new ProcessActivityNode for the input ProcessCacheEntry node = NewProcessActivityNode(entry, generationType, &ad.nodeStats) // insert in the list of root entries @@ -634,7 +663,7 @@ func (ad *ActivityDump) findOrCreateProcessActivityNode(entry *model.ProcessCach // if none of them matched, create a new ProcessActivityNode for the input processCacheEntry node = NewProcessActivityNode(entry, generationType, &ad.nodeStats) - // insert in the list of root entries + // insert in the list of children parentNode.Children = append(parentNode.Children, node) } @@ -732,6 +761,12 @@ func (ad *ActivityDump) SendStats() error { } } + if value := ad.brokenLineageDrop.Swap(0); value > 0 { + if err := ad.adm.statsdClient.Count(metrics.MetricActivityDumpBrokenLineageDrop, int64(value), nil, 1.0); err != nil { + return fmt.Errorf("couldn't send %s metric: %w", metrics.MetricActivityDumpBrokenLineageDrop, err) + } + } + if value := ad.pathMergedCount.Swap(0); value > 0 { if err := ad.adm.statsdClient.Count(metrics.MetricActivityDumpPathMergeCount, int64(value), nil, 1.0); err != nil { return fmt.Errorf("couldn't send %s metric: %w", metrics.MetricActivityDumpPathMergeCount, err) @@ -777,6 +812,7 @@ func (ad *ActivityDump) resolveTags() error { if err != nil { return fmt.Errorf("failed to resolve %s: %w", ad.DumpMetadata.ContainerID, err) } + return nil } @@ -1103,16 +1139,16 @@ func extractFirstParent(path string) (string, int) { // InsertFileEventInProcess inserts the provided file event in the current node. This function returns true if a new entry was // added, false if the event was dropped. -func (ad *ActivityDump) InsertFileEventInProcess(pan *ProcessActivityNode, fileEvent *model.FileEvent, event *Event, generationType NodeGenerationType) bool { +func (ad *ActivityDump) InsertFileEventInProcess(pan *ProcessActivityNode, fileEvent *model.FileEvent, event *model.Event, generationType NodeGenerationType) bool { var filePath string if generationType != Snapshot { - filePath = event.ResolveFilePath(fileEvent) + filePath = event.FieldHandlers.ResolveFilePath(event, fileEvent) } else { filePath = fileEvent.PathnameStr } // drop file events with abnormal paths - if event != nil && event.GetPathResolutionError() != nil { + if event != nil && event.PathResolutionError != nil { return false } @@ -1173,8 +1209,8 @@ func (ad *ActivityDump) snapshotProcess(pan *ProcessActivityNode) error { } func (ad *ActivityDump) insertSnapshotedSocket(pan *ProcessActivityNode, p *process.Process, family uint16, ip net.IP, port uint16) { - evt := NewEvent(ad.adm.resolvers, ad.adm.scrubber, ad.adm.probe) - evt.Event.Type = uint32(model.BindEventType) + evt := NewEvent(ad.adm.fieldHandlers) + evt.Type = uint32(model.BindEventType) evt.Bind.SyscallEvent.Retval = 0 evt.Bind.AddrFamily = family @@ -1315,8 +1351,8 @@ func (pan *ProcessActivityNode) snapshotFiles(p *process.Process, ad *ActivityDu continue } - evt := NewEvent(ad.adm.resolvers, ad.adm.scrubber, ad.adm.probe) - evt.Event.Type = uint32(model.FileOpenEventType) + evt := NewEvent(ad.adm.fieldHandlers) + evt.Type = uint32(model.FileOpenEventType) resolvedPath, err = filepath.EvalSymlinks(f) if err != nil { @@ -1390,6 +1426,12 @@ func (ad *ActivityDump) InsertBindEvent(pan *ProcessActivityNode, evt *model.Bin return newNode } +// IsValidRootNode evaluates if the provided process entry is allowed to become a root node of an Activity Dump +func (ad *ActivityDump) IsValidRootNode(entry *model.ProcessCacheEntry) bool { + // TODO: evaluate if the same issue affects other container runtimes + return !strings.HasPrefix(entry.FileEvent.BasenameStr, "runc") +} + // InsertSyscalls inserts the syscall of the process in the dump func (pan *ProcessActivityNode) InsertSyscalls(e *model.SyscallsEvent) bool { var hasNewSyscalls bool @@ -1428,7 +1470,7 @@ type OpenNode struct { } // NewFileActivityNode returns a new FileActivityNode instance -func NewFileActivityNode(fileEvent *model.FileEvent, event *Event, name string, generationType NodeGenerationType, nodeStats *ActivityDumpNodeStats) *FileActivityNode { +func NewFileActivityNode(fileEvent *model.FileEvent, event *model.Event, name string, generationType NodeGenerationType, nodeStats *ActivityDumpNodeStats) *FileActivityNode { nodeStats.fileNodes++ fan := &FileActivityNode{ Name: name, @@ -1451,12 +1493,12 @@ func (fan *FileActivityNode) getNodeLabel() string { return label } -func (fan *FileActivityNode) enrichFromEvent(event *Event) { +func (fan *FileActivityNode) enrichFromEvent(event *model.Event) { if event == nil { return } if fan.FirstSeen.IsZero() { - fan.FirstSeen = event.ResolveEventTimestamp() + fan.FirstSeen = event.FieldHandlers.ResolveEventTimestamp(event) } switch event.GetEventType() { @@ -1471,7 +1513,7 @@ func (fan *FileActivityNode) enrichFromEvent(event *Event) { // InsertFileEventInFile inserts an event in a FileActivityNode. This function returns true if a new entry was added, false if // the event was dropped. -func (ad *ActivityDump) InsertFileEventInFile(fan *FileActivityNode, fileEvent *model.FileEvent, event *Event, remainingPath string, generationType NodeGenerationType) bool { +func (ad *ActivityDump) InsertFileEventInFile(fan *FileActivityNode, fileEvent *model.FileEvent, event *model.Event, remainingPath string, generationType NodeGenerationType) bool { currentFan := fan currentPath := remainingPath somethingChanged := false diff --git a/pkg/security/probe/activity_dump_manager.go b/pkg/security/probe/activity_dump_manager.go index 16b00e61aedeb..6eb0877df055d 100644 --- a/pkg/security/probe/activity_dump_manager.go +++ b/pkg/security/probe/activity_dump_manager.go @@ -16,6 +16,11 @@ import ( "time" "github.com/cilium/ebpf" + "github.com/hashicorp/golang-lru/v2/simplelru" + "go.uber.org/atomic" + + "github.com/DataDog/datadog-go/v5/statsd" + manager "github.com/DataDog/ebpf-manager" coreconfig "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/process/procutil" @@ -27,8 +32,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/seclog" "github.com/DataDog/datadog-agent/pkg/security/utils" - "github.com/DataDog/datadog-go/v5/statsd" - manager "github.com/DataDog/ebpf-manager" ) func areCGroupADsEnabled(c *config.Config) bool { @@ -38,12 +41,12 @@ func areCGroupADsEnabled(c *config.Config) bool { // ActivityDumpManager is used to manage ActivityDumps type ActivityDumpManager struct { sync.RWMutex - probe *Probe config *config.Config statsdClient statsd.ClientInterface + emptyDropped *atomic.Uint64 + fieldHandlers *FieldHandlers resolvers *Resolvers kernelVersion *kernel.Version - scrubber *procutil.DataScrubber manager *manager.Manager tracedPIDsMap *ebpf.Map @@ -53,6 +56,8 @@ type ActivityDumpManager struct { activityDumpsConfigMap *ebpf.Map ignoreFromSnapshot map[string]bool + dumpLimiter *simplelru.LRU[string, *atomic.Uint64] + activeDumps []*ActivityDump snapshotQueue chan *ActivityDump storage *ActivityDumpStorageManager @@ -104,9 +109,13 @@ func (adm *ActivityDumpManager) cleanup() { ad.Finalize(true) seclog.Infof("tracing stopped for [%s]", ad.GetSelectorStr()) - // persist dump - if err := adm.storage.Persist(ad); err != nil { - seclog.Errorf("couldn't persist dump [%s]: %v", ad.GetSelectorStr(), err) + // persist dump if not empty + if !ad.IsEmpty() { + if err := adm.storage.Persist(ad); err != nil { + seclog.Errorf("couldn't persist dump [%s]: %v", ad.GetSelectorStr(), err) + } + } else { + adm.emptyDropped.Inc() } // remove from the map of ignored dumps @@ -164,6 +173,29 @@ func (adm *ActivityDumpManager) resolveTags() { if err != nil { seclog.Warnf("couldn't resolve activity dump tags (will try again later): %v", err) } + + if !ad.countedByLimiter { + // check if we should discard this dump based on the manager dump limiter + limiterKey := utils.GetTagValue("image_name", ad.Tags) + ":" + utils.GetTagValue("image_tag", ad.Tags) + if limiterKey == ":" { + // wait for the tags + continue + } + + counter, ok := adm.dumpLimiter.Get(limiterKey) + if !ok { + counter = atomic.NewUint64(0) + adm.dumpLimiter.Add(limiterKey, counter) + } + + if counter.Load() >= uint64(ad.adm.config.ActivityDumpMaxDumpCountPerWorkload) { + ad.Finalize(true) + adm.RemoveDump(ad) + } else { + ad.countedByLimiter = true + counter.Add(1) + } + } } } @@ -200,12 +232,19 @@ func NewActivityDumpManager(p *Probe, config *config.Config, statsdClient statsd return nil, fmt.Errorf("couldn't instantiate the activity dump storage manager: %w", err) } + limiter, err := simplelru.NewLRU(1024, func(workloadSelector string, count *atomic.Uint64) { + }) + if err != nil { + return nil, fmt.Errorf("couldn't create dump limiter: %w", err) + } + adm := &ActivityDumpManager{ config: config, statsdClient: statsdClient, + emptyDropped: atomic.NewUint64(0), + fieldHandlers: p.fieldHandlers, resolvers: resolvers, kernelVersion: kernelVersion, - scrubber: scrubber, manager: manager, tracedPIDsMap: tracedPIDs, tracedCommsMap: tracedComms, @@ -215,6 +254,7 @@ func NewActivityDumpManager(p *Probe, config *config.Config, statsdClient statsd snapshotQueue: make(chan *ActivityDump, 100), ignoreFromSnapshot: make(map[string]bool), storage: storageManager, + dumpLimiter: limiter, } loadController, err := NewActivityDumpLoadController(adm) @@ -384,6 +424,26 @@ func (adm *ActivityDumpManager) ListActivityDumps(params *api.ActivityDumpListPa }, nil } +// RemoveDump removes a dump +func (adm *ActivityDumpManager) RemoveDump(dump *ActivityDump) { + adm.Lock() + defer adm.Unlock() + adm.removeDump(dump) +} + +func (adm *ActivityDumpManager) removeDump(dump *ActivityDump) { + toDelete := -1 + for i, d := range adm.activeDumps { + if d.Name == dump.Name { + toDelete = i + break + } + } + if toDelete >= 0 { + adm.activeDumps = append(adm.activeDumps[:toDelete], adm.activeDumps[toDelete+1:]...) + } +} + // StopActivityDump stops an active activity dump func (adm *ActivityDumpManager) StopActivityDump(params *api.ActivityDumpStopParams) (*api.ActivityDumpStopMessage, error) { adm.Lock() @@ -401,9 +461,13 @@ func (adm *ActivityDumpManager) StopActivityDump(params *api.ActivityDumpStopPar seclog.Infof("tracing stopped for [%s]", d.GetSelectorStr()) toDelete = i - // persist now - if err := adm.storage.Persist(d); err != nil { - seclog.Errorf("couldn't persist [%s]: %v", d.GetSelectorStr(), err) + // persist dump if not empty + if !d.IsEmpty() { + if err := adm.storage.Persist(d); err != nil { + seclog.Errorf("couldn't persist dump [%s]: %v", d.GetSelectorStr(), err) + } + } else { + adm.emptyDropped.Inc() } break } @@ -424,7 +488,7 @@ func (adm *ActivityDumpManager) StopActivityDump(params *api.ActivityDumpStopPar } // ProcessEvent processes a new event and insert it in an activity dump if applicable -func (adm *ActivityDumpManager) ProcessEvent(event *Event) { +func (adm *ActivityDumpManager) ProcessEvent(event *model.Event) { // is this event sampled for activity dumps ? if !event.IsActivityDumpSample { return @@ -446,10 +510,10 @@ func (adm *ActivityDumpManager) SearchTracedProcessCacheEntryCallback(ad *Activi // compute the list of ancestors, we need to start inserting them from the root ancestors := []*model.ProcessCacheEntry{entry} - parent := entry.GetNextAncestorNoFork() + parent := entry.GetNextAncestorBinary() for parent != nil { ancestors = append([]*model.ProcessCacheEntry{parent}, ancestors...) - parent = parent.GetNextAncestorNoFork() + parent = parent.GetNextAncestorBinary() } for _, parent = range ancestors { @@ -505,6 +569,13 @@ func (adm *ActivityDumpManager) SendStats() error { if err := adm.statsdClient.Gauge(metrics.MetricActivityDumpActiveDumps, activeDumps, []string{}, 1.0); err != nil { seclog.Errorf("couldn't send MetricActivityDumpActiveDumps metric: %v", err) } + + if value := adm.emptyDropped.Swap(0); value > 0 { + if err := adm.statsdClient.Count(metrics.MetricActivityDumpEmptyDropped, int64(value), nil, 1.0); err != nil { + return fmt.Errorf("couldn't send %s metric: %w", metrics.MetricActivityDumpEmptyDropped, err) + } + } + return nil } @@ -583,9 +654,13 @@ func (adm *ActivityDumpManager) triggerLoadController() { ad.Finalize(false) seclog.Infof("tracing paused for [%s]", ad.GetSelectorStr()) - // persist dump - if err := adm.storage.Persist(ad); err != nil { - seclog.Errorf("couldn't persist dump [%s]: %v", ad.GetSelectorStr(), err) + // persist dump if not empty + if !ad.IsEmpty() { + if err := adm.storage.Persist(ad); err != nil { + seclog.Errorf("couldn't persist dump [%s]: %v", ad.GetSelectorStr(), err) + } + } else { + adm.emptyDropped.Inc() } // restart a new dump for the same workload diff --git a/pkg/security/probe/activity_dump_manager_test.go b/pkg/security/probe/activity_dump_manager_test.go index 1cd294012c996..e62ee17a9fd54 100644 --- a/pkg/security/probe/activity_dump_manager_test.go +++ b/pkg/security/probe/activity_dump_manager_test.go @@ -346,19 +346,15 @@ func TestActivityDumpManager_getOverweightDumps(t *testing.T) { } for _, tt := range tests { - probe := &Probe{ - StatsdClient: &statsd.NoOpClient{}, - Config: &config.Config{ - ActivityDumpMaxDumpSize: func() int { - return 2048 - }, - }} t.Run(tt.name, func(t *testing.T) { adm := &ActivityDumpManager{ - activeDumps: tt.fields.activeDumps, - probe: probe, - config: probe.Config, - statsdClient: probe.StatsdClient, + activeDumps: tt.fields.activeDumps, + config: &config.Config{ + ActivityDumpMaxDumpSize: func() int { + return 2048 + }, + }, + statsdClient: &statsd.NoOpClient{}, ignoreFromSnapshot: make(map[string]bool), } diff --git a/pkg/security/probe/activity_dump_test.go b/pkg/security/probe/activity_dump_test.go index 83f76f0001cb6..05fb7b7326429 100644 --- a/pkg/security/probe/activity_dump_test.go +++ b/pkg/security/probe/activity_dump_test.go @@ -116,11 +116,16 @@ func TestInsertFileEvent(t *testing.T) { ad := NewEmptyActivityDump() for _, path := range pathToInserts { - fileEvent := &model.FileEvent{ - IsPathnameStrResolved: true, - PathnameStr: path, + event := &model.Event{ + Open: model.OpenEvent{ + File: model.FileEvent{ + IsPathnameStrResolved: true, + PathnameStr: path, + }, + }, + FieldHandlers: &model.DefaultFieldHandlers{}, } - ad.InsertFileEventInProcess(&pan, fileEvent, nil, Unknown) + ad.InsertFileEventInProcess(&pan, &event.Open.File, event, Unknown) } var builder strings.Builder diff --git a/pkg/security/probe/applier.go b/pkg/security/probe/applier.go index a92ecfad2dc02..1e523f53abce2 100644 --- a/pkg/security/probe/applier.go +++ b/pkg/security/probe/applier.go @@ -14,6 +14,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/config" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -53,8 +54,8 @@ func (rsa *RuleSetApplier) applyApprovers(eventType eval.EventType, approvers ru // applyDefaultPolicy this will apply the deny policy if kernel filters are enabled func (rsa *RuleSetApplier) applyDefaultFilterPolicies() { - var model Model - for _, eventType := range model.GetEventTypes() { + var m model.Model + for _, eventType := range m.GetEventTypes() { if !rsa.config.EnableKernelFilters { _ = rsa.applyFilterPolicy(eventType, PolicyModeNoFilter, math.MaxUint8) } else { diff --git a/pkg/security/probe/approvers_test.go b/pkg/security/probe/approvers_test.go index 74f28492cdc6e..c83f7939c78de 100644 --- a/pkg/security/probe/approvers_test.go +++ b/pkg/security/probe/approvers_test.go @@ -30,8 +30,7 @@ func TestApproverAncestors1(t *testing.T) { WithEventTypeEnabled(enabled). WithLogger(seclog.DefaultLogger) - m := &model.Model{} - rs := rules.NewRuleSet(m, m.NewEvent, &opts, &evalOpts) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path == "/etc/passwd" && process.ancestors.file.name == "vipw"`, `open.file.path == "/etc/shadow" && process.ancestors.file.name == "vipw"`) capabilities, exists := allCapabilities["open"] @@ -62,8 +61,7 @@ func TestApproverAncestors2(t *testing.T) { WithEventTypeEnabled(enabled). WithLogger(seclog.DefaultLogger) - m := &model.Model{} - rs := rules.NewRuleSet(m, m.NewEvent, &opts, &evalOpts) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `(open.file.path == "/etc/shadow" || open.file.path == "/etc/gshadow") && process.ancestors.file.path not in ["/usr/bin/dpkg"]`) capabilities, exists := allCapabilities["open"] if !exists { @@ -91,8 +89,7 @@ func TestApproverAncestors3(t *testing.T) { WithEventTypeEnabled(enabled). WithLogger(seclog.DefaultLogger) - m := &model.Model{} - rs := rules.NewRuleSet(m, m.NewEvent, &opts, &evalOpts) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/var/run/secrets/eks.amazonaws.com/serviceaccount/*/token" && process.file.path not in ["/bin/kubectl"]`) capabilities, exists := allCapabilities["open"] if !exists { diff --git a/pkg/security/probe/constantfetch/btfhub/constants.json b/pkg/security/probe/constantfetch/btfhub/constants.json index b4218a60cd6f2..a55cd24f2b881 100644 --- a/pkg/security/probe/constantfetch/btfhub/constants.json +++ b/pkg/security/probe/constantfetch/btfhub/constants.json @@ -1,5 +1,5 @@ { - "commit": "c804b03b03eff22a7c73ba76239a9b6df8eae9ba", + "commit": "903afa9995eacf087ad90e107ada1d7b4fb05fb7", "constants": [ { "binprm_file_offset": 168, @@ -15,6 +15,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "pid_level_offset": 4, @@ -43,6 +46,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "pid_level_offset": 4, @@ -71,6 +77,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -100,6 +109,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "pid_level_offset": 4, @@ -128,6 +140,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "pid_level_offset": 4, @@ -156,6 +171,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -182,6 +200,9 @@ "flowi4_uli_offset": 40, "flowi6_saddr_offset": 48, "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 296, "net_ns_offset": 136, "pid_level_offset": 4, @@ -207,6 +228,9 @@ "flowi4_uli_offset": 40, "flowi6_saddr_offset": 48, "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 296, "net_ns_offset": 136, "pid_level_offset": 4, @@ -231,6 +255,9 @@ "flowi4_uli_offset": 28, "flowi6_saddr_offset": 36, "flowi6_uli_offset": 56, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 256, "net_proc_inum_offset": 72, "pid_level_offset": 4, @@ -255,6 +282,9 @@ "flowi4_uli_offset": 28, "flowi6_saddr_offset": 36, "flowi6_uli_offset": 56, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 256, "pid_level_offset": 4, "pid_numbers_offset": 48, @@ -278,6 +308,9 @@ "flowi4_uli_offset": 28, "flowi6_saddr_offset": 36, "flowi6_uli_offset": 56, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 288, "pid_level_offset": 4, "pid_numbers_offset": 48, @@ -303,6 +336,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 48, @@ -330,6 +366,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 48, @@ -357,6 +396,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 48, @@ -387,6 +429,9 @@ "flowi4_uli_offset": 64, "flowi6_saddr_offset": 72, "flowi6_uli_offset": 92, + "linux_binprm_argc_offset": 320, + "linux_binprm_envc_offset": 324, + "linux_binprm_p_offset": 280, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 56, @@ -417,6 +462,9 @@ "flowi4_uli_offset": 64, "flowi6_saddr_offset": 72, "flowi6_uli_offset": 92, + "linux_binprm_argc_offset": 320, + "linux_binprm_envc_offset": 324, + "linux_binprm_p_offset": 280, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 56, @@ -447,6 +495,9 @@ "flowi4_uli_offset": 64, "flowi6_saddr_offset": 72, "flowi6_uli_offset": 92, + "linux_binprm_argc_offset": 320, + "linux_binprm_envc_offset": 324, + "linux_binprm_p_offset": 280, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 56, @@ -477,6 +528,9 @@ "flowi4_uli_offset": 64, "flowi6_saddr_offset": 72, "flowi6_uli_offset": 92, + "linux_binprm_argc_offset": 320, + "linux_binprm_envc_offset": 324, + "linux_binprm_p_offset": 280, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 56, @@ -507,6 +561,9 @@ "flowi4_uli_offset": 64, "flowi6_saddr_offset": 72, "flowi6_uli_offset": 92, + "linux_binprm_argc_offset": 320, + "linux_binprm_envc_offset": 324, + "linux_binprm_p_offset": 280, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 48, @@ -537,6 +594,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 56, @@ -567,6 +627,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 56, @@ -591,6 +654,9 @@ "flowi4_uli_offset": 28, "flowi6_saddr_offset": 36, "flowi6_uli_offset": 56, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 288, "pid_level_offset": 4, "pid_numbers_offset": 48, @@ -615,6 +681,9 @@ "flowi4_uli_offset": 40, "flowi6_saddr_offset": 48, "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 288, "pid_level_offset": 4, "pid_numbers_offset": 48, @@ -646,6 +715,9 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 88, + "linux_binprm_envc_offset": 92, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 256, "pid_level_offset": 4, "pid_numbers_offset": 96, @@ -677,6 +749,9 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 96, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 80, @@ -706,53 +781,9 @@ "flowi4_uli_offset": 28, "flowi6_saddr_offset": 36, "flowi6_uli_offset": 56, - "net_device_ifindex_offset": 192, - "net_proc_inum_offset": 72, - "pid_level_offset": 4, - "pid_numbers_offset": 48, - "pipe_inode_info_bufs_offset": 128, - "sb_magic_offset": 88, - "sizeof_inode": 584, - "sizeof_upid": 32, - "sock_common_skc_family_offset": 16, - "sock_common_skc_net_offset": 48, - "socket_sock_offset": 32, - "tty_name_offset": 312, - "tty_offset": 416 - }, - { - "binprm_file_offset": 168, - "creds_uid_offset": 4, - "dentry_sb_offset": 104, - "flowi4_saddr_offset": 20, - "flowi4_uli_offset": 28, - "flowi6_saddr_offset": 36, - "flowi6_uli_offset": 56, - "net_device_ifindex_offset": 192, - "net_proc_inum_offset": 72, - "pid_level_offset": 4, - "pid_numbers_offset": 48, - "pipe_inode_info_bufs_offset": 128, - "sb_magic_offset": 88, - "sizeof_inode": 584, - "sizeof_upid": 32, - "sock_common_skc_family_offset": 16, - "sock_common_skc_net_offset": 48, - "socket_sock_offset": 32, - "tty_name_offset": 312, - "tty_offset": 416 - }, - { - "binprm_file_offset": 168, - "bpf_map_type_offset": 4, - "bpf_prog_aux_id_offset": 24, - "bpf_prog_aux_offset": 0, - "creds_uid_offset": 4, - "dentry_sb_offset": 104, - "flowi4_saddr_offset": 20, - "flowi4_uli_offset": 28, - "flowi6_saddr_offset": 36, - "flowi6_uli_offset": 56, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 192, "net_proc_inum_offset": 72, "pid_level_offset": 4, @@ -783,6 +814,9 @@ "flowi4_uli_offset": 28, "flowi6_saddr_offset": 36, "flowi6_uli_offset": 56, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 192, "net_proc_inum_offset": 72, "pid_level_offset": 4, @@ -814,6 +848,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 56, @@ -844,6 +881,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 56, @@ -875,6 +915,9 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 96, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 264, "pid_level_offset": 4, "pid_numbers_offset": 80, @@ -905,6 +948,9 @@ "flowi4_uli_offset": 64, "flowi6_saddr_offset": 72, "flowi6_uli_offset": 92, + "linux_binprm_argc_offset": 320, + "linux_binprm_envc_offset": 324, + "linux_binprm_p_offset": 280, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "pid_level_offset": 4, @@ -936,6 +982,9 @@ "flowi4_uli_offset": 64, "flowi6_saddr_offset": 72, "flowi6_uli_offset": 92, + "linux_binprm_argc_offset": 320, + "linux_binprm_envc_offset": 324, + "linux_binprm_p_offset": 280, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "pid_level_offset": 4, @@ -967,6 +1016,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 112, "nf_conn_ct_net_offset": 144, @@ -999,6 +1051,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 248, "nf_conn_ct_net_offset": 192, @@ -1032,6 +1087,9 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 88, + "linux_binprm_envc_offset": 92, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 256, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -1065,6 +1123,9 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 88, + "linux_binprm_envc_offset": 92, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 256, "net_ns_offset": 264, "nf_conn_ct_net_offset": 192, @@ -1091,8 +1152,40 @@ "flowi4_uli_offset": 40, "flowi6_saddr_offset": 48, "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 296, + "net_ns_offset": 136, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 128, + "sb_magic_offset": 96, + "sizeof_inode": 592, + "sizeof_upid": 32, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 400, + "tty_offset": 384 + }, + { + "binprm_file_offset": 168, + "bpf_map_type_offset": 8, + "bpf_prog_aux_offset": 16, + "bpf_prog_type_offset": 8, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 296, "net_ns_offset": 136, + "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, "pid_numbers_offset": 48, "pipe_inode_info_bufs_offset": 128, @@ -1116,6 +1209,9 @@ "flowi4_uli_offset": 40, "flowi6_saddr_offset": 48, "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 296, "net_ns_offset": 272, "pid_level_offset": 4, @@ -1132,45 +1228,94 @@ }, { "binprm_file_offset": 168, - "bpf_map_id_offset": 48, - "bpf_map_name_offset": 176, - "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 16, - "bpf_prog_aux_name_offset": 152, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, - "bpf_prog_type_offset": 4, + "bpf_map_type_offset": 8, + "bpf_prog_aux_offset": 16, + "bpf_prog_type_offset": 8, + "creds_uid_offset": 4, + "dentry_sb_offset": 152, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 296, + "net_ns_offset": 272, + "nf_conn_ct_net_offset": 192, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 168, + "sb_magic_offset": 96, + "sizeof_inode": 744, + "sizeof_upid": 32, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 496, + "tty_offset": 464 + }, + { + "binprm_file_offset": 168, + "bpf_map_type_offset": 4, + "bpf_prog_aux_offset": 16, + "bpf_prog_type_offset": 8, "creds_uid_offset": 4, "dentry_sb_offset": 104, - "flowi4_saddr_offset": 40, - "flowi4_uli_offset": 48, - "flowi6_saddr_offset": 56, - "flowi6_uli_offset": 76, - "net_device_ifindex_offset": 264, - "net_ns_offset": 112, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 288, + "net_ns_offset": 128, "pid_level_offset": 4, "pid_numbers_offset": 48, - "pipe_inode_info_bufs_offset": 120, + "pipe_inode_info_bufs_offset": 128, "sb_magic_offset": 96, - "sizeof_inode": 600, - "sizeof_upid": 16, + "sizeof_inode": 560, + "sizeof_upid": 32, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, "socket_sock_offset": 32, - "tty_name_offset": 368, - "tty_offset": 368 + "tty_name_offset": 400, + "tty_offset": 408 }, { - "binprm_file_offset": 48, - "bpf_map_id_offset": 48, - "bpf_map_name_offset": 168, - "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 24, - "bpf_prog_aux_name_offset": 176, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, + "binprm_file_offset": 168, + "bpf_map_type_offset": 4, + "bpf_prog_aux_offset": 16, + "bpf_prog_type_offset": 8, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 296, + "net_ns_offset": 128, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 128, + "sb_magic_offset": 96, + "sizeof_inode": 576, + "sizeof_upid": 32, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 400, + "tty_offset": 416 + }, + { + "binprm_file_offset": 168, + "bpf_map_type_offset": 4, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 12, "bpf_prog_type_offset": 4, "creds_uid_offset": 4, "dentry_sb_offset": 104, @@ -1178,32 +1323,30 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 88, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, - "pid_numbers_offset": 80, + "pid_numbers_offset": 48, "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, "sizeof_inode": 584, - "sizeof_upid": 16, + "sizeof_upid": 32, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, - "socket_sock_offset": 24, + "socket_sock_offset": 32, "tty_name_offset": 368, - "tty_offset": 400 + "tty_offset": 376 }, { "binprm_file_offset": 168, - "bpf_map_id_offset": 48, - "bpf_map_name_offset": 176, - "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, + "bpf_map_id_offset": 28, + "bpf_map_type_offset": 4, "bpf_prog_aux_id_offset": 16, - "bpf_prog_aux_name_offset": 152, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 16, "bpf_prog_type_offset": 4, "creds_uid_offset": 4, "dentry_sb_offset": 104, @@ -1211,14 +1354,17 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, - "net_ns_offset": 112, + "net_ns_offset": 120, "pid_level_offset": 4, "pid_numbers_offset": 48, "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, - "sizeof_inode": 600, - "sizeof_upid": 16, + "sizeof_inode": 592, + "sizeof_upid": 32, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, "socket_sock_offset": 32, @@ -1226,15 +1372,14 @@ "tty_offset": 376 }, { - "binprm_file_offset": 48, + "binprm_file_offset": 168, "bpf_map_id_offset": 48, - "bpf_map_name_offset": 168, + "bpf_map_name_offset": 176, "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 24, - "bpf_prog_aux_name_offset": 176, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_name_offset": 152, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 16, "bpf_prog_type_offset": 4, "creds_uid_offset": 4, "dentry_sb_offset": 104, @@ -1242,21 +1387,22 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 88, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, - "pid_numbers_offset": 80, + "pid_numbers_offset": 48, "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, - "sizeof_inode": 584, + "sizeof_inode": 600, "sizeof_upid": 16, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, - "socket_sock_offset": 24, + "socket_sock_offset": 32, "tty_name_offset": 368, - "tty_offset": 408 + "tty_offset": 368 }, { "binprm_file_offset": 176, @@ -1275,6 +1421,9 @@ "flowi4_uli_offset": 40, "flowi6_saddr_offset": 48, "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 200, + "linux_binprm_envc_offset": 204, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 112, "pid_level_offset": 4, @@ -1290,15 +1439,14 @@ "tty_offset": 400 }, { - "binprm_file_offset": 48, + "binprm_file_offset": 168, "bpf_map_id_offset": 48, - "bpf_map_name_offset": 88, + "bpf_map_name_offset": 112, "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 28, - "bpf_prog_aux_name_offset": 256, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_name_offset": 152, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 16, "bpf_prog_type_offset": 4, "creds_uid_offset": 4, "dentry_sb_offset": 104, @@ -1306,21 +1454,22 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 88, - "net_device_ifindex_offset": 256, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, - "pid_numbers_offset": 80, - "pipe_inode_info_bufs_offset": 144, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, "sizeof_inode": 600, "sizeof_upid": 16, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, - "socket_sock_offset": 24, + "socket_sock_offset": 32, "tty_name_offset": 368, - "tty_offset": 408 + "tty_offset": 376 }, { "binprm_file_offset": 176, @@ -1339,6 +1488,9 @@ "flowi4_uli_offset": 40, "flowi6_saddr_offset": 48, "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 200, + "linux_binprm_envc_offset": 204, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 112, "pid_level_offset": 4, @@ -1356,10 +1508,13 @@ { "binprm_file_offset": 168, "bpf_map_id_offset": 48, + "bpf_map_name_offset": 176, "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, "bpf_prog_aux_id_offset": 16, - "bpf_prog_aux_offset": 24, - "bpf_prog_tag_offset": 16, + "bpf_prog_aux_name_offset": 152, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, "bpf_prog_type_offset": 4, "creds_uid_offset": 4, "dentry_sb_offset": 104, @@ -1367,27 +1522,33 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, - "net_ns_offset": 120, + "net_ns_offset": 112, "pid_level_offset": 4, "pid_numbers_offset": 48, "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, "sizeof_inode": 600, - "sizeof_upid": 32, + "sizeof_upid": 16, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, "socket_sock_offset": 32, "tty_name_offset": 368, - "tty_offset": 376 + "tty_offset": 368 }, { - "binprm_file_offset": 168, + "binprm_file_offset": 48, "bpf_map_id_offset": 48, + "bpf_map_name_offset": 168, "bpf_map_type_offset": 24, - "bpf_prog_aux_id_offset": 16, - "bpf_prog_aux_offset": 24, - "bpf_prog_tag_offset": 16, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 24, + "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, "bpf_prog_type_offset": 4, "creds_uid_offset": 4, "dentry_sb_offset": 104, @@ -1395,29 +1556,33 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 88, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, - "pid_numbers_offset": 48, + "pid_numbers_offset": 80, "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, - "sizeof_inode": 600, - "sizeof_upid": 32, + "sizeof_inode": 584, + "sizeof_upid": 16, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, - "socket_sock_offset": 32, + "socket_sock_offset": 24, "tty_name_offset": 368, - "tty_offset": 376 + "tty_offset": 400 }, { - "binprm_file_offset": 48, + "binprm_file_offset": 168, "bpf_map_id_offset": 48, - "bpf_map_name_offset": 168, + "bpf_map_name_offset": 176, "bpf_map_type_offset": 24, "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 24, - "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_name_offset": 152, "bpf_prog_aux_offset": 32, "bpf_prog_tag_offset": 20, "bpf_prog_type_offset": 4, @@ -1427,26 +1592,27 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 96, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, - "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, + "net_ns_offset": 112, "pid_level_offset": 4, - "pid_numbers_offset": 80, + "pid_numbers_offset": 48, "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, - "sizeof_inode": 584, + "sizeof_inode": 600, "sizeof_upid": 16, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, - "socket_sock_offset": 24, + "socket_sock_offset": 32, "tty_name_offset": 368, - "tty_offset": 408 + "tty_offset": 376 }, { "binprm_file_offset": 48, "bpf_map_id_offset": 48, - "bpf_map_name_offset": 200, + "bpf_map_name_offset": 168, "bpf_map_type_offset": 24, "bpf_prog_attach_type_offset": 8, "bpf_prog_aux_id_offset": 24, @@ -1456,11 +1622,14 @@ "bpf_prog_type_offset": 4, "creds_uid_offset": 4, "dentry_sb_offset": 104, - "flowi4_saddr_offset": 56, - "flowi4_uli_offset": 64, - "flowi6_saddr_offset": 72, - "flowi6_uli_offset": 92, - "iokiocb_ctx_offset": 96, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 88, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -1468,7 +1637,7 @@ "pid_numbers_offset": 80, "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, - "sizeof_inode": 632, + "sizeof_inode": 584, "sizeof_upid": 16, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, @@ -1479,29 +1648,32 @@ { "binprm_file_offset": 48, "bpf_map_id_offset": 48, - "bpf_map_name_offset": 200, + "bpf_map_name_offset": 88, "bpf_map_type_offset": 24, "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 24, - "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_id_offset": 28, + "bpf_prog_aux_name_offset": 256, "bpf_prog_aux_offset": 32, "bpf_prog_tag_offset": 20, "bpf_prog_type_offset": 4, "creds_uid_offset": 4, "dentry_sb_offset": 104, - "flowi4_saddr_offset": 56, - "flowi4_uli_offset": 64, - "flowi6_saddr_offset": 72, - "flowi6_uli_offset": 92, - "iokiocb_ctx_offset": 80, - "net_device_ifindex_offset": 264, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 88, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, + "net_device_ifindex_offset": 256, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, "pid_numbers_offset": 80, - "pipe_inode_info_bufs_offset": 120, + "pipe_inode_info_bufs_offset": 144, "sb_magic_offset": 96, - "sizeof_inode": 632, + "sizeof_inode": 600, "sizeof_upid": 16, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, @@ -1509,33 +1681,6 @@ "tty_name_offset": 368, "tty_offset": 408 }, - { - "binprm_file_offset": 168, - "bpf_map_id_offset": 48, - "bpf_map_type_offset": 24, - "bpf_prog_aux_id_offset": 8, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, - "bpf_prog_type_offset": 4, - "creds_uid_offset": 4, - "dentry_sb_offset": 104, - "flowi4_saddr_offset": 20, - "flowi4_uli_offset": 28, - "flowi6_saddr_offset": 36, - "flowi6_uli_offset": 56, - "net_device_ifindex_offset": 192, - "pid_level_offset": 4, - "pid_numbers_offset": 48, - "pipe_inode_info_bufs_offset": 128, - "sb_magic_offset": 88, - "sizeof_inode": 584, - "sizeof_upid": 32, - "sock_common_skc_family_offset": 16, - "sock_common_skc_net_offset": 48, - "socket_sock_offset": 32, - "tty_name_offset": 312, - "tty_offset": 416 - }, { "binprm_file_offset": 48, "bpf_map_id_offset": 48, @@ -1553,31 +1698,35 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 96, + "iokiocb_ctx_offset": 88, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 264, - "net_ns_offset": 120, + "net_ns_offset": 112, "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, "pid_numbers_offset": 80, "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, - "sizeof_inode": 576, + "sizeof_inode": 584, "sizeof_upid": 16, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, "socket_sock_offset": 24, "tty_name_offset": 368, - "tty_offset": 408 + "tty_offset": 400 }, { - "binprm_file_offset": 168, + "binprm_file_offset": 48, "bpf_map_id_offset": 48, - "bpf_map_name_offset": 176, + "bpf_map_name_offset": 168, "bpf_map_type_offset": 24, - "bpf_prog_aux_id_offset": 16, - "bpf_prog_aux_name_offset": 128, - "bpf_prog_aux_offset": 24, - "bpf_prog_tag_offset": 16, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 24, + "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, "bpf_prog_type_offset": 4, "creds_uid_offset": 4, "dentry_sb_offset": 104, @@ -1585,27 +1734,30 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 88, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 264, - "net_ns_offset": 120, + "net_ns_offset": 112, + "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, - "pid_numbers_offset": 48, + "pid_numbers_offset": 80, "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, - "sizeof_inode": 608, + "sizeof_inode": 584, "sizeof_upid": 16, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, - "socket_sock_offset": 32, + "socket_sock_offset": 24, "tty_name_offset": 368, - "tty_offset": 368 + "tty_offset": 408 }, { "binprm_file_offset": 168, "bpf_map_id_offset": 48, - "bpf_map_name_offset": 176, "bpf_map_type_offset": 24, "bpf_prog_aux_id_offset": 16, - "bpf_prog_aux_name_offset": 128, "bpf_prog_aux_offset": 24, "bpf_prog_tag_offset": 16, "bpf_prog_type_offset": 4, @@ -1615,6 +1767,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "pid_level_offset": 4, @@ -1622,20 +1777,18 @@ "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, "sizeof_inode": 600, - "sizeof_upid": 16, + "sizeof_upid": 32, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, "socket_sock_offset": 32, "tty_name_offset": 368, - "tty_offset": 368 + "tty_offset": 376 }, { "binprm_file_offset": 168, "bpf_map_id_offset": 48, - "bpf_map_name_offset": 176, "bpf_map_type_offset": 24, "bpf_prog_aux_id_offset": 16, - "bpf_prog_aux_name_offset": 128, "bpf_prog_aux_offset": 24, "bpf_prog_tag_offset": 16, "bpf_prog_type_offset": 4, @@ -1645,6 +1798,9 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -1652,13 +1808,13 @@ "pid_numbers_offset": 48, "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, - "sizeof_inode": 608, - "sizeof_upid": 16, + "sizeof_inode": 600, + "sizeof_upid": 32, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, "socket_sock_offset": 32, "tty_name_offset": 368, - "tty_offset": 368 + "tty_offset": 376 }, { "binprm_file_offset": 48, @@ -1678,6 +1834,9 @@ "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, "iokiocb_ctx_offset": 96, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, @@ -1685,145 +1844,154 @@ "pid_numbers_offset": 80, "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, - "sizeof_inode": 600, + "sizeof_inode": 584, "sizeof_upid": 16, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, "socket_sock_offset": 24, "tty_name_offset": 368, - "tty_offset": 400 + "tty_offset": 408 }, { - "binprm_file_offset": 168, + "binprm_file_offset": 48, "bpf_map_id_offset": 48, - "bpf_map_name_offset": 112, + "bpf_map_name_offset": 200, "bpf_map_type_offset": 24, - "bpf_prog_aux_id_offset": 16, - "bpf_prog_aux_name_offset": 128, - "bpf_prog_aux_offset": 24, - "bpf_prog_tag_offset": 16, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 24, + "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, "bpf_prog_type_offset": 4, "creds_uid_offset": 4, "dentry_sb_offset": 104, - "flowi4_saddr_offset": 40, - "flowi4_uli_offset": 48, - "flowi6_saddr_offset": 56, - "flowi6_uli_offset": 76, + "flowi4_saddr_offset": 56, + "flowi4_uli_offset": 64, + "flowi6_saddr_offset": 72, + "flowi6_uli_offset": 92, + "iokiocb_ctx_offset": 96, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 264, "net_ns_offset": 120, "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, - "pid_numbers_offset": 48, + "pid_numbers_offset": 80, "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, - "sizeof_inode": 600, + "sizeof_inode": 632, "sizeof_upid": 16, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, - "socket_sock_offset": 32, + "socket_sock_offset": 24, "tty_name_offset": 368, - "tty_offset": 368 + "tty_offset": 408 }, { - "binprm_file_offset": 168, + "binprm_file_offset": 48, "bpf_map_id_offset": 48, - "bpf_map_name_offset": 112, + "bpf_map_name_offset": 200, "bpf_map_type_offset": 24, - "bpf_prog_aux_id_offset": 16, - "bpf_prog_aux_name_offset": 128, - "bpf_prog_aux_offset": 24, - "bpf_prog_tag_offset": 16, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 24, + "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, "bpf_prog_type_offset": 4, "creds_uid_offset": 4, "dentry_sb_offset": 104, - "flowi4_saddr_offset": 40, - "flowi4_uli_offset": 48, - "flowi6_saddr_offset": 56, - "flowi6_uli_offset": 76, + "flowi4_saddr_offset": 56, + "flowi4_uli_offset": 64, + "flowi6_saddr_offset": 72, + "flowi6_uli_offset": 92, + "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 264, "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, - "pid_numbers_offset": 48, + "pid_numbers_offset": 80, "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, - "sizeof_inode": 600, + "sizeof_inode": 632, "sizeof_upid": 16, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, - "socket_sock_offset": 32, + "socket_sock_offset": 24, "tty_name_offset": 368, - "tty_offset": 368 + "tty_offset": 408 }, { "binprm_file_offset": 168, "bpf_map_id_offset": 48, - "bpf_map_name_offset": 112, "bpf_map_type_offset": 24, - "bpf_prog_aux_id_offset": 16, - "bpf_prog_aux_name_offset": 128, - "bpf_prog_aux_offset": 24, - "bpf_prog_tag_offset": 16, + "bpf_prog_aux_id_offset": 8, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, "bpf_prog_type_offset": 4, "creds_uid_offset": 4, "dentry_sb_offset": 104, - "flowi4_saddr_offset": 40, - "flowi4_uli_offset": 48, - "flowi6_saddr_offset": 56, - "flowi6_uli_offset": 76, - "net_device_ifindex_offset": 264, - "net_ns_offset": 120, + "flowi4_saddr_offset": 20, + "flowi4_uli_offset": 28, + "flowi6_saddr_offset": 36, + "flowi6_uli_offset": 56, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 192, "pid_level_offset": 4, "pid_numbers_offset": 48, - "pipe_inode_info_bufs_offset": 120, - "sb_magic_offset": 96, - "sizeof_inode": 608, - "sizeof_upid": 16, + "pipe_inode_info_bufs_offset": 128, + "sb_magic_offset": 88, + "sizeof_inode": 584, + "sizeof_upid": 32, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, "socket_sock_offset": 32, - "tty_name_offset": 368, - "tty_offset": 368 + "tty_name_offset": 312, + "tty_offset": 416 }, { "binprm_file_offset": 168, - "bpf_map_id_offset": 48, - "bpf_map_name_offset": 112, - "bpf_map_type_offset": 24, - "bpf_prog_aux_id_offset": 16, - "bpf_prog_aux_name_offset": 128, - "bpf_prog_aux_offset": 24, - "bpf_prog_tag_offset": 16, - "bpf_prog_type_offset": 4, + "bpf_map_type_offset": 4, + "bpf_prog_aux_offset": 16, + "bpf_prog_type_offset": 8, "creds_uid_offset": 4, "dentry_sb_offset": 104, - "flowi4_saddr_offset": 40, - "flowi4_uli_offset": 48, - "flowi6_saddr_offset": 56, - "flowi6_uli_offset": 76, - "net_device_ifindex_offset": 264, + "flowi4_saddr_offset": 20, + "flowi4_uli_offset": 28, + "flowi6_saddr_offset": 36, + "flowi6_uli_offset": 56, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 288, "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, "pid_numbers_offset": 48, - "pipe_inode_info_bufs_offset": 120, - "sb_magic_offset": 96, - "sizeof_inode": 608, - "sizeof_upid": 16, + "pipe_inode_info_bufs_offset": 128, + "sb_magic_offset": 88, + "sizeof_inode": 544, + "sizeof_upid": 32, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, "socket_sock_offset": 32, - "tty_name_offset": 368, - "tty_offset": 368 + "tty_name_offset": 400, + "tty_offset": 416 }, { - "binprm_file_offset": 168, + "binprm_file_offset": 48, "bpf_map_id_offset": 48, - "bpf_map_name_offset": 112, + "bpf_map_name_offset": 168, "bpf_map_type_offset": 24, - "bpf_prog_aux_id_offset": 16, - "bpf_prog_aux_name_offset": 128, - "bpf_prog_aux_offset": 24, - "bpf_prog_tag_offset": 16, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 24, + "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, "bpf_prog_type_offset": 4, "creds_uid_offset": 4, "dentry_sb_offset": 104, @@ -1831,29 +1999,30 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 96, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, "net_device_ifindex_offset": 264, "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, - "pid_numbers_offset": 48, + "pid_numbers_offset": 80, "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, - "sizeof_inode": 608, + "sizeof_inode": 576, "sizeof_upid": 16, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, - "socket_sock_offset": 32, + "socket_sock_offset": 24, "tty_name_offset": 368, - "tty_offset": 376 + "tty_offset": 408 }, { "binprm_file_offset": 168, - "bpf_map_id_offset": 48, - "bpf_map_name_offset": 112, - "bpf_map_type_offset": 24, - "bpf_prog_aux_id_offset": 16, - "bpf_prog_aux_name_offset": 128, + "bpf_map_type_offset": 4, "bpf_prog_aux_offset": 24, - "bpf_prog_tag_offset": 16, + "bpf_prog_tag_offset": 12, "bpf_prog_type_offset": 4, "creds_uid_offset": 4, "dentry_sb_offset": 104, @@ -1861,31 +2030,28 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, - "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, + "net_ns_offset": 136, "pid_level_offset": 4, "pid_numbers_offset": 48, "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, - "sizeof_inode": 608, - "sizeof_upid": 16, + "sizeof_inode": 584, + "sizeof_upid": 32, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, "socket_sock_offset": 32, "tty_name_offset": 368, - "tty_offset": 376 + "tty_offset": 408 }, { - "binprm_file_offset": 48, - "bpf_map_id_offset": 48, - "bpf_map_name_offset": 168, - "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 24, - "bpf_prog_aux_name_offset": 176, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, + "binprm_file_offset": 168, + "bpf_map_type_offset": 4, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 12, "bpf_prog_type_offset": 4, "creds_uid_offset": 4, "dentry_sb_offset": 104, @@ -1893,32 +2059,30 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 96, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, "net_device_ifindex_offset": 264, "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, - "pid_numbers_offset": 80, + "pid_numbers_offset": 48, "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, - "sizeof_inode": 600, - "sizeof_upid": 16, + "sizeof_inode": 584, + "sizeof_upid": 32, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, - "socket_sock_offset": 24, + "socket_sock_offset": 32, "tty_name_offset": 368, - "tty_offset": 408 + "tty_offset": 368 }, { - "binprm_file_offset": 64, - "bpf_map_id_offset": 48, - "bpf_map_name_offset": 80, - "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 28, - "bpf_prog_aux_name_offset": 504, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, + "binprm_file_offset": 168, + "bpf_map_id_offset": 28, + "bpf_map_type_offset": 4, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 16, "bpf_prog_type_offset": 4, "creds_uid_offset": 4, "dentry_sb_offset": 104, @@ -1926,32 +2090,32 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 80, - "net_device_ifindex_offset": 256, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, - "pid_numbers_offset": 96, - "pipe_inode_info_bufs_offset": 152, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, - "sizeof_inode": 600, - "sizeof_upid": 16, + "sizeof_inode": 592, + "sizeof_upid": 32, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, - "socket_sock_offset": 24, - "tty_name_offset": 360, - "tty_offset": 400 + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 368 }, { - "binprm_file_offset": 64, + "binprm_file_offset": 168, "bpf_map_id_offset": 48, - "bpf_map_name_offset": 80, + "bpf_map_name_offset": 176, "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 28, - "bpf_prog_aux_name_offset": 504, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_name_offset": 128, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 16, "bpf_prog_type_offset": 4, "creds_uid_offset": 4, "dentry_sb_offset": 104, @@ -1959,32 +2123,32 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 80, - "net_device_ifindex_offset": 256, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, - "pid_numbers_offset": 96, - "pipe_inode_info_bufs_offset": 152, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, - "sizeof_inode": 600, + "sizeof_inode": 608, "sizeof_upid": 16, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, - "socket_sock_offset": 24, - "tty_name_offset": 360, - "tty_offset": 408 + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 368 }, { - "binprm_file_offset": 64, + "binprm_file_offset": 168, "bpf_map_id_offset": 48, - "bpf_map_name_offset": 88, + "bpf_map_name_offset": 176, "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 28, - "bpf_prog_aux_name_offset": 416, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_name_offset": 128, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 16, "bpf_prog_type_offset": 4, "creds_uid_offset": 4, "dentry_sb_offset": 104, @@ -1992,14269 +2156,26284 @@ "flowi4_uli_offset": 48, "flowi6_saddr_offset": 56, "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 80, - "net_device_ifindex_offset": 256, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, "pid_level_offset": 4, - "pid_numbers_offset": 96, - "pipe_inode_info_bufs_offset": 152, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 120, "sb_magic_offset": 96, "sizeof_inode": 600, "sizeof_upid": 16, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, - "socket_sock_offset": 24, + "socket_sock_offset": 32, "tty_name_offset": 368, - "tty_offset": 400 + "tty_offset": 368 }, { - "binprm_file_offset": 64, - "bpf_map_id_offset": 48, - "bpf_map_name_offset": 88, - "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 28, - "bpf_prog_aux_name_offset": 416, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, - "bpf_prog_type_offset": 4, + "binprm_file_offset": 168, + "bpf_map_type_offset": 8, + "bpf_prog_aux_offset": 16, + "bpf_prog_type_offset": 8, "creds_uid_offset": 4, "dentry_sb_offset": 104, - "flowi4_saddr_offset": 40, - "flowi4_uli_offset": 48, - "flowi6_saddr_offset": 56, - "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 80, - "net_device_ifindex_offset": 256, - "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 288, + "net_ns_offset": 128, "pid_level_offset": 4, - "pid_numbers_offset": 96, - "pipe_inode_info_bufs_offset": 152, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 128, "sb_magic_offset": 96, - "sizeof_inode": 600, - "sizeof_upid": 16, + "sizeof_inode": 560, + "sizeof_upid": 32, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, - "socket_sock_offset": 24, - "tty_name_offset": 360, - "tty_offset": 400 + "socket_sock_offset": 32, + "tty_name_offset": 400, + "tty_offset": 408 }, { - "binprm_file_offset": 64, - "bpf_map_id_offset": 48, - "bpf_map_name_offset": 88, - "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 28, - "bpf_prog_aux_name_offset": 416, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, - "bpf_prog_type_offset": 4, + "binprm_file_offset": 168, + "bpf_map_type_offset": 8, + "bpf_prog_aux_offset": 16, + "bpf_prog_type_offset": 8, "creds_uid_offset": 4, "dentry_sb_offset": 104, - "flowi4_saddr_offset": 40, - "flowi4_uli_offset": 48, - "flowi6_saddr_offset": 56, - "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 80, - "net_device_ifindex_offset": 256, - "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 288, + "net_ns_offset": 128, "pid_level_offset": 4, - "pid_numbers_offset": 96, - "pipe_inode_info_bufs_offset": 152, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 128, "sb_magic_offset": 96, - "sizeof_inode": 600, - "sizeof_upid": 16, + "sizeof_inode": 568, + "sizeof_upid": 32, "sock_common_skc_family_offset": 16, "sock_common_skc_net_offset": 48, - "socket_sock_offset": 24, - "tty_name_offset": 368, - "tty_offset": 408 + "socket_sock_offset": 32, + "tty_name_offset": 400, + "tty_offset": 408 + }, + { + "binprm_file_offset": 168, + "bpf_map_type_offset": 8, + "bpf_prog_aux_offset": 16, + "bpf_prog_type_offset": 8, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 288, + "net_ns_offset": 128, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 128, + "sb_magic_offset": 96, + "sizeof_inode": 568, + "sizeof_upid": 32, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 400, + "tty_offset": 384 + }, + { + "binprm_file_offset": 168, + "bpf_map_type_offset": 4, + "bpf_prog_aux_offset": 16, + "bpf_prog_type_offset": 8, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 296, + "net_ns_offset": 128, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 128, + "sb_magic_offset": 96, + "sizeof_inode": 584, + "sizeof_upid": 32, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 400, + "tty_offset": 408 + }, + { + "binprm_file_offset": 168, + "bpf_map_type_offset": 4, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 12, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, + "net_ns_offset": 136, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 584, + "sizeof_upid": 32, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 408 + }, + { + "binprm_file_offset": 168, + "bpf_map_id_offset": 28, + "bpf_map_type_offset": 4, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 16, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 592, + "sizeof_upid": 32, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 368 + }, + { + "binprm_file_offset": 168, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 112, + "bpf_map_type_offset": 24, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_name_offset": 128, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 16, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 608, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 368 + }, + { + "binprm_file_offset": 168, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 112, + "bpf_map_type_offset": 24, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_name_offset": 128, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 16, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 600, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 368 + }, + { + "binprm_file_offset": 168, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 112, + "bpf_map_type_offset": 24, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_name_offset": 128, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 16, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 600, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 368 + }, + { + "binprm_file_offset": 168, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 112, + "bpf_map_type_offset": 24, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_name_offset": 128, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 16, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 600, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 376 + }, + { + "binprm_file_offset": 168, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 112, + "bpf_map_type_offset": 24, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_name_offset": 128, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 16, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 608, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 368 + }, + { + "binprm_file_offset": 168, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 112, + "bpf_map_type_offset": 24, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_name_offset": 128, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 16, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 608, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 376 + }, + { + "binprm_file_offset": 168, + "bpf_map_type_offset": 4, + "bpf_prog_aux_offset": 16, + "bpf_prog_type_offset": 8, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 288, + "net_ns_offset": 128, + "nf_conn_ct_net_offset": 216, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 128, + "sb_magic_offset": 96, + "sizeof_inode": 560, + "sizeof_upid": 32, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 400, + "tty_offset": 408 + }, + { + "binprm_file_offset": 168, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 176, + "bpf_map_type_offset": 24, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_name_offset": 128, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 16, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 608, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 368 + }, + { + "binprm_file_offset": 176, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 176, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 20, + "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 200, + "linux_binprm_envc_offset": 204, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "pid_level_offset": 4, + "pid_numbers_offset": 56, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 584, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 400 + }, + { + "binprm_file_offset": 176, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 176, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 20, + "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 200, + "linux_binprm_envc_offset": 204, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "pid_level_offset": 4, + "pid_numbers_offset": 56, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 592, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 400 + }, + { + "binprm_file_offset": 48, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 168, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 24, + "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 88, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 80, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 592, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 24, + "tty_name_offset": 368, + "tty_offset": 400 + }, + { + "binprm_file_offset": 48, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 168, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 24, + "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, + "net_device_ifindex_offset": 264, + "net_ns_offset": 112, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 80, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 584, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 24, + "tty_name_offset": 368, + "tty_offset": 400 + }, + { + "binprm_file_offset": 48, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 168, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 24, + "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 96, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 80, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 600, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 24, + "tty_name_offset": 368, + "tty_offset": 400 + }, + { + "binprm_file_offset": 168, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 112, + "bpf_map_type_offset": 24, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_name_offset": 128, + "bpf_prog_aux_offset": 24, + "bpf_prog_tag_offset": 16, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 608, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 376 + }, + { + "binprm_file_offset": 168, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 176, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 16, + "bpf_prog_aux_name_offset": 152, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "linux_binprm_argc_offset": 192, + "linux_binprm_envc_offset": 196, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, + "net_ns_offset": 112, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 48, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 600, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 368 + }, + { + "binprm_file_offset": 176, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 176, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 20, + "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 200, + "linux_binprm_envc_offset": 204, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, + "net_ns_offset": 112, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 56, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 584, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 400 + }, + { + "binprm_file_offset": 176, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 176, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 20, + "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 200, + "linux_binprm_envc_offset": 204, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 56, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 584, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 400 + }, + { + "binprm_file_offset": 176, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 176, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 20, + "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 200, + "linux_binprm_envc_offset": 204, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "pid_level_offset": 4, + "pid_numbers_offset": 56, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 584, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 408 + }, + { + "binprm_file_offset": 176, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 176, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 20, + "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 32, + "flowi4_uli_offset": 40, + "flowi6_saddr_offset": 48, + "flowi6_uli_offset": 68, + "linux_binprm_argc_offset": 200, + "linux_binprm_envc_offset": 204, + "linux_binprm_p_offset": 152, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 56, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 592, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 32, + "tty_name_offset": 368, + "tty_offset": 400 + }, + { + "binprm_file_offset": 48, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 168, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 24, + "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 88, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 80, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 592, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 24, + "tty_name_offset": 368, + "tty_offset": 408 + }, + { + "binprm_file_offset": 48, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 168, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 24, + "bpf_prog_aux_name_offset": 176, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 96, + "linux_binprm_argc_offset": 72, + "linux_binprm_envc_offset": 76, + "linux_binprm_p_offset": 24, + "net_device_ifindex_offset": 264, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 80, + "pipe_inode_info_bufs_offset": 120, + "sb_magic_offset": 96, + "sizeof_inode": 600, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 24, + "tty_name_offset": 368, + "tty_offset": 408 + }, + { + "binprm_file_offset": 64, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 80, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 28, + "bpf_prog_aux_name_offset": 504, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 88, + "linux_binprm_envc_offset": 92, + "linux_binprm_p_offset": 24, + "net_device_ifindex_offset": 256, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 96, + "pipe_inode_info_bufs_offset": 152, + "sb_magic_offset": 96, + "sizeof_inode": 600, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 24, + "tty_name_offset": 360, + "tty_offset": 400 + }, + { + "binprm_file_offset": 64, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 80, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 28, + "bpf_prog_aux_name_offset": 504, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 88, + "linux_binprm_envc_offset": 92, + "linux_binprm_p_offset": 24, + "net_device_ifindex_offset": 256, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 96, + "pipe_inode_info_bufs_offset": 152, + "sb_magic_offset": 96, + "sizeof_inode": 600, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 24, + "tty_name_offset": 360, + "tty_offset": 408 + }, + { + "binprm_file_offset": 64, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 88, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 28, + "bpf_prog_aux_name_offset": 416, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 88, + "linux_binprm_envc_offset": 92, + "linux_binprm_p_offset": 24, + "net_device_ifindex_offset": 256, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 96, + "pipe_inode_info_bufs_offset": 152, + "sb_magic_offset": 96, + "sizeof_inode": 600, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 24, + "tty_name_offset": 368, + "tty_offset": 400 + }, + { + "binprm_file_offset": 64, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 88, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 28, + "bpf_prog_aux_name_offset": 416, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 88, + "linux_binprm_envc_offset": 92, + "linux_binprm_p_offset": 24, + "net_device_ifindex_offset": 256, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 96, + "pipe_inode_info_bufs_offset": 152, + "sb_magic_offset": 96, + "sizeof_inode": 600, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 24, + "tty_name_offset": 360, + "tty_offset": 400 + }, + { + "binprm_file_offset": 64, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 88, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 28, + "bpf_prog_aux_name_offset": 416, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 88, + "linux_binprm_envc_offset": 92, + "linux_binprm_p_offset": 24, + "net_device_ifindex_offset": 256, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 96, + "pipe_inode_info_bufs_offset": 152, + "sb_magic_offset": 96, + "sizeof_inode": 600, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 24, + "tty_name_offset": 368, + "tty_offset": 408 + }, + { + "binprm_file_offset": 64, + "bpf_map_id_offset": 48, + "bpf_map_name_offset": 88, + "bpf_map_type_offset": 24, + "bpf_prog_attach_type_offset": 8, + "bpf_prog_aux_id_offset": 28, + "bpf_prog_aux_name_offset": 416, + "bpf_prog_aux_offset": 32, + "bpf_prog_tag_offset": 20, + "bpf_prog_type_offset": 4, + "creds_uid_offset": 4, + "dentry_sb_offset": 104, + "flowi4_saddr_offset": 40, + "flowi4_uli_offset": 48, + "flowi6_saddr_offset": 56, + "flowi6_uli_offset": 76, + "iokiocb_ctx_offset": 80, + "linux_binprm_argc_offset": 88, + "linux_binprm_envc_offset": 92, + "linux_binprm_p_offset": 24, + "net_device_ifindex_offset": 256, + "net_ns_offset": 120, + "nf_conn_ct_net_offset": 144, + "pid_level_offset": 4, + "pid_numbers_offset": 96, + "pipe_inode_info_bufs_offset": 152, + "sb_magic_offset": 96, + "sizeof_inode": 600, + "sizeof_upid": 16, + "sock_common_skc_family_offset": 16, + "sock_common_skc_net_offset": 48, + "socket_sock_offset": 24, + "tty_name_offset": 360, + "tty_offset": 408 + } + ], + "kernels": [ + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.101-91.76.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.104-95.84.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.106-97.85.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.109-99.92.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.114-103.97.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.114-105.126.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.121-109.96.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.123-111.109.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.128-112.105.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.133-113.105.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.133-113.112.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.138-114.102.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.143-118.123.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.146-119.123.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.146-120.181.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.152-124.171.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.152-127.182.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.154-128.181.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.158-129.185.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.165-131.185.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.165-133.209.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.171-136.231.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.173-137.228.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.173-137.229.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.177-139.253.amzn2.aarch64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.177-139.254.amzn2.aarch64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.181-140.257.amzn2.aarch64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.181-142.260.amzn2.aarch64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.186-146.268.amzn2.aarch64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.192-147.314.amzn2.aarch64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.193-149.317.amzn2.aarch64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.198-152.320.amzn2.aarch64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.200-155.322.amzn2.aarch64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.203-156.332.amzn2.aarch64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.209-160.335.amzn2.aarch64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.209-160.339.amzn2.aarch64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.214-160.339.amzn2.aarch64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.219-161.340.amzn2.aarch64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.219-164.354.amzn2.aarch64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.225-168.357.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.225-169.362.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.231-173.360.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.231-173.361.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.232-176.381.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.232-177.418.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.238-182.421.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.238-182.422.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.241-184.433.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.243-185.433.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.246-187.474.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.248-189.473.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.252-195.481.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.252-195.483.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.256-197.484.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.262-200.489.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.268-205.500.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.273-207.502.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.275-207.503.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.276-211.499.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.281-212.502.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.285-215.501.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.287-215.504.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.290-217.505.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.291-218.527.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.294-220.533.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.296-222.539.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.299-223.520.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.301-224.520.amzn2.aarch64", + "cindex": 2 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.77-80.57.amzn2.aarch64", + "cindex": 3 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.77-81.59.amzn2.aarch64", + "cindex": 3 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.77-86.82.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.88-88.73.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.88-88.76.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.94-89.73.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "arm64", + "uname_release": "4.14.97-90.72.amzn2.aarch64", + "cindex": 0 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.101-91.76.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.104-95.84.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.106-97.85.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.109-99.92.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.114-103.97.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.114-105.126.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.121-109.96.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.123-111.109.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.128-112.105.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.133-113.105.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.133-113.112.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.138-114.102.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.143-118.123.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.146-119.123.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.146-120.181.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.152-124.171.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.152-127.182.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.154-128.181.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.158-129.185.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.165-131.185.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.165-133.209.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.171-136.231.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.173-137.228.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.173-137.229.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.177-139.253.amzn2.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.177-139.254.amzn2.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.181-140.257.amzn2.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.181-142.260.amzn2.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.186-146.268.amzn2.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.192-147.314.amzn2.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.193-149.317.amzn2.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.198-152.320.amzn2.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.200-155.322.amzn2.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.203-156.332.amzn2.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.209-160.335.amzn2.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.209-160.339.amzn2.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.214-160.339.amzn2.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.219-161.340.amzn2.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.219-164.354.amzn2.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.225-168.357.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.225-169.362.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.231-173.360.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.231-173.361.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.232-176.381.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.232-177.418.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.238-182.421.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.238-182.422.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.241-184.433.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.243-185.433.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.246-187.474.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.248-189.473.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.252-195.481.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.252-195.483.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.256-197.484.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.26-54.32.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.262-200.489.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.268-205.500.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.273-207.502.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.275-207.503.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.276-211.499.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.281-212.502.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.285-215.501.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.287-215.504.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.290-217.505.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.291-218.527.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.294-220.533.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.296-222.539.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.299-223.520.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.301-224.520.amzn2.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.33-59.34.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.33-59.37.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.42-61.37.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.47-63.37.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.47-64.38.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.51-66.38.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.55-68.37.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.59-68.43.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.62-70.117.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.67-71.56.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.70-72.55.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.72-73.55.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.77-80.57.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.77-81.59.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.77-86.82.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.88-88.73.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.88-88.76.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.94-89.73.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.14.97-90.72.amzn2.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.9.62-10.57.amzn2.x86_64", + "cindex": 6 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.9.70-2.243.amzn2.x86_64", + "cindex": 6 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.9.75-1.56.amzn2.x86_64", + "cindex": 6 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.9.76-38.79.amzn2.x86_64", + "cindex": 6 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.9.77-41.59.amzn2.x86_64", + "cindex": 6 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.9.81-44.57.amzn2.x86_64", + "cindex": 7 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.9.85-46.56.amzn2.x86_64", + "cindex": 7 + }, + { + "distrib": "amzn", + "version": "2", + "arch": "x86_64", + "uname_release": "4.9.85-47.59.amzn2.x86_64", + "cindex": 7 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.101-75.76.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.104-78.84.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.106-79.86.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.109-80.92.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.114-82.97.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.114-83.126.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.121-85.96.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.123-86.109.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.128-87.105.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.133-88.105.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.133-88.112.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.138-89.102.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.143-91.122.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.146-93.123.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.152-98.182.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.154-99.181.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.158-101.185.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.165-102.185.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.165-103.209.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.171-105.231.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.173-106.229.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.177-107.254.amzn1.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.181-108.257.amzn1.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.186-110.268.amzn1.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.193-113.317.amzn1.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.200-116.320.amzn1.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.203-116.332.amzn1.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.209-117.337.amzn1.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.214-118.339.amzn1.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.219-119.340.amzn1.x86_64", + "cindex": 4 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.225-121.357.amzn1.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.225-121.362.amzn1.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.232-123.381.amzn1.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.238-125.421.amzn1.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.238-125.422.amzn1.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.248-129.473.amzn1.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.252-131.483.amzn1.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.26-46.32.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.262-135.486.amzn1.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.262-135.489.amzn1.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.268-139.500.amzn1.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.273-140.502.amzn1.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.275-142.503.amzn1.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.281-144.502.amzn1.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.285-147.501.amzn1.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.287-148.504.amzn1.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.294-150.533.amzn1.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.299-152.520.amzn1.x86_64", + "cindex": 5 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.33-51.34.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.33-51.37.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.42-52.37.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.47-56.37.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.51-60.38.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.55-62.37.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.59-64.43.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.62-65.117.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.67-66.56.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.70-67.55.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.72-68.55.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.77-69.57.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.77-70.59.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.77-70.82.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.88-72.73.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.88-72.76.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.94-73.73.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "amzn", + "version": "2018", + "arch": "x86_64", + "uname_release": "4.14.97-74.72.amzn1.x86_64", + "cindex": 1 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "3.18.9-200.el7.aarch64", + "cindex": 8 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "3.19.0-0.80.aa7a.aarch64", + "cindex": 9 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.0.0-0.rc7.git1.1.el7.aarch64", + "cindex": 10 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.0.0-1.el7.aarch64", + "cindex": 10 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.11.0-22.el7.2.aarch64", + "cindex": 11 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.11.0-22.el7a.aarch64", + "cindex": 11 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.11.0-45.4.1.el7a.aarch64", + "cindex": 11 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.11.0-45.6.1.el7a.aarch64", + "cindex": 11 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.11.0-45.el7.aarch64", + "cindex": 11 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.10.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.2.2.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.5.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.6.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.7.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.8.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.8.2.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.el7a.0.1.aarch64", + "cindex": 12 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-49.10.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-49.13.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-49.2.2.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-49.8.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-49.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.101-200.el7.aarch64", + "cindex": 13 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.71-201.el7.aarch64", + "cindex": 13 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.78-201.el7.aarch64", + "cindex": 13 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.82-201.el7.aarch64", + "cindex": 13 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.94-200.el7.aarch64", + "cindex": 13 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.18.0-147.0.3.el7.aarch64", + "cindex": 14 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.18.0-147.8.1.el7.aarch64", + "cindex": 14 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.18.0-193.1.2.el7.aarch64", + "cindex": 15 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.18.0-193.28.1.el7.aarch64", + "cindex": 15 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.18.0-305.10.2.el7.aarch64", + "cindex": 16 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.18.0-348.20.1.el7.aarch64", + "cindex": 17 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.18.0-80.7.1.el7.aarch64", + "cindex": 18 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.18.0-80.7.2.el7.aarch64", + "cindex": 18 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.19.104-300.el7.aarch64", + "cindex": 19 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.19.110-300.el7.aarch64", + "cindex": 19 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.19.113-300.el7.aarch64", + "cindex": 20 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.19.23-300.el7.aarch64", + "cindex": 19 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.19.84-300.el7.aarch64", + "cindex": 19 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.19.94-300.el7.aarch64", + "cindex": 19 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.2.0-0.22.el7.1.aarch64", + "cindex": 21 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.2.0-0.24.el7.1.aarch64", + "cindex": 21 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.2.0-0.25.el7.1.aarch64", + "cindex": 21 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.2.0-0.26.el7.1.aarch64", + "cindex": 21 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.2.0-0.27.el7.1.aarch64", + "cindex": 21 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.2.0-0.28.el7.1.aarch64", + "cindex": 21 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.2.0-0.29.el7.1.aarch64", + "cindex": 21 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.2.0-0.30.el7.1.aarch64", + "cindex": 21 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.2.0-0.31.el7.1.aarch64", + "cindex": 21 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.5.0-19.el7.aarch64", + "cindex": 22 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.5.0-20.el7.aarch64", + "cindex": 22 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.5.0-21.el7.aarch64", + "cindex": 22 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.5.0-22.el7.aarch64", + "cindex": 22 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.5.0-23.el7.aarch64", + "cindex": 22 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.5.0-25.el7.aarch64", + "cindex": 22 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.5.0-27.el7.aarch64", + "cindex": 22 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "4.5.0-29.el7.aarch64", + "cindex": 22 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "5.10.109-200.el7.aarch64", + "cindex": 23 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.28-200.el7.aarch64", + "cindex": 24 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.42-200.el7.aarch64", + "cindex": 24 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.49-200.el7.aarch64", + "cindex": 24 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.88-200.el7.aarch64", + "cindex": 24 + }, + { + "distrib": "centos", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.96-200.el7.aarch64", + "cindex": 24 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.1.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.1.2.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.12.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.18.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.4.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.4.2.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.4.3.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.7.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.9.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.10.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.13.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.18.2.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.19.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.8.2.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.11.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.15.2.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.2.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.2.2.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.21.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.24.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.25.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.31.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.36.2.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.41.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.42.2.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.45.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.49.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.53.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.59.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.6.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.62.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.66.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.71.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.76.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.80.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.81.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.1.3.el7.x86_64", + "cindex": 26 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.10.1.el7.x86_64", + "cindex": 26 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.12.1.el7.x86_64", + "cindex": 26 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.12.2.el7.x86_64", + "cindex": 26 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.21.2.el7.x86_64", + "cindex": 26 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.21.3.el7.x86_64", + "cindex": 26 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.27.2.el7.x86_64", + "cindex": 26 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.5.1.el7.x86_64", + "cindex": 26 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.el7.x86_64", + "cindex": 26 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "4.19.104-300.el7.x86_64", + "cindex": 27 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "4.19.110-300.el7.x86_64", + "cindex": 27 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "4.19.113-300.el7.x86_64", + "cindex": 28 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "4.19.84-300.el7.x86_64", + "cindex": 27 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "4.19.94-300.el7.x86_64", + "cindex": 27 + }, + { + "distrib": "centos", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.28-200.el7.x86_64", + "cindex": 29 + }, + { + "distrib": "centos", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.0.3.el8_1.aarch64", + "cindex": 30 + }, + { + "distrib": "centos", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.3.1.el8_1.aarch64", + "cindex": 30 + }, + { + "distrib": "centos", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.5.1.el8_1.aarch64", + "cindex": 30 + }, + { + "distrib": "centos", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.8.1.el8_1.aarch64", + "cindex": 30 + }, + { + "distrib": "centos", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.el8.aarch64", + "cindex": 30 + }, + { + "distrib": "centos", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.7.1.el8_0.aarch64", + "cindex": 31 + }, + { + "distrib": "centos", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.el8.aarch64", + "cindex": 31 + }, + { + "distrib": "centos", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.0.3.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "centos", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.3.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "centos", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.5.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "centos", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.8.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "centos", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.el8.x86_64", + "cindex": 30 + }, + { + "distrib": "centos", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.7.1.el8_0.x86_64", + "cindex": 31 + }, + { + "distrib": "centos", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.el8.x86_64", + "cindex": 31 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-17-arm64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-17-rt-arm64", + "cindex": 33 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-18-arm64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-18-rt-arm64", + "cindex": 33 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-19-arm64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-19-rt-arm64", + "cindex": 33 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-20-arm64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-20-rt-arm64", + "cindex": 33 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-21-arm64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-21-rt-arm64", + "cindex": 33 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-22-arm64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-22-rt-arm64", + "cindex": 33 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-23-arm64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "4.19.0-23-rt-arm64", + "cindex": 33 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "5.10.0-0.deb10.17-arm64", + "cindex": 34 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "5.10.0-0.deb10.17-cloud-arm64", + "cindex": 34 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "5.10.0-0.deb10.17-rt-arm64", + "cindex": 35 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "5.10.0-0.deb10.19-arm64", + "cindex": 34 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "5.10.0-0.deb10.19-cloud-arm64", + "cindex": 34 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "5.10.0-0.deb10.19-rt-arm64", + "cindex": 35 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "5.10.0-0.deb10.20-arm64", + "cindex": 34 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "5.10.0-0.deb10.20-cloud-arm64", + "cindex": 34 + }, + { + "distrib": "debian", + "version": "10", + "arch": "arm64", + "uname_release": "5.10.0-0.deb10.20-rt-arm64", + "cindex": 35 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-17-amd64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-17-cloud-amd64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-17-rt-amd64", + "cindex": 33 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-18-amd64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-18-cloud-amd64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-18-rt-amd64", + "cindex": 33 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-19-amd64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-19-cloud-amd64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-19-rt-amd64", + "cindex": 33 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-20-amd64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-20-cloud-amd64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-20-rt-amd64", + "cindex": 33 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-21-amd64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-21-cloud-amd64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-21-rt-amd64", + "cindex": 33 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-22-amd64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-22-cloud-amd64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-22-rt-amd64", + "cindex": 33 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-23-amd64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-23-cloud-amd64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "4.19.0-23-rt-amd64", + "cindex": 33 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "5.10.0-0.deb10.17-amd64", + "cindex": 34 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "5.10.0-0.deb10.17-cloud-amd64", + "cindex": 34 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "5.10.0-0.deb10.17-rt-amd64", + "cindex": 35 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "5.10.0-0.deb10.19-amd64", + "cindex": 34 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "5.10.0-0.deb10.19-cloud-amd64", + "cindex": 34 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "5.10.0-0.deb10.19-rt-amd64", + "cindex": 35 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "5.10.0-0.deb10.20-amd64", + "cindex": 34 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "5.10.0-0.deb10.20-cloud-amd64", + "cindex": 34 + }, + { + "distrib": "debian", + "version": "10", + "arch": "x86_64", + "uname_release": "5.10.0-0.deb10.20-rt-amd64", + "cindex": 35 + }, + { + "distrib": "debian", + "version": "9", + "arch": "arm64", + "uname_release": "4.19.0-0.bpo.19-arm64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "9", + "arch": "arm64", + "uname_release": "4.19.0-0.bpo.19-rt-arm64", + "cindex": 33 + }, + { + "distrib": "debian", + "version": "9", + "arch": "arm64", + "uname_release": "4.9.0-13-arm64", + "cindex": 36 + }, + { + "distrib": "debian", + "version": "9", + "arch": "arm64", + "uname_release": "4.9.0-18-arm64", + "cindex": 37 + }, + { + "distrib": "debian", + "version": "9", + "arch": "arm64", + "uname_release": "4.9.0-19-arm64", + "cindex": 37 + }, + { + "distrib": "debian", + "version": "9", + "arch": "x86_64", + "uname_release": "4.19.0-0.bpo.19-amd64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "9", + "arch": "x86_64", + "uname_release": "4.19.0-0.bpo.19-cloud-amd64", + "cindex": 32 + }, + { + "distrib": "debian", + "version": "9", + "arch": "x86_64", + "uname_release": "4.19.0-0.bpo.19-rt-amd64", + "cindex": 33 + }, + { + "distrib": "debian", + "version": "9", + "arch": "x86_64", + "uname_release": "4.9.0-13-amd64", + "cindex": 36 + }, + { + "distrib": "debian", + "version": "9", + "arch": "x86_64", + "uname_release": "4.9.0-13-rt-amd64", + "cindex": 38 + }, + { + "distrib": "debian", + "version": "9", + "arch": "x86_64", + "uname_release": "4.9.0-18-amd64", + "cindex": 37 + }, + { + "distrib": "debian", + "version": "9", + "arch": "x86_64", + "uname_release": "4.9.0-18-rt-amd64", + "cindex": 39 + }, + { + "distrib": "debian", + "version": "9", + "arch": "x86_64", + "uname_release": "4.9.0-19-amd64", + "cindex": 37 + }, + { + "distrib": "debian", + "version": "9", + "arch": "x86_64", + "uname_release": "4.9.0-19-rt-amd64", + "cindex": 39 + }, + { + "distrib": "fedora", + "version": "24", + "arch": "x86_64", + "uname_release": "4.5.5-300.fc24.x86_64", + "cindex": 40 + }, + { + "distrib": "fedora", + "version": "25", + "arch": "x86_64", + "uname_release": "4.8.6-300.fc25.x86_64", + "cindex": 41 + }, + { + "distrib": "fedora", + "version": "26", + "arch": "x86_64", + "uname_release": "4.11.8-300.fc26.x86_64", + "cindex": 42 + }, + { + "distrib": "fedora", + "version": "27", + "arch": "x86_64", + "uname_release": "4.13.9-300.fc27.x86_64", + "cindex": 43 + }, + { + "distrib": "fedora", + "version": "28", + "arch": "arm64", + "uname_release": "4.16.3-301.fc28.aarch64", + "cindex": 44 + }, + { + "distrib": "fedora", + "version": "28", + "arch": "arm64", + "uname_release": "5.0.16-100.fc28.aarch64", + "cindex": 45 + }, + { + "distrib": "fedora", + "version": "28", + "arch": "x86_64", + "uname_release": "4.16.3-301.fc28.x86_64", + "cindex": 46 + }, + { + "distrib": "fedora", + "version": "28", + "arch": "x86_64", + "uname_release": "5.0.16-100.fc28.x86_64", + "cindex": 47 + }, + { + "distrib": "fedora", + "version": "29", + "arch": "arm64", + "uname_release": "4.18.16-300.fc29.aarch64", + "cindex": 48 + }, + { + "distrib": "fedora", + "version": "29", + "arch": "arm64", + "uname_release": "5.3.11-100.fc29.aarch64", + "cindex": 49 + }, + { + "distrib": "fedora", + "version": "29", + "arch": "x86_64", + "uname_release": "4.18.16-300.fc29.x86_64", + "cindex": 50 + }, + { + "distrib": "fedora", + "version": "29", + "arch": "x86_64", + "uname_release": "5.3.11-100.fc29.x86_64", + "cindex": 51 + }, + { + "distrib": "fedora", + "version": "30", + "arch": "arm64", + "uname_release": "5.0.9-301.fc30.aarch64", + "cindex": 45 + }, + { + "distrib": "fedora", + "version": "30", + "arch": "arm64", + "uname_release": "5.6.13-100.fc30.aarch64", + "cindex": 52 + }, + { + "distrib": "fedora", + "version": "30", + "arch": "x86_64", + "uname_release": "5.0.9-301.fc30.x86_64", + "cindex": 47 + }, + { + "distrib": "fedora", + "version": "30", + "arch": "x86_64", + "uname_release": "5.6.13-100.fc30.x86_64", + "cindex": 52 + }, + { + "distrib": "fedora", + "version": "31", + "arch": "arm64", + "uname_release": "5.3.7-301.fc31.aarch64", + "cindex": 53 + }, + { + "distrib": "fedora", + "version": "31", + "arch": "x86_64", + "uname_release": "5.3.7-301.fc31.x86_64", + "cindex": 54 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1818.0.10.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1818.0.15.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1818.0.9.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1818.1.6.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1818.2.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1818.3.3.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1818.4.6.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1818.4.7.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1818.5.4.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1844.0.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1844.0.4.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1844.0.6.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1844.0.7.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1844.1.3.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1844.2.5.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1844.3.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1844.4.5.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1844.4.5.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1844.5.3.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1846.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1847.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1848.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1849.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1850a.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1851.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1901.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.0.10.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.0.11.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.0.12.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.0.13.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.0.14.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.0.15.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.0.18.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.0.3.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.0.4.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.0.5.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.0.6.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.0.7.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.0.9.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.1.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.10.2.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.10.4.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.10.4.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.10.4.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.10.7.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.10.8.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.11.3.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.11.3.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.12.0.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.3.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.3.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.300.11.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.301.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.302.0.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.302.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.302.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.303.0.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.303.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.303.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.303.4.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.303.5.3.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.304.5.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.304.6.3.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.304.6.4.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.304.6.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.305.0.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.305.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.305.4.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.305.4.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.10.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.12.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.13.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.14.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.4.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.5.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.7.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.8.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.306.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.4.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.4.3.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.4.8.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.5.0.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.5.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.5.2.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.5.2.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.5.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.6.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.6.3.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.6.4.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.6.5.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.6.6.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.7.0.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.7.3.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.7.3.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.8.4.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.9.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1902.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1903.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1904.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1905.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1906.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1907.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1908.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1909.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1910a.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1911.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1912.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1915.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1916.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1917.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1923.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1929.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1933.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-1941.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2013.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2015.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2016.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2017.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2018.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2019.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2020.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.400.3.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.400.8.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.400.9.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.400.9.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.401.4.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.402.0.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.402.2.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.403.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.403.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.403.3.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.403.4.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.403.5.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.404.0.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.404.1.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.404.1.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.405.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.405.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2025.405.3.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2039.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2040.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2041.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.500.10.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.500.5.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.500.9.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.500.9.3.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.501.0.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.501.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.501.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.502.3.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.502.4.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.502.4.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.502.5.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.503.0.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.503.1.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.503.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.504.0.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.504.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.504.2.3.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.504.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.505.0.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.505.1.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.505.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.505.3.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.505.4.2.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.505.4.3.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.505.4.4.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.505.4.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.506.0.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.506.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.506.10.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.506.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.506.4.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.506.8.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.506.8.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.507.0.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.507.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.507.7.4.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.507.7.5.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.507.7.6.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.508.3.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.508.3.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.508.3.3.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.508.3.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.509.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.509.2.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.509.2.3.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.0.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.3.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.4.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.5.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.5.3.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.5.4.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.5.5.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.510.5.6.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.0.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.3.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.3.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.4.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.5.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.5.3.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.5.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.6.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.7.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.8.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.511.5.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.512.0.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.512.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.512.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.512.4.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.512.5.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.512.6.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.513.0.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.513.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.513.2.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.513.2.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.513.2.3.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.513.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.514.0.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.514.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.514.3.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.514.5.1.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.514.5.1.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.514.5.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.515.3.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.516.1.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.516.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.516.2.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.516.2.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.516.2.4.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.516.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.517.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.517.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.517.3.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.517.3.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.518.0.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.518.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.518.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.518.3.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.518.4.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.518.4.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.518.4.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.519.0.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.519.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.519.2.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.519.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.520.0.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.520.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.520.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.520.3.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.521.1.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.521.2.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2047.521.4.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2048.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2049.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2050.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2051.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2052.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2102.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2103.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2104.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2105.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2106.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2108.el7uek.aarch64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2109.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2110.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2111.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2112.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2113.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2114.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2115.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2116.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2118.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2120.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2121.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2122.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.35-2124.el7uek.aarch64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.0-1948.3.el7uek.aarch64", + "cindex": 57 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2006.5.el7uek.aarch64", + "cindex": 57 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2011.4.6.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2011.6.2.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2028.2.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.100.1.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.100.3.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.100.6.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.101.0.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.101.1.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.101.2.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.102.0.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.103.2.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.104.0.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.104.2.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.105.1.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2036.105.3.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2040.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2041.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2051.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.200.7.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.200.9.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.202.4.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.202.5.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.203.3.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.203.4.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.204.0.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.204.1.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.204.2.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.204.3.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.204.4.3.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.205.2.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.205.7.2.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.205.7.3.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2102.206.1.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2106.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2108.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2109.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2111.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2114.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2118.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2120.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2122.303.5.el7uek.aarch64", + "cindex": 59 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2122.el7uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2136.300.7.el7uek.aarch64", + "cindex": 59 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.17-2136.301.0.el7uek.aarch64", + "cindex": 59 + }, + { + "distrib": "ol", + "version": "7", + "arch": "arm64", + "uname_release": "5.4.2-1950.2.el7uek.aarch64", + "cindex": 57 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.0.0.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.1.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.1.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.1.2.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.1.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.12.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.12.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.18.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.18.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.4.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.4.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.4.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.4.3.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.4.3.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.7.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.7.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.9.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.9.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.0.0.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.10.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.10.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.13.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.13.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.18.2.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.18.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.19.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.19.1.0.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.19.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.8.2.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1127.8.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.11.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.11.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.15.2.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.15.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.2.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.2.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.2.2.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.2.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.21.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.21.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.24.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.24.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.25.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.25.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.31.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.31.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.36.2.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.36.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.41.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.41.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.42.2.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.42.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.45.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.45.1.0.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.45.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.49.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.49.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.53.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.53.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.59.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.59.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.6.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.6.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.62.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.62.1.0.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.62.1.0.3.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.62.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.66.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.66.1.0.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.66.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.71.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.71.1.0.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.76.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.76.1.0.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.80.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.80.1.0.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.81.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.81.1.0.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1160.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.0.0.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.0.0.0.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.0.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.1.3.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.1.3.0.3.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.1.3.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.10.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.10.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.12.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.12.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.12.2.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.12.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.21.2.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.21.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.21.3.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.21.3.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.27.2.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.27.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.5.1.0.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.5.1.0.2.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.5.1.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.el7.x86_64", + "cindex": 60 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-103.10.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-103.3.8.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-103.3.8.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-103.6.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-103.7.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-103.7.3.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-103.7.4.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-103.9.2.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-103.9.4.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-103.9.6.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-103.9.7.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-112.14.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-112.14.10.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-112.14.11.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-112.14.13.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-112.14.14.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-112.14.15.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-112.14.2.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-112.14.5.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-112.16.4.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-112.16.7.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-112.17.3.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.14.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.14.2.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.14.3.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.14.5.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.15.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.15.2.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.15.4.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.16.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.16.2.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.16.3.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.16.4.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.17.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.17.2.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.18.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.18.5.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.18.6.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.18.9.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.19.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.19.2.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.19.4.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.19.5.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.19.6.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.19.7.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.20.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.20.3.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.20.7.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.21.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.22.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.22.2.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.22.4.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.23.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.23.2.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.23.4.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.24.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.24.3.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.24.5.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.25.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.26.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.26.10.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.26.12.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.26.3.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.26.5.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.26.7.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.27.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.27.2.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.28.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.28.3.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.28.5.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.28.6.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.29.3.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.29.3.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.29.4.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.30.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.31.1.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.31.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.32.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.32.3.2.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.32.3.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.33.4.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.34.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.35.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.35.2.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.35.4.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.36.1.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.36.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.36.3.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.36.4.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.37.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-124.38.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-32.1.2.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-32.2.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-32.2.3.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-32.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-37.2.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-37.2.2.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-37.3.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-37.4.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-37.5.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-37.6.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-37.6.2.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-37.6.3.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-61.1.10.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-61.1.13.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-61.1.14.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-61.1.16.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-61.1.17.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-61.1.18.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-61.1.19.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-61.1.22.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-61.1.23.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-61.1.24.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-61.1.25.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-61.1.27.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-61.1.28.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-61.1.33.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-61.1.34.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-61.1.6.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-61.51.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-61.63.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-61.64.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-94.1.8.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-94.2.1.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-94.3.4.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-94.3.5.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-94.3.6.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-94.3.7.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-94.3.8.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-94.3.9.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-94.5.7.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-94.5.9.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-94.7.8.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-94.8.2.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-94.8.3.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.1.12-94.8.5.el7uek.x86_64", + "cindex": 61 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.300.11.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.301.1.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.302.0.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.302.1.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.302.2.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.303.0.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.303.1.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.303.2.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.303.4.1.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.303.5.3.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.304.4.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.304.5.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.304.6.3.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.304.6.4.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.304.6.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.305.0.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.305.1.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.305.4.1.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.305.4.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.1.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.12.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.13.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.14.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.2.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.4.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.5.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.7.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.8.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1902.306.2.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1903.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1904.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1905.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1906.1.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1907.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1908.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1909.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1910a.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1911.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1912.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1915.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1916.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1917.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1923.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1929.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1933.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-1941.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2013.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2015.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2016.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2017.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2018.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2019.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2020.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.400.3.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.400.8.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.400.9.1.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.400.9.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.401.4.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.402.0.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.402.2.1.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.403.1.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.403.2.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.403.3.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.403.4.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.403.5.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.404.0.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.404.1.1.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.404.1.2.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.405.1.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.405.2.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2025.405.3.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2039.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2040.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2041.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.500.10.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.500.5.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.500.9.1.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.500.9.3.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.501.0.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.501.1.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.501.2.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.502.3.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.502.4.1.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.502.4.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.502.5.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.503.0.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.503.1.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.504.0.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.504.1.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.504.2.3.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.504.2.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.505.0.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.505.1.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.505.2.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.505.3.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.505.4.2.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.505.4.3.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.505.4.4.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.505.4.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.506.0.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.506.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.506.10.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.506.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.506.4.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.506.8.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.506.8.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.507.0.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.507.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.507.7.4.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.507.7.5.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.507.7.6.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.508.3.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.508.3.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.508.3.3.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.508.3.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.509.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.509.2.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.509.2.3.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.0.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.3.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.4.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.5.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.5.3.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.5.4.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.5.5.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.510.5.6.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.0.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.3.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.5.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.5.3.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.5.4.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.5.5.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.5.5.3.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.5.5.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.5.6.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.5.7.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.5.8.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.511.5.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.512.0.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.512.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.512.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.512.4.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.512.5.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.512.6.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.513.0.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.513.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.513.2.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.513.2.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.513.2.3.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.513.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.514.0.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.514.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.514.3.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.514.5.1.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.514.5.1.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.514.5.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.515.3.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.516.1.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.516.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.516.2.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.516.2.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.516.2.4.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.516.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.517.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.517.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.517.3.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.517.3.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.518.0.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.518.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.518.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.518.3.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.518.4.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.518.4.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.518.4.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.519.0.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.519.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.519.2.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.519.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.520.0.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.520.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.520.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.520.3.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.521.1.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2047.521.2.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2048.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2049.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2050.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2051.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2052.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2102.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2103.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2104.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2105.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2106.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2108.el7uek.x86_64", + "cindex": 55 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2109.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2110.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2111.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2112.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2113.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2114.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2115.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2116.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2118.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2120.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2121.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2122.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "4.14.35-2124.el7uek.x86_64", + "cindex": 56 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.0-1948.3.el7uek.x86_64", + "cindex": 62 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2006.5.el7uek.x86_64", + "cindex": 57 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2011.0.7.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2011.1.2.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2011.2.2.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2011.3.2.1.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2011.4.4.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2011.4.6.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2011.5.3.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2011.6.2.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2011.7.4.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2028.2.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2036.100.1.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2036.100.3.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2036.100.6.1.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2036.100.6.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2036.101.0.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2036.101.1.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2036.101.2.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2036.102.0.2.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2036.102.0.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2036.103.2.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2036.103.3.1.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2036.103.3.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2036.104.0.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2036.104.2.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2036.104.4.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2036.104.5.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2036.105.1.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2036.105.3.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2040.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2041.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2051.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.200.13.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.200.7.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.200.9.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.201.3.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.202.4.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.202.5.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.203.3.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.203.4.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.203.5.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.203.6.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.0.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.1.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.2.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.3.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.4.2.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.4.3.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.4.4.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.205.2.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.205.7.2.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.205.7.3.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2102.206.1.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2106.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2108.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2109.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2111.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2114.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2118.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2120.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2122.303.5.el7uek.x86_64", + "cindex": 59 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2122.el7uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2136.300.7.el7uek.x86_64", + "cindex": 59 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.17-2136.301.0.el7uek.x86_64", + "cindex": 59 + }, + { + "distrib": "ol", + "version": "7", + "arch": "x86_64", + "uname_release": "5.4.2-1950.2.el7uek.x86_64", + "cindex": 57 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.0.2.el8_1.aarch64", + "cindex": 30 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.0.3.el8_1.aarch64", + "cindex": 30 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.3.1.el8_1.aarch64", + "cindex": 30 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.5.1.el8_1.aarch64", + "cindex": 30 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.8.1.el8_1.aarch64", + "cindex": 30 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.el8.aarch64", + "cindex": 30 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.1.2.el8_0.aarch64", + "cindex": 31 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.11.1.el8_0.aarch64", + "cindex": 31 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.11.2.el8_0.aarch64", + "cindex": 31 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.4.2.el8_0.aarch64", + "cindex": 31 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.7.1.el8_0.aarch64", + "cindex": 31 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.7.2.el8_0.aarch64", + "cindex": 31 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.el8.aarch64", + "cindex": 31 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2011.0.7.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2011.1.2.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2011.2.2.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2011.3.2.1.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2011.4.4.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2011.4.6.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2011.5.3.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2011.6.2.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2011.7.4.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2036.100.6.1.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2036.101.2.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2036.102.0.2.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2036.103.3.1.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2036.103.3.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2036.104.4.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2036.104.5.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2102.200.13.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2102.201.3.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2102.202.5.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2102.203.5.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2102.203.6.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "arm64", + "uname_release": "5.4.17-2102.204.4.2.el8uek.aarch64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.0.2.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.0.3.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.3.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.5.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.8.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.el8.x86_64", + "cindex": 30 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.1.2.el8_0.x86_64", + "cindex": 31 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.11.1.el8_0.x86_64", + "cindex": 31 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.11.2.el8_0.x86_64", + "cindex": 31 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.4.2.el8_0.x86_64", + "cindex": 31 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.7.1.el8_0.x86_64", + "cindex": 31 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.7.2.el8_0.x86_64", + "cindex": 31 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.el8.x86_64", + "cindex": 31 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2011.0.7.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2011.1.2.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2011.2.2.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2011.3.2.1.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2011.4.4.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2011.4.6.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2011.5.3.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2011.6.2.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2011.7.4.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2036.100.6.1.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2036.101.2.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2036.102.0.2.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2036.103.3.1.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2036.103.3.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2036.104.4.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2036.104.5.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.200.13.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.201.3.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.202.4.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.202.5.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.203.3.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.203.4.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.203.5.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.203.6.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.0.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.1.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.2.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.3.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.4.2.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.4.3.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.204.4.4.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.205.3.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.205.5.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.205.6.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.205.7.1.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.205.7.2.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.205.7.3.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.205.7.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.206.0.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2102.206.1.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2114.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2118.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2120.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "ol", + "version": "8", + "arch": "x86_64", + "uname_release": "5.4.17-2122.el8uek.x86_64", + "cindex": 58 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.11.0-44.2.1.el7a.aarch64", + "cindex": 11 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.11.0-44.4.1.el7a.aarch64", + "cindex": 11 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.11.0-44.6.1.el7a.aarch64", + "cindex": 11 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.11.0-44.7.1.el7a.aarch64", + "cindex": 11 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.11.0-44.el7a.aarch64", + "cindex": 11 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.10.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.12.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.13.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.14.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.16.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.17.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.18.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.19.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.2.2.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.21.2.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.26.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.29.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.32.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.33.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.5.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.6.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.7.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.8.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.8.2.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-115.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-49.10.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-49.13.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-49.2.2.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-49.8.1.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "arm64", + "uname_release": "4.14.0-49.el7a.aarch64", + "cindex": 12 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.1.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.1.2.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.12.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.18.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.21.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.26.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.30.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.31.2.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.31.3.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.33.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.36.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.37.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.4.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.4.2.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.4.3.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.40.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.43.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.45.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.46.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.49.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.51.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.52.2.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.7.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.9.1.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-1062.el7.x86_64", + "cindex": 25 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.1.3.el7.x86_64", + "cindex": 26 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.10.1.el7.x86_64", + "cindex": 26 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.12.1.el7.x86_64", + "cindex": 26 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.12.2.el7.x86_64", + "cindex": 26 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.21.2.el7.x86_64", + "cindex": 26 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.21.3.el7.x86_64", + "cindex": 26 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.27.2.el7.x86_64", + "cindex": 26 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.5.1.el7.x86_64", + "cindex": 26 + }, + { + "distrib": "rhel", + "version": "7", + "arch": "x86_64", + "uname_release": "3.10.0-957.el7.x86_64", + "cindex": 26 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.0.2.el8_1.aarch64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.0.3.el8_1.aarch64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.3.1.el8_1.aarch64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.5.1.el8_1.aarch64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.8.1.el8_1.aarch64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-147.el8.aarch64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.1.2.el8_0.aarch64", + "cindex": 31 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.11.1.el8_0.aarch64", + "cindex": 31 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.11.2.el8_0.aarch64", + "cindex": 31 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.4.2.el8_0.aarch64", + "cindex": 31 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.7.1.el8_0.aarch64", + "cindex": 31 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.7.2.el8_0.aarch64", + "cindex": 31 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "arm64", + "uname_release": "4.18.0-80.el8.aarch64", + "cindex": 31 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.0.2.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.0.3.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.13.2.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.20.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.24.2.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.27.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.3.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.32.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.34.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.38.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.43.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.44.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.48.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.5.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.51.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.51.2.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.52.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.54.2.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.56.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.57.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.8.1.el8_1.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-147.el8.x86_64", + "cindex": 30 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.1.2.el8_0.x86_64", + "cindex": 31 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.11.1.el8_0.x86_64", + "cindex": 31 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.11.2.el8_0.x86_64", + "cindex": 31 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.4.2.el8_0.x86_64", + "cindex": 31 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.7.1.el8_0.x86_64", + "cindex": 31 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.7.2.el8_0.x86_64", + "cindex": 31 + }, + { + "distrib": "rhel", + "version": "8", + "arch": "x86_64", + "uname_release": "4.18.0-80.el8.x86_64", + "cindex": 31 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.10.0-14-generic", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.10.0-19-generic", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.10.0-20-generic", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.10.0-21-generic", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.10.0-22-generic", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.10.0-24-generic", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.10.0-26-generic", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.10.0-27-generic", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.10.0-28-generic", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.10.0-30-generic", + "cindex": 63 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.10.0-32-generic", + "cindex": 63 }, { - "binprm_file_offset": 64, - "bpf_map_id_offset": 48, - "bpf_map_name_offset": 88, - "bpf_map_type_offset": 24, - "bpf_prog_attach_type_offset": 8, - "bpf_prog_aux_id_offset": 28, - "bpf_prog_aux_name_offset": 416, - "bpf_prog_aux_offset": 32, - "bpf_prog_tag_offset": 20, - "bpf_prog_type_offset": 4, - "creds_uid_offset": 4, - "dentry_sb_offset": 104, - "flowi4_saddr_offset": 40, - "flowi4_uli_offset": 48, - "flowi6_saddr_offset": 56, - "flowi6_uli_offset": 76, - "iokiocb_ctx_offset": 80, - "net_device_ifindex_offset": 256, - "net_ns_offset": 120, - "nf_conn_ct_net_offset": 144, - "pid_level_offset": 4, - "pid_numbers_offset": 96, - "pipe_inode_info_bufs_offset": 152, - "sb_magic_offset": 96, - "sizeof_inode": 600, - "sizeof_upid": 16, - "sock_common_skc_family_offset": 16, - "sock_common_skc_net_offset": 48, - "socket_sock_offset": 24, - "tty_name_offset": 360, - "tty_offset": 408 - } - ], - "kernels": [ + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.10.0-33-generic", + "cindex": 63 + }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.101-91.76.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.10.0-35-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.104-95.84.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.10.0-37-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.106-97.85.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.10.0-38-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.109-99.92.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.10.0-40-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.114-103.97.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.10.0-42-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.114-105.126.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.11.0-13-generic", + "cindex": 64 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.121-109.96.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.11.0-14-generic", + "cindex": 64 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.123-111.109.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.13.0-16-generic", + "cindex": 65 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.128-112.105.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.13.0-17-generic", + "cindex": 65 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.133-113.105.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.13.0-19-generic", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.13.0-21-generic", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.13.0-25-generic", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.13.0-26-generic", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.13.0-31-generic", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.13.0-32-generic", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.13.0-36-generic", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.13.0-37-generic", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.13.0-38-generic", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.13.0-39-generic", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.13.0-41-generic", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.13.0-43-generic", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.13.0-45-generic", + "cindex": 65 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-101-generic", + "cindex": 66 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1030-aws", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1031-aws", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1032-aws", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1033-aws", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1035-aws", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1036-aws", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1039-aws", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1040-aws", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1041-aws", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1043-aws", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1044-aws", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1045-aws", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1047-aws", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1048-aws", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1050-aws", + "cindex": 67 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.15.0-1051-aws", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.133-113.112.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.15.0-1052-aws", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.138-114.102.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.15.0-1054-aws", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.143-118.123.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.15.0-1056-aws", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.146-119.123.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.15.0-1057-aws", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.146-120.181.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.15.0-1058-aws", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.152-124.171.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.15.0-106-generic", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.152-127.182.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.15.0-1060-aws", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.154-128.181.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.15.0-1063-aws", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.158-129.185.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.15.0-1065-aws", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.165-131.185.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.15.0-1066-aws", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.165-133.209.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.15.0-1067-aws", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.171-136.231.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.15.0-107-generic", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.173-137.228.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.15.0-1073-aws", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.173-137.229.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.15.0-1074-aws", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.177-139.253.amzn2.aarch64", - "cindex": 1 + "uname_release": "4.15.0-1079-aws", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.177-139.254.amzn2.aarch64", - "cindex": 1 + "uname_release": "4.15.0-1080-aws", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.181-140.257.amzn2.aarch64", - "cindex": 1 + "uname_release": "4.15.0-1082-aws", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.181-142.260.amzn2.aarch64", - "cindex": 1 + "uname_release": "4.15.0-1083-aws", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.186-146.268.amzn2.aarch64", - "cindex": 1 + "uname_release": "4.15.0-1085-aws", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.192-147.314.amzn2.aarch64", - "cindex": 1 + "uname_release": "4.15.0-1090-aws", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.193-149.317.amzn2.aarch64", - "cindex": 1 + "uname_release": "4.15.0-1091-aws", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.198-152.320.amzn2.aarch64", - "cindex": 1 + "uname_release": "4.15.0-1093-aws", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.200-155.322.amzn2.aarch64", - "cindex": 1 + "uname_release": "4.15.0-1094-aws", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.203-156.332.amzn2.aarch64", - "cindex": 1 + "uname_release": "4.15.0-1095-aws", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.209-160.335.amzn2.aarch64", - "cindex": 1 + "uname_release": "4.15.0-1096-aws", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.209-160.339.amzn2.aarch64", - "cindex": 1 + "uname_release": "4.15.0-1097-aws", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.214-160.339.amzn2.aarch64", - "cindex": 1 + "uname_release": "4.15.0-1098-aws", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.219-161.340.amzn2.aarch64", - "cindex": 1 + "uname_release": "4.15.0-1099-aws", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.219-164.354.amzn2.aarch64", - "cindex": 1 + "uname_release": "4.15.0-112-generic", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.225-168.357.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-115-generic", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.225-169.362.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-117-generic", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.231-173.360.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-118-generic", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.231-173.361.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-120-generic", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.232-176.381.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-122-generic", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.232-177.418.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-123-generic", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.238-182.421.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-128-generic", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.238-182.422.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-129-generic", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.241-184.433.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-13-generic", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.243-185.433.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-132-generic", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.246-187.474.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-133-generic", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.248-189.473.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-136-generic", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.252-195.481.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-137-generic", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.252-195.483.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-139-generic", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.256-197.484.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-140-generic", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.262-200.489.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-142-generic", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.268-205.500.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-15-generic", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.273-207.502.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-52-generic", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.275-207.503.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-54-generic", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.276-211.499.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-55-generic", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.281-212.502.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-58-generic", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.285-215.501.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-60-generic", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.287-215.504.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-62-generic", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.290-217.505.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-64-generic", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.291-218.527.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-65-generic", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.294-220.533.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-66-generic", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.296-222.539.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-69-generic", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.299-223.520.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-70-generic", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.301-224.520.amzn2.aarch64", - "cindex": 2 + "uname_release": "4.15.0-72-generic", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.77-80.57.amzn2.aarch64", - "cindex": 3 + "uname_release": "4.15.0-74-generic", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.77-81.59.amzn2.aarch64", - "cindex": 3 + "uname_release": "4.15.0-76-generic", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.77-86.82.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.15.0-88-generic", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.88-88.73.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.15.0-91-generic", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.88-88.76.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.15.0-96-generic", + "cindex": 67 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.94-89.73.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.15.0-99-generic", + "cindex": 66 }, { - "distrib": "amzn", - "version": "2", + "distrib": "ubuntu", + "version": "16.04", "arch": "arm64", - "uname_release": "4.14.97-90.72.amzn2.aarch64", - "cindex": 0 + "uname_release": "4.4.0-101-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.101-91.76.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-103-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.104-95.84.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-104-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.106-97.85.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-108-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.109-99.92.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-109-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.114-103.97.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-112-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.114-105.126.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-116-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.121-109.96.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-119-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.123-111.109.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-121-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.128-112.105.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-122-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.133-113.105.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-124-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.133-113.112.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-127-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.138-114.102.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-128-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.143-118.123.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-130-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.146-119.123.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-131-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.146-120.181.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-133-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.152-124.171.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-134-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.152-127.182.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-135-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.154-128.181.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-137-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.158-129.185.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-138-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.165-131.185.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-139-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.165-133.209.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-140-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.171-136.231.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-141-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.173-137.228.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-142-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.173-137.229.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-150-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.177-139.253.amzn2.x86_64", - "cindex": 4 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-151-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.177-139.254.amzn2.x86_64", - "cindex": 4 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-154-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.181-140.257.amzn2.x86_64", - "cindex": 4 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-157-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.181-142.260.amzn2.x86_64", - "cindex": 4 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-159-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.186-146.268.amzn2.x86_64", - "cindex": 4 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-161-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.192-147.314.amzn2.x86_64", - "cindex": 4 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-164-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.193-149.317.amzn2.x86_64", - "cindex": 4 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-165-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.198-152.320.amzn2.x86_64", - "cindex": 4 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-166-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.200-155.322.amzn2.x86_64", - "cindex": 4 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-168-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.203-156.332.amzn2.x86_64", - "cindex": 4 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-169-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.209-160.335.amzn2.x86_64", - "cindex": 4 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-170-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.209-160.339.amzn2.x86_64", - "cindex": 4 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-171-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.214-160.339.amzn2.x86_64", - "cindex": 4 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-173-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.219-161.340.amzn2.x86_64", - "cindex": 4 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-174-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.219-164.354.amzn2.x86_64", - "cindex": 4 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-176-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.225-168.357.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-177-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.225-169.362.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-178-generic", + "cindex": 68 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.231-173.360.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-179-generic", + "cindex": 69 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.231-173.361.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-184-generic", + "cindex": 69 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.232-176.381.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-185-generic", + "cindex": 69 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.232-177.418.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-186-generic", + "cindex": 69 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.238-182.421.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-187-generic", + "cindex": 69 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.238-182.422.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-189-generic", + "cindex": 69 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.241-184.433.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-190-generic", + "cindex": 69 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.243-185.433.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-193-generic", + "cindex": 69 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.246-187.474.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-194-generic", + "cindex": 69 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.248-189.473.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-197-generic", + "cindex": 69 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.252-195.481.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-198-generic", + "cindex": 69 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.252-195.483.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-200-generic", + "cindex": 69 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.256-197.484.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-201-generic", + "cindex": 69 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.26-54.32.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-203-generic", + "cindex": 69 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.262-200.489.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-204-generic", + "cindex": 69 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.268-205.500.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-206-generic", + "cindex": 69 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.273-207.502.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-208-generic", + "cindex": 70 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.275-207.503.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-209-generic", + "cindex": 70 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.276-211.499.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-21-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.281-212.502.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-210-generic", + "cindex": 70 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.285-215.501.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-22-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.287-215.504.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-24-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.290-217.505.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-28-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.291-218.527.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-31-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.294-220.533.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-34-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.296-222.539.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-36-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.299-223.520.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-38-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.301-224.520.amzn2.x86_64", - "cindex": 5 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-42-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.33-59.34.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-43-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.33-59.37.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-45-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.42-61.37.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-47-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.47-63.37.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-51-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.47-64.38.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-53-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.51-66.38.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-57-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.55-68.37.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-59-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.59-68.43.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-62-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.62-70.117.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-63-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.67-71.56.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-64-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.70-72.55.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-66-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.72-73.55.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-67-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.77-80.57.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-70-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.77-81.59.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-71-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.77-86.82.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-72-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.88-88.73.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-75-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.88-88.76.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-77-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.94-89.73.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-78-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.14.97-90.72.amzn2.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-79-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.9.62-10.57.amzn2.x86_64", - "cindex": 6 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-81-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.9.70-2.243.amzn2.x86_64", - "cindex": 6 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-83-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.9.75-1.56.amzn2.x86_64", - "cindex": 6 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-87-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.9.76-38.79.amzn2.x86_64", - "cindex": 6 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-89-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.9.77-41.59.amzn2.x86_64", - "cindex": 6 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-91-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.9.81-44.57.amzn2.x86_64", - "cindex": 7 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-92-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.9.85-46.56.amzn2.x86_64", - "cindex": 7 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-93-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2", - "arch": "x86_64", - "uname_release": "4.9.85-47.59.amzn2.x86_64", - "cindex": 7 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-96-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2018", - "arch": "x86_64", - "uname_release": "4.14.101-75.76.amzn1.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-97-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2018", - "arch": "x86_64", - "uname_release": "4.14.104-78.84.amzn1.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.4.0-98-generic", + "cindex": 40 }, { - "distrib": "amzn", - "version": "2018", - "arch": "x86_64", - "uname_release": "4.14.106-79.86.amzn1.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.8.0-34-generic", + "cindex": 71 }, { - "distrib": "amzn", - "version": "2018", - "arch": "x86_64", - "uname_release": "4.14.109-80.92.amzn1.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.8.0-36-generic", + "cindex": 71 }, { - "distrib": "amzn", - "version": "2018", - "arch": "x86_64", - "uname_release": "4.14.114-82.97.amzn1.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.8.0-39-generic", + "cindex": 71 }, { - "distrib": "amzn", - "version": "2018", - "arch": "x86_64", - "uname_release": "4.14.114-83.126.amzn1.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.8.0-41-generic", + "cindex": 71 }, { - "distrib": "amzn", - "version": "2018", - "arch": "x86_64", - "uname_release": "4.14.121-85.96.amzn1.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.8.0-42-generic", + "cindex": 71 }, { - "distrib": "amzn", - "version": "2018", - "arch": "x86_64", - "uname_release": "4.14.123-86.109.amzn1.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.8.0-44-generic", + "cindex": 71 }, { - "distrib": "amzn", - "version": "2018", - "arch": "x86_64", - "uname_release": "4.14.128-87.105.amzn1.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.8.0-45-generic", + "cindex": 71 }, { - "distrib": "amzn", - "version": "2018", - "arch": "x86_64", - "uname_release": "4.14.133-88.105.amzn1.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.8.0-46-generic", + "cindex": 71 }, { - "distrib": "amzn", - "version": "2018", - "arch": "x86_64", - "uname_release": "4.14.133-88.112.amzn1.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.8.0-49-generic", + "cindex": 71 }, { - "distrib": "amzn", - "version": "2018", - "arch": "x86_64", - "uname_release": "4.14.138-89.102.amzn1.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.8.0-51-generic", + "cindex": 71 }, { - "distrib": "amzn", - "version": "2018", - "arch": "x86_64", - "uname_release": "4.14.143-91.122.amzn1.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.8.0-52-generic", + "cindex": 71 }, { - "distrib": "amzn", - "version": "2018", - "arch": "x86_64", - "uname_release": "4.14.146-93.123.amzn1.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.8.0-53-generic", + "cindex": 71 }, { - "distrib": "amzn", - "version": "2018", - "arch": "x86_64", - "uname_release": "4.14.152-98.182.amzn1.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.8.0-54-generic", + "cindex": 71 }, { - "distrib": "amzn", - "version": "2018", - "arch": "x86_64", - "uname_release": "4.14.154-99.181.amzn1.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.8.0-56-generic", + "cindex": 71 }, { - "distrib": "amzn", - "version": "2018", - "arch": "x86_64", - "uname_release": "4.14.158-101.185.amzn1.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "arm64", + "uname_release": "4.8.0-58-generic", + "cindex": 71 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.165-102.185.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.10.0-1004-gcp", + "cindex": 72 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.165-103.209.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.10.0-1006-gcp", + "cindex": 72 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.171-105.231.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.10.0-1007-gcp", + "cindex": 72 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.173-106.229.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.10.0-1008-gcp", + "cindex": 72 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.177-107.254.amzn1.x86_64", - "cindex": 4 + "uname_release": "4.10.0-1009-gcp", + "cindex": 72 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.181-108.257.amzn1.x86_64", - "cindex": 4 + "uname_release": "4.10.0-14-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.186-110.268.amzn1.x86_64", - "cindex": 4 + "uname_release": "4.10.0-19-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.193-113.317.amzn1.x86_64", - "cindex": 4 + "uname_release": "4.10.0-20-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.200-116.320.amzn1.x86_64", - "cindex": 4 + "uname_release": "4.10.0-21-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.203-116.332.amzn1.x86_64", - "cindex": 4 + "uname_release": "4.10.0-22-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.209-117.337.amzn1.x86_64", - "cindex": 4 + "uname_release": "4.10.0-24-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.214-118.339.amzn1.x86_64", - "cindex": 4 + "uname_release": "4.10.0-26-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.219-119.340.amzn1.x86_64", - "cindex": 4 + "uname_release": "4.10.0-27-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.225-121.357.amzn1.x86_64", - "cindex": 5 + "uname_release": "4.10.0-28-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.225-121.362.amzn1.x86_64", - "cindex": 5 + "uname_release": "4.10.0-30-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.232-123.381.amzn1.x86_64", - "cindex": 5 + "uname_release": "4.10.0-32-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.238-125.421.amzn1.x86_64", - "cindex": 5 + "uname_release": "4.10.0-33-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.238-125.422.amzn1.x86_64", - "cindex": 5 + "uname_release": "4.10.0-35-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.248-129.473.amzn1.x86_64", - "cindex": 5 + "uname_release": "4.10.0-37-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.252-131.483.amzn1.x86_64", - "cindex": 5 + "uname_release": "4.10.0-38-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.262-135.486.amzn1.x86_64", - "cindex": 5 + "uname_release": "4.10.0-40-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.262-135.489.amzn1.x86_64", - "cindex": 5 + "uname_release": "4.10.0-42-generic", + "cindex": 63 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.268-139.500.amzn1.x86_64", - "cindex": 5 + "uname_release": "4.11.0-1009-azure", + "cindex": 64 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.273-140.502.amzn1.x86_64", - "cindex": 5 + "uname_release": "4.11.0-1011-azure", + "cindex": 64 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.275-142.503.amzn1.x86_64", - "cindex": 5 + "uname_release": "4.11.0-1013-azure", + "cindex": 64 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.281-144.502.amzn1.x86_64", - "cindex": 5 + "uname_release": "4.11.0-1014-azure", + "cindex": 64 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.285-147.501.amzn1.x86_64", - "cindex": 5 + "uname_release": "4.11.0-1015-azure", + "cindex": 64 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.287-148.504.amzn1.x86_64", - "cindex": 5 + "uname_release": "4.11.0-1016-azure", + "cindex": 64 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.33-51.34.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.11.0-13-generic", + "cindex": 64 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.33-51.37.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.11.0-14-generic", + "cindex": 64 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.42-52.37.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.13.0-1002-gcp", + "cindex": 73 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.47-56.37.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.13.0-1005-azure", + "cindex": 65 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.51-60.38.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.13.0-1006-azure", + "cindex": 65 }, { - "distrib": "amzn", - "version": "2018", - "arch": "x86_64", - "uname_release": "4.14.55-62.37.amzn1.x86_64", - "cindex": 1 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.13.0-1006-gcp", + "cindex": 73 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.59-64.43.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.13.0-1007-azure", + "cindex": 65 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.62-65.117.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.13.0-1007-gcp", + "cindex": 73 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.67-66.56.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.13.0-1008-gcp", + "cindex": 73 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.70-67.55.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.13.0-1009-azure", + "cindex": 65 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.72-68.55.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.13.0-1011-azure", + "cindex": 65 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.77-69.57.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.13.0-1011-gcp", + "cindex": 73 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.77-70.59.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.13.0-1012-azure", + "cindex": 65 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.77-70.82.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.13.0-1012-gcp", + "cindex": 73 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.88-72.73.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.13.0-1013-gcp", + "cindex": 73 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.88-72.76.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.13.0-1014-azure", + "cindex": 65 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.94-73.73.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.13.0-1015-gcp", + "cindex": 73 }, { - "distrib": "amzn", - "version": "2018", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.14.97-74.72.amzn1.x86_64", - "cindex": 1 + "uname_release": "4.13.0-1016-azure", + "cindex": 65 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "3.18.9-200.el7.aarch64", - "cindex": 8 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.13.0-1017-gcp", + "cindex": 73 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "3.19.0-0.80.aa7a.aarch64", - "cindex": 9 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.13.0-1018-azure", + "cindex": 65 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.0.0-0.rc7.git1.1.el7.aarch64", - "cindex": 10 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.13.0-1019-gcp", + "cindex": 73 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.0.0-1.el7.aarch64", - "cindex": 10 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.13.0-16-generic", + "cindex": 65 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.11.0-22.el7.2.aarch64", - "cindex": 11 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.13.0-17-generic", + "cindex": 65 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.11.0-22.el7a.aarch64", - "cindex": 11 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.13.0-19-generic", + "cindex": 65 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.11.0-45.4.1.el7a.aarch64", - "cindex": 11 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.13.0-21-generic", + "cindex": 65 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.11.0-45.6.1.el7a.aarch64", - "cindex": 11 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.13.0-25-generic", + "cindex": 65 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.11.0-45.el7.aarch64", - "cindex": 11 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.13.0-26-generic", + "cindex": 65 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.0-115.10.1.el7a.aarch64", - "cindex": 12 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.13.0-31-generic", + "cindex": 65 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.0-115.2.2.el7a.aarch64", - "cindex": 12 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.13.0-32-generic", + "cindex": 65 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.0-115.5.1.el7a.aarch64", - "cindex": 12 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.13.0-36-generic", + "cindex": 65 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.0-115.6.1.el7a.aarch64", - "cindex": 12 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.13.0-37-generic", + "cindex": 65 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.0-115.7.1.el7a.aarch64", - "cindex": 12 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.13.0-38-generic", + "cindex": 65 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.0-115.8.1.el7a.aarch64", - "cindex": 12 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.13.0-39-generic", + "cindex": 65 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.0-115.8.2.el7a.aarch64", - "cindex": 12 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.13.0-41-generic", + "cindex": 65 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.0-115.el7a.0.1.aarch64", - "cindex": 12 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.13.0-43-generic", + "cindex": 65 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.0-115.el7a.aarch64", - "cindex": 12 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.13.0-45-generic", + "cindex": 65 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.0-49.10.1.el7a.aarch64", - "cindex": 12 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-101-generic", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.0-49.13.1.el7a.aarch64", - "cindex": 12 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1012-azure", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.0-49.2.2.el7a.aarch64", - "cindex": 12 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1013-azure", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.0-49.8.1.el7a.aarch64", - "cindex": 12 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1014-azure", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.0-49.el7a.aarch64", - "cindex": 12 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1014-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.101-200.el7.aarch64", - "cindex": 13 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1015-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.71-201.el7.aarch64", - "cindex": 13 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1017-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.78-201.el7.aarch64", - "cindex": 13 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1018-azure", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.82-201.el7.aarch64", - "cindex": 13 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1018-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.94-200.el7.aarch64", - "cindex": 13 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1019-azure", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.18.0-147.0.3.el7.aarch64", - "cindex": 14 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1019-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.18.0-147.8.1.el7.aarch64", - "cindex": 14 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1021-azure", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.18.0-193.1.2.el7.aarch64", - "cindex": 15 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1021-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.18.0-193.28.1.el7.aarch64", - "cindex": 15 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1022-azure", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.18.0-305.10.2.el7.aarch64", - "cindex": 16 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1023-azure", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.18.0-348.20.1.el7.aarch64", - "cindex": 17 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1023-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.18.0-80.7.1.el7.aarch64", - "cindex": 18 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1024-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.18.0-80.7.2.el7.aarch64", - "cindex": 18 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1025-azure", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.19.104-300.el7.aarch64", - "cindex": 19 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1025-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.19.110-300.el7.aarch64", - "cindex": 19 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1026-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.19.113-300.el7.aarch64", - "cindex": 20 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1027-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.19.23-300.el7.aarch64", - "cindex": 19 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1028-azure", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.19.84-300.el7.aarch64", - "cindex": 19 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1028-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.19.94-300.el7.aarch64", - "cindex": 19 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1029-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.2.0-0.22.el7.1.aarch64", - "cindex": 21 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1030-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.2.0-0.24.el7.1.aarch64", - "cindex": 21 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1030-azure", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.2.0-0.25.el7.1.aarch64", - "cindex": 21 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1030-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.2.0-0.26.el7.1.aarch64", - "cindex": 21 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1031-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.2.0-0.27.el7.1.aarch64", - "cindex": 21 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1031-azure", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.2.0-0.28.el7.1.aarch64", - "cindex": 21 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1032-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.2.0-0.29.el7.1.aarch64", - "cindex": 21 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1032-azure", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.2.0-0.30.el7.1.aarch64", - "cindex": 21 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1032-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.2.0-0.31.el7.1.aarch64", - "cindex": 21 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1033-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.5.0-19.el7.aarch64", - "cindex": 22 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1033-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.5.0-20.el7.aarch64", - "cindex": 22 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1034-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.5.0-21.el7.aarch64", - "cindex": 22 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1035-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.5.0-22.el7.aarch64", - "cindex": 22 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1035-azure", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.5.0-23.el7.aarch64", - "cindex": 22 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1036-aws", + "cindex": 75 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1036-azure", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.5.0-25.el7.aarch64", - "cindex": 22 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1036-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.5.0-27.el7.aarch64", - "cindex": 22 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1037-azure", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "4.5.0-29.el7.aarch64", - "cindex": 22 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1037-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "5.10.109-200.el7.aarch64", - "cindex": 23 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1039-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.28-200.el7.aarch64", - "cindex": 24 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1039-azure", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.42-200.el7.aarch64", - "cindex": 24 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1040-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.49-200.el7.aarch64", - "cindex": 24 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1040-azure", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.88-200.el7.aarch64", - "cindex": 24 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1040-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.96-200.el7.aarch64", - "cindex": 24 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-1041-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1062.1.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1041-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1062.1.2.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1041-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1062.12.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1042-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1062.18.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1042-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1062.4.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1043-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1062.4.2.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1044-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1062.4.3.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1044-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1062.7.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1045-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1062.9.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1045-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1062.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1046-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1127.10.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1046-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1127.13.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1047-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1127.18.2.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1047-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1127.19.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1047-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1127.8.2.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1048-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1127.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1049-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.11.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1049-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.15.2.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1050-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.2.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1050-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.2.2.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1050-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.21.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1051-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.25.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1051-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.31.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1052-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.36.2.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1052-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.41.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1052-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.42.2.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1054-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.45.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1055-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.49.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1055-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.53.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1056-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.59.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1056-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.6.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1057-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.62.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1057-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.66.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1058-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.71.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1058-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.76.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1059-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.80.1.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-106-generic", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-1160.el7.x86_64", - "cindex": 25 + "uname_release": "4.15.0-1060-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-123.1.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1060-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-123.13.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1060-gcp", + "cindex": 76 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-123.13.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1061-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-123.20.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1061-gcp", + "cindex": 78 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-123.4.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1063-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-123.4.4.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1063-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-123.6.3.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1064-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-123.8.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1065-aws", + "cindex": 75 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-123.9.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1066-aws", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-123.9.3.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1066-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-123.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1067-aws", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-229.1.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1067-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-229.11.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1069-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-229.14.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-107-generic", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-229.20.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1071-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-229.4.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1071-gcp", + "cindex": 78 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-229.7.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1073-aws", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-229.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1074-aws", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-327.10.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1075-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-327.13.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1077-azure", + "cindex": 77 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-327.18.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1077-gcp", + "cindex": 78 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-327.22.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1078-gcp", + "cindex": 78 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-327.28.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1079-aws", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-327.28.3.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1080-aws", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-327.3.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1080-gcp", + "cindex": 78 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-327.36.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1081-gcp", + "cindex": 78 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-327.36.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1082-aws", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-327.36.3.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1082-azure", + "cindex": 79 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-327.4.4.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1083-aws", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-327.4.5.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1083-azure", + "cindex": 79 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-327.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1083-gcp", + "cindex": 78 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-514.10.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1084-gcp", + "cindex": 78 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-514.16.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1085-aws", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-514.2.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1086-gcp", + "cindex": 78 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-514.21.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1087-gcp", + "cindex": 78 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-514.21.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1089-azure", + "cindex": 79 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-514.26.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1090-aws", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-514.26.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1090-gcp", + "cindex": 78 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-514.6.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1091-aws", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-514.6.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1091-azure", + "cindex": 79 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-514.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1091-gcp", + "cindex": 78 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-693.1.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1092-azure", + "cindex": 79 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-693.11.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1092-gcp", + "cindex": 78 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-693.11.6.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1093-aws", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-693.17.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1093-azure", + "cindex": 79 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-693.2.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1093-gcp", + "cindex": 78 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-693.2.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1094-aws", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-693.21.1.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1094-gcp", + "cindex": 78 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-693.5.2.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1095-aws", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-693.el7.x86_64", - "cindex": 26 + "uname_release": "4.15.0-1095-azure", + "cindex": 79 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-862.11.6.el7.x86_64", - "cindex": 27 + "uname_release": "4.15.0-1095-gcp", + "cindex": 78 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-862.14.4.el7.x86_64", - "cindex": 27 + "uname_release": "4.15.0-1096-aws", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-862.2.3.el7.x86_64", - "cindex": 27 + "uname_release": "4.15.0-1096-azure", + "cindex": 79 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-862.3.2.el7.x86_64", - "cindex": 27 + "uname_release": "4.15.0-1096-gcp", + "cindex": 78 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-862.3.3.el7.x86_64", - "cindex": 27 + "uname_release": "4.15.0-1097-aws", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-862.6.3.el7.x86_64", - "cindex": 27 + "uname_release": "4.15.0-1097-gcp", + "cindex": 78 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-862.9.1.el7.x86_64", - "cindex": 27 + "uname_release": "4.15.0-1098-aws", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-862.el7.x86_64", - "cindex": 27 + "uname_release": "4.15.0-1098-azure", + "cindex": 79 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-957.1.3.el7.x86_64", - "cindex": 28 + "uname_release": "4.15.0-1098-gcp", + "cindex": 78 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-957.10.1.el7.x86_64", - "cindex": 28 + "uname_release": "4.15.0-1099-aws", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-957.12.1.el7.x86_64", - "cindex": 28 + "uname_release": "4.15.0-1102-azure", + "cindex": 79 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-957.12.2.el7.x86_64", - "cindex": 28 + "uname_release": "4.15.0-1103-azure", + "cindex": 79 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-957.21.2.el7.x86_64", - "cindex": 28 + "uname_release": "4.15.0-1106-azure", + "cindex": 79 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-957.21.3.el7.x86_64", - "cindex": 28 + "uname_release": "4.15.0-1108-azure", + "cindex": 79 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-957.27.2.el7.x86_64", - "cindex": 28 + "uname_release": "4.15.0-1109-azure", + "cindex": 79 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-957.5.1.el7.x86_64", - "cindex": 28 + "uname_release": "4.15.0-1110-azure", + "cindex": 79 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "3.10.0-957.el7.x86_64", - "cindex": 28 + "uname_release": "4.15.0-1111-azure", + "cindex": 79 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.19.104-300.el7.x86_64", - "cindex": 29 + "uname_release": "4.15.0-1112-azure", + "cindex": 79 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.19.110-300.el7.x86_64", - "cindex": 29 + "uname_release": "4.15.0-1113-azure", + "cindex": 79 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.19.113-300.el7.x86_64", - "cindex": 30 + "uname_release": "4.15.0-112-generic", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.19.84-300.el7.x86_64", - "cindex": 29 + "uname_release": "4.15.0-115-generic", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.19.94-300.el7.x86_64", - "cindex": 29 + "uname_release": "4.15.0-117-generic", + "cindex": 74 }, { - "distrib": "centos", - "version": "7", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.4.28-200.el7.x86_64", - "cindex": 31 + "uname_release": "4.15.0-118-generic", + "cindex": 74 }, { - "distrib": "centos", - "version": "8", - "arch": "arm64", - "uname_release": "4.18.0-147.0.3.el8_1.aarch64", - "cindex": 32 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-120-generic", + "cindex": 74 }, { - "distrib": "centos", - "version": "8", - "arch": "arm64", - "uname_release": "4.18.0-147.3.1.el8_1.aarch64", - "cindex": 32 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-122-generic", + "cindex": 74 }, { - "distrib": "centos", - "version": "8", - "arch": "arm64", - "uname_release": "4.18.0-147.5.1.el8_1.aarch64", - "cindex": 32 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-123-generic", + "cindex": 74 }, { - "distrib": "centos", - "version": "8", - "arch": "arm64", - "uname_release": "4.18.0-147.8.1.el8_1.aarch64", - "cindex": 32 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-128-generic", + "cindex": 74 }, { - "distrib": "centos", - "version": "8", - "arch": "arm64", - "uname_release": "4.18.0-147.el8.aarch64", - "cindex": 32 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-129-generic", + "cindex": 74 }, { - "distrib": "centos", - "version": "8", - "arch": "arm64", - "uname_release": "4.18.0-80.7.1.el8_0.aarch64", - "cindex": 33 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-13-generic", + "cindex": 75 }, { - "distrib": "centos", - "version": "8", - "arch": "arm64", - "uname_release": "4.18.0-80.el8.aarch64", - "cindex": 33 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-132-generic", + "cindex": 74 }, { - "distrib": "centos", - "version": "8", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.18.0-147.0.3.el8_1.x86_64", - "cindex": 32 + "uname_release": "4.15.0-133-generic", + "cindex": 74 }, { - "distrib": "centos", - "version": "8", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.18.0-147.3.1.el8_1.x86_64", - "cindex": 32 + "uname_release": "4.15.0-136-generic", + "cindex": 74 }, { - "distrib": "centos", - "version": "8", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.18.0-147.5.1.el8_1.x86_64", - "cindex": 32 + "uname_release": "4.15.0-137-generic", + "cindex": 74 }, { - "distrib": "centos", - "version": "8", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.18.0-147.8.1.el8_1.x86_64", - "cindex": 32 + "uname_release": "4.15.0-139-generic", + "cindex": 74 }, { - "distrib": "centos", - "version": "8", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.18.0-147.el8.x86_64", - "cindex": 32 + "uname_release": "4.15.0-140-generic", + "cindex": 74 }, { - "distrib": "centos", - "version": "8", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.18.0-80.7.1.el8_0.x86_64", - "cindex": 33 + "uname_release": "4.15.0-142-generic", + "cindex": 74 }, { - "distrib": "centos", - "version": "8", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.18.0-80.el8.x86_64", - "cindex": 33 + "uname_release": "4.15.0-15-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", - "arch": "arm64", - "uname_release": "4.19.0-17-arm64", - "cindex": 34 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-20-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", - "arch": "arm64", - "uname_release": "4.19.0-17-rt-arm64", - "cindex": 35 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-22-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", - "arch": "arm64", - "uname_release": "4.19.0-18-arm64", - "cindex": 34 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-23-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", - "arch": "arm64", - "uname_release": "4.19.0-18-rt-arm64", - "cindex": 35 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-24-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", - "arch": "arm64", - "uname_release": "4.19.0-20-arm64", - "cindex": 34 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-29-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", - "arch": "arm64", - "uname_release": "4.19.0-20-rt-arm64", - "cindex": 35 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-30-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", - "arch": "arm64", - "uname_release": "4.19.0-21-arm64", - "cindex": 34 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-32-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", - "arch": "arm64", - "uname_release": "4.19.0-21-rt-arm64", - "cindex": 35 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-33-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.19.0-17-amd64", - "cindex": 34 + "uname_release": "4.15.0-34-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.19.0-17-cloud-amd64", - "cindex": 34 + "uname_release": "4.15.0-36-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.19.0-17-rt-amd64", - "cindex": 35 + "uname_release": "4.15.0-38-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.19.0-18-amd64", - "cindex": 34 + "uname_release": "4.15.0-39-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.19.0-18-cloud-amd64", - "cindex": 34 + "uname_release": "4.15.0-42-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.19.0-18-rt-amd64", - "cindex": 35 + "uname_release": "4.15.0-43-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.19.0-20-amd64", - "cindex": 34 + "uname_release": "4.15.0-45-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.19.0-20-cloud-amd64", - "cindex": 34 + "uname_release": "4.15.0-46-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.19.0-20-rt-amd64", - "cindex": 35 + "uname_release": "4.15.0-47-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.19.0-21-amd64", - "cindex": 34 + "uname_release": "4.15.0-48-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.19.0-21-cloud-amd64", - "cindex": 34 + "uname_release": "4.15.0-50-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.19.0-21-rt-amd64", - "cindex": 35 + "uname_release": "4.15.0-51-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.10.0-0.deb10.20-amd64", - "cindex": 36 + "uname_release": "4.15.0-52-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.10.0-0.deb10.20-cloud-amd64", - "cindex": 36 + "uname_release": "4.15.0-54-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "10", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.10.0-0.deb10.20-rt-amd64", - "cindex": 37 + "uname_release": "4.15.0-55-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "9", - "arch": "arm64", - "uname_release": "4.9.0-13-arm64", - "cindex": 38 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-58-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "9", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.9.0-13-amd64", - "cindex": 38 + "uname_release": "4.15.0-60-generic", + "cindex": 75 }, { - "distrib": "debian", - "version": "9", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.9.0-13-rt-amd64", - "cindex": 39 + "uname_release": "4.15.0-62-generic", + "cindex": 75 }, { - "distrib": "fedora", - "version": "29", - "arch": "arm64", - "uname_release": "4.18.16-300.fc29.aarch64", - "cindex": 40 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-64-generic", + "cindex": 75 }, { - "distrib": "fedora", - "version": "29", - "arch": "arm64", - "uname_release": "5.3.11-100.fc29.aarch64", - "cindex": 41 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-65-generic", + "cindex": 75 }, { - "distrib": "fedora", - "version": "29", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "4.18.16-300.fc29.x86_64", - "cindex": 42 + "uname_release": "4.15.0-66-generic", + "cindex": 75 }, { - "distrib": "fedora", - "version": "29", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.3.11-100.fc29.x86_64", - "cindex": 43 + "uname_release": "4.15.0-69-generic", + "cindex": 75 }, { - "distrib": "fedora", - "version": "30", - "arch": "arm64", - "uname_release": "5.0.9-301.fc30.aarch64", - "cindex": 44 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-70-generic", + "cindex": 75 }, { - "distrib": "fedora", - "version": "30", - "arch": "arm64", - "uname_release": "5.6.13-100.fc30.aarch64", - "cindex": 45 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-72-generic", + "cindex": 75 }, { - "distrib": "fedora", - "version": "30", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.0.9-301.fc30.x86_64", - "cindex": 46 + "uname_release": "4.15.0-74-generic", + "cindex": 75 }, { - "distrib": "fedora", - "version": "30", + "distrib": "ubuntu", + "version": "16.04", "arch": "x86_64", - "uname_release": "5.6.13-100.fc30.x86_64", - "cindex": 45 + "uname_release": "4.15.0-76-generic", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.300.11.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-88-generic", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.301.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-91-generic", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.302.0.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-96-generic", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.302.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.15.0-99-generic", + "cindex": 74 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.302.2.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1001-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.303.0.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1003-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.303.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1003-gke", + "cindex": 80 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.303.2.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1004-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.303.4.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1005-gke", + "cindex": 80 + }, + { + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1006-gke", + "cindex": 80 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.303.5.3.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1007-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.304.5.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1008-gke", + "cindex": 80 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.304.6.3.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1009-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.304.6.4.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1009-gke", + "cindex": 80 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.304.6.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-101-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.305.0.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1010-gke", + "cindex": 80 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.305.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1011-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.305.4.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1012-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.305.4.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1012-gke", + "cindex": 80 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1013-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.10.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1013-gke", + "cindex": 80 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.12.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1014-gke", + "cindex": 80 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.13.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1016-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.14.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1016-gke", + "cindex": 80 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.2.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1017-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.4.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1018-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.5.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1018-gke", + "cindex": 80 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.7.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1020-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.8.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1022-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1902.306.2.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1022-gke", + "cindex": 80 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1903.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1024-gke", + "cindex": 80 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1904.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1026-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1905.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1026-gke", + "cindex": 80 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1906.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1027-gke", + "cindex": 80 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1907.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1028-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1908.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1028-gke", + "cindex": 80 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1909.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-103-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1910a.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1030-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1911.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1031-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1912.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1031-gke", + "cindex": 80 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1915.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1032-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1916.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1032-gke", + "cindex": 80 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1917.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1033-gke", + "cindex": 80 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1923.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1034-gke", + "cindex": 80 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1929.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1035-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1933.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1037-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-1941.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1038-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2013.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1039-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2015.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-104-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2016.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1041-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2017.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1043-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2018.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1044-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2019.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1047-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2020.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1048-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.400.3.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1049-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.400.8.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1050-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.400.9.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1052-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.400.9.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1054-aws", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.401.4.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1055-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.402.0.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1057-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.402.2.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1060-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.403.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1061-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.403.2.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1062-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.403.3.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1063-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.403.4.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1065-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.403.5.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1066-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.404.0.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1067-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.404.1.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1069-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.404.1.2.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1070-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.405.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1072-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.405.2.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1073-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2025.405.3.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1074-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2039.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1075-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2040.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1077-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2041.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1079-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.500.10.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-108-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.500.5.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1081-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.500.9.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1083-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.500.9.3.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1084-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.501.0.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1085-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.501.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1087-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.501.2.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1088-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.502.3.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-109-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.502.4.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1090-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.502.4.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1092-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.502.5.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1094-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.503.0.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1095-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.503.1.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1096-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.503.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1098-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.504.0.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1099-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.504.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1100-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.504.2.3.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1101-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.504.2.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1102-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.505.0.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1104-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.505.1.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1105-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.505.2.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1106-aws", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.505.3.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1107-aws", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.505.4.2.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1109-aws", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.505.4.3.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1110-aws", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.505.4.4.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1111-aws", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.505.4.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1112-aws", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.506.0.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1113-aws", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.506.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1114-aws", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.506.10.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1117-aws", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.506.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1118-aws", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.506.4.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1119-aws", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.506.8.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-112-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.506.8.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1121-aws", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.507.0.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1122-aws", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.507.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1123-aws", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.507.7.4.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1124-aws", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.507.7.5.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1126-aws", + "cindex": 70 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.507.7.6.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1127-aws", + "cindex": 70 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.508.3.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-1128-aws", + "cindex": 70 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.508.3.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-116-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.508.3.3.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-119-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.508.3.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-121-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.509.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-122-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.509.2.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-124-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.509.2.3.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-127-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.0.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-128-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-130-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-131-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.3.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-133-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.4.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-134-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.5.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-135-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.5.3.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-137-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.5.4.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-138-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.5.5.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-139-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.510.5.6.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-140-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.0.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-141-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-142-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.3.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-143-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-145-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.3.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-146-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.4.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-148-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.5.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-150-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.5.3.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-151-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.5.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-154-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.6.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-157-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.7.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-159-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.8.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-161-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.511.5.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-164-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.512.0.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-165-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.512.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-166-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.512.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-168-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.512.4.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-169-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.512.5.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-170-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.512.6.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-171-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.513.0.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-173-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.513.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-174-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.513.2.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-176-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.513.2.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-177-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.513.2.3.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-178-generic", + "cindex": 68 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.513.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-179-generic", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.514.0.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-184-generic", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.514.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-185-generic", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.514.3.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-186-generic", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.514.5.1.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-187-generic", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.514.5.1.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-189-generic", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.514.5.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-190-generic", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.515.3.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-193-generic", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.516.1.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-194-generic", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.516.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-197-generic", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.516.2.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-198-generic", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.516.2.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-200-generic", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.516.2.4.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-201-generic", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.516.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-203-generic", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.517.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-204-generic", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.517.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-206-generic", + "cindex": 69 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.517.3.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-208-generic", + "cindex": 70 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.517.3.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-209-generic", + "cindex": 70 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.518.0.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-21-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.518.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-210-generic", + "cindex": 70 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.518.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-22-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.518.3.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-24-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.518.4.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-28-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.518.4.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-31-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.518.4.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-34-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.519.0.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-36-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.519.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-38-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.519.2.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-42-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.519.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-43-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.520.0.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-45-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.520.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-47-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.520.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-51-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.520.3.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-53-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.521.1.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-57-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2047.521.2.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-59-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2048.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-62-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2049.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-63-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2050.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-64-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2051.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-66-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2052.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-67-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2102.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-70-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2103.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-71-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2104.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-72-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2105.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-75-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2106.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-77-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2108.el7uek.aarch64", - "cindex": 47 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-78-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2109.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-79-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2110.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-81-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2111.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-83-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2112.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-87-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2113.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-89-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2114.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-91-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2115.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-92-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2116.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-93-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2118.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-96-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2120.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-97-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2121.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.4.0-98-generic", + "cindex": 40 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2122.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.8.0-34-generic", + "cindex": 71 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "4.14.35-2124.el7uek.aarch64", - "cindex": 48 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.8.0-36-generic", + "cindex": 71 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.0-1948.3.el7uek.aarch64", - "cindex": 49 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.8.0-39-generic", + "cindex": 71 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2006.5.el7uek.aarch64", - "cindex": 49 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.8.0-41-generic", + "cindex": 71 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2011.4.6.el7uek.aarch64", - "cindex": 50 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.8.0-42-generic", + "cindex": 71 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2011.6.2.el7uek.aarch64", - "cindex": 50 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.8.0-44-generic", + "cindex": 71 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2028.2.el7uek.aarch64", - "cindex": 50 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.8.0-45-generic", + "cindex": 71 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2036.100.1.el7uek.aarch64", - "cindex": 50 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.8.0-46-generic", + "cindex": 71 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2036.100.3.el7uek.aarch64", - "cindex": 50 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.8.0-49-generic", + "cindex": 71 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2036.100.6.el7uek.aarch64", - "cindex": 50 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.8.0-51-generic", + "cindex": 71 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2036.101.0.el7uek.aarch64", - "cindex": 50 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.8.0-52-generic", + "cindex": 71 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2036.101.1.el7uek.aarch64", - "cindex": 50 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.8.0-53-generic", + "cindex": 71 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2036.101.2.el7uek.aarch64", - "cindex": 50 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.8.0-54-generic", + "cindex": 71 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2036.102.0.el7uek.aarch64", - "cindex": 50 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.8.0-56-generic", + "cindex": 71 }, { - "distrib": "ol", - "version": "7", - "arch": "arm64", - "uname_release": "5.4.17-2036.103.2.el7uek.aarch64", - "cindex": 50 + "distrib": "ubuntu", + "version": "16.04", + "arch": "x86_64", + "uname_release": "4.8.0-58-generic", + "cindex": 71 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2036.104.0.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-101-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2036.104.2.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1029-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2036.105.1.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1031-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2036.105.3.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1032-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2040.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1033-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2041.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1034-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2051.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1035-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2102.200.7.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1037-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2102.200.9.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1039-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2102.202.4.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1040-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2102.202.5.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1041-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2102.203.3.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1043-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2102.203.4.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1044-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2102.204.0.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1045-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2102.204.1.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1047-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2102.204.2.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1048-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2102.204.3.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1050-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2102.204.4.3.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1051-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2102.205.2.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1052-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2102.205.7.2.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1054-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2102.205.7.3.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1056-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2102.206.1.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1057-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2106.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1058-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2108.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-106-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2109.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1060-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2111.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1063-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2114.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1065-aws", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2118.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1066-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2120.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1067-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2122.303.5.el7uek.aarch64", - "cindex": 51 + "uname_release": "4.15.0-1073-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2122.el7uek.aarch64", - "cindex": 50 + "uname_release": "4.15.0-1076-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2136.300.7.el7uek.aarch64", - "cindex": 51 + "uname_release": "4.15.0-1077-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.17-2136.301.0.el7uek.aarch64", - "cindex": 51 + "uname_release": "4.15.0-1079-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "arm64", - "uname_release": "5.4.2-1950.2.el7uek.aarch64", - "cindex": 49 + "uname_release": "4.15.0-108-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1127.0.0.0.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1080-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1127.10.1.0.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1082-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1127.10.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1083-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1127.13.1.0.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1086-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1127.13.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1087-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1127.18.2.0.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-109-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1127.18.2.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1090-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1127.19.1.0.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1091-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1127.19.1.0.2.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1092-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1127.19.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1093-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1127.8.2.0.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1094-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1127.8.2.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1095-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.11.1.0.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1096-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.11.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1097-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.15.2.0.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1098-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.15.2.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1099-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.2.1.0.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1101-aws", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.2.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1102-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.2.2.0.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1103-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.2.2.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1106-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.21.1.0.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1109-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.21.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-111-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.24.1.0.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1110-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.24.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1111-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.25.1.0.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1112-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.25.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1114-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.31.1.0.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1115-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.31.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1116-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.36.2.0.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1118-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.36.2.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1119-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.41.1.0.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-112-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.41.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1121-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.42.2.0.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1123-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.42.2.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1124-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.45.1.0.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1126-aws", + "cindex": 81 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1127-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.45.1.0.2.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1128-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.45.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1130-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.6.1.0.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1133-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.6.1.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1136-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "3.10.0-1160.el7.x86_64", - "cindex": 52 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1137-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.300.11.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1139-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.301.1.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1140-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.302.0.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1141-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.302.1.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1142-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.302.2.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1143-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.303.0.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1146-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.303.1.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1147-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.303.2.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-1148-aws", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.303.4.1.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-115-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.303.5.3.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-117-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.304.4.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-118-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.304.5.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-121-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.304.6.3.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-122-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.304.6.4.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-123-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.304.6.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-124-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.305.0.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-128-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.305.1.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-129-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.305.4.1.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-130-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.305.4.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-132-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.1.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-134-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.12.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-135-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.13.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-136-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.14.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-137-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.2.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-139-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.4.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-140-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.5.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-141-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.7.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-142-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.8.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-143-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1902.306.2.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-144-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1903.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-147-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1904.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-151-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1905.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-153-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1906.1.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-154-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1907.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-156-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1908.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-158-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1909.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-159-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1910a.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-161-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1911.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-162-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1912.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-163-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1915.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-166-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1916.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-167-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1917.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-169-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1923.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-171-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1929.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-173-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1933.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-175-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-1941.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-176-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2013.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-177-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2015.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-180-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2016.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-184-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2017.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-187-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2018.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-188-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2019.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-189-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2020.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-191-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2025.400.3.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-192-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2025.400.8.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-193-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2025.400.9.1.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-194-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2025.400.9.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-196-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2025.401.4.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-197-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2025.402.0.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-20-generic", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2025.402.2.1.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-200-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2025.403.1.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-201-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2025.403.2.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-202-generic", + "cindex": 81 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2025.403.3.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-52-generic", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2025.403.4.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-54-generic", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2025.403.5.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-55-generic", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2025.404.0.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-58-generic", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2025.404.1.1.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-60-generic", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2025.404.1.2.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-62-generic", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2025.405.1.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-64-generic", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2025.405.2.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-65-generic", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2025.405.3.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-66-generic", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2039.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-69-generic", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2040.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-70-generic", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2041.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-72-generic", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.500.10.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-74-generic", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.500.5.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-76-generic", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.500.9.1.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-88-generic", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.500.9.3.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-91-generic", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.501.0.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-96-generic", + "cindex": 67 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.501.1.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.15.0-99-generic", + "cindex": 66 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.501.2.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.18.0-1006-aws", + "cindex": 48 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.502.3.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.18.0-1007-aws", + "cindex": 48 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.502.4.1.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.18.0-1008-aws", + "cindex": 48 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.502.4.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.18.0-1011-aws", + "cindex": 48 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.502.5.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.18.0-1012-aws", + "cindex": 48 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.503.0.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.18.0-1013-aws", + "cindex": 48 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.503.1.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.18.0-1016-aws", + "cindex": 48 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.504.0.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.18.0-1017-aws", + "cindex": 48 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.504.1.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.18.0-1018-aws", + "cindex": 48 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.504.2.3.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.18.0-1020-aws", + "cindex": 48 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.504.2.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.18.0-22-generic", + "cindex": 48 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.505.0.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.18.0-24-generic", + "cindex": 48 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.505.1.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "4.18.0-25-generic", + "cindex": 48 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.505.2.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-1011-aws", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.505.3.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-1012-aws", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.505.4.2.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-1014-aws", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.505.4.3.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-1016-aws", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.505.4.4.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-1018-aws", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.505.4.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-1019-aws", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.506.0.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-1021-aws", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.506.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-1022-aws", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.506.10.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-1023-aws", + "cindex": 82 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.506.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-1024-aws", + "cindex": 82 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.506.4.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-1025-aws", + "cindex": 82 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.506.8.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-1027-aws", + "cindex": 82 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-15-generic", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.506.8.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-16-generic", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.507.0.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-17-generic", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.507.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-19-generic", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.507.7.4.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-20-generic", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.507.7.5.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-23-generic", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.507.7.6.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-25-generic", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.508.3.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-27-generic", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.508.3.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-29-generic", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.508.3.3.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-31-generic", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.508.3.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-32-generic", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.509.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-35-generic", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.509.2.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-36-generic", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.509.2.3.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-37-generic", + "cindex": 45 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.510.0.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-43-generic", + "cindex": 82 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.510.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-44-generic", + "cindex": 82 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.510.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-47-generic", + "cindex": 82 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.510.3.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-48-generic", + "cindex": 83 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.510.4.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-52-generic", + "cindex": 83 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.510.5.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-53-generic", + "cindex": 83 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.510.5.3.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-58-generic", + "cindex": 83 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.510.5.4.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-60-generic", + "cindex": 83 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.510.5.5.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-61-generic", + "cindex": 83 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.510.5.6.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-62-generic", + "cindex": 83 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.511.0.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-63-generic", + "cindex": 83 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.511.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.0.0-65-generic", + "cindex": 83 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.511.3.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-1016-aws", + "cindex": 49 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-1017-aws", + "cindex": 49 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.3.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-1019-aws", + "cindex": 84 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.4.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-1023-aws", + "cindex": 84 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.5.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-1028-aws", + "cindex": 84 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.5.3.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-1030-aws", + "cindex": 84 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.5.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-1032-aws", + "cindex": 84 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.6.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-1033-aws", + "cindex": 84 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.7.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-1034-aws", + "cindex": 84 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.8.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-1035-aws", + "cindex": 84 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.511.5.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-19-generic", + "cindex": 85 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.512.0.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-22-generic", + "cindex": 53 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.512.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-23-generic", + "cindex": 53 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.512.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-24-generic", + "cindex": 49 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.512.4.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-26-generic", + "cindex": 49 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.512.5.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-28-generic", + "cindex": 49 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.512.6.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-40-generic", + "cindex": 49 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.513.0.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-42-generic", + "cindex": 49 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.513.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-45-generic", + "cindex": 49 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.513.2.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-46-generic", + "cindex": 49 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.513.2.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-51-generic", + "cindex": 49 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.513.2.3.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-53-generic", + "cindex": 84 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.513.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-59-generic", + "cindex": 84 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.514.0.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-61-generic", + "cindex": 84 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.514.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-62-generic", + "cindex": 84 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.514.3.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.3.0-64-generic", + "cindex": 84 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.514.5.1.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1018-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.514.5.1.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1020-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.514.5.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1022-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.515.3.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1024-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.516.1.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1025-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.516.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1028-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.516.2.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1029-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.516.2.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1032-aws", + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1034-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.516.2.4.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1035-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.516.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1037-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.517.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1038-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.517.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1039-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.517.3.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1041-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.517.3.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1043-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.518.0.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1045-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.518.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1047-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.518.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1048-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.518.3.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1049-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.518.4.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1051-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.518.4.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1054-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.518.4.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1055-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.519.0.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1056-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.519.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1057-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.519.2.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1058-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.519.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1059-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.520.0.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-1060-aws", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.520.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-37-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.520.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-39-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.520.3.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-40-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.521.1.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-42-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2047.521.2.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-45-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2048.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-47-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2049.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-48-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2050.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-51-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2051.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-52-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2052.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-53-generic", + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-54-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2102.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-58-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2103.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-59-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2104.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-60-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2105.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-62-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2106.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-64-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2108.el7uek.x86_64", - "cindex": 47 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-65-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2109.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-66-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2110.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-67-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2111.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-70-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2112.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-71-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2113.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-72-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2114.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-73-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2115.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-74-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2116.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-77-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2118.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-80-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2120.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-81-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2121.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-84-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2122.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-86-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "4.14.35-2124.el7uek.x86_64", - "cindex": 48 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-87-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "5.4.0-1948.3.el7uek.x86_64", - "cindex": 53 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-89-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", - "arch": "x86_64", - "uname_release": "5.4.17-2006.5.el7uek.x86_64", - "cindex": 49 + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-90-generic", + "cindex": 86 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", + "arch": "arm64", + "uname_release": "5.4.0-91-generic", + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2011.0.7.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1006-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2011.1.2.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1007-aws", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2011.2.2.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1008-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2011.3.2.1.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1009-aws", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2011.4.4.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1009-azure", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2011.4.6.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1009-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2011.5.3.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-101-generic", + "cindex": 74 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2011.6.2.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1010-aws", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2011.7.4.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1010-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2028.2.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1011-aws", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.100.1.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1012-azure", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.100.3.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1013-azure", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.100.6.1.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1014-azure", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.100.6.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1014-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.101.0.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1015-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.101.1.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1016-aws", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.101.2.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1017-aws", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.102.0.2.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1017-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.102.0.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1018-azure", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.103.2.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1018-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.103.3.1.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1019-aws", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.103.3.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1019-azure", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.104.0.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1019-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.104.2.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1020-aws", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.104.4.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1021-aws", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.104.5.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1021-azure", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.105.1.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1021-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2036.105.3.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1022-azure", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2040.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1023-aws", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2041.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1023-azure", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2051.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1023-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.200.13.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1024-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.200.7.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1025-aws", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.200.9.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1025-azure", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.201.3.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1025-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.202.4.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1026-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.202.5.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1027-aws", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.203.3.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1027-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.203.4.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1028-azure", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.203.5.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1028-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.203.6.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1029-aws", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.0.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1029-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.1.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1030-azure", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.2.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1030-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.3.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1030-gke", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.4.2.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1031-aws", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.4.3.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1031-azure", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.204.4.4.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1032-aws", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.205.2.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1032-azure", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.205.7.2.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1032-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.205.7.3.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1032-gke", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2102.206.1.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1033-aws", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2106.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1033-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2108.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1033-gke", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2109.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1034-aws", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2111.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1034-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2114.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1034-gke", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2118.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1035-aws", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2120.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1035-azure", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2122.303.5.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.15.0-1036-azure", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2122.el7uek.x86_64", - "cindex": 50 + "uname_release": "4.15.0-1036-gcp", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2136.300.7.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.15.0-1036-gke", + "cindex": 76 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.17-2136.301.0.el7uek.x86_64", - "cindex": 51 + "uname_release": "4.15.0-1037-aws", + "cindex": 75 }, { - "distrib": "ol", - "version": "7", + "distrib": "ubuntu", + "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.2-1950.2.el7uek.x86_64", - "cindex": 49 + "uname_release": "4.15.0-1037-azure", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-101-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1037-gcp", + "cindex": 76 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1041-aws", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1037-gke", + "cindex": 76 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1043-aws", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1039-aws", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1044-aws", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1040-aws", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1045-aws", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1040-gcp", + "cindex": 76 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1047-aws", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1040-gke", + "cindex": 76 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1048-aws", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1041-aws", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1050-aws", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1041-gke", + "cindex": 76 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1051-aws", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1042-gcp", + "cindex": 76 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1052-aws", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1042-gke", + "cindex": 76 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1054-aws", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1043-aws", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1056-aws", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1044-aws", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1057-aws", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1044-gcp", + "cindex": 76 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1058-aws", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1044-gke", + "cindex": 76 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-106-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1045-aws", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1060-aws", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1045-gke", + "cindex": 76 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1063-aws", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1046-gke", + "cindex": 76 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1065-aws", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1047-aws", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1066-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1048-aws", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1067-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1048-gke", + "cindex": 76 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1073-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1049-gke", + "cindex": 76 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1076-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1050-aws", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1077-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1050-gke", + "cindex": 76 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1079-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1051-aws", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-108-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1052-aws", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1080-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1052-gke", + "cindex": 76 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1082-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1054-aws", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1083-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1055-gke", + "cindex": 76 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1086-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1056-aws", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1087-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1057-aws", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-109-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1057-gke", + "cindex": 76 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1090-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1058-aws", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1091-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1058-gke", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1092-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1059-gke", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1093-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-106-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1094-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1060-aws", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1095-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1063-aws", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1096-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1063-gke", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1097-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1064-gke", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1098-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1065-aws", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1099-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1066-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1101-aws", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1066-gke", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1102-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1067-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1103-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1067-gke", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1106-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1069-gke", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1109-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1070-gke", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-111-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1071-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1110-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1072-gke", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1111-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1073-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1112-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1073-gke", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1114-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1076-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1115-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1076-gke", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1116-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1077-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1118-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1077-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1119-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1077-gke", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-112-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1078-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1121-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1078-gke", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1123-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1079-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1124-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1079-gke", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1126-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-108-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1127-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1080-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1128-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1080-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1130-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1081-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1133-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1082-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1136-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1082-azure", + "cindex": 79 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1139-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1083-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1140-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1083-azure", + "cindex": 79 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1141-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1083-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-1142-aws", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1084-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-115-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1086-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-117-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1086-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-118-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1087-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-121-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1087-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-122-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1089-azure", + "cindex": 79 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-123-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-109-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-124-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1090-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-128-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1090-gcp", + "cindex": 78 }, { "distrib": "ubuntu", - "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-129-generic", - "cindex": 54 + "version": "18.04", + "arch": "x86_64", + "uname_release": "4.15.0-1091-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-130-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1091-azure", + "cindex": 79 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-132-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1091-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-134-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1092-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-135-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1092-azure", + "cindex": 79 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-136-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1092-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-137-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1093-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-139-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1093-azure", + "cindex": 79 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-140-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1093-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-141-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1094-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-142-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1094-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-143-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1095-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-144-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1095-azure", + "cindex": 79 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-147-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1095-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-151-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1096-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-153-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1096-azure", + "cindex": 79 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-154-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1096-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-156-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1097-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-158-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1097-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-159-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1098-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-161-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1098-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-162-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1099-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-163-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1099-azure", + "cindex": 79 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-166-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1099-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-167-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1100-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-169-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1101-aws", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-171-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1102-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-173-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1102-azure", + "cindex": 79 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-175-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1103-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-176-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1103-azure", + "cindex": 79 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-177-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1103-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-180-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1104-azure", + "cindex": 79 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-184-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1106-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-187-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1106-azure", + "cindex": 79 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-188-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1106-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-189-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1107-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-191-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1108-azure", + "cindex": 79 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-192-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1108-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-193-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1109-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-194-generic", - "cindex": 56 + "arch": "x86_64", + "uname_release": "4.15.0-1109-azure", + "cindex": 79 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-20-generic", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1109-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-52-generic", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-111-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-54-generic", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1110-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-55-generic", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1110-azure", + "cindex": 79 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-58-generic", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1110-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-60-generic", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1111-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-62-generic", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1111-azure", + "cindex": 79 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-64-generic", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1111-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-65-generic", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1112-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-66-generic", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1112-azure", + "cindex": 79 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-69-generic", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1112-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-70-generic", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1113-azure", + "cindex": 79 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-72-generic", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1114-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-74-generic", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1114-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-76-generic", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1114-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-88-generic", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1115-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-91-generic", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1115-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-96-generic", - "cindex": 55 + "arch": "x86_64", + "uname_release": "4.15.0-1115-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "4.15.0-99-generic", - "cindex": 54 + "arch": "x86_64", + "uname_release": "4.15.0-1116-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1018-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1116-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1020-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1118-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1022-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1118-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1024-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1118-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1025-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1119-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1028-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1119-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1029-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-112-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1032-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1120-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1034-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1121-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1035-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1121-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1037-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1121-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1038-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1122-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1039-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1122-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1041-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1123-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1043-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1123-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1045-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1124-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1047-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1124-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1048-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1124-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1049-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1125-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1051-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1126-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1054-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1126-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1055-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1127-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1056-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1127-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1057-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1127-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1058-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1128-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1059-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1129-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-1060-aws", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1130-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-37-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1130-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-39-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1130-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-40-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1131-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-42-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1131-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-45-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1133-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-47-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1133-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-48-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1134-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-51-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1134-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-52-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1135-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-53-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1136-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-54-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1136-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-58-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1136-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-59-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1137-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-60-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1137-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-62-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1137-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-64-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1138-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-65-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1138-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-66-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1139-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-67-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1139-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-70-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1140-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-71-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1141-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-72-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1141-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-73-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1142-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-74-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1142-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-77-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1142-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-80-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1143-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-81-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1143-gcp", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-84-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1145-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-86-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1146-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-87-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1146-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-89-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1147-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-90-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1148-aws", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "arm64", - "uname_release": "5.4.0-91-generic", - "cindex": 57 + "arch": "x86_64", + "uname_release": "4.15.0-1149-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1006-gcp", - "cindex": 58 + "uname_release": "4.15.0-115-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1007-aws", - "cindex": 59 + "uname_release": "4.15.0-1150-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1008-gcp", - "cindex": 58 + "uname_release": "4.15.0-1151-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1009-aws", - "cindex": 59 + "uname_release": "4.15.0-1153-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1009-azure", - "cindex": 59 + "uname_release": "4.15.0-1157-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1009-gcp", - "cindex": 58 + "uname_release": "4.15.0-1158-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-101-generic", - "cindex": 60 + "uname_release": "4.15.0-1159-azure", + "cindex": 87 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1010-aws", - "cindex": 59 + "uname_release": "4.15.0-117-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1010-gcp", - "cindex": 58 + "uname_release": "4.15.0-118-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1011-aws", - "cindex": 59 + "uname_release": "4.15.0-121-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1012-azure", - "cindex": 59 + "uname_release": "4.15.0-122-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1013-azure", - "cindex": 59 + "uname_release": "4.15.0-123-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1014-azure", - "cindex": 59 + "uname_release": "4.15.0-124-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1014-gcp", - "cindex": 58 + "uname_release": "4.15.0-128-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1015-gcp", - "cindex": 58 + "uname_release": "4.15.0-129-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1016-aws", - "cindex": 59 + "uname_release": "4.15.0-130-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1017-aws", - "cindex": 59 + "uname_release": "4.15.0-132-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1017-gcp", - "cindex": 58 + "uname_release": "4.15.0-134-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1018-azure", - "cindex": 59 + "uname_release": "4.15.0-135-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1018-gcp", - "cindex": 58 + "uname_release": "4.15.0-136-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1019-aws", - "cindex": 59 + "uname_release": "4.15.0-137-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1019-azure", - "cindex": 59 + "uname_release": "4.15.0-139-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1019-gcp", - "cindex": 58 + "uname_release": "4.15.0-140-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1020-aws", - "cindex": 59 + "uname_release": "4.15.0-141-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1021-aws", - "cindex": 59 + "uname_release": "4.15.0-142-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1021-azure", - "cindex": 59 + "uname_release": "4.15.0-143-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1021-gcp", - "cindex": 58 + "uname_release": "4.15.0-144-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1022-azure", - "cindex": 59 + "uname_release": "4.15.0-147-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1023-aws", - "cindex": 59 + "uname_release": "4.15.0-151-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1023-azure", - "cindex": 59 + "uname_release": "4.15.0-153-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1023-gcp", - "cindex": 58 + "uname_release": "4.15.0-154-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1024-gcp", - "cindex": 58 + "uname_release": "4.15.0-156-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1025-aws", - "cindex": 59 + "uname_release": "4.15.0-158-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1025-azure", - "cindex": 59 + "uname_release": "4.15.0-159-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1025-gcp", - "cindex": 58 + "uname_release": "4.15.0-161-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1026-gcp", - "cindex": 58 + "uname_release": "4.15.0-162-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1027-aws", - "cindex": 59 + "uname_release": "4.15.0-163-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1027-gcp", - "cindex": 58 + "uname_release": "4.15.0-166-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1028-azure", - "cindex": 59 + "uname_release": "4.15.0-167-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1028-gcp", - "cindex": 58 + "uname_release": "4.15.0-169-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1029-aws", - "cindex": 59 + "uname_release": "4.15.0-171-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1029-gcp", - "cindex": 58 + "uname_release": "4.15.0-173-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1030-azure", - "cindex": 59 + "uname_release": "4.15.0-175-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1030-gcp", - "cindex": 58 + "uname_release": "4.15.0-176-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1030-gke", - "cindex": 58 + "uname_release": "4.15.0-177-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1031-aws", - "cindex": 59 + "uname_release": "4.15.0-180-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1031-azure", - "cindex": 59 + "uname_release": "4.15.0-184-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1032-aws", - "cindex": 59 + "uname_release": "4.15.0-187-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1032-azure", - "cindex": 59 + "uname_release": "4.15.0-188-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1032-gcp", - "cindex": 58 + "uname_release": "4.15.0-189-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1032-gke", - "cindex": 58 + "uname_release": "4.15.0-191-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1033-aws", - "cindex": 59 + "uname_release": "4.15.0-192-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1033-gcp", - "cindex": 58 + "uname_release": "4.15.0-193-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1033-gke", - "cindex": 58 + "uname_release": "4.15.0-194-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1034-aws", - "cindex": 59 + "uname_release": "4.15.0-196-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1034-gcp", - "cindex": 58 + "uname_release": "4.15.0-197-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1034-gke", - "cindex": 58 + "uname_release": "4.15.0-20-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1035-aws", - "cindex": 59 + "uname_release": "4.15.0-200-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1035-azure", - "cindex": 59 + "uname_release": "4.15.0-201-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1036-azure", - "cindex": 59 + "uname_release": "4.15.0-202-generic", + "cindex": 78 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1036-gcp", - "cindex": 58 + "uname_release": "4.15.0-22-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1036-gke", - "cindex": 58 + "uname_release": "4.15.0-23-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1037-aws", - "cindex": 59 + "uname_release": "4.15.0-24-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1037-azure", - "cindex": 59 + "uname_release": "4.15.0-29-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "x86_64", - "uname_release": "4.15.0-1037-gcp", - "cindex": 58 + "arch": "x86_64", + "uname_release": "4.15.0-30-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1037-gke", - "cindex": 58 + "uname_release": "4.15.0-32-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1039-aws", - "cindex": 59 + "uname_release": "4.15.0-33-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1040-aws", - "cindex": 59 + "uname_release": "4.15.0-34-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1040-gcp", - "cindex": 58 + "uname_release": "4.15.0-36-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1040-gke", - "cindex": 58 + "uname_release": "4.15.0-38-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1041-aws", - "cindex": 59 + "uname_release": "4.15.0-39-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1041-gke", - "cindex": 58 + "uname_release": "4.15.0-42-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1042-gcp", - "cindex": 58 + "uname_release": "4.15.0-43-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1042-gke", - "cindex": 58 + "uname_release": "4.15.0-44-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1043-aws", - "cindex": 59 + "uname_release": "4.15.0-45-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1044-aws", - "cindex": 59 + "uname_release": "4.15.0-46-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1044-gcp", - "cindex": 58 + "uname_release": "4.15.0-47-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1044-gke", - "cindex": 58 + "uname_release": "4.15.0-48-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1045-aws", - "cindex": 59 + "uname_release": "4.15.0-50-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1045-gke", - "cindex": 58 + "uname_release": "4.15.0-51-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1046-gke", - "cindex": 58 + "uname_release": "4.15.0-52-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1047-aws", - "cindex": 59 + "uname_release": "4.15.0-54-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1048-aws", - "cindex": 59 + "uname_release": "4.15.0-55-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1048-gke", - "cindex": 58 + "uname_release": "4.15.0-58-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1049-gke", - "cindex": 58 + "uname_release": "4.15.0-60-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1050-aws", - "cindex": 59 + "uname_release": "4.15.0-62-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1050-gke", - "cindex": 58 + "uname_release": "4.15.0-64-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1051-aws", - "cindex": 59 + "uname_release": "4.15.0-65-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1052-aws", - "cindex": 59 + "uname_release": "4.15.0-66-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1052-gke", - "cindex": 58 + "uname_release": "4.15.0-69-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1054-aws", - "cindex": 59 + "uname_release": "4.15.0-70-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1055-gke", - "cindex": 58 + "uname_release": "4.15.0-72-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1056-aws", - "cindex": 59 + "uname_release": "4.15.0-74-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1057-aws", - "cindex": 59 + "uname_release": "4.15.0-76-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1057-gke", - "cindex": 58 + "uname_release": "4.15.0-88-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1058-aws", - "cindex": 59 + "uname_release": "4.15.0-91-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1058-gke", - "cindex": 61 + "uname_release": "4.15.0-96-generic", + "cindex": 75 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1059-gke", - "cindex": 61 + "uname_release": "4.15.0-99-generic", + "cindex": 74 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-106-generic", - "cindex": 60 + "uname_release": "4.18.0-1004-gcp", + "cindex": 88 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1060-aws", - "cindex": 59 + "uname_release": "4.18.0-1005-gcp", + "cindex": 88 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1063-aws", - "cindex": 59 + "uname_release": "4.18.0-1006-aws", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1063-gke", - "cindex": 61 + "uname_release": "4.18.0-1006-azure", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1064-gke", - "cindex": 61 + "uname_release": "4.18.0-1006-gcp", + "cindex": 88 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1065-aws", - "cindex": 59 + "uname_release": "4.18.0-1007-aws", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1066-aws", - "cindex": 60 + "uname_release": "4.18.0-1007-azure", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1066-gke", - "cindex": 61 + "uname_release": "4.18.0-1007-gcp", + "cindex": 88 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1067-aws", - "cindex": 60 + "uname_release": "4.18.0-1008-aws", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1067-gke", - "cindex": 61 + "uname_release": "4.18.0-1008-azure", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1069-gke", - "cindex": 61 + "uname_release": "4.18.0-1008-gcp", + "cindex": 88 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1070-gke", - "cindex": 61 + "uname_release": "4.18.0-1009-gcp", + "cindex": 88 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1072-gke", - "cindex": 61 + "uname_release": "4.18.0-1011-aws", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1073-aws", - "cindex": 60 + "uname_release": "4.18.0-1011-azure", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1073-gke", - "cindex": 61 + "uname_release": "4.18.0-1011-gcp", + "cindex": 88 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1076-aws", - "cindex": 60 + "uname_release": "4.18.0-1012-aws", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1076-gke", - "cindex": 61 + "uname_release": "4.18.0-1012-gcp", + "cindex": 88 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1077-aws", - "cindex": 60 + "uname_release": "4.18.0-1013-aws", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1077-gke", - "cindex": 61 + "uname_release": "4.18.0-1013-azure", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1078-gke", - "cindex": 61 + "uname_release": "4.18.0-1013-gcp", + "cindex": 88 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1079-aws", - "cindex": 60 + "uname_release": "4.18.0-1014-azure", + "cindex": 50 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1079-gke", - "cindex": 61 + "uname_release": "4.18.0-1015-gcp", + "cindex": 88 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-108-generic", - "cindex": 60 + "uname_release": "4.18.0-1016-aws", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1080-aws", - "cindex": 60 + "uname_release": "4.18.0-1017-aws", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1082-aws", - "cindex": 60 + "uname_release": "4.18.0-1018-aws", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1082-azure", - "cindex": 62 + "uname_release": "4.18.0-1018-azure", + "cindex": 50 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1083-aws", - "cindex": 60 + "uname_release": "4.18.0-1019-azure", + "cindex": 50 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1083-azure", - "cindex": 62 + "uname_release": "4.18.0-1020-aws", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1086-aws", - "cindex": 60 + "uname_release": "4.18.0-1020-azure", + "cindex": 50 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1087-aws", - "cindex": 60 + "uname_release": "4.18.0-1023-azure", + "cindex": 50 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1089-azure", - "cindex": 62 + "uname_release": "4.18.0-1024-azure", + "cindex": 50 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-109-generic", - "cindex": 60 + "uname_release": "4.18.0-1025-azure", + "cindex": 50 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1090-aws", - "cindex": 60 + "uname_release": "4.18.0-13-generic", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1091-aws", - "cindex": 60 + "uname_release": "4.18.0-14-generic", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1091-azure", - "cindex": 62 + "uname_release": "4.18.0-15-generic", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1092-aws", - "cindex": 60 + "uname_release": "4.18.0-16-generic", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1092-azure", - "cindex": 62 + "uname_release": "4.18.0-17-generic", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1093-aws", - "cindex": 60 + "uname_release": "4.18.0-18-generic", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1093-azure", - "cindex": 62 + "uname_release": "4.18.0-20-generic", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1093-gcp", - "cindex": 61 + "uname_release": "4.18.0-21-generic", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1094-aws", - "cindex": 60 + "uname_release": "4.18.0-22-generic", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1094-gcp", - "cindex": 61 + "uname_release": "4.18.0-24-generic", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1095-aws", - "cindex": 60 + "uname_release": "4.18.0-25-generic", + "cindex": 48 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1095-azure", - "cindex": 62 + "uname_release": "5.0.0-1011-aws", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1095-gcp", - "cindex": 61 + "uname_release": "5.0.0-1011-gcp", + "cindex": 89 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1096-aws", - "cindex": 60 + "uname_release": "5.0.0-1012-aws", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1096-azure", - "cindex": 62 + "uname_release": "5.0.0-1012-azure", + "cindex": 47 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1096-gcp", - "cindex": 61 + "uname_release": "5.0.0-1013-gcp", + "cindex": 89 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1097-aws", - "cindex": 60 + "uname_release": "5.0.0-1013-gke", + "cindex": 89 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1097-gcp", - "cindex": 61 + "uname_release": "5.0.0-1014-aws", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1098-aws", - "cindex": 60 + "uname_release": "5.0.0-1014-azure", + "cindex": 47 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1098-gcp", - "cindex": 61 + "uname_release": "5.0.0-1015-gke", + "cindex": 89 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1099-aws", - "cindex": 60 + "uname_release": "5.0.0-1016-aws", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1099-azure", - "cindex": 62 + "uname_release": "5.0.0-1016-azure", + "cindex": 47 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1099-gcp", - "cindex": 61 + "uname_release": "5.0.0-1017-gke", + "cindex": 89 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1100-gcp", - "cindex": 61 + "uname_release": "5.0.0-1018-aws", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1101-aws", - "cindex": 60 + "uname_release": "5.0.0-1018-azure", + "cindex": 47 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1102-aws", - "cindex": 61 + "uname_release": "5.0.0-1019-aws", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1102-azure", - "cindex": 62 + "uname_release": "5.0.0-1020-azure", + "cindex": 47 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1103-aws", - "cindex": 61 + "uname_release": "5.0.0-1020-gcp", + "cindex": 89 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1103-azure", - "cindex": 62 + "uname_release": "5.0.0-1020-gke", + "cindex": 89 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1103-gcp", - "cindex": 61 + "uname_release": "5.0.0-1021-aws", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1104-azure", - "cindex": 62 + "uname_release": "5.0.0-1021-gcp", + "cindex": 89 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1106-aws", - "cindex": 61 + "uname_release": "5.0.0-1022-aws", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1106-azure", - "cindex": 62 + "uname_release": "5.0.0-1022-azure", + "cindex": 47 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1106-gcp", - "cindex": 61 + "uname_release": "5.0.0-1022-gke", + "cindex": 89 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1107-gcp", - "cindex": 61 + "uname_release": "5.0.0-1023-aws", + "cindex": 82 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1108-azure", - "cindex": 62 + "uname_release": "5.0.0-1023-azure", + "cindex": 47 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1108-gcp", - "cindex": 61 + "uname_release": "5.0.0-1023-gke", + "cindex": 89 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1109-aws", - "cindex": 61 + "uname_release": "5.0.0-1024-aws", + "cindex": 82 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1109-azure", - "cindex": 62 + "uname_release": "5.0.0-1025-aws", + "cindex": 82 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1109-gcp", - "cindex": 61 + "uname_release": "5.0.0-1025-azure", + "cindex": 47 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-111-generic", - "cindex": 60 + "uname_release": "5.0.0-1025-gcp", + "cindex": 89 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1110-aws", - "cindex": 61 + "uname_release": "5.0.0-1025-gke", + "cindex": 89 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1110-azure", - "cindex": 62 + "uname_release": "5.0.0-1026-gcp", + "cindex": 89 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1110-gcp", - "cindex": 61 + "uname_release": "5.0.0-1026-gke", + "cindex": 89 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1111-aws", - "cindex": 61 + "uname_release": "5.0.0-1027-aws", + "cindex": 82 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1111-azure", - "cindex": 62 + "uname_release": "5.0.0-1027-azure", + "cindex": 47 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1111-gcp", - "cindex": 61 + "uname_release": "5.0.0-1027-gke", + "cindex": 90 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1112-aws", - "cindex": 61 + "uname_release": "5.0.0-1028-azure", + "cindex": 91 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1112-azure", - "cindex": 62 + "uname_release": "5.0.0-1028-gcp", + "cindex": 90 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1112-gcp", - "cindex": 61 + "uname_release": "5.0.0-1029-azure", + "cindex": 91 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1113-azure", - "cindex": 62 + "uname_release": "5.0.0-1029-gcp", + "cindex": 90 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1114-aws", - "cindex": 61 + "uname_release": "5.0.0-1029-gke", + "cindex": 90 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1114-azure", - "cindex": 63 + "uname_release": "5.0.0-1030-gke", + "cindex": 90 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1114-gcp", - "cindex": 61 + "uname_release": "5.0.0-1031-azure", + "cindex": 91 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1115-aws", - "cindex": 61 + "uname_release": "5.0.0-1031-gcp", + "cindex": 90 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1115-azure", - "cindex": 63 + "uname_release": "5.0.0-1032-azure", + "cindex": 91 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1115-gcp", - "cindex": 61 + "uname_release": "5.0.0-1032-gke", + "cindex": 90 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1116-aws", - "cindex": 61 + "uname_release": "5.0.0-1033-gcp", + "cindex": 90 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1116-gcp", - "cindex": 61 + "uname_release": "5.0.0-1033-gke", + "cindex": 90 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1118-aws", - "cindex": 61 + "uname_release": "5.0.0-1034-gcp", + "cindex": 90 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1118-azure", - "cindex": 63 + "uname_release": "5.0.0-1035-azure", + "cindex": 91 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1118-gcp", - "cindex": 61 + "uname_release": "5.0.0-1035-gke", + "cindex": 90 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1119-aws", - "cindex": 61 + "uname_release": "5.0.0-1036-azure", + "cindex": 91 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1119-gcp", - "cindex": 61 + "uname_release": "5.0.0-1037-gke", + "cindex": 92 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-112-generic", - "cindex": 60 + "uname_release": "5.0.0-1042-gke", + "cindex": 92 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1120-gcp", - "cindex": 61 + "uname_release": "5.0.0-1043-gke", + "cindex": 92 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1121-aws", - "cindex": 61 + "uname_release": "5.0.0-1045-gke", + "cindex": 92 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1121-azure", - "cindex": 63 + "uname_release": "5.0.0-1046-gke", + "cindex": 92 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1121-gcp", - "cindex": 61 + "uname_release": "5.0.0-1047-gke", + "cindex": 92 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1122-azure", - "cindex": 63 + "uname_release": "5.0.0-1049-gke", + "cindex": 92 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1122-gcp", - "cindex": 61 + "uname_release": "5.0.0-1050-gke", + "cindex": 92 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1123-aws", - "cindex": 61 + "uname_release": "5.0.0-1051-gke", + "cindex": 92 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1123-azure", - "cindex": 63 + "uname_release": "5.0.0-15-generic", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1124-aws", - "cindex": 61 + "uname_release": "5.0.0-16-generic", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1124-azure", - "cindex": 63 + "uname_release": "5.0.0-17-generic", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1124-gcp", - "cindex": 61 + "uname_release": "5.0.0-19-generic", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1125-azure", - "cindex": 63 + "uname_release": "5.0.0-20-generic", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1126-aws", - "cindex": 61 + "uname_release": "5.0.0-23-generic", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1126-azure", - "cindex": 63 + "uname_release": "5.0.0-25-generic", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1127-aws", - "cindex": 61 + "uname_release": "5.0.0-27-generic", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1127-azure", - "cindex": 63 + "uname_release": "5.0.0-29-generic", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1127-gcp", - "cindex": 61 + "uname_release": "5.0.0-31-generic", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1128-aws", - "cindex": 61 + "uname_release": "5.0.0-32-generic", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1129-azure", - "cindex": 63 + "uname_release": "5.0.0-35-generic", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1130-aws", - "cindex": 61 + "uname_release": "5.0.0-36-generic", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1130-azure", - "cindex": 63 + "uname_release": "5.0.0-37-generic", + "cindex": 45 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1130-gcp", - "cindex": 61 + "uname_release": "5.0.0-43-generic", + "cindex": 82 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1131-azure", - "cindex": 63 + "uname_release": "5.0.0-44-generic", + "cindex": 82 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1131-gcp", - "cindex": 61 + "uname_release": "5.0.0-47-generic", + "cindex": 82 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1133-aws", - "cindex": 61 + "uname_release": "5.0.0-48-generic", + "cindex": 83 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1133-azure", - "cindex": 63 + "uname_release": "5.0.0-52-generic", + "cindex": 83 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1134-azure", - "cindex": 63 + "uname_release": "5.0.0-53-generic", + "cindex": 83 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1134-gcp", - "cindex": 61 + "uname_release": "5.0.0-58-generic", + "cindex": 83 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1135-gcp", - "cindex": 61 + "uname_release": "5.0.0-60-generic", + "cindex": 83 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1136-aws", - "cindex": 61 + "uname_release": "5.0.0-61-generic", + "cindex": 83 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1136-azure", - "cindex": 63 + "uname_release": "5.0.0-62-generic", + "cindex": 83 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1136-gcp", - "cindex": 61 + "uname_release": "5.0.0-63-generic", + "cindex": 83 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1137-azure", - "cindex": 63 + "uname_release": "5.0.0-65-generic", + "cindex": 83 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1137-gcp", - "cindex": 61 + "uname_release": "5.3.0-1007-azure", + "cindex": 54 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1138-azure", - "cindex": 63 + "uname_release": "5.3.0-1008-azure", + "cindex": 51 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1139-aws", - "cindex": 61 + "uname_release": "5.3.0-1008-gcp", + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1139-azure", - "cindex": 63 + "uname_release": "5.3.0-1009-azure", + "cindex": 51 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1140-aws", - "cindex": 61 + "uname_release": "5.3.0-1009-gcp", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1141-aws", - "cindex": 61 + "uname_release": "5.3.0-1010-azure", + "cindex": 51 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1142-aws", - "cindex": 61 + "uname_release": "5.3.0-1010-gcp", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1142-azure", - "cindex": 63 + "uname_release": "5.3.0-1011-gke", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1145-azure", - "cindex": 63 + "uname_release": "5.3.0-1012-azure", + "cindex": 51 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1149-azure", - "cindex": 63 + "uname_release": "5.3.0-1012-gcp", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-115-generic", - "cindex": 60 + "uname_release": "5.3.0-1012-gke", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1150-azure", - "cindex": 63 + "uname_release": "5.3.0-1013-azure", + "cindex": 51 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1151-azure", - "cindex": 63 + "uname_release": "5.3.0-1014-gcp", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-1153-azure", - "cindex": 63 + "uname_release": "5.3.0-1014-gke", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-117-generic", - "cindex": 60 + "uname_release": "5.3.0-1016-aws", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-118-generic", - "cindex": 60 + "uname_release": "5.3.0-1016-azure", + "cindex": 51 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-121-generic", - "cindex": 60 + "uname_release": "5.3.0-1016-gcp", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-122-generic", - "cindex": 60 + "uname_release": "5.3.0-1016-gke", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-123-generic", - "cindex": 60 + "uname_release": "5.3.0-1017-aws", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-124-generic", - "cindex": 60 + "uname_release": "5.3.0-1017-gcp", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-128-generic", - "cindex": 60 + "uname_release": "5.3.0-1017-gke", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-129-generic", - "cindex": 60 + "uname_release": "5.3.0-1018-azure", + "cindex": 51 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-130-generic", - "cindex": 60 + "uname_release": "5.3.0-1018-gcp", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-132-generic", - "cindex": 60 + "uname_release": "5.3.0-1018-gke", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-134-generic", - "cindex": 60 + "uname_release": "5.3.0-1019-aws", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-135-generic", - "cindex": 60 + "uname_release": "5.3.0-1019-azure", + "cindex": 51 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-136-generic", - "cindex": 60 + "uname_release": "5.3.0-1020-azure", + "cindex": 51 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-137-generic", - "cindex": 60 + "uname_release": "5.3.0-1020-gcp", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-139-generic", - "cindex": 60 + "uname_release": "5.3.0-1020-gke", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", - "arch": "x86_64", - "uname_release": "4.15.0-140-generic", - "cindex": 60 + "arch": "x86_64", + "uname_release": "5.3.0-1022-azure", + "cindex": 93 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-141-generic", - "cindex": 60 + "uname_release": "5.3.0-1023-aws", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-142-generic", - "cindex": 60 + "uname_release": "5.3.0-1026-gcp", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-143-generic", - "cindex": 61 + "uname_release": "5.3.0-1026-gke", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-144-generic", - "cindex": 61 + "uname_release": "5.3.0-1028-aws", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-147-generic", - "cindex": 61 + "uname_release": "5.3.0-1028-azure", + "cindex": 93 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-151-generic", - "cindex": 61 + "uname_release": "5.3.0-1029-gcp", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-153-generic", - "cindex": 61 + "uname_release": "5.3.0-1030-aws", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-154-generic", - "cindex": 61 + "uname_release": "5.3.0-1030-gcp", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-156-generic", - "cindex": 61 + "uname_release": "5.3.0-1030-gke", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-158-generic", - "cindex": 61 + "uname_release": "5.3.0-1031-azure", + "cindex": 93 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-159-generic", - "cindex": 61 + "uname_release": "5.3.0-1032-aws", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-161-generic", - "cindex": 61 + "uname_release": "5.3.0-1032-azure", + "cindex": 93 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-162-generic", - "cindex": 61 + "uname_release": "5.3.0-1032-gcp", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-163-generic", - "cindex": 61 + "uname_release": "5.3.0-1032-gke", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-166-generic", - "cindex": 61 + "uname_release": "5.3.0-1033-aws", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-167-generic", - "cindex": 61 + "uname_release": "5.3.0-1033-gke", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-169-generic", - "cindex": 61 + "uname_release": "5.3.0-1034-aws", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-171-generic", - "cindex": 61 + "uname_release": "5.3.0-1034-azure", + "cindex": 93 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-173-generic", - "cindex": 61 + "uname_release": "5.3.0-1034-gke", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-175-generic", - "cindex": 61 + "uname_release": "5.3.0-1035-aws", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-176-generic", - "cindex": 61 + "uname_release": "5.3.0-1035-azure", + "cindex": 93 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-177-generic", - "cindex": 61 + "uname_release": "5.3.0-1036-gke", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-180-generic", - "cindex": 61 + "uname_release": "5.3.0-1038-gke", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-184-generic", - "cindex": 61 + "uname_release": "5.3.0-1039-gke", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-187-generic", - "cindex": 61 + "uname_release": "5.3.0-1040-gke", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-188-generic", - "cindex": 61 + "uname_release": "5.3.0-1041-gke", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-191-generic", - "cindex": 61 + "uname_release": "5.3.0-1042-gke", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-192-generic", - "cindex": 61 + "uname_release": "5.3.0-1043-gke", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-193-generic", - "cindex": 61 + "uname_release": "5.3.0-1044-gke", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-194-generic", - "cindex": 61 + "uname_release": "5.3.0-1045-gke", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-20-generic", - "cindex": 59 + "uname_release": "5.3.0-19-generic", + "cindex": 85 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-22-generic", - "cindex": 59 + "uname_release": "5.3.0-22-generic", + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-23-generic", - "cindex": 59 + "uname_release": "5.3.0-23-generic", + "cindex": 53 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-24-generic", - "cindex": 59 + "uname_release": "5.3.0-24-generic", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-29-generic", - "cindex": 59 + "uname_release": "5.3.0-26-generic", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-30-generic", - "cindex": 59 + "uname_release": "5.3.0-28-generic", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-32-generic", - "cindex": 59 + "uname_release": "5.3.0-40-generic", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-33-generic", - "cindex": 59 + "uname_release": "5.3.0-42-generic", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-34-generic", - "cindex": 59 + "uname_release": "5.3.0-45-generic", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-36-generic", - "cindex": 59 + "uname_release": "5.3.0-46-generic", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-38-generic", - "cindex": 59 + "uname_release": "5.3.0-51-generic", + "cindex": 49 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-39-generic", - "cindex": 59 + "uname_release": "5.3.0-53-generic", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-42-generic", - "cindex": 59 + "uname_release": "5.3.0-59-generic", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-43-generic", - "cindex": 59 + "uname_release": "5.3.0-61-generic", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-44-generic", - "cindex": 59 + "uname_release": "5.3.0-62-generic", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-45-generic", - "cindex": 59 + "uname_release": "5.3.0-64-generic", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-46-generic", - "cindex": 59 + "uname_release": "5.3.0-66-generic", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-47-generic", - "cindex": 59 + "uname_release": "5.3.0-67-generic", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-48-generic", - "cindex": 59 + "uname_release": "5.3.0-68-generic", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-50-generic", - "cindex": 59 + "uname_release": "5.3.0-69-generic", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-51-generic", - "cindex": 59 + "uname_release": "5.3.0-70-generic", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-52-generic", - "cindex": 59 + "uname_release": "5.3.0-72-generic", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-54-generic", - "cindex": 59 + "uname_release": "5.3.0-73-generic", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-55-generic", - "cindex": 59 + "uname_release": "5.3.0-74-generic", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-58-generic", - "cindex": 59 + "uname_release": "5.3.0-75-generic", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-60-generic", - "cindex": 59 + "uname_release": "5.3.0-76-generic", + "cindex": 84 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-62-generic", - "cindex": 59 + "uname_release": "5.4.0-1003-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-64-generic", - "cindex": 59 + "uname_release": "5.4.0-1004-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-65-generic", - "cindex": 59 + "uname_release": "5.4.0-1007-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-66-generic", - "cindex": 59 + "uname_release": "5.4.0-1008-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-69-generic", - "cindex": 59 + "uname_release": "5.4.0-1009-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-70-generic", - "cindex": 59 + "uname_release": "5.4.0-1010-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-72-generic", - "cindex": 59 + "uname_release": "5.4.0-1011-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-74-generic", - "cindex": 59 + "uname_release": "5.4.0-1012-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-76-generic", - "cindex": 59 + "uname_release": "5.4.0-1013-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-88-generic", - "cindex": 59 + "uname_release": "5.4.0-1014-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-91-generic", - "cindex": 59 + "uname_release": "5.4.0-1015-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-96-generic", - "cindex": 59 + "uname_release": "5.4.0-1016-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "4.15.0-99-generic", - "cindex": 60 + "uname_release": "5.4.0-1018-aws", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", - "uname_release": "5.4.0-1018-aws", - "cindex": 57 + "uname_release": "5.4.0-1018-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1019-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1020-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1020-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1021-gcp", - "cindex": 57 + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "5.4.0-1021-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1022-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1022-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1022-gcp", - "cindex": 57 + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "5.4.0-1022-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1023-azure", - "cindex": 64 + "cindex": 94 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "5.4.0-1023-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1024-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1024-gcp", - "cindex": 57 + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "5.4.0-1024-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1025-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1025-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1025-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1025-gke", - "cindex": 57 + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "5.4.0-1025-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1026-azure", - "cindex": 64 + "cindex": 94 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "5.4.0-1026-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1027-gke", - "cindex": 57 + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "5.4.0-1027-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1028-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1028-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1029-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1029-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1029-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1031-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1032-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1032-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1032-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1033-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1033-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1034-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1034-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1034-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1035-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1035-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1035-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1036-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1036-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1036-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1037-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1037-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1037-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1038-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1038-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1039-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1039-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1039-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1040-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1040-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1040-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1041-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1041-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1041-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1042-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1042-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1043-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1043-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1043-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1043-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1044-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1044-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1044-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1045-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1046-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1046-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1046-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1047-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1047-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1048-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1048-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1049-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1049-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1049-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1049-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1051-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1051-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1051-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1051-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1052-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1052-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1053-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1053-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1054-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1054-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1055-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1055-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1055-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1055-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1056-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1056-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1056-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1056-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1057-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1057-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1057-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1058-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1058-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1058-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1059-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1059-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1059-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1060-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1061-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1061-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1062-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1062-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1063-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1063-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1064-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1065-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1066-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-1067-gke", - "cindex": 57 + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "18.04", + "arch": "x86_64", + "uname_release": "5.4.0-1068-gke", + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-37-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-39-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-40-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-42-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-45-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-47-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-48-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-51-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-52-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-53-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-54-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-58-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-59-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-60-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-62-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-64-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-65-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-66-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-67-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-70-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-71-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-72-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-73-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-74-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-77-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-80-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-81-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-84-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-86-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-87-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-89-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-90-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "18.04", "arch": "x86_64", "uname_release": "5.4.0-91-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1009-aws", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1014-aws", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1016-aws", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1017-aws", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1019-aws", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1020-aws", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1025-azure", - "cindex": 66 + "cindex": 96 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.11.0-1027-azure", - "cindex": 66 + "cindex": 96 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1009-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1011-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1015-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1017-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1018-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1020-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1021-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1022-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1024-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1025-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1028-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1029-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1032-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1034-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1035-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1037-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1038-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1039-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1041-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1043-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1045-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1047-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1048-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1049-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1051-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1054-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1055-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1056-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1057-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1058-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1059-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-1060-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-26-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-28-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-29-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-31-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-33-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-37-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-39-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-40-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-42-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-45-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-47-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-48-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-51-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-52-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-53-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-54-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-58-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-59-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-60-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-62-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-64-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-65-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-66-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-67-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-70-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-71-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-72-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-73-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-74-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-77-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-80-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-81-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-84-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-86-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-88-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-89-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-90-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.4.0-91-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-1035-aws", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-1038-aws", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-1041-aws", - "cindex": 68 + "cindex": 98 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-1042-aws", - "cindex": 68 + "cindex": 98 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-23-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-25-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-28-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-29-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-33-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-34-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-36-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-38-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-40-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-41-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-43-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-44-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-45-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-48-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-49-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-50-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-53-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-55-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-59-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "arm64", "uname_release": "5.8.0-63-generic", - "cindex": 68 + "cindex": 98 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1007-azure", - "cindex": 66 + "cindex": 96 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1009-aws", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1009-gcp", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1012-azure", - "cindex": 66 + "cindex": 96 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1013-azure", - "cindex": 66 + "cindex": 96 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1014-aws", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1014-gcp", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1015-azure", - "cindex": 66 + "cindex": 96 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1016-aws", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1017-aws", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1017-azure", - "cindex": 66 + "cindex": 96 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1017-gcp", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1018-gcp", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1019-aws", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1019-azure", - "cindex": 66 + "cindex": 96 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1020-aws", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1020-azure", - "cindex": 66 + "cindex": 96 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1020-gcp", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1021-azure", - "cindex": 66 + "cindex": 96 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1021-gcp", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1022-azure", - "cindex": 66 + "cindex": 96 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1022-gcp", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1023-gcp", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1024-gcp", - "cindex": 65 + "cindex": 95 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1025-azure", - "cindex": 66 + "cindex": 96 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.11.0-1026-gcp", - "cindex": 65 + "cindex": 95 + }, + { + "distrib": "ubuntu", + "version": "20.04", + "arch": "x86_64", + "uname_release": "5.11.0-1027-azure", + "cindex": 96 + }, + { + "distrib": "ubuntu", + "version": "20.04", + "arch": "x86_64", + "uname_release": "5.11.0-1028-gcp", + "cindex": 95 + }, + { + "distrib": "ubuntu", + "version": "20.04", + "arch": "x86_64", + "uname_release": "5.4.0-1008-gkeop", + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "20.04", + "arch": "x86_64", + "uname_release": "5.4.0-1009-aws", + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "20.04", + "arch": "x86_64", + "uname_release": "5.4.0-1009-gcp", + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "20.04", + "arch": "x86_64", + "uname_release": "5.4.0-1009-gkeop", + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "20.04", + "arch": "x86_64", + "uname_release": "5.4.0-1010-azure", + "cindex": 94 + }, + { + "distrib": "ubuntu", + "version": "20.04", + "arch": "x86_64", + "uname_release": "5.4.0-1010-gkeop", + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "20.04", + "arch": "x86_64", + "uname_release": "5.4.0-1011-aws", + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", - "uname_release": "5.11.0-1027-azure", - "cindex": 66 + "uname_release": "5.4.0-1011-gcp", + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", - "uname_release": "5.11.0-1028-gcp", - "cindex": 65 + "uname_release": "5.4.0-1011-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", - "uname_release": "5.4.0-1009-aws", - "cindex": 57 + "uname_release": "5.4.0-1012-azure", + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", - "uname_release": "5.4.0-1009-gcp", - "cindex": 57 + "uname_release": "5.4.0-1012-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", - "uname_release": "5.4.0-1010-azure", - "cindex": 64 + "uname_release": "5.4.0-1013-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", - "uname_release": "5.4.0-1011-aws", - "cindex": 57 + "uname_release": "5.4.0-1014-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", - "uname_release": "5.4.0-1011-gcp", - "cindex": 57 + "uname_release": "5.4.0-1015-aws", + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", - "uname_release": "5.4.0-1012-azure", - "cindex": 64 + "uname_release": "5.4.0-1015-gcp", + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", - "uname_release": "5.4.0-1015-aws", - "cindex": 57 + "uname_release": "5.4.0-1015-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", - "uname_release": "5.4.0-1015-gcp", - "cindex": 57 + "uname_release": "5.4.0-1016-azure", + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", - "uname_release": "5.4.0-1016-azure", - "cindex": 64 + "uname_release": "5.4.0-1016-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1017-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1018-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1018-gcp", - "cindex": 57 + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "20.04", + "arch": "x86_64", + "uname_release": "5.4.0-1018-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1019-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1019-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1020-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1020-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1021-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1021-gcp", - "cindex": 57 + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "20.04", + "arch": "x86_64", + "uname_release": "5.4.0-1021-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1022-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1022-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1022-gcp", - "cindex": 57 + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "20.04", + "arch": "x86_64", + "uname_release": "5.4.0-1022-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1023-azure", - "cindex": 64 + "cindex": 94 + }, + { + "distrib": "ubuntu", + "version": "20.04", + "arch": "x86_64", + "uname_release": "5.4.0-1023-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1024-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1024-gcp", - "cindex": 57 + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "20.04", + "arch": "x86_64", + "uname_release": "5.4.0-1024-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1025-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1025-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1025-gcp", - "cindex": 57 + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "20.04", + "arch": "x86_64", + "uname_release": "5.4.0-1025-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1026-azure", - "cindex": 64 + "cindex": 94 + }, + { + "distrib": "ubuntu", + "version": "20.04", + "arch": "x86_64", + "uname_release": "5.4.0-1026-gkeop", + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "20.04", + "arch": "x86_64", + "uname_release": "5.4.0-1027-gkeop", + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1028-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1028-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1029-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1029-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1031-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1032-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1032-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1033-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1033-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1034-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1034-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1034-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1035-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1035-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1035-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1036-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1036-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1036-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1037-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1037-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1037-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1038-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1038-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1039-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1039-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1039-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1040-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1040-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1041-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1041-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1041-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1041-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1042-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1042-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1043-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1043-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1043-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1043-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1044-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1044-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1044-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1045-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1046-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1046-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1046-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1047-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1047-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1048-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1048-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1049-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1049-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1049-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1049-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1051-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1051-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1051-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1051-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1052-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1052-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1053-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1053-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1054-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1054-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1055-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1055-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1055-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1055-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1056-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1056-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1056-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1056-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1057-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1057-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1057-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1058-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1058-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1058-gcp", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1059-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1059-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1059-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1060-aws", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1061-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1061-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1062-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1062-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1063-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1063-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1064-azure", - "cindex": 64 + "cindex": 94 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1065-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1066-gke", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-1067-gke", - "cindex": 57 + "cindex": 86 + }, + { + "distrib": "ubuntu", + "version": "20.04", + "arch": "x86_64", + "uname_release": "5.4.0-1068-gke", + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-26-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-28-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-29-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-31-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-33-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-37-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-39-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-40-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-42-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-45-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-47-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-48-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-51-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-52-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-53-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-54-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-58-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-59-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-60-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-62-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-64-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-65-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-66-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-67-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-70-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-71-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-72-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-73-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-74-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-77-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-80-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-81-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-84-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-86-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-88-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-89-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-90-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.4.0-91-generic", - "cindex": 57 + "cindex": 86 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1032-gcp", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1033-azure", - "cindex": 69 + "cindex": 99 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1035-aws", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1035-gcp", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1036-azure", - "cindex": 69 + "cindex": 99 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1038-aws", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1038-gcp", - "cindex": 68 + "cindex": 98 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1039-azure", - "cindex": 70 + "cindex": 100 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1039-gcp", - "cindex": 68 + "cindex": 98 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1040-azure", - "cindex": 70 + "cindex": 100 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1041-aws", - "cindex": 68 + "cindex": 98 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1041-azure", - "cindex": 70 + "cindex": 100 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1042-aws", - "cindex": 68 + "cindex": 98 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1042-azure", - "cindex": 70 + "cindex": 100 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-1043-azure", - "cindex": 70 + "cindex": 100 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-23-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-25-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-28-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-29-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-33-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-34-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-36-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-38-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-40-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-41-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-43-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-44-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-45-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-48-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-49-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-50-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-53-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-55-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-59-generic", - "cindex": 67 + "cindex": 97 }, { "distrib": "ubuntu", "version": "20.04", "arch": "x86_64", "uname_release": "5.8.0-63-generic", - "cindex": 68 + "cindex": 98 } ] } \ No newline at end of file diff --git a/pkg/security/probe/constantfetch/constant_names.go b/pkg/security/probe/constantfetch/constant_names.go index 3b97584232cc2..25ba04ca205e5 100644 --- a/pkg/security/probe/constantfetch/constant_names.go +++ b/pkg/security/probe/constantfetch/constant_names.go @@ -20,6 +20,9 @@ const ( OffsetNameSignalStructStructTTY = "tty_offset" OffsetNameTTYStructStructName = "tty_name_offset" OffsetNameCredStructUID = "creds_uid_offset" + OffsetNameLinuxBinprmP = "linux_binprm_p_offset" + OffsetNameLinuxBinprmArgc = "linux_binprm_argc_offset" + OffsetNameLinuxBinprmEnvc = "linux_binprm_envc_offset" // bpf offsets OffsetNameBPFMapStructID = "bpf_map_id_offset" diff --git a/pkg/security/probe/constantfetch/core.go b/pkg/security/probe/constantfetch/core.go index 0ec5251768f20..fed127428c068 100644 --- a/pkg/security/probe/constantfetch/core.go +++ b/pkg/security/probe/constantfetch/core.go @@ -46,6 +46,7 @@ func NewBTFConstantFetcherFromCurrentKernel() (*BTFConstantFetcher, error) { if err != nil { return nil, err } + defer btf.FlushKernelSpec() return NewBTFConstantFetcherFromSpec(spec), nil } diff --git a/pkg/security/probe/constantfetch/fallback.go b/pkg/security/probe/constantfetch/fallback.go index 3b2c0e737367a..e8766484d96eb 100644 --- a/pkg/security/probe/constantfetch/fallback.go +++ b/pkg/security/probe/constantfetch/fallback.go @@ -102,6 +102,12 @@ func (f *FallbackConstantFetcher) appendRequest(id string) { value = getBinPrmFileFieldOffset(f.kernelVersion) case OffsetNameIoKiocbStructCtx: value = getIoKcbCtxOffset(f.kernelVersion) + case OffsetNameLinuxBinprmP: + value = getLinuxBinPrmPOffset(f.kernelVersion) + case OffsetNameLinuxBinprmArgc: + value = getLinuxBinPrmArgcOffset(f.kernelVersion) + case OffsetNameLinuxBinprmEnvc: + value = getLinuxBinPrmEnvcOffset(f.kernelVersion) } f.res[id] = value } @@ -719,3 +725,66 @@ func getIoKcbCtxOffset(kv *kernel.Version) uint64 { return 80 } } + +func getLinuxBinPrmPOffset(kv *kernel.Version) uint64 { + offset := uint64(152) + + switch { + case kv.Code >= kernel.Kernel5_2: + offset = 24 + case kv.IsRH8Kernel(): + fallthrough + case kv.IsAmazonLinuxKernel() && kv.Code == kernel.Kernel4_14 && + (kv.Code.Patch() == uint8(146) || kv.Code.Patch() == uint8(152) || kv.Code.Patch() == uint8(154) || + kv.Code.Patch() == uint8(158) || kv.Code.Patch() == uint8(200) || kv.Code.Patch() == uint8(203)): + offset = 280 + } + + return offset +} + +func getLinuxBinPrmArgcOffset(kv *kernel.Version) uint64 { + offset := uint64(192) + + switch { + case kv.IsInRangeCloseOpen(kernel.Kernel4_19, kernel.Kernel5_0): + offset = 192 + case kv.IsInRangeCloseOpen(kernel.Kernel5_0, kernel.Kernel5_2): + offset = 200 + case kv.IsInRangeCloseOpen(kernel.Kernel5_2, kernel.Kernel5_8): + offset = 72 + case kv.Code >= kernel.Kernel5_8: + offset = 88 + case kv.IsRH8Kernel(): + fallthrough + case kv.IsAmazonLinuxKernel() && kv.Code == kernel.Kernel4_14 && + (kv.Code.Patch() == uint8(146) || kv.Code.Patch() == uint8(152) || kv.Code.Patch() == uint8(154) || + kv.Code.Patch() == uint8(158) || kv.Code.Patch() == uint8(200) || kv.Code.Patch() == uint8(203)): + offset = 320 + } + + return offset +} + +func getLinuxBinPrmEnvcOffset(kv *kernel.Version) uint64 { + offset := uint64(196) + + switch { + case kv.IsInRangeCloseOpen(kernel.Kernel4_19, kernel.Kernel5_0): + offset = 196 + case kv.IsInRangeCloseOpen(kernel.Kernel5_0, kernel.Kernel5_2): + offset = 204 + case kv.IsInRangeCloseOpen(kernel.Kernel5_2, kernel.Kernel5_8): + offset = 76 + case kv.Code >= kernel.Kernel5_8: + offset = 92 + case kv.IsRH8Kernel(): + fallthrough + case kv.IsAmazonLinuxKernel() && kv.Code == kernel.Kernel4_14 && + (kv.Code.Patch() == uint8(146) || kv.Code.Patch() == uint8(152) || kv.Code.Patch() == uint8(154) || + kv.Code.Patch() == uint8(158) || kv.Code.Patch() == uint8(200) || kv.Code.Patch() == uint8(203)): + offset = 324 + } + + return offset +} diff --git a/pkg/security/probe/custom_events.go b/pkg/security/probe/custom_events.go index 284f63d6225e5..d3258f45caeb9 100644 --- a/pkg/security/probe/custom_events.go +++ b/pkg/security/probe/custom_events.go @@ -103,10 +103,10 @@ type AbnormalPathEvent struct { } // NewAbnormalPathEvent returns the rule and a populated custom event for a abnormal_path event -func NewAbnormalPathEvent(event *Event, pathResolutionError error) (*rules.Rule, *events.CustomEvent) { - return events.NewCustomRule(events.AbnormalPathRuleID), events.NewCustomEvent(resolutionErrorToEventType(event.GetPathResolutionError()), AbnormalPathEvent{ - Timestamp: event.ResolveEventTimestamp(), - Event: NewEventSerializer(event), +func NewAbnormalPathEvent(event *model.Event, probe *Probe, pathResolutionError error) (*rules.Rule, *events.CustomEvent) { + return events.NewCustomRule(events.AbnormalPathRuleID), events.NewCustomEvent(resolutionErrorToEventType(event.PathResolutionError), AbnormalPathEvent{ + Timestamp: event.FieldHandlers.ResolveEventTimestamp(event), + Event: NewEventSerializer(event, probe), PathResolutionError: pathResolutionError.Error(), }) } diff --git a/pkg/security/probe/discarders.go b/pkg/security/probe/discarders.go index 396e36871f4d8..b06f60b8b2b6c 100644 --- a/pkg/security/probe/discarders.go +++ b/pkg/security/probe/discarders.go @@ -78,7 +78,7 @@ func (e ErrDiscarderNotSupported) Error() string { return fmt.Sprintf("discarder not supported for `%s`", e.Field) } -type onDiscarderHandler func(rs *rules.RuleSet, event *Event, probe *Probe, discarder Discarder) (bool, error) +type onDiscarderHandler func(rs *rules.RuleSet, event *model.Event, probe *Probe, discarder Discarder) (bool, error) var ( allDiscarderHandlers = make(map[eval.EventType][]onDiscarderHandler) @@ -88,6 +88,9 @@ var ( var ( dentryInvalidDiscarder = []interface{}{""} + eventZeroDiscarder = &model.Event{ + FieldHandlers: &model.DefaultFieldHandlers{}, + } ) // InvalidDiscarders exposes list of values that are not discarders @@ -181,7 +184,7 @@ type inodeDiscarders struct { erpc *erpc.ERPC dentryResolver *resolvers.DentryResolver rs *rules.RuleSet - discarderEvent *Event + discarderEvent *model.Event evalCtx *eval.Context // parentDiscarderFncs holds parent discarder functions per depth @@ -191,13 +194,14 @@ type inodeDiscarders struct { } func newInodeDiscarders(erpc *erpc.ERPC, dentryResolver *resolvers.DentryResolver) *inodeDiscarders { - event := NewEvent(nil, nil, nil) - ctx := eval.NewContext(event.GetPointer()) + event := *eventZeroDiscarder + + ctx := eval.NewContext(&event) id := &inodeDiscarders{ erpc: erpc, dentryResolver: dentryResolver, - discarderEvent: event, + discarderEvent: &event, evalCtx: ctx, } @@ -368,7 +372,7 @@ func (id *inodeDiscarders) getParentDiscarderFnc(rs *rules.RuleSet, eventType mo defer func() { if altered { - *id.discarderEvent = eventZero + *id.discarderEvent = *eventZeroDiscarder } }() @@ -466,10 +470,10 @@ func (id *inodeDiscarders) discardParentInode(req *erpc.ERPCRequest, rs *rules.R } // function used to retrieve discarder information, *.file.path, FileEvent, file deleted -type inodeEventGetter = func(event *Event) (eval.Field, *model.FileEvent, bool) +type inodeEventGetter = func(event *model.Event) (eval.Field, *model.FileEvent, bool) func filenameDiscarderWrapper(eventType model.EventType, getter inodeEventGetter) onDiscarderHandler { - return func(rs *rules.RuleSet, event *Event, probe *Probe, discarder Discarder) (bool, error) { + return func(rs *rules.RuleSet, event *model.Event, probe *Probe, discarder Discarder) (bool, error) { field, fileEvent, isDeleted := getter(event) if fileEvent.PathResolutionError != nil { @@ -704,67 +708,67 @@ func init() { invalidDiscarders = createInvalidDiscardersCache() allDiscarderHandlers["open"] = append(allDiscarderHandlers["open"], filenameDiscarderWrapper(model.FileOpenEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "open.file.path", &event.Open.File, false })) SupportedDiscarders["open.file.path"] = true allDiscarderHandlers["mkdir"] = append(allDiscarderHandlers["mkdir"], filenameDiscarderWrapper(model.FileMkdirEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "mkdir.file.path", &event.Mkdir.File, false })) SupportedDiscarders["mkdir.file.path"] = true allDiscarderHandlers["unlink"] = append(allDiscarderHandlers["unlink"], filenameDiscarderWrapper(model.FileUnlinkEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "unlink.file.path", &event.Unlink.File, true })) SupportedDiscarders["unlink.file.path"] = true allDiscarderHandlers["rmdir"] = append(allDiscarderHandlers["rmdir"], filenameDiscarderWrapper(model.FileRmdirEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "rmdir.file.path", &event.Rmdir.File, false })) SupportedDiscarders["rmdir.file.path"] = true allDiscarderHandlers["chmod"] = append(allDiscarderHandlers["chmod"], filenameDiscarderWrapper(model.FileChmodEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "chmod.file.path", &event.Chmod.File, false })) SupportedDiscarders["chmod.file.path"] = true allDiscarderHandlers["chown"] = append(allDiscarderHandlers["chown"], filenameDiscarderWrapper(model.FileChownEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "chown.file.path", &event.Chown.File, false })) SupportedDiscarders["chown.file.path"] = true allDiscarderHandlers["utimes"] = append(allDiscarderHandlers["utimes"], filenameDiscarderWrapper(model.FileUtimesEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "utimes.file.path", &event.Utimes.File, false })) SupportedDiscarders["utimes.file.path"] = true allDiscarderHandlers["setxattr"] = append(allDiscarderHandlers["setxattr"], filenameDiscarderWrapper(model.FileSetXAttrEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "setxattr.file.path", &event.SetXAttr.File, false })) SupportedDiscarders["setxattr.file.path"] = true allDiscarderHandlers["removexattr"] = append(allDiscarderHandlers["removexattr"], filenameDiscarderWrapper(model.FileRemoveXAttrEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "removexattr.file.path", &event.RemoveXAttr.File, false })) SupportedDiscarders["removexattr.file.path"] = true allDiscarderHandlers["mmap"] = append(allDiscarderHandlers["mmap"], filenameDiscarderWrapper(model.MMapEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "mmap.file.path", &event.MMap.File, false })) SupportedDiscarders["mmap.file.path"] = true allDiscarderHandlers["splice"] = append(allDiscarderHandlers["splice"], filenameDiscarderWrapper(model.SpliceEventType, - func(event *Event) (eval.Field, *model.FileEvent, bool) { + func(event *model.Event) (eval.Field, *model.FileEvent, bool) { return "splice.file.path", &event.Splice.File, false })) SupportedDiscarders["splice.file.path"] = true diff --git a/pkg/security/probe/discarders_test.go b/pkg/security/probe/discarders_test.go index b5621b8e8d8a7..99144ac9d2b3e 100644 --- a/pkg/security/probe/discarders_test.go +++ b/pkg/security/probe/discarders_test.go @@ -55,49 +55,49 @@ func TestIsParentDiscarder(t *testing.T) { WithEventTypeEnabled(enabled). WithLogger(seclog.DefaultLogger) - rs := rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/log/*" && unlink.file.path != "/var/log/datadog/system-probe.log"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/log/datadog/system-probe.log", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/log/*" && unlink.file.path != "/var/log/datadog/system-probe.log"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/lib/datadog/system-probe.sock", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/var/log/datadog/system-probe.log"`, `unlink.file.name == "datadog"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/log/datadog/datadog-agent.log", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/log/*" && unlink.file.name =~ ".*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/lib/.runc/1234", 1); is { t.Error("shouldn't be able to find a parent discarder, due to partial evaluation: true && unlink.file.name =~ '.*'") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/etc/conf.d/httpd.conf" || unlink.file.name == "conf.d"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/conf.d/nginx.conf", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/etc/conf.d/httpd.conf" || unlink.file.name == "sys.d"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/sys.d/nginx.conf", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.name == "conf.d"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/conf.d/nginx.conf", 1); is { @@ -105,77 +105,77 @@ func TestIsParentDiscarder(t *testing.T) { } // field that doesn't exists shouldn't return any discarders - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `rename.file.path == "/etc/conf.d/abc"`) if is, _ := id.isParentPathDiscarder(rs, model.FileRenameEventType, "rename.file.path", "/etc/conf.d/nginx.conf", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `rename.file.path == "/etc/conf.d/abc"`) if is, _ := id.isParentPathDiscarder(rs, model.FileRenameEventType, "rename.file.path", "/etc/nginx/nginx.conf", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/etc/conf.d/*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/sys.d/nginx.conf", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "*/conf.*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/conf.d/abc", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/etc/conf.d/ab*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/conf.d/abc", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "*/conf.d/ab*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/conf.d/abc", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "*/conf.d"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/conf.d/abc", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/etc/*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/etc/cron.d/log", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path == "/tmp/passwd"`, `open.file.path == "/tmp/secret"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/runc", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/run/secrets/kubernetes.io/serviceaccount/*/token"`, `open.file.path == "/etc/secret"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/token", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "*/token"`, `open.file.path == "/etc/secret"`) is, err := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/token", 1) @@ -186,35 +186,35 @@ func TestIsParentDiscarder(t *testing.T) { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/tmp/dir/no-approver-*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/dir/a/test", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "*/conf.d/aaa"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/dir/bbb", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/etc/**"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/etc/conf.d/dir/aaa", 1); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path == "/proc/${process.pid}/maps"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/proc/1/maps", 1); is { @@ -222,14 +222,14 @@ func TestIsParentDiscarder(t *testing.T) { } // test basename conflict, a basename based rule matches the parent discarder - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/var/log/datadog/**" && open.file.name == "token"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/test1/test2", 1); !is { t.Error("should be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/var/log/datadog/**" && open.file.name == "test1"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/test1/test2", 1); is { @@ -252,105 +252,105 @@ func TestIsGrandParentDiscarder(t *testing.T) { WithEventTypeEnabled(enabled). WithLogger(seclog.DefaultLogger) - rs := rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/var/lib/datadog/system-probe.cache"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/datadog/system-probe.pid", 2); !is { t.Error("should be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/tmp/test"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/lib", 2); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/var/run/datadog/system-probe.pid"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/pids/system-probe.pid", 2); is { t.Error("shouldn't be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/lib/datadog/system-probe.cache"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/datadog/system-probe.pid", 2); !is { t.Error("should be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/run/datadog/system-probe.pid"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/pids/system-probe.pid", 2); is { t.Error("shouldn't be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "*/run/datadog/system-probe.pid"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/datadog/system-probe.pid", 2); is { t.Error("shouldn't be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "*/run/datadog/system-probe.pid"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/lib/datadog/system-probe.pid", 2); !is { t.Error("should be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/*/datadog/system-probe.pid"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/datadog/system-probe.pid", 2); is { t.Error("shouldn't be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/lib/datadog/system-probe.pid"`, `unlink.file.name =~ "run"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/datadog/system-probe.pid", 2); is { t.Error("shouldn't be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path =~ "/var/*"`, `unlink.file.name =~ "run"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/var/run/datadog/system-probe.pid", 2); is { t.Error("shouldn't be a grand parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `open.file.path =~ "/tmp/dir/*"`) if is, _ := id.isParentPathDiscarder(rs, model.FileOpenEventType, "open.file.path", "/tmp/dir/a/test", 2); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.name == "dir"`) // + variants if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/tmp/dir/a/test", 2); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/tmp/dir/a"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/tmp", 2); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/tmp"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/tmp/dir/a", 2); is { t.Error("shouldn't be a parent discarder") } - rs = rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs = rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(t, rs, `unlink.file.path == "/tmp"`) if is, _ := id.isParentPathDiscarder(rs, model.FileUnlinkEventType, "unlink.file.path", "/tmp", 2); is { @@ -386,18 +386,18 @@ func TestIsDiscarderOverride(t *testing.T) { var listener testEventListener - rs := rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) rs.AddListener(&listener) addRuleExpr(t, rs, `unlink.file.path == "/var/log/httpd" && process.file.path == "/bin/touch"`) - var event Event + event := rs.NewEvent().(*model.Event) event.Init() event.Type = uint32(model.FileUnlinkEventType) event.SetFieldValue("unlink.file.path", "/var/log/httpd") event.SetFieldValue("process.file.path", "/bin/touch") - rs.Evaluate(&event) + rs.Evaluate(event) if listener.fields["process.file.path"] > 0 { t.Error("shouldn't get a discarder") @@ -405,7 +405,7 @@ func TestIsDiscarderOverride(t *testing.T) { event.SetFieldValue("process.file.path", "/bin/cat") - rs.Evaluate(&event) + rs.Evaluate(event) if listener.fields["process.file.path"] == 0 { t.Error("should get a discarder") @@ -427,7 +427,7 @@ func BenchmarkParentDiscarder(b *testing.B) { WithEventTypeEnabled(enabled). WithLogger(seclog.DefaultLogger) - rs := rules.NewRuleSet(&Model{}, func() eval.Event { return &Event{} }, &opts, &evalOpts) + rs := rules.NewRuleSet(&model.Model{}, model.NewDefaultEvent, &opts, &evalOpts) addRuleExpr(b, rs, `unlink.file.path =~ "/var/log/*" && unlink.file.path != "/var/log/datadog/system-probe.log"`) b.ResetTimer() diff --git a/pkg/security/probe/field_handlers.go b/pkg/security/probe/field_handlers.go new file mode 100644 index 0000000000000..8a51f8832c77c --- /dev/null +++ b/pkg/security/probe/field_handlers.go @@ -0,0 +1,477 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux +// +build linux + +package probe + +import ( + "path" + "sort" + "strings" + "syscall" + "time" + + "github.com/DataDog/datadog-agent/pkg/security/secl/model" +) + +type FieldHandlers struct { + resolvers *Resolvers +} + +// ResolveFilePath resolves the inode to a full path +func (fh *FieldHandlers) ResolveFilePath(ev *model.Event, f *model.FileEvent) string { + if !f.IsPathnameStrResolved && len(f.PathnameStr) == 0 { + path, err := fh.resolvers.resolveFileFieldsPath(&f.FileFields, &ev.PIDContext, &ev.ContainerContext) + if err != nil { + ev.SetPathResolutionError(f, err) + } + f.SetPathnameStr(path) + } + + return f.PathnameStr +} + +// ResolveFileBasename resolves the inode to a full path +func (fh *FieldHandlers) ResolveFileBasename(ev *model.Event, f *model.FileEvent) string { + if !f.IsBasenameStrResolved && len(f.BasenameStr) == 0 { + if f.PathnameStr != "" { + f.SetBasenameStr(path.Base(f.PathnameStr)) + } else { + f.SetBasenameStr(fh.resolvers.resolveBasename(&f.FileFields)) + } + } + return f.BasenameStr +} + +// ResolveFileFilesystem resolves the filesystem a file resides in +func (fh *FieldHandlers) ResolveFileFilesystem(ev *model.Event, f *model.FileEvent) string { + if f.Filesystem == "" && !f.IsFileless() { + fs, err := fh.resolvers.MountResolver.ResolveFilesystem(f.FileFields.MountID, ev.PIDContext.Pid, ev.ContainerContext.ID) + if err != nil { + ev.SetPathResolutionError(f, err) + } + f.Filesystem = fs + } + return f.Filesystem +} + +// ResolveFileFieldsInUpperLayer resolves whether the file is in an upper layer +func (fh *FieldHandlers) ResolveFileFieldsInUpperLayer(ev *model.Event, f *model.FileFields) bool { + return f.GetInUpperLayer() +} + +// ResolveXAttrName returns the string representation of the extended attribute name +func (fh *FieldHandlers) ResolveXAttrName(ev *model.Event, e *model.SetXAttrEvent) string { + if len(e.Name) == 0 { + e.Name, _ = model.UnmarshalString(e.NameRaw[:], 200) + } + return e.Name +} + +// ResolveXAttrNamespace returns the string representation of the extended attribute namespace +func (fh *FieldHandlers) ResolveXAttrNamespace(ev *model.Event, e *model.SetXAttrEvent) string { + if len(e.Namespace) == 0 { + ns, _, found := strings.Cut(fh.ResolveXAttrName(ev, e), ".") + if found { + e.Namespace = ns + } + } + return e.Namespace +} + +// SetMountPoint set the mount point information +func (fh *FieldHandlers) SetMountPoint(ev *model.Event, e *model.Mount) error { + var err error + e.MountPointStr, err = fh.resolvers.DentryResolver.Resolve(e.ParentMountID, e.ParentInode, 0, true) + return err +} + +// ResolveMountPoint resolves the mountpoint to a full path +func (fh *FieldHandlers) ResolveMountPoint(ev *model.Event, e *model.Mount) (string, error) { + if len(e.MountPointStr) == 0 { + if err := fh.SetMountPoint(ev, e); err != nil { + return "", err + } + } + return e.MountPointStr, nil +} + +// SetMountRoot set the mount point information +func (fh *FieldHandlers) SetMountRoot(ev *model.Event, e *model.Mount) error { + var err error + e.RootStr, err = fh.resolvers.DentryResolver.Resolve(e.RootMountID, e.RootInode, 0, true) + return err +} + +// ResolveMountRoot resolves the mountpoint to a full path +func (fh *FieldHandlers) ResolveMountRoot(ev *model.Event, e *model.Mount) (string, error) { + if len(e.RootStr) == 0 { + if err := fh.SetMountRoot(ev, e); err != nil { + return "", err + } + } + return e.RootStr, nil +} + +func (fh *FieldHandlers) ResolveMountPointPath(ev *model.Event, e *model.MountEvent) string { + if len(e.MountPointPath) == 0 { + mountPointPath, err := fh.resolvers.MountResolver.ResolveMountPath(e.MountID, ev.PIDContext.Pid, ev.ContainerContext.ID) + if err != nil { + e.MountPointPathResolutionError = err + return "" + } + e.MountPointPath = mountPointPath + } + return e.MountPointPath +} + +func (fh *FieldHandlers) ResolveMountSourcePath(ev *model.Event, e *model.MountEvent) string { + if e.BindSrcMountID != 0 && len(e.MountSourcePath) == 0 { + bindSourceMountPath, err := fh.resolvers.MountResolver.ResolveMountPath(e.BindSrcMountID, ev.PIDContext.Pid, ev.ContainerContext.ID) + if err != nil { + e.MountSourcePathResolutionError = err + return "" + } + rootStr, err := fh.ResolveMountRoot(ev, &e.Mount) + if err != nil { + e.MountSourcePathResolutionError = err + return "" + } + e.MountSourcePath = path.Join(bindSourceMountPath, rootStr) + } + return e.MountSourcePath +} + +// ResolveContainerID resolves the container ID of the event +func (fh *FieldHandlers) ResolveContainerID(ev *model.Event, e *model.ContainerContext) string { + if len(e.ID) == 0 { + if entry, _ := fh.ResolveProcessCacheEntry(ev); entry != nil { + e.ID = entry.ContainerID + } + } + return e.ID +} + +// ResolveContainerTags resolves the container tags of the event +func (fh *FieldHandlers) ResolveContainerTags(ev *model.Event, e *model.ContainerContext) []string { + if len(e.Tags) == 0 && e.ID != "" { + e.Tags = fh.resolvers.TagsResolver.Resolve(e.ID) + } + return e.Tags +} + +// ResolveRights resolves the rights of a file +func (fh *FieldHandlers) ResolveRights(ev *model.Event, e *model.FileFields) int { + return int(e.Mode) & (syscall.S_ISUID | syscall.S_ISGID | syscall.S_ISVTX | syscall.S_IRWXU | syscall.S_IRWXG | syscall.S_IRWXO) +} + +// ResolveChownUID resolves the ResolveProcessCacheEntry id of a chown event to a username +func (fh *FieldHandlers) ResolveChownUID(ev *model.Event, e *model.ChownEvent) string { + if len(e.User) == 0 { + e.User, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.UID)) + } + return e.User +} + +// ResolveChownGID resolves the group id of a chown event to a group name +func (fh *FieldHandlers) ResolveChownGID(ev *model.Event, e *model.ChownEvent) string { + if len(e.Group) == 0 { + e.Group, _ = fh.resolvers.UserGroupResolver.ResolveGroup(int(e.GID)) + } + return e.Group +} + +// ResolveProcessCreatedAt resolves process creation time +func (fh *FieldHandlers) ResolveProcessCreatedAt(ev *model.Event, e *model.Process) int { + return int(e.ExecTime.UnixNano()) +} + +// ResolveProcessArgv0 resolves the first arg of the event +func (fh *FieldHandlers) ResolveProcessArgv0(ev *model.Event, process *model.Process) string { + arg0, _ := fh.resolvers.ProcessResolver.GetProcessArgv0(process) + return arg0 +} + +// ResolveProcessArgs resolves the args of the event +func (fh *FieldHandlers) ResolveProcessArgs(ev *model.Event, process *model.Process) string { + return strings.Join(fh.ResolveProcessArgv(ev, process), " ") +} + +// ResolveProcessArgv resolves the args of the event as an array +func (fh *FieldHandlers) ResolveProcessArgv(ev *model.Event, process *model.Process) []string { + argv, _ := fh.resolvers.ProcessResolver.GetProcessArgv(process) + return argv +} + +// ResolveProcessEnvp resolves the envp of the event as an array +func (fh *FieldHandlers) ResolveProcessEnvp(ev *model.Event, process *model.Process) []string { + envp, _ := fh.resolvers.ProcessResolver.GetProcessEnvp(process) + return envp +} + +// ResolveProcessArgsTruncated returns whether the args are truncated +func (fh *FieldHandlers) ResolveProcessArgsTruncated(ev *model.Event, process *model.Process) bool { + _, truncated := fh.resolvers.ProcessResolver.GetProcessArgv(process) + return truncated +} + +// ResolveProcessArgsFlags resolves the arguments flags of the event +func (fh *FieldHandlers) ResolveProcessArgsFlags(ev *model.Event, process *model.Process) (flags []string) { + for _, arg := range fh.ResolveProcessArgv(ev, process) { + if len(arg) > 1 && arg[0] == '-' { + isFlag := true + name := arg[1:] + if len(name) >= 1 && name[0] == '-' { + name = name[1:] + isFlag = false + } + + isOption := false + for _, r := range name { + isFlag = isFlag && model.IsAlphaNumeric(r) + isOption = isOption || r == '=' + } + + if len(name) > 0 { + if isFlag { + for _, r := range name { + flags = append(flags, string(r)) + } + } + if !isOption && len(name) > 1 { + flags = append(flags, name) + } + } + } + } + return +} + +// ResolveProcessArgsOptions resolves the arguments options of the event +func (fh *FieldHandlers) ResolveProcessArgsOptions(ev *model.Event, process *model.Process) (options []string) { + args := fh.ResolveProcessArgv(ev, process) + for i := 0; i < len(args); i++ { + arg := args[i] + if len(arg) > 1 && arg[0] == '-' { + name := arg[1:] + if len(name) >= 1 && name[0] == '-' { + name = name[1:] + } + if len(name) > 0 && model.IsAlphaNumeric(rune(name[0])) { + if index := strings.IndexRune(name, '='); index == -1 { + if i < len(args)-1 && (len(args[i+1]) == 0 || args[i+1][0] != '-') { + options = append(options, name+"="+args[i+1]) + i++ + } + } else { + options = append(options, name) + } + } + } + } + return +} + +// ResolveProcessEnvsTruncated returns whether the envs are truncated +func (fh *FieldHandlers) ResolveProcessEnvsTruncated(ev *model.Event, process *model.Process) bool { + _, truncated := fh.resolvers.ProcessResolver.GetProcessEnvs(process) + return truncated +} + +// ResolveProcessEnvs resolves the envs of the event +func (fh *FieldHandlers) ResolveProcessEnvs(ev *model.Event, process *model.Process) []string { + envs, _ := fh.resolvers.ProcessResolver.GetProcessEnvs(process) + return envs +} + +// ResolveSetuidUser resolves the user of the Setuid event +func (fh *FieldHandlers) ResolveSetuidUser(ev *model.Event, e *model.SetuidEvent) string { + if len(e.User) == 0 { + e.User, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.UID)) + } + return e.User +} + +// ResolveSetuidEUser resolves the effective user of the Setuid event +func (fh *FieldHandlers) ResolveSetuidEUser(ev *model.Event, e *model.SetuidEvent) string { + if len(e.EUser) == 0 { + e.EUser, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.EUID)) + } + return e.EUser +} + +// ResolveSetuidFSUser resolves the file-system user of the Setuid event +func (fh *FieldHandlers) ResolveSetuidFSUser(ev *model.Event, e *model.SetuidEvent) string { + if len(e.FSUser) == 0 { + e.FSUser, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.FSUID)) + } + return e.FSUser +} + +// ResolveSetgidGroup resolves the group of the Setgid event +func (fh *FieldHandlers) ResolveSetgidGroup(ev *model.Event, e *model.SetgidEvent) string { + if len(e.Group) == 0 { + e.Group, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.GID)) + } + return e.Group +} + +// ResolveSetgidEGroup resolves the effective group of the Setgid event +func (fh *FieldHandlers) ResolveSetgidEGroup(ev *model.Event, e *model.SetgidEvent) string { + if len(e.EGroup) == 0 { + e.EGroup, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.EGID)) + } + return e.EGroup +} + +// ResolveSetgidFSGroup resolves the file-system group of the Setgid event +func (fh *FieldHandlers) ResolveSetgidFSGroup(ev *model.Event, e *model.SetgidEvent) string { + if len(e.FSGroup) == 0 { + e.FSGroup, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.FSGID)) + } + return e.FSGroup +} + +// ResolveSELinuxBoolName resolves the boolean name of the SELinux event +func (fh *FieldHandlers) ResolveSELinuxBoolName(ev *model.Event, e *model.SELinuxEvent) string { + if e.EventKind != model.SELinuxBoolChangeEventKind { + return "" + } + + if len(e.BoolName) == 0 { + e.BoolName = fh.resolvers.resolveBasename(&e.File.FileFields) + } + return e.BoolName +} + +// ResolveProcessCacheEntry queries the ProcessResolver to retrieve the ProcessContext of the event +func (fh *FieldHandlers) ResolveProcessCacheEntry(ev *model.Event) (*model.ProcessCacheEntry, bool) { + if ev.PIDContext.IsKworker { + return model.NewEmptyProcessCacheEntry(ev.PIDContext.Pid, ev.PIDContext.Tid, true), false + } + + if ev.ProcessCacheEntry == nil { + ev.ProcessCacheEntry = fh.resolvers.ProcessResolver.Resolve(ev.PIDContext.Pid, ev.PIDContext.Tid, ev.PIDContext.Inode) + } + + if ev.ProcessCacheEntry == nil { + // keep the original PIDContext + ev.ProcessCacheEntry = model.NewProcessCacheEntry(nil) + ev.ProcessCacheEntry.PIDContext = ev.PIDContext + + ev.ProcessCacheEntry.FileEvent.SetPathnameStr("") + ev.ProcessCacheEntry.FileEvent.SetBasenameStr("") + + // mark interpreter as resolved too + ev.ProcessCacheEntry.LinuxBinprm.FileEvent.SetPathnameStr("") + ev.ProcessCacheEntry.LinuxBinprm.FileEvent.SetBasenameStr("") + + return ev.ProcessCacheEntry, false + } + + return ev.ProcessCacheEntry, true +} + +// GetProcessServiceTag returns the service tag based on the process context +func (fh *FieldHandlers) GetProcessServiceTag(ev *model.Event) string { + entry, _ := fh.ResolveProcessCacheEntry(ev) + if entry == nil { + return "" + } + + var serviceValues []string + + // first search in the process context itself + if entry.EnvsEntry != nil { + if service := entry.EnvsEntry.Get(ServiceEnvVar); service != "" { + serviceValues = append(serviceValues, service) + } + } + + inContainer := entry.ContainerID != "" + + // while in container check for each ancestor + for ancestor := entry.Ancestor; ancestor != nil; ancestor = ancestor.Ancestor { + if inContainer && ancestor.ContainerID == "" { + break + } + + if ancestor.EnvsEntry != nil { + if service := ancestor.EnvsEntry.Get(ServiceEnvVar); service != "" { + serviceValues = append(serviceValues, service) + } + } + } + + return bestGuessServiceTag(serviceValues) +} + +// ResolveFileFieldsGroup resolves the group id of the file to a group name +func (fh *FieldHandlers) ResolveFileFieldsGroup(ev *model.Event, e *model.FileFields) string { + if len(e.Group) == 0 { + e.Group, _ = fh.resolvers.UserGroupResolver.ResolveGroup(int(e.GID)) + } + return e.Group +} + +func bestGuessServiceTag(serviceValues []string) string { + if len(serviceValues) == 0 { + return "" + } + + firstGuess := serviceValues[0] + + // first we sort base on len, biggest len first + sort.Slice(serviceValues, func(i, j int) bool { + return len(serviceValues[j]) < len(serviceValues[i]) // reverse + }) + + // we then compare [i] and [i + 1] to check if [i + 1] is a prefix of [i] + for i := 0; i < len(serviceValues)-1; i++ { + if !strings.HasPrefix(serviceValues[i], serviceValues[i+1]) { + // if it's not a prefix it means we have multiple disjoints services + // we then return the first guess, closest in the process tree + return firstGuess + } + } + + // we have a prefix chain, let's return the biggest one + return serviceValues[0] +} + +// ResolveNetworkDeviceIfName returns the network iterface name from the network context +func (fh *FieldHandlers) ResolveNetworkDeviceIfName(ev *model.Event, device *model.NetworkDeviceContext) string { + if len(device.IfName) == 0 && fh.resolvers.TCResolver != nil { + ifName, ok := fh.resolvers.TCResolver.ResolveNetworkDeviceIfName(device.IfIndex, device.NetNS) + if ok { + device.IfName = ifName + } + } + + return device.IfName +} + +// ResolveFileFieldsUser resolves the user id of the file to a username +func (fh *FieldHandlers) ResolveFileFieldsUser(ev *model.Event, e *model.FileFields) string { + if len(e.User) == 0 { + e.User, _ = fh.resolvers.UserGroupResolver.ResolveUser(int(e.UID)) + } + return e.User +} + +// ResolveEventTimestamp resolves the monolitic kernel event timestamp to an absolute time +func (fh *FieldHandlers) ResolveEventTimestamp(ev *model.Event) time.Time { + if ev.Timestamp.IsZero() { + fh := ev.FieldHandlers.(*FieldHandlers) + + ev.Timestamp = fh.resolvers.TimeResolver.ResolveMonotonicTimestamp(ev.TimestampRaw) + if ev.Timestamp.IsZero() { + ev.Timestamp = time.Now() + } + } + return ev.Timestamp +} diff --git a/pkg/security/probe/fields_resolver.go b/pkg/security/probe/fields_resolver.go deleted file mode 100644 index f810a32fb72fa..0000000000000 --- a/pkg/security/probe/fields_resolver.go +++ /dev/null @@ -1,562 +0,0 @@ -//go:build linux -// +build linux - -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2022-present Datadog, Inc. -// Code generated - DO NOT EDIT. -package probe - -// ResolveFields resolves all the fields associate to the event type. Context fields are automatically resolved. -func (ev *Event) ResolveFields(forADs bool) { - // resolve context fields that are not related to any event type - _ = ev.ResolveContainerID(&ev.ContainerContext) - if !forADs { - _ = ev.ResolveContainerTags(&ev.ContainerContext) - } - _ = ev.ResolveNetworkDeviceIfName(&ev.NetworkContext.Device) - _ = ev.ResolveProcessArgs(&ev.ProcessContext.Process) - _ = ev.ResolveProcessArgsTruncated(&ev.ProcessContext.Process) - _ = ev.ResolveProcessArgv(&ev.ProcessContext.Process) - _ = ev.ResolveProcessArgv0(&ev.ProcessContext.Process) - _ = ev.ResolveProcessCreatedAt(&ev.ProcessContext.Process) - _ = ev.ResolveProcessEnvp(&ev.ProcessContext.Process) - _ = ev.ResolveProcessEnvs(&ev.ProcessContext.Process) - _ = ev.ResolveProcessEnvsTruncated(&ev.ProcessContext.Process) - if ev.ProcessContext.Process.IsNotKworker() { - _ = ev.ResolveFileFilesystem(&ev.ProcessContext.Process.FileEvent) - } - if ev.ProcessContext.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsGroup(&ev.ProcessContext.Process.FileEvent.FileFields) - } - if ev.ProcessContext.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.ProcessContext.Process.FileEvent.FileFields) - } - if ev.ProcessContext.Process.IsNotKworker() { - _ = ev.ResolveFileBasename(&ev.ProcessContext.Process.FileEvent) - } - if ev.ProcessContext.Process.IsNotKworker() { - _ = ev.ResolveFilePath(&ev.ProcessContext.Process.FileEvent) - } - if ev.ProcessContext.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsUser(&ev.ProcessContext.Process.FileEvent.FileFields) - } - if ev.ProcessContext.Process.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.ProcessContext.Process.LinuxBinprm.FileEvent) - } - if ev.ProcessContext.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.ProcessContext.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.ProcessContext.Process.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.ProcessContext.Process.LinuxBinprm.FileEvent) - } - if ev.ProcessContext.Process.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.ProcessContext.Process.LinuxBinprm.FileEvent) - } - if ev.ProcessContext.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessArgs(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessArgsTruncated(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessArgv(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessArgv0(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessCreatedAt(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessEnvp(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessEnvs(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() { - _ = ev.ResolveProcessEnvsTruncated(ev.ProcessContext.Parent) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { - _ = ev.ResolveFileFilesystem(&ev.ProcessContext.Parent.FileEvent) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { - _ = ev.ResolveFileFieldsGroup(&ev.ProcessContext.Parent.FileEvent.FileFields) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.ProcessContext.Parent.FileEvent.FileFields) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { - _ = ev.ResolveFileBasename(&ev.ProcessContext.Parent.FileEvent) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { - _ = ev.ResolveFilePath(&ev.ProcessContext.Parent.FileEvent) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { - _ = ev.ResolveFileFieldsUser(&ev.ProcessContext.Parent.FileEvent.FileFields) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.ProcessContext.Parent.LinuxBinprm.FileEvent) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.ProcessContext.Parent.LinuxBinprm.FileEvent) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.ProcessContext.Parent.LinuxBinprm.FileEvent) - } - if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) - } - // resolve event specific fields - switch ev.GetEventType().String() { - case "bind": - case "bpf": - _ = ev.ResolveHelpers(&ev.BPF.Program) - case "capset": - case "chmod": - _ = ev.ResolveFileFieldsUser(&ev.Chmod.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Chmod.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Chmod.File.FileFields) - _ = ev.ResolveFilePath(&ev.Chmod.File) - _ = ev.ResolveFileBasename(&ev.Chmod.File) - _ = ev.ResolveFileFilesystem(&ev.Chmod.File) - case "chown": - _ = ev.ResolveFileFieldsUser(&ev.Chown.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Chown.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Chown.File.FileFields) - _ = ev.ResolveFilePath(&ev.Chown.File) - _ = ev.ResolveFileBasename(&ev.Chown.File) - _ = ev.ResolveFileFilesystem(&ev.Chown.File) - _ = ev.ResolveChownUID(&ev.Chown) - _ = ev.ResolveChownGID(&ev.Chown) - case "dns": - case "exec": - if ev.Exec.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsUser(&ev.Exec.Process.FileEvent.FileFields) - } - if ev.Exec.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsGroup(&ev.Exec.Process.FileEvent.FileFields) - } - if ev.Exec.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Exec.Process.FileEvent.FileFields) - } - if ev.Exec.Process.IsNotKworker() { - _ = ev.ResolveFilePath(&ev.Exec.Process.FileEvent) - } - if ev.Exec.Process.IsNotKworker() { - _ = ev.ResolveFileBasename(&ev.Exec.Process.FileEvent) - } - if ev.Exec.Process.IsNotKworker() { - _ = ev.ResolveFileFilesystem(&ev.Exec.Process.FileEvent) - } - if ev.Exec.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Exec.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Exec.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Exec.Process.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.Exec.Process.LinuxBinprm.FileEvent) - } - if ev.Exec.Process.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.Exec.Process.LinuxBinprm.FileEvent) - } - if ev.Exec.Process.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.Exec.Process.LinuxBinprm.FileEvent) - } - _ = ev.ResolveProcessCreatedAt(ev.Exec.Process) - _ = ev.ResolveProcessArgv0(ev.Exec.Process) - _ = ev.ResolveProcessArgs(ev.Exec.Process) - _ = ev.ResolveProcessArgv(ev.Exec.Process) - _ = ev.ResolveProcessArgsTruncated(ev.Exec.Process) - _ = ev.ResolveProcessEnvs(ev.Exec.Process) - _ = ev.ResolveProcessEnvp(ev.Exec.Process) - _ = ev.ResolveProcessEnvsTruncated(ev.Exec.Process) - case "exit": - if ev.Exit.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsUser(&ev.Exit.Process.FileEvent.FileFields) - } - if ev.Exit.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsGroup(&ev.Exit.Process.FileEvent.FileFields) - } - if ev.Exit.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Exit.Process.FileEvent.FileFields) - } - if ev.Exit.Process.IsNotKworker() { - _ = ev.ResolveFilePath(&ev.Exit.Process.FileEvent) - } - if ev.Exit.Process.IsNotKworker() { - _ = ev.ResolveFileBasename(&ev.Exit.Process.FileEvent) - } - if ev.Exit.Process.IsNotKworker() { - _ = ev.ResolveFileFilesystem(&ev.Exit.Process.FileEvent) - } - if ev.Exit.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Exit.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Exit.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Exit.Process.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.Exit.Process.LinuxBinprm.FileEvent) - } - if ev.Exit.Process.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.Exit.Process.LinuxBinprm.FileEvent) - } - if ev.Exit.Process.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.Exit.Process.LinuxBinprm.FileEvent) - } - _ = ev.ResolveProcessCreatedAt(ev.Exit.Process) - _ = ev.ResolveProcessArgv0(ev.Exit.Process) - _ = ev.ResolveProcessArgs(ev.Exit.Process) - _ = ev.ResolveProcessArgv(ev.Exit.Process) - _ = ev.ResolveProcessArgsTruncated(ev.Exit.Process) - _ = ev.ResolveProcessEnvs(ev.Exit.Process) - _ = ev.ResolveProcessEnvp(ev.Exit.Process) - _ = ev.ResolveProcessEnvsTruncated(ev.Exit.Process) - case "link": - _ = ev.ResolveFileFieldsUser(&ev.Link.Source.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Link.Source.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Link.Source.FileFields) - _ = ev.ResolveFilePath(&ev.Link.Source) - _ = ev.ResolveFileBasename(&ev.Link.Source) - _ = ev.ResolveFileFilesystem(&ev.Link.Source) - _ = ev.ResolveFileFieldsUser(&ev.Link.Target.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Link.Target.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Link.Target.FileFields) - _ = ev.ResolveFilePath(&ev.Link.Target) - _ = ev.ResolveFileBasename(&ev.Link.Target) - _ = ev.ResolveFileFilesystem(&ev.Link.Target) - case "load_module": - _ = ev.ResolveFileFieldsUser(&ev.LoadModule.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.LoadModule.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.LoadModule.File.FileFields) - _ = ev.ResolveFilePath(&ev.LoadModule.File) - _ = ev.ResolveFileBasename(&ev.LoadModule.File) - _ = ev.ResolveFileFilesystem(&ev.LoadModule.File) - case "mkdir": - _ = ev.ResolveFileFieldsUser(&ev.Mkdir.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Mkdir.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Mkdir.File.FileFields) - _ = ev.ResolveFilePath(&ev.Mkdir.File) - _ = ev.ResolveFileBasename(&ev.Mkdir.File) - _ = ev.ResolveFileFilesystem(&ev.Mkdir.File) - case "mmap": - _ = ev.ResolveFileFieldsUser(&ev.MMap.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.MMap.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.MMap.File.FileFields) - _ = ev.ResolveFilePath(&ev.MMap.File) - _ = ev.ResolveFileBasename(&ev.MMap.File) - _ = ev.ResolveFileFilesystem(&ev.MMap.File) - case "mount": - _ = ev.ResolveMountPointPath(&ev.Mount) - _ = ev.ResolveMountSourcePath(&ev.Mount) - case "mprotect": - case "open": - _ = ev.ResolveFileFieldsUser(&ev.Open.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Open.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Open.File.FileFields) - _ = ev.ResolveFilePath(&ev.Open.File) - _ = ev.ResolveFileBasename(&ev.Open.File) - _ = ev.ResolveFileFilesystem(&ev.Open.File) - case "ptrace": - if ev.PTrace.Tracee.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsUser(&ev.PTrace.Tracee.Process.FileEvent.FileFields) - } - if ev.PTrace.Tracee.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsGroup(&ev.PTrace.Tracee.Process.FileEvent.FileFields) - } - if ev.PTrace.Tracee.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.PTrace.Tracee.Process.FileEvent.FileFields) - } - if ev.PTrace.Tracee.Process.IsNotKworker() { - _ = ev.ResolveFilePath(&ev.PTrace.Tracee.Process.FileEvent) - } - if ev.PTrace.Tracee.Process.IsNotKworker() { - _ = ev.ResolveFileBasename(&ev.PTrace.Tracee.Process.FileEvent) - } - if ev.PTrace.Tracee.Process.IsNotKworker() { - _ = ev.ResolveFileFilesystem(&ev.PTrace.Tracee.Process.FileEvent) - } - if ev.PTrace.Tracee.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.PTrace.Tracee.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.PTrace.Tracee.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.PTrace.Tracee.Process.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) - } - if ev.PTrace.Tracee.Process.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) - } - if ev.PTrace.Tracee.Process.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) - } - _ = ev.ResolveProcessCreatedAt(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessArgv0(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessArgs(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessArgv(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessArgsTruncated(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessEnvs(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessEnvp(&ev.PTrace.Tracee.Process) - _ = ev.ResolveProcessEnvsTruncated(&ev.PTrace.Tracee.Process) - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { - _ = ev.ResolveFileFieldsUser(&ev.PTrace.Tracee.Parent.FileEvent.FileFields) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { - _ = ev.ResolveFileFieldsGroup(&ev.PTrace.Tracee.Parent.FileEvent.FileFields) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.PTrace.Tracee.Parent.FileEvent.FileFields) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { - _ = ev.ResolveFilePath(&ev.PTrace.Tracee.Parent.FileEvent) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { - _ = ev.ResolveFileBasename(&ev.PTrace.Tracee.Parent.FileEvent) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { - _ = ev.ResolveFileFilesystem(&ev.PTrace.Tracee.Parent.FileEvent) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) - } - if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessCreatedAt(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessArgv0(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessArgs(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessArgv(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessArgsTruncated(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessEnvs(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessEnvp(ev.PTrace.Tracee.Parent) - } - if ev.PTrace.Tracee.HasParent() { - _ = ev.ResolveProcessEnvsTruncated(ev.PTrace.Tracee.Parent) - } - case "removexattr": - _ = ev.ResolveFileFieldsUser(&ev.RemoveXAttr.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.RemoveXAttr.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.RemoveXAttr.File.FileFields) - _ = ev.ResolveFilePath(&ev.RemoveXAttr.File) - _ = ev.ResolveFileBasename(&ev.RemoveXAttr.File) - _ = ev.ResolveFileFilesystem(&ev.RemoveXAttr.File) - _ = ev.ResolveXAttrNamespace(&ev.RemoveXAttr) - _ = ev.ResolveXAttrName(&ev.RemoveXAttr) - case "rename": - _ = ev.ResolveFileFieldsUser(&ev.Rename.Old.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Rename.Old.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Rename.Old.FileFields) - _ = ev.ResolveFilePath(&ev.Rename.Old) - _ = ev.ResolveFileBasename(&ev.Rename.Old) - _ = ev.ResolveFileFilesystem(&ev.Rename.Old) - _ = ev.ResolveFileFieldsUser(&ev.Rename.New.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Rename.New.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Rename.New.FileFields) - _ = ev.ResolveFilePath(&ev.Rename.New) - _ = ev.ResolveFileBasename(&ev.Rename.New) - _ = ev.ResolveFileFilesystem(&ev.Rename.New) - case "rmdir": - _ = ev.ResolveFileFieldsUser(&ev.Rmdir.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Rmdir.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Rmdir.File.FileFields) - _ = ev.ResolveFilePath(&ev.Rmdir.File) - _ = ev.ResolveFileBasename(&ev.Rmdir.File) - _ = ev.ResolveFileFilesystem(&ev.Rmdir.File) - case "selinux": - _ = ev.ResolveSELinuxBoolName(&ev.SELinux) - case "setgid": - _ = ev.ResolveSetgidGroup(&ev.SetGID) - _ = ev.ResolveSetgidEGroup(&ev.SetGID) - _ = ev.ResolveSetgidFSGroup(&ev.SetGID) - case "setuid": - _ = ev.ResolveSetuidUser(&ev.SetUID) - _ = ev.ResolveSetuidEUser(&ev.SetUID) - _ = ev.ResolveSetuidFSUser(&ev.SetUID) - case "setxattr": - _ = ev.ResolveFileFieldsUser(&ev.SetXAttr.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.SetXAttr.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.SetXAttr.File.FileFields) - _ = ev.ResolveFilePath(&ev.SetXAttr.File) - _ = ev.ResolveFileBasename(&ev.SetXAttr.File) - _ = ev.ResolveFileFilesystem(&ev.SetXAttr.File) - _ = ev.ResolveXAttrNamespace(&ev.SetXAttr) - _ = ev.ResolveXAttrName(&ev.SetXAttr) - case "signal": - if ev.Signal.Target.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsUser(&ev.Signal.Target.Process.FileEvent.FileFields) - } - if ev.Signal.Target.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsGroup(&ev.Signal.Target.Process.FileEvent.FileFields) - } - if ev.Signal.Target.Process.IsNotKworker() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Signal.Target.Process.FileEvent.FileFields) - } - if ev.Signal.Target.Process.IsNotKworker() { - _ = ev.ResolveFilePath(&ev.Signal.Target.Process.FileEvent) - } - if ev.Signal.Target.Process.IsNotKworker() { - _ = ev.ResolveFileBasename(&ev.Signal.Target.Process.FileEvent) - } - if ev.Signal.Target.Process.IsNotKworker() { - _ = ev.ResolveFileFilesystem(&ev.Signal.Target.Process.FileEvent) - } - if ev.Signal.Target.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Signal.Target.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Signal.Target.Process.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) - } - if ev.Signal.Target.Process.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.Signal.Target.Process.LinuxBinprm.FileEvent) - } - if ev.Signal.Target.Process.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.Signal.Target.Process.LinuxBinprm.FileEvent) - } - if ev.Signal.Target.Process.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.Signal.Target.Process.LinuxBinprm.FileEvent) - } - _ = ev.ResolveProcessCreatedAt(&ev.Signal.Target.Process) - _ = ev.ResolveProcessArgv0(&ev.Signal.Target.Process) - _ = ev.ResolveProcessArgs(&ev.Signal.Target.Process) - _ = ev.ResolveProcessArgv(&ev.Signal.Target.Process) - _ = ev.ResolveProcessArgsTruncated(&ev.Signal.Target.Process) - _ = ev.ResolveProcessEnvs(&ev.Signal.Target.Process) - _ = ev.ResolveProcessEnvp(&ev.Signal.Target.Process) - _ = ev.ResolveProcessEnvsTruncated(&ev.Signal.Target.Process) - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { - _ = ev.ResolveFileFieldsUser(&ev.Signal.Target.Parent.FileEvent.FileFields) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { - _ = ev.ResolveFileFieldsGroup(&ev.Signal.Target.Parent.FileEvent.FileFields) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Signal.Target.Parent.FileEvent.FileFields) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { - _ = ev.ResolveFilePath(&ev.Signal.Target.Parent.FileEvent) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { - _ = ev.ResolveFileBasename(&ev.Signal.Target.Parent.FileEvent) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { - _ = ev.ResolveFileFilesystem(&ev.Signal.Target.Parent.FileEvent) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsUser(&ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsGroup(&ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { - _ = ev.ResolveFilePath(&ev.Signal.Target.Parent.LinuxBinprm.FileEvent) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { - _ = ev.ResolveFileBasename(&ev.Signal.Target.Parent.LinuxBinprm.FileEvent) - } - if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { - _ = ev.ResolveFileFilesystem(&ev.Signal.Target.Parent.LinuxBinprm.FileEvent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessCreatedAt(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessArgv0(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessArgs(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessArgv(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessArgsTruncated(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessEnvs(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessEnvp(ev.Signal.Target.Parent) - } - if ev.Signal.Target.HasParent() { - _ = ev.ResolveProcessEnvsTruncated(ev.Signal.Target.Parent) - } - case "splice": - _ = ev.ResolveFileFieldsUser(&ev.Splice.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Splice.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Splice.File.FileFields) - _ = ev.ResolveFilePath(&ev.Splice.File) - _ = ev.ResolveFileBasename(&ev.Splice.File) - _ = ev.ResolveFileFilesystem(&ev.Splice.File) - case "unlink": - _ = ev.ResolveFileFieldsUser(&ev.Unlink.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Unlink.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Unlink.File.FileFields) - _ = ev.ResolveFilePath(&ev.Unlink.File) - _ = ev.ResolveFileBasename(&ev.Unlink.File) - _ = ev.ResolveFileFilesystem(&ev.Unlink.File) - case "unload_module": - case "utimes": - _ = ev.ResolveFileFieldsUser(&ev.Utimes.File.FileFields) - _ = ev.ResolveFileFieldsGroup(&ev.Utimes.File.FileFields) - _ = ev.ResolveFileFieldsInUpperLayer(&ev.Utimes.File.FileFields) - _ = ev.ResolveFilePath(&ev.Utimes.File) - _ = ev.ResolveFileBasename(&ev.Utimes.File) - _ = ev.ResolveFileFilesystem(&ev.Utimes.File) - } -} diff --git a/pkg/security/probe/load_controller.go b/pkg/security/probe/load_controller.go index 231cc38a081a6..c8de2f7373918 100644 --- a/pkg/security/probe/load_controller.go +++ b/pkg/security/probe/load_controller.go @@ -84,7 +84,7 @@ func (lc *LoadController) SendStats() error { } // Count processes the provided events and ensures the load of the provided event type is within the configured limits -func (lc *LoadController) Count(event *Event) { +func (lc *LoadController) Count(event *model.Event) { switch event.GetEventType() { case model.ExecEventType, model.InvalidateDentryEventType, model.ForkEventType: case model.ExitEventType: @@ -95,7 +95,7 @@ func (lc *LoadController) Count(event *Event) { } // GenericCount increments the event counter of the provided event type and pid -func (lc *LoadController) GenericCount(event *Event) { +func (lc *LoadController) GenericCount(event *model.Event) { lc.Lock() defer lc.Unlock() @@ -152,7 +152,7 @@ func (lc *LoadController) discardNoisiestProcess() { lc.pidDiscardersCount.Inc() if lc.NoisyProcessCustomEventRate.Allow() { - process := lc.probe.resolvers.ProcessResolver.Resolve(maxKey.Pid, maxKey.Pid) + process := lc.probe.resolvers.ProcessResolver.Resolve(maxKey.Pid, maxKey.Pid, 0) if process == nil { seclog.Warnf("Unable to resolve process with pid: %d", maxKey.Pid) return diff --git a/pkg/security/probe/model.go b/pkg/security/probe/model.go index aad01d55583b0..209caef3b6097 100644 --- a/pkg/security/probe/model.go +++ b/pkg/security/probe/model.go @@ -10,17 +10,7 @@ package probe import ( "fmt" - "path" - "sort" - "strings" - "syscall" - "time" - manager "github.com/DataDog/ebpf-manager" - "github.com/cilium/ebpf/perf" - "github.com/mailru/easyjson/jwriter" - - "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/security/probe/constantfetch" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/model" @@ -31,615 +21,32 @@ const ( ServiceEnvVar = "DD_SERVICE" ) -var eventZero Event - -// Model describes the data model for the runtime security agent probe events -type Model struct { - model.Model - probe *Probe -} - -// ValidateField validates the value of a field -func (m *Model) ValidateField(field eval.Field, fieldValue eval.FieldValue) error { - if err := m.Model.ValidateField(field, fieldValue); err != nil { - return err - } - - switch field { - case "bpf.map.name": - if offset, found := m.probe.constantOffsets[constantfetch.OffsetNameBPFMapStructName]; !found || offset == constantfetch.ErrorSentinel { - return fmt.Errorf("%s is not available on this kernel version", field) - } - - case "bpf.prog.name": - if offset, found := m.probe.constantOffsets[constantfetch.OffsetNameBPFProgAuxStructName]; !found || offset == constantfetch.ErrorSentinel { - return fmt.Errorf("%s is not available on this kernel version", field) - } - } - - return nil -} - -// NewEvent returns a new Event -func (m *Model) NewEvent() eval.Event { - return &Event{} -} - -// NetDeviceKey is used to uniquely identify a network device -type NetDeviceKey struct { - IfIndex uint32 - NetNS uint32 - NetworkDirection manager.TrafficType -} - -// Event describes a probe event -type Event struct { - model.Event - - resolvers *Resolvers - pathResolutionError error - scrubber *procutil.DataScrubber - probe *Probe -} - -// Retain the event -func (ev *Event) Retain() Event { - if ev.ProcessCacheEntry != nil { - ev.ProcessCacheEntry.Retain() - } - return *ev -} - -// Release the event -func (ev *Event) Release() { - if ev.ProcessCacheEntry != nil { - ev.ProcessCacheEntry.Release() - } -} - -// GetPathResolutionError returns the path resolution error as a string if there is one -func (ev *Event) GetPathResolutionError() error { - return ev.pathResolutionError -} - -// ResolveFilePath resolves the inode to a full path -func (ev *Event) ResolveFilePath(f *model.FileEvent) string { - if !f.IsPathnameStrResolved && len(f.PathnameStr) == 0 { - path, err := ev.resolvers.resolveFileFieldsPath(&f.FileFields, &ev.PIDContext, &ev.ContainerContext) - if err != nil { - ev.SetPathResolutionError(f, err) - } - f.SetPathnameStr(path) - } - - return f.PathnameStr -} - -// ResolveFileBasename resolves the inode to a full path -func (ev *Event) ResolveFileBasename(f *model.FileEvent) string { - if !f.IsBasenameStrResolved && len(f.BasenameStr) == 0 { - if f.PathnameStr != "" { - f.SetBasenameStr(path.Base(f.PathnameStr)) - } else { - f.SetBasenameStr(ev.resolvers.resolveBasename(&f.FileFields)) - } - } - return f.BasenameStr -} - -// ResolveFileFilesystem resolves the filesystem a file resides in -func (ev *Event) ResolveFileFilesystem(f *model.FileEvent) string { - if f.Filesystem == "" && !f.IsFileless() { - fs, err := ev.resolvers.MountResolver.ResolveFilesystem(f.FileFields.MountID, ev.PIDContext.Pid, ev.ContainerContext.ID) - if err != nil { - ev.SetPathResolutionError(f, err) - } - f.Filesystem = fs - } - return f.Filesystem -} - -// ResolveFileFieldsInUpperLayer resolves whether the file is in an upper layer -func (ev *Event) ResolveFileFieldsInUpperLayer(f *model.FileFields) bool { - return f.GetInUpperLayer() -} - -// ResolveXAttrName returns the string representation of the extended attribute name -func (ev *Event) ResolveXAttrName(e *model.SetXAttrEvent) string { - if len(e.Name) == 0 { - e.Name, _ = model.UnmarshalString(e.NameRaw[:], 200) - } - return e.Name -} - -// ResolveHelpers returns the list of eBPF helpers used by the current program -func (ev *Event) ResolveHelpers(e *model.BPFProgram) []uint32 { - return e.Helpers -} +var eventZero model.Event -// ResolveXAttrNamespace returns the string representation of the extended attribute namespace -func (ev *Event) ResolveXAttrNamespace(e *model.SetXAttrEvent) string { - if len(e.Namespace) == 0 { - ns, _, found := strings.Cut(ev.ResolveXAttrName(e), ".") - if found { - e.Namespace = ns - } - } - return e.Namespace -} - -// SetMountPoint set the mount point information -func (ev *Event) SetMountPoint(e *model.Mount) error { - var err error - e.MountPointStr, err = ev.resolvers.DentryResolver.Resolve(e.ParentMountID, e.ParentInode, 0, true) - return err -} - -// ResolveMountPoint resolves the mountpoint to a full path -func (ev *Event) ResolveMountPoint(e *model.Mount) (string, error) { - if len(e.MountPointStr) == 0 { - if err := ev.SetMountPoint(e); err != nil { - return "", err - } - } - return e.MountPointStr, nil -} - -// SetMountRoot set the mount point information -func (ev *Event) SetMountRoot(e *model.Mount) error { - var err error - e.RootStr, err = ev.resolvers.DentryResolver.Resolve(e.RootMountID, e.RootInode, 0, true) - return err -} - -// ResolveMountRoot resolves the mountpoint to a full path -func (ev *Event) ResolveMountRoot(e *model.Mount) (string, error) { - if len(e.RootStr) == 0 { - if err := ev.SetMountRoot(e); err != nil { - return "", err - } - } - return e.RootStr, nil -} - -func (ev *Event) ResolveMountPointPath(e *model.MountEvent) string { - if len(e.MountPointPath) == 0 { - mountPointPath, err := ev.resolvers.MountResolver.ResolveMountPath(e.MountID, ev.PIDContext.Pid, ev.ContainerContext.ID) - if err != nil { - e.MountPointPathResolutionError = err - return "" - } - e.MountPointPath = mountPointPath - } - return e.MountPointPath -} - -func (ev *Event) ResolveMountSourcePath(e *model.MountEvent) string { - if e.BindSrcMountID != 0 && len(e.MountSourcePath) == 0 { - bindSourceMountPath, err := ev.resolvers.MountResolver.ResolveMountPath(e.BindSrcMountID, ev.PIDContext.Pid, ev.ContainerContext.ID) - if err != nil { - e.MountSourcePathResolutionError = err - return "" - } - rootStr, err := ev.ResolveMountRoot(&e.Mount) - if err != nil { - e.MountSourcePathResolutionError = err - return "" - } - e.MountSourcePath = path.Join(bindSourceMountPath, rootStr) - } - return e.MountSourcePath -} - -// ResolveContainerID resolves the container ID of the event -func (ev *Event) ResolveContainerID(e *model.ContainerContext) string { - if len(e.ID) == 0 { - if entry, _ := ev.ResolveProcessCacheEntry(); entry != nil { - e.ID = entry.ContainerID - } - } - return e.ID -} - -// ResolveContainerTags resolves the container tags of the event -func (ev *Event) ResolveContainerTags(e *model.ContainerContext) []string { - if len(e.Tags) == 0 && e.ID != "" { - e.Tags = ev.resolvers.TagsResolver.Resolve(e.ID) - } - return e.Tags -} - -// UnmarshalProcessCacheEntry unmarshal a Process -func (ev *Event) UnmarshalProcessCacheEntry(data []byte) (int, error) { - entry := ev.resolvers.ProcessResolver.NewProcessCacheEntry(ev.PIDContext) - ev.ProcessCacheEntry = entry - - n, err := entry.Process.UnmarshalBinary(data) - if err != nil { - return n, err - } - entry.Process.ContainerID = ev.ContainerContext.ID - - return n, nil -} - -// ResolveFileFieldsUser resolves the user id of the file to a username -func (ev *Event) ResolveFileFieldsUser(e *model.FileFields) string { - if len(e.User) == 0 { - e.User, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.UID)) - } - return e.User -} - -// ResolveFileFieldsGroup resolves the group id of the file to a group name -func (ev *Event) ResolveFileFieldsGroup(e *model.FileFields) string { - if len(e.Group) == 0 { - e.Group, _ = ev.resolvers.UserGroupResolver.ResolveGroup(int(e.GID)) - } - return e.Group -} - -// ResolveRights resolves the rights of a file -func (ev *Event) ResolveRights(e *model.FileFields) int { - return int(e.Mode) & (syscall.S_ISUID | syscall.S_ISGID | syscall.S_ISVTX | syscall.S_IRWXU | syscall.S_IRWXG | syscall.S_IRWXO) -} - -// ResolveChownUID resolves the user id of a chown event to a username -func (ev *Event) ResolveChownUID(e *model.ChownEvent) string { - if len(e.User) == 0 { - e.User, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.UID)) - } - return e.User -} - -// ResolveChownGID resolves the group id of a chown event to a group name -func (ev *Event) ResolveChownGID(e *model.ChownEvent) string { - if len(e.Group) == 0 { - e.Group, _ = ev.resolvers.UserGroupResolver.ResolveGroup(int(e.GID)) - } - return e.Group -} - -// ResolveProcessCreatedAt resolves process creation time -func (ev *Event) ResolveProcessCreatedAt(e *model.Process) uint64 { - return uint64(e.ExecTime.UnixNano()) -} - -// ResolveProcessArgv0 resolves the first arg of the event -func (ev *Event) ResolveProcessArgv0(process *model.Process) string { - arg0, _ := ev.resolvers.ProcessResolver.GetProcessArgv0(process) - return arg0 -} - -// ResolveProcessArgs resolves the args of the event -func (ev *Event) ResolveProcessArgs(process *model.Process) string { - return strings.Join(ev.ResolveProcessArgv(process), " ") -} - -// ResolveProcessArgv resolves the args of the event as an array -func (ev *Event) ResolveProcessArgv(process *model.Process) []string { - argv, _ := ev.resolvers.ProcessResolver.GetProcessArgv(process) - return argv -} - -// ResolveProcessEnvp resolves the envp of the event as an array -func (ev *Event) ResolveProcessEnvp(process *model.Process) []string { - envp, _ := ev.resolvers.ProcessResolver.GetProcessEnvp(process) - return envp -} - -// ResolveProcessArgsTruncated returns whether the args are truncated -func (ev *Event) ResolveProcessArgsTruncated(process *model.Process) bool { - _, truncated := ev.resolvers.ProcessResolver.GetProcessArgv(process) - return truncated -} - -// ResolveProcessArgsFlags resolves the arguments flags of the event -func (ev *Event) ResolveProcessArgsFlags(process *model.Process) (flags []string) { - for _, arg := range ev.ResolveProcessArgv(process) { - if len(arg) > 1 && arg[0] == '-' { - isFlag := true - name := arg[1:] - if len(name) >= 1 && name[0] == '-' { - name = name[1:] - isFlag = false - } - - isOption := false - for _, r := range name { - isFlag = isFlag && model.IsAlphaNumeric(r) - isOption = isOption || r == '=' - } - - if len(name) > 0 { - if isFlag { - for _, r := range name { - flags = append(flags, string(r)) - } - } - if !isOption && len(name) > 1 { - flags = append(flags, name) +// NewModel returns a new model with some extra field validation +func NewModel(probe *Probe) *model.Model { + return &model.Model{ + ExtraValidateFieldFnc: func(field eval.Field, fieldValue eval.FieldValue) error { + switch field { + case "bpf.map.name": + if offset, found := probe.constantOffsets[constantfetch.OffsetNameBPFMapStructName]; !found || offset == constantfetch.ErrorSentinel { + return fmt.Errorf("%s is not available on this kernel version", field) } - } - } - } - return -} -// ResolveProcessArgsOptions resolves the arguments options of the event -func (ev *Event) ResolveProcessArgsOptions(process *model.Process) (options []string) { - args := ev.ResolveProcessArgv(process) - for i := 0; i < len(args); i++ { - arg := args[i] - if len(arg) > 1 && arg[0] == '-' { - name := arg[1:] - if len(name) >= 1 && name[0] == '-' { - name = name[1:] - } - if len(name) > 0 && model.IsAlphaNumeric(rune(name[0])) { - if index := strings.IndexRune(name, '='); index == -1 { - if i < len(args)-1 && (len(args[i+1]) == 0 || args[i+1][0] != '-') { - options = append(options, name+"="+args[i+1]) - i++ - } - } else { - options = append(options, name) + case "bpf.prog.name": + if offset, found := probe.constantOffsets[constantfetch.OffsetNameBPFProgAuxStructName]; !found || offset == constantfetch.ErrorSentinel { + return fmt.Errorf("%s is not available on this kernel version", field) } } - } - } - return -} - -// ResolveProcessEnvsTruncated returns whether the envs are truncated -func (ev *Event) ResolveProcessEnvsTruncated(process *model.Process) bool { - _, truncated := ev.resolvers.ProcessResolver.GetProcessEnvs(process) - return truncated -} - -// ResolveProcessEnvs resolves the envs of the event -func (ev *Event) ResolveProcessEnvs(process *model.Process) []string { - envs, _ := ev.resolvers.ProcessResolver.GetProcessEnvs(process) - return envs -} - -// ResolveSetuidUser resolves the user of the Setuid event -func (ev *Event) ResolveSetuidUser(e *model.SetuidEvent) string { - if len(e.User) == 0 && ev != nil { - e.User, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.UID)) - } - return e.User -} - -// ResolveSetuidEUser resolves the effective user of the Setuid event -func (ev *Event) ResolveSetuidEUser(e *model.SetuidEvent) string { - if len(e.EUser) == 0 && ev != nil { - e.EUser, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.EUID)) - } - return e.EUser -} - -// ResolveSetuidFSUser resolves the file-system user of the Setuid event -func (ev *Event) ResolveSetuidFSUser(e *model.SetuidEvent) string { - if len(e.FSUser) == 0 && ev != nil { - e.FSUser, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.FSUID)) - } - return e.FSUser -} - -// ResolveSetgidGroup resolves the group of the Setgid event -func (ev *Event) ResolveSetgidGroup(e *model.SetgidEvent) string { - if len(e.Group) == 0 && ev != nil { - e.Group, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.GID)) - } - return e.Group -} - -// ResolveSetgidEGroup resolves the effective group of the Setgid event -func (ev *Event) ResolveSetgidEGroup(e *model.SetgidEvent) string { - if len(e.EGroup) == 0 && ev != nil { - e.EGroup, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.EGID)) - } - return e.EGroup -} - -// ResolveSetgidFSGroup resolves the file-system group of the Setgid event -func (ev *Event) ResolveSetgidFSGroup(e *model.SetgidEvent) string { - if len(e.FSGroup) == 0 && ev != nil { - e.FSGroup, _ = ev.resolvers.UserGroupResolver.ResolveUser(int(e.FSGID)) - } - return e.FSGroup -} - -// ResolveSELinuxBoolName resolves the boolean name of the SELinux event -func (ev *Event) ResolveSELinuxBoolName(e *model.SELinuxEvent) string { - if e.EventKind != model.SELinuxBoolChangeEventKind { - return "" - } - - if len(ev.SELinux.BoolName) == 0 { - ev.SELinux.BoolName = ev.resolvers.resolveBasename(&e.File.FileFields) - } - return ev.SELinux.BoolName -} - -func (ev *Event) String() string { - d, err := ev.MarshalJSON() - if err != nil { - return err.Error() - } - return string(d) -} - -// SetPathResolutionError sets the Event.pathResolutionError -func (ev *Event) SetPathResolutionError(fileFields *model.FileEvent, err error) { - fileFields.PathResolutionError = err - ev.pathResolutionError = err -} - -// MarshalJSON returns the JSON encoding of the event -func (ev *Event) MarshalJSON() ([]byte, error) { - s := NewEventSerializer(ev) - w := &jwriter.Writer{ - Flags: jwriter.NilSliceAsEmpty | jwriter.NilMapAsEmpty, - } - s.MarshalEasyJSON(w) - return w.BuildBytes() -} - -// ExtractEventInfo extracts cpu and timestamp from the raw data event -func ExtractEventInfo(record *perf.Record) (QuickInfo, error) { - if len(record.RawSample) < 16 { - return QuickInfo{}, model.ErrNotEnoughData - } - - return QuickInfo{ - cpu: model.ByteOrder.Uint64(record.RawSample[0:8]), - timestamp: model.ByteOrder.Uint64(record.RawSample[8:16]), - }, nil -} -// ResolveEventTimestamp resolves the monolitic kernel event timestamp to an absolute time -func (ev *Event) ResolveEventTimestamp() time.Time { - if ev.Timestamp.IsZero() { - ev.Timestamp = ev.resolvers.TimeResolver.ResolveMonotonicTimestamp(ev.TimestampRaw) - if ev.Timestamp.IsZero() { - ev.Timestamp = time.Now() - } - } - return ev.Timestamp -} - -// NewEmptyProcessCacheEntry returns an empty process cache entry for kworker events -func (ev *Event) NewEmptyProcessCacheEntry() *model.ProcessCacheEntry { - return &model.ProcessCacheEntry{ - ProcessContext: model.ProcessContext{ - Process: model.Process{ - PIDContext: ev.PIDContext, - }, + return nil }, } } -// ResolveProcessCacheEntry queries the ProcessResolver to retrieve the ProcessContext of the event -func (ev *Event) ResolveProcessCacheEntry() (*model.ProcessCacheEntry, bool) { - if ev.PIDContext.IsKworker { - return ev.NewEmptyProcessCacheEntry(), false - } - - if ev.ProcessCacheEntry == nil { - ev.ProcessCacheEntry = ev.resolvers.ProcessResolver.Resolve(ev.PIDContext.Pid, ev.PIDContext.Tid) - } - - if ev.ProcessCacheEntry == nil { - // keep the original PIDContext - ev.ProcessCacheEntry = model.NewProcessCacheEntry(nil) - ev.ProcessCacheEntry.PIDContext = ev.PIDContext - - ev.ProcessCacheEntry.FileEvent.SetPathnameStr("") - ev.ProcessCacheEntry.FileEvent.SetBasenameStr("") - - // mark interpreter as resolved too - ev.ProcessCacheEntry.LinuxBinprm.FileEvent.SetPathnameStr("") - ev.ProcessCacheEntry.LinuxBinprm.FileEvent.SetBasenameStr("") - - return ev.ProcessCacheEntry, false - } - - return ev.ProcessCacheEntry, true -} - -// GetProcessServiceTag returns the service tag based on the process context -func (ev *Event) GetProcessServiceTag() string { - entry, _ := ev.ResolveProcessCacheEntry() - if entry == nil { - return "" - } - - var serviceValues []string - - // first search in the process context itself - if entry.EnvsEntry != nil { - if service := entry.EnvsEntry.Get(ServiceEnvVar); service != "" { - serviceValues = append(serviceValues, service) - } - } - - inContainer := entry.ContainerID != "" - - // while in container check for each ancestor - for ancestor := entry.Ancestor; ancestor != nil; ancestor = ancestor.Ancestor { - if inContainer && ancestor.ContainerID == "" { - break - } - - if ancestor.EnvsEntry != nil { - if service := ancestor.EnvsEntry.Get(ServiceEnvVar); service != "" { - serviceValues = append(serviceValues, service) - } - } - } - - return bestGuessServiceTag(serviceValues) -} - -func bestGuessServiceTag(serviceValues []string) string { - if len(serviceValues) == 0 { - return "" - } - - firstGuess := serviceValues[0] - - // first we sort base on len, biggest len first - sort.Slice(serviceValues, func(i, j int) bool { - return len(serviceValues[j]) < len(serviceValues[i]) // reverse - }) - - // we then compare [i] and [i + 1] to check if [i + 1] is a prefix of [i] - for i := 0; i < len(serviceValues)-1; i++ { - if !strings.HasPrefix(serviceValues[i], serviceValues[i+1]) { - // if it's not a prefix it means we have multiple disjoints services - // we then return the first guess, closest in the process tree - return firstGuess - } - } - - // we have a prefix chain, let's return the biggest one - return serviceValues[0] -} - -// ResolveNetworkDeviceIfName returns the network iterface name from the network context -func (ev *Event) ResolveNetworkDeviceIfName(device *model.NetworkDeviceContext) string { - if len(device.IfName) == 0 && ev.probe != nil { - key := NetDeviceKey{ - NetNS: device.NetNS, - IfIndex: device.IfIndex, - NetworkDirection: manager.Egress, - } - - ev.probe.tcProgramsLock.RLock() - defer ev.probe.tcProgramsLock.RUnlock() - - tcProbe, ok := ev.probe.tcPrograms[key] - if !ok { - key.NetworkDirection = manager.Ingress - tcProbe = ev.probe.tcPrograms[key] - } - - if tcProbe != nil { - device.IfName = tcProbe.IfName - } - } - - return device.IfName -} - // NewEvent returns a new event -func NewEvent(resolvers *Resolvers, scrubber *procutil.DataScrubber, probe *Probe) *Event { - return &Event{ - Event: model.Event{}, - resolvers: resolvers, - scrubber: scrubber, - probe: probe, +func NewEvent(fh *FieldHandlers) *model.Event { + return &model.Event{ + FieldHandlers: fh, } } diff --git a/pkg/security/probe/model_test.go b/pkg/security/probe/model_test.go index d32a3bd67d3be..03abe4aa2f205 100644 --- a/pkg/security/probe/model_test.go +++ b/pkg/security/probe/model_test.go @@ -9,62 +9,17 @@ package probe import ( - "errors" - "net" - "reflect" "sort" "testing" "github.com/DataDog/datadog-agent/pkg/process/procutil" "github.com/DataDog/datadog-agent/pkg/security/config" - "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-go/v5/statsd" manager "github.com/DataDog/ebpf-manager" "github.com/stretchr/testify/assert" ) -func TestSetFieldValue(t *testing.T) { - event := &Event{} - var readOnlyError *eval.ErrFieldReadOnly - - for _, field := range event.GetFields() { - kind, err := event.GetFieldType(field) - if err != nil { - t.Fatal(err) - } - - switch kind { - case reflect.String: - if err = event.SetFieldValue(field, "aaa"); err != nil && !errors.As(err, &readOnlyError) { - t.Error(err) - } - case reflect.Int: - if err = event.SetFieldValue(field, 123); err != nil && !errors.As(err, &readOnlyError) { - t.Error(err) - } - case reflect.Bool: - if err = event.SetFieldValue(field, true); err != nil && !errors.As(err, &readOnlyError) { - t.Error(err) - } - case reflect.Struct: - switch field { - case "network.destination.ip", "network.source.ip": - _, ipnet, err := net.ParseCIDR("127.0.0.1/24") - if err != nil { - t.Error(err) - } - - if err = event.SetFieldValue(field, *ipnet); err != nil { - t.Error(err) - } - } - default: - t.Errorf("type of field %s unknown: %v", field, kind) - } - } -} - func TestProcessArgsFlags(t *testing.T) { var argsEntry model.ArgsEntry argsEntry.SetValues([]string{ @@ -73,23 +28,23 @@ func TestProcessArgsFlags(t *testing.T) { "-9", "-", "--", }) - e := Event{ - Event: model.Event{ - Exec: model.ExecEvent{ - Process: &model.Process{ - ArgsEntry: &argsEntry, - }, + resolver, _ := NewProcessResolver(&manager.Manager{}, &config.Config{}, &statsd.NoOpClient{}, + &procutil.DataScrubber{}, NewProcessResolverOpts(nil)) + + e := model.Event{ + Exec: model.ExecEvent{ + Process: &model.Process{ + ArgsEntry: &argsEntry, + }, + }, + FieldHandlers: &FieldHandlers{ + resolvers: &Resolvers{ + ProcessResolver: resolver, }, }, } - resolver, _ := NewProcessResolver(&manager.Manager{}, &config.Config{}, &statsd.NoOpClient{}, - &procutil.DataScrubber{}, nil, NewProcessResolverOpts(nil)) - e.resolvers = &Resolvers{ - ProcessResolver: resolver, - } - - flags := e.ResolveProcessArgsFlags(e.Exec.Process) + flags := e.FieldHandlers.ResolveProcessArgsFlags(&e, e.Exec.Process) sort.Strings(flags) hasFlag := func(flags []string, flag string) bool { @@ -134,23 +89,23 @@ func TestProcessArgsOptions(t *testing.T) { "--", "---", "-9", }) - e := Event{ - Event: model.Event{ - Exec: model.ExecEvent{ - Process: &model.Process{ - ArgsEntry: &argsEntry, - }, + resolver, _ := NewProcessResolver(&manager.Manager{}, &config.Config{}, &statsd.NoOpClient{}, + &procutil.DataScrubber{}, NewProcessResolverOpts(nil)) + + e := model.Event{ + Exec: model.ExecEvent{ + Process: &model.Process{ + ArgsEntry: &argsEntry, + }, + }, + FieldHandlers: &FieldHandlers{ + resolvers: &Resolvers{ + ProcessResolver: resolver, }, }, } - resolver, _ := NewProcessResolver(&manager.Manager{}, &config.Config{}, &statsd.NoOpClient{}, - &procutil.DataScrubber{}, nil, NewProcessResolverOpts(nil)) - e.resolvers = &Resolvers{ - ProcessResolver: resolver, - } - - options := e.ResolveProcessArgsOptions(e.Exec.Process) + options := e.FieldHandlers.ResolveProcessArgsOptions(&e, e.Exec.Process) sort.Strings(options) hasOption := func(options []string, option string) bool { diff --git a/pkg/security/probe/namespace_resolver.go b/pkg/security/probe/namespace_resolver.go index 24029df116140..8fcdb46a3a430 100644 --- a/pkg/security/probe/namespace_resolver.go +++ b/pkg/security/probe/namespace_resolver.go @@ -165,7 +165,7 @@ func (nn *NetworkNamespace) dequeueNetworkDevices(probe *Probe) { defer handle.Close() for _, queuedDevice := range nn.networkDevicesQueue { - _ = probe.setupNewTCClassifierWithNetNSHandle(queuedDevice, handle) + _ = probe.resolvers.TCResolver.SetupNewTCClassifierWithNetNSHandle(queuedDevice, handle, probe.Manager) } nn.flushNetworkDevicesQueue() } @@ -214,7 +214,7 @@ func NewNamespaceResolver(probe *Probe) (*NamespaceResolver, error) { lru, err := simplelru.NewLRU(1024, func(key uint32, value *NetworkNamespace) { nr.flushNetworkNamespace(value) - nr.probe.flushNetworkNamespace(value) + nr.probe.resolvers.TCResolver.FlushNetworkNamespaceID(value.nsID, nr.probe.Manager) }) if err != nil { return nil, err @@ -326,7 +326,7 @@ func (nr *NamespaceResolver) snapshotNetworkDevices(netns *NetworkNamespace) int NetNS: netns.nsID, } - if err = nr.probe.setupNewTCClassifierWithNetNSHandle(device, handle); err == nil { + if err = nr.probe.resolvers.TCResolver.SetupNewTCClassifierWithNetNSHandle(device, handle, nr.probe.Manager); err == nil { // ignore interfaces that are lazily deleted if !nr.IsLazyDeletionInterface(device.Name) && attrs.HardwareAddr.String() != "" { attachedDeviceCountNoLazyDeletion++ @@ -406,7 +406,7 @@ func (nr *NamespaceResolver) flushNamespaces(ctx context.Context) { case <-ctx.Done(): return case <-ticker.C: - probesCount := nr.probe.flushInactiveProbes() + probesCount := nr.probe.resolvers.TCResolver.FlushInactiveProbes(nr.probe.Manager, nr.IsLazyDeletionInterface) // There is a possible race condition if we lose all network device creations but do notice the new network // namespace: we will create a handle that will never be flushed by `nr.probe.flushInactiveNamespaces()`. @@ -472,7 +472,7 @@ func (nr *NamespaceResolver) preventNetworkNamespaceDrift(probesCount map[uint32 deviceCountNoLoopbackNoDummy := nr.snapshotNetworkDevices(netns) if deviceCountNoLoopbackNoDummy == 0 { nr.flushNetworkNamespace(netns) - nr.probe.flushNetworkNamespace(netns) + nr.probe.resolvers.TCResolver.FlushNetworkNamespaceID(netns.nsID, nr.probe.Manager) netns.Unlock() continue } diff --git a/pkg/security/probe/opts.go b/pkg/security/probe/opts.go new file mode 100644 index 0000000000000..a04648fd00d78 --- /dev/null +++ b/pkg/security/probe/opts.go @@ -0,0 +1,34 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux +// +build linux + +package probe + +import ( + "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" + "github.com/DataDog/datadog-go/v5/statsd" +) + +// Opts defines some probe options +type Opts struct { + // DontDiscardRuntime do not discard the runtime. Mostly used by functional tests + DontDiscardRuntime bool + // StatsdClient to be used for probe stats + StatsdClient statsd.ClientInterface + // EventTypeEnabled defines event types enabled + EventTypeEnabled map[eval.EventType]bool +} + +func (o *Opts) normalize() { + if o.StatsdClient == nil { + o.StatsdClient = &statsd.NoOpClient{} + } + + if o.EventTypeEnabled == nil || len(o.EventTypeEnabled) == 0 { + o.EventTypeEnabled = map[eval.EventType]bool{"*": true} + } +} diff --git a/pkg/security/probe/perf_buffer_monitor.go b/pkg/security/probe/perf_buffer_monitor.go index 6e6383b50d7f8..52e744ccef41b 100644 --- a/pkg/security/probe/perf_buffer_monitor.go +++ b/pkg/security/probe/perf_buffer_monitor.go @@ -51,6 +51,7 @@ func (s *PerfMapStats) UnmarshalBinary(data []byte) error { } // PerfBufferMonitor holds statistics about the number of lost and received events +// //nolint:structcheck,unused type PerfBufferMonitor struct { // probe is a pointer to the Probe diff --git a/pkg/security/probe/perfmap.go b/pkg/security/probe/perfmap.go index 7b0165a3e34d1..25d45f12a8636 100644 --- a/pkg/security/probe/perfmap.go +++ b/pkg/security/probe/perfmap.go @@ -20,6 +20,7 @@ import ( "github.com/cilium/ebpf/perf" "github.com/DataDog/datadog-agent/pkg/security/config" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/seclog" ) @@ -85,6 +86,18 @@ func (m *OrderedPerfMap) Resume() error { return m.perfMap.Resume() } +// ExtractEventInfo extracts cpu and timestamp from the raw data event +func ExtractEventInfo(record *perf.Record) (QuickInfo, error) { + if len(record.RawSample) < 16 { + return QuickInfo{}, model.ErrNotEnoughData + } + + return QuickInfo{ + cpu: model.ByteOrder.Uint64(record.RawSample[0:8]), + timestamp: model.ByteOrder.Uint64(record.RawSample[8:16]), + }, nil +} + // NewOrderedPerfMap returned a new ordered perf map. func NewOrderedPerfMap(ctx context.Context, handler func(int, []byte), statsdClient statsd.ClientInterface) (*OrderedPerfMap, error) { recordPool := NewRecordPool() diff --git a/pkg/security/probe/probe.go b/pkg/security/probe/probe.go index 738dedb4899e5..d089f9075654f 100644 --- a/pkg/security/probe/probe.go +++ b/pkg/security/probe/probe.go @@ -15,15 +15,11 @@ import ( "os" "path/filepath" "runtime" - "strings" "sync" "time" - "github.com/DataDog/datadog-go/v5/statsd" - manager "github.com/DataDog/ebpf-manager" "github.com/hashicorp/go-multierror" "github.com/moby/sys/mountinfo" - "github.com/vishvananda/netlink" "golang.org/x/exp/slices" "golang.org/x/sys/unix" "golang.org/x/time/rate" @@ -38,7 +34,6 @@ import ( kernel "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" "github.com/DataDog/datadog-agent/pkg/security/ebpf/probes" "github.com/DataDog/datadog-agent/pkg/security/events" - "github.com/DataDog/datadog-agent/pkg/security/metrics" "github.com/DataDog/datadog-agent/pkg/security/probe/constantfetch" "github.com/DataDog/datadog-agent/pkg/security/probe/erpc" "github.com/DataDog/datadog-agent/pkg/security/probe/managerhelper" @@ -49,6 +44,8 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/seclog" "github.com/DataDog/datadog-agent/pkg/security/utils" utilkernel "github.com/DataDog/datadog-agent/pkg/util/kernel" + "github.com/DataDog/datadog-go/v5/statsd" + manager "github.com/DataDog/ebpf-manager" ) // ActivityDumpHandler represents an handler for the activity dumps sent by the probe @@ -58,7 +55,7 @@ type ActivityDumpHandler interface { // EventHandler represents an handler for the events sent by the probe type EventHandler interface { - HandleEvent(event *Event) + HandleEvent(event *model.Event) HandleCustomEvent(rule *rules.Rule, event *events.CustomEvent) } @@ -72,12 +69,13 @@ type EventStream interface { } // NotifyDiscarderPushedCallback describe the callback used to retrieve pushed discarders information -type NotifyDiscarderPushedCallback func(eventType string, event *Event, field string) +type NotifyDiscarderPushedCallback func(eventType string, event *model.Event, field string) // Probe represents the runtime security eBPF probe in charge of // setting up the required kProbes and decoding events sent from the kernel type Probe struct { // Constants and configuration + Opts Opts Manager *manager.Manager managerOptions manager.Options Config *config.Config @@ -89,12 +87,15 @@ type Probe struct { cancelFnc context.CancelFunc wg sync.WaitGroup // Events section - handlers [model.MaxAllEventType][]EventHandler - monitor *Monitor - resolvers *Resolvers - event *Event + handlers [model.MaxAllEventType][]EventHandler + monitor *Monitor + resolvers *Resolvers + event *model.Event + fieldHandlers *FieldHandlers + scrubber *procutil.DataScrubber + + // Ring eventStream EventStream - scrubber *procutil.DataScrubber // ActivityDumps section activityDumpHandler ActivityDumpHandler @@ -112,10 +113,6 @@ type Probe struct { constantOffsets map[string]uint64 runtimeCompiled bool - // network section - tcProgramsLock sync.RWMutex - tcPrograms map[NetDeviceKey]*manager.Probe - isRuntimeDiscarded bool } @@ -224,20 +221,11 @@ func (p *Probe) VerifyEnvironment() *multierror.Error { return err } -func isSyscallWrapperRequired() (bool, error) { - openSyscall, err := manager.GetSyscallFnName("open") - if err != nil { - return false, err - } - - return !strings.HasPrefix(openSyscall, "SyS_") && !strings.HasPrefix(openSyscall, "sys_"), nil -} - // Init initializes the probe func (p *Probe) Init() error { p.startTime = time.Now() - useSyscallWrapper, err := isSyscallWrapperRequired() + useSyscallWrapper, err := ebpf.IsSyscallWrapperRequired() if err != nil { return err } @@ -265,6 +253,10 @@ func (p *Probe) Init() error { } p.managerOptions.ActivatedProbes = append(p.managerOptions.ActivatedProbes, probes.SnapshotSelectors...) + if p.Config.AgentMonitoringEvents { + p.managerOptions.ActivatedProbes = append(p.managerOptions.ActivatedProbes, probes.GetSelectorsPerEventType()["*"]...) + + } if err := p.Manager.InitWithOptions(bytecodeReader, p.managerOptions); err != nil { return fmt.Errorf("failed to init manager: %w", err) @@ -317,8 +309,11 @@ func (p *Probe) AddEventHandler(eventType model.EventType, handler EventHandler) } // DispatchEvent sends an event to the probe event handler -func (p *Probe) DispatchEvent(event *Event) { - seclog.TraceTagf(event.GetEventType(), "Dispatching event %s", event) +func (p *Probe) DispatchEvent(event *model.Event) { + traceEvent("Dispatching event %s", func() ([]byte, model.EventType, error) { + eventJSON, err := MarshalEvent(event, p) + return eventJSON, event.GetEventType(), err + }) // send wildcard first for _, handler := range p.handlers[model.UnknownEventType] { @@ -343,7 +338,10 @@ func (p *Probe) DispatchActivityDump(dump *api.ActivityDumpStreamMessage) { // DispatchCustomEvent sends a custom event to the probe event handler func (p *Probe) DispatchCustomEvent(rule *rules.Rule, event *events.CustomEvent) { - seclog.TraceTagf(event.GetEventType(), "Dispatching custom event %s", event) + traceEvent("Dispatching custom event %s", func() ([]byte, model.EventType, error) { + eventJSON, err := MarshalCustomEvent(event) + return eventJSON, event.GetEventType(), err + }) // send specific event if p.Config.AgentMonitoringEvents { @@ -359,18 +357,23 @@ func (p *Probe) DispatchCustomEvent(rule *rules.Rule, event *events.CustomEvent) } } -func (p *Probe) sendTCProgramsStats() { - p.tcProgramsLock.RLock() - defer p.tcProgramsLock.RUnlock() +func traceEvent(fmt string, marshaller func() ([]byte, model.EventType, error)) { + if !seclog.DefaultLogger.IsTracing() { + return + } - if val := float64(len(p.tcPrograms)); val > 0 { - _ = p.StatsdClient.Gauge(metrics.MetricTCProgram, val, []string{}, 1.0) + eventJSON, eventType, err := marshaller() + if err != nil { + seclog.DefaultLogger.TraceTagf(eventType, fmt, err) + return } + + seclog.DefaultLogger.TraceTagf(eventType, fmt, string(eventJSON)) } // SendStats sends statistics about the probe to Datadog func (p *Probe) SendStats() error { - p.sendTCProgramsStats() + p.resolvers.TCResolver.SendTCProgramsStats(p.StatsdClient) return p.monitor.SendStats() } @@ -380,12 +383,13 @@ func (p *Probe) GetMonitor() *Monitor { return p.monitor } -func (p *Probe) zeroEvent() *Event { +func (p *Probe) zeroEvent() *model.Event { *p.event = eventZero + p.event.FieldHandlers = p.fieldHandlers return p.event } -func (p *Probe) unmarshalContexts(data []byte, event *Event) (int, error) { +func (p *Probe) unmarshalContexts(data []byte, event *model.Event) (int, error) { read, err := model.UnmarshalBinary(data, &event.PIDContext, &event.SpanContext, &event.ContainerContext) if err != nil { return 0, err @@ -405,6 +409,20 @@ func (p *Probe) invalidateDentry(mountID uint32, inode uint64) { p.resolvers.DentryResolver.DelCacheEntry(mountID, inode) } +// UnmarshalProcessCacheEntry unmarshal a Process +func (p *Probe) UnmarshalProcessCacheEntry(ev *model.Event, data []byte) (int, error) { + entry := p.resolvers.ProcessResolver.NewProcessCacheEntry(ev.PIDContext) + ev.ProcessCacheEntry = entry + + n, err := entry.Process.UnmarshalBinary(data) + if err != nil { + return n, err + } + entry.Process.ContainerID = ev.ContainerContext.ID + + return n, nil +} + func (p *Probe) handleEvent(CPU int, data []byte) { offset := 0 event := p.zeroEvent() @@ -612,7 +630,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { return } case model.ForkEventType: - if _, err = event.UnmarshalProcessCacheEntry(data[offset:]); err != nil { + if _, err = p.UnmarshalProcessCacheEntry(event, data[offset:]); err != nil { seclog.Errorf("failed to decode fork event: %s (offset %d, len %d)", err, offset, dataLen) return } @@ -627,7 +645,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { p.resolvers.ProcessResolver.AddForkEntry(event.ProcessCacheEntry) case model.ExecEventType: // unmarshal and fill event.processCacheEntry - if _, err = event.UnmarshalProcessCacheEntry(data[offset:]); err != nil { + if _, err = p.UnmarshalProcessCacheEntry(event, data[offset:]); err != nil { seclog.Errorf("failed to decode exec event: %s (offset %d, len %d)", err, offset, len(data)) return } @@ -635,7 +653,8 @@ func (p *Probe) handleEvent(CPU int, data []byte) { if err = p.resolvers.ProcessResolver.ResolveNewProcessCacheEntry(event.ProcessCacheEntry, &event.ContainerContext); err != nil { seclog.Debugf("failed to resolve new process cache entry context: %s", err) - if errors.Is(err, &ErrPathResolution{}) { + var errResolution *ErrPathResolution + if errors.As(err, &errResolution) { event.SetPathResolutionError(&event.ProcessCacheEntry.FileEvent, err) } } @@ -650,7 +669,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { } var exists bool - event.ProcessCacheEntry, exists = event.ResolveProcessCacheEntry() + event.ProcessCacheEntry, exists = p.fieldHandlers.ResolveProcessCacheEntry(event) if !exists { // no need to dispatch an exit event that don't have the corresponding cache entry return @@ -659,7 +678,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { // Use the event timestamp as exit time // The local process cache hasn't been updated yet with the exit time when the exit event is first seen // The pid_cache kernel map has the exit_time but it's only accessed if there's a local miss - event.ProcessCacheEntry.Process.ExitTime = event.ResolveEventTimestamp() + event.ProcessCacheEntry.Process.ExitTime = p.fieldHandlers.ResolveEventTimestamp(event) event.Exit.Process = &event.ProcessCacheEntry.Process case model.SetuidEventType: if _, err = event.SetUID.UnmarshalBinary(data[offset:]); err != nil { @@ -695,10 +714,14 @@ func (p *Probe) handleEvent(CPU int, data []byte) { return } // resolve tracee process context - cacheEntry := event.resolvers.ProcessResolver.Resolve(event.PTrace.PID, event.PTrace.PID) - if cacheEntry != nil { - event.PTrace.Tracee = &cacheEntry.ProcessContext + var pce *model.ProcessCacheEntry + if event.PTrace.PID > 0 { // pid can be 0 for a PTRACE_TRACEME request + pce = p.resolvers.ProcessResolver.Resolve(event.PTrace.PID, event.PTrace.PID, 0) + } + if pce == nil { + pce = model.NewEmptyProcessCacheEntry(event.PTrace.PID, event.PTrace.PID, false) } + event.PTrace.Tracee = &pce.ProcessContext case model.MMapEventType: if _, err = event.MMap.UnmarshalBinary(data[offset:]); err != nil { seclog.Errorf("failed to decode mmap event: %s (offset %d, len %d)", err, offset, len(data)) @@ -736,10 +759,14 @@ func (p *Probe) handleEvent(CPU int, data []byte) { return } // resolve target process context - cacheEntry := event.resolvers.ProcessResolver.Resolve(event.Signal.PID, event.Signal.PID) - if cacheEntry != nil { - event.Signal.Target = &cacheEntry.ProcessContext + var pce *model.ProcessCacheEntry + if event.Signal.PID > 0 { // Linux accepts a kill syscall with both negative and zero pid + pce = p.resolvers.ProcessResolver.Resolve(event.Signal.PID, event.Signal.PID, 0) } + if pce == nil { + pce = model.NewEmptyProcessCacheEntry(event.Signal.PID, event.Signal.PID, false) + } + event.Signal.Target = &pce.ProcessContext case model.SpliceEventType: if _, err = event.Splice.UnmarshalBinary(data[offset:]); err != nil { seclog.Errorf("failed to decode splice event: %s (offset %d, len %d)", err, offset, len(data)) @@ -783,7 +810,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { } // resolve the process cache entry - event.ProcessCacheEntry, _ = event.ResolveProcessCacheEntry() + event.ProcessCacheEntry, _ = p.fieldHandlers.ResolveProcessCacheEntry(event) // use ProcessCacheEntry process context as process context event.ProcessContext = &event.ProcessCacheEntry.ProcessContext @@ -793,7 +820,7 @@ func (p *Probe) handleEvent(CPU int, data []byte) { } if eventType == model.ExitEventType { - defer p.resolvers.ProcessResolver.DeleteEntry(event.ProcessCacheEntry.Pid, event.ResolveEventTimestamp()) + defer p.resolvers.ProcessResolver.DeleteEntry(event.ProcessCacheEntry.Pid, p.fieldHandlers.ResolveEventTimestamp(event)) } p.DispatchEvent(event) @@ -802,13 +829,6 @@ func (p *Probe) handleEvent(CPU int, data []byte) { p.resolvers.ProcessResolver.DequeueExited() } -// OnRuleMatch is called when a rule matches just before sending -func (p *Probe) OnRuleMatch(rule *rules.Rule, event *Event) { - // ensure that all the fields are resolved before sending - event.ResolveContainerID(&event.ContainerContext) - event.ResolveContainerTags(&event.ContainerContext) -} - // AddNewNotifyDiscarderPushedCallback add a callback to the list of func that have to be called when a discarder is pushed to kernel func (p *Probe) AddNewNotifyDiscarderPushedCallback(cb NotifyDiscarderPushedCallback) { p.notifyDiscarderPushedCallbacksLock.Lock() @@ -818,16 +838,16 @@ func (p *Probe) AddNewNotifyDiscarderPushedCallback(cb NotifyDiscarderPushedCall } // OnNewDiscarder is called when a new discarder is found -func (p *Probe) OnNewDiscarder(rs *rules.RuleSet, event *Event, field eval.Field, eventType eval.EventType) error { +func (p *Probe) OnNewDiscarder(rs *rules.RuleSet, ev *model.Event, field eval.Field, eventType eval.EventType) { // discarders disabled if !p.Config.EnableDiscarders { - return nil + return } if p.isRuntimeDiscarded { - fakeTime := time.Unix(0, int64(event.TimestampRaw)) + fakeTime := time.Unix(0, int64(ev.TimestampRaw)) if !p.discarderRateLimiter.AllowN(fakeTime, 1) { - return nil + return } } @@ -835,19 +855,17 @@ func (p *Probe) OnNewDiscarder(rs *rules.RuleSet, event *Event, field eval.Field if handlers, ok := allDiscarderHandlers[eventType]; ok { for _, handler := range handlers { - discarderPushed, _ := handler(rs, event, p, Discarder{Field: field}) + discarderPushed, _ := handler(rs, ev, p, Discarder{Field: field}) if discarderPushed { p.notifyDiscarderPushedCallbacksLock.Lock() defer p.notifyDiscarderPushedCallbacksLock.Unlock() for _, cb := range p.notifyDiscarderPushedCallbacks { - cb(eventType, event, field) + cb(eventType, ev, field) } } } } - - return nil } // ApplyFilterPolicy is called when a passing policy for an event type is applied @@ -904,28 +922,6 @@ func (p *Probe) SetApprovers(eventType eval.EventType, approvers rules.Approvers return nil } -func (p *Probe) selectTCProbes() manager.ProbesSelector { - p.tcProgramsLock.RLock() - defer p.tcProgramsLock.RUnlock() - - // Although unlikely, a race is still possible with the umount event of a network namespace: - // - a reload event is triggered - // - selectTCProbes is invoked and the list of currently running probes is generated - // - a container exits and the umount event of its network namespace is handled now (= its TC programs are stopped) - // - the manager executes UpdateActivatedProbes - // In this setup, if we didn't use the best effort selector, the manager would try to init & attach a program that - // was deleted when the container exited. - var activatedProbes manager.BestEffort - for _, tcProbe := range p.tcPrograms { - if tcProbe.IsRunning() { - activatedProbes.Selectors = append(activatedProbes.Selectors, &manager.ProbeSelector{ - ProbeIdentificationPair: tcProbe.ProbeIdentificationPair, - }) - } - } - return &activatedProbes -} - func (p *Probe) isNeededForActivityDump(eventType eval.EventType) bool { if p.Config.ActivityDumpEnabled { for _, e := range p.Config.ActivityDumpTracedEventTypes { @@ -963,7 +959,7 @@ func (p *Probe) SelectProbes(eventTypes []eval.EventType) error { } } - activatedProbes = append(activatedProbes, p.selectTCProbes()) + activatedProbes = append(activatedProbes, p.resolvers.TCResolver.SelectTCProbes()) // Add syscall monitor probes if p.Config.ActivityDumpEnabled { @@ -1124,13 +1120,20 @@ func (p *Probe) GetDebugStats() map[string]interface{} { } // NewRuleSet returns a new rule set -func (p *Probe) NewRuleSet(opts *rules.Opts, evalOpts *eval.Opts) *rules.RuleSet { +func (p *Probe) NewRuleSet() *rules.RuleSet { + ruleOpts, evalOpts := rules.NewEvalOpts(p.Opts.EventTypeEnabled) + + ruleOpts.WithLogger(seclog.DefaultLogger) + ruleOpts.WithSupportedDiscarders(SupportedDiscarders) + ruleOpts.WithReservedRuleIDs(events.AllCustomRuleIDs()) + eventCtor := func() eval.Event { - return NewEvent(p.resolvers, p.scrubber, p) + return &model.Event{ + FieldHandlers: p.fieldHandlers, + } } - opts.WithLogger(seclog.DefaultLogger) - return rules.NewRuleSet(&Model{probe: p}, eventCtor, opts, evalOpts) + return rules.NewRuleSet(NewModel(p), eventCtor, ruleOpts, evalOpts) } // QueuedNetworkDeviceError is used to indicate that the new network device was queued until its namespace handle is @@ -1157,60 +1160,7 @@ func (p *Probe) setupNewTCClassifier(device model.NetDevice) error { return QueuedNetworkDeviceError{msg: fmt.Sprintf("device %s is queued until %d is resolved", device.Name, device.NetNS)} } defer handle.Close() - return p.setupNewTCClassifierWithNetNSHandle(device, handle) -} - -// setupNewTCClassifierWithNetNSHandle creates and attaches TC probes on the provided device. WARNING: this function -// will not close the provided netns handle, so the caller of this function needs to take care of it. -func (p *Probe) setupNewTCClassifierWithNetNSHandle(device model.NetDevice, netnsHandle *os.File) error { - p.tcProgramsLock.Lock() - defer p.tcProgramsLock.Unlock() - - var combinedErr multierror.Error - for _, tcProbe := range probes.GetTCProbes() { - // make sure we're not overriding an existing network probe - deviceKey := NetDeviceKey{IfIndex: device.IfIndex, NetNS: device.NetNS, NetworkDirection: tcProbe.NetworkDirection} - _, ok := p.tcPrograms[deviceKey] - if ok { - continue - } - - newProbe := tcProbe.Copy() - newProbe.CopyProgram = true - newProbe.UID = probes.SecurityAgentUID + device.GetKey() - newProbe.IfIndex = int(device.IfIndex) - newProbe.IfIndexNetns = uint64(netnsHandle.Fd()) - newProbe.IfIndexNetnsID = device.NetNS - newProbe.KeepProgramSpec = false - newProbe.TCFilterPrio = p.Config.NetworkClassifierPriority - newProbe.TCFilterHandle = netlink.MakeHandle(0, p.Config.NetworkClassifierHandle) - - netnsEditor := []manager.ConstantEditor{ - { - Name: "netns", - Value: uint64(device.NetNS), - }, - } - - if err := p.Manager.CloneProgram(probes.SecurityAgentUID, newProbe, netnsEditor, nil); err != nil { - _ = multierror.Append(&combinedErr, fmt.Errorf("couldn't clone %s: %v", tcProbe.ProbeIdentificationPair, err)) - } else { - p.tcPrograms[deviceKey] = newProbe - } - } - return combinedErr.ErrorOrNil() -} - -// flushNetworkNamespace thread unsafe version of FlushNetworkNamespace -func (p *Probe) flushNetworkNamespace(namespace *NetworkNamespace) { - p.tcProgramsLock.Lock() - defer p.tcProgramsLock.Unlock() - for tcKey, tcProbe := range p.tcPrograms { - if tcKey.NetNS == namespace.nsID { - _ = p.Manager.DetachHook(tcProbe.ProbeIdentificationPair) - delete(p.tcPrograms, tcKey) - } - } + return p.resolvers.TCResolver.SetupNewTCClassifierWithNetNSHandle(device, handle, p.Manager) } // FlushNetworkNamespace removes all references and stops all TC programs in the provided network namespace. This method @@ -1219,40 +1169,10 @@ func (p *Probe) FlushNetworkNamespace(namespace *NetworkNamespace) { p.resolvers.NamespaceResolver.FlushNetworkNamespace(namespace) // cleanup internal structures - p.flushNetworkNamespace(namespace) -} - -// flushInactiveProbes detaches and deletes inactive probes. This function returns a map containing the count of interfaces -// per network namespace (ignoring the interfaces that are lazily deleted). -func (p *Probe) flushInactiveProbes() map[uint32]int { - p.tcProgramsLock.Lock() - defer p.tcProgramsLock.Unlock() - - probesCountNoLazyDeletion := make(map[uint32]int) - - var linkName string - for tcKey, tcProbe := range p.tcPrograms { - if !tcProbe.IsTCFilterActive() { - _ = p.Manager.DetachHook(tcProbe.ProbeIdentificationPair) - delete(p.tcPrograms, tcKey) - } else { - link, err := tcProbe.ResolveLink() - if err == nil { - linkName = link.Attrs().Name - } else { - linkName = "" - } - // ignore interfaces that are lazily deleted - if link.Attrs().HardwareAddr.String() != "" && !p.resolvers.NamespaceResolver.IsLazyDeletionInterface(linkName) { - probesCountNoLazyDeletion[tcKey.NetNS]++ - } - } - } - - return probesCountNoLazyDeletion + p.resolvers.TCResolver.FlushNetworkNamespaceID(namespace.nsID, p.Manager) } -func (p *Probe) handleNewMount(event *Event, m *model.Mount) error { +func (p *Probe) handleNewMount(ev *model.Event, m *model.Mount) error { // There could be entries of a previous mount_id in the cache for instance, // runc does the following : it bind mounts itself (using /proc/exe/self), // opens a file descriptor on the new file with O_CLOEXEC then umount the bind mount using @@ -1262,18 +1182,18 @@ func (p *Probe) handleNewMount(event *Event, m *model.Mount) error { p.resolvers.DentryResolver.DelCacheEntries(m.MountID) // Resolve mount point - if err := event.SetMountPoint(m); err != nil { + if err := p.fieldHandlers.SetMountPoint(ev, m); err != nil { seclog.Debugf("failed to set mount point: %v", err) return err } // Resolve root - if err := event.SetMountRoot(m); err != nil { + if err := p.fieldHandlers.SetMountRoot(ev, m); err != nil { seclog.Debugf("failed to set mount root: %v", err) return err } // Insert new mount point in cache, passing it a copy of the mount that we got from the event - if err := p.resolvers.MountResolver.Insert(*m, event.PIDContext.Pid, event.ResolveContainerID(&event.ContainerContext)); err != nil { + if err := p.resolvers.MountResolver.Insert(*m, ev.PIDContext.Pid, ev.FieldHandlers.ResolveContainerID(ev, &ev.ContainerContext)); err != nil { seclog.Errorf("failed to insert mount event: %v", err) return err } @@ -1282,7 +1202,9 @@ func (p *Probe) handleNewMount(event *Event, m *model.Mount) error { } // NewProbe instantiates a new runtime security agent probe -func NewProbe(config *config.Config, statsdClient statsd.ClientInterface) (*Probe, error) { +func NewProbe(config *config.Config, opts Opts) (*Probe, error) { + opts.normalize() + nerpc, err := erpc.NewERPC() if err != nil { return nil, err @@ -1291,6 +1213,7 @@ func NewProbe(config *config.Config, statsdClient statsd.ClientInterface) (*Prob ctx, cancel := context.WithCancel(context.Background()) p := &Probe{ + Opts: opts, Config: config, approvers: make(map[eval.EventType]activeApprovers), managerOptions: ebpf.NewDefaultOptions(), @@ -1298,10 +1221,10 @@ func NewProbe(config *config.Config, statsdClient statsd.ClientInterface) (*Prob cancelFnc: cancel, Erpc: nerpc, erpcRequest: &erpc.ERPCRequest{}, - tcPrograms: make(map[NetDeviceKey]*manager.Probe), - StatsdClient: statsdClient, + StatsdClient: opts.StatsdClient, discarderRateLimiter: rate.NewLimiter(rate.Every(time.Second/5), 100), - isRuntimeDiscarded: os.Getenv("RUNTIME_SECURITY_TESTSUITE") != "true", + isRuntimeDiscarded: !opts.DontDiscardRuntime, + event: &model.Event{}, } if err := p.detectKernelVersion(); err != nil { @@ -1424,10 +1347,6 @@ func NewProbe(config *config.Config, statsdClient statsd.ClientInterface) (*Prob Name: "syscall_monitor_event_period", Value: uint64(p.Config.ActivityDumpSyscallMonitorPeriod.Nanoseconds()), }, - manager.ConstantEditor{ - Name: "setup_new_exec_is_last", - Value: utils.BoolTouint64(!p.kernelVersion.IsRH7Kernel() && p.kernelVersion.Code >= kernel.Kernel5_5), // the setup_new_exec kprobe is after security_bprm_committed_creds in kernels that are not RH7, and additionally, have a kernel version of at least 5.5 - }, ) p.managerOptions.ConstantEditors = append(p.managerOptions.ConstantEditors, DiscarderConstants...) @@ -1475,11 +1394,10 @@ func NewProbe(config *config.Config, statsdClient statsd.ClientInterface) (*Prob } p.resolvers = resolvers - p.event = NewEvent(p.resolvers, p.scrubber, p) + p.fieldHandlers = &FieldHandlers{resolvers: resolvers} - eventZero.resolvers = p.resolvers - eventZero.scrubber = p.scrubber - eventZero.probe = p + // be sure to zero the probe event before everything else + p.zeroEvent() if useRingBuffers { p.eventStream = NewRingBuffer(p.handleEvent) @@ -1530,7 +1448,9 @@ func AppendProbeRequestsToFetcher(constantFetcher constantfetch.ConstantFetcher, constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameSignalStructStructTTY, "struct signal_struct", "tty", "linux/sched/signal.h") constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameTTYStructStructName, "struct tty_struct", "name", "linux/tty.h") constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameCredStructUID, "struct cred", "uid", "linux/cred.h") - + constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameLinuxBinprmP, "struct linux_binprm", "p", "linux/binfmts.h") + constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameLinuxBinprmArgc, "struct linux_binprm", "argc", "linux/binfmts.h") + constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameLinuxBinprmEnvc, "struct linux_binprm", "envc", "linux/binfmts.h") // bpf offsets constantFetcher.AppendOffsetofRequest(constantfetch.OffsetNameBPFMapStructID, "struct bpf_map", "id", "linux/bpf.h") if kv.Code != 0 && (kv.Code >= kernel.Kernel4_15 || kv.IsRH7Kernel()) { diff --git a/pkg/security/probe/probe_monitor.go b/pkg/security/probe/probe_monitor.go index c3bb966ba48a5..d7c5a59e5bece 100644 --- a/pkg/security/probe/probe_monitor.go +++ b/pkg/security/probe/probe_monitor.go @@ -16,6 +16,7 @@ import ( "time" "github.com/DataDog/datadog-agent/pkg/security/api" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" ) // Monitor regroups all the work we want to do to monitor the probes we pushed in the kernel @@ -152,14 +153,15 @@ func (m *Monitor) SendStats() error { } // ProcessEvent processes an event through the various monitors and controllers of the probe -func (m *Monitor) ProcessEvent(event *Event) { +func (m *Monitor) ProcessEvent(event *model.Event) { m.loadController.Count(event) // Look for an unresolved path - if err := event.GetPathResolutionError(); err != nil { - if !errors.Is(err, &ErrPathResolutionNotCritical{}) { + if err := event.PathResolutionError; err != nil { + var notCritical *ErrPathResolutionNotCritical + if !errors.As(err, ¬Critical) { m.probe.DispatchCustomEvent( - NewAbnormalPathEvent(event, err), + NewAbnormalPathEvent(event, m.probe, err), ) } } else { diff --git a/pkg/security/probe/process_resolver.go b/pkg/security/probe/process_resolver.go index eeb0be6e4bea1..5154cd99d6602 100644 --- a/pkg/security/probe/process_resolver.go +++ b/pkg/security/probe/process_resolver.go @@ -20,7 +20,6 @@ import ( "sync" "syscall" "time" - "unsafe" "github.com/DataDog/datadog-go/v5/statsd" manager "github.com/DataDog/ebpf-manager" @@ -161,11 +160,7 @@ func (a *ArgsEnvsPool) Get() *model.ArgsEnvsCacheEntry { // GetFrom returns a new entry with value from the given entry func (a *ArgsEnvsPool) GetFrom(event *model.ArgsEnvsEvent) *model.ArgsEnvsCacheEntry { entry := a.Get() - - entry.Size = event.ArgsEnvs.Size - entry.ValuesRaw = make([]byte, entry.Size) - copy(entry.ValuesRaw, event.ArgsEnvs.ValuesRaw[:]) - + entry.Init(event) return entry } @@ -442,13 +437,13 @@ func (p *ProcessResolver) enrichEventFromProc(entry *model.ProcessCacheEntry, pr p.SetProcessUsersGroups(entry) // args and envs + entry.ArgsEntry = &model.ArgsEntry{} if len(filledProc.Cmdline) > 0 { - entry.ArgsEntry = &model.ArgsEntry{} entry.ArgsEntry.SetValues(filledProc.Cmdline) } + entry.EnvsEntry = &model.EnvsEntry{} if envs, err := utils.EnvVars(proc.Pid); err == nil { - entry.EnvsEntry = &model.EnvsEntry{} entry.EnvsEntry.SetValues(envs) } @@ -559,7 +554,7 @@ func (p *ProcessResolver) insertForkEntry(entry *model.ProcessCacheEntry) { parent := p.entryCache[entry.PPid] if parent == nil && entry.PPid >= 1 { - parent = p.resolve(entry.PPid, entry.PPid) + parent = p.resolve(entry.PPid, entry.PPid, entry.Inode) } if parent != nil { @@ -608,15 +603,15 @@ func (p *ProcessResolver) DeleteEntry(pid uint32, exitTime time.Time) { } // Resolve returns the cache entry for the given pid -func (p *ProcessResolver) Resolve(pid, tid uint32) *model.ProcessCacheEntry { +func (p *ProcessResolver) Resolve(pid, tid uint32, inode uint64) *model.ProcessCacheEntry { p.Lock() defer p.Unlock() - return p.resolve(pid, tid) + return p.resolve(pid, tid, inode) } -func (p *ProcessResolver) resolve(pid, tid uint32) *model.ProcessCacheEntry { - if entry := p.resolveFromCache(pid, tid); entry != nil { +func (p *ProcessResolver) resolve(pid, tid uint32, inode uint64) *model.ProcessCacheEntry { + if entry := p.resolveFromCache(pid, tid, inode); entry != nil { p.hitsStats[metrics.CacheTag].Inc() return entry } @@ -710,18 +705,25 @@ func (p *ProcessResolver) ApplyBootTime(entry *model.ProcessCacheEntry) { } // ResolveFromCache resolves cache entry from the cache -func (p *ProcessResolver) ResolveFromCache(pid, tid uint32) *model.ProcessCacheEntry { +func (p *ProcessResolver) ResolveFromCache(pid, tid uint32, inode uint64) *model.ProcessCacheEntry { p.Lock() defer p.Unlock() - return p.resolveFromCache(pid, tid) + return p.resolveFromCache(pid, tid, inode) } -func (p *ProcessResolver) resolveFromCache(pid, tid uint32) *model.ProcessCacheEntry { +func (p *ProcessResolver) resolveFromCache(pid, tid uint32, inode uint64) *model.ProcessCacheEntry { entry, exists := p.entryCache[pid] if !exists { return nil } + // Compare inode to ensure that the cache is up-to-date. + // Be sure to compare with the file inode and not the pidcontext which can be empty + // if the entry originates from procfs. + if inode != 0 && inode != entry.Process.FileEvent.Inode { + return nil + } + // make to update the tid with the that triggers the resolution entry.Tid = tid @@ -857,16 +859,16 @@ func (p *ProcessResolver) resolveFromProcfs(pid uint32, maxDepth int) *model.Pro if entry != nil { // consider kworker processes with 0 as ppid entry.IsKworker = filledProc.Ppid == 0 && filledProc.Pid != 1 - } - ppid = uint32(filledProc.Ppid) + ppid = uint32(filledProc.Ppid) - parent := p.resolveFromProcfs(ppid, maxDepth-1) - if inserted && entry != nil && parent != nil { - if parent.Equals(entry) { - entry.SetParentOfForkChild(parent) - } else { - entry.SetAncestor(parent) + parent := p.resolveFromProcfs(ppid, maxDepth-1) + if inserted && parent != nil { + if parent.Equals(entry) { + entry.SetParentOfForkChild(parent) + } else { + entry.SetAncestor(parent) + } } } @@ -1012,7 +1014,7 @@ func (p *ProcessResolver) Get(pid uint32) *model.ProcessCacheEntry { } // UpdateUID updates the credentials of the provided pid -func (p *ProcessResolver) UpdateUID(pid uint32, e *Event) { +func (p *ProcessResolver) UpdateUID(pid uint32, e *model.Event) { if e.ProcessContext.Pid != e.ProcessContext.Tid { return } @@ -1022,16 +1024,16 @@ func (p *ProcessResolver) UpdateUID(pid uint32, e *Event) { entry := p.entryCache[pid] if entry != nil { entry.Credentials.UID = e.SetUID.UID - entry.Credentials.User = e.ResolveSetuidUser(&e.SetUID) + entry.Credentials.User = e.FieldHandlers.ResolveSetuidUser(e, &e.SetUID) entry.Credentials.EUID = e.SetUID.EUID - entry.Credentials.EUser = e.ResolveSetuidEUser(&e.SetUID) + entry.Credentials.EUser = e.FieldHandlers.ResolveSetuidEUser(e, &e.SetUID) entry.Credentials.FSUID = e.SetUID.FSUID - entry.Credentials.FSUser = e.ResolveSetuidFSUser(&e.SetUID) + entry.Credentials.FSUser = e.FieldHandlers.ResolveSetuidFSUser(e, &e.SetUID) } } // UpdateGID updates the credentials of the provided pid -func (p *ProcessResolver) UpdateGID(pid uint32, e *Event) { +func (p *ProcessResolver) UpdateGID(pid uint32, e *model.Event) { if e.ProcessContext.Pid != e.ProcessContext.Tid { return } @@ -1041,16 +1043,16 @@ func (p *ProcessResolver) UpdateGID(pid uint32, e *Event) { entry := p.entryCache[pid] if entry != nil { entry.Credentials.GID = e.SetGID.GID - entry.Credentials.Group = e.ResolveSetgidGroup(&e.SetGID) + entry.Credentials.Group = e.FieldHandlers.ResolveSetgidGroup(e, &e.SetGID) entry.Credentials.EGID = e.SetGID.EGID - entry.Credentials.EGroup = e.ResolveSetgidEGroup(&e.SetGID) + entry.Credentials.EGroup = e.FieldHandlers.ResolveSetgidEGroup(e, &e.SetGID) entry.Credentials.FSGID = e.SetGID.FSGID - entry.Credentials.FSGroup = e.ResolveSetgidFSGroup(&e.SetGID) + entry.Credentials.FSGroup = e.FieldHandlers.ResolveSetgidFSGroup(e, &e.SetGID) } } // UpdateCapset updates the credentials of the provided pid -func (p *ProcessResolver) UpdateCapset(pid uint32, e *Event) { +func (p *ProcessResolver) UpdateCapset(pid uint32, e *model.Event) { if e.ProcessContext.Pid != e.ProcessContext.Tid { return } @@ -1276,10 +1278,10 @@ func (p *ProcessResolver) Walk(callback func(entry *model.ProcessCacheEntry)) { } // NewProcessVariables returns a provider for variables attached to a process cache entry -func (p *ProcessResolver) NewProcessVariables(scoper func(ctx *eval.Context) unsafe.Pointer) rules.VariableProvider { - var variables *eval.ScopedVariables - variables = eval.NewScopedVariables(scoper, func(key unsafe.Pointer) { - (*model.ProcessCacheEntry)(key).SetReleaseCallback(func() { +func (p *ProcessResolver) NewProcessVariables(scoper func(ctx *eval.Context) *model.ProcessCacheEntry) rules.VariableProvider { + var variables *eval.ScopedVariables[*model.ProcessCacheEntry] + variables = eval.NewScopedVariables(scoper, func(key *model.ProcessCacheEntry) { + key.SetReleaseCallback(func() { variables.ReleaseVariable(key) }) }) @@ -1289,7 +1291,7 @@ func (p *ProcessResolver) NewProcessVariables(scoper func(ctx *eval.Context) uns // NewProcessResolver returns a new process resolver func NewProcessResolver(manager *manager.Manager, config *config.Config, statsdClient statsd.ClientInterface, - scrubber *procutil.DataScrubber, resolvers *Resolvers, opts ProcessResolverOpts) (*ProcessResolver, error) { + scrubber *procutil.DataScrubber, opts ProcessResolverOpts) (*ProcessResolver, error) { argsEnvsCache, err := simplelru.NewLRU[uint32, *model.ArgsEnvsCacheEntry](maxParallelArgsEnvs, nil) if err != nil { return nil, err @@ -1300,7 +1302,6 @@ func NewProcessResolver(manager *manager.Manager, config *config.Config, statsdC config: config, statsdClient: statsdClient, scrubber: scrubber, - resolvers: resolvers, entryCache: make(map[uint32]*model.ProcessCacheEntry), opts: opts, argsEnvsCache: argsEnvsCache, diff --git a/pkg/security/probe/process_resolver_test.go b/pkg/security/probe/process_resolver_test.go index 372f25cf54ffc..87b834a350a30 100644 --- a/pkg/security/probe/process_resolver_test.go +++ b/pkg/security/probe/process_resolver_test.go @@ -34,7 +34,7 @@ func testCacheSize(t *testing.T, resolver *ProcessResolver) { } func TestFork1st(t *testing.T) { - resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, nil, NewProcessResolverOpts(nil)) + resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, NewProcessResolverOpts(nil)) if err != nil { t.Fatal(err) } @@ -73,7 +73,7 @@ func TestFork1st(t *testing.T) { } func TestFork2nd(t *testing.T) { - resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, nil, NewProcessResolverOpts(nil)) + resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, NewProcessResolverOpts(nil)) if err != nil { t.Fatal(err) } @@ -114,7 +114,7 @@ func TestFork2nd(t *testing.T) { } func TestForkExec(t *testing.T) { - resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, nil, NewProcessResolverOpts(nil)) + resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, NewProcessResolverOpts(nil)) if err != nil { t.Fatal(err) } @@ -169,7 +169,7 @@ func TestForkExec(t *testing.T) { } func TestOrphanExec(t *testing.T) { - resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, nil, NewProcessResolverOpts(nil)) + resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, NewProcessResolverOpts(nil)) if err != nil { t.Fatal(err) } @@ -224,7 +224,7 @@ func TestOrphanExec(t *testing.T) { } func TestForkExecExec(t *testing.T) { - resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, nil, NewProcessResolverOpts(nil)) + resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, NewProcessResolverOpts(nil)) if err != nil { t.Fatal(err) } @@ -293,7 +293,7 @@ func TestForkExecExec(t *testing.T) { } func TestForkReuse(t *testing.T) { - resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, nil, NewProcessResolverOpts(nil)) + resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, NewProcessResolverOpts(nil)) if err != nil { t.Fatal(err) } @@ -387,7 +387,7 @@ func TestForkReuse(t *testing.T) { } func TestForkForkExec(t *testing.T) { - resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, nil, NewProcessResolverOpts(nil)) + resolver, err := NewProcessResolver(nil, nil, &statsd.NoOpClient{}, nil, NewProcessResolverOpts(nil)) if err != nil { t.Fatal(err) } diff --git a/pkg/security/probe/resolvers.go b/pkg/security/probe/resolvers.go index 17b8aa1c5d17f..2adda55ed89e4 100644 --- a/pkg/security/probe/resolvers.go +++ b/pkg/security/probe/resolvers.go @@ -23,11 +23,12 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/utils" "github.com/DataDog/datadog-agent/pkg/util/log" + manager "github.com/DataDog/ebpf-manager" ) // Resolvers holds the list of the event attribute resolvers type Resolvers struct { - probe *Probe + manager *manager.Manager MountResolver *resolvers.MountResolver ContainerResolver *resolvers.ContainerResolver TimeResolver *resolvers.TimeResolver @@ -37,6 +38,7 @@ type Resolvers struct { ProcessResolver *ProcessResolver NamespaceResolver *NamespaceResolver CgroupsResolver *resolvers.CgroupsResolver + TCResolver *resolvers.TCResolver } // NewResolvers creates a new instance of Resolvers @@ -71,8 +73,16 @@ func NewResolvers(config *config.Config, probe *Probe) (*Resolvers, error) { return nil, err } + tcResolver := resolvers.NewTCResolver(config) + + processResolver, err := NewProcessResolver(probe.Manager, probe.Config, probe.StatsdClient, + probe.scrubber, NewProcessResolverOpts(probe.Config.EnvsWithValue)) + if err != nil { + return nil, err + } + resolvers := &Resolvers{ - probe: probe, + manager: probe.Manager, MountResolver: mountResolver, ContainerResolver: &resolvers.ContainerResolver{}, TimeResolver: timeResolver, @@ -81,14 +91,11 @@ func NewResolvers(config *config.Config, probe *Probe) (*Resolvers, error) { DentryResolver: dentryResolver, NamespaceResolver: namespaceResolver, CgroupsResolver: cgroupsResolver, + TCResolver: tcResolver, + ProcessResolver: processResolver, } - processResolver, err := NewProcessResolver(probe.Manager, probe.Config, probe.StatsdClient, - probe.scrubber, resolvers, NewProcessResolverOpts(probe.Config.EnvsWithValue)) - if err != nil { - return nil, err - } - resolvers.ProcessResolver = processResolver + resolvers.ProcessResolver.resolvers = resolvers return resolvers, nil } @@ -136,22 +143,6 @@ func (r *Resolvers) resolveFileFieldsPath(e *model.FileFields, pidCtx *model.PID return pathStr, err } -// ResolveFileFieldsUser resolves the user id of the file to a username -func (r *Resolvers) ResolveFileFieldsUser(e *model.FileFields) string { - if len(e.User) == 0 { - e.User, _ = r.UserGroupResolver.ResolveUser(int(e.UID)) - } - return e.User -} - -// ResolveFileFieldsGroup resolves the group id of the file to a group name -func (r *Resolvers) ResolveFileFieldsGroup(e *model.FileFields) string { - if len(e.Group) == 0 { - e.Group, _ = r.UserGroupResolver.ResolveGroup(int(e.GID)) - } - return e.Group -} - // ResolveCredentialsUser resolves the user id of the process to a username func (r *Resolvers) ResolveCredentialsUser(e *model.Credentials) string { if len(e.User) == 0 { @@ -211,7 +202,7 @@ func (r *Resolvers) Start(ctx context.Context) error { return err } - if err := r.DentryResolver.Start(r.probe.Manager); err != nil { + if err := r.DentryResolver.Start(r.manager); err != nil { return err } @@ -227,7 +218,7 @@ func (r *Resolvers) Snapshot() error { r.ProcessResolver.SetState(snapshotted) r.NamespaceResolver.SetState(snapshotted) - selinuxStatusMap, err := managerhelper.Map(r.probe.Manager, "selinux_enforce_status") + selinuxStatusMap, err := managerhelper.Map(r.manager, "selinux_enforce_status") if err != nil { return fmt.Errorf("unable to snapshot SELinux: %w", err) } diff --git a/pkg/security/probe/resolvers/cgroups_resolver.go b/pkg/security/probe/resolvers/cgroups_resolver.go index 89b1629091f9a..11d0c5890cba5 100644 --- a/pkg/security/probe/resolvers/cgroups_resolver.go +++ b/pkg/security/probe/resolvers/cgroups_resolver.go @@ -54,8 +54,8 @@ func (cr *CgroupsResolver) GetPID1(id string) (uint32, bool) { return entry.pid, true } -// DelByPID1 force removes the entry -func (cr *CgroupsResolver) DelByPID1(pid uint32) { +// DelByPID force removes the entry +func (cr *CgroupsResolver) DelByPID(pid uint32) { cr.Lock() defer cr.Unlock() diff --git a/pkg/security/probe/resolvers/mount_resolver.go b/pkg/security/probe/resolvers/mount_resolver.go index d6bd82d961600..4d28afad7957f 100644 --- a/pkg/security/probe/resolvers/mount_resolver.go +++ b/pkg/security/probe/resolvers/mount_resolver.go @@ -43,7 +43,8 @@ var ( ) const ( - deleteDelayTime = 5 * time.Second + deleteDelayTime = 5 * time.Second + fallbackLimiterPeriod = 5 * time.Second ) func parseGroupID(mnt *mountinfo.Info) (uint32, error) { @@ -102,6 +103,7 @@ type MountResolver struct { deleteQueue []deleteRequest minMountID uint32 redemption *simplelru.LRU[uint32, *model.Mount] + fallbackLimiter *simplelru.LRU[uint32, time.Time] // stats cacheHitsStats *atomic.Int64 @@ -128,11 +130,9 @@ func (mr *MountResolver) SyncCache(pid uint32) error { mr.lock.Lock() defer mr.lock.Unlock() - if err := mr.syncCache(pid); err != nil { - return err - } + err := mr.syncCache(pid) - // store the minimal mount ID found to use it a reference + // store the minimal mount ID found to use it as a reference if pid == 1 { for mountID := range mr.mounts { if mr.minMountID == 0 || mr.minMountID > mountID { @@ -141,26 +141,34 @@ func (mr *MountResolver) SyncCache(pid uint32) error { } } - return nil + return err } -func (mr *MountResolver) syncCache(pid uint32) error { - mnts, err := kernel.ParseMountInfoFile(int32(pid)) - if err != nil { - mr.cgroupsResolver.DelByPID1(pid) - return err - } +// syncCache update cache with the first working pid +func (mr *MountResolver) syncCache(pids ...uint32) error { + var err error + var mnts []*mountinfo.Info - for _, mnt := range mnts { - if _, exists := mr.mounts[uint32(mnt.ID)]; exists { + for _, pid := range pids { + mnts, err = kernel.ParseMountInfoFile(int32(pid)) + if err != nil { + mr.cgroupsResolver.DelByPID(pid) continue } - m := newMountFromMountInfo(mnt) - mr.insert(m) + for _, mnt := range mnts { + if _, exists := mr.mounts[uint32(mnt.ID)]; exists { + continue + } + + m := newMountFromMountInfo(mnt) + mr.insert(m) + } + + return nil } - return nil + return err } func (mr *MountResolver) finalizeChildren(parent *model.Mount) { @@ -392,14 +400,29 @@ func (mr *MountResolver) ResolveMountPath(mountID, pid uint32, containerID strin return mr.resolveMountPath(mountID, pid, containerID) } +func (mr *MountResolver) isSyncCacheAllowed(mountID uint32) bool { + now := time.Now() + if ts, ok := mr.fallbackLimiter.Get(mountID); ok { + if now.After(ts) { + mr.fallbackLimiter.Remove(mountID) + } else { + return false + } + } + return true +} + +func (mr *MountResolver) syncCacheMiss(mountID uint32) { + mr.procMissStats.Inc() + + // add to fallback limiter to avoid storm of file access + mr.fallbackLimiter.Add(mountID, time.Now().Add(fallbackLimiterPeriod)) +} + func (mr *MountResolver) resolveMountPath(mountID, pid uint32, containerID string) (string, error) { if _, err := mr.IsMountIDValid(mountID); err != nil { return "", err } - // force pid1 resolution here to keep the LRU doing his job and not evicting important entries - if pid1, exists := mr.cgroupsResolver.GetPID1(containerID); exists { - pid = pid1 - } path, err := mr.getMountPath(mountID) if err == nil { @@ -416,10 +439,22 @@ func (mr *MountResolver) resolveMountPath(mountID, pid uint32, containerID strin return "", ErrMountNotFound } - if err := mr.syncCache(pid); err != nil { - mr.procMissStats.Inc() + // force pid1 resolution here to keep the LRU doing his job and not evicting important entries + pid1, _ := mr.cgroupsResolver.GetPID1(containerID) + if pid1 == 0 { + // use the pid1 of the host + pid1 = 1 + } + + if !mr.isSyncCacheAllowed(mountID) { + return "", ErrMountNotFound + } + + if err := mr.syncCache(pid, pid1); err != nil { + mr.syncCacheMiss(mountID) return "", err } + path, err = mr.getMountPath(mountID) if err == nil { mr.procHitsStats.Inc() @@ -443,11 +478,6 @@ func (mr *MountResolver) resolveMount(mountID, pid uint32, containerID string) ( return nil, err } - // force pid1 resolution here to keep the LRU doing his job and not evicting important entries - if pid1, exists := mr.cgroupsResolver.GetPID1(containerID); exists { - pid = pid1 - } - mount, exists := mr.mounts[mountID] if exists { mr.cacheHitsStats.Inc() @@ -463,10 +493,18 @@ func (mr *MountResolver) resolveMount(mountID, pid uint32, containerID string) ( return nil, ErrMountNotFound } - if err := mr.syncCache(pid); err != nil { - mr.procMissStats.Inc() + // force pid1 resolution here to keep the LRU doing his job and not evicting important entries + pid1, _ := mr.cgroupsResolver.GetPID1(containerID) + if pid1 == 0 { + // use the pid1 of the host + pid1 = 1 + } + + if err := mr.syncCache(mountID, pid, pid1); err != nil { + mr.syncCacheMiss(mountID) return nil, err } + mount, exists = mr.mounts[mountID] if exists { mr.procMissStats.Inc() @@ -598,5 +636,11 @@ func NewMountResolver(statsdClient statsd.ClientInterface, cgroupsResolver *Cgro } mr.redemption = redemption + fallbackLimiter, err := simplelru.NewLRU[uint32, time.Time](64, nil) + if err != nil { + return nil, err + } + mr.fallbackLimiter = fallbackLimiter + return mr, nil } diff --git a/pkg/security/probe/resolvers/tc_resolver.go b/pkg/security/probe/resolvers/tc_resolver.go new file mode 100644 index 0000000000000..d4525c327a6ff --- /dev/null +++ b/pkg/security/probe/resolvers/tc_resolver.go @@ -0,0 +1,178 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build linux +// +build linux + +package resolvers + +import ( + "fmt" + "os" + "sync" + + "github.com/DataDog/datadog-agent/pkg/security/config" + "github.com/DataDog/datadog-agent/pkg/security/ebpf/probes" + "github.com/DataDog/datadog-agent/pkg/security/metrics" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" + "github.com/DataDog/datadog-go/v5/statsd" + manager "github.com/DataDog/ebpf-manager" + "github.com/hashicorp/go-multierror" + "github.com/vishvananda/netlink" +) + +// NetDeviceKey is used to uniquely identify a network device +type NetDeviceKey struct { + IfIndex uint32 + NetNS uint32 + NetworkDirection manager.TrafficType +} + +type TCResolver struct { + sync.RWMutex + config *config.Config + programs map[NetDeviceKey]*manager.Probe +} + +func NewTCResolver(config *config.Config) *TCResolver { + return &TCResolver{ + config: config, + programs: make(map[NetDeviceKey]*manager.Probe), + } +} + +func (tcr *TCResolver) SendTCProgramsStats(statsdClient statsd.ClientInterface) { + tcr.RLock() + defer tcr.RUnlock() + + if val := float64(len(tcr.programs)); val > 0 { + _ = statsdClient.Gauge(metrics.MetricTCProgram, val, []string{}, 1.0) + } +} + +func (tcr *TCResolver) SelectTCProbes() manager.ProbesSelector { + tcr.RLock() + defer tcr.RUnlock() + + // Although unlikely, a race is still possible with the umount event of a network namespace: + // - a reload event is triggered + // - selectTCProbes is invoked and the list of currently running probes is generated + // - a container exits and the umount event of its network namespace is handled now (= its TC programs are stopped) + // - the manager executes UpdateActivatedProbes + // In this setup, if we didn't use the best effort selector, the manager would try to init & attach a program that + // was deleted when the container exited. + var activatedProbes manager.BestEffort + for _, tcProbe := range tcr.programs { + if tcProbe.IsRunning() { + activatedProbes.Selectors = append(activatedProbes.Selectors, &manager.ProbeSelector{ + ProbeIdentificationPair: tcProbe.ProbeIdentificationPair, + }) + } + } + return &activatedProbes +} + +// SetupNewTCClassifierWithNetNSHandle creates and attaches TC probes on the provided device. WARNING: this function +// will not close the provided netns handle, so the caller of this function needs to take care of it. +func (tcr *TCResolver) SetupNewTCClassifierWithNetNSHandle(device model.NetDevice, netnsHandle *os.File, m *manager.Manager) error { + tcr.Lock() + defer tcr.Unlock() + + var combinedErr multierror.Error + for _, tcProbe := range probes.GetTCProbes() { + // make sure we're not overriding an existing network probe + deviceKey := NetDeviceKey{IfIndex: device.IfIndex, NetNS: device.NetNS, NetworkDirection: tcProbe.NetworkDirection} + _, ok := tcr.programs[deviceKey] + if ok { + continue + } + + newProbe := tcProbe.Copy() + newProbe.CopyProgram = true + newProbe.UID = probes.SecurityAgentUID + device.GetKey() + newProbe.IfIndex = int(device.IfIndex) + newProbe.IfIndexNetns = uint64(netnsHandle.Fd()) + newProbe.IfIndexNetnsID = device.NetNS + newProbe.KeepProgramSpec = false + newProbe.TCFilterPrio = tcr.config.NetworkClassifierPriority + newProbe.TCFilterHandle = netlink.MakeHandle(0, tcr.config.NetworkClassifierHandle) + + netnsEditor := []manager.ConstantEditor{ + { + Name: "netns", + Value: uint64(device.NetNS), + }, + } + + if err := m.CloneProgram(probes.SecurityAgentUID, newProbe, netnsEditor, nil); err != nil { + _ = multierror.Append(&combinedErr, fmt.Errorf("couldn't clone %s: %v", tcProbe.ProbeIdentificationPair, err)) + } else { + tcr.programs[deviceKey] = newProbe + } + } + return combinedErr.ErrorOrNil() +} + +// flushNetworkNamespace thread unsafe version of FlushNetworkNamespace +func (tcr *TCResolver) FlushNetworkNamespaceID(namespaceID uint32, m *manager.Manager) { + tcr.Lock() + defer tcr.Unlock() + + for tcKey, tcProbe := range tcr.programs { + if tcKey.NetNS == namespaceID { + _ = m.DetachHook(tcProbe.ProbeIdentificationPair) + delete(tcr.programs, tcKey) + } + } +} + +// FlushInactiveProbes detaches and deletes inactive probes. This function returns a map containing the count of interfaces +// per network namespace (ignoring the interfaces that are lazily deleted). +func (tcr *TCResolver) FlushInactiveProbes(m *manager.Manager, isLazy func(string) bool) map[uint32]int { + tcr.Lock() + defer tcr.Unlock() + + probesCountNoLazyDeletion := make(map[uint32]int) + + var linkName string + for tcKey, tcProbe := range tcr.programs { + if !tcProbe.IsTCFilterActive() { + _ = m.DetachHook(tcProbe.ProbeIdentificationPair) + delete(tcr.programs, tcKey) + } else { + link, err := tcProbe.ResolveLink() + if err == nil { + linkName = link.Attrs().Name + } else { + linkName = "" + } + // ignore interfaces that are lazily deleted + if link.Attrs().HardwareAddr.String() != "" && !isLazy(linkName) { + probesCountNoLazyDeletion[tcKey.NetNS]++ + } + } + } + + return probesCountNoLazyDeletion +} + +func (tcr *TCResolver) ResolveNetworkDeviceIfName(ifIndex, netNS uint32) (string, bool) { + tcr.RLock() + defer tcr.RUnlock() + + for _, direction := range []manager.TrafficType{manager.Egress, manager.Ingress} { + key := NetDeviceKey{ + IfIndex: ifIndex, + NetNS: netNS, + NetworkDirection: direction, + } + + tcProbe, ok := tcr.programs[key] + if ok { + return tcProbe.IfName, true + } + } + return "", false +} diff --git a/pkg/security/probe/selftests/tester.go b/pkg/security/probe/selftests/tester.go index 0fde2fdbf2e97..61fd287a3ba51 100644 --- a/pkg/security/probe/selftests/tester.go +++ b/pkg/security/probe/selftests/tester.go @@ -20,6 +20,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/api" "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -191,14 +192,14 @@ type selfTestEvent struct { } // IsExpectedEvent sends an event to the tester -func (t *SelfTester) IsExpectedEvent(rule *rules.Rule, event eval.Event) bool { +func (t *SelfTester) IsExpectedEvent(rule *rules.Rule, event eval.Event, p *probe.Probe) bool { if t.waitingForEvent.Load() && rule.Definition.Policy.Source == policySource { - ev, ok := event.(*probe.Event) + ev, ok := event.(*model.Event) if !ok { return true } - s := probe.NewEventSerializer(ev) + s := probe.NewEventSerializer(ev, p) if s == nil || s.FileEventSerializer == nil { return true } diff --git a/pkg/security/probe/serializers.go b/pkg/security/probe/serializers.go index b69c5959c551b..26c0487b42e78 100644 --- a/pkg/security/probe/serializers.go +++ b/pkg/security/probe/serializers.go @@ -18,9 +18,11 @@ import ( "golang.org/x/sys/unix" + "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/utils" + jwriter "github.com/mailru/easyjson/jwriter" ) // FileSerializer serializes a file to JSON @@ -205,9 +207,9 @@ type ProcessSerializer struct { // Indicator of environments variable truncation EnvsTruncated bool `json:"envs_truncated,omitempty"` // Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) - IsThread bool `json:"is_thread,omitempty" jsonschema_description:""` + IsThread bool `json:"is_thread,omitempty"` // Indicates whether the process is a kworker - IsKworker bool `json:"is_kworker,omitempty" jsonschema_description:""` + IsKworker bool `json:"is_kworker,omitempty"` } // ContainerContextSerializer serializes a container context to JSON @@ -488,25 +490,27 @@ type BindEventSerializer struct { // ExitEventSerializer serializes an exit event to JSON // easyjson:json type ExitEventSerializer struct { - Cause string `json:"cause" jsonschema_description:"Cause of the process termination (one of EXITED, SIGNALED, COREDUMPED)"` - Code uint32 `json:"code" jsonschema_description:"Exit code of the process or number of the signal that caused the process to terminate"` + // Cause of the process termination (one of EXITED, SIGNALED, COREDUMPED) + Cause string `json:"cause"` + // Exit code of the process or number of the signal that caused the process to terminate + Code uint32 `json:"code"` } // MountEventSerializer serializes a mount event to JSON // easyjson:json type MountEventSerializer struct { - MountPoint *FileSerializer `json:"mountpoint,omitempty"` // Mount point file information - Root *FileSerializer `json:"source,omitempty"` // Root file information - MountID uint32 `json:"mount_id"` // Mount ID of the new mount - GroupID uint32 `json:"group_id"` // ID of the peer group - ParentMountID uint32 `json:"parent_mount_id"` // Mount ID of the parent mount - BindSrcMountID uint32 `json:"bind_src_mount_id"` // Mount ID of the source of a bind mount - Device uint32 `json:"device"` // Device associated with the file - FSType string `json:"fs_type,omitempty"` // Filesystem type - MountPointPath string `json:"mountpoint_path,omitempty"` // Mount point path - MountSourcePath string `json:"mountsource_path,omitempty"` // Mount source path - MountPointPathResolutionError string `json:"mountpoint_path_error,omitempty"` // Mount point path error - MountSourcePathResolutionError string `json:"mountsource_path_error,omitempty"` // Mount source path error + MountPoint *FileSerializer `json:"mp,omitempty"` // Mount point file information + Root *FileSerializer `json:"root,omitempty"` // Root file information + MountID uint32 `json:"mount_id"` // Mount ID of the new mount + GroupID uint32 `json:"group_id"` // ID of the peer group + ParentMountID uint32 `json:"parent_mount_id"` // Mount ID of the parent mount + BindSrcMountID uint32 `json:"bind_src_mount_id"` // Mount ID of the source of a bind mount + Device uint32 `json:"device"` // Device associated with the file + FSType string `json:"fs_type,omitempty"` // Filesystem type + MountPointPath string `json:"mountpoint.path,omitempty"` // Mount point path + MountSourcePath string `json:"source.path,omitempty"` // Mount source path + MountPointPathResolutionError string `json:"mountpoint.path_error,omitempty"` // Mount point path error + MountSourcePathResolutionError string `json:"source.path_error,omitempty"` // Mount source path error } // EventSerializer serializes an event to JSON @@ -534,7 +538,7 @@ type EventSerializer struct { Date utils.EasyjsonTime `json:"date,omitempty"` } -func getInUpperLayer(r *Resolvers, f *model.FileFields) *bool { +func getInUpperLayer(f *model.FileFields) *bool { lowerLayer := f.GetInLowerLayer() upperLayer := f.GetInUpperLayer() if !lowerLayer && !upperLayer { @@ -543,7 +547,7 @@ func getInUpperLayer(r *Resolvers, f *model.FileFields) *bool { return &upperLayer } -func newFileSerializer(fe *model.FileEvent, e *Event, forceInode ...uint64) *FileSerializer { +func newFileSerializer(fe *model.FileEvent, e *model.Event, forceInode ...uint64) *FileSerializer { inode := fe.Inode if len(forceInode) > 0 { inode = forceInode[0] @@ -551,20 +555,20 @@ func newFileSerializer(fe *model.FileEvent, e *Event, forceInode ...uint64) *Fil mode := uint32(fe.FileFields.Mode) return &FileSerializer{ - Path: e.ResolveFilePath(fe), + Path: e.FieldHandlers.ResolveFilePath(e, fe), PathResolutionError: fe.GetPathResolutionError(), - Name: e.ResolveFileBasename(fe), + Name: e.FieldHandlers.ResolveFileBasename(e, fe), Inode: getUint64Pointer(&inode), MountID: getUint32Pointer(&fe.MountID), - Filesystem: e.ResolveFileFilesystem(fe), + Filesystem: e.FieldHandlers.ResolveFileFilesystem(e, fe), Mode: getUint32Pointer(&mode), // only used by open events UID: int64(fe.UID), GID: int64(fe.GID), - User: e.ResolveFileFieldsUser(&fe.FileFields), - Group: e.ResolveFileFieldsGroup(&fe.FileFields), + User: e.FieldHandlers.ResolveFileFieldsUser(e, &fe.FileFields), + Group: e.FieldHandlers.ResolveFileFieldsGroup(e, &fe.FileFields), Mtime: getTimeIfNotZero(time.Unix(0, int64(fe.MTime))), Ctime: getTimeIfNotZero(time.Unix(0, int64(fe.CTime))), - InUpperLayer: getInUpperLayer(e.resolvers, &fe.FileFields), + InUpperLayer: getInUpperLayer(&fe.FileFields), } } @@ -609,11 +613,11 @@ func newCredentialsSerializer(ce *model.Credentials) *CredentialsSerializer { } } -func newProcessSerializer(ps *model.Process, e *Event) *ProcessSerializer { +func newProcessSerializer(ps *model.Process, e *model.Event, resolvers *Resolvers) *ProcessSerializer { if ps.IsNotKworker() { - argv, argvTruncated := e.resolvers.ProcessResolver.GetProcessScrubbedArgv(ps) - envs, EnvsTruncated := e.resolvers.ProcessResolver.GetProcessEnvs(ps) - argv0, _ := e.resolvers.ProcessResolver.GetProcessArgv0(ps) + argv, argvTruncated := resolvers.ProcessResolver.GetProcessScrubbedArgv(ps) + envs, EnvsTruncated := resolvers.ProcessResolver.GetProcessEnvs(ps) + argv0, _ := resolvers.ProcessResolver.GetProcessArgv0(ps) psSerializer := &ProcessSerializer{ ForkTime: getTimeIfNotZero(ps.ForkTime), @@ -664,7 +668,7 @@ func newProcessSerializer(ps *model.Process, e *Event) *ProcessSerializer { } } -func newDDContextSerializer(e *Event) *DDContextSerializer { +func newDDContextSerializer(e *model.Event) *DDContextSerializer { s := &DDContextSerializer{ SpanID: e.SpanContext.SpanID, TraceID: e.SpanContext.TraceID, @@ -673,7 +677,7 @@ func newDDContextSerializer(e *Event) *DDContextSerializer { return s } - ctx := eval.NewContext(e.GetPointer()) + ctx := eval.NewContext(e) it := &model.ProcessAncestorsIterator{} ptr := it.Front(ctx) @@ -692,31 +696,25 @@ func newDDContextSerializer(e *Event) *DDContextSerializer { return s } -func newUserContextSerializer(e *Event) *UserContextSerializer { +func newUserContextSerializer(e *model.Event) *UserContextSerializer { return &UserContextSerializer{ User: e.ProcessContext.User, Group: e.ProcessContext.Group, } } -func newProcessContextSerializer(pc *model.ProcessContext, e *Event, r *Resolvers) *ProcessContextSerializer { - if pc == nil || pc.Pid == 0 { +func newProcessContextSerializer(pc *model.ProcessContext, e *model.Event, resolvers *Resolvers) *ProcessContextSerializer { + if pc == nil || pc.Pid == 0 || e == nil { return nil } var ps ProcessContextSerializer - if e == nil { - // custom events create an empty event - e = NewEvent(r, nil, nil) - e.ProcessContext = pc - } - ps = ProcessContextSerializer{ - ProcessSerializer: newProcessSerializer(&pc.Process, e), + ProcessSerializer: newProcessSerializer(&pc.Process, e, resolvers), } - ctx := eval.NewContext(e.GetPointer()) + ctx := eval.NewContext(e) it := &model.ProcessAncestorsIterator{} ptr := it.Front(ctx) @@ -729,7 +727,7 @@ func newProcessContextSerializer(pc *model.ProcessContext, e *Event, r *Resolver for ptr != nil { pce := (*model.ProcessCacheEntry)(ptr) - s := newProcessSerializer(&pce.Process, e) + s := newProcessSerializer(&pce.Process, e, resolvers) ps.Ancestors = append(ps.Ancestors, s) if first { @@ -751,12 +749,12 @@ func newProcessContextSerializer(pc *model.ProcessContext, e *Event, r *Resolver return &ps } -func newSELinuxSerializer(e *Event) *SELinuxEventSerializer { +func newSELinuxSerializer(e *model.Event) *SELinuxEventSerializer { switch e.SELinux.EventKind { case model.SELinuxBoolChangeEventKind: return &SELinuxEventSerializer{ BoolChange: &SELinuxBoolChangeSerializer{ - Name: e.ResolveSELinuxBoolName(&e.SELinux), + Name: e.FieldHandlers.ResolveSELinuxBoolName(e, &e.SELinux), State: e.SELinux.BoolChangeValue, }, } @@ -777,7 +775,7 @@ func newSELinuxSerializer(e *Event) *SELinuxEventSerializer { } } -func newBPFMapSerializer(e *Event) *BPFMapSerializer { +func newBPFMapSerializer(e *model.Event) *BPFMapSerializer { if e.BPF.Map.ID == 0 { return nil } @@ -787,7 +785,7 @@ func newBPFMapSerializer(e *Event) *BPFMapSerializer { } } -func newBPFProgramSerializer(e *Event) *BPFProgramSerializer { +func newBPFProgramSerializer(e *model.Event) *BPFProgramSerializer { if e.BPF.Program.ID == 0 { return nil } @@ -801,7 +799,7 @@ func newBPFProgramSerializer(e *Event) *BPFProgramSerializer { } } -func newBPFEventSerializer(e *Event) *BPFEventSerializer { +func newBPFEventSerializer(e *model.Event) *BPFEventSerializer { return &BPFEventSerializer{ Cmd: model.BPFCmd(e.BPF.Cmd).String(), Map: newBPFMapSerializer(e), @@ -809,7 +807,7 @@ func newBPFEventSerializer(e *Event) *BPFEventSerializer { } } -func newMMapEventSerializer(e *Event) *MMapEventSerializer { +func newMMapEventSerializer(e *model.Event) *MMapEventSerializer { return &MMapEventSerializer{ Address: fmt.Sprintf("0x%x", e.MMap.Addr), Offset: e.MMap.Offset, @@ -819,7 +817,7 @@ func newMMapEventSerializer(e *Event) *MMapEventSerializer { } } -func newMProtectEventSerializer(e *Event) *MProtectEventSerializer { +func newMProtectEventSerializer(e *model.Event) *MProtectEventSerializer { return &MProtectEventSerializer{ VMStart: fmt.Sprintf("0x%x", e.MProtect.VMStart), VMEnd: fmt.Sprintf("0x%x", e.MProtect.VMEnd), @@ -828,15 +826,15 @@ func newMProtectEventSerializer(e *Event) *MProtectEventSerializer { } } -func newPTraceEventSerializer(e *Event) *PTraceEventSerializer { +func newPTraceEventSerializer(e *model.Event, resolvers *Resolvers) *PTraceEventSerializer { return &PTraceEventSerializer{ Request: model.PTraceRequest(e.PTrace.Request).String(), Address: fmt.Sprintf("0x%x", e.PTrace.Address), - Tracee: newProcessContextSerializer(e.PTrace.Tracee, e, e.resolvers), + Tracee: newProcessContextSerializer(e.PTrace.Tracee, e, resolvers), } } -func newLoadModuleEventSerializer(e *Event) *ModuleEventSerializer { +func newLoadModuleEventSerializer(e *model.Event) *ModuleEventSerializer { loadedFromMemory := e.LoadModule.LoadedFromMemory return &ModuleEventSerializer{ Name: e.LoadModule.Name, @@ -844,22 +842,22 @@ func newLoadModuleEventSerializer(e *Event) *ModuleEventSerializer { } } -func newUnloadModuleEventSerializer(e *Event) *ModuleEventSerializer { +func newUnloadModuleEventSerializer(e *model.Event) *ModuleEventSerializer { return &ModuleEventSerializer{ Name: e.UnloadModule.Name, } } -func newSignalEventSerializer(e *Event) *SignalEventSerializer { +func newSignalEventSerializer(e *model.Event, resolvers *Resolvers) *SignalEventSerializer { ses := &SignalEventSerializer{ Type: model.Signal(e.Signal.Type).String(), PID: e.Signal.PID, - Target: newProcessContextSerializer(e.Signal.Target, e, e.resolvers), + Target: newProcessContextSerializer(e.Signal.Target, e, resolvers), } return ses } -func newSpliceEventSerializer(e *Event) *SpliceEventSerializer { +func newSpliceEventSerializer(e *model.Event) *SpliceEventSerializer { return &SpliceEventSerializer{ PipeEntryFlag: model.PipeBufFlag(e.Splice.PipeEntryFlag).String(), PipeExitFlag: model.PipeBufFlag(e.Splice.PipeExitFlag).String(), @@ -898,15 +896,15 @@ func newIPPortFamilySerializer(c *model.IPPortContext, family string) *IPPortFam } } -func newNetworkDeviceSerializer(e *Event) *NetworkDeviceSerializer { +func newNetworkDeviceSerializer(e *model.Event) *NetworkDeviceSerializer { return &NetworkDeviceSerializer{ NetNS: e.NetworkContext.Device.NetNS, IfIndex: e.NetworkContext.Device.IfIndex, - IfName: e.ResolveNetworkDeviceIfName(&e.NetworkContext.Device), + IfName: e.FieldHandlers.ResolveNetworkDeviceIfName(e, &e.NetworkContext.Device), } } -func newNetworkContextSerializer(e *Event) *NetworkContextSerializer { +func newNetworkContextSerializer(e *model.Event) *NetworkContextSerializer { return &NetworkContextSerializer{ Device: newNetworkDeviceSerializer(e), L3Protocol: model.L3Protocol(e.NetworkContext.L3Protocol).String(), @@ -917,7 +915,7 @@ func newNetworkContextSerializer(e *Event) *NetworkContextSerializer { } } -func newBindEventSerializer(e *Event) *BindEventSerializer { +func newBindEventSerializer(e *model.Event) *BindEventSerializer { bes := &BindEventSerializer{ Addr: newIPPortFamilySerializer(&e.Bind.Addr, model.AddressFamily(e.Bind.AddrFamily).String()), @@ -925,18 +923,20 @@ func newBindEventSerializer(e *Event) *BindEventSerializer { return bes } -func newExitEventSerializer(e *Event) *ExitEventSerializer { +func newExitEventSerializer(e *model.Event) *ExitEventSerializer { return &ExitEventSerializer{ Cause: model.ExitCause(e.Exit.Cause).String(), Code: e.Exit.Code, } } -func newMountEventSerializer(e *Event) *MountEventSerializer { - src, srcErr := e.ResolveMountRoot(&e.Mount.Mount) - dst, dstErr := e.ResolveMountPoint(&e.Mount.Mount) - mountPointPath := e.ResolveMountPointPath(&e.Mount) - mountSourcePath := e.ResolveMountSourcePath(&e.Mount) +func newMountEventSerializer(e *model.Event) *MountEventSerializer { + fh := e.FieldHandlers.(*FieldHandlers) + + src, srcErr := fh.ResolveMountRoot(e, &e.Mount.Mount) + dst, dstErr := fh.ResolveMountPoint(e, &e.Mount.Mount) + mountPointPath := fh.ResolveMountPointPath(e, &e.Mount) + mountSourcePath := fh.ResolveMountSourcePath(e, &e.Mount) mountSerializer := &MountEventSerializer{ MountPoint: &FileSerializer{ @@ -988,10 +988,27 @@ func serializeSyscallRetval(retval int64) string { } } +func MarshalEvent(event *model.Event, probe *Probe) ([]byte, error) { + s := NewEventSerializer(event, probe) + w := &jwriter.Writer{ + Flags: jwriter.NilSliceAsEmpty | jwriter.NilMapAsEmpty, + } + s.MarshalEasyJSON(w) + return w.BuildBytes() +} + +func MarshalCustomEvent(event *events.CustomEvent) ([]byte, error) { + w := &jwriter.Writer{ + Flags: jwriter.NilSliceAsEmpty | jwriter.NilMapAsEmpty, + } + event.MarshalEasyJSON(w) + return w.BuildBytes() +} + // NewEventSerializer creates a new event serializer based on the event type -func NewEventSerializer(event *Event) *EventSerializer { +func NewEventSerializer(event *model.Event, probe *Probe) *EventSerializer { var pc model.ProcessContext - if entry, _ := event.ResolveProcessCacheEntry(); entry != nil { + if entry, _ := event.FieldHandlers.ResolveProcessCacheEntry(event); entry != nil { pc = entry.ProcessContext } @@ -999,13 +1016,13 @@ func NewEventSerializer(event *Event) *EventSerializer { EventContextSerializer: EventContextSerializer{ Name: model.EventType(event.Type).String(), }, - ProcessContextSerializer: newProcessContextSerializer(&pc, event, event.resolvers), + ProcessContextSerializer: newProcessContextSerializer(&pc, event, probe.resolvers), DDContextSerializer: newDDContextSerializer(event), UserContextSerializer: newUserContextSerializer(event), - Date: utils.NewEasyjsonTime(event.ResolveEventTimestamp()), + Date: utils.NewEasyjsonTime(event.FieldHandlers.ResolveEventTimestamp(event)), } - if id := event.ResolveContainerID(&event.ContainerContext); id != "" { + if id := event.FieldHandlers.ResolveContainerID(event, &event.ContainerContext); id != "" { s.ContainerContextSerializer = &ContainerContextSerializer{ ID: id, } @@ -1093,8 +1110,8 @@ func NewEventSerializer(event *Event) *EventSerializer { s.FileEventSerializer = &FileEventSerializer{ FileSerializer: *newFileSerializer(&event.RemoveXAttr.File, event), Destination: &FileSerializer{ - XAttrName: event.ResolveXAttrName(&event.RemoveXAttr), - XAttrNamespace: event.ResolveXAttrNamespace(&event.RemoveXAttr), + XAttrName: event.FieldHandlers.ResolveXAttrName(event, &event.RemoveXAttr), + XAttrNamespace: event.FieldHandlers.ResolveXAttrNamespace(event, &event.RemoveXAttr), }, } s.EventContextSerializer.Outcome = serializeSyscallRetval(event.RemoveXAttr.Retval) @@ -1102,8 +1119,8 @@ func NewEventSerializer(event *Event) *EventSerializer { s.FileEventSerializer = &FileEventSerializer{ FileSerializer: *newFileSerializer(&event.SetXAttr.File, event), Destination: &FileSerializer{ - XAttrName: event.ResolveXAttrName(&event.SetXAttr), - XAttrNamespace: event.ResolveXAttrNamespace(&event.SetXAttr), + XAttrName: event.FieldHandlers.ResolveXAttrName(event, &event.SetXAttr), + XAttrNamespace: event.FieldHandlers.ResolveXAttrNamespace(event, &event.SetXAttr), }, } s.EventContextSerializer.Outcome = serializeSyscallRetval(event.SetXAttr.Retval) @@ -1127,21 +1144,21 @@ func NewEventSerializer(event *Event) *EventSerializer { case model.SetuidEventType: s.ProcessContextSerializer.Credentials.Destination = &SetuidSerializer{ UID: int(event.SetUID.UID), - User: event.ResolveSetuidUser(&event.SetUID), + User: event.FieldHandlers.ResolveSetuidUser(event, &event.SetUID), EUID: int(event.SetUID.EUID), - EUser: event.ResolveSetuidEUser(&event.SetUID), + EUser: event.FieldHandlers.ResolveSetuidEUser(event, &event.SetUID), FSUID: int(event.SetUID.FSUID), - FSUser: event.ResolveSetuidFSUser(&event.SetUID), + FSUser: event.FieldHandlers.ResolveSetuidFSUser(event, &event.SetUID), } s.EventContextSerializer.Outcome = serializeSyscallRetval(0) case model.SetgidEventType: s.ProcessContextSerializer.Credentials.Destination = &SetgidSerializer{ GID: int(event.SetGID.GID), - Group: event.ResolveSetgidGroup(&event.SetGID), + Group: event.FieldHandlers.ResolveSetgidGroup(event, &event.SetGID), EGID: int(event.SetGID.EGID), - EGroup: event.ResolveSetgidEGroup(&event.SetGID), + EGroup: event.FieldHandlers.ResolveSetgidEGroup(event, &event.SetGID), FSGID: int(event.SetGID.FSGID), - FSGroup: event.ResolveSetgidFSGroup(&event.SetGID), + FSGroup: event.FieldHandlers.ResolveSetgidFSGroup(event, &event.SetGID), } s.EventContextSerializer.Outcome = serializeSyscallRetval(0) case model.CapsetEventType: @@ -1185,7 +1202,7 @@ func NewEventSerializer(event *Event) *EventSerializer { s.MProtectEventSerializer = newMProtectEventSerializer(event) case model.PTraceEventType: s.EventContextSerializer.Outcome = serializeSyscallRetval(event.PTrace.Retval) - s.PTraceEventSerializer = newPTraceEventSerializer(event) + s.PTraceEventSerializer = newPTraceEventSerializer(event, probe.resolvers) case model.LoadModuleEventType: s.EventContextSerializer.Outcome = serializeSyscallRetval(event.LoadModule.Retval) if !event.LoadModule.LoadedFromMemory { @@ -1199,7 +1216,7 @@ func NewEventSerializer(event *Event) *EventSerializer { s.ModuleEventSerializer = newUnloadModuleEventSerializer(event) case model.SignalEventType: s.EventContextSerializer.Outcome = serializeSyscallRetval(event.Signal.Retval) - s.SignalEventSerializer = newSignalEventSerializer(event) + s.SignalEventSerializer = newSignalEventSerializer(event, probe.resolvers) case model.SpliceEventType: s.EventContextSerializer.Outcome = serializeSyscallRetval(event.Splice.Retval) s.SpliceEventSerializer = newSpliceEventSerializer(event) diff --git a/pkg/security/probe/serializers_easyjson.go b/pkg/security/probe/serializers_easyjson.go index 313cc09935abd..e17d3dc32736f 100644 --- a/pkg/security/probe/serializers_easyjson.go +++ b/pkg/security/probe/serializers_easyjson.go @@ -1975,7 +1975,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe15(in *jl continue } switch key { - case "mountpoint": + case "mp": if in.IsNull() { in.Skip() out.MountPoint = nil @@ -1985,7 +1985,7 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe15(in *jl } (*out.MountPoint).UnmarshalEasyJSON(in) } - case "source": + case "root": if in.IsNull() { in.Skip() out.Root = nil @@ -2007,13 +2007,13 @@ func easyjsonA970e379DecodeGithubComDataDogDatadogAgentPkgSecurityProbe15(in *jl out.Device = uint32(in.Uint32()) case "fs_type": out.FSType = string(in.String()) - case "mountpoint_path": + case "mountpoint.path": out.MountPointPath = string(in.String()) - case "mountsource_path": + case "source.path": out.MountSourcePath = string(in.String()) - case "mountpoint_path_error": + case "mountpoint.path_error": out.MountPointPathResolutionError = string(in.String()) - case "mountsource_path_error": + case "source.path_error": out.MountSourcePathResolutionError = string(in.String()) default: in.SkipRecursive() @@ -2030,13 +2030,13 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe15(out *j first := true _ = first if in.MountPoint != nil { - const prefix string = ",\"mountpoint\":" + const prefix string = ",\"mp\":" first = false out.RawString(prefix[1:]) (*in.MountPoint).MarshalEasyJSON(out) } if in.Root != nil { - const prefix string = ",\"source\":" + const prefix string = ",\"root\":" if first { first = false out.RawString(prefix[1:]) @@ -2081,22 +2081,22 @@ func easyjsonA970e379EncodeGithubComDataDogDatadogAgentPkgSecurityProbe15(out *j out.String(string(in.FSType)) } if in.MountPointPath != "" { - const prefix string = ",\"mountpoint_path\":" + const prefix string = ",\"mountpoint.path\":" out.RawString(prefix) out.String(string(in.MountPointPath)) } if in.MountSourcePath != "" { - const prefix string = ",\"mountsource_path\":" + const prefix string = ",\"source.path\":" out.RawString(prefix) out.String(string(in.MountSourcePath)) } if in.MountPointPathResolutionError != "" { - const prefix string = ",\"mountpoint_path_error\":" + const prefix string = ",\"mountpoint.path_error\":" out.RawString(prefix) out.String(string(in.MountPointPathResolutionError)) } if in.MountSourcePathResolutionError != "" { - const prefix string = ",\"mountsource_path_error\":" + const prefix string = ",\"source.path_error\":" out.RawString(prefix) out.String(string(in.MountSourcePathResolutionError)) } diff --git a/pkg/security/probe/variables.go b/pkg/security/probe/variables.go index ec49b633fc416..f8b6cfaad2a23 100644 --- a/pkg/security/probe/variables.go +++ b/pkg/security/probe/variables.go @@ -10,13 +10,14 @@ package probe import ( "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" ) var ( // SECLVariables set of variables SECLVariables = map[string]eval.VariableValue{ "process.pid": eval.NewIntVariable(func(ctx *eval.Context) int { - pc := (*Event)(ctx.Object).ProcessContext + pc := ctx.Event.(*model.Event).ProcessContext if pc == nil { return 0 } diff --git a/pkg/security/secl/compiler/eval/context.go b/pkg/security/secl/compiler/eval/context.go index a6b8259e61b00..7fb93ad50c3cf 100644 --- a/pkg/security/secl/compiler/eval/context.go +++ b/pkg/security/secl/compiler/eval/context.go @@ -8,17 +8,18 @@ package eval import ( "sync" "time" - "unsafe" ) // Context describes the context used during a rule evaluation type Context struct { - Object unsafe.Pointer + Event Event Registers Registers // cache available across all the evaluations - Cache map[string]unsafe.Pointer + StringCache map[string][]string + IntCache map[string][]int + BoolCache map[string][]bool now time.Time } @@ -31,28 +32,36 @@ func (c *Context) Now() time.Time { return c.now } -// SetObject set the given object to the context -func (c *Context) SetObject(obj unsafe.Pointer) { - c.Object = obj +// SetEvent set the given event to the context +func (c *Context) SetEvent(evt Event) { + c.Event = evt } // Reset the context func (c *Context) Reset() { - c.Object = nil + c.Event = nil c.Registers = nil c.now = time.Time{} // as the cache should be low in entry, prefer to delete than re-alloc - for key := range c.Cache { - delete(c.Cache, key) + for key := range c.StringCache { + delete(c.StringCache, key) + } + for key := range c.IntCache { + delete(c.IntCache, key) + } + for key := range c.BoolCache { + delete(c.BoolCache, key) } } // NewContext return a new Context -func NewContext(obj unsafe.Pointer) *Context { +func NewContext(evt Event) *Context { return &Context{ - Object: obj, - Cache: make(map[string]unsafe.Pointer), + Event: evt, + StringCache: make(map[string][]string), + IntCache: make(map[string][]int), + BoolCache: make(map[string][]bool), } } @@ -61,10 +70,10 @@ type ContextPool struct { pool sync.Pool } -// Get returns a context with the given object -func (c *ContextPool) Get(obj unsafe.Pointer) *Context { +// Get returns a context with the given event +func (c *ContextPool) Get(evt Event) *Context { ctx := c.pool.Get().(*Context) - ctx.SetObject(obj) + ctx.SetEvent(evt) return ctx } diff --git a/pkg/security/secl/compiler/eval/eval_test.go b/pkg/security/secl/compiler/eval/eval_test.go index 369e7ab77cc26..511fc418c07bf 100644 --- a/pkg/security/secl/compiler/eval/eval_test.go +++ b/pkg/security/secl/compiler/eval/eval_test.go @@ -15,7 +15,6 @@ import ( "syscall" "testing" "time" - "unsafe" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/ast" ) @@ -57,7 +56,7 @@ func parseRule(expr string, model Model, opts *Opts) (*Rule, error) { func eval(t *testing.T, event *testEvent, expr string) (bool, *ast.Rule, error) { model := &testModel{} - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) opts := newOptsWithParams(testConstants, nil) @@ -467,7 +466,7 @@ func TestComplex(t *testing.T) { } func TestPartial(t *testing.T) { - event := testEvent{ + event := &testEvent{ process: testProcess{ name: "abc", uid: 123, @@ -544,7 +543,7 @@ func TestPartial(t *testing.T) { {Expr: `process.name =~ "/usr/sbin/*" && process.uid == 0 && process.is_root`, Field: "process.uid", IsDiscarder: true}, } - ctx := NewContext(event.GetPointer()) + ctx := NewContext(event) for _, test := range tests { model := &testModel{} @@ -594,7 +593,7 @@ func TestMacroList(t *testing.T) { t.Fatalf("error while evaluating `%s`: %s", expr, err) } - ctx := NewContext(unsafe.Pointer(&testEvent{})) + ctx := NewContext(&testEvent{}) if !rule.Eval(ctx) { t.Fatalf("should return true") @@ -634,7 +633,7 @@ func TestMacroExpression(t *testing.T) { t.Fatalf("error while evaluating `%s`: %s", expr, err) } - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) if !rule.Eval(ctx) { t.Fatalf("should return true") } @@ -677,7 +676,7 @@ func TestMacroPartial(t *testing.T) { t.Fatalf("error while generating partials `%s`: %s", expr, err) } - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) result, err := rule.PartialEval(ctx, "open.filename") if err != nil { @@ -739,7 +738,7 @@ func TestNestedMacros(t *testing.T) { t.Fatalf("error while evaluating `%s`: %s", macro2.ID, err) } - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) if !rule.Eval(ctx) { t.Fatalf("should return true") } @@ -943,7 +942,7 @@ func TestRegisterPartial(t *testing.T) { //{Expr: `process.list[A].key == 55 && process.list[B].value == "AA"`, Field: "process.list.key", IsDiscarder: true}, } - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) for _, test := range tests { model := &testModel{} @@ -1323,7 +1322,7 @@ func TestOpOverridePartials(t *testing.T) { {Expr: `process.or_array.value not in ["not"] || true`, Field: "process.or_array.value", IsDiscarder: false}, } - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) for _, test := range tests { model := &testModel{} @@ -1417,7 +1416,7 @@ func BenchmarkArray(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) if evaluator.Eval(ctx) != true { b.Fatal("unexpected result") } @@ -1451,7 +1450,7 @@ func BenchmarkComplex(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) if evaluator.Eval(ctx) != true { b.Fatal("unexpected result") } @@ -1466,7 +1465,7 @@ func BenchmarkPartial(b *testing.B) { }, } - ctx := NewContext(unsafe.Pointer(event)) + ctx := NewContext(event) base := `(process.name == "/usr/bin/ls" && process.uid != 0)` var exprs []string @@ -1532,7 +1531,7 @@ func BenchmarkPool(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { - ctx := pool.Get(unsafe.Pointer(event)) + ctx := pool.Get(event) if evaluator.Eval(ctx) != true { b.Fatal("unexpected result") } diff --git a/pkg/security/secl/compiler/eval/evaluators.go b/pkg/security/secl/compiler/eval/evaluators.go index 8aadec975c0fe..4c6dc00fd08ac 100644 --- a/pkg/security/secl/compiler/eval/evaluators.go +++ b/pkg/security/secl/compiler/eval/evaluators.go @@ -207,13 +207,6 @@ func (s *StringValuesEvaluator) IsStatic() bool { return s.EvalFnc == nil } -// AppendFieldValues append field values -func (s *StringValuesEvaluator) AppendFieldValues(values ...FieldValue) { - for _, value := range values { - s.Values.AppendFieldValue(value) - } -} - // Compile the underlying StringValues func (s *StringValuesEvaluator) Compile(opts StringCmpOpts) error { return s.Values.Compile(opts) @@ -226,10 +219,8 @@ func (s *StringValuesEvaluator) SetFieldValues(values ...FieldValue) error { // AppendMembers add members to the evaluator func (s *StringValuesEvaluator) AppendMembers(members ...ast.StringMember) { - values := make([]FieldValue, 0, len(members)) - var value FieldValue - for _, member := range members { + var value FieldValue if member.Pattern != nil { value = FieldValue{ Value: *member.Pattern, @@ -246,10 +237,8 @@ func (s *StringValuesEvaluator) AppendMembers(members ...ast.StringMember) { Type: ScalarValueType, } } - values = append(values, value) + s.Values.AppendFieldValue(value) } - - s.AppendFieldValues(values...) } // IntArrayEvaluator returns an array of int diff --git a/pkg/security/secl/compiler/eval/event.go b/pkg/security/secl/compiler/eval/event.go index 8dadb20497ddb..13b35a6b90c82 100644 --- a/pkg/security/secl/compiler/eval/event.go +++ b/pkg/security/secl/compiler/eval/event.go @@ -7,7 +7,6 @@ package eval import ( "reflect" - "unsafe" ) // EventType is the type of an event @@ -27,8 +26,6 @@ type Event interface { GetFieldValue(field Field) (interface{}, error) // GetFieldType returns the Type of the Field GetFieldType(field Field) (reflect.Kind, error) - // GetPointer returns an unsafe.Pointer of this object - GetPointer() unsafe.Pointer // GetTags returns a list of tags GetTags() []string } diff --git a/pkg/security/secl/compiler/eval/macro.go b/pkg/security/secl/compiler/eval/macro.go index 10865439a3c6f..18b353c41c71a 100644 --- a/pkg/security/secl/compiler/eval/macro.go +++ b/pkg/security/secl/compiler/eval/macro.go @@ -11,7 +11,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/ast" ) -//MacroID - ID of a Macro +// MacroID - ID of a Macro type MacroID = string // Macro - Macro object identified by an `ID` containing a SECL `Expression` @@ -57,7 +57,7 @@ func NewStringValuesMacro(id string, values []string, opts *Opts) (*Macro, error Value: value, } - evaluator.AppendFieldValues(fieldValue) + evaluator.Values.AppendFieldValue(fieldValue) } if err := evaluator.Compile(DefaultStringCmpOpts); err != nil { diff --git a/pkg/security/secl/compiler/eval/model_test.go b/pkg/security/secl/compiler/eval/model_test.go index cd16fb809640a..e18e66b52c7b1 100644 --- a/pkg/security/secl/compiler/eval/model_test.go +++ b/pkg/security/secl/compiler/eval/model_test.go @@ -47,7 +47,7 @@ type testItemListIterator struct { } func (t *testItemListIterator) Front(ctx *Context) unsafe.Pointer { - if front := (*testEvent)(ctx.Object).process.list.Front(); front != nil { + if front := ctx.Event.(*testEvent).process.list.Front(); front != nil { t.prev = front return unsafe.Pointer(front) } @@ -63,14 +63,14 @@ func (t *testItemListIterator) Next() unsafe.Pointer { } type testItemArrayIterator struct { - ctx *Context + event *testEvent index int } func (t *testItemArrayIterator) Front(ctx *Context) unsafe.Pointer { - t.ctx = ctx + t.event = ctx.Event.(*testEvent) - array := (*testEvent)(ctx.Object).process.array + array := ctx.Event.(*testEvent).process.array if t.index < len(array) { t.index++ return unsafe.Pointer(array[0]) @@ -79,7 +79,7 @@ func (t *testItemArrayIterator) Front(ctx *Context) unsafe.Pointer { } func (t *testItemArrayIterator) Next() unsafe.Pointer { - array := (*testEvent)(t.ctx.Object).process.array + array := t.event.process.array if t.index < len(array) { value := array[t.index] t.index++ @@ -133,10 +133,6 @@ func (e *testEvent) GetTags() []string { return []string{} } -func (e *testEvent) GetPointer() unsafe.Pointer { - return unsafe.Pointer(e) -} - func (m *testModel) NewEvent() Event { return &testEvent{} } @@ -175,7 +171,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &CIDREvaluator{ EvalFnc: func(ctx *Context) net.IPNet { - return (*testEvent)(ctx.Object).network.ip + return ctx.Event.(*testEvent).network.ip }, Field: field, }, nil @@ -184,7 +180,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &CIDREvaluator{ EvalFnc: func(ctx *Context) net.IPNet { - return (*testEvent)(ctx.Object).network.cidr + return ctx.Event.(*testEvent).network.cidr }, Field: field, }, nil @@ -194,7 +190,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &CIDRArrayEvaluator{ EvalFnc: func(ctx *Context) []net.IPNet { var ipnets []net.IPNet - for _, ip := range (*testEvent)(ctx.Object).network.ips { + for _, ip := range ctx.Event.(*testEvent).network.ips { ipnets = append(ipnets, ip) } return ipnets @@ -205,7 +201,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &CIDRArrayEvaluator{ EvalFnc: func(ctx *Context) []net.IPNet { - return (*testEvent)(ctx.Object).network.cidrs + return ctx.Event.(*testEvent).network.cidrs }, Field: field, }, nil @@ -213,7 +209,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro case "process.name": return &StringEvaluator{ - EvalFnc: func(ctx *Context) string { return (*testEvent)(ctx.Object).process.name }, + EvalFnc: func(ctx *Context) string { return ctx.Event.(*testEvent).process.name }, Field: field, OpOverrides: GlobCmp, }, nil @@ -221,7 +217,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro case "process.argv0": return &StringEvaluator{ - EvalFnc: func(ctx *Context) string { return (*testEvent)(ctx.Object).process.argv0 }, + EvalFnc: func(ctx *Context) string { return ctx.Event.(*testEvent).process.argv0 }, Field: field, }, nil @@ -230,9 +226,9 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &IntEvaluator{ EvalFnc: func(ctx *Context) int { // to test optimisation - (*testEvent)(ctx.Object).uidEvaluated = true + ctx.Event.(*testEvent).uidEvaluated = true - return (*testEvent)(ctx.Object).process.uid + return ctx.Event.(*testEvent).process.uid }, Field: field, }, nil @@ -242,9 +238,9 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &IntEvaluator{ EvalFnc: func(ctx *Context) int { // to test optimisation - (*testEvent)(ctx.Object).gidEvaluated = true + ctx.Event.(*testEvent).gidEvaluated = true - return (*testEvent)(ctx.Object).process.gid + return ctx.Event.(*testEvent).process.gid }, Field: field, }, nil @@ -254,9 +250,9 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &IntEvaluator{ EvalFnc: func(ctx *Context) int { // to test optimisation - (*testEvent)(ctx.Object).uidEvaluated = true + ctx.Event.(*testEvent).uidEvaluated = true - return (*testEvent)(ctx.Object).process.pid + return ctx.Event.(*testEvent).process.pid }, Field: field, }, nil @@ -264,7 +260,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro case "process.is_root": return &BoolEvaluator{ - EvalFnc: func(ctx *Context) bool { return (*testEvent)(ctx.Object).process.isRoot }, + EvalFnc: func(ctx *Context) bool { return ctx.Event.(*testEvent).process.isRoot }, Field: field, }, nil @@ -273,11 +269,11 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &IntArrayEvaluator{ EvalFnc: func(ctx *Context) []int { // to test optimisation - (*testEvent)(ctx.Object).listEvaluated = true + ctx.Event.(*testEvent).listEvaluated = true var result []int - el := (*testEvent)(ctx.Object).process.list.Front() + el := ctx.Event.(*testEvent).process.list.Front() for el != nil { result = append(result, el.Value.(*testItem).key) el = el.Next() @@ -294,11 +290,11 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &StringArrayEvaluator{ EvalFnc: func(ctx *Context) []string { // to test optimisation - (*testEvent)(ctx.Object).listEvaluated = true + ctx.Event.(*testEvent).listEvaluated = true var values []string - el := (*testEvent)(ctx.Object).process.list.Front() + el := ctx.Event.(*testEvent).process.list.Front() for el != nil { values = append(values, el.Value.(*testItem).value) el = el.Next() @@ -315,11 +311,11 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &BoolArrayEvaluator{ EvalFnc: func(ctx *Context) []bool { // to test optimisation - (*testEvent)(ctx.Object).listEvaluated = true + ctx.Event.(*testEvent).listEvaluated = true var result []bool - el := (*testEvent)(ctx.Object).process.list.Front() + el := ctx.Event.(*testEvent).process.list.Front() for el != nil { result = append(result, el.Value.(*testItem).flag) el = el.Next() @@ -337,7 +333,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro EvalFnc: func(ctx *Context) []int { var result []int - for _, el := range (*testEvent)(ctx.Object).process.array { + for _, el := range ctx.Event.(*testEvent).process.array { result = append(result, el.key) } @@ -353,7 +349,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro EvalFnc: func(ctx *Context) []string { var values []string - for _, el := range (*testEvent)(ctx.Object).process.array { + for _, el := range ctx.Event.(*testEvent).process.array { values = append(values, el.value) } @@ -369,7 +365,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro EvalFnc: func(ctx *Context) []bool { var result []bool - for _, el := range (*testEvent)(ctx.Object).process.array { + for _, el := range ctx.Event.(*testEvent).process.array { result = append(result, el.flag) } @@ -383,7 +379,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &IntEvaluator{ EvalFnc: func(ctx *Context) int { - return int((*testEvent)(ctx.Object).process.createdAt) + return int(ctx.Event.(*testEvent).process.createdAt) }, Field: field, }, nil @@ -392,14 +388,14 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro return &StringEvaluator{ EvalFnc: func(ctx *Context) string { - return (*testEvent)(ctx.Object).process.orName + return ctx.Event.(*testEvent).process.orName }, Field: field, OpOverrides: &OpOverrides{ StringValuesContains: func(a *StringEvaluator, b *StringValuesEvaluator, state *State) (*BoolEvaluator, error) { evaluator := StringValuesEvaluator{ EvalFnc: func(ctx *Context) *StringValues { - return (*testEvent)(ctx.Object).process.orNameValues() + return ctx.Event.(*testEvent).process.orNameValues() }, } @@ -408,7 +404,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro StringEquals: func(a *StringEvaluator, b *StringEvaluator, state *State) (*BoolEvaluator, error) { evaluator := StringValuesEvaluator{ EvalFnc: func(ctx *Context) *StringValues { - return (*testEvent)(ctx.Object).process.orNameValues() + return ctx.Event.(*testEvent).process.orNameValues() }, } @@ -423,7 +419,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro EvalFnc: func(ctx *Context) []string { var values []string - for _, el := range (*testEvent)(ctx.Object).process.orArray { + for _, el := range ctx.Event.(*testEvent).process.orArray { values = append(values, el.value) } @@ -434,7 +430,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro StringArrayContains: func(a *StringEvaluator, b *StringArrayEvaluator, state *State) (*BoolEvaluator, error) { evaluator := StringValuesEvaluator{ EvalFnc: func(ctx *Context) *StringValues { - return (*testEvent)(ctx.Object).process.orArrayValues() + return ctx.Event.(*testEvent).process.orArrayValues() }, } @@ -443,7 +439,7 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro StringArrayMatches: func(a *StringArrayEvaluator, b *StringValuesEvaluator, state *State) (*BoolEvaluator, error) { evaluator := StringValuesEvaluator{ EvalFnc: func(ctx *Context) *StringValues { - return (*testEvent)(ctx.Object).process.orArrayValues() + return ctx.Event.(*testEvent).process.orArrayValues() }, } @@ -455,35 +451,35 @@ func (m *testModel) GetEvaluator(field Field, regID RegisterID) (Evaluator, erro case "open.filename": return &StringEvaluator{ - EvalFnc: func(ctx *Context) string { return (*testEvent)(ctx.Object).open.filename }, + EvalFnc: func(ctx *Context) string { return ctx.Event.(*testEvent).open.filename }, Field: field, }, nil case "open.flags": return &IntEvaluator{ - EvalFnc: func(ctx *Context) int { return (*testEvent)(ctx.Object).open.flags }, + EvalFnc: func(ctx *Context) int { return ctx.Event.(*testEvent).open.flags }, Field: field, }, nil case "open.mode": return &IntEvaluator{ - EvalFnc: func(ctx *Context) int { return (*testEvent)(ctx.Object).open.mode }, + EvalFnc: func(ctx *Context) int { return ctx.Event.(*testEvent).open.mode }, Field: field, }, nil case "mkdir.filename": return &StringEvaluator{ - EvalFnc: func(ctx *Context) string { return (*testEvent)(ctx.Object).mkdir.filename }, + EvalFnc: func(ctx *Context) string { return ctx.Event.(*testEvent).mkdir.filename }, Field: field, }, nil case "mkdir.mode": return &IntEvaluator{ - EvalFnc: func(ctx *Context) int { return (*testEvent)(ctx.Object).mkdir.mode }, + EvalFnc: func(ctx *Context) int { return ctx.Event.(*testEvent).mkdir.mode }, Field: field, }, nil } diff --git a/pkg/security/secl/compiler/eval/registers.go b/pkg/security/secl/compiler/eval/registers.go index ec86446770533..7e537c8ca3066 100644 --- a/pkg/security/secl/compiler/eval/registers.go +++ b/pkg/security/secl/compiler/eval/registers.go @@ -5,20 +5,11 @@ package eval -import ( - "unsafe" -) - // RegisterID identify a register ID type RegisterID = string -// Register describes a register that can be used by a set -type Register struct { - Value unsafe.Pointer -} - // Registers defines all available registers -type Registers map[RegisterID]*Register +type Registers map[RegisterID]struct{} // Clone returns a copy of the registers func (r Registers) Clone() Registers { diff --git a/pkg/security/secl/compiler/eval/variables.go b/pkg/security/secl/compiler/eval/variables.go index 6988cbc8c01c3..574e5b3b623c4 100644 --- a/pkg/security/secl/compiler/eval/variables.go +++ b/pkg/security/secl/compiler/eval/variables.go @@ -10,7 +10,6 @@ import ( "fmt" "reflect" "regexp" - "unsafe" ) var ( @@ -388,7 +387,7 @@ func NewMutableIntArrayVariable() *MutableIntArrayVariable { } // Scoper maps a variable to the entity its scoped to -type Scoper func(ctx *Context) unsafe.Pointer +type Scoper[T any] func(ctx *Context) T // GlobalVariables holds a set of global variables type GlobalVariables struct{} @@ -470,14 +469,14 @@ func (v *Variables) Set(name string, value interface{}) bool { } // ScopedVariables holds a set of scoped variables -type ScopedVariables struct { - scoper Scoper - onNewVariables func(_ unsafe.Pointer) - vars map[unsafe.Pointer]*Variables +type ScopedVariables[T comparable] struct { + scoper Scoper[T] + onNewVariables func(T) + vars map[T]*Variables } // GetVariable returns new variable of the type of the specified value -func (v *ScopedVariables) GetVariable(name string, value interface{}) (VariableValue, error) { +func (v *ScopedVariables[T]) GetVariable(name string, value interface{}) (VariableValue, error) { getVariables := func(ctx *Context) *Variables { return v.vars[v.scoper(ctx)] } @@ -539,15 +538,15 @@ func (v *ScopedVariables) GetVariable(name string, value interface{}) (VariableV } // ReleaseVariable releases a scoped variable -func (v *ScopedVariables) ReleaseVariable(key unsafe.Pointer) { +func (v *ScopedVariables[T]) ReleaseVariable(key T) { delete(v.vars, key) } // NewScopedVariables returns a new set of scope variables -func NewScopedVariables(scoper Scoper, onNewVariables func(unsafe.Pointer)) *ScopedVariables { - return &ScopedVariables{ +func NewScopedVariables[T comparable](scoper Scoper[T], onNewVariables func(T)) *ScopedVariables[T] { + return &ScopedVariables[T]{ scoper: scoper, onNewVariables: onNewVariables, - vars: make(map[unsafe.Pointer]*Variables), + vars: make(map[T]*Variables), } } diff --git a/pkg/security/secl/compiler/generators/accessors/accessors.go b/pkg/security/secl/compiler/generators/accessors/accessors.go index 031cb60875d58..e3b7ab3ec5108 100644 --- a/pkg/security/secl/compiler/generators/accessors/accessors.go +++ b/pkg/security/secl/compiler/generators/accessors/accessors.go @@ -38,14 +38,13 @@ const ( ) var ( - filename string - pkgname string - output string - verbose bool - mock bool - docOutput string - fieldsResolverOutput string - buildTags string + filename string + pkgname string + output string + verbose bool + docOutput string + fieldHandlersOutput string + buildTags string ) var ( @@ -78,9 +77,9 @@ func qualifiedType(module *common.Module, kind string) string { } // handleBasic adds fields of "basic" type to list of exposed SECL fields of the module -func handleBasic(module *common.Module, name, alias, kind, event string, iterator *common.StructField, isArray bool, opOverrides string, constants string, commentText string) *common.StructField { +func handleBasic(module *common.Module, name, alias, aliasPrefix, kind, event string, iterator *common.StructField, isArray bool, opOverrides string, commentText string, containerStructName string) *common.StructField { if verbose { - fmt.Printf("handleBasic name: %s, kind: %s, alias: %s\n", name, kind, alias) + fmt.Printf("handleBasic name: %s, kind: %s, alias: %s, isArray: %v\n", name, kind, alias, isArray) } basicType := origTypeToBasicType(kind) @@ -94,7 +93,9 @@ func handleBasic(module *common.Module, name, alias, kind, event string, iterato Iterator: iterator, CommentText: commentText, OpOverrides: opOverrides, - Constants: constants, + Struct: containerStructName, + Alias: alias, + AliasPrefix: aliasPrefix, } if _, ok := module.EventTypes[event]; !ok { @@ -104,7 +105,7 @@ func handleBasic(module *common.Module, name, alias, kind, event string, iterato return module.Fields[alias] } -func handleField(module *common.Module, astFile *ast.File, name, alias, prefix, aliasPrefix, pkgName string, fieldType string, event string, iterator *common.StructField, dejavu map[string]bool, isArray bool, opOverride string, constants string, commentText string, field seclField) error { +func handleField(module *common.Module, astFile *ast.File, name, alias, prefix, aliasPrefix, pkgName string, fieldType string, event string, iterator *common.StructField, dejavu map[string]bool, isArray bool, opOverride string, commentText string, field seclField) error { if verbose { fmt.Printf("handleField fieldName %s, alias %s, prefix %s, aliasPrefix %s, pkgName %s, fieldType, %s\n", name, alias, prefix, aliasPrefix, pkgName, fieldType) } @@ -115,9 +116,9 @@ func handleField(module *common.Module, astFile *ast.File, name, alias, prefix, name = prefix + "." + name alias = aliasPrefix + "." + alias } - handleBasic(module, name, alias, fieldType, event, iterator, isArray, opOverride, constants, commentText) + handleBasic(module, name, alias, aliasPrefix, fieldType, event, iterator, isArray, opOverride, commentText, field.containerStructName) if field.lengthField { - field := handleBasic(module, name+".length", alias+".length", "int", event, iterator, isArray, opOverride, constants, commentText) + field := handleBasic(module, name+".length", alias+".length", alias, "int", event, iterator, isArray, opOverride, doc.SECLDocForLength, "string") field.IsLength = true field.OrigType = "int" } @@ -182,6 +183,7 @@ type seclField struct { weight int64 check string exposedAtEventRootOnly bool // fields that should only be exposed at the root of an event, i.e. `parent` should not be exposed for an `ancestor` of a process + containerStructName string } func parseFieldDef(def string) (seclField, error) { @@ -272,7 +274,6 @@ func handleSpec(module *common.Module, astFile *ast.File, spec interface{}, pref } var opOverrides string - var constants string var fields []seclField fieldType, isPointer, isArray := getFieldIdentName(field.Type) @@ -291,14 +292,13 @@ func handleSpec(module *common.Module, astFile *ast.File, spec interface{}, pref if field.name == "-" { continue FIELD } + field.containerStructName = typeSpec.Name.Name fields = append(fields, field) } case "op_override": opOverrides = tag.Value() - case "constants": - constants = tag.Value() } } } else { @@ -324,7 +324,6 @@ func handleSpec(module *common.Module, astFile *ast.File, spec interface{}, pref OrigType: qualifiedType(module, fieldType), IsOrigTypePtr: isPointer, IsArray: isArray, - Constants: constants, Check: seclField.check, } @@ -339,7 +338,6 @@ func handleSpec(module *common.Module, astFile *ast.File, spec interface{}, pref Weight: seclField.weight, CommentText: fieldCommentText, OpOverrides: opOverrides, - Constants: constants, CachelessResolution: seclField.cachelessResolution, SkipADResolution: seclField.skipADResolution, Check: seclField.check, @@ -357,7 +355,7 @@ func handleSpec(module *common.Module, astFile *ast.File, spec interface{}, pref Prefix: prefix, Name: prefixedFieldName, BasicType: origTypeToBasicType(fieldType), - Struct: typeSpec.Name.Name, + Struct: seclField.containerStructName, Handler: handler, ReturnType: origTypeToBasicType(fieldType), Event: event, @@ -367,11 +365,12 @@ func handleSpec(module *common.Module, astFile *ast.File, spec interface{}, pref Weight: seclField.weight, CommentText: fieldCommentText, OpOverrides: opOverrides, - Constants: constants, CachelessResolution: seclField.cachelessResolution, SkipADResolution: seclField.skipADResolution, IsOrigTypePtr: isPointer, Check: seclField.check, + Alias: alias, + AliasPrefix: aliasPrefix, } if seclField.lengthField { @@ -381,8 +380,11 @@ func handleSpec(module *common.Module, astFile *ast.File, spec interface{}, pref lengthField.OrigType = "int" lengthField.BasicType = "int" lengthField.ReturnType = "int" - module.Fields[fieldBasenameSECLNormalized+".length"] = &lengthField - lengthField.CommentText = "Length of '" + fieldBasenameSECLNormalized + "' string" + lengthField.Struct = "string" + lengthField.AliasPrefix = fieldBasenameSECLNormalized + lengthField.Alias = fieldBasenameSECLNormalized + ".length" + lengthField.CommentText = doc.SECLDocForLength + module.Fields[lengthField.Alias] = &lengthField } if _, ok = module.EventTypes[event]; !ok { @@ -398,7 +400,7 @@ func handleSpec(module *common.Module, astFile *ast.File, spec interface{}, pref dejavu[fieldBasename] = true if len(fieldType) != 0 { - if err := handleField(module, astFile, fieldBasename, fieldBasenameSECLNormalized, prefix, aliasPrefix, pkgname, fieldType, event, fieldIterator, dejavu, false, opOverrides, constants, fieldCommentText, seclField); err != nil { + if err := handleField(module, astFile, fieldBasename, fieldBasenameSECLNormalized, prefix, aliasPrefix, pkgname, fieldType, event, fieldIterator, dejavu, isArray, opOverrides, fieldCommentText, seclField); err != nil { log.Print(err) } @@ -507,7 +509,6 @@ func parseFile(filename string, pkgName string) (*common.Module, error) { AllFields: make(map[string]*common.StructField), Iterators: make(map[string]*common.StructField), EventTypes: make(map[string]*common.EventTypeMetadata), - Mock: mock, } // If the target package is different from the model package @@ -554,7 +555,7 @@ func newField(allFields map[string]*common.StructField, field *common.StructFiel if field, ok := allFields[path]; ok { if field.IsOrigTypePtr { - result += fmt.Sprintf("if e.%s == nil { e.%s = &%s{} }\n", field.Name, field.Name, field.OrigType) + result += fmt.Sprintf("if ev.%s == nil { ev.%s = &%s{} }\n", field.Name, field.Name, field.OrigType) } } } @@ -562,13 +563,13 @@ func newField(allFields map[string]*common.StructField, field *common.StructFiel return result } -func getFieldResolver(allFields map[string]*common.StructField, field *common.StructField) string { +func getFieldHandler(allFields map[string]*common.StructField, field *common.StructField) string { if field.Handler == "" || field.Iterator != nil || field.CachelessResolution { return "" } if field.Prefix == "" { - return fmt.Sprintf("ev.%s(ev)", field.Handler) + return fmt.Sprintf("ev.FieldHandlers.%s(ev)", field.Handler) } ptr := "&" @@ -576,21 +577,14 @@ func getFieldResolver(allFields map[string]*common.StructField, field *common.St ptr = "" } - return fmt.Sprintf("ev.%s(%sev.%s)", field.Handler, ptr, field.Prefix) + return fmt.Sprintf("ev.FieldHandlers.%s(ev, %sev.%s)", field.Handler, ptr, field.Prefix) } -func fieldADPrint(field *common.StructField, resolver string) string { +func fieldADPrint(field *common.StructField, handler string) string { if field.SkipADResolution { - return fmt.Sprintf("if !forADs { _ = %s }", resolver) + return fmt.Sprintf("if !forADs { _ = %s }", handler) } - return fmt.Sprintf("_ = %s", resolver) -} - -func override(str string, mock bool) string { - if !strings.Contains(str, ".") && !mock { - return "model." + str - } - return str + return fmt.Sprintf("_ = %s", handler) } func getHolder(allFields map[string]*common.StructField, field *common.StructField) *common.StructField { @@ -629,22 +623,55 @@ func getChecks(allFields map[string]*common.StructField, field *common.StructFie return checks } +func getHandlers(allFields map[string]*common.StructField) map[string]string { + handlers := make(map[string]string) + + for _, field := range allFields { + if field.Handler != "" && !field.IsLength { + returnType := field.ReturnType + if field.IsArray { + returnType = "[]" + returnType + } + + handler := fmt.Sprintf("%s(ev *Event, e *%s) %s", field.Handler, field.Struct, returnType) + + if _, exists := handlers[handler]; exists { + continue + } + + name := "e" + strings.TrimPrefix(field.Name, field.Prefix) + + if field.ReturnType == "int" { + if field.IsArray { + handlers[handler] = fmt.Sprintf("{ var result []int; for _, value := range %s { result = append(result, int(value)) }; return result }", name) + } else { + handlers[handler] = fmt.Sprintf("{ return int(%s) }", name) + } + } else { + handlers[handler] = fmt.Sprintf("{ return %s }", name) + } + } + } + + return handlers +} + var funcMap = map[string]interface{}{ - "TrimPrefix": strings.TrimPrefix, - "TrimSuffix": strings.TrimSuffix, - "HasPrefix": strings.HasPrefix, - "NewField": newField, - "Override": override, - "GetFieldResolver": getFieldResolver, - "FieldADPrint": fieldADPrint, - "GetChecks": getChecks, + "TrimPrefix": strings.TrimPrefix, + "TrimSuffix": strings.TrimSuffix, + "HasPrefix": strings.HasPrefix, + "NewField": newField, + "GetFieldHandler": getFieldHandler, + "FieldADPrint": fieldADPrint, + "GetChecks": getChecks, + "GetHandlers": getHandlers, } //go:embed accessors.tmpl var accessorsTemplateCode string -//go:embed fields_resolver.tmpl -var fieldsResolverTemplate string +//go:embed field_handlers.tmpl +var fieldHandlersTemplate string func main() { module, err := parseFile(filename, pkgname) @@ -652,8 +679,8 @@ func main() { panic(err) } - if len(fieldsResolverOutput) > 0 { - if err = GenerateContent(fieldsResolverOutput, module, fieldsResolverTemplate); err != nil { + if len(fieldHandlersOutput) > 0 { + if err = GenerateContent(fieldHandlersOutput, module, fieldHandlersTemplate); err != nil { panic(err) } } @@ -719,9 +746,8 @@ func removeEmptyLines(input *bytes.Buffer) string { func init() { flag.BoolVar(&verbose, "verbose", false, "Be verbose") - flag.BoolVar(&mock, "mock", false, "Mock accessors") flag.StringVar(&docOutput, "doc", "", "Generate documentation JSON") - flag.StringVar(&fieldsResolverOutput, "fields-resolver", "", "Fields resolver output file") + flag.StringVar(&fieldHandlersOutput, "field-handlers", "", "Field handlers output file") flag.StringVar(&filename, "input", os.Getenv("GOFILE"), "Go file to generate decoders from") flag.StringVar(&pkgname, "package", pkgPrefix+"/"+os.Getenv("GOPACKAGE"), "Go package name") flag.StringVar(&buildTags, "tags", "", "build tags used for parsing") diff --git a/pkg/security/secl/compiler/generators/accessors/accessors.tmpl b/pkg/security/secl/compiler/generators/accessors/accessors.tmpl index 860209a13d6f9..65bd017880f0b 100644 --- a/pkg/security/secl/compiler/generators/accessors/accessors.tmpl +++ b/pkg/security/secl/compiler/generators/accessors/accessors.tmpl @@ -4,24 +4,12 @@ package {{.Name}} -{{$Mock := .Mock}} - import ( "net" "reflect" - "unsafe" {{if ne $.SourcePkg $.TargetPkg}}"{{.SourcePkg}}"{{end}} "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" - - {{if not $Mock}} - _ "github.com/DataDog/datadog-agent/pkg/security/secl/model" - {{end}} -) - -// suppress unused package warning -var ( - _ *unsafe.Pointer ) func (m *Model) GetIterator(field eval.Field) (eval.Iterator, error) { @@ -51,20 +39,19 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "{{$Name}}": return &{{$Field.GetEvaluatorType}}{ {{- if $Field.OpOverrides}} - OpOverrides: {{$Mock | Override $Field.OpOverrides}}, + OpOverrides: {{$Field.OpOverrides}}, {{- end}} {{- if $Field.Iterator}} EvalFnc: func(ctx *eval.Context) []{{$Field.ReturnType}} { + {{if $Field.Handler}} + ev := ctx.Event.(*Event) + {{end}} {{$Checks := $Field | GetChecks $.AllFields}} - {{- if not $Mock }} - if ptr := ctx.Cache[field]; ptr != nil { - if result := (*[]{{$Field.ReturnType}})(ptr); result != nil { - return *result - } + if result, ok := ctx.{{$Field.GetCacheName}}[field]; ok { + return result } - {{end -}} var results []{{$Field.ReturnType}} @@ -94,10 +81,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval {{$SubName := $Field.Iterator.Name | TrimPrefix $Field.Name}} {{$Return := $SubName | printf "element%s"}} - {{if and (ne $Field.Handler "") (not $Mock) }} + {{if $Field.Handler }} {{$SubName = $Field.Iterator.Name | TrimPrefix $Field.Prefix}} {{$Handler := $Field.Iterator.Name | TrimPrefix $Field.Handler}} - {{$Return = print "(*Event)(ctx.Object)." $Handler "(&element" $SubName ")"}} + {{$Return = print "ev.FieldHandlers." $Handler "(ev, &element" $SubName ")"}} {{end}} {{if eq $Field.ReturnType "int"}} @@ -110,7 +97,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval result := {{$Return}} {{end}} - {{if eq $Field.GetArrayPrefix ""}} + {{if not $Field.GetArrayPrefix}} results = append(results, result) {{else}} results = append(results, result...) @@ -119,32 +106,32 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() } - {{- if not $Mock }} - ctx.Cache[field] = unsafe.Pointer(&results) - {{end}} + ctx.{{$Field.GetCacheName}}[field] = results return results }, {{- else}} {{- $ReturnType := $Field.ReturnType}} EvalFnc: func(ctx *eval.Context) {{$Field.GetArrayPrefix}}{{$ReturnType}} { - {{$Return := $Field.Name | printf "(*Event)(ctx.Object).%s"}} + ev := ctx.Event.(*Event) + + {{$Return := $Field.Name | printf "ev.%s"}} {{$Checks := $Field | GetChecks $.AllFields}} {{range $Check := $Checks}} - {{$Check = $Check | printf "(*Event)(ctx.Object).%s"}} + {{$Check = $Check | printf "ev.%s"}} if !{{$Check}}() { return {{$Field.GetDefaultReturnValue}} } {{end}} - - {{- if and (ne $Field.Handler "") (not $Mock)}} + + {{- if $Field.Handler}} {{$Ptr := "&"}} {{$Parent := index $.AllFields $Field.Prefix}} {{- if $Parent.IsOrigTypePtr}} {{$Ptr = ""}} {{end}} - {{$Return = print "(*Event)(ctx.Object)." $Field.Handler "(" $Ptr "(*Event)(ctx.Object)." $Field.Prefix ")"}} + {{$Return = print "ev.FieldHandlers." $Field.Handler "(ev, " $Ptr "ev." $Field.Prefix ")"}} {{end}} {{- if eq $ReturnType "int"}} @@ -192,7 +179,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return nil, &eval.ErrFieldNotFound{Field: field} } -func (e *Event) GetFields() []eval.Field { +func (ev *Event) GetFields() []eval.Field { return []eval.Field{ {{range $Name, $Field := .Fields}} "{{$Name}}", @@ -200,14 +187,14 @@ func (e *Event) GetFields() []eval.Field { } } -func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { +func (ev *Event) GetFieldValue(field eval.Field) (interface{}, error) { switch field { {{range $Name, $Field := .Fields}} case "{{$Name}}": {{if $Field.Iterator}} var values []{{$Field.ReturnType}} - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &{{$Field.Iterator.ReturnType}}{} ptr := iterator.Front(ctx) @@ -223,15 +210,16 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { {{$SubName := $Field.Iterator.Name | TrimPrefix $Field.Name}} {{$Return := $SubName | printf "element%s"}} - {{if and (ne $Field.Handler "") (not $Mock) }} + {{if $Field.Handler}} {{$SubName = $Field.Iterator.Name | TrimPrefix $Field.Prefix}} {{$Handler := $Field.Iterator.Name | TrimPrefix $Field.Handler}} - {{$Return = print "(*Event)(ctx.Object)." $Handler "(&element" $SubName ")"}} + {{$Return = print "ev.FieldHandlers." $Handler "(ev, &element" $SubName ")"}} {{end}} {{if $Field.IsLength}} {{$Return = ".length" | TrimSuffix $Return}} {{end}} + {{if and (eq $Field.ReturnType "int") (ne $Field.OrigType "int")}} result := int({{$Return}}) {{else}} @@ -242,7 +230,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { {{end}} {{end}} - {{if eq $Field.GetArrayPrefix ""}} + {{if not $Field.GetArrayPrefix}} values = append(values, result) {{else}} values = append(values, result...) @@ -253,18 +241,18 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil {{else}} - {{$Return := $Field.Name | printf "e.%s"}} + {{$Return := $Field.Name | printf "ev.%s"}} {{if $Field.IsLength}} - {{$Return = ".length" | TrimSuffix $Field.Name | printf "len(e.%s)"}} + {{$Return = ".length" | TrimSuffix $Field.Name | printf "len(ev.%s)"}} {{end}} - {{if and (ne $Field.Handler "") (not $Mock)}} + {{if $Field.Handler}} {{$Ptr := "&"}} {{$Parent := index $.AllFields $Field.Prefix}} {{- if $Parent.IsOrigTypePtr}} {{$Ptr = ""}} {{end}} - {{$Return = print "e." $Field.Handler "(" $Ptr "e." $Field.Prefix ")"}} + {{$Return = print "ev.FieldHandlers." $Field.Handler "(ev, " $Ptr "ev." $Field.Prefix ")"}} {{end}} {{if eq $Field.ReturnType "string"}} @@ -295,7 +283,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return nil, &eval.ErrFieldNotFound{Field: field} } -func (e *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { +func (ev *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { switch field { {{range $Name, $Field := .Fields}} case "{{$Name}}": @@ -306,7 +294,7 @@ func (e *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { return "", &eval.ErrFieldNotFound{Field: field} } -func (e *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { +func (ev *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { switch field { {{range $Name, $Field := .Fields}} @@ -326,60 +314,91 @@ func (e *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { return reflect.Invalid, &eval.ErrFieldNotFound{Field: field} } -func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { +func (ev *Event) SetFieldValue(field eval.Field, value interface{}) error { switch field { {{range $Name, $Field := .Fields}} - {{$FieldName := $Field.Name | printf "e.%s"}} + {{$FieldName := $Field.Name | printf "ev.%s"}} case "{{$Name}}": {{- $Field | NewField $.AllFields}} - {{- if eq $Field.OrigType "string"}} - {{if $Field.IsLength}} - return &eval.ErrFieldReadOnly{Field: "{{$Name}}"} - {{else}} - str, ok := value.(string) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "{{$Field.Name}}"} - } - {{- if $Field.IsArray}} - {{$FieldName}} = append({{$FieldName}}, str) - {{else}} - {{$FieldName}} = str - {{end}} - return nil - {{end}} - {{else if eq $Field.BasicType "int"}} {{if $Field.IsLength}} return &eval.ErrFieldReadOnly{Field: "{{$Name}}"} {{else}} - v, ok := value.(int) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "{{$Field.Name}}"} - } - {{- if $Field.IsArray}} - {{$FieldName}} = append({{$FieldName}}, {{$Field.OrigType}}(v)) - {{else}} - {{$FieldName}} = {{$Field.OrigType}}(v) + {{- if eq $Field.OrigType "string"}} + {{- if $Field.IsArray}} + switch rv := value.(type) { + case string: + {{$FieldName}} = append({{$FieldName}}, rv) + case []string: + {{$FieldName}} = append({{$FieldName}}, rv...) + default: + return &eval.ErrValueTypeMismatch{Field: "{{$Field.Name}}"} + } + {{else}} + rv, ok := value.(string) + if !ok { + return &eval.ErrValueTypeMismatch{Field: "{{$Field.Name}}"} + } + {{$FieldName}} = rv + {{end}} + return nil + {{else if eq $Field.BasicType "int"}} + {{- if $Field.IsArray}} + switch rv := value.(type) { + case int: + {{$FieldName}} = append({{$FieldName}}, {{$Field.OrigType}}(rv)) + case []int: + for _, i := range rv { + {{$FieldName}} = append({{$FieldName}}, {{$Field.OrigType}}(i)) + } + default: + return &eval.ErrValueTypeMismatch{Field: "{{$Field.Name}}"} + } + {{else}} + rv, ok := value.(int) + if !ok { + return &eval.ErrValueTypeMismatch{Field: "{{$Field.Name}}"} + } + {{$FieldName}} = {{$Field.OrigType}}(rv) + {{end}} + return nil + {{else if eq $Field.BasicType "bool"}} + {{- if $Field.IsArray}} + switch rv := value.(type) { + case bool: + {{$FieldName}} = append({{$FieldName}}, rv) + case []bool: + {{$FieldName}} = append({{$FieldName}}, rv...) + default: + return &eval.ErrValueTypeMismatch{Field: "{{$Field.Name}}"} + } + {{else}} + rv, ok := value.(bool) + if !ok { + return &eval.ErrValueTypeMismatch{Field: "{{$Field.Name}}"} + } + {{$FieldName}} = rv + {{end}} + return nil + {{else if eq $Field.BasicType "net.IPNet"}} + {{- if $Field.IsArray}} + switch rv := value.(type) { + case net.IPNet: + {{$FieldName}} = append({{$FieldName}}, rv) + case []net.IPNet: + {{$FieldName}} = append({{$FieldName}}, rv...) + default: + return &eval.ErrValueTypeMismatch{Field: "{{$Field.Name}}"} + } + {{else}} + rv, ok := value.(net.IPNet) + if !ok { + return &eval.ErrValueTypeMismatch{Field: "{{$Field.Name}}"} + } + {{$FieldName}} = rv + {{end}} + return nil {{end}} - return nil {{end}} - {{else if eq $Field.BasicType "bool"}} - var ok bool - if {{$FieldName}}, ok = value.(bool); !ok { - return &eval.ErrValueTypeMismatch{Field: "{{$Field.Name}}"} - } - return nil - {{else if eq $Field.BasicType "net.IPNet"}} - v, ok := value.(net.IPNet) - if !ok { - return &eval.ErrValueTypeMismatch{Field: "{{$Field.Name}}"} - } - {{- if $Field.IsArray}} - {{$FieldName}} = append({{$FieldName}}, v) - {{else}} - {{$FieldName}} = v - {{end}} - return nil - {{end}} {{end}} } diff --git a/pkg/security/secl/compiler/generators/accessors/common/types.go b/pkg/security/secl/compiler/generators/accessors/common/types.go index 50af7eda4360b..b04d0582ff234 100644 --- a/pkg/security/secl/compiler/generators/accessors/common/types.go +++ b/pkg/security/secl/compiler/generators/accessors/common/types.go @@ -51,8 +51,9 @@ type StructField struct { Weight int64 CommentText string OpOverrides string - Constants string Check string + Alias string + AliasPrefix string } // GetEvaluatorType returns the evaluator type name @@ -127,3 +128,17 @@ func (sf *StructField) GetArrayPrefix() string { } return "" } + +// GetCacheName returns the cache name +func (sf *StructField) GetCacheName() string { + switch sf.ReturnType { + case "string": + return "StringCache" + case "int": + return "IntCache" + case "bool": + return "BoolCache" + default: + panic("no cache name defined for this return type") + } +} diff --git a/pkg/security/secl/compiler/generators/accessors/doc/doc.go b/pkg/security/secl/compiler/generators/accessors/doc/doc.go index 51dee4a13a755..22b5a92a16b00 100644 --- a/pkg/security/secl/compiler/generators/accessors/doc/doc.go +++ b/pkg/security/secl/compiler/generators/accessors/doc/doc.go @@ -22,11 +22,13 @@ import ( const ( generateConstantsAnnotationPrefix = "// generate_constants:" + SECLDocForLength = "SECLDoc[length] Definition:`Length of the corresponding string`" ) type documentation struct { - Types []eventType `json:"event_types"` - Constants []constants `json:"constants"` + Types []eventType `json:"event_types"` + PropertiesDoc []propertyDocumentation `json:"properties_doc"` + Constants []constants `json:"constants"` } type eventType struct { @@ -39,14 +41,15 @@ type eventType struct { } type eventTypeProperty struct { - Name string `json:"name"` - Type string `json:"type"` - Doc string `json:"definition"` - Constants string `json:"constants"` + Name string `json:"name"` + Definition string `json:"definition"` + DocLink string `json:"property_doc_link"` + PropertyKey string `json:"-"` } type constants struct { Name string `json:"name"` + Link string `json:"link"` Description string `json:"description"` All []constant `json:"all"` } @@ -56,6 +59,23 @@ type constant struct { Architecture string `json:"architecture"` } +type example struct { + Expression string `json:"expression"` + Description string `json:"description"` +} + +type propertyDocumentation struct { + Name string `json:"name"` + Link string `json:"link"` + Type string `json:"type"` + Doc string `json:"definition"` + Prefixes []string `json:"prefixes"` + Constants string `json:"constants"` + ConstantsLink string `json:"constants_link"` + Examples []example `json:"examples"` + IsUniqueEventProperty bool `json:"-"` +} + func translateFieldType(rt string) string { switch rt { case "net.IPNet", "net.IP": @@ -73,31 +93,86 @@ func GenerateDocJSON(module *common.Module, seclModelPath, outputPath string) er } kinds := make(map[string][]eventTypeProperty) + cachedDocumentation := make(map[string]*propertyDocumentation) for name, field := range module.Fields { - // check if the constant exists - if len(field.Constants) > 0 { - var found bool - for _, constantList := range consts { - if constantList.Name == field.Constants { - found = true + var propertyKey string + var propertySuffix string + var propertyDefinition string + if strings.HasPrefix(field.Alias, field.AliasPrefix) { + propertySuffix = strings.TrimPrefix(field.Alias, field.AliasPrefix) + propertyKey = field.Struct + propertySuffix + propertySuffix = strings.TrimPrefix(propertySuffix, ".") + } else { + propertyKey = field.Alias + propertySuffix = field.Alias + } + + if propertyDoc, exists := cachedDocumentation[propertyKey]; !exists { + definition, constantsName, examples := parseSECLDocWithSuffix(field.CommentText, propertySuffix) + if definition == "" { + return fmt.Errorf("failed to parse SECL documentation for field '%s' (name:%s psuffix:%s, pkey:%s, alias:%s, aliasprefix:%s)\n%+v", name, field.Name, propertySuffix, propertyKey, field.Alias, field.AliasPrefix, field) + } + + var constsLink string + if len(constantsName) > 0 { + var found bool + for _, constantList := range consts { + if constantList.Name == constantsName { + found = true + constsLink = constantList.Link + } + } + if !found { + return fmt.Errorf("couldn't generate documentation for %s: unknown constant name %s", name, constantsName) } } - if !found { - return fmt.Errorf("couldn't generate documentation for %s: unknown constant name %s", name, field.Constants) + + var propertyDoc = &propertyDocumentation{ + Name: name, + Link: strings.ReplaceAll(name, ".", "-") + "-doc", + Type: translateFieldType(field.ReturnType), + Doc: strings.TrimSpace(definition), + Prefixes: []string{field.AliasPrefix}, + Constants: constantsName, + ConstantsLink: constsLink, + Examples: make([]example, 0), // force the serialization of an empty array + IsUniqueEventProperty: true, } + propertyDoc.Examples = append(propertyDoc.Examples, examples...) + propertyDefinition = propertyDoc.Doc + cachedDocumentation[propertyKey] = propertyDoc + } else if propertyDoc.IsUniqueEventProperty { + propertyDoc.IsUniqueEventProperty = false + fieldSuffix := strings.TrimPrefix(field.Alias, field.AliasPrefix) + propertyDoc.Name = "*" + fieldSuffix + propertyDoc.Link = "common-" + strings.ReplaceAll(strings.ToLower(propertyKey), ".", "-") + "-doc" + propertyDoc.Prefixes = append(propertyDoc.Prefixes, field.AliasPrefix) + propertyDefinition = propertyDoc.Doc + } else { + propertyDoc.Prefixes = append(propertyDoc.Prefixes, field.AliasPrefix) + propertyDefinition = propertyDoc.Doc } kinds[field.Event] = append(kinds[field.Event], eventTypeProperty{ - Name: name, - Type: translateFieldType(field.ReturnType), - Doc: strings.TrimSpace(field.CommentText), - Constants: field.Constants, + Name: name, + Definition: propertyDefinition, + PropertyKey: propertyKey, }) } eventTypes := make([]eventType, 0) for name, properties := range kinds { + for i := 0; i < len(properties); i++ { + property := &properties[i] + if propertyDoc, exists := cachedDocumentation[property.PropertyKey]; exists { + property.DocLink = propertyDoc.Link + sort.Slice(propertyDoc.Prefixes, func(i, j int) bool { + return propertyDoc.Prefixes[i] < propertyDoc.Prefixes[j] + }) + } + } + sort.Slice(properties, func(i, j int) bool { return properties[i].Name < properties[j].Name }) @@ -118,9 +193,22 @@ func GenerateDocJSON(module *common.Module, seclModelPath, outputPath string) er return eventTypes[i].Name < eventTypes[j].Name }) + // force the serialization of an empty array + propertiesDoc := make([]propertyDocumentation, 0) + for _, ex := range cachedDocumentation { + propertiesDoc = append(propertiesDoc, *ex) + } + sort.Slice(propertiesDoc, func(i, j int) bool { + if propertiesDoc[i].Name != propertiesDoc[j].Name { + return propertiesDoc[i].Name < propertiesDoc[j].Name + } + return propertiesDoc[i].Link < propertiesDoc[j].Link + }) + doc := documentation{ - Types: eventTypes, - Constants: consts, + Types: eventTypes, + PropertiesDoc: propertiesDoc, + Constants: consts, } res, err := json.MarshalIndent(doc, "", " ") @@ -188,6 +276,12 @@ func parseArchFromFilepath(filepath string) (string, error) { } } +var nonLinkCharactersRegex = regexp.MustCompile(`(?:^[^a-z0-9]+)|(?:[^a-z0-9-]+)|(?:[^a-z0-9]+$)`) + +func constsLinkFromName(constName string) string { + return nonLinkCharactersRegex.ReplaceAllString(strings.ReplaceAll(strings.ToLower(strings.TrimSpace(constName)), " ", "-"), "") +} + func parseConstantsFile(filepath string, tags []string) ([]constants, error) { // extract architecture from filename arch, err := parseArchFromFilepath(filepath) @@ -236,6 +330,7 @@ func parseConstantsFile(filepath string, tags []string) ([]constants, error) { continue } consts.Name = name + consts.Link = constsLinkFromName(name) consts.Description = description break } @@ -325,3 +420,40 @@ func extractVersionAndDefinition(evtType *common.EventTypeMetadata) eventTypeInf Definition: trimmed, } } + +var ( + seclDocRE = regexp.MustCompile(`SECLDoc\[((?:[a-z0-9_]+\.?)*[a-z0-9_]+)\]\s*Definition:\s*\x60([^\x60]+)\x60\s*(?:Constants:\x60([^\x60]+)\x60\s*)?(?:Example:\s*\x60([^\x60]+)\x60\s*(?:Description:\s*\x60([^\x60]+)\x60\s*)?)*`) + examplesRE = regexp.MustCompile(`Example:\s*\x60([^\x60]+)\x60\s*(?:Description:\s*\x60([^\x60]+)\x60\s*)?`) +) + +func parseSECLDocWithSuffix(comment string, wantedSuffix string) (string, string, []example) { + trimmed := strings.TrimSpace(comment) + + for _, match := range seclDocRE.FindAllStringSubmatchIndex(trimmed, -1) { + matchedSubString := trimmed[match[0]:match[1]] + seclSuffix := trimmed[match[2]:match[3]] + if seclSuffix != wantedSuffix { + continue + } + + definition := trimmed[match[4]:match[5]] + var constants string + if match[6] != -1 && match[7] != -1 { + constants = trimmed[match[6]:match[7]] + } + + var examples []example + for _, exampleMatch := range examplesRE.FindAllStringSubmatchIndex(matchedSubString, -1) { + expr := matchedSubString[exampleMatch[2]:exampleMatch[3]] + var desc string + if exampleMatch[4] != -1 && exampleMatch[5] != -1 { + desc = matchedSubString[exampleMatch[4]:exampleMatch[5]] + } + examples = append(examples, example{Expression: expr, Description: desc}) + } + + return strings.TrimSpace(definition), strings.TrimSpace(constants), examples + } + + return "", "", nil +} diff --git a/pkg/security/secl/compiler/generators/accessors/fields_resolver.tmpl b/pkg/security/secl/compiler/generators/accessors/field_handlers.tmpl similarity index 76% rename from pkg/security/secl/compiler/generators/accessors/fields_resolver.tmpl rename to pkg/security/secl/compiler/generators/accessors/field_handlers.tmpl index 8c1fe630e0d3d..280147fc236cd 100644 --- a/pkg/security/secl/compiler/generators/accessors/fields_resolver.tmpl +++ b/pkg/security/secl/compiler/generators/accessors/field_handlers.tmpl @@ -9,17 +9,22 @@ package {{.Name}} -import ( +// ResolveFields resolves all the fields associate to the event type. Context fields are automatically resolved. +func (ev *Event) ResolveFields() { + ev.resolveFields(false) +} -) +// ResolveFieldsForAD resolves all the fields associate to the event type. Context fields are automatically resolved. +func (ev *Event) ResolveFieldsForAD() { + ev.resolveFields(true) +} -// ResolveFields resolves all the fields associate to the event type. Context fields are automatically resolved. -func (ev *Event) ResolveFields(forADs bool) { +func (ev *Event) resolveFields(forADs bool) { {{ $uniqueResolvers := dict }} // resolve context fields that are not related to any event type {{- range $Key, $Field := .Fields}} {{- if and (eq $Field.Event "*") }} - {{ $resolver := $Field | GetFieldResolver $.AllFields }} + {{ $resolver := $Field | GetFieldHandler $.AllFields }} {{ if and (ne $resolver "") (not (hasKey $uniqueResolvers $resolver)) }} {{$Checks := $Field | GetChecks $.AllFields}} {{if $Checks}} @@ -38,7 +43,7 @@ func (ev *Event) ResolveFields(forADs bool) { {{ $_ := set $uniqueResolvers $resolver "" }} } {{else}} - {{ $resolver := $Field | GetFieldResolver $.AllFields }} + {{ $resolver := $Field | GetFieldHandler $.AllFields }} {{ if and (ne $resolver "") (not (hasKey $uniqueResolvers $resolver)) }} {{ $resolver | FieldADPrint $Field }} {{ $_ := set $uniqueResolvers $resolver "" }} @@ -55,7 +60,7 @@ func (ev *Event) ResolveFields(forADs bool) { case "{{$Name}}": {{- range $Key, $FieldName := $EventType.Fields }} {{- $Field := index $.Fields $FieldName }} - {{ $resolver := $Field | GetFieldResolver $.AllFields }} + {{ $resolver := $Field | GetFieldHandler $.AllFields }} {{ if ne $resolver "" }} {{$Checks := $Field | GetChecks $.AllFields}} {{if $Checks}} @@ -81,3 +86,20 @@ func (ev *Event) ResolveFields(forADs bool) { {{end}} } } + +type FieldHandlers interface { + {{$Handlers := .Fields | GetHandlers}} + {{range $Proto, $Impl := $Handlers}} + {{$Proto}} + {{end}} + + // custom handlers not tied to any fields + ExtraFieldHandlers +} + +type DefaultFieldHandlers struct {} + +{{$Handlers := .Fields | GetHandlers}} +{{range $Proto, $Impl := $Handlers}} + func (dfh *DefaultFieldHandlers) {{$Proto}} {{$Impl}} +{{end}} \ No newline at end of file diff --git a/pkg/security/secl/go.mod b/pkg/security/secl/go.mod index 071316ae49c71..1ce25e70243d4 100644 --- a/pkg/security/secl/go.mod +++ b/pkg/security/secl/go.mod @@ -15,8 +15,8 @@ require ( github.com/spf13/cast v1.5.0 github.com/stretchr/testify v1.8.1 golang.org/x/exp v0.0.0-20221114191408-850992195362 - golang.org/x/sys v0.3.0 - golang.org/x/tools v0.4.0 + golang.org/x/sys v0.4.0 + golang.org/x/tools v0.5.0 gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 ) diff --git a/pkg/security/secl/go.sum b/pkg/security/secl/go.sum index adcbc71a3a344..c4a6bf70a3e5d 100644 --- a/pkg/security/secl/go.sum +++ b/pkg/security/secl/go.sum @@ -85,8 +85,8 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= @@ -97,8 +97,8 @@ golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.4.0 h1:7mTAgkunk3fr4GAloyyCasadO6h9zSsQZbwvcaIciV4= -golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= +golang.org/x/tools v0.5.0 h1:+bSpV5HIeWkuvgaMfI3UmKRThoTA5ODJTUd8T17NO+4= +golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/pkg/security/secl/model/accessors.go b/pkg/security/secl/model/accessors.go index 40faa88721dc1..adea6115b954c 100644 --- a/pkg/security/secl/model/accessors.go +++ b/pkg/security/secl/model/accessors.go @@ -5,12 +5,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "net" "reflect" - "unsafe" -) - -// suppress unused package warning -var ( - _ *unsafe.Pointer ) func (m *Model) GetIterator(field eval.Field) (eval.Iterator, error) { @@ -61,7 +55,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "async": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Async + ev := ctx.Event.(*Event) + return ev.Async }, Field: field, Weight: eval.FunctionWeight, @@ -69,7 +64,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bind.addr.family": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Bind.AddrFamily) + ev := ctx.Event.(*Event) + return int(ev.Bind.AddrFamily) }, Field: field, Weight: eval.FunctionWeight, @@ -77,7 +73,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bind.addr.ip": return &eval.CIDREvaluator{ EvalFnc: func(ctx *eval.Context) net.IPNet { - return (*Event)(ctx.Object).Bind.Addr.IPNet + ev := ctx.Event.(*Event) + return ev.Bind.Addr.IPNet }, Field: field, Weight: eval.FunctionWeight, @@ -85,7 +82,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bind.addr.port": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Bind.Addr.Port) + ev := ctx.Event.(*Event) + return int(ev.Bind.Addr.Port) }, Field: field, Weight: eval.FunctionWeight, @@ -93,7 +91,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bind.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Bind.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Bind.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -101,7 +100,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.cmd": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Cmd) + ev := ctx.Event.(*Event) + return int(ev.BPF.Cmd) }, Field: field, Weight: eval.FunctionWeight, @@ -109,7 +109,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.map.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).BPF.Map.Name + ev := ctx.Event.(*Event) + return ev.BPF.Map.Name }, Field: field, Weight: eval.FunctionWeight, @@ -117,7 +118,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.map.type": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Map.Type) + ev := ctx.Event.(*Event) + return int(ev.BPF.Map.Type) }, Field: field, Weight: eval.FunctionWeight, @@ -125,7 +127,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.prog.attach_type": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Program.AttachType) + ev := ctx.Event.(*Event) + return int(ev.BPF.Program.AttachType) }, Field: field, Weight: eval.FunctionWeight, @@ -133,19 +136,21 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.prog.helpers": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { - result := make([]int, len((*Event)(ctx.Object).BPF.Program.Helpers)) - for i, v := range (*Event)(ctx.Object).BPF.Program.Helpers { + ev := ctx.Event.(*Event) + result := make([]int, len(ev.BPF.Program.Helpers)) + for i, v := range ev.BPF.Program.Helpers { result[i] = int(v) } return result }, Field: field, - Weight: eval.HandlerWeight, + Weight: eval.FunctionWeight, }, nil case "bpf.prog.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).BPF.Program.Name + ev := ctx.Event.(*Event) + return ev.BPF.Program.Name }, Field: field, Weight: eval.FunctionWeight, @@ -153,7 +158,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.prog.tag": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).BPF.Program.Tag + ev := ctx.Event.(*Event) + return ev.BPF.Program.Tag }, Field: field, Weight: eval.FunctionWeight, @@ -161,7 +167,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.prog.type": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.Program.Type) + ev := ctx.Event.(*Event) + return int(ev.BPF.Program.Type) }, Field: field, Weight: eval.FunctionWeight, @@ -169,7 +176,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "bpf.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).BPF.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.BPF.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -177,7 +185,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "capset.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Capset.CapEffective) + ev := ctx.Event.(*Event) + return int(ev.Capset.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -185,7 +194,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "capset.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Capset.CapPermitted) + ev := ctx.Event.(*Event) + return int(ev.Capset.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -193,7 +203,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -201,7 +212,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.destination.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.Mode) + ev := ctx.Event.(*Event) + return int(ev.Chmod.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -209,7 +221,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.destination.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.Mode) + ev := ctx.Event.(*Event) + return int(ev.Chmod.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -217,7 +230,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chmod.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Chmod.File) }, Field: field, Weight: eval.HandlerWeight, @@ -225,7 +239,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -233,7 +248,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chmod.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Chmod.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -241,7 +257,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Chmod.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Chmod.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -249,7 +266,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -257,7 +275,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -265,7 +284,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -273,7 +293,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -282,7 +303,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chmod.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chmod.File) }, Field: field, Weight: eval.HandlerWeight, @@ -291,7 +313,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Chmod.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chmod.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -300,7 +323,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chmod.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Chmod.File) }, Field: field, Weight: eval.HandlerWeight, @@ -309,7 +333,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Chmod.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Chmod.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -317,7 +342,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Chmod.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -325,7 +351,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Chmod.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -333,7 +360,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chmod.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Chmod.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -341,7 +369,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chmod.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chmod.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Chmod.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -349,7 +378,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -357,7 +387,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.destination.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.GID) + ev := ctx.Event.(*Event) + return int(ev.Chown.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -365,7 +396,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.destination.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveChownGID(ev, &ev.Chown) }, Field: field, Weight: eval.HandlerWeight, @@ -373,7 +405,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.destination.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.UID) + ev := ctx.Event.(*Event) + return int(ev.Chown.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -381,7 +414,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.destination.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveChownUID(ev, &ev.Chown) }, Field: field, Weight: eval.HandlerWeight, @@ -389,7 +423,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Chown.File) }, Field: field, Weight: eval.HandlerWeight, @@ -397,7 +432,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -405,7 +441,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Chown.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -413,7 +450,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Chown.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Chown.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -421,7 +459,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -429,7 +468,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -437,7 +477,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -445,7 +486,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -454,7 +496,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chown.File) }, Field: field, Weight: eval.HandlerWeight, @@ -463,7 +506,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Chown.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chown.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -472,7 +516,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Chown.File) }, Field: field, Weight: eval.HandlerWeight, @@ -481,7 +526,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Chown.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Chown.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -489,7 +535,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Chown.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -497,7 +544,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Chown.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -505,7 +553,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Chown.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Chown.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -513,7 +562,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "chown.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Chown.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Chown.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -521,7 +571,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ContainerContext.ID + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveContainerID(ev, &ev.ContainerContext) }, Field: field, Weight: eval.HandlerWeight, @@ -529,7 +580,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "container.tags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ContainerContext.Tags + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveContainerTags(ev, &ev.ContainerContext) }, Field: field, Weight: 9999 * eval.HandlerWeight, @@ -537,7 +589,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "dns.id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.ID) + ev := ctx.Event.(*Event) + return int(ev.DNS.ID) }, Field: field, Weight: eval.FunctionWeight, @@ -545,7 +598,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "dns.question.class": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Class) + ev := ctx.Event.(*Event) + return int(ev.DNS.Class) }, Field: field, Weight: eval.FunctionWeight, @@ -553,7 +607,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "dns.question.count": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Count) + ev := ctx.Event.(*Event) + return int(ev.DNS.Count) }, Field: field, Weight: eval.FunctionWeight, @@ -561,7 +616,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "dns.question.length": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Size) + ev := ctx.Event.(*Event) + return int(ev.DNS.Size) }, Field: field, Weight: eval.FunctionWeight, @@ -570,7 +626,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: eval.DNSNameCmp, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).DNS.Name + ev := ctx.Event.(*Event) + return ev.DNS.Name }, Field: field, Weight: eval.FunctionWeight, @@ -579,7 +636,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: eval.DNSNameCmp, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).DNS.Name) + ev := ctx.Event.(*Event) + return len(ev.DNS.Name) }, Field: field, Weight: eval.FunctionWeight, @@ -587,7 +645,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "dns.question.type": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).DNS.Type) + ev := ctx.Event.(*Event) + return int(ev.DNS.Type) }, Field: field, Weight: eval.FunctionWeight, @@ -595,7 +654,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Args + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.Exec.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -603,7 +663,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exec.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.Exec.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -611,7 +672,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exec.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.Exec.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -619,7 +681,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exec.Process.ArgsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Exec.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -627,7 +690,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exec.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.Exec.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -635,7 +699,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Argv0 + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Exec.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -643,7 +708,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.CapEffective) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -651,7 +717,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.CapPermitted) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -659,7 +726,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Comm + ev := ctx.Event.(*Event) + return ev.Exec.Process.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -667,7 +735,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.ContainerID + ev := ctx.Event.(*Event) + return ev.Exec.Process.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -675,7 +744,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Cookie) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -683,7 +753,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.CreatedAt) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Exec.Process)) }, Field: field, Weight: eval.HandlerWeight, @@ -691,7 +762,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.EGID) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -699,7 +771,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.EGroup + ev := ctx.Event.(*Event) + return ev.Exec.Process.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -707,7 +780,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exec.Process.Envp + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Exec.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -715,7 +789,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exec.Process.Envs + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Exec.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -723,7 +798,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exec.Process.EnvsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Exec.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -731,7 +807,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.EUID) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -739,7 +816,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.EUser + ev := ctx.Event.(*Event) + return ev.Exec.Process.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -747,10 +825,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.CTime) + return int(ev.Exec.Process.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -758,10 +837,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exec.Process.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exec.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -769,10 +849,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.GID) + return int(ev.Exec.Process.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -780,10 +861,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exec.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -791,10 +873,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return false } - return (*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exec.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -802,10 +885,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.Inode) + return int(ev.Exec.Process.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -813,10 +897,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.Mode) + return int(ev.Exec.Process.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -824,10 +909,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.MTime) + return int(ev.Exec.Process.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -835,10 +921,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.MountID) + return int(ev.Exec.Process.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -847,10 +934,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exec.Process.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -859,7 +947,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exec.Process.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -868,10 +957,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exec.Process.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -880,7 +970,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exec.Process.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -888,10 +979,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exec.Process.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -899,10 +991,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.UID) + return int(ev.Exec.Process.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -910,10 +1003,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exec.Process.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exec.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -921,7 +1015,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.FSGID) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -929,7 +1024,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.FSGroup + ev := ctx.Event.(*Event) + return ev.Exec.Process.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -937,7 +1033,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.FSUID) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -945,7 +1042,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.FSUser + ev := ctx.Event.(*Event) + return ev.Exec.Process.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -953,7 +1051,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.GID) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -961,7 +1060,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.Group + ev := ctx.Event.(*Event) + return ev.Exec.Process.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -969,10 +1069,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -980,10 +1081,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exec.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -991,10 +1093,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -1002,10 +1105,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1013,10 +1117,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return false } - return (*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1024,10 +1129,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -1035,10 +1141,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -1046,10 +1153,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1057,10 +1165,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -1069,10 +1178,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1081,7 +1191,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -1090,10 +1201,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1102,7 +1214,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -1110,10 +1223,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -1121,10 +1235,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -1132,10 +1247,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exec.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exec.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exec.Process.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1143,7 +1259,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exec.Process.PIDContext.IsKworker + ev := ctx.Event.(*Event) + return ev.Exec.Process.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -1151,7 +1268,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exec.Process.IsThread + ev := ctx.Event.(*Event) + return ev.Exec.Process.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -1159,7 +1277,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.PIDContext.Pid) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -1167,7 +1286,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.PPid) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -1175,7 +1295,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.PIDContext.Tid) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -1183,7 +1304,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.TTYName + ev := ctx.Event.(*Event) + return ev.Exec.Process.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -1191,7 +1313,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exec.Process.Credentials.UID) + ev := ctx.Event.(*Event) + return int(ev.Exec.Process.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -1199,7 +1322,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exec.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exec.Process.Credentials.User + ev := ctx.Event.(*Event) + return ev.Exec.Process.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -1207,7 +1331,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Args + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.Exit.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -1215,7 +1340,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exit.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.Exit.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -1223,7 +1349,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exit.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.Exit.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -1231,7 +1358,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exit.Process.ArgsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Exit.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -1239,7 +1367,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exit.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.Exit.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -1247,7 +1376,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Argv0 + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Exit.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -1255,7 +1385,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.CapEffective) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -1263,7 +1394,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.CapPermitted) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -1271,7 +1403,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.cause": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Cause) + ev := ctx.Event.(*Event) + return int(ev.Exit.Cause) }, Field: field, Weight: eval.FunctionWeight, @@ -1279,7 +1412,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.code": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Code) + ev := ctx.Event.(*Event) + return int(ev.Exit.Code) }, Field: field, Weight: eval.FunctionWeight, @@ -1287,7 +1421,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Comm + ev := ctx.Event.(*Event) + return ev.Exit.Process.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -1295,7 +1430,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.ContainerID + ev := ctx.Event.(*Event) + return ev.Exit.Process.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -1303,7 +1439,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Cookie) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -1311,7 +1448,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.CreatedAt) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Exit.Process)) }, Field: field, Weight: eval.HandlerWeight, @@ -1319,7 +1457,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.EGID) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -1327,7 +1466,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.EGroup + ev := ctx.Event.(*Event) + return ev.Exit.Process.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -1335,7 +1475,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exit.Process.Envp + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Exit.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -1343,7 +1484,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Exit.Process.Envs + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Exit.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -1351,7 +1493,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exit.Process.EnvsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Exit.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -1359,7 +1502,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.EUID) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -1367,7 +1511,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.EUser + ev := ctx.Event.(*Event) + return ev.Exit.Process.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -1375,10 +1520,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.CTime) + return int(ev.Exit.Process.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1386,10 +1532,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exit.Process.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exit.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1397,10 +1544,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.GID) + return int(ev.Exit.Process.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -1408,10 +1556,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exit.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1419,10 +1568,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return false } - return (*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exit.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1430,10 +1580,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.Inode) + return int(ev.Exit.Process.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -1441,10 +1592,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.Mode) + return int(ev.Exit.Process.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -1452,10 +1604,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.MTime) + return int(ev.Exit.Process.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1463,10 +1616,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.MountID) + return int(ev.Exit.Process.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -1475,10 +1629,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exit.Process.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1487,7 +1642,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exit.Process.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -1496,10 +1652,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exit.Process.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1508,7 +1665,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exit.Process.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -1516,10 +1674,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exit.Process.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -1527,10 +1686,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.UID) + return int(ev.Exit.Process.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -1538,10 +1698,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Exit.Process.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exit.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1549,7 +1710,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.FSGID) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -1557,7 +1719,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.FSGroup + ev := ctx.Event.(*Event) + return ev.Exit.Process.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -1565,7 +1728,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.FSUID) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -1573,7 +1737,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.FSUser + ev := ctx.Event.(*Event) + return ev.Exit.Process.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -1581,7 +1746,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.GID) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -1589,7 +1755,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.Group + ev := ctx.Event.(*Event) + return ev.Exit.Process.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -1597,10 +1764,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1608,10 +1776,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exit.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1619,10 +1788,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -1630,10 +1800,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1641,10 +1812,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return false } - return (*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1652,10 +1824,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -1663,10 +1836,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -1674,10 +1848,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1685,10 +1860,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -1697,10 +1873,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1709,7 +1886,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -1718,10 +1896,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -1730,7 +1909,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -1738,10 +1918,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -1749,10 +1930,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -1760,10 +1942,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Exit.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Exit.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Exit.Process.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1771,7 +1954,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exit.Process.PIDContext.IsKworker + ev := ctx.Event.(*Event) + return ev.Exit.Process.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -1779,7 +1963,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Exit.Process.IsThread + ev := ctx.Event.(*Event) + return ev.Exit.Process.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -1787,7 +1972,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.PIDContext.Pid) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -1795,7 +1981,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.PPid) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -1803,7 +1990,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.PIDContext.Tid) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -1811,7 +1999,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.TTYName + ev := ctx.Event.(*Event) + return ev.Exit.Process.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -1819,7 +2008,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Exit.Process.Credentials.UID) + ev := ctx.Event.(*Event) + return int(ev.Exit.Process.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -1827,7 +2017,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "exit.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Exit.Process.Credentials.User + ev := ctx.Event.(*Event) + return ev.Exit.Process.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -1835,7 +2026,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1843,7 +2035,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1851,7 +2044,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Target.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Link.Target) }, Field: field, Weight: eval.HandlerWeight, @@ -1859,7 +2053,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -1867,7 +2062,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Target.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Link.Target.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1875,7 +2071,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Link.Target.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Link.Target.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1883,7 +2080,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -1891,7 +2089,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -1899,7 +2098,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -1907,7 +2107,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -1916,7 +2117,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Target.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Target) }, Field: field, Weight: eval.HandlerWeight, @@ -1925,7 +2127,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Link.Target.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Target)) }, Field: field, Weight: eval.HandlerWeight, @@ -1934,7 +2137,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Target.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Target) }, Field: field, Weight: eval.HandlerWeight, @@ -1943,7 +2147,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Link.Target.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Target)) }, Field: field, Weight: eval.HandlerWeight, @@ -1951,7 +2156,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Link.Target.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -1959,7 +2165,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Target.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Link.Target.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -1967,7 +2174,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.destination.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Target.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Link.Target.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1975,7 +2183,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Source.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Link.Source) }, Field: field, Weight: eval.HandlerWeight, @@ -1983,7 +2192,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -1991,7 +2201,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Source.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Link.Source.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -1999,7 +2210,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Link.Source.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Link.Source.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2007,7 +2219,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -2015,7 +2228,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2023,7 +2237,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2031,7 +2246,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -2040,7 +2256,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Source.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Source) }, Field: field, Weight: eval.HandlerWeight, @@ -2049,7 +2266,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Link.Source.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Source)) }, Field: field, Weight: eval.HandlerWeight, @@ -2058,7 +2276,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Source.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Source) }, Field: field, Weight: eval.HandlerWeight, @@ -2067,7 +2286,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Link.Source.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Source)) }, Field: field, Weight: eval.HandlerWeight, @@ -2075,7 +2295,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Link.Source.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -2083,7 +2304,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.Source.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Link.Source.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -2091,7 +2313,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Link.Source.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Link.Source.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2099,7 +2322,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "link.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Link.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Link.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -2107,7 +2331,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2115,7 +2340,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.LoadModule.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2123,7 +2349,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -2131,7 +2358,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.LoadModule.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2139,7 +2367,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).LoadModule.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.LoadModule.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2147,7 +2376,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -2155,7 +2385,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2163,7 +2394,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2171,7 +2403,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -2180,7 +2413,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.LoadModule.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2189,7 +2423,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).LoadModule.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.LoadModule.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2198,7 +2433,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.LoadModule.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2207,7 +2443,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).LoadModule.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.LoadModule.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2215,7 +2452,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.LoadModule.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -2223,7 +2461,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -2231,7 +2470,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.LoadModule.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2239,7 +2479,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.loaded_from_memory": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).LoadModule.LoadedFromMemory + ev := ctx.Event.(*Event) + return ev.LoadModule.LoadedFromMemory }, Field: field, Weight: eval.FunctionWeight, @@ -2247,7 +2488,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).LoadModule.Name + ev := ctx.Event.(*Event) + return ev.LoadModule.Name }, Field: field, Weight: eval.FunctionWeight, @@ -2255,7 +2497,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "load_module.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).LoadModule.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.LoadModule.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -2263,7 +2506,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2271,7 +2515,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.destination.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.Mode) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2279,7 +2524,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.destination.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.Mode) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2287,7 +2533,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mkdir.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Mkdir.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2295,7 +2542,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -2303,7 +2551,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mkdir.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Mkdir.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2311,7 +2560,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Mkdir.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Mkdir.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2319,7 +2569,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -2327,7 +2578,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2335,7 +2587,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2343,7 +2596,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -2352,7 +2606,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mkdir.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Mkdir.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2361,7 +2616,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Mkdir.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Mkdir.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2370,7 +2626,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mkdir.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Mkdir.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2379,7 +2636,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Mkdir.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Mkdir.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2387,7 +2645,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Mkdir.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -2395,7 +2654,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -2403,7 +2663,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mkdir.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Mkdir.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2411,7 +2672,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mkdir.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mkdir.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Mkdir.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -2419,7 +2681,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2427,7 +2690,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).MMap.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.MMap.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2435,7 +2699,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -2443,7 +2708,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).MMap.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.MMap.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2451,7 +2717,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).MMap.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.MMap.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2459,7 +2726,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -2467,7 +2735,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2475,7 +2744,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2483,7 +2753,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -2492,7 +2763,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).MMap.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.MMap.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2501,7 +2773,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).MMap.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.MMap.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2510,7 +2783,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).MMap.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.MMap.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2519,7 +2793,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).MMap.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.MMap.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2527,7 +2802,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.MMap.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -2535,7 +2811,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.MMap.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -2543,7 +2820,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).MMap.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.MMap.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2551,7 +2829,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.flags": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MMap.Flags + ev := ctx.Event.(*Event) + return ev.MMap.Flags }, Field: field, Weight: eval.FunctionWeight, @@ -2559,7 +2838,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.protection": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MMap.Protection + ev := ctx.Event.(*Event) + return ev.MMap.Protection }, Field: field, Weight: eval.FunctionWeight, @@ -2567,7 +2847,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mmap.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MMap.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.MMap.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -2575,7 +2856,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mount.fs_type": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mount.Mount.FSType + ev := ctx.Event.(*Event) + return ev.Mount.Mount.FSType }, Field: field, Weight: eval.FunctionWeight, @@ -2583,7 +2865,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mount.mountpoint.path": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mount.MountPointPath + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveMountPointPath(ev, &ev.Mount) }, Field: field, Weight: eval.HandlerWeight, @@ -2591,7 +2874,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mount.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Mount.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Mount.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -2599,7 +2883,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mount.source.path": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Mount.MountSourcePath + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveMountSourcePath(ev, &ev.Mount) }, Field: field, Weight: eval.HandlerWeight, @@ -2607,7 +2892,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mprotect.req_protection": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MProtect.ReqProtection + ev := ctx.Event.(*Event) + return ev.MProtect.ReqProtection }, Field: field, Weight: eval.FunctionWeight, @@ -2615,7 +2901,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mprotect.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).MProtect.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.MProtect.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -2623,7 +2910,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "mprotect.vm_protection": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return (*Event)(ctx.Object).MProtect.VMProtection + ev := ctx.Event.(*Event) + return ev.MProtect.VMProtection }, Field: field, Weight: eval.FunctionWeight, @@ -2631,7 +2919,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.destination.ip": return &eval.CIDREvaluator{ EvalFnc: func(ctx *eval.Context) net.IPNet { - return (*Event)(ctx.Object).NetworkContext.Destination.IPNet + ev := ctx.Event.(*Event) + return ev.NetworkContext.Destination.IPNet }, Field: field, Weight: eval.FunctionWeight, @@ -2639,7 +2928,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.destination.port": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Destination.Port) + ev := ctx.Event.(*Event) + return int(ev.NetworkContext.Destination.Port) }, Field: field, Weight: eval.FunctionWeight, @@ -2647,7 +2937,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.device.ifindex": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Device.IfIndex) + ev := ctx.Event.(*Event) + return int(ev.NetworkContext.Device.IfIndex) }, Field: field, Weight: eval.FunctionWeight, @@ -2655,7 +2946,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.device.ifname": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).NetworkContext.Device.IfName + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveNetworkDeviceIfName(ev, &ev.NetworkContext.Device) }, Field: field, Weight: eval.HandlerWeight, @@ -2663,7 +2955,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.l3_protocol": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.L3Protocol) + ev := ctx.Event.(*Event) + return int(ev.NetworkContext.L3Protocol) }, Field: field, Weight: eval.FunctionWeight, @@ -2671,7 +2964,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.l4_protocol": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.L4Protocol) + ev := ctx.Event.(*Event) + return int(ev.NetworkContext.L4Protocol) }, Field: field, Weight: eval.FunctionWeight, @@ -2679,7 +2973,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.size": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Size) + ev := ctx.Event.(*Event) + return int(ev.NetworkContext.Size) }, Field: field, Weight: eval.FunctionWeight, @@ -2687,7 +2982,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.source.ip": return &eval.CIDREvaluator{ EvalFnc: func(ctx *eval.Context) net.IPNet { - return (*Event)(ctx.Object).NetworkContext.Source.IPNet + ev := ctx.Event.(*Event) + return ev.NetworkContext.Source.IPNet }, Field: field, Weight: eval.FunctionWeight, @@ -2695,7 +2991,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "network.source.port": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).NetworkContext.Source.Port) + ev := ctx.Event.(*Event) + return int(ev.NetworkContext.Source.Port) }, Field: field, Weight: eval.FunctionWeight, @@ -2703,7 +3000,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2711,7 +3009,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.destination.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.Mode) + ev := ctx.Event.(*Event) + return int(ev.Open.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2719,7 +3018,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Open.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Open.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2727,7 +3027,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -2735,7 +3036,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Open.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Open.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2743,7 +3045,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Open.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Open.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2751,7 +3054,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -2759,7 +3063,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -2767,7 +3072,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -2775,7 +3081,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -2784,7 +3091,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Open.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Open.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2793,7 +3101,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Open.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Open.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2802,7 +3111,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Open.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Open.File) }, Field: field, Weight: eval.HandlerWeight, @@ -2811,7 +3121,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Open.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Open.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -2819,7 +3130,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Open.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -2827,7 +3139,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Open.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -2835,7 +3148,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Open.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Open.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -2843,7 +3157,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.flags": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.Flags) + ev := ctx.Event.(*Event) + return int(ev.Open.Flags) }, Field: field, Weight: eval.FunctionWeight, @@ -2851,7 +3166,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "open.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Open.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Open.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -2859,15 +3175,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.args": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Args + result := ev.FieldHandlers.ResolveProcessArgs(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -2875,15 +3196,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsFlags(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -2891,15 +3217,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsOptions(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -2907,15 +3238,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.args_truncated": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if result, ok := ctx.BoolCache[field]; ok { + return result + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.ArgsTruncated + result := ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.BoolCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -2923,15 +3259,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgv(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -2939,15 +3280,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.argv0": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv0 + result := ev.FieldHandlers.ResolveProcessArgv0(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -2955,6 +3301,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.cap_effective": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -2964,6 +3313,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -2971,6 +3321,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.cap_permitted": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -2980,6 +3333,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -2987,6 +3341,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.comm": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -2996,6 +3353,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3003,6 +3361,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.container.id": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3012,6 +3373,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3019,6 +3381,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.cookie": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3028,6 +3393,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3035,15 +3401,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.created_at": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.CreatedAt) + result := int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &element.ProcessContext.Process)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3051,6 +3422,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.egid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3060,6 +3434,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3067,6 +3442,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.egroup": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3076,6 +3454,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3083,15 +3462,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Envp + result := ev.FieldHandlers.ResolveProcessEnvp(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3099,15 +3483,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Envs + result := ev.FieldHandlers.ResolveProcessEnvs(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3115,15 +3504,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.envs_truncated": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if result, ok := ctx.BoolCache[field]; ok { + return result + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.EnvsTruncated + result := ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.BoolCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3131,6 +3525,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.euid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3140,6 +3537,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3147,6 +3545,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.euser": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3156,6 +3557,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3163,6 +3565,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.change_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3177,6 +3582,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3184,6 +3590,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.filesystem": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3194,10 +3604,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3205,6 +3616,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3219,6 +3633,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3226,6 +3641,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3236,10 +3655,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3247,6 +3667,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.in_upper_layer": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if result, ok := ctx.BoolCache[field]; ok { + return result + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3257,10 +3681,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.BoolCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3268,6 +3693,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.inode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3282,6 +3710,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3289,6 +3718,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.mode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3303,6 +3735,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3310,6 +3743,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.modification_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3324,6 +3760,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3331,6 +3768,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.mount_id": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3345,6 +3785,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3353,6 +3794,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3363,10 +3808,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3375,15 +3821,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3392,6 +3843,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3402,10 +3857,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3414,15 +3870,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3430,6 +3891,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.rights": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3440,10 +3905,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.FileEvent.FileFields)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3451,6 +3917,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3465,6 +3934,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3472,6 +3942,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.file.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3482,10 +3956,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3493,6 +3968,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.fsgid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3502,6 +3980,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3509,6 +3988,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.fsgroup": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3518,6 +4000,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3525,6 +4008,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.fsuid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3534,6 +4020,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3541,6 +4028,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.fsuser": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3550,6 +4040,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3557,6 +4048,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3566,6 +4060,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3573,6 +4068,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3582,6 +4080,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3589,6 +4088,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.change_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3603,6 +4105,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3610,6 +4113,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.filesystem": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3620,10 +4127,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3631,6 +4139,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3645,6 +4156,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3652,6 +4164,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3662,10 +4178,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3673,6 +4190,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.in_upper_layer": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if result, ok := ctx.BoolCache[field]; ok { + return result + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3683,10 +4204,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.BoolCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3694,6 +4216,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.inode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3708,6 +4233,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3715,6 +4241,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.mode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3729,6 +4258,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3736,6 +4266,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.modification_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3750,6 +4283,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3757,6 +4291,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.mount_id": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3771,6 +4308,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3779,6 +4317,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3789,10 +4331,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3801,15 +4344,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3818,6 +4366,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3828,10 +4380,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3840,15 +4393,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3856,6 +4414,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.rights": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3866,10 +4428,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3877,6 +4440,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3891,6 +4457,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3898,6 +4465,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.interpreter.file.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3908,10 +4479,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3919,6 +4491,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.is_kworker": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + if result, ok := ctx.BoolCache[field]; ok { + return result + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3928,6 +4503,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.BoolCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3935,6 +4511,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.is_thread": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + if result, ok := ctx.BoolCache[field]; ok { + return result + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3944,6 +4523,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.BoolCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3951,6 +4531,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.pid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3960,6 +4543,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3967,6 +4551,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.ppid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3976,6 +4563,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3983,6 +4571,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.tid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -3992,6 +4583,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -3999,6 +4591,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.tty_name": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -4008,6 +4603,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -4015,6 +4611,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -4024,6 +4623,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -4031,6 +4631,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ancestors.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -4040,6 +4643,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -4047,7 +4651,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Args + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgs(ev, &ev.ProcessContext.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -4055,7 +4660,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ProcessContext.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, &ev.ProcessContext.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -4063,7 +4669,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ProcessContext.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, &ev.ProcessContext.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -4071,7 +4678,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ProcessContext.Process.ArgsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.ProcessContext.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -4079,7 +4687,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ProcessContext.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv(ev, &ev.ProcessContext.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -4087,7 +4696,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Argv0 + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.ProcessContext.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -4095,7 +4705,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.CapEffective) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -4103,7 +4714,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.CapPermitted) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -4111,7 +4723,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Comm + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -4119,7 +4732,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.ContainerID + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -4127,7 +4741,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Cookie) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -4135,7 +4750,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.CreatedAt) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.ProcessContext.Process)) }, Field: field, Weight: eval.HandlerWeight, @@ -4143,7 +4759,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.EGID) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -4151,7 +4768,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.EGroup + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -4159,7 +4777,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ProcessContext.Process.Envp + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.ProcessContext.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -4167,7 +4786,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).ProcessContext.Process.Envs + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.ProcessContext.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -4175,7 +4795,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ProcessContext.Process.EnvsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.ProcessContext.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -4183,7 +4804,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.EUID) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -4191,7 +4813,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.EUser + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -4199,10 +4822,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.CTime) + return int(ev.ProcessContext.Process.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -4210,10 +4834,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4221,10 +4846,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.GID) + return int(ev.ProcessContext.Process.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -4232,10 +4858,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4243,10 +4870,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return false } - return (*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4254,10 +4882,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.Inode) + return int(ev.ProcessContext.Process.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -4265,10 +4894,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.Mode) + return int(ev.ProcessContext.Process.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -4276,10 +4906,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.MTime) + return int(ev.ProcessContext.Process.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -4287,10 +4918,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.MountID) + return int(ev.ProcessContext.Process.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -4299,10 +4931,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4311,7 +4944,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Process.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4320,10 +4954,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4332,7 +4967,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Process.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4340,10 +4976,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Process.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -4351,10 +4988,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.UID) + return int(ev.ProcessContext.Process.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -4362,10 +5000,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4373,7 +5012,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.FSGID) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -4381,7 +5021,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.FSGroup + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -4389,7 +5030,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.FSUID) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -4397,7 +5039,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.FSUser + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -4405,7 +5048,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.GID) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -4413,7 +5057,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.Group + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -4421,10 +5066,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -4432,10 +5078,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4443,10 +5090,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -4454,10 +5102,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4465,10 +5114,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return false } - return (*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4476,10 +5126,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -4487,10 +5138,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -4498,10 +5150,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -4509,10 +5162,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -4521,10 +5175,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4533,7 +5188,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4542,10 +5198,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4554,7 +5211,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4562,10 +5220,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -4573,10 +5232,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -4584,10 +5244,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4595,7 +5256,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ProcessContext.Process.PIDContext.IsKworker + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -4603,7 +5265,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).ProcessContext.Process.IsThread + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -4611,10 +5274,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Args + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.ProcessContext.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -4622,10 +5286,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return []string{} } - return (*Event)(ctx.Object).ProcessContext.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.ProcessContext.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -4633,10 +5298,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return []string{} } - return (*Event)(ctx.Object).ProcessContext.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.ProcessContext.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -4644,10 +5310,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return false } - return (*Event)(ctx.Object).ProcessContext.Parent.ArgsTruncated + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.ProcessContext.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -4655,10 +5322,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return []string{} } - return (*Event)(ctx.Object).ProcessContext.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.ProcessContext.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -4666,10 +5334,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Argv0 + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.ProcessContext.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -4677,10 +5346,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.CapEffective) + return int(ev.ProcessContext.Parent.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -4688,10 +5358,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.CapPermitted) + return int(ev.ProcessContext.Parent.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -4699,10 +5370,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Comm + return ev.ProcessContext.Parent.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -4710,10 +5382,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.ContainerID + return ev.ProcessContext.Parent.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -4721,10 +5394,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Cookie) + return int(ev.ProcessContext.Parent.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -4732,10 +5406,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.CreatedAt) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.ProcessContext.Parent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4743,10 +5418,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.EGID) + return int(ev.ProcessContext.Parent.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -4754,10 +5430,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.EGroup + return ev.ProcessContext.Parent.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -4765,10 +5442,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return []string{} } - return (*Event)(ctx.Object).ProcessContext.Parent.Envp + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.ProcessContext.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -4776,10 +5454,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return []string{} } - return (*Event)(ctx.Object).ProcessContext.Parent.Envs + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.ProcessContext.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -4787,10 +5466,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return false } - return (*Event)(ctx.Object).ProcessContext.Parent.EnvsTruncated + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.ProcessContext.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -4798,10 +5478,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.EUID) + return int(ev.ProcessContext.Parent.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -4809,10 +5490,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.EUser + return ev.ProcessContext.Parent.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -4820,13 +5502,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.CTime) + return int(ev.ProcessContext.Parent.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -4834,13 +5517,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4848,13 +5532,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.GID) + return int(ev.ProcessContext.Parent.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -4862,13 +5547,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4876,13 +5562,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return false } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return false } - return (*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -4890,13 +5577,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.Inode) + return int(ev.ProcessContext.Parent.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -4904,13 +5592,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.Mode) + return int(ev.ProcessContext.Parent.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -4918,13 +5607,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.MTime) + return int(ev.ProcessContext.Parent.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -4932,13 +5622,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.MountID) + return int(ev.ProcessContext.Parent.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -4947,13 +5638,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4962,7 +5654,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4971,13 +5664,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -4986,7 +5680,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -4994,13 +5689,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Parent.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -5008,13 +5704,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.UID) + return int(ev.ProcessContext.Parent.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -5022,13 +5719,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.IsNotKworker() { + if !ev.ProcessContext.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -5036,10 +5734,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSGID) + return int(ev.ProcessContext.Parent.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -5047,10 +5746,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSGroup + return ev.ProcessContext.Parent.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -5058,10 +5758,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSUID) + return int(ev.ProcessContext.Parent.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -5069,10 +5770,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.FSUser + return ev.ProcessContext.Parent.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -5080,10 +5782,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.GID) + return int(ev.ProcessContext.Parent.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -5091,10 +5794,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.Group + return ev.ProcessContext.Parent.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -5102,13 +5806,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -5116,13 +5821,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -5130,13 +5836,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -5144,13 +5851,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -5158,13 +5866,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return false } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return false } - return (*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -5172,13 +5881,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -5186,13 +5896,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -5200,13 +5911,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -5214,13 +5926,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -5229,13 +5942,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -5244,7 +5958,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -5253,13 +5968,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -5268,7 +5984,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -5276,13 +5993,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -5290,13 +6008,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -5304,13 +6023,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - if !(*Event)(ctx.Object).ProcessContext.Parent.HasInterpreter() { + if !ev.ProcessContext.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -5318,10 +6038,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return false } - return (*Event)(ctx.Object).ProcessContext.Parent.PIDContext.IsKworker + return ev.ProcessContext.Parent.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -5329,10 +6050,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return false } - return (*Event)(ctx.Object).ProcessContext.Parent.IsThread + return ev.ProcessContext.Parent.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -5340,10 +6062,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.PIDContext.Pid) + return int(ev.ProcessContext.Parent.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -5351,10 +6074,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.PPid) + return int(ev.ProcessContext.Parent.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -5362,10 +6086,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.PIDContext.Tid) + return int(ev.ProcessContext.Parent.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -5373,10 +6098,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.TTYName + return ev.ProcessContext.Parent.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -5384,10 +6110,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return 0 } - return int((*Event)(ctx.Object).ProcessContext.Parent.Credentials.UID) + return int(ev.ProcessContext.Parent.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -5395,10 +6122,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.parent.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).ProcessContext.HasParent() { + ev := ctx.Event.(*Event) + if !ev.ProcessContext.HasParent() { return "" } - return (*Event)(ctx.Object).ProcessContext.Parent.Credentials.User + return ev.ProcessContext.Parent.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -5406,7 +6134,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.PIDContext.Pid) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -5414,7 +6143,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.PPid) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -5422,7 +6152,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.PIDContext.Tid) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -5430,7 +6161,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.TTYName + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -5438,7 +6170,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).ProcessContext.Process.Credentials.UID) + ev := ctx.Event.(*Event) + return int(ev.ProcessContext.Process.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -5446,7 +6179,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "process.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).ProcessContext.Process.Credentials.User + ev := ctx.Event.(*Event) + return ev.ProcessContext.Process.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -5454,7 +6188,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.request": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Request) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Request) }, Field: field, Weight: eval.FunctionWeight, @@ -5462,7 +6197,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.PTrace.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -5470,15 +6206,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.args": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Args + result := ev.FieldHandlers.ResolveProcessArgs(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -5486,15 +6227,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsFlags(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5502,15 +6248,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsOptions(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5518,15 +6269,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.args_truncated": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if result, ok := ctx.BoolCache[field]; ok { + return result + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.ArgsTruncated + result := ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.BoolCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5534,15 +6290,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgv(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -5550,15 +6311,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.argv0": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv0 + result := ev.FieldHandlers.ResolveProcessArgv0(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -5566,6 +6332,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.cap_effective": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5575,6 +6344,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5582,6 +6352,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.cap_permitted": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5591,6 +6364,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5598,6 +6372,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.comm": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5607,6 +6384,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5614,6 +6392,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.container.id": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5623,6 +6404,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5630,6 +6412,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.cookie": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5639,6 +6424,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5646,15 +6432,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.created_at": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.CreatedAt) + result := int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &element.ProcessContext.Process)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5662,6 +6453,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.egid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5671,6 +6465,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5678,6 +6473,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.egroup": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5687,6 +6485,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5694,15 +6493,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Envp + result := ev.FieldHandlers.ResolveProcessEnvp(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5710,15 +6514,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Envs + result := ev.FieldHandlers.ResolveProcessEnvs(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5726,15 +6535,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.envs_truncated": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if result, ok := ctx.BoolCache[field]; ok { + return result + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.EnvsTruncated + result := ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.BoolCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5742,6 +6556,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.euid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5751,6 +6568,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5758,6 +6576,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.euser": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5767,6 +6588,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5774,6 +6596,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.change_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5788,6 +6613,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5795,6 +6621,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.filesystem": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5805,10 +6635,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5816,6 +6647,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5830,6 +6664,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5837,6 +6672,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5847,10 +6686,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5858,6 +6698,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.in_upper_layer": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if result, ok := ctx.BoolCache[field]; ok { + return result + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5868,10 +6712,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.BoolCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5879,6 +6724,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.inode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5893,6 +6741,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5900,6 +6749,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.mode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5914,6 +6766,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5921,6 +6774,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.modification_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5935,6 +6791,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5942,6 +6799,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.mount_id": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5956,6 +6816,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5964,6 +6825,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -5974,10 +6839,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -5986,15 +6852,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6003,6 +6874,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6013,10 +6888,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6025,15 +6901,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6041,6 +6922,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.rights": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6051,10 +6936,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.FileEvent.FileFields)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6062,6 +6948,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6076,6 +6965,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6083,6 +6973,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.file.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6093,10 +6987,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6104,6 +6999,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.fsgid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6113,6 +7011,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6120,6 +7019,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.fsgroup": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6129,6 +7031,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6136,6 +7039,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.fsuid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6145,6 +7051,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6152,6 +7059,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.fsuser": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6161,6 +7071,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6168,6 +7079,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6177,6 +7091,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6184,6 +7099,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6193,6 +7111,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6200,6 +7119,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.change_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6214,6 +7136,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6221,6 +7144,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.filesystem": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6231,10 +7158,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6242,6 +7170,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6256,6 +7187,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6263,6 +7195,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6273,10 +7209,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6284,6 +7221,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if result, ok := ctx.BoolCache[field]; ok { + return result + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6294,10 +7235,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.BoolCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6305,6 +7247,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.inode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6319,6 +7264,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6326,6 +7272,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.mode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6340,6 +7289,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6347,6 +7297,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.modification_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6361,6 +7314,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6368,6 +7322,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.mount_id": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6382,6 +7339,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6390,6 +7348,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6400,10 +7362,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6412,15 +7375,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6429,6 +7397,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6439,10 +7411,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6451,15 +7424,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6467,6 +7445,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.rights": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6477,10 +7459,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6488,6 +7471,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6502,6 +7488,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6509,6 +7496,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.interpreter.file.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6519,10 +7510,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6530,6 +7522,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.is_kworker": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + if result, ok := ctx.BoolCache[field]; ok { + return result + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6539,6 +7534,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.BoolCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6546,6 +7542,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.is_thread": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + if result, ok := ctx.BoolCache[field]; ok { + return result + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6555,6 +7554,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.BoolCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6562,6 +7562,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.pid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6571,6 +7574,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6578,6 +7582,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.ppid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6587,6 +7594,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6594,6 +7602,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.tid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6603,6 +7614,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6610,6 +7622,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.tty_name": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6619,6 +7634,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6626,6 +7642,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6635,6 +7654,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6642,6 +7662,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ancestors.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -6651,6 +7674,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -6658,7 +7682,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Args + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgs(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -6666,7 +7691,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -6674,7 +7700,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -6682,7 +7709,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).PTrace.Tracee.Process.ArgsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -6690,7 +7718,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -6698,7 +7727,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Argv0 + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -6706,7 +7736,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.CapEffective) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -6714,7 +7745,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.CapPermitted) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -6722,7 +7754,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Comm + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -6730,7 +7763,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.ContainerID + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -6738,7 +7772,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Cookie) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -6746,7 +7781,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.CreatedAt) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.PTrace.Tracee.Process)) }, Field: field, Weight: eval.HandlerWeight, @@ -6754,7 +7790,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EGID) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -6762,7 +7799,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EGroup + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -6770,7 +7808,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Envp + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -6778,7 +7817,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Envs + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -6786,7 +7826,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).PTrace.Tracee.Process.EnvsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.PTrace.Tracee.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -6794,7 +7835,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EUID) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -6802,7 +7844,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.EUser + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -6810,10 +7853,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.CTime) + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -6821,10 +7865,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -6832,10 +7877,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.GID) + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -6843,10 +7889,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -6854,10 +7901,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -6865,10 +7913,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.Inode) + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -6876,10 +7925,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.Mode) + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -6887,10 +7937,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.MTime) + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -6898,10 +7949,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.MountID) + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -6910,10 +7962,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -6922,7 +7975,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -6931,10 +7985,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -6943,7 +7998,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -6951,10 +8007,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -6962,10 +8019,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.UID) + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -6973,10 +8031,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -6984,7 +8043,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSGID) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -6992,7 +8052,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSGroup + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -7000,7 +8061,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSUID) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -7008,7 +8070,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.FSUser + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -7016,7 +8079,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.GID) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -7024,7 +8088,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.Group + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -7032,10 +8097,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7043,10 +8109,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7054,10 +8121,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -7065,10 +8133,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7076,10 +8145,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7087,10 +8157,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -7098,10 +8169,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -7109,10 +8181,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7120,10 +8193,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -7132,10 +8206,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7144,7 +8219,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -7153,10 +8229,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7165,7 +8242,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -7173,10 +8251,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -7184,10 +8263,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -7195,10 +8275,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7206,7 +8287,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).PTrace.Tracee.Process.PIDContext.IsKworker + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -7214,7 +8296,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).PTrace.Tracee.Process.IsThread + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -7222,10 +8305,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Args + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -7233,10 +8317,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return []string{} } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -7244,10 +8329,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return []string{} } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -7255,10 +8341,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.ArgsTruncated + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -7266,10 +8353,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return []string{} } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -7277,10 +8365,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Argv0 + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -7288,10 +8377,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.CapEffective) + return int(ev.PTrace.Tracee.Parent.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -7299,10 +8389,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.CapPermitted) + return int(ev.PTrace.Tracee.Parent.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -7310,10 +8401,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Comm + return ev.PTrace.Tracee.Parent.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -7321,10 +8413,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.ContainerID + return ev.PTrace.Tracee.Parent.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -7332,10 +8425,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Cookie) + return int(ev.PTrace.Tracee.Parent.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -7343,10 +8437,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.CreatedAt) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.PTrace.Tracee.Parent)) }, Field: field, Weight: eval.HandlerWeight, @@ -7354,10 +8449,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EGID) + return int(ev.PTrace.Tracee.Parent.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -7365,10 +8461,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EGroup + return ev.PTrace.Tracee.Parent.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -7376,10 +8473,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return []string{} } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Envp + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -7387,10 +8485,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return []string{} } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Envs + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -7398,10 +8497,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.EnvsTruncated + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.PTrace.Tracee.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -7409,10 +8509,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EUID) + return int(ev.PTrace.Tracee.Parent.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -7420,10 +8521,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.EUser + return ev.PTrace.Tracee.Parent.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -7431,13 +8533,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.CTime) + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7445,13 +8548,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7459,13 +8563,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.GID) + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -7473,13 +8578,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7487,13 +8593,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return false } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7501,13 +8608,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.Inode) + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -7515,13 +8623,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.Mode) + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -7529,13 +8638,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.MTime) + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7543,13 +8653,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.MountID) + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -7558,13 +8669,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7573,7 +8685,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -7582,13 +8695,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7597,7 +8711,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -7605,13 +8720,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -7619,13 +8735,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.UID) + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -7633,13 +8750,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.IsNotKworker() { + if !ev.PTrace.Tracee.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7647,10 +8765,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSGID) + return int(ev.PTrace.Tracee.Parent.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -7658,10 +8777,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSGroup + return ev.PTrace.Tracee.Parent.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -7669,10 +8789,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSUID) + return int(ev.PTrace.Tracee.Parent.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -7680,10 +8801,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.FSUser + return ev.PTrace.Tracee.Parent.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -7691,10 +8813,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.GID) + return int(ev.PTrace.Tracee.Parent.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -7702,10 +8825,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.Group + return ev.PTrace.Tracee.Parent.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -7713,13 +8837,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7727,13 +8852,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7741,13 +8867,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -7755,13 +8882,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7769,13 +8897,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return false } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7783,13 +8912,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -7797,13 +8927,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -7811,13 +8942,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -7825,13 +8957,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -7840,13 +8973,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7855,7 +8989,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -7864,13 +8999,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -7879,7 +9015,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -7887,13 +9024,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -7901,13 +9039,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -7915,13 +9054,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - if !(*Event)(ctx.Object).PTrace.Tracee.Parent.HasInterpreter() { + if !ev.PTrace.Tracee.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -7929,10 +9069,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.PIDContext.IsKworker + return ev.PTrace.Tracee.Parent.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -7940,10 +9081,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return false } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.IsThread + return ev.PTrace.Tracee.Parent.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -7951,10 +9093,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.PIDContext.Pid) + return int(ev.PTrace.Tracee.Parent.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -7962,10 +9105,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.PPid) + return int(ev.PTrace.Tracee.Parent.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -7973,10 +9117,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.PIDContext.Tid) + return int(ev.PTrace.Tracee.Parent.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -7984,10 +9129,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.TTYName + return ev.PTrace.Tracee.Parent.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -7995,10 +9141,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return 0 } - return int((*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.UID) + return int(ev.PTrace.Tracee.Parent.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -8006,10 +9153,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.parent.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).PTrace.Tracee.HasParent() { + ev := ctx.Event.(*Event) + if !ev.PTrace.Tracee.HasParent() { return "" } - return (*Event)(ctx.Object).PTrace.Tracee.Parent.Credentials.User + return ev.PTrace.Tracee.Parent.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -8017,7 +9165,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.PIDContext.Pid) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -8025,7 +9174,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.PPid) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -8033,7 +9183,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.PIDContext.Tid) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -8041,7 +9192,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.TTYName + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -8049,7 +9201,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.UID) + ev := ctx.Event.(*Event) + return int(ev.PTrace.Tracee.Process.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -8057,7 +9210,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "ptrace.tracee.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).PTrace.Tracee.Process.Credentials.User + ev := ctx.Event.(*Event) + return ev.PTrace.Tracee.Process.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -8065,7 +9219,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8073,7 +9228,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.destination.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.Name + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveXAttrName(ev, &ev.RemoveXAttr) }, Field: field, Weight: eval.HandlerWeight, @@ -8081,7 +9237,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.destination.namespace": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.Namespace + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveXAttrNamespace(ev, &ev.RemoveXAttr) }, Field: field, Weight: eval.HandlerWeight, @@ -8089,7 +9246,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.RemoveXAttr.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8097,7 +9255,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -8105,7 +9264,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.RemoveXAttr.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8113,7 +9273,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).RemoveXAttr.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.RemoveXAttr.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8121,7 +9282,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -8129,7 +9291,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -8137,7 +9300,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8145,7 +9309,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -8154,7 +9319,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.RemoveXAttr.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8163,7 +9329,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).RemoveXAttr.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.RemoveXAttr.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -8172,7 +9339,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.RemoveXAttr.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8181,7 +9349,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).RemoveXAttr.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.RemoveXAttr.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -8189,7 +9358,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.RemoveXAttr.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -8197,7 +9367,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -8205,7 +9376,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).RemoveXAttr.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.RemoveXAttr.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8213,7 +9385,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "removexattr.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).RemoveXAttr.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.RemoveXAttr.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -8221,7 +9394,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8229,7 +9403,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8237,7 +9412,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.New.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rename.New) }, Field: field, Weight: eval.HandlerWeight, @@ -8245,7 +9421,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -8253,7 +9430,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.New.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rename.New.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8261,7 +9439,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Rename.New.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rename.New.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8269,7 +9448,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -8277,7 +9457,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -8285,7 +9466,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8293,7 +9475,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -8302,7 +9485,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.New.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.New) }, Field: field, Weight: eval.HandlerWeight, @@ -8311,7 +9495,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Rename.New.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.New)) }, Field: field, Weight: eval.HandlerWeight, @@ -8320,7 +9505,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.New.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.New) }, Field: field, Weight: eval.HandlerWeight, @@ -8329,7 +9515,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Rename.New.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.New)) }, Field: field, Weight: eval.HandlerWeight, @@ -8337,7 +9524,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Rename.New.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -8345,7 +9533,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.New.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Rename.New.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -8353,7 +9542,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.destination.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.New.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rename.New.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8361,7 +9551,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.Old.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rename.Old) }, Field: field, Weight: eval.HandlerWeight, @@ -8369,7 +9560,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -8377,7 +9569,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.Old.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rename.Old.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8385,7 +9578,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Rename.Old.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rename.Old.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8393,7 +9587,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -8401,7 +9596,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -8409,7 +9605,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8417,7 +9614,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -8426,7 +9624,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.Old.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.Old) }, Field: field, Weight: eval.HandlerWeight, @@ -8435,7 +9634,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Rename.Old.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.Old)) }, Field: field, Weight: eval.HandlerWeight, @@ -8444,7 +9644,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.Old.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.Old) }, Field: field, Weight: eval.HandlerWeight, @@ -8453,7 +9654,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Rename.Old.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.Old)) }, Field: field, Weight: eval.HandlerWeight, @@ -8461,7 +9663,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Rename.Old.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -8469,7 +9672,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.Old.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Rename.Old.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -8477,7 +9681,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rename.Old.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rename.Old.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8485,7 +9690,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rename.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rename.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Rename.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -8493,7 +9699,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8501,7 +9708,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rmdir.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rmdir.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8509,7 +9717,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -8517,7 +9726,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rmdir.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rmdir.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8525,7 +9735,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Rmdir.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rmdir.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8533,7 +9744,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -8541,7 +9753,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -8549,7 +9762,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8557,7 +9771,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -8566,7 +9781,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rmdir.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rmdir.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8575,7 +9791,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Rmdir.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rmdir.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -8584,7 +9801,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rmdir.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rmdir.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8593,7 +9811,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Rmdir.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Rmdir.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -8601,7 +9820,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Rmdir.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -8609,7 +9829,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -8617,7 +9838,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Rmdir.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rmdir.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8625,7 +9847,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "rmdir.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Rmdir.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Rmdir.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -8633,7 +9856,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "selinux.bool.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SELinux.BoolName + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSELinuxBoolName(ev, &ev.SELinux) }, Field: field, Weight: eval.HandlerWeight, @@ -8641,7 +9865,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "selinux.bool.state": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SELinux.BoolChangeValue + ev := ctx.Event.(*Event) + return ev.SELinux.BoolChangeValue }, Field: field, Weight: eval.FunctionWeight, @@ -8649,7 +9874,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "selinux.bool_commit.state": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).SELinux.BoolCommitValue + ev := ctx.Event.(*Event) + return ev.SELinux.BoolCommitValue }, Field: field, Weight: eval.FunctionWeight, @@ -8657,7 +9883,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "selinux.enforce.status": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SELinux.EnforceStatus + ev := ctx.Event.(*Event) + return ev.SELinux.EnforceStatus }, Field: field, Weight: eval.FunctionWeight, @@ -8665,7 +9892,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setgid.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetGID.EGID) + ev := ctx.Event.(*Event) + return int(ev.SetGID.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -8673,7 +9901,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setgid.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetGID.EGroup + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSetgidEGroup(ev, &ev.SetGID) }, Field: field, Weight: eval.HandlerWeight, @@ -8681,7 +9910,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setgid.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetGID.FSGID) + ev := ctx.Event.(*Event) + return int(ev.SetGID.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -8689,7 +9919,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setgid.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetGID.FSGroup + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSetgidFSGroup(ev, &ev.SetGID) }, Field: field, Weight: eval.HandlerWeight, @@ -8697,7 +9928,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setgid.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetGID.GID) + ev := ctx.Event.(*Event) + return int(ev.SetGID.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -8705,7 +9937,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setgid.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetGID.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSetgidGroup(ev, &ev.SetGID) }, Field: field, Weight: eval.HandlerWeight, @@ -8713,7 +9946,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setuid.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetUID.EUID) + ev := ctx.Event.(*Event) + return int(ev.SetUID.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -8721,7 +9955,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setuid.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetUID.EUser + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSetuidEUser(ev, &ev.SetUID) }, Field: field, Weight: eval.HandlerWeight, @@ -8729,7 +9964,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setuid.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetUID.FSUID) + ev := ctx.Event.(*Event) + return int(ev.SetUID.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -8737,7 +9973,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setuid.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetUID.FSUser + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSetuidFSUser(ev, &ev.SetUID) }, Field: field, Weight: eval.HandlerWeight, @@ -8745,7 +9982,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setuid.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetUID.UID) + ev := ctx.Event.(*Event) + return int(ev.SetUID.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -8753,7 +9991,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setuid.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetUID.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveSetuidUser(ev, &ev.SetUID) }, Field: field, Weight: eval.HandlerWeight, @@ -8761,7 +10000,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8769,7 +10009,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.destination.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.Name + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveXAttrName(ev, &ev.SetXAttr) }, Field: field, Weight: eval.HandlerWeight, @@ -8777,7 +10018,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.destination.namespace": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.Namespace + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveXAttrNamespace(ev, &ev.SetXAttr) }, Field: field, Weight: eval.HandlerWeight, @@ -8785,7 +10027,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.SetXAttr.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8793,7 +10036,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -8801,7 +10045,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.SetXAttr.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8809,7 +10054,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).SetXAttr.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.SetXAttr.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8817,7 +10063,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -8825,7 +10072,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -8833,7 +10081,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -8841,7 +10090,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -8850,7 +10100,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.SetXAttr.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8859,7 +10110,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).SetXAttr.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.SetXAttr.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -8868,7 +10120,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.SetXAttr.File) }, Field: field, Weight: eval.HandlerWeight, @@ -8877,7 +10130,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).SetXAttr.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.SetXAttr.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -8885,7 +10139,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.SetXAttr.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -8893,7 +10148,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -8901,7 +10157,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).SetXAttr.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.SetXAttr.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -8909,7 +10166,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "setxattr.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).SetXAttr.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.SetXAttr.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -8917,7 +10175,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.PID) + ev := ctx.Event.(*Event) + return int(ev.Signal.PID) }, Field: field, Weight: eval.FunctionWeight, @@ -8925,7 +10184,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Signal.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -8933,15 +10193,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.args": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Args + result := ev.FieldHandlers.ResolveProcessArgs(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -8949,15 +10214,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsFlags(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -8965,15 +10235,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsOptions(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -8981,15 +10256,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.args_truncated": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if result, ok := ctx.BoolCache[field]; ok { + return result + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.ArgsTruncated + result := ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.BoolCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -8997,15 +10277,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgv(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -9013,15 +10298,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.argv0": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Argv0 + result := ev.FieldHandlers.ResolveProcessArgv0(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: 100 * eval.IteratorWeight, @@ -9029,6 +10319,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.cap_effective": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9038,6 +10331,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9045,6 +10339,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.cap_permitted": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9054,6 +10351,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9061,6 +10359,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.comm": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9070,6 +10371,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9077,6 +10379,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.container.id": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9086,6 +10391,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9093,6 +10399,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.cookie": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9102,6 +10411,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9109,15 +10419,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.created_at": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := int(element.ProcessContext.Process.CreatedAt) + result := int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &element.ProcessContext.Process)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9125,6 +10440,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.egid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9134,6 +10452,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9141,6 +10460,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.egroup": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9150,6 +10472,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9157,15 +10480,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Envp + result := ev.FieldHandlers.ResolveProcessEnvp(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9173,15 +10501,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.Envs + result := ev.FieldHandlers.ResolveProcessEnvs(ev, &element.ProcessContext.Process) results = append(results, result...) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9189,15 +10522,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.envs_truncated": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if result, ok := ctx.BoolCache[field]; ok { + return result + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := element.ProcessContext.Process.EnvsTruncated + result := ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &element.ProcessContext.Process) results = append(results, result) value = iterator.Next() } + ctx.BoolCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9205,6 +10543,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.euid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9214,6 +10555,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9221,6 +10563,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.euser": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9230,6 +10575,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9237,6 +10583,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.change_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9251,6 +10600,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9258,6 +10608,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.filesystem": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9268,10 +10622,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9279,6 +10634,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9293,6 +10651,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9300,6 +10659,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9310,10 +10673,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9321,6 +10685,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.in_upper_layer": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if result, ok := ctx.BoolCache[field]; ok { + return result + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9331,10 +10699,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.BoolCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9342,6 +10711,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.inode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9356,6 +10728,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9363,6 +10736,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.mode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9377,6 +10753,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9384,6 +10761,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.modification_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9398,6 +10778,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9405,6 +10786,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.mount_id": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9419,6 +10803,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9427,6 +10812,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9437,10 +10826,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9449,15 +10839,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9466,6 +10861,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9476,10 +10875,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9488,15 +10888,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9504,6 +10909,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.rights": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9514,10 +10923,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.FileEvent.FileFields)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9525,6 +10935,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9539,6 +10952,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9546,6 +10960,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.file.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9556,10 +10974,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9567,6 +10986,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.fsgid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9576,6 +10998,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9583,6 +11006,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.fsgroup": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9592,6 +11018,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9599,6 +11026,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.fsuid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9608,6 +11038,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9615,6 +11046,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.fsuser": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9624,6 +11058,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9631,6 +11066,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9640,6 +11078,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9647,6 +11086,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9656,6 +11098,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9663,6 +11106,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.change_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9677,6 +11123,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9684,6 +11131,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.filesystem": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9694,10 +11145,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9705,6 +11157,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.gid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9719,6 +11174,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9726,6 +11182,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.group": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9736,10 +11196,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9747,6 +11208,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.in_upper_layer": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + ev := ctx.Event.(*Event) + if result, ok := ctx.BoolCache[field]; ok { + return result + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9757,10 +11222,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.BoolCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9768,6 +11234,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.inode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9782,6 +11251,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9789,6 +11259,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.mode": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9803,6 +11276,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9810,6 +11284,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.modification_time": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9824,6 +11301,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9831,6 +11309,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.mount_id": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9845,6 +11326,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9853,6 +11335,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9863,10 +11349,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9875,15 +11362,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9892,6 +11384,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9902,10 +11398,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9914,15 +11411,20 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntArrayEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) for value != nil { element := (*ProcessCacheEntry)(value) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9930,6 +11432,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.rights": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + ev := ctx.Event.(*Event) + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9940,10 +11446,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9951,6 +11458,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9965,6 +11475,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9972,6 +11483,10 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.interpreter.file.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + ev := ctx.Event.(*Event) + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -9982,10 +11497,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval value = iterator.Next() continue } - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -9993,6 +11509,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.is_kworker": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + if result, ok := ctx.BoolCache[field]; ok { + return result + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -10002,6 +11521,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.BoolCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -10009,6 +11529,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.is_thread": return &eval.BoolArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []bool { + if result, ok := ctx.BoolCache[field]; ok { + return result + } var results []bool iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -10018,6 +11541,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.BoolCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -10025,6 +11549,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.pid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -10034,6 +11561,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -10041,6 +11569,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.ppid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -10050,6 +11581,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -10057,6 +11589,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.tid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -10066,6 +11601,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -10073,6 +11609,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.tty_name": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -10082,6 +11621,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -10089,6 +11629,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.uid": return &eval.IntArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []int { + if result, ok := ctx.IntCache[field]; ok { + return result + } var results []int iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -10098,6 +11641,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.IntCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -10105,6 +11649,9 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ancestors.user": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { + if result, ok := ctx.StringCache[field]; ok { + return result + } var results []string iterator := &ProcessAncestorsIterator{} value := iterator.Front(ctx) @@ -10114,6 +11661,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval results = append(results, result) value = iterator.Next() } + ctx.StringCache[field] = results return results }, Field: field, Weight: eval.IteratorWeight, @@ -10121,7 +11669,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Args + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgs(ev, &ev.Signal.Target.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -10129,7 +11678,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Signal.Target.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, &ev.Signal.Target.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -10137,7 +11687,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Signal.Target.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, &ev.Signal.Target.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -10145,7 +11696,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Signal.Target.Process.ArgsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.Signal.Target.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -10153,7 +11705,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Signal.Target.Process.Argv + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv(ev, &ev.Signal.Target.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -10161,7 +11714,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Argv0 + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.Signal.Target.Process) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -10169,7 +11723,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.CapEffective) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -10177,7 +11732,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.CapPermitted) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -10185,7 +11741,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Comm + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -10193,7 +11750,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.ContainerID + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -10201,7 +11759,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Cookie) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -10209,7 +11768,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.CreatedAt) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.Signal.Target.Process)) }, Field: field, Weight: eval.HandlerWeight, @@ -10217,7 +11777,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.EGID) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -10225,7 +11786,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.EGroup + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -10233,7 +11795,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Signal.Target.Process.Envp + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.Signal.Target.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -10241,7 +11804,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - return (*Event)(ctx.Object).Signal.Target.Process.Envs + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.Signal.Target.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -10249,7 +11813,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Signal.Target.Process.EnvsTruncated + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.Signal.Target.Process) }, Field: field, Weight: eval.HandlerWeight, @@ -10257,7 +11822,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.EUID) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -10265,7 +11831,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.EUser + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -10273,10 +11840,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.CTime) + return int(ev.Signal.Target.Process.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -10284,10 +11852,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10295,10 +11864,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.GID) + return int(ev.Signal.Target.Process.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -10306,10 +11876,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10317,10 +11888,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return false } - return (*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10328,10 +11900,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.Inode) + return int(ev.Signal.Target.Process.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -10339,10 +11912,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.Mode) + return int(ev.Signal.Target.Process.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -10350,10 +11924,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.MTime) + return int(ev.Signal.Target.Process.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -10361,10 +11936,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.MountID) + return int(ev.Signal.Target.Process.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -10373,10 +11949,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10385,7 +11962,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Process.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -10394,10 +11972,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10406,7 +11985,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Process.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -10414,10 +11994,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Process.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -10425,10 +12006,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.UID) + return int(ev.Signal.Target.Process.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -10436,10 +12018,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.IsNotKworker() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Process.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10447,7 +12030,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.FSGID) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -10455,7 +12039,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.FSGroup + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -10463,7 +12048,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.FSUID) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -10471,7 +12057,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.FSUser + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -10479,7 +12066,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.GID) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -10487,7 +12075,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.Group + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -10495,10 +12084,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -10506,10 +12096,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10517,10 +12108,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -10528,10 +12120,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10539,10 +12132,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return false } - return (*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10550,10 +12144,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -10561,10 +12156,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -10572,10 +12168,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -10583,10 +12180,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -10595,10 +12193,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10607,7 +12206,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -10616,10 +12216,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10628,7 +12229,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -10636,10 +12238,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -10647,10 +12250,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -10658,10 +12262,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.Process.HasInterpreter() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.Process.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10669,7 +12274,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Signal.Target.Process.PIDContext.IsKworker + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -10677,7 +12283,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Signal.Target.Process.IsThread + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -10685,10 +12292,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.args": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Args + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.Signal.Target.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -10696,10 +12304,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.args_flags": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return []string{} } - return (*Event)(ctx.Object).Signal.Target.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.Signal.Target.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -10707,10 +12316,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.args_options": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return []string{} } - return (*Event)(ctx.Object).Signal.Target.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.Signal.Target.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -10718,10 +12328,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.args_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return false } - return (*Event)(ctx.Object).Signal.Target.Parent.ArgsTruncated + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Signal.Target.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -10729,10 +12340,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.argv": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return []string{} } - return (*Event)(ctx.Object).Signal.Target.Parent.Argv + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.Signal.Target.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -10740,10 +12352,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.argv0": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Argv0 + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Signal.Target.Parent) }, Field: field, Weight: 100 * eval.HandlerWeight, @@ -10751,10 +12364,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.cap_effective": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.CapEffective) + return int(ev.Signal.Target.Parent.Credentials.CapEffective) }, Field: field, Weight: eval.FunctionWeight, @@ -10762,10 +12376,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.cap_permitted": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.CapPermitted) + return int(ev.Signal.Target.Parent.Credentials.CapPermitted) }, Field: field, Weight: eval.FunctionWeight, @@ -10773,10 +12388,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.comm": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Comm + return ev.Signal.Target.Parent.Comm }, Field: field, Weight: eval.FunctionWeight, @@ -10784,10 +12400,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.container.id": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.ContainerID + return ev.Signal.Target.Parent.ContainerID }, Field: field, Weight: eval.FunctionWeight, @@ -10795,10 +12412,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.cookie": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Cookie) + return int(ev.Signal.Target.Parent.Cookie) }, Field: field, Weight: eval.FunctionWeight, @@ -10806,10 +12424,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.created_at": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.CreatedAt) + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Signal.Target.Parent)) }, Field: field, Weight: eval.HandlerWeight, @@ -10817,10 +12436,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.egid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.EGID) + return int(ev.Signal.Target.Parent.Credentials.EGID) }, Field: field, Weight: eval.FunctionWeight, @@ -10828,10 +12448,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.egroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.EGroup + return ev.Signal.Target.Parent.Credentials.EGroup }, Field: field, Weight: eval.FunctionWeight, @@ -10839,10 +12460,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.envp": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return []string{} } - return (*Event)(ctx.Object).Signal.Target.Parent.Envp + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Signal.Target.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -10850,10 +12472,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.envs": return &eval.StringArrayEvaluator{ EvalFnc: func(ctx *eval.Context) []string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return []string{} } - return (*Event)(ctx.Object).Signal.Target.Parent.Envs + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Signal.Target.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -10861,10 +12484,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.envs_truncated": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return false } - return (*Event)(ctx.Object).Signal.Target.Parent.EnvsTruncated + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Signal.Target.Parent) }, Field: field, Weight: eval.HandlerWeight, @@ -10872,10 +12496,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.euid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.EUID) + return int(ev.Signal.Target.Parent.Credentials.EUID) }, Field: field, Weight: eval.FunctionWeight, @@ -10883,10 +12508,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.euser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.EUser + return ev.Signal.Target.Parent.Credentials.EUser }, Field: field, Weight: eval.FunctionWeight, @@ -10894,13 +12520,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.CTime) + return int(ev.Signal.Target.Parent.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -10908,13 +12535,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -10922,13 +12550,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.GID) + return int(ev.Signal.Target.Parent.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -10936,13 +12565,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10950,13 +12580,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return false } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return false } - return (*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -10964,13 +12595,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.Inode) + return int(ev.Signal.Target.Parent.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -10978,13 +12610,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.Mode) + return int(ev.Signal.Target.Parent.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -10992,13 +12625,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.MTime) + return int(ev.Signal.Target.Parent.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11006,13 +12640,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.MountID) + return int(ev.Signal.Target.Parent.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -11021,13 +12656,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -11036,7 +12672,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -11045,13 +12682,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -11060,7 +12698,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -11068,13 +12707,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Parent.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -11082,13 +12722,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.UID) + return int(ev.Signal.Target.Parent.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -11096,13 +12737,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.IsNotKworker() { + if !ev.Signal.Target.Parent.IsNotKworker() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Parent.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11110,10 +12752,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.fsgid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSGID) + return int(ev.Signal.Target.Parent.Credentials.FSGID) }, Field: field, Weight: eval.FunctionWeight, @@ -11121,10 +12764,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.fsgroup": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSGroup + return ev.Signal.Target.Parent.Credentials.FSGroup }, Field: field, Weight: eval.FunctionWeight, @@ -11132,10 +12776,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.fsuid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSUID) + return int(ev.Signal.Target.Parent.Credentials.FSUID) }, Field: field, Weight: eval.FunctionWeight, @@ -11143,10 +12788,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.fsuser": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.FSUser + return ev.Signal.Target.Parent.Credentials.FSUser }, Field: field, Weight: eval.FunctionWeight, @@ -11154,10 +12800,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.GID) + return int(ev.Signal.Target.Parent.Credentials.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -11165,10 +12812,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.Group + return ev.Signal.Target.Parent.Credentials.Group }, Field: field, Weight: eval.FunctionWeight, @@ -11176,13 +12824,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11190,13 +12839,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -11204,13 +12854,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -11218,13 +12869,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11232,13 +12884,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return false } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return false } - return (*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11246,13 +12899,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -11260,13 +12914,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -11274,13 +12929,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11288,13 +12944,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -11303,13 +12960,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -11318,7 +12976,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -11327,13 +12986,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent) }, Field: field, Weight: eval.HandlerWeight, @@ -11342,7 +13002,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent)) }, Field: field, Weight: eval.HandlerWeight, @@ -11350,13 +13011,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -11364,13 +13026,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID) + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -11378,13 +13041,14 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.interpreter.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - if !(*Event)(ctx.Object).Signal.Target.Parent.HasInterpreter() { + if !ev.Signal.Target.Parent.HasInterpreter() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11392,10 +13056,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.is_kworker": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return false } - return (*Event)(ctx.Object).Signal.Target.Parent.PIDContext.IsKworker + return ev.Signal.Target.Parent.PIDContext.IsKworker }, Field: field, Weight: eval.FunctionWeight, @@ -11403,10 +13068,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.is_thread": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return false } - return (*Event)(ctx.Object).Signal.Target.Parent.IsThread + return ev.Signal.Target.Parent.IsThread }, Field: field, Weight: eval.FunctionWeight, @@ -11414,10 +13080,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.PIDContext.Pid) + return int(ev.Signal.Target.Parent.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -11425,10 +13092,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.PPid) + return int(ev.Signal.Target.Parent.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -11436,10 +13104,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.PIDContext.Tid) + return int(ev.Signal.Target.Parent.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -11447,10 +13116,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.TTYName + return ev.Signal.Target.Parent.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -11458,10 +13128,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return 0 } - return int((*Event)(ctx.Object).Signal.Target.Parent.Credentials.UID) + return int(ev.Signal.Target.Parent.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -11469,10 +13140,11 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.parent.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - if !(*Event)(ctx.Object).Signal.Target.HasParent() { + ev := ctx.Event.(*Event) + if !ev.Signal.Target.HasParent() { return "" } - return (*Event)(ctx.Object).Signal.Target.Parent.Credentials.User + return ev.Signal.Target.Parent.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -11480,7 +13152,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.pid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.PIDContext.Pid) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.PIDContext.Pid) }, Field: field, Weight: eval.FunctionWeight, @@ -11488,7 +13161,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.ppid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.PPid) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.PPid) }, Field: field, Weight: eval.FunctionWeight, @@ -11496,7 +13170,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.tid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.PIDContext.Tid) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.PIDContext.Tid) }, Field: field, Weight: eval.FunctionWeight, @@ -11504,7 +13179,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.tty_name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.TTYName + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.TTYName }, Field: field, Weight: eval.FunctionWeight, @@ -11512,7 +13188,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Target.Process.Credentials.UID) + ev := ctx.Event.(*Event) + return int(ev.Signal.Target.Process.Credentials.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -11520,7 +13197,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.target.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Signal.Target.Process.Credentials.User + ev := ctx.Event.(*Event) + return ev.Signal.Target.Process.Credentials.User }, Field: field, Weight: eval.FunctionWeight, @@ -11528,7 +13206,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "signal.type": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Signal.Type) + ev := ctx.Event.(*Event) + return int(ev.Signal.Type) }, Field: field, Weight: eval.FunctionWeight, @@ -11536,7 +13215,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11544,7 +13224,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Splice.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Splice.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11552,7 +13233,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -11560,7 +13242,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Splice.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Splice.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11568,7 +13251,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Splice.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Splice.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11576,7 +13260,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -11584,7 +13269,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -11592,7 +13278,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11600,7 +13287,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -11609,7 +13297,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Splice.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Splice.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11618,7 +13307,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Splice.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Splice.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -11627,7 +13317,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Splice.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Splice.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11636,7 +13327,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Splice.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Splice.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -11644,7 +13336,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Splice.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -11652,7 +13345,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Splice.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -11660,7 +13354,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Splice.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Splice.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11668,7 +13363,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.pipe_entry_flag": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.PipeEntryFlag) + ev := ctx.Event.(*Event) + return int(ev.Splice.PipeEntryFlag) }, Field: field, Weight: eval.FunctionWeight, @@ -11676,7 +13372,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.pipe_exit_flag": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.PipeExitFlag) + ev := ctx.Event.(*Event) + return int(ev.Splice.PipeExitFlag) }, Field: field, Weight: eval.FunctionWeight, @@ -11684,7 +13381,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "splice.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Splice.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Splice.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -11692,7 +13390,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11700,7 +13399,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Unlink.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Unlink.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11708,7 +13408,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -11716,7 +13417,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Unlink.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Unlink.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11724,7 +13426,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Unlink.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Unlink.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11732,7 +13435,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -11740,7 +13444,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -11748,7 +13453,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11756,7 +13462,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -11765,7 +13472,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Unlink.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Unlink.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11774,7 +13482,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Unlink.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Unlink.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -11783,7 +13492,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Unlink.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Unlink.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11792,7 +13502,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Unlink.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Unlink.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -11800,7 +13511,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Unlink.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -11808,7 +13520,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Unlink.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -11816,7 +13529,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Unlink.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Unlink.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11824,7 +13538,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.flags": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.Flags) + ev := ctx.Event.(*Event) + return int(ev.Unlink.Flags) }, Field: field, Weight: eval.FunctionWeight, @@ -11832,7 +13547,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unlink.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Unlink.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Unlink.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -11840,7 +13556,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unload_module.name": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).UnloadModule.Name + ev := ctx.Event.(*Event) + return ev.UnloadModule.Name }, Field: field, Weight: eval.FunctionWeight, @@ -11848,7 +13565,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "unload_module.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).UnloadModule.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.UnloadModule.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -11856,7 +13574,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.change_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.CTime) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.CTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11864,7 +13583,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.filesystem": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Utimes.File.Filesystem + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Utimes.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11872,7 +13592,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.gid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.GID) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.GID) }, Field: field, Weight: eval.FunctionWeight, @@ -11880,7 +13601,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.group": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Utimes.File.FileFields.Group + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Utimes.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11888,7 +13610,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.in_upper_layer": return &eval.BoolEvaluator{ EvalFnc: func(ctx *eval.Context) bool { - return (*Event)(ctx.Object).Utimes.File.FileFields.InUpperLayer + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Utimes.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11896,7 +13619,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.inode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.Inode) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.Inode) }, Field: field, Weight: eval.FunctionWeight, @@ -11904,7 +13628,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.mode": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.Mode) }, Field: field, Weight: eval.FunctionWeight, @@ -11912,7 +13637,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.modification_time": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.MTime) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.MTime) }, Field: field, Weight: eval.FunctionWeight, @@ -11920,7 +13646,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.mount_id": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.MountID) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.MountID) }, Field: field, Weight: eval.FunctionWeight, @@ -11929,7 +13656,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Utimes.File.BasenameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Utimes.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11938,7 +13666,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkBasename, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Utimes.File.BasenameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFileBasename(ev, &ev.Utimes.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -11947,7 +13676,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.StringEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Utimes.File.PathnameStr + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Utimes.File) }, Field: field, Weight: eval.HandlerWeight, @@ -11956,7 +13686,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval return &eval.IntEvaluator{ OpOverrides: ProcessSymlinkPathname, EvalFnc: func(ctx *eval.Context) int { - return len((*Event)(ctx.Object).Utimes.File.PathnameStr) + ev := ctx.Event.(*Event) + return len(ev.FieldHandlers.ResolveFilePath(ev, &ev.Utimes.File)) }, Field: field, Weight: eval.HandlerWeight, @@ -11964,7 +13695,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.rights": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.Mode) + ev := ctx.Event.(*Event) + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Utimes.File.FileFields)) }, Field: field, Weight: eval.HandlerWeight, @@ -11972,7 +13704,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.uid": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.File.FileFields.UID) + ev := ctx.Event.(*Event) + return int(ev.Utimes.File.FileFields.UID) }, Field: field, Weight: eval.FunctionWeight, @@ -11980,7 +13713,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.file.user": return &eval.StringEvaluator{ EvalFnc: func(ctx *eval.Context) string { - return (*Event)(ctx.Object).Utimes.File.FileFields.User + ev := ctx.Event.(*Event) + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Utimes.File.FileFields) }, Field: field, Weight: eval.HandlerWeight, @@ -11988,7 +13722,8 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval case "utimes.retval": return &eval.IntEvaluator{ EvalFnc: func(ctx *eval.Context) int { - return int((*Event)(ctx.Object).Utimes.SyscallEvent.Retval) + ev := ctx.Event.(*Event) + return int(ev.Utimes.SyscallEvent.Retval) }, Field: field, Weight: eval.FunctionWeight, @@ -11996,7 +13731,7 @@ func (m *Model) GetEvaluator(field eval.Field, regID eval.RegisterID) (eval.Eval } return nil, &eval.ErrFieldNotFound{Field: field} } -func (e *Event) GetFields() []eval.Field { +func (ev *Event) GetFields() []eval.Field { return []eval.Field{ "async", "bind.addr.family", @@ -13072,731 +14807,731 @@ func (e *Event) GetFields() []eval.Field { "utimes.retval", } } -func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { +func (ev *Event) GetFieldValue(field eval.Field) (interface{}, error) { switch field { case "async": - return e.Async, nil + return ev.Async, nil case "bind.addr.family": - return int(e.Bind.AddrFamily), nil + return int(ev.Bind.AddrFamily), nil case "bind.addr.ip": - return e.Bind.Addr.IPNet, nil + return ev.Bind.Addr.IPNet, nil case "bind.addr.port": - return int(e.Bind.Addr.Port), nil + return int(ev.Bind.Addr.Port), nil case "bind.retval": - return int(e.Bind.SyscallEvent.Retval), nil + return int(ev.Bind.SyscallEvent.Retval), nil case "bpf.cmd": - return int(e.BPF.Cmd), nil + return int(ev.BPF.Cmd), nil case "bpf.map.name": - return e.BPF.Map.Name, nil + return ev.BPF.Map.Name, nil case "bpf.map.type": - return int(e.BPF.Map.Type), nil + return int(ev.BPF.Map.Type), nil case "bpf.prog.attach_type": - return int(e.BPF.Program.AttachType), nil + return int(ev.BPF.Program.AttachType), nil case "bpf.prog.helpers": - result := make([]int, len(e.BPF.Program.Helpers)) - for i, v := range e.BPF.Program.Helpers { + result := make([]int, len(ev.BPF.Program.Helpers)) + for i, v := range ev.BPF.Program.Helpers { result[i] = int(v) } return result, nil case "bpf.prog.name": - return e.BPF.Program.Name, nil + return ev.BPF.Program.Name, nil case "bpf.prog.tag": - return e.BPF.Program.Tag, nil + return ev.BPF.Program.Tag, nil case "bpf.prog.type": - return int(e.BPF.Program.Type), nil + return int(ev.BPF.Program.Type), nil case "bpf.retval": - return int(e.BPF.SyscallEvent.Retval), nil + return int(ev.BPF.SyscallEvent.Retval), nil case "capset.cap_effective": - return int(e.Capset.CapEffective), nil + return int(ev.Capset.CapEffective), nil case "capset.cap_permitted": - return int(e.Capset.CapPermitted), nil + return int(ev.Capset.CapPermitted), nil case "chmod.file.change_time": - return int(e.Chmod.File.FileFields.CTime), nil + return int(ev.Chmod.File.FileFields.CTime), nil case "chmod.file.destination.mode": - return int(e.Chmod.Mode), nil + return int(ev.Chmod.Mode), nil case "chmod.file.destination.rights": - return int(e.Chmod.Mode), nil + return int(ev.Chmod.Mode), nil case "chmod.file.filesystem": - return e.Chmod.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Chmod.File), nil case "chmod.file.gid": - return int(e.Chmod.File.FileFields.GID), nil + return int(ev.Chmod.File.FileFields.GID), nil case "chmod.file.group": - return e.Chmod.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Chmod.File.FileFields), nil case "chmod.file.in_upper_layer": - return e.Chmod.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Chmod.File.FileFields), nil case "chmod.file.inode": - return int(e.Chmod.File.FileFields.Inode), nil + return int(ev.Chmod.File.FileFields.Inode), nil case "chmod.file.mode": - return int(e.Chmod.File.FileFields.Mode), nil + return int(ev.Chmod.File.FileFields.Mode), nil case "chmod.file.modification_time": - return int(e.Chmod.File.FileFields.MTime), nil + return int(ev.Chmod.File.FileFields.MTime), nil case "chmod.file.mount_id": - return int(e.Chmod.File.FileFields.MountID), nil + return int(ev.Chmod.File.FileFields.MountID), nil case "chmod.file.name": - return e.Chmod.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chmod.File), nil case "chmod.file.name.length": - return len(e.Chmod.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chmod.File), nil case "chmod.file.path": - return e.Chmod.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Chmod.File), nil case "chmod.file.path.length": - return len(e.Chmod.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Chmod.File), nil case "chmod.file.rights": - return int(e.Chmod.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Chmod.File.FileFields)), nil case "chmod.file.uid": - return int(e.Chmod.File.FileFields.UID), nil + return int(ev.Chmod.File.FileFields.UID), nil case "chmod.file.user": - return e.Chmod.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Chmod.File.FileFields), nil case "chmod.retval": - return int(e.Chmod.SyscallEvent.Retval), nil + return int(ev.Chmod.SyscallEvent.Retval), nil case "chown.file.change_time": - return int(e.Chown.File.FileFields.CTime), nil + return int(ev.Chown.File.FileFields.CTime), nil case "chown.file.destination.gid": - return int(e.Chown.GID), nil + return int(ev.Chown.GID), nil case "chown.file.destination.group": - return e.Chown.Group, nil + return ev.FieldHandlers.ResolveChownGID(ev, &ev.Chown), nil case "chown.file.destination.uid": - return int(e.Chown.UID), nil + return int(ev.Chown.UID), nil case "chown.file.destination.user": - return e.Chown.User, nil + return ev.FieldHandlers.ResolveChownUID(ev, &ev.Chown), nil case "chown.file.filesystem": - return e.Chown.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Chown.File), nil case "chown.file.gid": - return int(e.Chown.File.FileFields.GID), nil + return int(ev.Chown.File.FileFields.GID), nil case "chown.file.group": - return e.Chown.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Chown.File.FileFields), nil case "chown.file.in_upper_layer": - return e.Chown.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Chown.File.FileFields), nil case "chown.file.inode": - return int(e.Chown.File.FileFields.Inode), nil + return int(ev.Chown.File.FileFields.Inode), nil case "chown.file.mode": - return int(e.Chown.File.FileFields.Mode), nil + return int(ev.Chown.File.FileFields.Mode), nil case "chown.file.modification_time": - return int(e.Chown.File.FileFields.MTime), nil + return int(ev.Chown.File.FileFields.MTime), nil case "chown.file.mount_id": - return int(e.Chown.File.FileFields.MountID), nil + return int(ev.Chown.File.FileFields.MountID), nil case "chown.file.name": - return e.Chown.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chown.File), nil case "chown.file.name.length": - return len(e.Chown.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chown.File), nil case "chown.file.path": - return e.Chown.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Chown.File), nil case "chown.file.path.length": - return len(e.Chown.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Chown.File), nil case "chown.file.rights": - return int(e.Chown.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Chown.File.FileFields)), nil case "chown.file.uid": - return int(e.Chown.File.FileFields.UID), nil + return int(ev.Chown.File.FileFields.UID), nil case "chown.file.user": - return e.Chown.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Chown.File.FileFields), nil case "chown.retval": - return int(e.Chown.SyscallEvent.Retval), nil + return int(ev.Chown.SyscallEvent.Retval), nil case "container.id": - return e.ContainerContext.ID, nil + return ev.FieldHandlers.ResolveContainerID(ev, &ev.ContainerContext), nil case "container.tags": - return e.ContainerContext.Tags, nil + return ev.FieldHandlers.ResolveContainerTags(ev, &ev.ContainerContext), nil case "dns.id": - return int(e.DNS.ID), nil + return int(ev.DNS.ID), nil case "dns.question.class": - return int(e.DNS.Class), nil + return int(ev.DNS.Class), nil case "dns.question.count": - return int(e.DNS.Count), nil + return int(ev.DNS.Count), nil case "dns.question.length": - return int(e.DNS.Size), nil + return int(ev.DNS.Size), nil case "dns.question.name": - return e.DNS.Name, nil + return ev.DNS.Name, nil case "dns.question.name.length": - return len(e.DNS.Name), nil + return len(ev.DNS.Name), nil case "dns.question.type": - return int(e.DNS.Type), nil + return int(ev.DNS.Type), nil case "exec.args": - return e.Exec.Process.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.Exec.Process), nil case "exec.args_flags": - return e.Exec.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.Exec.Process), nil case "exec.args_options": - return e.Exec.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.Exec.Process), nil case "exec.args_truncated": - return e.Exec.Process.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Exec.Process), nil case "exec.argv": - return e.Exec.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.Exec.Process), nil case "exec.argv0": - return e.Exec.Process.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Exec.Process), nil case "exec.cap_effective": - return int(e.Exec.Process.Credentials.CapEffective), nil + return int(ev.Exec.Process.Credentials.CapEffective), nil case "exec.cap_permitted": - return int(e.Exec.Process.Credentials.CapPermitted), nil + return int(ev.Exec.Process.Credentials.CapPermitted), nil case "exec.comm": - return e.Exec.Process.Comm, nil + return ev.Exec.Process.Comm, nil case "exec.container.id": - return e.Exec.Process.ContainerID, nil + return ev.Exec.Process.ContainerID, nil case "exec.cookie": - return int(e.Exec.Process.Cookie), nil + return int(ev.Exec.Process.Cookie), nil case "exec.created_at": - return int(e.Exec.Process.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Exec.Process)), nil case "exec.egid": - return int(e.Exec.Process.Credentials.EGID), nil + return int(ev.Exec.Process.Credentials.EGID), nil case "exec.egroup": - return e.Exec.Process.Credentials.EGroup, nil + return ev.Exec.Process.Credentials.EGroup, nil case "exec.envp": - return e.Exec.Process.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Exec.Process), nil case "exec.envs": - return e.Exec.Process.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Exec.Process), nil case "exec.envs_truncated": - return e.Exec.Process.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Exec.Process), nil case "exec.euid": - return int(e.Exec.Process.Credentials.EUID), nil + return int(ev.Exec.Process.Credentials.EUID), nil case "exec.euser": - return e.Exec.Process.Credentials.EUser, nil + return ev.Exec.Process.Credentials.EUser, nil case "exec.file.change_time": - return int(e.Exec.Process.FileEvent.FileFields.CTime), nil + return int(ev.Exec.Process.FileEvent.FileFields.CTime), nil case "exec.file.filesystem": - return e.Exec.Process.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exec.Process.FileEvent), nil case "exec.file.gid": - return int(e.Exec.Process.FileEvent.FileFields.GID), nil + return int(ev.Exec.Process.FileEvent.FileFields.GID), nil case "exec.file.group": - return e.Exec.Process.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exec.Process.FileEvent.FileFields), nil case "exec.file.in_upper_layer": - return e.Exec.Process.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exec.Process.FileEvent.FileFields), nil case "exec.file.inode": - return int(e.Exec.Process.FileEvent.FileFields.Inode), nil + return int(ev.Exec.Process.FileEvent.FileFields.Inode), nil case "exec.file.mode": - return int(e.Exec.Process.FileEvent.FileFields.Mode), nil + return int(ev.Exec.Process.FileEvent.FileFields.Mode), nil case "exec.file.modification_time": - return int(e.Exec.Process.FileEvent.FileFields.MTime), nil + return int(ev.Exec.Process.FileEvent.FileFields.MTime), nil case "exec.file.mount_id": - return int(e.Exec.Process.FileEvent.FileFields.MountID), nil + return int(ev.Exec.Process.FileEvent.FileFields.MountID), nil case "exec.file.name": - return e.Exec.Process.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.FileEvent), nil case "exec.file.name.length": - return len(e.Exec.Process.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.FileEvent), nil case "exec.file.path": - return e.Exec.Process.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.FileEvent), nil case "exec.file.path.length": - return len(e.Exec.Process.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.FileEvent), nil case "exec.file.rights": - return int(e.Exec.Process.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exec.Process.FileEvent.FileFields)), nil case "exec.file.uid": - return int(e.Exec.Process.FileEvent.FileFields.UID), nil + return int(ev.Exec.Process.FileEvent.FileFields.UID), nil case "exec.file.user": - return e.Exec.Process.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exec.Process.FileEvent.FileFields), nil case "exec.fsgid": - return int(e.Exec.Process.Credentials.FSGID), nil + return int(ev.Exec.Process.Credentials.FSGID), nil case "exec.fsgroup": - return e.Exec.Process.Credentials.FSGroup, nil + return ev.Exec.Process.Credentials.FSGroup, nil case "exec.fsuid": - return int(e.Exec.Process.Credentials.FSUID), nil + return int(ev.Exec.Process.Credentials.FSUID), nil case "exec.fsuser": - return e.Exec.Process.Credentials.FSUser, nil + return ev.Exec.Process.Credentials.FSUser, nil case "exec.gid": - return int(e.Exec.Process.Credentials.GID), nil + return int(ev.Exec.Process.Credentials.GID), nil case "exec.group": - return e.Exec.Process.Credentials.Group, nil + return ev.Exec.Process.Credentials.Group, nil case "exec.interpreter.file.change_time": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil case "exec.interpreter.file.filesystem": - return e.Exec.Process.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exec.Process.LinuxBinprm.FileEvent), nil case "exec.interpreter.file.gid": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID), nil case "exec.interpreter.file.group": - return e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields), nil case "exec.interpreter.file.in_upper_layer": - return e.Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields), nil case "exec.interpreter.file.inode": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil case "exec.interpreter.file.mode": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil case "exec.interpreter.file.modification_time": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil case "exec.interpreter.file.mount_id": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil case "exec.interpreter.file.name": - return e.Exec.Process.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.LinuxBinprm.FileEvent), nil case "exec.interpreter.file.name.length": - return len(e.Exec.Process.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.LinuxBinprm.FileEvent), nil case "exec.interpreter.file.path": - return e.Exec.Process.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.LinuxBinprm.FileEvent), nil case "exec.interpreter.file.path.length": - return len(e.Exec.Process.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.LinuxBinprm.FileEvent), nil case "exec.interpreter.file.rights": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields)), nil case "exec.interpreter.file.uid": - return int(e.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID), nil case "exec.interpreter.file.user": - return e.Exec.Process.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields), nil case "exec.is_kworker": - return e.Exec.Process.PIDContext.IsKworker, nil + return ev.Exec.Process.PIDContext.IsKworker, nil case "exec.is_thread": - return e.Exec.Process.IsThread, nil + return ev.Exec.Process.IsThread, nil case "exec.pid": - return int(e.Exec.Process.PIDContext.Pid), nil + return int(ev.Exec.Process.PIDContext.Pid), nil case "exec.ppid": - return int(e.Exec.Process.PPid), nil + return int(ev.Exec.Process.PPid), nil case "exec.tid": - return int(e.Exec.Process.PIDContext.Tid), nil + return int(ev.Exec.Process.PIDContext.Tid), nil case "exec.tty_name": - return e.Exec.Process.TTYName, nil + return ev.Exec.Process.TTYName, nil case "exec.uid": - return int(e.Exec.Process.Credentials.UID), nil + return int(ev.Exec.Process.Credentials.UID), nil case "exec.user": - return e.Exec.Process.Credentials.User, nil + return ev.Exec.Process.Credentials.User, nil case "exit.args": - return e.Exit.Process.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.Exit.Process), nil case "exit.args_flags": - return e.Exit.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.Exit.Process), nil case "exit.args_options": - return e.Exit.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.Exit.Process), nil case "exit.args_truncated": - return e.Exit.Process.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Exit.Process), nil case "exit.argv": - return e.Exit.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.Exit.Process), nil case "exit.argv0": - return e.Exit.Process.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Exit.Process), nil case "exit.cap_effective": - return int(e.Exit.Process.Credentials.CapEffective), nil + return int(ev.Exit.Process.Credentials.CapEffective), nil case "exit.cap_permitted": - return int(e.Exit.Process.Credentials.CapPermitted), nil + return int(ev.Exit.Process.Credentials.CapPermitted), nil case "exit.cause": - return int(e.Exit.Cause), nil + return int(ev.Exit.Cause), nil case "exit.code": - return int(e.Exit.Code), nil + return int(ev.Exit.Code), nil case "exit.comm": - return e.Exit.Process.Comm, nil + return ev.Exit.Process.Comm, nil case "exit.container.id": - return e.Exit.Process.ContainerID, nil + return ev.Exit.Process.ContainerID, nil case "exit.cookie": - return int(e.Exit.Process.Cookie), nil + return int(ev.Exit.Process.Cookie), nil case "exit.created_at": - return int(e.Exit.Process.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Exit.Process)), nil case "exit.egid": - return int(e.Exit.Process.Credentials.EGID), nil + return int(ev.Exit.Process.Credentials.EGID), nil case "exit.egroup": - return e.Exit.Process.Credentials.EGroup, nil + return ev.Exit.Process.Credentials.EGroup, nil case "exit.envp": - return e.Exit.Process.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Exit.Process), nil case "exit.envs": - return e.Exit.Process.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Exit.Process), nil case "exit.envs_truncated": - return e.Exit.Process.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Exit.Process), nil case "exit.euid": - return int(e.Exit.Process.Credentials.EUID), nil + return int(ev.Exit.Process.Credentials.EUID), nil case "exit.euser": - return e.Exit.Process.Credentials.EUser, nil + return ev.Exit.Process.Credentials.EUser, nil case "exit.file.change_time": - return int(e.Exit.Process.FileEvent.FileFields.CTime), nil + return int(ev.Exit.Process.FileEvent.FileFields.CTime), nil case "exit.file.filesystem": - return e.Exit.Process.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exit.Process.FileEvent), nil case "exit.file.gid": - return int(e.Exit.Process.FileEvent.FileFields.GID), nil + return int(ev.Exit.Process.FileEvent.FileFields.GID), nil case "exit.file.group": - return e.Exit.Process.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exit.Process.FileEvent.FileFields), nil case "exit.file.in_upper_layer": - return e.Exit.Process.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exit.Process.FileEvent.FileFields), nil case "exit.file.inode": - return int(e.Exit.Process.FileEvent.FileFields.Inode), nil + return int(ev.Exit.Process.FileEvent.FileFields.Inode), nil case "exit.file.mode": - return int(e.Exit.Process.FileEvent.FileFields.Mode), nil + return int(ev.Exit.Process.FileEvent.FileFields.Mode), nil case "exit.file.modification_time": - return int(e.Exit.Process.FileEvent.FileFields.MTime), nil + return int(ev.Exit.Process.FileEvent.FileFields.MTime), nil case "exit.file.mount_id": - return int(e.Exit.Process.FileEvent.FileFields.MountID), nil + return int(ev.Exit.Process.FileEvent.FileFields.MountID), nil case "exit.file.name": - return e.Exit.Process.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.FileEvent), nil case "exit.file.name.length": - return len(e.Exit.Process.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.FileEvent), nil case "exit.file.path": - return e.Exit.Process.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.FileEvent), nil case "exit.file.path.length": - return len(e.Exit.Process.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.FileEvent), nil case "exit.file.rights": - return int(e.Exit.Process.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exit.Process.FileEvent.FileFields)), nil case "exit.file.uid": - return int(e.Exit.Process.FileEvent.FileFields.UID), nil + return int(ev.Exit.Process.FileEvent.FileFields.UID), nil case "exit.file.user": - return e.Exit.Process.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exit.Process.FileEvent.FileFields), nil case "exit.fsgid": - return int(e.Exit.Process.Credentials.FSGID), nil + return int(ev.Exit.Process.Credentials.FSGID), nil case "exit.fsgroup": - return e.Exit.Process.Credentials.FSGroup, nil + return ev.Exit.Process.Credentials.FSGroup, nil case "exit.fsuid": - return int(e.Exit.Process.Credentials.FSUID), nil + return int(ev.Exit.Process.Credentials.FSUID), nil case "exit.fsuser": - return e.Exit.Process.Credentials.FSUser, nil + return ev.Exit.Process.Credentials.FSUser, nil case "exit.gid": - return int(e.Exit.Process.Credentials.GID), nil + return int(ev.Exit.Process.Credentials.GID), nil case "exit.group": - return e.Exit.Process.Credentials.Group, nil + return ev.Exit.Process.Credentials.Group, nil case "exit.interpreter.file.change_time": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil case "exit.interpreter.file.filesystem": - return e.Exit.Process.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exit.Process.LinuxBinprm.FileEvent), nil case "exit.interpreter.file.gid": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID), nil case "exit.interpreter.file.group": - return e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields), nil case "exit.interpreter.file.in_upper_layer": - return e.Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields), nil case "exit.interpreter.file.inode": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil case "exit.interpreter.file.mode": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil case "exit.interpreter.file.modification_time": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil case "exit.interpreter.file.mount_id": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil case "exit.interpreter.file.name": - return e.Exit.Process.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.LinuxBinprm.FileEvent), nil case "exit.interpreter.file.name.length": - return len(e.Exit.Process.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.LinuxBinprm.FileEvent), nil case "exit.interpreter.file.path": - return e.Exit.Process.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.LinuxBinprm.FileEvent), nil case "exit.interpreter.file.path.length": - return len(e.Exit.Process.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.LinuxBinprm.FileEvent), nil case "exit.interpreter.file.rights": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields)), nil case "exit.interpreter.file.uid": - return int(e.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID), nil case "exit.interpreter.file.user": - return e.Exit.Process.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields), nil case "exit.is_kworker": - return e.Exit.Process.PIDContext.IsKworker, nil + return ev.Exit.Process.PIDContext.IsKworker, nil case "exit.is_thread": - return e.Exit.Process.IsThread, nil + return ev.Exit.Process.IsThread, nil case "exit.pid": - return int(e.Exit.Process.PIDContext.Pid), nil + return int(ev.Exit.Process.PIDContext.Pid), nil case "exit.ppid": - return int(e.Exit.Process.PPid), nil + return int(ev.Exit.Process.PPid), nil case "exit.tid": - return int(e.Exit.Process.PIDContext.Tid), nil + return int(ev.Exit.Process.PIDContext.Tid), nil case "exit.tty_name": - return e.Exit.Process.TTYName, nil + return ev.Exit.Process.TTYName, nil case "exit.uid": - return int(e.Exit.Process.Credentials.UID), nil + return int(ev.Exit.Process.Credentials.UID), nil case "exit.user": - return e.Exit.Process.Credentials.User, nil + return ev.Exit.Process.Credentials.User, nil case "link.file.change_time": - return int(e.Link.Source.FileFields.CTime), nil + return int(ev.Link.Source.FileFields.CTime), nil case "link.file.destination.change_time": - return int(e.Link.Target.FileFields.CTime), nil + return int(ev.Link.Target.FileFields.CTime), nil case "link.file.destination.filesystem": - return e.Link.Target.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Link.Target), nil case "link.file.destination.gid": - return int(e.Link.Target.FileFields.GID), nil + return int(ev.Link.Target.FileFields.GID), nil case "link.file.destination.group": - return e.Link.Target.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Link.Target.FileFields), nil case "link.file.destination.in_upper_layer": - return e.Link.Target.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Link.Target.FileFields), nil case "link.file.destination.inode": - return int(e.Link.Target.FileFields.Inode), nil + return int(ev.Link.Target.FileFields.Inode), nil case "link.file.destination.mode": - return int(e.Link.Target.FileFields.Mode), nil + return int(ev.Link.Target.FileFields.Mode), nil case "link.file.destination.modification_time": - return int(e.Link.Target.FileFields.MTime), nil + return int(ev.Link.Target.FileFields.MTime), nil case "link.file.destination.mount_id": - return int(e.Link.Target.FileFields.MountID), nil + return int(ev.Link.Target.FileFields.MountID), nil case "link.file.destination.name": - return e.Link.Target.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Target), nil case "link.file.destination.name.length": - return len(e.Link.Target.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Target), nil case "link.file.destination.path": - return e.Link.Target.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Target), nil case "link.file.destination.path.length": - return len(e.Link.Target.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Target), nil case "link.file.destination.rights": - return int(e.Link.Target.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Link.Target.FileFields)), nil case "link.file.destination.uid": - return int(e.Link.Target.FileFields.UID), nil + return int(ev.Link.Target.FileFields.UID), nil case "link.file.destination.user": - return e.Link.Target.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Link.Target.FileFields), nil case "link.file.filesystem": - return e.Link.Source.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Link.Source), nil case "link.file.gid": - return int(e.Link.Source.FileFields.GID), nil + return int(ev.Link.Source.FileFields.GID), nil case "link.file.group": - return e.Link.Source.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Link.Source.FileFields), nil case "link.file.in_upper_layer": - return e.Link.Source.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Link.Source.FileFields), nil case "link.file.inode": - return int(e.Link.Source.FileFields.Inode), nil + return int(ev.Link.Source.FileFields.Inode), nil case "link.file.mode": - return int(e.Link.Source.FileFields.Mode), nil + return int(ev.Link.Source.FileFields.Mode), nil case "link.file.modification_time": - return int(e.Link.Source.FileFields.MTime), nil + return int(ev.Link.Source.FileFields.MTime), nil case "link.file.mount_id": - return int(e.Link.Source.FileFields.MountID), nil + return int(ev.Link.Source.FileFields.MountID), nil case "link.file.name": - return e.Link.Source.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Source), nil case "link.file.name.length": - return len(e.Link.Source.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Source), nil case "link.file.path": - return e.Link.Source.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Source), nil case "link.file.path.length": - return len(e.Link.Source.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Source), nil case "link.file.rights": - return int(e.Link.Source.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Link.Source.FileFields)), nil case "link.file.uid": - return int(e.Link.Source.FileFields.UID), nil + return int(ev.Link.Source.FileFields.UID), nil case "link.file.user": - return e.Link.Source.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Link.Source.FileFields), nil case "link.retval": - return int(e.Link.SyscallEvent.Retval), nil + return int(ev.Link.SyscallEvent.Retval), nil case "load_module.file.change_time": - return int(e.LoadModule.File.FileFields.CTime), nil + return int(ev.LoadModule.File.FileFields.CTime), nil case "load_module.file.filesystem": - return e.LoadModule.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.LoadModule.File), nil case "load_module.file.gid": - return int(e.LoadModule.File.FileFields.GID), nil + return int(ev.LoadModule.File.FileFields.GID), nil case "load_module.file.group": - return e.LoadModule.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.LoadModule.File.FileFields), nil case "load_module.file.in_upper_layer": - return e.LoadModule.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.LoadModule.File.FileFields), nil case "load_module.file.inode": - return int(e.LoadModule.File.FileFields.Inode), nil + return int(ev.LoadModule.File.FileFields.Inode), nil case "load_module.file.mode": - return int(e.LoadModule.File.FileFields.Mode), nil + return int(ev.LoadModule.File.FileFields.Mode), nil case "load_module.file.modification_time": - return int(e.LoadModule.File.FileFields.MTime), nil + return int(ev.LoadModule.File.FileFields.MTime), nil case "load_module.file.mount_id": - return int(e.LoadModule.File.FileFields.MountID), nil + return int(ev.LoadModule.File.FileFields.MountID), nil case "load_module.file.name": - return e.LoadModule.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.LoadModule.File), nil case "load_module.file.name.length": - return len(e.LoadModule.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.LoadModule.File), nil case "load_module.file.path": - return e.LoadModule.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.LoadModule.File), nil case "load_module.file.path.length": - return len(e.LoadModule.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.LoadModule.File), nil case "load_module.file.rights": - return int(e.LoadModule.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.LoadModule.File.FileFields)), nil case "load_module.file.uid": - return int(e.LoadModule.File.FileFields.UID), nil + return int(ev.LoadModule.File.FileFields.UID), nil case "load_module.file.user": - return e.LoadModule.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.LoadModule.File.FileFields), nil case "load_module.loaded_from_memory": - return e.LoadModule.LoadedFromMemory, nil + return ev.LoadModule.LoadedFromMemory, nil case "load_module.name": - return e.LoadModule.Name, nil + return ev.LoadModule.Name, nil case "load_module.retval": - return int(e.LoadModule.SyscallEvent.Retval), nil + return int(ev.LoadModule.SyscallEvent.Retval), nil case "mkdir.file.change_time": - return int(e.Mkdir.File.FileFields.CTime), nil + return int(ev.Mkdir.File.FileFields.CTime), nil case "mkdir.file.destination.mode": - return int(e.Mkdir.Mode), nil + return int(ev.Mkdir.Mode), nil case "mkdir.file.destination.rights": - return int(e.Mkdir.Mode), nil + return int(ev.Mkdir.Mode), nil case "mkdir.file.filesystem": - return e.Mkdir.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Mkdir.File), nil case "mkdir.file.gid": - return int(e.Mkdir.File.FileFields.GID), nil + return int(ev.Mkdir.File.FileFields.GID), nil case "mkdir.file.group": - return e.Mkdir.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Mkdir.File.FileFields), nil case "mkdir.file.in_upper_layer": - return e.Mkdir.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Mkdir.File.FileFields), nil case "mkdir.file.inode": - return int(e.Mkdir.File.FileFields.Inode), nil + return int(ev.Mkdir.File.FileFields.Inode), nil case "mkdir.file.mode": - return int(e.Mkdir.File.FileFields.Mode), nil + return int(ev.Mkdir.File.FileFields.Mode), nil case "mkdir.file.modification_time": - return int(e.Mkdir.File.FileFields.MTime), nil + return int(ev.Mkdir.File.FileFields.MTime), nil case "mkdir.file.mount_id": - return int(e.Mkdir.File.FileFields.MountID), nil + return int(ev.Mkdir.File.FileFields.MountID), nil case "mkdir.file.name": - return e.Mkdir.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Mkdir.File), nil case "mkdir.file.name.length": - return len(e.Mkdir.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Mkdir.File), nil case "mkdir.file.path": - return e.Mkdir.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Mkdir.File), nil case "mkdir.file.path.length": - return len(e.Mkdir.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Mkdir.File), nil case "mkdir.file.rights": - return int(e.Mkdir.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Mkdir.File.FileFields)), nil case "mkdir.file.uid": - return int(e.Mkdir.File.FileFields.UID), nil + return int(ev.Mkdir.File.FileFields.UID), nil case "mkdir.file.user": - return e.Mkdir.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Mkdir.File.FileFields), nil case "mkdir.retval": - return int(e.Mkdir.SyscallEvent.Retval), nil + return int(ev.Mkdir.SyscallEvent.Retval), nil case "mmap.file.change_time": - return int(e.MMap.File.FileFields.CTime), nil + return int(ev.MMap.File.FileFields.CTime), nil case "mmap.file.filesystem": - return e.MMap.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.MMap.File), nil case "mmap.file.gid": - return int(e.MMap.File.FileFields.GID), nil + return int(ev.MMap.File.FileFields.GID), nil case "mmap.file.group": - return e.MMap.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.MMap.File.FileFields), nil case "mmap.file.in_upper_layer": - return e.MMap.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.MMap.File.FileFields), nil case "mmap.file.inode": - return int(e.MMap.File.FileFields.Inode), nil + return int(ev.MMap.File.FileFields.Inode), nil case "mmap.file.mode": - return int(e.MMap.File.FileFields.Mode), nil + return int(ev.MMap.File.FileFields.Mode), nil case "mmap.file.modification_time": - return int(e.MMap.File.FileFields.MTime), nil + return int(ev.MMap.File.FileFields.MTime), nil case "mmap.file.mount_id": - return int(e.MMap.File.FileFields.MountID), nil + return int(ev.MMap.File.FileFields.MountID), nil case "mmap.file.name": - return e.MMap.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.MMap.File), nil case "mmap.file.name.length": - return len(e.MMap.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.MMap.File), nil case "mmap.file.path": - return e.MMap.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.MMap.File), nil case "mmap.file.path.length": - return len(e.MMap.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.MMap.File), nil case "mmap.file.rights": - return int(e.MMap.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.MMap.File.FileFields)), nil case "mmap.file.uid": - return int(e.MMap.File.FileFields.UID), nil + return int(ev.MMap.File.FileFields.UID), nil case "mmap.file.user": - return e.MMap.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.MMap.File.FileFields), nil case "mmap.flags": - return e.MMap.Flags, nil + return ev.MMap.Flags, nil case "mmap.protection": - return e.MMap.Protection, nil + return ev.MMap.Protection, nil case "mmap.retval": - return int(e.MMap.SyscallEvent.Retval), nil + return int(ev.MMap.SyscallEvent.Retval), nil case "mount.fs_type": - return e.Mount.Mount.FSType, nil + return ev.Mount.Mount.FSType, nil case "mount.mountpoint.path": - return e.Mount.MountPointPath, nil + return ev.FieldHandlers.ResolveMountPointPath(ev, &ev.Mount), nil case "mount.retval": - return int(e.Mount.SyscallEvent.Retval), nil + return int(ev.Mount.SyscallEvent.Retval), nil case "mount.source.path": - return e.Mount.MountSourcePath, nil + return ev.FieldHandlers.ResolveMountSourcePath(ev, &ev.Mount), nil case "mprotect.req_protection": - return e.MProtect.ReqProtection, nil + return ev.MProtect.ReqProtection, nil case "mprotect.retval": - return int(e.MProtect.SyscallEvent.Retval), nil + return int(ev.MProtect.SyscallEvent.Retval), nil case "mprotect.vm_protection": - return e.MProtect.VMProtection, nil + return ev.MProtect.VMProtection, nil case "network.destination.ip": - return e.NetworkContext.Destination.IPNet, nil + return ev.NetworkContext.Destination.IPNet, nil case "network.destination.port": - return int(e.NetworkContext.Destination.Port), nil + return int(ev.NetworkContext.Destination.Port), nil case "network.device.ifindex": - return int(e.NetworkContext.Device.IfIndex), nil + return int(ev.NetworkContext.Device.IfIndex), nil case "network.device.ifname": - return e.NetworkContext.Device.IfName, nil + return ev.FieldHandlers.ResolveNetworkDeviceIfName(ev, &ev.NetworkContext.Device), nil case "network.l3_protocol": - return int(e.NetworkContext.L3Protocol), nil + return int(ev.NetworkContext.L3Protocol), nil case "network.l4_protocol": - return int(e.NetworkContext.L4Protocol), nil + return int(ev.NetworkContext.L4Protocol), nil case "network.size": - return int(e.NetworkContext.Size), nil + return int(ev.NetworkContext.Size), nil case "network.source.ip": - return e.NetworkContext.Source.IPNet, nil + return ev.NetworkContext.Source.IPNet, nil case "network.source.port": - return int(e.NetworkContext.Source.Port), nil + return int(ev.NetworkContext.Source.Port), nil case "open.file.change_time": - return int(e.Open.File.FileFields.CTime), nil + return int(ev.Open.File.FileFields.CTime), nil case "open.file.destination.mode": - return int(e.Open.Mode), nil + return int(ev.Open.Mode), nil case "open.file.filesystem": - return e.Open.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Open.File), nil case "open.file.gid": - return int(e.Open.File.FileFields.GID), nil + return int(ev.Open.File.FileFields.GID), nil case "open.file.group": - return e.Open.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Open.File.FileFields), nil case "open.file.in_upper_layer": - return e.Open.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Open.File.FileFields), nil case "open.file.inode": - return int(e.Open.File.FileFields.Inode), nil + return int(ev.Open.File.FileFields.Inode), nil case "open.file.mode": - return int(e.Open.File.FileFields.Mode), nil + return int(ev.Open.File.FileFields.Mode), nil case "open.file.modification_time": - return int(e.Open.File.FileFields.MTime), nil + return int(ev.Open.File.FileFields.MTime), nil case "open.file.mount_id": - return int(e.Open.File.FileFields.MountID), nil + return int(ev.Open.File.FileFields.MountID), nil case "open.file.name": - return e.Open.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Open.File), nil case "open.file.name.length": - return len(e.Open.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Open.File), nil case "open.file.path": - return e.Open.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Open.File), nil case "open.file.path.length": - return len(e.Open.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Open.File), nil case "open.file.rights": - return int(e.Open.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Open.File.FileFields)), nil case "open.file.uid": - return int(e.Open.File.FileFields.UID), nil + return int(ev.Open.File.FileFields.UID), nil case "open.file.user": - return e.Open.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Open.File.FileFields), nil case "open.flags": - return int(e.Open.Flags), nil + return int(ev.Open.Flags), nil case "open.retval": - return int(e.Open.SyscallEvent.Retval), nil + return int(ev.Open.SyscallEvent.Retval), nil case "process.ancestors.args": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Args + result := ev.FieldHandlers.ResolveProcessArgs(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.args_flags": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsFlags(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "process.ancestors.args_options": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsOptions(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "process.ancestors.args_truncated": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.ArgsTruncated + result := ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.argv": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgv(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "process.ancestors.argv0": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv0 + result := ev.FieldHandlers.ResolveProcessArgv0(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.cap_effective": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13808,7 +15543,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.cap_permitted": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13820,7 +15555,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.comm": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13832,7 +15567,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.container.id": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13844,7 +15579,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.cookie": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13856,19 +15591,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.created_at": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.CreatedAt) + result := int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &element.ProcessContext.Process)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.egid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13880,7 +15615,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.egroup": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13892,43 +15627,43 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.envp": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Envp + result := ev.FieldHandlers.ResolveProcessEnvp(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "process.ancestors.envs": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Envs + result := ev.FieldHandlers.ResolveProcessEnvs(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "process.ancestors.envs_truncated": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.EnvsTruncated + result := ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.euid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13940,7 +15675,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.euser": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13952,7 +15687,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.change_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13964,19 +15699,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.filesystem": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -13988,31 +15723,31 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.in_upper_layer": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.inode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14024,7 +15759,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.mode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14036,7 +15771,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.modification_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14048,7 +15783,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.mount_id": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14060,67 +15795,67 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.name.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.path": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.path.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.rights": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.FileEvent.FileFields)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.file.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14132,19 +15867,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.file.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.fsgid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14156,7 +15891,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.fsgroup": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14168,7 +15903,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.fsuid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14180,7 +15915,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.fsuser": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14192,7 +15927,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14204,7 +15939,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14216,7 +15951,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.change_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14228,19 +15963,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.filesystem": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14252,31 +15987,31 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.in_upper_layer": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.inode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14288,7 +16023,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.mode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14300,7 +16035,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.modification_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14312,7 +16047,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.mount_id": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14324,67 +16059,67 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.name.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.path": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.path.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.rights": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.interpreter.file.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14396,19 +16131,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.interpreter.file.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "process.ancestors.is_kworker": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14420,7 +16155,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.is_thread": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14432,7 +16167,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.pid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14444,7 +16179,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.ppid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14456,7 +16191,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.tid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14468,7 +16203,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.tty_name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14480,7 +16215,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14492,7 +16227,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "process.ancestors.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14503,344 +16238,344 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { } return values, nil case "process.args": - return e.ProcessContext.Process.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, &ev.ProcessContext.Process), nil case "process.args_flags": - return e.ProcessContext.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, &ev.ProcessContext.Process), nil case "process.args_options": - return e.ProcessContext.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, &ev.ProcessContext.Process), nil case "process.args_truncated": - return e.ProcessContext.Process.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.ProcessContext.Process), nil case "process.argv": - return e.ProcessContext.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, &ev.ProcessContext.Process), nil case "process.argv0": - return e.ProcessContext.Process.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.ProcessContext.Process), nil case "process.cap_effective": - return int(e.ProcessContext.Process.Credentials.CapEffective), nil + return int(ev.ProcessContext.Process.Credentials.CapEffective), nil case "process.cap_permitted": - return int(e.ProcessContext.Process.Credentials.CapPermitted), nil + return int(ev.ProcessContext.Process.Credentials.CapPermitted), nil case "process.comm": - return e.ProcessContext.Process.Comm, nil + return ev.ProcessContext.Process.Comm, nil case "process.container.id": - return e.ProcessContext.Process.ContainerID, nil + return ev.ProcessContext.Process.ContainerID, nil case "process.cookie": - return int(e.ProcessContext.Process.Cookie), nil + return int(ev.ProcessContext.Process.Cookie), nil case "process.created_at": - return int(e.ProcessContext.Process.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.ProcessContext.Process)), nil case "process.egid": - return int(e.ProcessContext.Process.Credentials.EGID), nil + return int(ev.ProcessContext.Process.Credentials.EGID), nil case "process.egroup": - return e.ProcessContext.Process.Credentials.EGroup, nil + return ev.ProcessContext.Process.Credentials.EGroup, nil case "process.envp": - return e.ProcessContext.Process.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.ProcessContext.Process), nil case "process.envs": - return e.ProcessContext.Process.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.ProcessContext.Process), nil case "process.envs_truncated": - return e.ProcessContext.Process.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.ProcessContext.Process), nil case "process.euid": - return int(e.ProcessContext.Process.Credentials.EUID), nil + return int(ev.ProcessContext.Process.Credentials.EUID), nil case "process.euser": - return e.ProcessContext.Process.Credentials.EUser, nil + return ev.ProcessContext.Process.Credentials.EUser, nil case "process.file.change_time": - return int(e.ProcessContext.Process.FileEvent.FileFields.CTime), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.CTime), nil case "process.file.filesystem": - return e.ProcessContext.Process.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Process.FileEvent), nil case "process.file.gid": - return int(e.ProcessContext.Process.FileEvent.FileFields.GID), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.GID), nil case "process.file.group": - return e.ProcessContext.Process.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Process.FileEvent.FileFields), nil case "process.file.in_upper_layer": - return e.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Process.FileEvent.FileFields), nil case "process.file.inode": - return int(e.ProcessContext.Process.FileEvent.FileFields.Inode), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.Inode), nil case "process.file.mode": - return int(e.ProcessContext.Process.FileEvent.FileFields.Mode), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.Mode), nil case "process.file.modification_time": - return int(e.ProcessContext.Process.FileEvent.FileFields.MTime), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.MTime), nil case "process.file.mount_id": - return int(e.ProcessContext.Process.FileEvent.FileFields.MountID), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.MountID), nil case "process.file.name": - return e.ProcessContext.Process.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.FileEvent), nil case "process.file.name.length": - return len(e.ProcessContext.Process.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.FileEvent), nil case "process.file.path": - return e.ProcessContext.Process.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.FileEvent), nil case "process.file.path.length": - return len(e.ProcessContext.Process.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.FileEvent), nil case "process.file.rights": - return int(e.ProcessContext.Process.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Process.FileEvent.FileFields)), nil case "process.file.uid": - return int(e.ProcessContext.Process.FileEvent.FileFields.UID), nil + return int(ev.ProcessContext.Process.FileEvent.FileFields.UID), nil case "process.file.user": - return e.ProcessContext.Process.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Process.FileEvent.FileFields), nil case "process.fsgid": - return int(e.ProcessContext.Process.Credentials.FSGID), nil + return int(ev.ProcessContext.Process.Credentials.FSGID), nil case "process.fsgroup": - return e.ProcessContext.Process.Credentials.FSGroup, nil + return ev.ProcessContext.Process.Credentials.FSGroup, nil case "process.fsuid": - return int(e.ProcessContext.Process.Credentials.FSUID), nil + return int(ev.ProcessContext.Process.Credentials.FSUID), nil case "process.fsuser": - return e.ProcessContext.Process.Credentials.FSUser, nil + return ev.ProcessContext.Process.Credentials.FSUser, nil case "process.gid": - return int(e.ProcessContext.Process.Credentials.GID), nil + return int(ev.ProcessContext.Process.Credentials.GID), nil case "process.group": - return e.ProcessContext.Process.Credentials.Group, nil + return ev.ProcessContext.Process.Credentials.Group, nil case "process.interpreter.file.change_time": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil case "process.interpreter.file.filesystem": - return e.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent), nil case "process.interpreter.file.gid": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID), nil case "process.interpreter.file.group": - return e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields), nil case "process.interpreter.file.in_upper_layer": - return e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields), nil case "process.interpreter.file.inode": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil case "process.interpreter.file.mode": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil case "process.interpreter.file.modification_time": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil case "process.interpreter.file.mount_id": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil case "process.interpreter.file.name": - return e.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent), nil case "process.interpreter.file.name.length": - return len(e.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent), nil case "process.interpreter.file.path": - return e.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent), nil case "process.interpreter.file.path.length": - return len(e.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent), nil case "process.interpreter.file.rights": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)), nil case "process.interpreter.file.uid": - return int(e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID), nil case "process.interpreter.file.user": - return e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields), nil case "process.is_kworker": - return e.ProcessContext.Process.PIDContext.IsKworker, nil + return ev.ProcessContext.Process.PIDContext.IsKworker, nil case "process.is_thread": - return e.ProcessContext.Process.IsThread, nil + return ev.ProcessContext.Process.IsThread, nil case "process.parent.args": - return e.ProcessContext.Parent.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.ProcessContext.Parent), nil case "process.parent.args_flags": - return e.ProcessContext.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.ProcessContext.Parent), nil case "process.parent.args_options": - return e.ProcessContext.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.ProcessContext.Parent), nil case "process.parent.args_truncated": - return e.ProcessContext.Parent.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.ProcessContext.Parent), nil case "process.parent.argv": - return e.ProcessContext.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.ProcessContext.Parent), nil case "process.parent.argv0": - return e.ProcessContext.Parent.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.ProcessContext.Parent), nil case "process.parent.cap_effective": - return int(e.ProcessContext.Parent.Credentials.CapEffective), nil + return int(ev.ProcessContext.Parent.Credentials.CapEffective), nil case "process.parent.cap_permitted": - return int(e.ProcessContext.Parent.Credentials.CapPermitted), nil + return int(ev.ProcessContext.Parent.Credentials.CapPermitted), nil case "process.parent.comm": - return e.ProcessContext.Parent.Comm, nil + return ev.ProcessContext.Parent.Comm, nil case "process.parent.container.id": - return e.ProcessContext.Parent.ContainerID, nil + return ev.ProcessContext.Parent.ContainerID, nil case "process.parent.cookie": - return int(e.ProcessContext.Parent.Cookie), nil + return int(ev.ProcessContext.Parent.Cookie), nil case "process.parent.created_at": - return int(e.ProcessContext.Parent.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.ProcessContext.Parent)), nil case "process.parent.egid": - return int(e.ProcessContext.Parent.Credentials.EGID), nil + return int(ev.ProcessContext.Parent.Credentials.EGID), nil case "process.parent.egroup": - return e.ProcessContext.Parent.Credentials.EGroup, nil + return ev.ProcessContext.Parent.Credentials.EGroup, nil case "process.parent.envp": - return e.ProcessContext.Parent.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.ProcessContext.Parent), nil case "process.parent.envs": - return e.ProcessContext.Parent.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.ProcessContext.Parent), nil case "process.parent.envs_truncated": - return e.ProcessContext.Parent.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.ProcessContext.Parent), nil case "process.parent.euid": - return int(e.ProcessContext.Parent.Credentials.EUID), nil + return int(ev.ProcessContext.Parent.Credentials.EUID), nil case "process.parent.euser": - return e.ProcessContext.Parent.Credentials.EUser, nil + return ev.ProcessContext.Parent.Credentials.EUser, nil case "process.parent.file.change_time": - return int(e.ProcessContext.Parent.FileEvent.FileFields.CTime), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.CTime), nil case "process.parent.file.filesystem": - return e.ProcessContext.Parent.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Parent.FileEvent), nil case "process.parent.file.gid": - return int(e.ProcessContext.Parent.FileEvent.FileFields.GID), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.GID), nil case "process.parent.file.group": - return e.ProcessContext.Parent.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Parent.FileEvent.FileFields), nil case "process.parent.file.in_upper_layer": - return e.ProcessContext.Parent.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Parent.FileEvent.FileFields), nil case "process.parent.file.inode": - return int(e.ProcessContext.Parent.FileEvent.FileFields.Inode), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.Inode), nil case "process.parent.file.mode": - return int(e.ProcessContext.Parent.FileEvent.FileFields.Mode), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.Mode), nil case "process.parent.file.modification_time": - return int(e.ProcessContext.Parent.FileEvent.FileFields.MTime), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.MTime), nil case "process.parent.file.mount_id": - return int(e.ProcessContext.Parent.FileEvent.FileFields.MountID), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.MountID), nil case "process.parent.file.name": - return e.ProcessContext.Parent.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.FileEvent), nil case "process.parent.file.name.length": - return len(e.ProcessContext.Parent.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.FileEvent), nil case "process.parent.file.path": - return e.ProcessContext.Parent.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.FileEvent), nil case "process.parent.file.path.length": - return len(e.ProcessContext.Parent.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.FileEvent), nil case "process.parent.file.rights": - return int(e.ProcessContext.Parent.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Parent.FileEvent.FileFields)), nil case "process.parent.file.uid": - return int(e.ProcessContext.Parent.FileEvent.FileFields.UID), nil + return int(ev.ProcessContext.Parent.FileEvent.FileFields.UID), nil case "process.parent.file.user": - return e.ProcessContext.Parent.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Parent.FileEvent.FileFields), nil case "process.parent.fsgid": - return int(e.ProcessContext.Parent.Credentials.FSGID), nil + return int(ev.ProcessContext.Parent.Credentials.FSGID), nil case "process.parent.fsgroup": - return e.ProcessContext.Parent.Credentials.FSGroup, nil + return ev.ProcessContext.Parent.Credentials.FSGroup, nil case "process.parent.fsuid": - return int(e.ProcessContext.Parent.Credentials.FSUID), nil + return int(ev.ProcessContext.Parent.Credentials.FSUID), nil case "process.parent.fsuser": - return e.ProcessContext.Parent.Credentials.FSUser, nil + return ev.ProcessContext.Parent.Credentials.FSUser, nil case "process.parent.gid": - return int(e.ProcessContext.Parent.Credentials.GID), nil + return int(ev.ProcessContext.Parent.Credentials.GID), nil case "process.parent.group": - return e.ProcessContext.Parent.Credentials.Group, nil + return ev.ProcessContext.Parent.Credentials.Group, nil case "process.parent.interpreter.file.change_time": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil case "process.parent.interpreter.file.filesystem": - return e.ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent), nil case "process.parent.interpreter.file.gid": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil case "process.parent.interpreter.file.group": - return e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields), nil case "process.parent.interpreter.file.in_upper_layer": - return e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields), nil case "process.parent.interpreter.file.inode": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil case "process.parent.interpreter.file.mode": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil case "process.parent.interpreter.file.modification_time": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil case "process.parent.interpreter.file.mount_id": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil case "process.parent.interpreter.file.name": - return e.ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent), nil case "process.parent.interpreter.file.name.length": - return len(e.ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent), nil case "process.parent.interpreter.file.path": - return e.ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent), nil case "process.parent.interpreter.file.path.length": - return len(e.ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent), nil case "process.parent.interpreter.file.rights": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields)), nil case "process.parent.interpreter.file.uid": - return int(e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil case "process.parent.interpreter.file.user": - return e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields), nil case "process.parent.is_kworker": - return e.ProcessContext.Parent.PIDContext.IsKworker, nil + return ev.ProcessContext.Parent.PIDContext.IsKworker, nil case "process.parent.is_thread": - return e.ProcessContext.Parent.IsThread, nil + return ev.ProcessContext.Parent.IsThread, nil case "process.parent.pid": - return int(e.ProcessContext.Parent.PIDContext.Pid), nil + return int(ev.ProcessContext.Parent.PIDContext.Pid), nil case "process.parent.ppid": - return int(e.ProcessContext.Parent.PPid), nil + return int(ev.ProcessContext.Parent.PPid), nil case "process.parent.tid": - return int(e.ProcessContext.Parent.PIDContext.Tid), nil + return int(ev.ProcessContext.Parent.PIDContext.Tid), nil case "process.parent.tty_name": - return e.ProcessContext.Parent.TTYName, nil + return ev.ProcessContext.Parent.TTYName, nil case "process.parent.uid": - return int(e.ProcessContext.Parent.Credentials.UID), nil + return int(ev.ProcessContext.Parent.Credentials.UID), nil case "process.parent.user": - return e.ProcessContext.Parent.Credentials.User, nil + return ev.ProcessContext.Parent.Credentials.User, nil case "process.pid": - return int(e.ProcessContext.Process.PIDContext.Pid), nil + return int(ev.ProcessContext.Process.PIDContext.Pid), nil case "process.ppid": - return int(e.ProcessContext.Process.PPid), nil + return int(ev.ProcessContext.Process.PPid), nil case "process.tid": - return int(e.ProcessContext.Process.PIDContext.Tid), nil + return int(ev.ProcessContext.Process.PIDContext.Tid), nil case "process.tty_name": - return e.ProcessContext.Process.TTYName, nil + return ev.ProcessContext.Process.TTYName, nil case "process.uid": - return int(e.ProcessContext.Process.Credentials.UID), nil + return int(ev.ProcessContext.Process.Credentials.UID), nil case "process.user": - return e.ProcessContext.Process.Credentials.User, nil + return ev.ProcessContext.Process.Credentials.User, nil case "ptrace.request": - return int(e.PTrace.Request), nil + return int(ev.PTrace.Request), nil case "ptrace.retval": - return int(e.PTrace.SyscallEvent.Retval), nil + return int(ev.PTrace.SyscallEvent.Retval), nil case "ptrace.tracee.ancestors.args": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Args + result := ev.FieldHandlers.ResolveProcessArgs(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.args_flags": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsFlags(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.args_options": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsOptions(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.args_truncated": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.ArgsTruncated + result := ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.argv": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgv(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.argv0": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv0 + result := ev.FieldHandlers.ResolveProcessArgv0(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.cap_effective": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14852,7 +16587,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.cap_permitted": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14864,7 +16599,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.comm": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14876,7 +16611,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.container.id": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14888,7 +16623,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.cookie": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14900,19 +16635,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.created_at": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.CreatedAt) + result := int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &element.ProcessContext.Process)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.egid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14924,7 +16659,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.egroup": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14936,43 +16671,43 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.envp": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Envp + result := ev.FieldHandlers.ResolveProcessEnvp(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.envs": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Envs + result := ev.FieldHandlers.ResolveProcessEnvs(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.envs_truncated": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.EnvsTruncated + result := ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.euid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14984,7 +16719,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.euser": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -14996,7 +16731,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.change_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15008,19 +16743,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.filesystem": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15032,31 +16767,31 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.in_upper_layer": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.inode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15068,7 +16803,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.mode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15080,7 +16815,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.modification_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15092,7 +16827,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.mount_id": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15104,67 +16839,67 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.name.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.path": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.path.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.rights": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.FileEvent.FileFields)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.file.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15176,19 +16911,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.file.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.fsgid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15200,7 +16935,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.fsgroup": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15212,7 +16947,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.fsuid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15224,7 +16959,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.fsuser": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15236,7 +16971,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15248,7 +16983,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15260,7 +16995,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.change_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15272,19 +17007,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.filesystem": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15296,31 +17031,31 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.inode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15332,7 +17067,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.mode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15344,7 +17079,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.modification_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15356,7 +17091,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.mount_id": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15368,67 +17103,67 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.name.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.path": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.path.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.rights": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.interpreter.file.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15440,19 +17175,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.interpreter.file.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "ptrace.tracee.ancestors.is_kworker": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15464,7 +17199,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.is_thread": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15476,7 +17211,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.pid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15488,7 +17223,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.ppid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15500,7 +17235,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.tid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15512,7 +17247,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.tty_name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15524,7 +17259,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15536,7 +17271,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "ptrace.tracee.ancestors.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -15547,552 +17282,552 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { } return values, nil case "ptrace.tracee.args": - return e.PTrace.Tracee.Process.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.args_flags": - return e.PTrace.Tracee.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.args_options": - return e.PTrace.Tracee.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.args_truncated": - return e.PTrace.Tracee.Process.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.argv": - return e.PTrace.Tracee.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.argv0": - return e.PTrace.Tracee.Process.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.cap_effective": - return int(e.PTrace.Tracee.Process.Credentials.CapEffective), nil + return int(ev.PTrace.Tracee.Process.Credentials.CapEffective), nil case "ptrace.tracee.cap_permitted": - return int(e.PTrace.Tracee.Process.Credentials.CapPermitted), nil + return int(ev.PTrace.Tracee.Process.Credentials.CapPermitted), nil case "ptrace.tracee.comm": - return e.PTrace.Tracee.Process.Comm, nil + return ev.PTrace.Tracee.Process.Comm, nil case "ptrace.tracee.container.id": - return e.PTrace.Tracee.Process.ContainerID, nil + return ev.PTrace.Tracee.Process.ContainerID, nil case "ptrace.tracee.cookie": - return int(e.PTrace.Tracee.Process.Cookie), nil + return int(ev.PTrace.Tracee.Process.Cookie), nil case "ptrace.tracee.created_at": - return int(e.PTrace.Tracee.Process.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.PTrace.Tracee.Process)), nil case "ptrace.tracee.egid": - return int(e.PTrace.Tracee.Process.Credentials.EGID), nil + return int(ev.PTrace.Tracee.Process.Credentials.EGID), nil case "ptrace.tracee.egroup": - return e.PTrace.Tracee.Process.Credentials.EGroup, nil + return ev.PTrace.Tracee.Process.Credentials.EGroup, nil case "ptrace.tracee.envp": - return e.PTrace.Tracee.Process.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.envs": - return e.PTrace.Tracee.Process.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.envs_truncated": - return e.PTrace.Tracee.Process.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.PTrace.Tracee.Process), nil case "ptrace.tracee.euid": - return int(e.PTrace.Tracee.Process.Credentials.EUID), nil + return int(ev.PTrace.Tracee.Process.Credentials.EUID), nil case "ptrace.tracee.euser": - return e.PTrace.Tracee.Process.Credentials.EUser, nil + return ev.PTrace.Tracee.Process.Credentials.EUser, nil case "ptrace.tracee.file.change_time": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.CTime), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.CTime), nil case "ptrace.tracee.file.filesystem": - return e.PTrace.Tracee.Process.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Process.FileEvent), nil case "ptrace.tracee.file.gid": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.GID), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.GID), nil case "ptrace.tracee.file.group": - return e.PTrace.Tracee.Process.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields), nil case "ptrace.tracee.file.in_upper_layer": - return e.PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields), nil case "ptrace.tracee.file.inode": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.Inode), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.Inode), nil case "ptrace.tracee.file.mode": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.Mode), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.Mode), nil case "ptrace.tracee.file.modification_time": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.MTime), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.MTime), nil case "ptrace.tracee.file.mount_id": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.MountID), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.MountID), nil case "ptrace.tracee.file.name": - return e.PTrace.Tracee.Process.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.FileEvent), nil case "ptrace.tracee.file.name.length": - return len(e.PTrace.Tracee.Process.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.FileEvent), nil case "ptrace.tracee.file.path": - return e.PTrace.Tracee.Process.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.FileEvent), nil case "ptrace.tracee.file.path.length": - return len(e.PTrace.Tracee.Process.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.FileEvent), nil case "ptrace.tracee.file.rights": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields)), nil case "ptrace.tracee.file.uid": - return int(e.PTrace.Tracee.Process.FileEvent.FileFields.UID), nil + return int(ev.PTrace.Tracee.Process.FileEvent.FileFields.UID), nil case "ptrace.tracee.file.user": - return e.PTrace.Tracee.Process.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields), nil case "ptrace.tracee.fsgid": - return int(e.PTrace.Tracee.Process.Credentials.FSGID), nil + return int(ev.PTrace.Tracee.Process.Credentials.FSGID), nil case "ptrace.tracee.fsgroup": - return e.PTrace.Tracee.Process.Credentials.FSGroup, nil + return ev.PTrace.Tracee.Process.Credentials.FSGroup, nil case "ptrace.tracee.fsuid": - return int(e.PTrace.Tracee.Process.Credentials.FSUID), nil + return int(ev.PTrace.Tracee.Process.Credentials.FSUID), nil case "ptrace.tracee.fsuser": - return e.PTrace.Tracee.Process.Credentials.FSUser, nil + return ev.PTrace.Tracee.Process.Credentials.FSUser, nil case "ptrace.tracee.gid": - return int(e.PTrace.Tracee.Process.Credentials.GID), nil + return int(ev.PTrace.Tracee.Process.Credentials.GID), nil case "ptrace.tracee.group": - return e.PTrace.Tracee.Process.Credentials.Group, nil + return ev.PTrace.Tracee.Process.Credentials.Group, nil case "ptrace.tracee.interpreter.file.change_time": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil case "ptrace.tracee.interpreter.file.filesystem": - return e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil case "ptrace.tracee.interpreter.file.gid": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID), nil case "ptrace.tracee.interpreter.file.group": - return e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields), nil case "ptrace.tracee.interpreter.file.in_upper_layer": - return e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields), nil case "ptrace.tracee.interpreter.file.inode": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil case "ptrace.tracee.interpreter.file.mode": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil case "ptrace.tracee.interpreter.file.modification_time": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil case "ptrace.tracee.interpreter.file.mount_id": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil case "ptrace.tracee.interpreter.file.name": - return e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil case "ptrace.tracee.interpreter.file.name.length": - return len(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil case "ptrace.tracee.interpreter.file.path": - return e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil case "ptrace.tracee.interpreter.file.path.length": - return len(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent), nil case "ptrace.tracee.interpreter.file.rights": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields)), nil case "ptrace.tracee.interpreter.file.uid": - return int(e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID), nil case "ptrace.tracee.interpreter.file.user": - return e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields), nil case "ptrace.tracee.is_kworker": - return e.PTrace.Tracee.Process.PIDContext.IsKworker, nil + return ev.PTrace.Tracee.Process.PIDContext.IsKworker, nil case "ptrace.tracee.is_thread": - return e.PTrace.Tracee.Process.IsThread, nil + return ev.PTrace.Tracee.Process.IsThread, nil case "ptrace.tracee.parent.args": - return e.PTrace.Tracee.Parent.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.args_flags": - return e.PTrace.Tracee.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.args_options": - return e.PTrace.Tracee.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.args_truncated": - return e.PTrace.Tracee.Parent.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.argv": - return e.PTrace.Tracee.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.argv0": - return e.PTrace.Tracee.Parent.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.cap_effective": - return int(e.PTrace.Tracee.Parent.Credentials.CapEffective), nil + return int(ev.PTrace.Tracee.Parent.Credentials.CapEffective), nil case "ptrace.tracee.parent.cap_permitted": - return int(e.PTrace.Tracee.Parent.Credentials.CapPermitted), nil + return int(ev.PTrace.Tracee.Parent.Credentials.CapPermitted), nil case "ptrace.tracee.parent.comm": - return e.PTrace.Tracee.Parent.Comm, nil + return ev.PTrace.Tracee.Parent.Comm, nil case "ptrace.tracee.parent.container.id": - return e.PTrace.Tracee.Parent.ContainerID, nil + return ev.PTrace.Tracee.Parent.ContainerID, nil case "ptrace.tracee.parent.cookie": - return int(e.PTrace.Tracee.Parent.Cookie), nil + return int(ev.PTrace.Tracee.Parent.Cookie), nil case "ptrace.tracee.parent.created_at": - return int(e.PTrace.Tracee.Parent.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.PTrace.Tracee.Parent)), nil case "ptrace.tracee.parent.egid": - return int(e.PTrace.Tracee.Parent.Credentials.EGID), nil + return int(ev.PTrace.Tracee.Parent.Credentials.EGID), nil case "ptrace.tracee.parent.egroup": - return e.PTrace.Tracee.Parent.Credentials.EGroup, nil + return ev.PTrace.Tracee.Parent.Credentials.EGroup, nil case "ptrace.tracee.parent.envp": - return e.PTrace.Tracee.Parent.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.envs": - return e.PTrace.Tracee.Parent.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.envs_truncated": - return e.PTrace.Tracee.Parent.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.PTrace.Tracee.Parent), nil case "ptrace.tracee.parent.euid": - return int(e.PTrace.Tracee.Parent.Credentials.EUID), nil + return int(ev.PTrace.Tracee.Parent.Credentials.EUID), nil case "ptrace.tracee.parent.euser": - return e.PTrace.Tracee.Parent.Credentials.EUser, nil + return ev.PTrace.Tracee.Parent.Credentials.EUser, nil case "ptrace.tracee.parent.file.change_time": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.CTime), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.CTime), nil case "ptrace.tracee.parent.file.filesystem": - return e.PTrace.Tracee.Parent.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Parent.FileEvent), nil case "ptrace.tracee.parent.file.gid": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.GID), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.GID), nil case "ptrace.tracee.parent.file.group": - return e.PTrace.Tracee.Parent.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields), nil case "ptrace.tracee.parent.file.in_upper_layer": - return e.PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields), nil case "ptrace.tracee.parent.file.inode": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.Inode), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.Inode), nil case "ptrace.tracee.parent.file.mode": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.Mode), nil case "ptrace.tracee.parent.file.modification_time": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.MTime), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.MTime), nil case "ptrace.tracee.parent.file.mount_id": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.MountID), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.MountID), nil case "ptrace.tracee.parent.file.name": - return e.PTrace.Tracee.Parent.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.FileEvent), nil case "ptrace.tracee.parent.file.name.length": - return len(e.PTrace.Tracee.Parent.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.FileEvent), nil case "ptrace.tracee.parent.file.path": - return e.PTrace.Tracee.Parent.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.FileEvent), nil case "ptrace.tracee.parent.file.path.length": - return len(e.PTrace.Tracee.Parent.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.FileEvent), nil case "ptrace.tracee.parent.file.rights": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields)), nil case "ptrace.tracee.parent.file.uid": - return int(e.PTrace.Tracee.Parent.FileEvent.FileFields.UID), nil + return int(ev.PTrace.Tracee.Parent.FileEvent.FileFields.UID), nil case "ptrace.tracee.parent.file.user": - return e.PTrace.Tracee.Parent.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields), nil case "ptrace.tracee.parent.fsgid": - return int(e.PTrace.Tracee.Parent.Credentials.FSGID), nil + return int(ev.PTrace.Tracee.Parent.Credentials.FSGID), nil case "ptrace.tracee.parent.fsgroup": - return e.PTrace.Tracee.Parent.Credentials.FSGroup, nil + return ev.PTrace.Tracee.Parent.Credentials.FSGroup, nil case "ptrace.tracee.parent.fsuid": - return int(e.PTrace.Tracee.Parent.Credentials.FSUID), nil + return int(ev.PTrace.Tracee.Parent.Credentials.FSUID), nil case "ptrace.tracee.parent.fsuser": - return e.PTrace.Tracee.Parent.Credentials.FSUser, nil + return ev.PTrace.Tracee.Parent.Credentials.FSUser, nil case "ptrace.tracee.parent.gid": - return int(e.PTrace.Tracee.Parent.Credentials.GID), nil + return int(ev.PTrace.Tracee.Parent.Credentials.GID), nil case "ptrace.tracee.parent.group": - return e.PTrace.Tracee.Parent.Credentials.Group, nil + return ev.PTrace.Tracee.Parent.Credentials.Group, nil case "ptrace.tracee.parent.interpreter.file.change_time": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil case "ptrace.tracee.parent.interpreter.file.filesystem": - return e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil case "ptrace.tracee.parent.interpreter.file.gid": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil case "ptrace.tracee.parent.interpreter.file.group": - return e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields), nil case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - return e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields), nil case "ptrace.tracee.parent.interpreter.file.inode": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil case "ptrace.tracee.parent.interpreter.file.mode": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil case "ptrace.tracee.parent.interpreter.file.modification_time": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil case "ptrace.tracee.parent.interpreter.file.mount_id": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil case "ptrace.tracee.parent.interpreter.file.name": - return e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil case "ptrace.tracee.parent.interpreter.file.name.length": - return len(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil case "ptrace.tracee.parent.interpreter.file.path": - return e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil case "ptrace.tracee.parent.interpreter.file.path.length": - return len(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent), nil case "ptrace.tracee.parent.interpreter.file.rights": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields)), nil case "ptrace.tracee.parent.interpreter.file.uid": - return int(e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil case "ptrace.tracee.parent.interpreter.file.user": - return e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields), nil case "ptrace.tracee.parent.is_kworker": - return e.PTrace.Tracee.Parent.PIDContext.IsKworker, nil + return ev.PTrace.Tracee.Parent.PIDContext.IsKworker, nil case "ptrace.tracee.parent.is_thread": - return e.PTrace.Tracee.Parent.IsThread, nil + return ev.PTrace.Tracee.Parent.IsThread, nil case "ptrace.tracee.parent.pid": - return int(e.PTrace.Tracee.Parent.PIDContext.Pid), nil + return int(ev.PTrace.Tracee.Parent.PIDContext.Pid), nil case "ptrace.tracee.parent.ppid": - return int(e.PTrace.Tracee.Parent.PPid), nil + return int(ev.PTrace.Tracee.Parent.PPid), nil case "ptrace.tracee.parent.tid": - return int(e.PTrace.Tracee.Parent.PIDContext.Tid), nil + return int(ev.PTrace.Tracee.Parent.PIDContext.Tid), nil case "ptrace.tracee.parent.tty_name": - return e.PTrace.Tracee.Parent.TTYName, nil + return ev.PTrace.Tracee.Parent.TTYName, nil case "ptrace.tracee.parent.uid": - return int(e.PTrace.Tracee.Parent.Credentials.UID), nil + return int(ev.PTrace.Tracee.Parent.Credentials.UID), nil case "ptrace.tracee.parent.user": - return e.PTrace.Tracee.Parent.Credentials.User, nil + return ev.PTrace.Tracee.Parent.Credentials.User, nil case "ptrace.tracee.pid": - return int(e.PTrace.Tracee.Process.PIDContext.Pid), nil + return int(ev.PTrace.Tracee.Process.PIDContext.Pid), nil case "ptrace.tracee.ppid": - return int(e.PTrace.Tracee.Process.PPid), nil + return int(ev.PTrace.Tracee.Process.PPid), nil case "ptrace.tracee.tid": - return int(e.PTrace.Tracee.Process.PIDContext.Tid), nil + return int(ev.PTrace.Tracee.Process.PIDContext.Tid), nil case "ptrace.tracee.tty_name": - return e.PTrace.Tracee.Process.TTYName, nil + return ev.PTrace.Tracee.Process.TTYName, nil case "ptrace.tracee.uid": - return int(e.PTrace.Tracee.Process.Credentials.UID), nil + return int(ev.PTrace.Tracee.Process.Credentials.UID), nil case "ptrace.tracee.user": - return e.PTrace.Tracee.Process.Credentials.User, nil + return ev.PTrace.Tracee.Process.Credentials.User, nil case "removexattr.file.change_time": - return int(e.RemoveXAttr.File.FileFields.CTime), nil + return int(ev.RemoveXAttr.File.FileFields.CTime), nil case "removexattr.file.destination.name": - return e.RemoveXAttr.Name, nil + return ev.FieldHandlers.ResolveXAttrName(ev, &ev.RemoveXAttr), nil case "removexattr.file.destination.namespace": - return e.RemoveXAttr.Namespace, nil + return ev.FieldHandlers.ResolveXAttrNamespace(ev, &ev.RemoveXAttr), nil case "removexattr.file.filesystem": - return e.RemoveXAttr.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.RemoveXAttr.File), nil case "removexattr.file.gid": - return int(e.RemoveXAttr.File.FileFields.GID), nil + return int(ev.RemoveXAttr.File.FileFields.GID), nil case "removexattr.file.group": - return e.RemoveXAttr.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.RemoveXAttr.File.FileFields), nil case "removexattr.file.in_upper_layer": - return e.RemoveXAttr.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.RemoveXAttr.File.FileFields), nil case "removexattr.file.inode": - return int(e.RemoveXAttr.File.FileFields.Inode), nil + return int(ev.RemoveXAttr.File.FileFields.Inode), nil case "removexattr.file.mode": - return int(e.RemoveXAttr.File.FileFields.Mode), nil + return int(ev.RemoveXAttr.File.FileFields.Mode), nil case "removexattr.file.modification_time": - return int(e.RemoveXAttr.File.FileFields.MTime), nil + return int(ev.RemoveXAttr.File.FileFields.MTime), nil case "removexattr.file.mount_id": - return int(e.RemoveXAttr.File.FileFields.MountID), nil + return int(ev.RemoveXAttr.File.FileFields.MountID), nil case "removexattr.file.name": - return e.RemoveXAttr.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.RemoveXAttr.File), nil case "removexattr.file.name.length": - return len(e.RemoveXAttr.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.RemoveXAttr.File), nil case "removexattr.file.path": - return e.RemoveXAttr.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.RemoveXAttr.File), nil case "removexattr.file.path.length": - return len(e.RemoveXAttr.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.RemoveXAttr.File), nil case "removexattr.file.rights": - return int(e.RemoveXAttr.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.RemoveXAttr.File.FileFields)), nil case "removexattr.file.uid": - return int(e.RemoveXAttr.File.FileFields.UID), nil + return int(ev.RemoveXAttr.File.FileFields.UID), nil case "removexattr.file.user": - return e.RemoveXAttr.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.RemoveXAttr.File.FileFields), nil case "removexattr.retval": - return int(e.RemoveXAttr.SyscallEvent.Retval), nil + return int(ev.RemoveXAttr.SyscallEvent.Retval), nil case "rename.file.change_time": - return int(e.Rename.Old.FileFields.CTime), nil + return int(ev.Rename.Old.FileFields.CTime), nil case "rename.file.destination.change_time": - return int(e.Rename.New.FileFields.CTime), nil + return int(ev.Rename.New.FileFields.CTime), nil case "rename.file.destination.filesystem": - return e.Rename.New.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rename.New), nil case "rename.file.destination.gid": - return int(e.Rename.New.FileFields.GID), nil + return int(ev.Rename.New.FileFields.GID), nil case "rename.file.destination.group": - return e.Rename.New.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rename.New.FileFields), nil case "rename.file.destination.in_upper_layer": - return e.Rename.New.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rename.New.FileFields), nil case "rename.file.destination.inode": - return int(e.Rename.New.FileFields.Inode), nil + return int(ev.Rename.New.FileFields.Inode), nil case "rename.file.destination.mode": - return int(e.Rename.New.FileFields.Mode), nil + return int(ev.Rename.New.FileFields.Mode), nil case "rename.file.destination.modification_time": - return int(e.Rename.New.FileFields.MTime), nil + return int(ev.Rename.New.FileFields.MTime), nil case "rename.file.destination.mount_id": - return int(e.Rename.New.FileFields.MountID), nil + return int(ev.Rename.New.FileFields.MountID), nil case "rename.file.destination.name": - return e.Rename.New.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.New), nil case "rename.file.destination.name.length": - return len(e.Rename.New.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.New), nil case "rename.file.destination.path": - return e.Rename.New.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.New), nil case "rename.file.destination.path.length": - return len(e.Rename.New.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.New), nil case "rename.file.destination.rights": - return int(e.Rename.New.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Rename.New.FileFields)), nil case "rename.file.destination.uid": - return int(e.Rename.New.FileFields.UID), nil + return int(ev.Rename.New.FileFields.UID), nil case "rename.file.destination.user": - return e.Rename.New.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rename.New.FileFields), nil case "rename.file.filesystem": - return e.Rename.Old.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rename.Old), nil case "rename.file.gid": - return int(e.Rename.Old.FileFields.GID), nil + return int(ev.Rename.Old.FileFields.GID), nil case "rename.file.group": - return e.Rename.Old.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rename.Old.FileFields), nil case "rename.file.in_upper_layer": - return e.Rename.Old.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rename.Old.FileFields), nil case "rename.file.inode": - return int(e.Rename.Old.FileFields.Inode), nil + return int(ev.Rename.Old.FileFields.Inode), nil case "rename.file.mode": - return int(e.Rename.Old.FileFields.Mode), nil + return int(ev.Rename.Old.FileFields.Mode), nil case "rename.file.modification_time": - return int(e.Rename.Old.FileFields.MTime), nil + return int(ev.Rename.Old.FileFields.MTime), nil case "rename.file.mount_id": - return int(e.Rename.Old.FileFields.MountID), nil + return int(ev.Rename.Old.FileFields.MountID), nil case "rename.file.name": - return e.Rename.Old.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.Old), nil case "rename.file.name.length": - return len(e.Rename.Old.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.Old), nil case "rename.file.path": - return e.Rename.Old.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.Old), nil case "rename.file.path.length": - return len(e.Rename.Old.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.Old), nil case "rename.file.rights": - return int(e.Rename.Old.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Rename.Old.FileFields)), nil case "rename.file.uid": - return int(e.Rename.Old.FileFields.UID), nil + return int(ev.Rename.Old.FileFields.UID), nil case "rename.file.user": - return e.Rename.Old.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rename.Old.FileFields), nil case "rename.retval": - return int(e.Rename.SyscallEvent.Retval), nil + return int(ev.Rename.SyscallEvent.Retval), nil case "rmdir.file.change_time": - return int(e.Rmdir.File.FileFields.CTime), nil + return int(ev.Rmdir.File.FileFields.CTime), nil case "rmdir.file.filesystem": - return e.Rmdir.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rmdir.File), nil case "rmdir.file.gid": - return int(e.Rmdir.File.FileFields.GID), nil + return int(ev.Rmdir.File.FileFields.GID), nil case "rmdir.file.group": - return e.Rmdir.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rmdir.File.FileFields), nil case "rmdir.file.in_upper_layer": - return e.Rmdir.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rmdir.File.FileFields), nil case "rmdir.file.inode": - return int(e.Rmdir.File.FileFields.Inode), nil + return int(ev.Rmdir.File.FileFields.Inode), nil case "rmdir.file.mode": - return int(e.Rmdir.File.FileFields.Mode), nil + return int(ev.Rmdir.File.FileFields.Mode), nil case "rmdir.file.modification_time": - return int(e.Rmdir.File.FileFields.MTime), nil + return int(ev.Rmdir.File.FileFields.MTime), nil case "rmdir.file.mount_id": - return int(e.Rmdir.File.FileFields.MountID), nil + return int(ev.Rmdir.File.FileFields.MountID), nil case "rmdir.file.name": - return e.Rmdir.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rmdir.File), nil case "rmdir.file.name.length": - return len(e.Rmdir.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rmdir.File), nil case "rmdir.file.path": - return e.Rmdir.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rmdir.File), nil case "rmdir.file.path.length": - return len(e.Rmdir.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Rmdir.File), nil case "rmdir.file.rights": - return int(e.Rmdir.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Rmdir.File.FileFields)), nil case "rmdir.file.uid": - return int(e.Rmdir.File.FileFields.UID), nil + return int(ev.Rmdir.File.FileFields.UID), nil case "rmdir.file.user": - return e.Rmdir.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rmdir.File.FileFields), nil case "rmdir.retval": - return int(e.Rmdir.SyscallEvent.Retval), nil + return int(ev.Rmdir.SyscallEvent.Retval), nil case "selinux.bool.name": - return e.SELinux.BoolName, nil + return ev.FieldHandlers.ResolveSELinuxBoolName(ev, &ev.SELinux), nil case "selinux.bool.state": - return e.SELinux.BoolChangeValue, nil + return ev.SELinux.BoolChangeValue, nil case "selinux.bool_commit.state": - return e.SELinux.BoolCommitValue, nil + return ev.SELinux.BoolCommitValue, nil case "selinux.enforce.status": - return e.SELinux.EnforceStatus, nil + return ev.SELinux.EnforceStatus, nil case "setgid.egid": - return int(e.SetGID.EGID), nil + return int(ev.SetGID.EGID), nil case "setgid.egroup": - return e.SetGID.EGroup, nil + return ev.FieldHandlers.ResolveSetgidEGroup(ev, &ev.SetGID), nil case "setgid.fsgid": - return int(e.SetGID.FSGID), nil + return int(ev.SetGID.FSGID), nil case "setgid.fsgroup": - return e.SetGID.FSGroup, nil + return ev.FieldHandlers.ResolveSetgidFSGroup(ev, &ev.SetGID), nil case "setgid.gid": - return int(e.SetGID.GID), nil + return int(ev.SetGID.GID), nil case "setgid.group": - return e.SetGID.Group, nil + return ev.FieldHandlers.ResolveSetgidGroup(ev, &ev.SetGID), nil case "setuid.euid": - return int(e.SetUID.EUID), nil + return int(ev.SetUID.EUID), nil case "setuid.euser": - return e.SetUID.EUser, nil + return ev.FieldHandlers.ResolveSetuidEUser(ev, &ev.SetUID), nil case "setuid.fsuid": - return int(e.SetUID.FSUID), nil + return int(ev.SetUID.FSUID), nil case "setuid.fsuser": - return e.SetUID.FSUser, nil + return ev.FieldHandlers.ResolveSetuidFSUser(ev, &ev.SetUID), nil case "setuid.uid": - return int(e.SetUID.UID), nil + return int(ev.SetUID.UID), nil case "setuid.user": - return e.SetUID.User, nil + return ev.FieldHandlers.ResolveSetuidUser(ev, &ev.SetUID), nil case "setxattr.file.change_time": - return int(e.SetXAttr.File.FileFields.CTime), nil + return int(ev.SetXAttr.File.FileFields.CTime), nil case "setxattr.file.destination.name": - return e.SetXAttr.Name, nil + return ev.FieldHandlers.ResolveXAttrName(ev, &ev.SetXAttr), nil case "setxattr.file.destination.namespace": - return e.SetXAttr.Namespace, nil + return ev.FieldHandlers.ResolveXAttrNamespace(ev, &ev.SetXAttr), nil case "setxattr.file.filesystem": - return e.SetXAttr.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.SetXAttr.File), nil case "setxattr.file.gid": - return int(e.SetXAttr.File.FileFields.GID), nil + return int(ev.SetXAttr.File.FileFields.GID), nil case "setxattr.file.group": - return e.SetXAttr.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.SetXAttr.File.FileFields), nil case "setxattr.file.in_upper_layer": - return e.SetXAttr.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.SetXAttr.File.FileFields), nil case "setxattr.file.inode": - return int(e.SetXAttr.File.FileFields.Inode), nil + return int(ev.SetXAttr.File.FileFields.Inode), nil case "setxattr.file.mode": - return int(e.SetXAttr.File.FileFields.Mode), nil + return int(ev.SetXAttr.File.FileFields.Mode), nil case "setxattr.file.modification_time": - return int(e.SetXAttr.File.FileFields.MTime), nil + return int(ev.SetXAttr.File.FileFields.MTime), nil case "setxattr.file.mount_id": - return int(e.SetXAttr.File.FileFields.MountID), nil + return int(ev.SetXAttr.File.FileFields.MountID), nil case "setxattr.file.name": - return e.SetXAttr.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.SetXAttr.File), nil case "setxattr.file.name.length": - return len(e.SetXAttr.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.SetXAttr.File), nil case "setxattr.file.path": - return e.SetXAttr.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.SetXAttr.File), nil case "setxattr.file.path.length": - return len(e.SetXAttr.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.SetXAttr.File), nil case "setxattr.file.rights": - return int(e.SetXAttr.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.SetXAttr.File.FileFields)), nil case "setxattr.file.uid": - return int(e.SetXAttr.File.FileFields.UID), nil + return int(ev.SetXAttr.File.FileFields.UID), nil case "setxattr.file.user": - return e.SetXAttr.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.SetXAttr.File.FileFields), nil case "setxattr.retval": - return int(e.SetXAttr.SyscallEvent.Retval), nil + return int(ev.SetXAttr.SyscallEvent.Retval), nil case "signal.pid": - return int(e.Signal.PID), nil + return int(ev.Signal.PID), nil case "signal.retval": - return int(e.Signal.SyscallEvent.Retval), nil + return int(ev.Signal.SyscallEvent.Retval), nil case "signal.target.ancestors.args": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Args + result := ev.FieldHandlers.ResolveProcessArgs(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.args_flags": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsFlags(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.args_options": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgsOptions(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.args_truncated": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.ArgsTruncated + result := ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.argv": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv + result := ev.FieldHandlers.ResolveProcessArgv(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.argv0": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Argv0 + result := ev.FieldHandlers.ResolveProcessArgv0(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.cap_effective": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16104,7 +17839,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.cap_permitted": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16116,7 +17851,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.comm": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16128,7 +17863,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.container.id": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16140,7 +17875,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.cookie": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16152,19 +17887,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.created_at": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.CreatedAt) + result := int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &element.ProcessContext.Process)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.egid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16176,7 +17911,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.egroup": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16188,43 +17923,43 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.envp": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Envp + result := ev.FieldHandlers.ResolveProcessEnvp(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.envs": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.Envs + result := ev.FieldHandlers.ResolveProcessEnvs(ev, &element.ProcessContext.Process) values = append(values, result...) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.envs_truncated": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.EnvsTruncated + result := ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &element.ProcessContext.Process) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.euid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16236,7 +17971,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.euser": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16248,7 +17983,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.change_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16260,19 +17995,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.filesystem": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16284,31 +18019,31 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.in_upper_layer": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.inode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16320,7 +18055,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.mode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16332,7 +18067,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.modification_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16344,7 +18079,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.mount_id": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16356,67 +18091,67 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.name.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.path": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.path.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.rights": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.FileEvent.FileFields)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.file.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16428,19 +18163,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.file.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.fsgid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16452,7 +18187,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.fsgroup": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16464,7 +18199,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.fsuid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16476,7 +18211,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.fsuser": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16488,7 +18223,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16500,7 +18235,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16512,7 +18247,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.change_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16524,19 +18259,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.filesystem": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem + result := ev.FieldHandlers.ResolveFileFilesystem(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.gid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16548,31 +18283,31 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.group": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group + result := ev.FieldHandlers.ResolveFileFieldsGroup(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.in_upper_layer": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer + result := ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.inode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16584,7 +18319,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.mode": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16596,7 +18331,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.modification_time": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16608,7 +18343,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.mount_id": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16620,67 +18355,67 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr + result := ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.name.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr) + result := len(ev.FieldHandlers.ResolveFileBasename(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.path": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr + result := ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.path.length": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := len(element.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr) + result := len(ev.FieldHandlers.ResolveFilePath(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.rights": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := int(element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode) + result := int(ev.FieldHandlers.ResolveRights(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields)) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.interpreter.file.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16692,19 +18427,19 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.interpreter.file.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { element := (*ProcessCacheEntry)(ptr) - result := element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User + result := ev.FieldHandlers.ResolveFileFieldsUser(ev, &element.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) values = append(values, result) ptr = iterator.Next() } return values, nil case "signal.target.ancestors.is_kworker": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16716,7 +18451,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.is_thread": var values []bool - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16728,7 +18463,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.pid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16740,7 +18475,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.ppid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16752,7 +18487,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.tid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16764,7 +18499,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.tty_name": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16776,7 +18511,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.uid": var values []int - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16788,7 +18523,7 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { return values, nil case "signal.target.ancestors.user": var values []string - ctx := eval.NewContext(unsafe.Pointer(e)) + ctx := eval.NewContext(ev) iterator := &ProcessAncestorsIterator{} ptr := iterator.Front(ctx) for ptr != nil { @@ -16799,383 +18534,383 @@ func (e *Event) GetFieldValue(field eval.Field) (interface{}, error) { } return values, nil case "signal.target.args": - return e.Signal.Target.Process.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, &ev.Signal.Target.Process), nil case "signal.target.args_flags": - return e.Signal.Target.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, &ev.Signal.Target.Process), nil case "signal.target.args_options": - return e.Signal.Target.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, &ev.Signal.Target.Process), nil case "signal.target.args_truncated": - return e.Signal.Target.Process.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.Signal.Target.Process), nil case "signal.target.argv": - return e.Signal.Target.Process.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, &ev.Signal.Target.Process), nil case "signal.target.argv0": - return e.Signal.Target.Process.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.Signal.Target.Process), nil case "signal.target.cap_effective": - return int(e.Signal.Target.Process.Credentials.CapEffective), nil + return int(ev.Signal.Target.Process.Credentials.CapEffective), nil case "signal.target.cap_permitted": - return int(e.Signal.Target.Process.Credentials.CapPermitted), nil + return int(ev.Signal.Target.Process.Credentials.CapPermitted), nil case "signal.target.comm": - return e.Signal.Target.Process.Comm, nil + return ev.Signal.Target.Process.Comm, nil case "signal.target.container.id": - return e.Signal.Target.Process.ContainerID, nil + return ev.Signal.Target.Process.ContainerID, nil case "signal.target.cookie": - return int(e.Signal.Target.Process.Cookie), nil + return int(ev.Signal.Target.Process.Cookie), nil case "signal.target.created_at": - return int(e.Signal.Target.Process.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.Signal.Target.Process)), nil case "signal.target.egid": - return int(e.Signal.Target.Process.Credentials.EGID), nil + return int(ev.Signal.Target.Process.Credentials.EGID), nil case "signal.target.egroup": - return e.Signal.Target.Process.Credentials.EGroup, nil + return ev.Signal.Target.Process.Credentials.EGroup, nil case "signal.target.envp": - return e.Signal.Target.Process.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.Signal.Target.Process), nil case "signal.target.envs": - return e.Signal.Target.Process.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.Signal.Target.Process), nil case "signal.target.envs_truncated": - return e.Signal.Target.Process.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.Signal.Target.Process), nil case "signal.target.euid": - return int(e.Signal.Target.Process.Credentials.EUID), nil + return int(ev.Signal.Target.Process.Credentials.EUID), nil case "signal.target.euser": - return e.Signal.Target.Process.Credentials.EUser, nil + return ev.Signal.Target.Process.Credentials.EUser, nil case "signal.target.file.change_time": - return int(e.Signal.Target.Process.FileEvent.FileFields.CTime), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.CTime), nil case "signal.target.file.filesystem": - return e.Signal.Target.Process.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Process.FileEvent), nil case "signal.target.file.gid": - return int(e.Signal.Target.Process.FileEvent.FileFields.GID), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.GID), nil case "signal.target.file.group": - return e.Signal.Target.Process.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Process.FileEvent.FileFields), nil case "signal.target.file.in_upper_layer": - return e.Signal.Target.Process.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Process.FileEvent.FileFields), nil case "signal.target.file.inode": - return int(e.Signal.Target.Process.FileEvent.FileFields.Inode), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.Inode), nil case "signal.target.file.mode": - return int(e.Signal.Target.Process.FileEvent.FileFields.Mode), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.Mode), nil case "signal.target.file.modification_time": - return int(e.Signal.Target.Process.FileEvent.FileFields.MTime), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.MTime), nil case "signal.target.file.mount_id": - return int(e.Signal.Target.Process.FileEvent.FileFields.MountID), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.MountID), nil case "signal.target.file.name": - return e.Signal.Target.Process.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.FileEvent), nil case "signal.target.file.name.length": - return len(e.Signal.Target.Process.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.FileEvent), nil case "signal.target.file.path": - return e.Signal.Target.Process.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.FileEvent), nil case "signal.target.file.path.length": - return len(e.Signal.Target.Process.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.FileEvent), nil case "signal.target.file.rights": - return int(e.Signal.Target.Process.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Process.FileEvent.FileFields)), nil case "signal.target.file.uid": - return int(e.Signal.Target.Process.FileEvent.FileFields.UID), nil + return int(ev.Signal.Target.Process.FileEvent.FileFields.UID), nil case "signal.target.file.user": - return e.Signal.Target.Process.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Process.FileEvent.FileFields), nil case "signal.target.fsgid": - return int(e.Signal.Target.Process.Credentials.FSGID), nil + return int(ev.Signal.Target.Process.Credentials.FSGID), nil case "signal.target.fsgroup": - return e.Signal.Target.Process.Credentials.FSGroup, nil + return ev.Signal.Target.Process.Credentials.FSGroup, nil case "signal.target.fsuid": - return int(e.Signal.Target.Process.Credentials.FSUID), nil + return int(ev.Signal.Target.Process.Credentials.FSUID), nil case "signal.target.fsuser": - return e.Signal.Target.Process.Credentials.FSUser, nil + return ev.Signal.Target.Process.Credentials.FSUser, nil case "signal.target.gid": - return int(e.Signal.Target.Process.Credentials.GID), nil + return int(ev.Signal.Target.Process.Credentials.GID), nil case "signal.target.group": - return e.Signal.Target.Process.Credentials.Group, nil + return ev.Signal.Target.Process.Credentials.Group, nil case "signal.target.interpreter.file.change_time": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime), nil case "signal.target.interpreter.file.filesystem": - return e.Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent), nil case "signal.target.interpreter.file.gid": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID), nil case "signal.target.interpreter.file.group": - return e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields), nil case "signal.target.interpreter.file.in_upper_layer": - return e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields), nil case "signal.target.interpreter.file.inode": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode), nil case "signal.target.interpreter.file.mode": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil case "signal.target.interpreter.file.modification_time": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime), nil case "signal.target.interpreter.file.mount_id": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID), nil case "signal.target.interpreter.file.name": - return e.Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent), nil case "signal.target.interpreter.file.name.length": - return len(e.Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent), nil case "signal.target.interpreter.file.path": - return e.Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent), nil case "signal.target.interpreter.file.path.length": - return len(e.Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent), nil case "signal.target.interpreter.file.rights": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields)), nil case "signal.target.interpreter.file.uid": - return int(e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID), nil case "signal.target.interpreter.file.user": - return e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields), nil case "signal.target.is_kworker": - return e.Signal.Target.Process.PIDContext.IsKworker, nil + return ev.Signal.Target.Process.PIDContext.IsKworker, nil case "signal.target.is_thread": - return e.Signal.Target.Process.IsThread, nil + return ev.Signal.Target.Process.IsThread, nil case "signal.target.parent.args": - return e.Signal.Target.Parent.Args, nil + return ev.FieldHandlers.ResolveProcessArgs(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.args_flags": - return e.Signal.Target.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsFlags(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.args_options": - return e.Signal.Target.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgsOptions(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.args_truncated": - return e.Signal.Target.Parent.ArgsTruncated, nil + return ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.argv": - return e.Signal.Target.Parent.Argv, nil + return ev.FieldHandlers.ResolveProcessArgv(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.argv0": - return e.Signal.Target.Parent.Argv0, nil + return ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.cap_effective": - return int(e.Signal.Target.Parent.Credentials.CapEffective), nil + return int(ev.Signal.Target.Parent.Credentials.CapEffective), nil case "signal.target.parent.cap_permitted": - return int(e.Signal.Target.Parent.Credentials.CapPermitted), nil + return int(ev.Signal.Target.Parent.Credentials.CapPermitted), nil case "signal.target.parent.comm": - return e.Signal.Target.Parent.Comm, nil + return ev.Signal.Target.Parent.Comm, nil case "signal.target.parent.container.id": - return e.Signal.Target.Parent.ContainerID, nil + return ev.Signal.Target.Parent.ContainerID, nil case "signal.target.parent.cookie": - return int(e.Signal.Target.Parent.Cookie), nil + return int(ev.Signal.Target.Parent.Cookie), nil case "signal.target.parent.created_at": - return int(e.Signal.Target.Parent.CreatedAt), nil + return int(ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Signal.Target.Parent)), nil case "signal.target.parent.egid": - return int(e.Signal.Target.Parent.Credentials.EGID), nil + return int(ev.Signal.Target.Parent.Credentials.EGID), nil case "signal.target.parent.egroup": - return e.Signal.Target.Parent.Credentials.EGroup, nil + return ev.Signal.Target.Parent.Credentials.EGroup, nil case "signal.target.parent.envp": - return e.Signal.Target.Parent.Envp, nil + return ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.envs": - return e.Signal.Target.Parent.Envs, nil + return ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.envs_truncated": - return e.Signal.Target.Parent.EnvsTruncated, nil + return ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Signal.Target.Parent), nil case "signal.target.parent.euid": - return int(e.Signal.Target.Parent.Credentials.EUID), nil + return int(ev.Signal.Target.Parent.Credentials.EUID), nil case "signal.target.parent.euser": - return e.Signal.Target.Parent.Credentials.EUser, nil + return ev.Signal.Target.Parent.Credentials.EUser, nil case "signal.target.parent.file.change_time": - return int(e.Signal.Target.Parent.FileEvent.FileFields.CTime), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.CTime), nil case "signal.target.parent.file.filesystem": - return e.Signal.Target.Parent.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Parent.FileEvent), nil case "signal.target.parent.file.gid": - return int(e.Signal.Target.Parent.FileEvent.FileFields.GID), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.GID), nil case "signal.target.parent.file.group": - return e.Signal.Target.Parent.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Parent.FileEvent.FileFields), nil case "signal.target.parent.file.in_upper_layer": - return e.Signal.Target.Parent.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Parent.FileEvent.FileFields), nil case "signal.target.parent.file.inode": - return int(e.Signal.Target.Parent.FileEvent.FileFields.Inode), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.Inode), nil case "signal.target.parent.file.mode": - return int(e.Signal.Target.Parent.FileEvent.FileFields.Mode), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.Mode), nil case "signal.target.parent.file.modification_time": - return int(e.Signal.Target.Parent.FileEvent.FileFields.MTime), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.MTime), nil case "signal.target.parent.file.mount_id": - return int(e.Signal.Target.Parent.FileEvent.FileFields.MountID), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.MountID), nil case "signal.target.parent.file.name": - return e.Signal.Target.Parent.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.FileEvent), nil case "signal.target.parent.file.name.length": - return len(e.Signal.Target.Parent.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.FileEvent), nil case "signal.target.parent.file.path": - return e.Signal.Target.Parent.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.FileEvent), nil case "signal.target.parent.file.path.length": - return len(e.Signal.Target.Parent.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.FileEvent), nil case "signal.target.parent.file.rights": - return int(e.Signal.Target.Parent.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Parent.FileEvent.FileFields)), nil case "signal.target.parent.file.uid": - return int(e.Signal.Target.Parent.FileEvent.FileFields.UID), nil + return int(ev.Signal.Target.Parent.FileEvent.FileFields.UID), nil case "signal.target.parent.file.user": - return e.Signal.Target.Parent.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Parent.FileEvent.FileFields), nil case "signal.target.parent.fsgid": - return int(e.Signal.Target.Parent.Credentials.FSGID), nil + return int(ev.Signal.Target.Parent.Credentials.FSGID), nil case "signal.target.parent.fsgroup": - return e.Signal.Target.Parent.Credentials.FSGroup, nil + return ev.Signal.Target.Parent.Credentials.FSGroup, nil case "signal.target.parent.fsuid": - return int(e.Signal.Target.Parent.Credentials.FSUID), nil + return int(ev.Signal.Target.Parent.Credentials.FSUID), nil case "signal.target.parent.fsuser": - return e.Signal.Target.Parent.Credentials.FSUser, nil + return ev.Signal.Target.Parent.Credentials.FSUser, nil case "signal.target.parent.gid": - return int(e.Signal.Target.Parent.Credentials.GID), nil + return int(ev.Signal.Target.Parent.Credentials.GID), nil case "signal.target.parent.group": - return e.Signal.Target.Parent.Credentials.Group, nil + return ev.Signal.Target.Parent.Credentials.Group, nil case "signal.target.parent.interpreter.file.change_time": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime), nil case "signal.target.parent.interpreter.file.filesystem": - return e.Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent), nil case "signal.target.parent.interpreter.file.gid": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID), nil case "signal.target.parent.interpreter.file.group": - return e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields), nil case "signal.target.parent.interpreter.file.in_upper_layer": - return e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields), nil case "signal.target.parent.interpreter.file.inode": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode), nil case "signal.target.parent.interpreter.file.mode": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil case "signal.target.parent.interpreter.file.modification_time": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime), nil case "signal.target.parent.interpreter.file.mount_id": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID), nil case "signal.target.parent.interpreter.file.name": - return e.Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent), nil case "signal.target.parent.interpreter.file.name.length": - return len(e.Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent), nil case "signal.target.parent.interpreter.file.path": - return e.Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent), nil case "signal.target.parent.interpreter.file.path.length": - return len(e.Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent), nil case "signal.target.parent.interpreter.file.rights": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields)), nil case "signal.target.parent.interpreter.file.uid": - return int(e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil + return int(ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID), nil case "signal.target.parent.interpreter.file.user": - return e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields), nil case "signal.target.parent.is_kworker": - return e.Signal.Target.Parent.PIDContext.IsKworker, nil + return ev.Signal.Target.Parent.PIDContext.IsKworker, nil case "signal.target.parent.is_thread": - return e.Signal.Target.Parent.IsThread, nil + return ev.Signal.Target.Parent.IsThread, nil case "signal.target.parent.pid": - return int(e.Signal.Target.Parent.PIDContext.Pid), nil + return int(ev.Signal.Target.Parent.PIDContext.Pid), nil case "signal.target.parent.ppid": - return int(e.Signal.Target.Parent.PPid), nil + return int(ev.Signal.Target.Parent.PPid), nil case "signal.target.parent.tid": - return int(e.Signal.Target.Parent.PIDContext.Tid), nil + return int(ev.Signal.Target.Parent.PIDContext.Tid), nil case "signal.target.parent.tty_name": - return e.Signal.Target.Parent.TTYName, nil + return ev.Signal.Target.Parent.TTYName, nil case "signal.target.parent.uid": - return int(e.Signal.Target.Parent.Credentials.UID), nil + return int(ev.Signal.Target.Parent.Credentials.UID), nil case "signal.target.parent.user": - return e.Signal.Target.Parent.Credentials.User, nil + return ev.Signal.Target.Parent.Credentials.User, nil case "signal.target.pid": - return int(e.Signal.Target.Process.PIDContext.Pid), nil + return int(ev.Signal.Target.Process.PIDContext.Pid), nil case "signal.target.ppid": - return int(e.Signal.Target.Process.PPid), nil + return int(ev.Signal.Target.Process.PPid), nil case "signal.target.tid": - return int(e.Signal.Target.Process.PIDContext.Tid), nil + return int(ev.Signal.Target.Process.PIDContext.Tid), nil case "signal.target.tty_name": - return e.Signal.Target.Process.TTYName, nil + return ev.Signal.Target.Process.TTYName, nil case "signal.target.uid": - return int(e.Signal.Target.Process.Credentials.UID), nil + return int(ev.Signal.Target.Process.Credentials.UID), nil case "signal.target.user": - return e.Signal.Target.Process.Credentials.User, nil + return ev.Signal.Target.Process.Credentials.User, nil case "signal.type": - return int(e.Signal.Type), nil + return int(ev.Signal.Type), nil case "splice.file.change_time": - return int(e.Splice.File.FileFields.CTime), nil + return int(ev.Splice.File.FileFields.CTime), nil case "splice.file.filesystem": - return e.Splice.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Splice.File), nil case "splice.file.gid": - return int(e.Splice.File.FileFields.GID), nil + return int(ev.Splice.File.FileFields.GID), nil case "splice.file.group": - return e.Splice.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Splice.File.FileFields), nil case "splice.file.in_upper_layer": - return e.Splice.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Splice.File.FileFields), nil case "splice.file.inode": - return int(e.Splice.File.FileFields.Inode), nil + return int(ev.Splice.File.FileFields.Inode), nil case "splice.file.mode": - return int(e.Splice.File.FileFields.Mode), nil + return int(ev.Splice.File.FileFields.Mode), nil case "splice.file.modification_time": - return int(e.Splice.File.FileFields.MTime), nil + return int(ev.Splice.File.FileFields.MTime), nil case "splice.file.mount_id": - return int(e.Splice.File.FileFields.MountID), nil + return int(ev.Splice.File.FileFields.MountID), nil case "splice.file.name": - return e.Splice.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Splice.File), nil case "splice.file.name.length": - return len(e.Splice.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Splice.File), nil case "splice.file.path": - return e.Splice.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Splice.File), nil case "splice.file.path.length": - return len(e.Splice.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Splice.File), nil case "splice.file.rights": - return int(e.Splice.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Splice.File.FileFields)), nil case "splice.file.uid": - return int(e.Splice.File.FileFields.UID), nil + return int(ev.Splice.File.FileFields.UID), nil case "splice.file.user": - return e.Splice.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Splice.File.FileFields), nil case "splice.pipe_entry_flag": - return int(e.Splice.PipeEntryFlag), nil + return int(ev.Splice.PipeEntryFlag), nil case "splice.pipe_exit_flag": - return int(e.Splice.PipeExitFlag), nil + return int(ev.Splice.PipeExitFlag), nil case "splice.retval": - return int(e.Splice.SyscallEvent.Retval), nil + return int(ev.Splice.SyscallEvent.Retval), nil case "unlink.file.change_time": - return int(e.Unlink.File.FileFields.CTime), nil + return int(ev.Unlink.File.FileFields.CTime), nil case "unlink.file.filesystem": - return e.Unlink.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Unlink.File), nil case "unlink.file.gid": - return int(e.Unlink.File.FileFields.GID), nil + return int(ev.Unlink.File.FileFields.GID), nil case "unlink.file.group": - return e.Unlink.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Unlink.File.FileFields), nil case "unlink.file.in_upper_layer": - return e.Unlink.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Unlink.File.FileFields), nil case "unlink.file.inode": - return int(e.Unlink.File.FileFields.Inode), nil + return int(ev.Unlink.File.FileFields.Inode), nil case "unlink.file.mode": - return int(e.Unlink.File.FileFields.Mode), nil + return int(ev.Unlink.File.FileFields.Mode), nil case "unlink.file.modification_time": - return int(e.Unlink.File.FileFields.MTime), nil + return int(ev.Unlink.File.FileFields.MTime), nil case "unlink.file.mount_id": - return int(e.Unlink.File.FileFields.MountID), nil + return int(ev.Unlink.File.FileFields.MountID), nil case "unlink.file.name": - return e.Unlink.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Unlink.File), nil case "unlink.file.name.length": - return len(e.Unlink.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Unlink.File), nil case "unlink.file.path": - return e.Unlink.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Unlink.File), nil case "unlink.file.path.length": - return len(e.Unlink.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Unlink.File), nil case "unlink.file.rights": - return int(e.Unlink.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Unlink.File.FileFields)), nil case "unlink.file.uid": - return int(e.Unlink.File.FileFields.UID), nil + return int(ev.Unlink.File.FileFields.UID), nil case "unlink.file.user": - return e.Unlink.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Unlink.File.FileFields), nil case "unlink.flags": - return int(e.Unlink.Flags), nil + return int(ev.Unlink.Flags), nil case "unlink.retval": - return int(e.Unlink.SyscallEvent.Retval), nil + return int(ev.Unlink.SyscallEvent.Retval), nil case "unload_module.name": - return e.UnloadModule.Name, nil + return ev.UnloadModule.Name, nil case "unload_module.retval": - return int(e.UnloadModule.SyscallEvent.Retval), nil + return int(ev.UnloadModule.SyscallEvent.Retval), nil case "utimes.file.change_time": - return int(e.Utimes.File.FileFields.CTime), nil + return int(ev.Utimes.File.FileFields.CTime), nil case "utimes.file.filesystem": - return e.Utimes.File.Filesystem, nil + return ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Utimes.File), nil case "utimes.file.gid": - return int(e.Utimes.File.FileFields.GID), nil + return int(ev.Utimes.File.FileFields.GID), nil case "utimes.file.group": - return e.Utimes.File.FileFields.Group, nil + return ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Utimes.File.FileFields), nil case "utimes.file.in_upper_layer": - return e.Utimes.File.FileFields.InUpperLayer, nil + return ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Utimes.File.FileFields), nil case "utimes.file.inode": - return int(e.Utimes.File.FileFields.Inode), nil + return int(ev.Utimes.File.FileFields.Inode), nil case "utimes.file.mode": - return int(e.Utimes.File.FileFields.Mode), nil + return int(ev.Utimes.File.FileFields.Mode), nil case "utimes.file.modification_time": - return int(e.Utimes.File.FileFields.MTime), nil + return int(ev.Utimes.File.FileFields.MTime), nil case "utimes.file.mount_id": - return int(e.Utimes.File.FileFields.MountID), nil + return int(ev.Utimes.File.FileFields.MountID), nil case "utimes.file.name": - return e.Utimes.File.BasenameStr, nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Utimes.File), nil case "utimes.file.name.length": - return len(e.Utimes.File.BasenameStr), nil + return ev.FieldHandlers.ResolveFileBasename(ev, &ev.Utimes.File), nil case "utimes.file.path": - return e.Utimes.File.PathnameStr, nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Utimes.File), nil case "utimes.file.path.length": - return len(e.Utimes.File.PathnameStr), nil + return ev.FieldHandlers.ResolveFilePath(ev, &ev.Utimes.File), nil case "utimes.file.rights": - return int(e.Utimes.File.FileFields.Mode), nil + return int(ev.FieldHandlers.ResolveRights(ev, &ev.Utimes.File.FileFields)), nil case "utimes.file.uid": - return int(e.Utimes.File.FileFields.UID), nil + return int(ev.Utimes.File.FileFields.UID), nil case "utimes.file.user": - return e.Utimes.File.FileFields.User, nil + return ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Utimes.File.FileFields), nil case "utimes.retval": - return int(e.Utimes.SyscallEvent.Retval), nil + return int(ev.Utimes.SyscallEvent.Retval), nil } return nil, &eval.ErrFieldNotFound{Field: field} } -func (e *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { +func (ev *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { switch field { case "async": return "*", nil @@ -19324,7 +21059,7 @@ func (e *Event) GetFieldEventType(field eval.Field) (eval.EventType, error) { } return "", &eval.ErrFieldNotFound{Field: field} } -func (e *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { +func (ev *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { switch field { case "async": return reflect.Bool, nil @@ -21473,10356 +23208,10614 @@ func (e *Event) GetFieldType(field eval.Field) (reflect.Kind, error) { } return reflect.Invalid, &eval.ErrFieldNotFound{Field: field} } -func (e *Event) SetFieldValue(field eval.Field, value interface{}) error { +func (ev *Event) SetFieldValue(field eval.Field, value interface{}) error { switch field { case "async": - var ok bool - if e.Async, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Async"} } + ev.Async = rv return nil case "bind.addr.family": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Bind.AddrFamily"} } - e.Bind.AddrFamily = uint16(v) + ev.Bind.AddrFamily = uint16(rv) return nil case "bind.addr.ip": - v, ok := value.(net.IPNet) + rv, ok := value.(net.IPNet) if !ok { return &eval.ErrValueTypeMismatch{Field: "Bind.Addr.IPNet"} } - e.Bind.Addr.IPNet = v + ev.Bind.Addr.IPNet = rv return nil case "bind.addr.port": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Bind.Addr.Port"} } - e.Bind.Addr.Port = uint16(v) + ev.Bind.Addr.Port = uint16(rv) return nil case "bind.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Bind.SyscallEvent.Retval"} } - e.Bind.SyscallEvent.Retval = int64(v) + ev.Bind.SyscallEvent.Retval = int64(rv) return nil case "bpf.cmd": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Cmd"} } - e.BPF.Cmd = uint32(v) + ev.BPF.Cmd = uint32(rv) return nil case "bpf.map.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Map.Name"} } - e.BPF.Map.Name = str + ev.BPF.Map.Name = rv return nil case "bpf.map.type": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Map.Type"} } - e.BPF.Map.Type = uint32(v) + ev.BPF.Map.Type = uint32(rv) return nil case "bpf.prog.attach_type": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Program.AttachType"} } - e.BPF.Program.AttachType = uint32(v) + ev.BPF.Program.AttachType = uint32(rv) return nil case "bpf.prog.helpers": - v, ok := value.(int) - if !ok { + switch rv := value.(type) { + case int: + ev.BPF.Program.Helpers = append(ev.BPF.Program.Helpers, uint32(rv)) + case []int: + for _, i := range rv { + ev.BPF.Program.Helpers = append(ev.BPF.Program.Helpers, uint32(i)) + } + default: return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Helpers"} } - e.BPF.Program.Helpers = append(e.BPF.Program.Helpers, uint32(v)) return nil case "bpf.prog.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Name"} } - e.BPF.Program.Name = str + ev.BPF.Program.Name = rv return nil case "bpf.prog.tag": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Tag"} } - e.BPF.Program.Tag = str + ev.BPF.Program.Tag = rv return nil case "bpf.prog.type": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.Program.Type"} } - e.BPF.Program.Type = uint32(v) + ev.BPF.Program.Type = uint32(rv) return nil case "bpf.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "BPF.SyscallEvent.Retval"} } - e.BPF.SyscallEvent.Retval = int64(v) + ev.BPF.SyscallEvent.Retval = int64(rv) return nil case "capset.cap_effective": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Capset.CapEffective"} } - e.Capset.CapEffective = uint64(v) + ev.Capset.CapEffective = uint64(rv) return nil case "capset.cap_permitted": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Capset.CapPermitted"} } - e.Capset.CapPermitted = uint64(v) + ev.Capset.CapPermitted = uint64(rv) return nil case "chmod.file.change_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.CTime"} } - e.Chmod.File.FileFields.CTime = uint64(v) + ev.Chmod.File.FileFields.CTime = uint64(rv) return nil case "chmod.file.destination.mode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.Mode"} } - e.Chmod.Mode = uint32(v) + ev.Chmod.Mode = uint32(rv) return nil case "chmod.file.destination.rights": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.Mode"} } - e.Chmod.Mode = uint32(v) + ev.Chmod.Mode = uint32(rv) return nil case "chmod.file.filesystem": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.Filesystem"} } - e.Chmod.File.Filesystem = str + ev.Chmod.File.Filesystem = rv return nil case "chmod.file.gid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.GID"} } - e.Chmod.File.FileFields.GID = uint32(v) + ev.Chmod.File.FileFields.GID = uint32(rv) return nil case "chmod.file.group": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Group"} } - e.Chmod.File.FileFields.Group = str + ev.Chmod.File.FileFields.Group = rv return nil case "chmod.file.in_upper_layer": - var ok bool - if e.Chmod.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.InUpperLayer"} } + ev.Chmod.File.FileFields.InUpperLayer = rv return nil case "chmod.file.inode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Inode"} } - e.Chmod.File.FileFields.Inode = uint64(v) + ev.Chmod.File.FileFields.Inode = uint64(rv) return nil case "chmod.file.mode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Mode"} } - e.Chmod.File.FileFields.Mode = uint16(v) + ev.Chmod.File.FileFields.Mode = uint16(rv) return nil case "chmod.file.modification_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.MTime"} } - e.Chmod.File.FileFields.MTime = uint64(v) + ev.Chmod.File.FileFields.MTime = uint64(rv) return nil case "chmod.file.mount_id": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.MountID"} } - e.Chmod.File.FileFields.MountID = uint32(v) + ev.Chmod.File.FileFields.MountID = uint32(rv) return nil case "chmod.file.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.BasenameStr"} } - e.Chmod.File.BasenameStr = str + ev.Chmod.File.BasenameStr = rv return nil case "chmod.file.name.length": return &eval.ErrFieldReadOnly{Field: "chmod.file.name.length"} case "chmod.file.path": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.PathnameStr"} } - e.Chmod.File.PathnameStr = str + ev.Chmod.File.PathnameStr = rv return nil case "chmod.file.path.length": return &eval.ErrFieldReadOnly{Field: "chmod.file.path.length"} case "chmod.file.rights": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.Mode"} } - e.Chmod.File.FileFields.Mode = uint16(v) + ev.Chmod.File.FileFields.Mode = uint16(rv) return nil case "chmod.file.uid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.UID"} } - e.Chmod.File.FileFields.UID = uint32(v) + ev.Chmod.File.FileFields.UID = uint32(rv) return nil case "chmod.file.user": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.File.FileFields.User"} } - e.Chmod.File.FileFields.User = str + ev.Chmod.File.FileFields.User = rv return nil case "chmod.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chmod.SyscallEvent.Retval"} } - e.Chmod.SyscallEvent.Retval = int64(v) + ev.Chmod.SyscallEvent.Retval = int64(rv) return nil case "chown.file.change_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.CTime"} } - e.Chown.File.FileFields.CTime = uint64(v) + ev.Chown.File.FileFields.CTime = uint64(rv) return nil case "chown.file.destination.gid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.GID"} } - e.Chown.GID = int64(v) + ev.Chown.GID = int64(rv) return nil case "chown.file.destination.group": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.Group"} } - e.Chown.Group = str + ev.Chown.Group = rv return nil case "chown.file.destination.uid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.UID"} } - e.Chown.UID = int64(v) + ev.Chown.UID = int64(rv) return nil case "chown.file.destination.user": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.User"} } - e.Chown.User = str + ev.Chown.User = rv return nil case "chown.file.filesystem": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.Filesystem"} } - e.Chown.File.Filesystem = str + ev.Chown.File.Filesystem = rv return nil case "chown.file.gid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.GID"} } - e.Chown.File.FileFields.GID = uint32(v) + ev.Chown.File.FileFields.GID = uint32(rv) return nil case "chown.file.group": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Group"} } - e.Chown.File.FileFields.Group = str + ev.Chown.File.FileFields.Group = rv return nil case "chown.file.in_upper_layer": - var ok bool - if e.Chown.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.InUpperLayer"} } + ev.Chown.File.FileFields.InUpperLayer = rv return nil case "chown.file.inode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Inode"} } - e.Chown.File.FileFields.Inode = uint64(v) + ev.Chown.File.FileFields.Inode = uint64(rv) return nil case "chown.file.mode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Mode"} } - e.Chown.File.FileFields.Mode = uint16(v) + ev.Chown.File.FileFields.Mode = uint16(rv) return nil case "chown.file.modification_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.MTime"} } - e.Chown.File.FileFields.MTime = uint64(v) + ev.Chown.File.FileFields.MTime = uint64(rv) return nil case "chown.file.mount_id": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.MountID"} } - e.Chown.File.FileFields.MountID = uint32(v) + ev.Chown.File.FileFields.MountID = uint32(rv) return nil case "chown.file.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.BasenameStr"} } - e.Chown.File.BasenameStr = str + ev.Chown.File.BasenameStr = rv return nil case "chown.file.name.length": return &eval.ErrFieldReadOnly{Field: "chown.file.name.length"} case "chown.file.path": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.PathnameStr"} } - e.Chown.File.PathnameStr = str + ev.Chown.File.PathnameStr = rv return nil case "chown.file.path.length": return &eval.ErrFieldReadOnly{Field: "chown.file.path.length"} case "chown.file.rights": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.Mode"} } - e.Chown.File.FileFields.Mode = uint16(v) + ev.Chown.File.FileFields.Mode = uint16(rv) return nil case "chown.file.uid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.UID"} } - e.Chown.File.FileFields.UID = uint32(v) + ev.Chown.File.FileFields.UID = uint32(rv) return nil case "chown.file.user": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.File.FileFields.User"} } - e.Chown.File.FileFields.User = str + ev.Chown.File.FileFields.User = rv return nil case "chown.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Chown.SyscallEvent.Retval"} } - e.Chown.SyscallEvent.Retval = int64(v) + ev.Chown.SyscallEvent.Retval = int64(rv) return nil case "container.id": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ContainerContext.ID"} } - e.ContainerContext.ID = str + ev.ContainerContext.ID = rv return nil case "container.tags": - str, ok := value.(string) - if !ok { + switch rv := value.(type) { + case string: + ev.ContainerContext.Tags = append(ev.ContainerContext.Tags, rv) + case []string: + ev.ContainerContext.Tags = append(ev.ContainerContext.Tags, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "ContainerContext.Tags"} } - e.ContainerContext.Tags = append(e.ContainerContext.Tags, str) return nil case "dns.id": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "DNS.ID"} } - e.DNS.ID = uint16(v) + ev.DNS.ID = uint16(rv) return nil case "dns.question.class": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "DNS.Class"} } - e.DNS.Class = uint16(v) + ev.DNS.Class = uint16(rv) return nil case "dns.question.count": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "DNS.Count"} } - e.DNS.Count = uint16(v) + ev.DNS.Count = uint16(rv) return nil case "dns.question.length": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "DNS.Size"} } - e.DNS.Size = uint16(v) + ev.DNS.Size = uint16(rv) return nil case "dns.question.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "DNS.Name"} } - e.DNS.Name = str + ev.DNS.Name = rv return nil case "dns.question.name.length": return &eval.ErrFieldReadOnly{Field: "dns.question.name.length"} case "dns.question.type": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "DNS.Type"} } - e.DNS.Type = uint16(v) + ev.DNS.Type = uint16(rv) return nil case "exec.args": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Args"} } - e.Exec.Process.Args = str + ev.Exec.Process.Args = rv return nil case "exec.args_flags": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} + } + switch rv := value.(type) { + case string: + ev.Exec.Process.Argv = append(ev.Exec.Process.Argv, rv) + case []string: + ev.Exec.Process.Argv = append(ev.Exec.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv"} } - e.Exec.Process.Argv = append(e.Exec.Process.Argv, str) return nil case "exec.args_options": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} + } + switch rv := value.(type) { + case string: + ev.Exec.Process.Argv = append(ev.Exec.Process.Argv, rv) + case []string: + ev.Exec.Process.Argv = append(ev.Exec.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv"} } - e.Exec.Process.Argv = append(e.Exec.Process.Argv, str) return nil case "exec.args_truncated": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - var ok bool - if e.Exec.Process.ArgsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.ArgsTruncated"} } + ev.Exec.Process.ArgsTruncated = rv return nil case "exec.argv": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} + } + switch rv := value.(type) { + case string: + ev.Exec.Process.Argv = append(ev.Exec.Process.Argv, rv) + case []string: + ev.Exec.Process.Argv = append(ev.Exec.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv"} } - e.Exec.Process.Argv = append(e.Exec.Process.Argv, str) return nil case "exec.argv0": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Argv0"} } - e.Exec.Process.Argv0 = str + ev.Exec.Process.Argv0 = rv return nil case "exec.cap_effective": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.CapEffective"} } - e.Exec.Process.Credentials.CapEffective = uint64(v) + ev.Exec.Process.Credentials.CapEffective = uint64(rv) return nil case "exec.cap_permitted": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.CapPermitted"} } - e.Exec.Process.Credentials.CapPermitted = uint64(v) + ev.Exec.Process.Credentials.CapPermitted = uint64(rv) return nil case "exec.comm": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Comm"} } - e.Exec.Process.Comm = str + ev.Exec.Process.Comm = rv return nil case "exec.container.id": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.ContainerID"} } - e.Exec.Process.ContainerID = str + ev.Exec.Process.ContainerID = rv return nil case "exec.cookie": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Cookie"} } - e.Exec.Process.Cookie = uint32(v) + ev.Exec.Process.Cookie = uint32(rv) return nil case "exec.created_at": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.CreatedAt"} } - e.Exec.Process.CreatedAt = uint64(v) + ev.Exec.Process.CreatedAt = uint64(rv) return nil case "exec.egid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EGID"} } - e.Exec.Process.Credentials.EGID = uint32(v) + ev.Exec.Process.Credentials.EGID = uint32(rv) return nil case "exec.egroup": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EGroup"} } - e.Exec.Process.Credentials.EGroup = str + ev.Exec.Process.Credentials.EGroup = rv return nil case "exec.envp": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} + } + switch rv := value.(type) { + case string: + ev.Exec.Process.Envp = append(ev.Exec.Process.Envp, rv) + case []string: + ev.Exec.Process.Envp = append(ev.Exec.Process.Envp, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Envp"} } - e.Exec.Process.Envp = append(e.Exec.Process.Envp, str) return nil case "exec.envs": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} + } + switch rv := value.(type) { + case string: + ev.Exec.Process.Envs = append(ev.Exec.Process.Envs, rv) + case []string: + ev.Exec.Process.Envs = append(ev.Exec.Process.Envs, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Envs"} } - e.Exec.Process.Envs = append(e.Exec.Process.Envs, str) return nil case "exec.envs_truncated": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - var ok bool - if e.Exec.Process.EnvsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.EnvsTruncated"} } + ev.Exec.Process.EnvsTruncated = rv return nil case "exec.euid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EUID"} } - e.Exec.Process.Credentials.EUID = uint32(v) + ev.Exec.Process.Credentials.EUID = uint32(rv) return nil case "exec.euser": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.EUser"} } - e.Exec.Process.Credentials.EUser = str + ev.Exec.Process.Credentials.EUser = rv return nil case "exec.file.change_time": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.CTime"} } - e.Exec.Process.FileEvent.FileFields.CTime = uint64(v) + ev.Exec.Process.FileEvent.FileFields.CTime = uint64(rv) return nil case "exec.file.filesystem": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.Filesystem"} } - e.Exec.Process.FileEvent.Filesystem = str + ev.Exec.Process.FileEvent.Filesystem = rv return nil case "exec.file.gid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.GID"} } - e.Exec.Process.FileEvent.FileFields.GID = uint32(v) + ev.Exec.Process.FileEvent.FileFields.GID = uint32(rv) return nil case "exec.file.group": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Group"} } - e.Exec.Process.FileEvent.FileFields.Group = str + ev.Exec.Process.FileEvent.FileFields.Group = rv return nil case "exec.file.in_upper_layer": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - var ok bool - if e.Exec.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.InUpperLayer"} } + ev.Exec.Process.FileEvent.FileFields.InUpperLayer = rv return nil case "exec.file.inode": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Inode"} } - e.Exec.Process.FileEvent.FileFields.Inode = uint64(v) + ev.Exec.Process.FileEvent.FileFields.Inode = uint64(rv) return nil case "exec.file.mode": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Mode"} } - e.Exec.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Exec.Process.FileEvent.FileFields.Mode = uint16(rv) return nil case "exec.file.modification_time": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.MTime"} } - e.Exec.Process.FileEvent.FileFields.MTime = uint64(v) + ev.Exec.Process.FileEvent.FileFields.MTime = uint64(rv) return nil case "exec.file.mount_id": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.MountID"} } - e.Exec.Process.FileEvent.FileFields.MountID = uint32(v) + ev.Exec.Process.FileEvent.FileFields.MountID = uint32(rv) return nil case "exec.file.name": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.BasenameStr"} } - e.Exec.Process.FileEvent.BasenameStr = str + ev.Exec.Process.FileEvent.BasenameStr = rv return nil case "exec.file.name.length": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exec.file.name.length"} case "exec.file.path": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.PathnameStr"} } - e.Exec.Process.FileEvent.PathnameStr = str + ev.Exec.Process.FileEvent.PathnameStr = rv return nil case "exec.file.path.length": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exec.file.path.length"} case "exec.file.rights": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.Mode"} } - e.Exec.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Exec.Process.FileEvent.FileFields.Mode = uint16(rv) return nil case "exec.file.uid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.UID"} } - e.Exec.Process.FileEvent.FileFields.UID = uint32(v) + ev.Exec.Process.FileEvent.FileFields.UID = uint32(rv) return nil case "exec.file.user": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.FileEvent.FileFields.User"} } - e.Exec.Process.FileEvent.FileFields.User = str + ev.Exec.Process.FileEvent.FileFields.User = rv return nil case "exec.fsgid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSGID"} } - e.Exec.Process.Credentials.FSGID = uint32(v) + ev.Exec.Process.Credentials.FSGID = uint32(rv) return nil case "exec.fsgroup": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSGroup"} } - e.Exec.Process.Credentials.FSGroup = str + ev.Exec.Process.Credentials.FSGroup = rv return nil case "exec.fsuid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSUID"} } - e.Exec.Process.Credentials.FSUID = uint32(v) + ev.Exec.Process.Credentials.FSUID = uint32(rv) return nil case "exec.fsuser": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.FSUser"} } - e.Exec.Process.Credentials.FSUser = str + ev.Exec.Process.Credentials.FSUser = rv return nil case "exec.gid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.GID"} } - e.Exec.Process.Credentials.GID = uint32(v) + ev.Exec.Process.Credentials.GID = uint32(rv) return nil case "exec.group": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.Group"} } - e.Exec.Process.Credentials.Group = str + ev.Exec.Process.Credentials.Group = rv return nil case "exec.interpreter.file.change_time": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(rv) return nil case "exec.interpreter.file.filesystem": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.Exec.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.Exec.Process.LinuxBinprm.FileEvent.Filesystem = rv return nil case "exec.interpreter.file.gid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(rv) return nil case "exec.interpreter.file.group": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Group = rv return nil case "exec.interpreter.file.in_upper_layer": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - var ok bool - if e.Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer = rv return nil case "exec.interpreter.file.inode": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(rv) return nil case "exec.interpreter.file.mode": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "exec.interpreter.file.modification_time": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(rv) return nil case "exec.interpreter.file.mount_id": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(rv) return nil case "exec.interpreter.file.name": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.Exec.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.Exec.Process.LinuxBinprm.FileEvent.BasenameStr = rv return nil case "exec.interpreter.file.name.length": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exec.interpreter.file.name.length"} case "exec.interpreter.file.path": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.Exec.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.Exec.Process.LinuxBinprm.FileEvent.PathnameStr = rv return nil case "exec.interpreter.file.path.length": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exec.interpreter.file.path.length"} case "exec.interpreter.file.rights": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "exec.interpreter.file.uid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(rv) return nil case "exec.interpreter.file.user": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.Exec.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.Exec.Process.LinuxBinprm.FileEvent.FileFields.User = rv return nil case "exec.is_kworker": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - var ok bool - if e.Exec.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PIDContext.IsKworker"} } + ev.Exec.Process.PIDContext.IsKworker = rv return nil case "exec.is_thread": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - var ok bool - if e.Exec.Process.IsThread, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.IsThread"} } + ev.Exec.Process.IsThread = rv return nil case "exec.pid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PIDContext.Pid"} } - e.Exec.Process.PIDContext.Pid = uint32(v) + ev.Exec.Process.PIDContext.Pid = uint32(rv) return nil case "exec.ppid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PPid"} } - e.Exec.Process.PPid = uint32(v) + ev.Exec.Process.PPid = uint32(rv) return nil case "exec.tid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.PIDContext.Tid"} } - e.Exec.Process.PIDContext.Tid = uint32(v) + ev.Exec.Process.PIDContext.Tid = uint32(rv) return nil case "exec.tty_name": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.TTYName"} } - e.Exec.Process.TTYName = str + ev.Exec.Process.TTYName = rv return nil case "exec.uid": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.UID"} } - e.Exec.Process.Credentials.UID = uint32(v) + ev.Exec.Process.Credentials.UID = uint32(rv) return nil case "exec.user": - if e.Exec.Process == nil { - e.Exec.Process = &Process{} + if ev.Exec.Process == nil { + ev.Exec.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exec.Process.Credentials.User"} } - e.Exec.Process.Credentials.User = str + ev.Exec.Process.Credentials.User = rv return nil case "exit.args": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Args"} } - e.Exit.Process.Args = str + ev.Exit.Process.Args = rv return nil case "exit.args_flags": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} + } + switch rv := value.(type) { + case string: + ev.Exit.Process.Argv = append(ev.Exit.Process.Argv, rv) + case []string: + ev.Exit.Process.Argv = append(ev.Exit.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv"} } - e.Exit.Process.Argv = append(e.Exit.Process.Argv, str) return nil case "exit.args_options": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} + } + switch rv := value.(type) { + case string: + ev.Exit.Process.Argv = append(ev.Exit.Process.Argv, rv) + case []string: + ev.Exit.Process.Argv = append(ev.Exit.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv"} } - e.Exit.Process.Argv = append(e.Exit.Process.Argv, str) return nil case "exit.args_truncated": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - var ok bool - if e.Exit.Process.ArgsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.ArgsTruncated"} } + ev.Exit.Process.ArgsTruncated = rv return nil case "exit.argv": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} + } + switch rv := value.(type) { + case string: + ev.Exit.Process.Argv = append(ev.Exit.Process.Argv, rv) + case []string: + ev.Exit.Process.Argv = append(ev.Exit.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv"} } - e.Exit.Process.Argv = append(e.Exit.Process.Argv, str) return nil case "exit.argv0": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Argv0"} } - e.Exit.Process.Argv0 = str + ev.Exit.Process.Argv0 = rv return nil case "exit.cap_effective": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.CapEffective"} } - e.Exit.Process.Credentials.CapEffective = uint64(v) + ev.Exit.Process.Credentials.CapEffective = uint64(rv) return nil case "exit.cap_permitted": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.CapPermitted"} } - e.Exit.Process.Credentials.CapPermitted = uint64(v) + ev.Exit.Process.Credentials.CapPermitted = uint64(rv) return nil case "exit.cause": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Cause"} } - e.Exit.Cause = uint32(v) + ev.Exit.Cause = uint32(rv) return nil case "exit.code": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Code"} } - e.Exit.Code = uint32(v) + ev.Exit.Code = uint32(rv) return nil case "exit.comm": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Comm"} } - e.Exit.Process.Comm = str + ev.Exit.Process.Comm = rv return nil case "exit.container.id": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.ContainerID"} } - e.Exit.Process.ContainerID = str + ev.Exit.Process.ContainerID = rv return nil case "exit.cookie": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Cookie"} } - e.Exit.Process.Cookie = uint32(v) + ev.Exit.Process.Cookie = uint32(rv) return nil case "exit.created_at": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.CreatedAt"} } - e.Exit.Process.CreatedAt = uint64(v) + ev.Exit.Process.CreatedAt = uint64(rv) return nil case "exit.egid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EGID"} } - e.Exit.Process.Credentials.EGID = uint32(v) + ev.Exit.Process.Credentials.EGID = uint32(rv) return nil case "exit.egroup": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EGroup"} } - e.Exit.Process.Credentials.EGroup = str + ev.Exit.Process.Credentials.EGroup = rv return nil case "exit.envp": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} + } + switch rv := value.(type) { + case string: + ev.Exit.Process.Envp = append(ev.Exit.Process.Envp, rv) + case []string: + ev.Exit.Process.Envp = append(ev.Exit.Process.Envp, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Envp"} } - e.Exit.Process.Envp = append(e.Exit.Process.Envp, str) return nil case "exit.envs": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} + } + switch rv := value.(type) { + case string: + ev.Exit.Process.Envs = append(ev.Exit.Process.Envs, rv) + case []string: + ev.Exit.Process.Envs = append(ev.Exit.Process.Envs, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Envs"} } - e.Exit.Process.Envs = append(e.Exit.Process.Envs, str) return nil case "exit.envs_truncated": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - var ok bool - if e.Exit.Process.EnvsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.EnvsTruncated"} } + ev.Exit.Process.EnvsTruncated = rv return nil case "exit.euid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EUID"} } - e.Exit.Process.Credentials.EUID = uint32(v) + ev.Exit.Process.Credentials.EUID = uint32(rv) return nil case "exit.euser": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.EUser"} } - e.Exit.Process.Credentials.EUser = str + ev.Exit.Process.Credentials.EUser = rv return nil case "exit.file.change_time": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.CTime"} } - e.Exit.Process.FileEvent.FileFields.CTime = uint64(v) + ev.Exit.Process.FileEvent.FileFields.CTime = uint64(rv) return nil case "exit.file.filesystem": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.Filesystem"} } - e.Exit.Process.FileEvent.Filesystem = str + ev.Exit.Process.FileEvent.Filesystem = rv return nil case "exit.file.gid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.GID"} } - e.Exit.Process.FileEvent.FileFields.GID = uint32(v) + ev.Exit.Process.FileEvent.FileFields.GID = uint32(rv) return nil case "exit.file.group": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Group"} } - e.Exit.Process.FileEvent.FileFields.Group = str + ev.Exit.Process.FileEvent.FileFields.Group = rv return nil case "exit.file.in_upper_layer": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - var ok bool - if e.Exit.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.InUpperLayer"} } + ev.Exit.Process.FileEvent.FileFields.InUpperLayer = rv return nil case "exit.file.inode": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Inode"} } - e.Exit.Process.FileEvent.FileFields.Inode = uint64(v) + ev.Exit.Process.FileEvent.FileFields.Inode = uint64(rv) return nil case "exit.file.mode": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Mode"} } - e.Exit.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Exit.Process.FileEvent.FileFields.Mode = uint16(rv) return nil case "exit.file.modification_time": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.MTime"} } - e.Exit.Process.FileEvent.FileFields.MTime = uint64(v) + ev.Exit.Process.FileEvent.FileFields.MTime = uint64(rv) return nil case "exit.file.mount_id": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.MountID"} } - e.Exit.Process.FileEvent.FileFields.MountID = uint32(v) + ev.Exit.Process.FileEvent.FileFields.MountID = uint32(rv) return nil case "exit.file.name": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.BasenameStr"} } - e.Exit.Process.FileEvent.BasenameStr = str + ev.Exit.Process.FileEvent.BasenameStr = rv return nil case "exit.file.name.length": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exit.file.name.length"} case "exit.file.path": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.PathnameStr"} } - e.Exit.Process.FileEvent.PathnameStr = str + ev.Exit.Process.FileEvent.PathnameStr = rv return nil case "exit.file.path.length": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exit.file.path.length"} case "exit.file.rights": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.Mode"} } - e.Exit.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Exit.Process.FileEvent.FileFields.Mode = uint16(rv) return nil case "exit.file.uid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.UID"} } - e.Exit.Process.FileEvent.FileFields.UID = uint32(v) + ev.Exit.Process.FileEvent.FileFields.UID = uint32(rv) return nil case "exit.file.user": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.FileEvent.FileFields.User"} } - e.Exit.Process.FileEvent.FileFields.User = str + ev.Exit.Process.FileEvent.FileFields.User = rv return nil case "exit.fsgid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSGID"} } - e.Exit.Process.Credentials.FSGID = uint32(v) + ev.Exit.Process.Credentials.FSGID = uint32(rv) return nil case "exit.fsgroup": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSGroup"} } - e.Exit.Process.Credentials.FSGroup = str + ev.Exit.Process.Credentials.FSGroup = rv return nil case "exit.fsuid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSUID"} } - e.Exit.Process.Credentials.FSUID = uint32(v) + ev.Exit.Process.Credentials.FSUID = uint32(rv) return nil case "exit.fsuser": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.FSUser"} } - e.Exit.Process.Credentials.FSUser = str + ev.Exit.Process.Credentials.FSUser = rv return nil case "exit.gid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.GID"} } - e.Exit.Process.Credentials.GID = uint32(v) + ev.Exit.Process.Credentials.GID = uint32(rv) return nil case "exit.group": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.Group"} } - e.Exit.Process.Credentials.Group = str + ev.Exit.Process.Credentials.Group = rv return nil case "exit.interpreter.file.change_time": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(rv) return nil case "exit.interpreter.file.filesystem": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.Exit.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.Exit.Process.LinuxBinprm.FileEvent.Filesystem = rv return nil case "exit.interpreter.file.gid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(rv) return nil case "exit.interpreter.file.group": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Group = rv return nil case "exit.interpreter.file.in_upper_layer": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - var ok bool - if e.Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer = rv return nil case "exit.interpreter.file.inode": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(rv) return nil case "exit.interpreter.file.mode": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "exit.interpreter.file.modification_time": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(rv) return nil case "exit.interpreter.file.mount_id": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(rv) return nil case "exit.interpreter.file.name": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.Exit.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.Exit.Process.LinuxBinprm.FileEvent.BasenameStr = rv return nil case "exit.interpreter.file.name.length": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exit.interpreter.file.name.length"} case "exit.interpreter.file.path": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.Exit.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.Exit.Process.LinuxBinprm.FileEvent.PathnameStr = rv return nil case "exit.interpreter.file.path.length": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } return &eval.ErrFieldReadOnly{Field: "exit.interpreter.file.path.length"} case "exit.interpreter.file.rights": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "exit.interpreter.file.uid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(rv) return nil case "exit.interpreter.file.user": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.Exit.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.Exit.Process.LinuxBinprm.FileEvent.FileFields.User = rv return nil case "exit.is_kworker": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - var ok bool - if e.Exit.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PIDContext.IsKworker"} } + ev.Exit.Process.PIDContext.IsKworker = rv return nil case "exit.is_thread": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - var ok bool - if e.Exit.Process.IsThread, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.IsThread"} } + ev.Exit.Process.IsThread = rv return nil case "exit.pid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PIDContext.Pid"} } - e.Exit.Process.PIDContext.Pid = uint32(v) + ev.Exit.Process.PIDContext.Pid = uint32(rv) return nil case "exit.ppid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PPid"} } - e.Exit.Process.PPid = uint32(v) + ev.Exit.Process.PPid = uint32(rv) return nil case "exit.tid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.PIDContext.Tid"} } - e.Exit.Process.PIDContext.Tid = uint32(v) + ev.Exit.Process.PIDContext.Tid = uint32(rv) return nil case "exit.tty_name": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.TTYName"} } - e.Exit.Process.TTYName = str + ev.Exit.Process.TTYName = rv return nil case "exit.uid": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.UID"} } - e.Exit.Process.Credentials.UID = uint32(v) + ev.Exit.Process.Credentials.UID = uint32(rv) return nil case "exit.user": - if e.Exit.Process == nil { - e.Exit.Process = &Process{} + if ev.Exit.Process == nil { + ev.Exit.Process = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Exit.Process.Credentials.User"} } - e.Exit.Process.Credentials.User = str + ev.Exit.Process.Credentials.User = rv return nil case "link.file.change_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.CTime"} } - e.Link.Source.FileFields.CTime = uint64(v) + ev.Link.Source.FileFields.CTime = uint64(rv) return nil case "link.file.destination.change_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.CTime"} } - e.Link.Target.FileFields.CTime = uint64(v) + ev.Link.Target.FileFields.CTime = uint64(rv) return nil case "link.file.destination.filesystem": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.Filesystem"} } - e.Link.Target.Filesystem = str + ev.Link.Target.Filesystem = rv return nil case "link.file.destination.gid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.GID"} } - e.Link.Target.FileFields.GID = uint32(v) + ev.Link.Target.FileFields.GID = uint32(rv) return nil case "link.file.destination.group": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Group"} } - e.Link.Target.FileFields.Group = str + ev.Link.Target.FileFields.Group = rv return nil case "link.file.destination.in_upper_layer": - var ok bool - if e.Link.Target.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.InUpperLayer"} } + ev.Link.Target.FileFields.InUpperLayer = rv return nil case "link.file.destination.inode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Inode"} } - e.Link.Target.FileFields.Inode = uint64(v) + ev.Link.Target.FileFields.Inode = uint64(rv) return nil case "link.file.destination.mode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Mode"} } - e.Link.Target.FileFields.Mode = uint16(v) + ev.Link.Target.FileFields.Mode = uint16(rv) return nil case "link.file.destination.modification_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.MTime"} } - e.Link.Target.FileFields.MTime = uint64(v) + ev.Link.Target.FileFields.MTime = uint64(rv) return nil case "link.file.destination.mount_id": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.MountID"} } - e.Link.Target.FileFields.MountID = uint32(v) + ev.Link.Target.FileFields.MountID = uint32(rv) return nil case "link.file.destination.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.BasenameStr"} } - e.Link.Target.BasenameStr = str + ev.Link.Target.BasenameStr = rv return nil case "link.file.destination.name.length": return &eval.ErrFieldReadOnly{Field: "link.file.destination.name.length"} case "link.file.destination.path": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.PathnameStr"} } - e.Link.Target.PathnameStr = str + ev.Link.Target.PathnameStr = rv return nil case "link.file.destination.path.length": return &eval.ErrFieldReadOnly{Field: "link.file.destination.path.length"} case "link.file.destination.rights": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.Mode"} } - e.Link.Target.FileFields.Mode = uint16(v) + ev.Link.Target.FileFields.Mode = uint16(rv) return nil case "link.file.destination.uid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.UID"} } - e.Link.Target.FileFields.UID = uint32(v) + ev.Link.Target.FileFields.UID = uint32(rv) return nil case "link.file.destination.user": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Target.FileFields.User"} } - e.Link.Target.FileFields.User = str + ev.Link.Target.FileFields.User = rv return nil case "link.file.filesystem": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.Filesystem"} } - e.Link.Source.Filesystem = str + ev.Link.Source.Filesystem = rv return nil case "link.file.gid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.GID"} } - e.Link.Source.FileFields.GID = uint32(v) + ev.Link.Source.FileFields.GID = uint32(rv) return nil case "link.file.group": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Group"} } - e.Link.Source.FileFields.Group = str + ev.Link.Source.FileFields.Group = rv return nil case "link.file.in_upper_layer": - var ok bool - if e.Link.Source.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.InUpperLayer"} } + ev.Link.Source.FileFields.InUpperLayer = rv return nil case "link.file.inode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Inode"} } - e.Link.Source.FileFields.Inode = uint64(v) + ev.Link.Source.FileFields.Inode = uint64(rv) return nil case "link.file.mode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Mode"} } - e.Link.Source.FileFields.Mode = uint16(v) + ev.Link.Source.FileFields.Mode = uint16(rv) return nil case "link.file.modification_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.MTime"} } - e.Link.Source.FileFields.MTime = uint64(v) + ev.Link.Source.FileFields.MTime = uint64(rv) return nil case "link.file.mount_id": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.MountID"} } - e.Link.Source.FileFields.MountID = uint32(v) + ev.Link.Source.FileFields.MountID = uint32(rv) return nil case "link.file.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.BasenameStr"} } - e.Link.Source.BasenameStr = str + ev.Link.Source.BasenameStr = rv return nil case "link.file.name.length": return &eval.ErrFieldReadOnly{Field: "link.file.name.length"} case "link.file.path": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.PathnameStr"} } - e.Link.Source.PathnameStr = str + ev.Link.Source.PathnameStr = rv return nil case "link.file.path.length": return &eval.ErrFieldReadOnly{Field: "link.file.path.length"} case "link.file.rights": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.Mode"} } - e.Link.Source.FileFields.Mode = uint16(v) + ev.Link.Source.FileFields.Mode = uint16(rv) return nil case "link.file.uid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.UID"} } - e.Link.Source.FileFields.UID = uint32(v) + ev.Link.Source.FileFields.UID = uint32(rv) return nil case "link.file.user": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.Source.FileFields.User"} } - e.Link.Source.FileFields.User = str + ev.Link.Source.FileFields.User = rv return nil case "link.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Link.SyscallEvent.Retval"} } - e.Link.SyscallEvent.Retval = int64(v) + ev.Link.SyscallEvent.Retval = int64(rv) return nil case "load_module.file.change_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.CTime"} } - e.LoadModule.File.FileFields.CTime = uint64(v) + ev.LoadModule.File.FileFields.CTime = uint64(rv) return nil case "load_module.file.filesystem": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.Filesystem"} } - e.LoadModule.File.Filesystem = str + ev.LoadModule.File.Filesystem = rv return nil case "load_module.file.gid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.GID"} } - e.LoadModule.File.FileFields.GID = uint32(v) + ev.LoadModule.File.FileFields.GID = uint32(rv) return nil case "load_module.file.group": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Group"} } - e.LoadModule.File.FileFields.Group = str + ev.LoadModule.File.FileFields.Group = rv return nil case "load_module.file.in_upper_layer": - var ok bool - if e.LoadModule.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.InUpperLayer"} } + ev.LoadModule.File.FileFields.InUpperLayer = rv return nil case "load_module.file.inode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Inode"} } - e.LoadModule.File.FileFields.Inode = uint64(v) + ev.LoadModule.File.FileFields.Inode = uint64(rv) return nil case "load_module.file.mode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Mode"} } - e.LoadModule.File.FileFields.Mode = uint16(v) + ev.LoadModule.File.FileFields.Mode = uint16(rv) return nil case "load_module.file.modification_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.MTime"} } - e.LoadModule.File.FileFields.MTime = uint64(v) + ev.LoadModule.File.FileFields.MTime = uint64(rv) return nil case "load_module.file.mount_id": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.MountID"} } - e.LoadModule.File.FileFields.MountID = uint32(v) + ev.LoadModule.File.FileFields.MountID = uint32(rv) return nil case "load_module.file.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.BasenameStr"} } - e.LoadModule.File.BasenameStr = str + ev.LoadModule.File.BasenameStr = rv return nil case "load_module.file.name.length": return &eval.ErrFieldReadOnly{Field: "load_module.file.name.length"} case "load_module.file.path": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.PathnameStr"} } - e.LoadModule.File.PathnameStr = str + ev.LoadModule.File.PathnameStr = rv return nil case "load_module.file.path.length": return &eval.ErrFieldReadOnly{Field: "load_module.file.path.length"} case "load_module.file.rights": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.Mode"} } - e.LoadModule.File.FileFields.Mode = uint16(v) + ev.LoadModule.File.FileFields.Mode = uint16(rv) return nil case "load_module.file.uid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.UID"} } - e.LoadModule.File.FileFields.UID = uint32(v) + ev.LoadModule.File.FileFields.UID = uint32(rv) return nil case "load_module.file.user": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.File.FileFields.User"} } - e.LoadModule.File.FileFields.User = str + ev.LoadModule.File.FileFields.User = rv return nil case "load_module.loaded_from_memory": - var ok bool - if e.LoadModule.LoadedFromMemory, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.LoadedFromMemory"} } + ev.LoadModule.LoadedFromMemory = rv return nil case "load_module.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.Name"} } - e.LoadModule.Name = str + ev.LoadModule.Name = rv return nil case "load_module.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "LoadModule.SyscallEvent.Retval"} } - e.LoadModule.SyscallEvent.Retval = int64(v) + ev.LoadModule.SyscallEvent.Retval = int64(rv) return nil case "mkdir.file.change_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.CTime"} } - e.Mkdir.File.FileFields.CTime = uint64(v) + ev.Mkdir.File.FileFields.CTime = uint64(rv) return nil case "mkdir.file.destination.mode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.Mode"} } - e.Mkdir.Mode = uint32(v) + ev.Mkdir.Mode = uint32(rv) return nil case "mkdir.file.destination.rights": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.Mode"} } - e.Mkdir.Mode = uint32(v) + ev.Mkdir.Mode = uint32(rv) return nil case "mkdir.file.filesystem": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.Filesystem"} } - e.Mkdir.File.Filesystem = str + ev.Mkdir.File.Filesystem = rv return nil case "mkdir.file.gid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.GID"} } - e.Mkdir.File.FileFields.GID = uint32(v) + ev.Mkdir.File.FileFields.GID = uint32(rv) return nil case "mkdir.file.group": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Group"} } - e.Mkdir.File.FileFields.Group = str + ev.Mkdir.File.FileFields.Group = rv return nil case "mkdir.file.in_upper_layer": - var ok bool - if e.Mkdir.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.InUpperLayer"} } + ev.Mkdir.File.FileFields.InUpperLayer = rv return nil case "mkdir.file.inode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Inode"} } - e.Mkdir.File.FileFields.Inode = uint64(v) + ev.Mkdir.File.FileFields.Inode = uint64(rv) return nil case "mkdir.file.mode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Mode"} } - e.Mkdir.File.FileFields.Mode = uint16(v) + ev.Mkdir.File.FileFields.Mode = uint16(rv) return nil case "mkdir.file.modification_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.MTime"} } - e.Mkdir.File.FileFields.MTime = uint64(v) + ev.Mkdir.File.FileFields.MTime = uint64(rv) return nil case "mkdir.file.mount_id": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.MountID"} } - e.Mkdir.File.FileFields.MountID = uint32(v) + ev.Mkdir.File.FileFields.MountID = uint32(rv) return nil case "mkdir.file.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.BasenameStr"} } - e.Mkdir.File.BasenameStr = str + ev.Mkdir.File.BasenameStr = rv return nil case "mkdir.file.name.length": return &eval.ErrFieldReadOnly{Field: "mkdir.file.name.length"} case "mkdir.file.path": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.PathnameStr"} } - e.Mkdir.File.PathnameStr = str + ev.Mkdir.File.PathnameStr = rv return nil case "mkdir.file.path.length": return &eval.ErrFieldReadOnly{Field: "mkdir.file.path.length"} case "mkdir.file.rights": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.Mode"} } - e.Mkdir.File.FileFields.Mode = uint16(v) + ev.Mkdir.File.FileFields.Mode = uint16(rv) return nil case "mkdir.file.uid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.UID"} } - e.Mkdir.File.FileFields.UID = uint32(v) + ev.Mkdir.File.FileFields.UID = uint32(rv) return nil case "mkdir.file.user": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.File.FileFields.User"} } - e.Mkdir.File.FileFields.User = str + ev.Mkdir.File.FileFields.User = rv return nil case "mkdir.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mkdir.SyscallEvent.Retval"} } - e.Mkdir.SyscallEvent.Retval = int64(v) + ev.Mkdir.SyscallEvent.Retval = int64(rv) return nil case "mmap.file.change_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.CTime"} } - e.MMap.File.FileFields.CTime = uint64(v) + ev.MMap.File.FileFields.CTime = uint64(rv) return nil case "mmap.file.filesystem": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.Filesystem"} } - e.MMap.File.Filesystem = str + ev.MMap.File.Filesystem = rv return nil case "mmap.file.gid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.GID"} } - e.MMap.File.FileFields.GID = uint32(v) + ev.MMap.File.FileFields.GID = uint32(rv) return nil case "mmap.file.group": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Group"} } - e.MMap.File.FileFields.Group = str + ev.MMap.File.FileFields.Group = rv return nil case "mmap.file.in_upper_layer": - var ok bool - if e.MMap.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.InUpperLayer"} } + ev.MMap.File.FileFields.InUpperLayer = rv return nil case "mmap.file.inode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Inode"} } - e.MMap.File.FileFields.Inode = uint64(v) + ev.MMap.File.FileFields.Inode = uint64(rv) return nil case "mmap.file.mode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Mode"} } - e.MMap.File.FileFields.Mode = uint16(v) + ev.MMap.File.FileFields.Mode = uint16(rv) return nil case "mmap.file.modification_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.MTime"} } - e.MMap.File.FileFields.MTime = uint64(v) + ev.MMap.File.FileFields.MTime = uint64(rv) return nil case "mmap.file.mount_id": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.MountID"} } - e.MMap.File.FileFields.MountID = uint32(v) + ev.MMap.File.FileFields.MountID = uint32(rv) return nil case "mmap.file.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.BasenameStr"} } - e.MMap.File.BasenameStr = str + ev.MMap.File.BasenameStr = rv return nil case "mmap.file.name.length": return &eval.ErrFieldReadOnly{Field: "mmap.file.name.length"} case "mmap.file.path": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.PathnameStr"} } - e.MMap.File.PathnameStr = str + ev.MMap.File.PathnameStr = rv return nil case "mmap.file.path.length": return &eval.ErrFieldReadOnly{Field: "mmap.file.path.length"} case "mmap.file.rights": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.Mode"} } - e.MMap.File.FileFields.Mode = uint16(v) + ev.MMap.File.FileFields.Mode = uint16(rv) return nil case "mmap.file.uid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.UID"} } - e.MMap.File.FileFields.UID = uint32(v) + ev.MMap.File.FileFields.UID = uint32(rv) return nil case "mmap.file.user": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.File.FileFields.User"} } - e.MMap.File.FileFields.User = str + ev.MMap.File.FileFields.User = rv return nil case "mmap.flags": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.Flags"} } - e.MMap.Flags = int(v) + ev.MMap.Flags = int(rv) return nil case "mmap.protection": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.Protection"} } - e.MMap.Protection = int(v) + ev.MMap.Protection = int(rv) return nil case "mmap.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MMap.SyscallEvent.Retval"} } - e.MMap.SyscallEvent.Retval = int64(v) + ev.MMap.SyscallEvent.Retval = int64(rv) return nil case "mount.fs_type": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mount.Mount.FSType"} } - e.Mount.Mount.FSType = str + ev.Mount.Mount.FSType = rv return nil case "mount.mountpoint.path": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mount.MountPointPath"} } - e.Mount.MountPointPath = str + ev.Mount.MountPointPath = rv return nil case "mount.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mount.SyscallEvent.Retval"} } - e.Mount.SyscallEvent.Retval = int64(v) + ev.Mount.SyscallEvent.Retval = int64(rv) return nil case "mount.source.path": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Mount.MountSourcePath"} } - e.Mount.MountSourcePath = str + ev.Mount.MountSourcePath = rv return nil case "mprotect.req_protection": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MProtect.ReqProtection"} } - e.MProtect.ReqProtection = int(v) + ev.MProtect.ReqProtection = int(rv) return nil case "mprotect.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MProtect.SyscallEvent.Retval"} } - e.MProtect.SyscallEvent.Retval = int64(v) + ev.MProtect.SyscallEvent.Retval = int64(rv) return nil case "mprotect.vm_protection": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "MProtect.VMProtection"} } - e.MProtect.VMProtection = int(v) + ev.MProtect.VMProtection = int(rv) return nil case "network.destination.ip": - v, ok := value.(net.IPNet) + rv, ok := value.(net.IPNet) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Destination.IPNet"} } - e.NetworkContext.Destination.IPNet = v + ev.NetworkContext.Destination.IPNet = rv return nil case "network.destination.port": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Destination.Port"} } - e.NetworkContext.Destination.Port = uint16(v) + ev.NetworkContext.Destination.Port = uint16(rv) return nil case "network.device.ifindex": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Device.IfIndex"} } - e.NetworkContext.Device.IfIndex = uint32(v) + ev.NetworkContext.Device.IfIndex = uint32(rv) return nil case "network.device.ifname": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Device.IfName"} } - e.NetworkContext.Device.IfName = str + ev.NetworkContext.Device.IfName = rv return nil case "network.l3_protocol": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.L3Protocol"} } - e.NetworkContext.L3Protocol = uint16(v) + ev.NetworkContext.L3Protocol = uint16(rv) return nil case "network.l4_protocol": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.L4Protocol"} } - e.NetworkContext.L4Protocol = uint16(v) + ev.NetworkContext.L4Protocol = uint16(rv) return nil case "network.size": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Size"} } - e.NetworkContext.Size = uint32(v) + ev.NetworkContext.Size = uint32(rv) return nil case "network.source.ip": - v, ok := value.(net.IPNet) + rv, ok := value.(net.IPNet) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Source.IPNet"} } - e.NetworkContext.Source.IPNet = v + ev.NetworkContext.Source.IPNet = rv return nil case "network.source.port": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "NetworkContext.Source.Port"} } - e.NetworkContext.Source.Port = uint16(v) + ev.NetworkContext.Source.Port = uint16(rv) return nil case "open.file.change_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.CTime"} } - e.Open.File.FileFields.CTime = uint64(v) + ev.Open.File.FileFields.CTime = uint64(rv) return nil case "open.file.destination.mode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.Mode"} } - e.Open.Mode = uint32(v) + ev.Open.Mode = uint32(rv) return nil case "open.file.filesystem": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.Filesystem"} } - e.Open.File.Filesystem = str + ev.Open.File.Filesystem = rv return nil case "open.file.gid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.GID"} } - e.Open.File.FileFields.GID = uint32(v) + ev.Open.File.FileFields.GID = uint32(rv) return nil case "open.file.group": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Group"} } - e.Open.File.FileFields.Group = str + ev.Open.File.FileFields.Group = rv return nil case "open.file.in_upper_layer": - var ok bool - if e.Open.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.InUpperLayer"} } + ev.Open.File.FileFields.InUpperLayer = rv return nil case "open.file.inode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Inode"} } - e.Open.File.FileFields.Inode = uint64(v) + ev.Open.File.FileFields.Inode = uint64(rv) return nil case "open.file.mode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Mode"} } - e.Open.File.FileFields.Mode = uint16(v) + ev.Open.File.FileFields.Mode = uint16(rv) return nil case "open.file.modification_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.MTime"} } - e.Open.File.FileFields.MTime = uint64(v) + ev.Open.File.FileFields.MTime = uint64(rv) return nil case "open.file.mount_id": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.MountID"} } - e.Open.File.FileFields.MountID = uint32(v) + ev.Open.File.FileFields.MountID = uint32(rv) return nil case "open.file.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.BasenameStr"} } - e.Open.File.BasenameStr = str + ev.Open.File.BasenameStr = rv return nil case "open.file.name.length": return &eval.ErrFieldReadOnly{Field: "open.file.name.length"} case "open.file.path": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.PathnameStr"} } - e.Open.File.PathnameStr = str + ev.Open.File.PathnameStr = rv return nil case "open.file.path.length": return &eval.ErrFieldReadOnly{Field: "open.file.path.length"} case "open.file.rights": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.Mode"} } - e.Open.File.FileFields.Mode = uint16(v) + ev.Open.File.FileFields.Mode = uint16(rv) return nil case "open.file.uid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.UID"} } - e.Open.File.FileFields.UID = uint32(v) + ev.Open.File.FileFields.UID = uint32(rv) return nil case "open.file.user": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.File.FileFields.User"} } - e.Open.File.FileFields.User = str + ev.Open.File.FileFields.User = rv return nil case "open.flags": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.Flags"} } - e.Open.Flags = uint32(v) + ev.Open.Flags = uint32(rv) return nil case "open.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Open.SyscallEvent.Retval"} } - e.Open.SyscallEvent.Retval = int64(v) + ev.Open.SyscallEvent.Retval = int64(rv) return nil case "process.ancestors.args": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Args"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Args = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Args = rv return nil case "process.ancestors.args_flags": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} + } + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} + } + switch rv := value.(type) { + case string: + ev.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Argv, rv) + case []string: + ev.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(e.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) return nil case "process.ancestors.args_options": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} + } + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} + } + switch rv := value.(type) { + case string: + ev.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Argv, rv) + case []string: + ev.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(e.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) return nil case "process.ancestors.args_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.ArgsTruncated"} } + ev.ProcessContext.Ancestor.ProcessContext.Process.ArgsTruncated = rv return nil case "process.ancestors.argv": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} + } + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} + } + switch rv := value.(type) { + case string: + ev.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Argv, rv) + case []string: + ev.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv = append(e.ProcessContext.Ancestor.ProcessContext.Process.Argv, str) return nil case "process.ancestors.argv0": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Argv0"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Argv0 = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Argv0 = rv return nil case "process.ancestors.cap_effective": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapEffective"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(rv) return nil case "process.ancestors.cap_permitted": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapPermitted"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(rv) return nil case "process.ancestors.comm": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Comm"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Comm = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Comm = rv return nil case "process.ancestors.container.id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.ContainerID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.ContainerID = str + ev.ProcessContext.Ancestor.ProcessContext.Process.ContainerID = rv return nil case "process.ancestors.cookie": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Cookie"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Cookie = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Cookie = uint32(rv) return nil case "process.ancestors.created_at": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.CreatedAt"} } - e.ProcessContext.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.CreatedAt = uint64(rv) return nil case "process.ancestors.egid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(rv) return nil case "process.ancestors.egroup": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGroup"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGroup = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EGroup = rv return nil case "process.ancestors.envp": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} + } + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} + } + switch rv := value.(type) { + case string: + ev.ProcessContext.Ancestor.ProcessContext.Process.Envp = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Envp, rv) + case []string: + ev.ProcessContext.Ancestor.ProcessContext.Process.Envp = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Envp, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Envp"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Envp = append(e.ProcessContext.Ancestor.ProcessContext.Process.Envp, str) return nil case "process.ancestors.envs": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} - } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} + } + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} + } + switch rv := value.(type) { + case string: + ev.ProcessContext.Ancestor.ProcessContext.Process.Envs = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Envs, rv) + case []string: + ev.ProcessContext.Ancestor.ProcessContext.Process.Envs = append(ev.ProcessContext.Ancestor.ProcessContext.Process.Envs, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Envs"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Envs = append(e.ProcessContext.Ancestor.ProcessContext.Process.Envs, str) return nil case "process.ancestors.envs_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.EnvsTruncated"} } + ev.ProcessContext.Ancestor.ProcessContext.Process.EnvsTruncated = rv return nil case "process.ancestors.euid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(rv) return nil case "process.ancestors.euser": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUser"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUser = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.EUser = rv return nil case "process.ancestors.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(rv) return nil case "process.ancestors.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.Filesystem"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.Filesystem = rv return nil case "process.ancestors.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(rv) return nil case "process.ancestors.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = rv return nil case "process.ancestors.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} } + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer = rv return nil case "process.ancestors.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(rv) return nil case "process.ancestors.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(rv) return nil case "process.ancestors.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(rv) return nil case "process.ancestors.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(rv) return nil case "process.ancestors.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.BasenameStr"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = rv return nil case "process.ancestors.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "process.ancestors.file.name.length"} case "process.ancestors.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.PathnameStr"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = rv return nil case "process.ancestors.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "process.ancestors.file.path.length"} case "process.ancestors.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(rv) return nil case "process.ancestors.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(rv) return nil case "process.ancestors.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.User"} } - e.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str + ev.ProcessContext.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = rv return nil case "process.ancestors.fsgid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(rv) return nil case "process.ancestors.fsgroup": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGroup"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGroup = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSGroup = rv return nil case "process.ancestors.fsuid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(rv) return nil case "process.ancestors.fsuser": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUser"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUser = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.FSUser = rv return nil case "process.ancestors.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.GID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.GID = uint32(rv) return nil case "process.ancestors.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.Group"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.Group = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.Group = rv return nil case "process.ancestors.interpreter.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(rv) return nil case "process.ancestors.interpreter.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = rv return nil case "process.ancestors.interpreter.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(rv) return nil case "process.ancestors.interpreter.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = rv return nil case "process.ancestors.interpreter.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer = rv return nil case "process.ancestors.interpreter.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(rv) return nil case "process.ancestors.interpreter.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "process.ancestors.interpreter.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(rv) return nil case "process.ancestors.interpreter.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(rv) return nil case "process.ancestors.interpreter.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = rv return nil case "process.ancestors.interpreter.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "process.ancestors.interpreter.file.name.length"} case "process.ancestors.interpreter.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = rv return nil case "process.ancestors.interpreter.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "process.ancestors.interpreter.file.path.length"} case "process.ancestors.interpreter.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "process.ancestors.interpreter.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(rv) return nil case "process.ancestors.interpreter.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.ProcessContext.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = rv return nil case "process.ancestors.is_kworker": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PIDContext.IsKworker"} } + ev.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.IsKworker = rv return nil case "process.ancestors.is_thread": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - var ok bool - if e.ProcessContext.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.IsThread"} } + ev.ProcessContext.Ancestor.ProcessContext.Process.IsThread = rv return nil case "process.ancestors.pid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Pid"} } - e.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(rv) return nil case "process.ancestors.ppid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PPid"} } - e.ProcessContext.Ancestor.ProcessContext.Process.PPid = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.PPid = uint32(rv) return nil case "process.ancestors.tid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Tid"} } - e.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(rv) return nil case "process.ancestors.tty_name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.TTYName"} } - e.ProcessContext.Ancestor.ProcessContext.Process.TTYName = str + ev.ProcessContext.Ancestor.ProcessContext.Process.TTYName = rv return nil case "process.ancestors.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.UID"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.UID = uint32(rv) return nil case "process.ancestors.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Ancestor == nil { - e.ProcessContext.Ancestor = &ProcessCacheEntry{} + if ev.ProcessContext.Ancestor == nil { + ev.ProcessContext.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Ancestor.ProcessContext.Process.Credentials.User"} } - e.ProcessContext.Ancestor.ProcessContext.Process.Credentials.User = str + ev.ProcessContext.Ancestor.ProcessContext.Process.Credentials.User = rv return nil case "process.args": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Args"} } - e.ProcessContext.Process.Args = str + ev.ProcessContext.Process.Args = rv return nil case "process.args_flags": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} - } - str, ok := value.(string) - if !ok { + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} + } + switch rv := value.(type) { + case string: + ev.ProcessContext.Process.Argv = append(ev.ProcessContext.Process.Argv, rv) + case []string: + ev.ProcessContext.Process.Argv = append(ev.ProcessContext.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv"} } - e.ProcessContext.Process.Argv = append(e.ProcessContext.Process.Argv, str) return nil case "process.args_options": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} - } - str, ok := value.(string) - if !ok { + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} + } + switch rv := value.(type) { + case string: + ev.ProcessContext.Process.Argv = append(ev.ProcessContext.Process.Argv, rv) + case []string: + ev.ProcessContext.Process.Argv = append(ev.ProcessContext.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv"} } - e.ProcessContext.Process.Argv = append(e.ProcessContext.Process.Argv, str) return nil case "process.args_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - var ok bool - if e.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.ArgsTruncated"} } + ev.ProcessContext.Process.ArgsTruncated = rv return nil case "process.argv": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} - } - str, ok := value.(string) - if !ok { + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} + } + switch rv := value.(type) { + case string: + ev.ProcessContext.Process.Argv = append(ev.ProcessContext.Process.Argv, rv) + case []string: + ev.ProcessContext.Process.Argv = append(ev.ProcessContext.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv"} } - e.ProcessContext.Process.Argv = append(e.ProcessContext.Process.Argv, str) return nil case "process.argv0": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Argv0"} } - e.ProcessContext.Process.Argv0 = str + ev.ProcessContext.Process.Argv0 = rv return nil case "process.cap_effective": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.CapEffective"} } - e.ProcessContext.Process.Credentials.CapEffective = uint64(v) + ev.ProcessContext.Process.Credentials.CapEffective = uint64(rv) return nil case "process.cap_permitted": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.CapPermitted"} } - e.ProcessContext.Process.Credentials.CapPermitted = uint64(v) + ev.ProcessContext.Process.Credentials.CapPermitted = uint64(rv) return nil case "process.comm": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Comm"} } - e.ProcessContext.Process.Comm = str + ev.ProcessContext.Process.Comm = rv return nil case "process.container.id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.ContainerID"} } - e.ProcessContext.Process.ContainerID = str + ev.ProcessContext.Process.ContainerID = rv return nil case "process.cookie": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Cookie"} } - e.ProcessContext.Process.Cookie = uint32(v) + ev.ProcessContext.Process.Cookie = uint32(rv) return nil case "process.created_at": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.CreatedAt"} } - e.ProcessContext.Process.CreatedAt = uint64(v) + ev.ProcessContext.Process.CreatedAt = uint64(rv) return nil case "process.egid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EGID"} } - e.ProcessContext.Process.Credentials.EGID = uint32(v) + ev.ProcessContext.Process.Credentials.EGID = uint32(rv) return nil case "process.egroup": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EGroup"} } - e.ProcessContext.Process.Credentials.EGroup = str + ev.ProcessContext.Process.Credentials.EGroup = rv return nil case "process.envp": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} - } - str, ok := value.(string) - if !ok { + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} + } + switch rv := value.(type) { + case string: + ev.ProcessContext.Process.Envp = append(ev.ProcessContext.Process.Envp, rv) + case []string: + ev.ProcessContext.Process.Envp = append(ev.ProcessContext.Process.Envp, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Envp"} } - e.ProcessContext.Process.Envp = append(e.ProcessContext.Process.Envp, str) return nil case "process.envs": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} - } - str, ok := value.(string) - if !ok { + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} + } + switch rv := value.(type) { + case string: + ev.ProcessContext.Process.Envs = append(ev.ProcessContext.Process.Envs, rv) + case []string: + ev.ProcessContext.Process.Envs = append(ev.ProcessContext.Process.Envs, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Envs"} } - e.ProcessContext.Process.Envs = append(e.ProcessContext.Process.Envs, str) return nil case "process.envs_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - var ok bool - if e.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.EnvsTruncated"} } + ev.ProcessContext.Process.EnvsTruncated = rv return nil case "process.euid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EUID"} } - e.ProcessContext.Process.Credentials.EUID = uint32(v) + ev.ProcessContext.Process.Credentials.EUID = uint32(rv) return nil case "process.euser": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.EUser"} } - e.ProcessContext.Process.Credentials.EUser = str + ev.ProcessContext.Process.Credentials.EUser = rv return nil case "process.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.CTime"} } - e.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) + ev.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(rv) return nil case "process.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.Filesystem"} } - e.ProcessContext.Process.FileEvent.Filesystem = str + ev.ProcessContext.Process.FileEvent.Filesystem = rv return nil case "process.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.GID"} } - e.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) + ev.ProcessContext.Process.FileEvent.FileFields.GID = uint32(rv) return nil case "process.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Group"} } - e.ProcessContext.Process.FileEvent.FileFields.Group = str + ev.ProcessContext.Process.FileEvent.FileFields.Group = rv return nil case "process.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - var ok bool - if e.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} } + ev.ProcessContext.Process.FileEvent.FileFields.InUpperLayer = rv return nil case "process.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Inode"} } - e.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) + ev.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(rv) return nil case "process.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(rv) return nil case "process.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.MTime"} } - e.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) + ev.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(rv) return nil case "process.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.MountID"} } - e.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) + ev.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(rv) return nil case "process.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.BasenameStr"} } - e.ProcessContext.Process.FileEvent.BasenameStr = str + ev.ProcessContext.Process.FileEvent.BasenameStr = rv return nil case "process.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "process.file.name.length"} case "process.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.PathnameStr"} } - e.ProcessContext.Process.FileEvent.PathnameStr = str + ev.ProcessContext.Process.FileEvent.PathnameStr = rv return nil case "process.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "process.file.path.length"} case "process.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(rv) return nil case "process.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.UID"} } - e.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) + ev.ProcessContext.Process.FileEvent.FileFields.UID = uint32(rv) return nil case "process.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.FileEvent.FileFields.User"} } - e.ProcessContext.Process.FileEvent.FileFields.User = str + ev.ProcessContext.Process.FileEvent.FileFields.User = rv return nil case "process.fsgid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSGID"} } - e.ProcessContext.Process.Credentials.FSGID = uint32(v) + ev.ProcessContext.Process.Credentials.FSGID = uint32(rv) return nil case "process.fsgroup": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSGroup"} } - e.ProcessContext.Process.Credentials.FSGroup = str + ev.ProcessContext.Process.Credentials.FSGroup = rv return nil case "process.fsuid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSUID"} } - e.ProcessContext.Process.Credentials.FSUID = uint32(v) + ev.ProcessContext.Process.Credentials.FSUID = uint32(rv) return nil case "process.fsuser": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.FSUser"} } - e.ProcessContext.Process.Credentials.FSUser = str + ev.ProcessContext.Process.Credentials.FSUser = rv return nil case "process.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.GID"} } - e.ProcessContext.Process.Credentials.GID = uint32(v) + ev.ProcessContext.Process.Credentials.GID = uint32(rv) return nil case "process.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.Group"} } - e.ProcessContext.Process.Credentials.Group = str + ev.ProcessContext.Process.Credentials.Group = rv return nil case "process.interpreter.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(rv) return nil case "process.interpreter.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = rv return nil case "process.interpreter.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(rv) return nil case "process.interpreter.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = rv return nil case "process.interpreter.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - var ok bool - if e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer = rv return nil case "process.interpreter.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(rv) return nil case "process.interpreter.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "process.interpreter.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(rv) return nil case "process.interpreter.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(rv) return nil case "process.interpreter.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = rv return nil case "process.interpreter.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "process.interpreter.file.name.length"} case "process.interpreter.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = rv return nil case "process.interpreter.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "process.interpreter.file.path.length"} case "process.interpreter.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "process.interpreter.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(rv) return nil case "process.interpreter.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = rv return nil case "process.is_kworker": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - var ok bool - if e.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PIDContext.IsKworker"} } + ev.ProcessContext.Process.PIDContext.IsKworker = rv return nil case "process.is_thread": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - var ok bool - if e.ProcessContext.Process.IsThread, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.IsThread"} } + ev.ProcessContext.Process.IsThread = rv return nil case "process.parent.args": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Args"} } - e.ProcessContext.Parent.Args = str + ev.ProcessContext.Parent.Args = rv return nil case "process.parent.args_flags": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} + } + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} + } + switch rv := value.(type) { + case string: + ev.ProcessContext.Parent.Argv = append(ev.ProcessContext.Parent.Argv, rv) + case []string: + ev.ProcessContext.Parent.Argv = append(ev.ProcessContext.Parent.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv"} } - e.ProcessContext.Parent.Argv = append(e.ProcessContext.Parent.Argv, str) return nil case "process.parent.args_options": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} + } + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} + } + switch rv := value.(type) { + case string: + ev.ProcessContext.Parent.Argv = append(ev.ProcessContext.Parent.Argv, rv) + case []string: + ev.ProcessContext.Parent.Argv = append(ev.ProcessContext.Parent.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv"} } - e.ProcessContext.Parent.Argv = append(e.ProcessContext.Parent.Argv, str) return nil case "process.parent.args_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - var ok bool - if e.ProcessContext.Parent.ArgsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.ArgsTruncated"} } + ev.ProcessContext.Parent.ArgsTruncated = rv return nil case "process.parent.argv": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} + } + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} + } + switch rv := value.(type) { + case string: + ev.ProcessContext.Parent.Argv = append(ev.ProcessContext.Parent.Argv, rv) + case []string: + ev.ProcessContext.Parent.Argv = append(ev.ProcessContext.Parent.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv"} } - e.ProcessContext.Parent.Argv = append(e.ProcessContext.Parent.Argv, str) return nil case "process.parent.argv0": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Argv0"} } - e.ProcessContext.Parent.Argv0 = str + ev.ProcessContext.Parent.Argv0 = rv return nil case "process.parent.cap_effective": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.CapEffective"} } - e.ProcessContext.Parent.Credentials.CapEffective = uint64(v) + ev.ProcessContext.Parent.Credentials.CapEffective = uint64(rv) return nil case "process.parent.cap_permitted": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.CapPermitted"} } - e.ProcessContext.Parent.Credentials.CapPermitted = uint64(v) + ev.ProcessContext.Parent.Credentials.CapPermitted = uint64(rv) return nil case "process.parent.comm": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Comm"} } - e.ProcessContext.Parent.Comm = str + ev.ProcessContext.Parent.Comm = rv return nil case "process.parent.container.id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.ContainerID"} } - e.ProcessContext.Parent.ContainerID = str + ev.ProcessContext.Parent.ContainerID = rv return nil case "process.parent.cookie": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Cookie"} } - e.ProcessContext.Parent.Cookie = uint32(v) + ev.ProcessContext.Parent.Cookie = uint32(rv) return nil case "process.parent.created_at": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.CreatedAt"} } - e.ProcessContext.Parent.CreatedAt = uint64(v) + ev.ProcessContext.Parent.CreatedAt = uint64(rv) return nil case "process.parent.egid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EGID"} } - e.ProcessContext.Parent.Credentials.EGID = uint32(v) + ev.ProcessContext.Parent.Credentials.EGID = uint32(rv) return nil case "process.parent.egroup": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EGroup"} } - e.ProcessContext.Parent.Credentials.EGroup = str + ev.ProcessContext.Parent.Credentials.EGroup = rv return nil case "process.parent.envp": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} + } + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} + } + switch rv := value.(type) { + case string: + ev.ProcessContext.Parent.Envp = append(ev.ProcessContext.Parent.Envp, rv) + case []string: + ev.ProcessContext.Parent.Envp = append(ev.ProcessContext.Parent.Envp, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Envp"} } - e.ProcessContext.Parent.Envp = append(e.ProcessContext.Parent.Envp, str) return nil case "process.parent.envs": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} - } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} + } + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} + } + switch rv := value.(type) { + case string: + ev.ProcessContext.Parent.Envs = append(ev.ProcessContext.Parent.Envs, rv) + case []string: + ev.ProcessContext.Parent.Envs = append(ev.ProcessContext.Parent.Envs, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Envs"} } - e.ProcessContext.Parent.Envs = append(e.ProcessContext.Parent.Envs, str) return nil case "process.parent.envs_truncated": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - var ok bool - if e.ProcessContext.Parent.EnvsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.EnvsTruncated"} } + ev.ProcessContext.Parent.EnvsTruncated = rv return nil case "process.parent.euid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EUID"} } - e.ProcessContext.Parent.Credentials.EUID = uint32(v) + ev.ProcessContext.Parent.Credentials.EUID = uint32(rv) return nil case "process.parent.euser": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.EUser"} } - e.ProcessContext.Parent.Credentials.EUser = str + ev.ProcessContext.Parent.Credentials.EUser = rv return nil case "process.parent.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.CTime"} } - e.ProcessContext.Parent.FileEvent.FileFields.CTime = uint64(v) + ev.ProcessContext.Parent.FileEvent.FileFields.CTime = uint64(rv) return nil case "process.parent.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.Filesystem"} } - e.ProcessContext.Parent.FileEvent.Filesystem = str + ev.ProcessContext.Parent.FileEvent.Filesystem = rv return nil case "process.parent.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.GID"} } - e.ProcessContext.Parent.FileEvent.FileFields.GID = uint32(v) + ev.ProcessContext.Parent.FileEvent.FileFields.GID = uint32(rv) return nil case "process.parent.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Group"} } - e.ProcessContext.Parent.FileEvent.FileFields.Group = str + ev.ProcessContext.Parent.FileEvent.FileFields.Group = rv return nil case "process.parent.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - var ok bool - if e.ProcessContext.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.InUpperLayer"} } + ev.ProcessContext.Parent.FileEvent.FileFields.InUpperLayer = rv return nil case "process.parent.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Inode"} } - e.ProcessContext.Parent.FileEvent.FileFields.Inode = uint64(v) + ev.ProcessContext.Parent.FileEvent.FileFields.Inode = uint64(rv) return nil case "process.parent.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Mode"} } - e.ProcessContext.Parent.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Parent.FileEvent.FileFields.Mode = uint16(rv) return nil case "process.parent.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.MTime"} } - e.ProcessContext.Parent.FileEvent.FileFields.MTime = uint64(v) + ev.ProcessContext.Parent.FileEvent.FileFields.MTime = uint64(rv) return nil case "process.parent.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.MountID"} } - e.ProcessContext.Parent.FileEvent.FileFields.MountID = uint32(v) + ev.ProcessContext.Parent.FileEvent.FileFields.MountID = uint32(rv) return nil case "process.parent.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.BasenameStr"} } - e.ProcessContext.Parent.FileEvent.BasenameStr = str + ev.ProcessContext.Parent.FileEvent.BasenameStr = rv return nil case "process.parent.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "process.parent.file.name.length"} case "process.parent.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.PathnameStr"} } - e.ProcessContext.Parent.FileEvent.PathnameStr = str + ev.ProcessContext.Parent.FileEvent.PathnameStr = rv return nil case "process.parent.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "process.parent.file.path.length"} case "process.parent.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.Mode"} } - e.ProcessContext.Parent.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Parent.FileEvent.FileFields.Mode = uint16(rv) return nil case "process.parent.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.UID"} } - e.ProcessContext.Parent.FileEvent.FileFields.UID = uint32(v) + ev.ProcessContext.Parent.FileEvent.FileFields.UID = uint32(rv) return nil case "process.parent.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.FileEvent.FileFields.User"} } - e.ProcessContext.Parent.FileEvent.FileFields.User = str + ev.ProcessContext.Parent.FileEvent.FileFields.User = rv return nil case "process.parent.fsgid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSGID"} } - e.ProcessContext.Parent.Credentials.FSGID = uint32(v) + ev.ProcessContext.Parent.Credentials.FSGID = uint32(rv) return nil case "process.parent.fsgroup": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSGroup"} } - e.ProcessContext.Parent.Credentials.FSGroup = str + ev.ProcessContext.Parent.Credentials.FSGroup = rv return nil case "process.parent.fsuid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSUID"} } - e.ProcessContext.Parent.Credentials.FSUID = uint32(v) + ev.ProcessContext.Parent.Credentials.FSUID = uint32(rv) return nil case "process.parent.fsuser": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.FSUser"} } - e.ProcessContext.Parent.Credentials.FSUser = str + ev.ProcessContext.Parent.Credentials.FSUser = rv return nil case "process.parent.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.GID"} } - e.ProcessContext.Parent.Credentials.GID = uint32(v) + ev.ProcessContext.Parent.Credentials.GID = uint32(rv) return nil case "process.parent.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.Group"} } - e.ProcessContext.Parent.Credentials.Group = str + ev.ProcessContext.Parent.Credentials.Group = rv return nil case "process.parent.interpreter.file.change_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(rv) return nil case "process.parent.interpreter.file.filesystem": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem = str + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.Filesystem = rv return nil case "process.parent.interpreter.file.gid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(rv) return nil case "process.parent.interpreter.file.group": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group = str + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Group = rv return nil case "process.parent.interpreter.file.in_upper_layer": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - var ok bool - if e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer = rv return nil case "process.parent.interpreter.file.inode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(rv) return nil case "process.parent.interpreter.file.mode": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "process.parent.interpreter.file.modification_time": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(rv) return nil case "process.parent.interpreter.file.mount_id": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(rv) return nil case "process.parent.interpreter.file.name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr = str + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.BasenameStr = rv return nil case "process.parent.interpreter.file.name.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "process.parent.interpreter.file.name.length"} case "process.parent.interpreter.file.path": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr = str + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.PathnameStr = rv return nil case "process.parent.interpreter.file.path.length": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "process.parent.interpreter.file.path.length"} case "process.parent.interpreter.file.rights": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "process.parent.interpreter.file.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(rv) return nil case "process.parent.interpreter.file.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User"} } - e.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User = str + ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields.User = rv return nil case "process.parent.is_kworker": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - var ok bool - if e.ProcessContext.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PIDContext.IsKworker"} } + ev.ProcessContext.Parent.PIDContext.IsKworker = rv return nil case "process.parent.is_thread": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - var ok bool - if e.ProcessContext.Parent.IsThread, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.IsThread"} } + ev.ProcessContext.Parent.IsThread = rv return nil case "process.parent.pid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PIDContext.Pid"} } - e.ProcessContext.Parent.PIDContext.Pid = uint32(v) + ev.ProcessContext.Parent.PIDContext.Pid = uint32(rv) return nil case "process.parent.ppid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PPid"} } - e.ProcessContext.Parent.PPid = uint32(v) + ev.ProcessContext.Parent.PPid = uint32(rv) return nil case "process.parent.tid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.PIDContext.Tid"} } - e.ProcessContext.Parent.PIDContext.Tid = uint32(v) + ev.ProcessContext.Parent.PIDContext.Tid = uint32(rv) return nil case "process.parent.tty_name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.TTYName"} } - e.ProcessContext.Parent.TTYName = str + ev.ProcessContext.Parent.TTYName = rv return nil case "process.parent.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.UID"} } - e.ProcessContext.Parent.Credentials.UID = uint32(v) + ev.ProcessContext.Parent.Credentials.UID = uint32(rv) return nil case "process.parent.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - if e.ProcessContext.Parent == nil { - e.ProcessContext.Parent = &Process{} + if ev.ProcessContext.Parent == nil { + ev.ProcessContext.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Parent.Credentials.User"} } - e.ProcessContext.Parent.Credentials.User = str + ev.ProcessContext.Parent.Credentials.User = rv return nil case "process.pid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PIDContext.Pid"} } - e.ProcessContext.Process.PIDContext.Pid = uint32(v) + ev.ProcessContext.Process.PIDContext.Pid = uint32(rv) return nil case "process.ppid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PPid"} } - e.ProcessContext.Process.PPid = uint32(v) + ev.ProcessContext.Process.PPid = uint32(rv) return nil case "process.tid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.PIDContext.Tid"} } - e.ProcessContext.Process.PIDContext.Tid = uint32(v) + ev.ProcessContext.Process.PIDContext.Tid = uint32(rv) return nil case "process.tty_name": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.TTYName"} } - e.ProcessContext.Process.TTYName = str + ev.ProcessContext.Process.TTYName = rv return nil case "process.uid": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.UID"} } - e.ProcessContext.Process.Credentials.UID = uint32(v) + ev.ProcessContext.Process.Credentials.UID = uint32(rv) return nil case "process.user": - if e.ProcessContext == nil { - e.ProcessContext = &ProcessContext{} + if ev.ProcessContext == nil { + ev.ProcessContext = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "ProcessContext.Process.Credentials.User"} } - e.ProcessContext.Process.Credentials.User = str + ev.ProcessContext.Process.Credentials.User = rv return nil case "ptrace.request": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Request"} } - e.PTrace.Request = uint32(v) + ev.PTrace.Request = uint32(rv) return nil case "ptrace.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.SyscallEvent.Retval"} } - e.PTrace.SyscallEvent.Retval = int64(v) + ev.PTrace.SyscallEvent.Retval = int64(rv) return nil case "ptrace.tracee.ancestors.args": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Args"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Args = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Args = rv return nil case "ptrace.tracee.ancestors.args_flags": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} + } + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + } + switch rv := value.(type) { + case string: + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, rv) + case []string: + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) return nil case "ptrace.tracee.ancestors.args_options": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} + } + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + } + switch rv := value.(type) { + case string: + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, rv) + case []string: + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) return nil case "ptrace.tracee.ancestors.args_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.ArgsTruncated"} } + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.ArgsTruncated = rv return nil case "ptrace.tracee.ancestors.argv": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} + } + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + } + switch rv := value.(type) { + case string: + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, rv) + case []string: + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv, str) return nil case "ptrace.tracee.ancestors.argv0": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Argv0"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv0 = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Argv0 = rv return nil case "ptrace.tracee.ancestors.cap_effective": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapEffective"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(rv) return nil case "ptrace.tracee.ancestors.cap_permitted": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapPermitted"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(rv) return nil case "ptrace.tracee.ancestors.comm": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Comm"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Comm = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Comm = rv return nil case "ptrace.tracee.ancestors.container.id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.ContainerID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.ContainerID = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.ContainerID = rv return nil case "ptrace.tracee.ancestors.cookie": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Cookie"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Cookie = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Cookie = uint32(rv) return nil case "ptrace.tracee.ancestors.created_at": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.CreatedAt"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.CreatedAt = uint64(rv) return nil case "ptrace.tracee.ancestors.egid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(rv) return nil case "ptrace.tracee.ancestors.egroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGroup"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGroup = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EGroup = rv return nil case "ptrace.tracee.ancestors.envp": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} + } + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + } + switch rv := value.(type) { + case string: + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp, rv) + case []string: + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Envp"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envp, str) return nil case "ptrace.tracee.ancestors.envs": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} - } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} + } + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + } + switch rv := value.(type) { + case string: + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs, rv) + case []string: + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs = append(ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Envs"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs = append(e.PTrace.Tracee.Ancestor.ProcessContext.Process.Envs, str) return nil case "ptrace.tracee.ancestors.envs_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.EnvsTruncated"} } + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.EnvsTruncated = rv return nil case "ptrace.tracee.ancestors.euid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(rv) return nil case "ptrace.tracee.ancestors.euser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUser"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUser = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.EUser = rv return nil case "ptrace.tracee.ancestors.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(rv) return nil case "ptrace.tracee.ancestors.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.Filesystem"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.Filesystem = rv return nil case "ptrace.tracee.ancestors.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(rv) return nil case "ptrace.tracee.ancestors.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = rv return nil case "ptrace.tracee.ancestors.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} } + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer = rv return nil case "ptrace.tracee.ancestors.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(rv) return nil case "ptrace.tracee.ancestors.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(rv) return nil case "ptrace.tracee.ancestors.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(rv) return nil case "ptrace.tracee.ancestors.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(rv) return nil case "ptrace.tracee.ancestors.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.BasenameStr"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = rv return nil case "ptrace.tracee.ancestors.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.file.name.length"} case "ptrace.tracee.ancestors.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.PathnameStr"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = rv return nil case "ptrace.tracee.ancestors.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.file.path.length"} case "ptrace.tracee.ancestors.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(rv) return nil case "ptrace.tracee.ancestors.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(rv) return nil case "ptrace.tracee.ancestors.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.User"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = rv return nil case "ptrace.tracee.ancestors.fsgid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(rv) return nil case "ptrace.tracee.ancestors.fsgroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGroup"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGroup = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSGroup = rv return nil case "ptrace.tracee.ancestors.fsuid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(rv) return nil case "ptrace.tracee.ancestors.fsuser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUser"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUser = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.FSUser = rv return nil case "ptrace.tracee.ancestors.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.GID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.GID = uint32(rv) return nil case "ptrace.tracee.ancestors.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.Group"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.Group = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.Group = rv return nil case "ptrace.tracee.ancestors.interpreter.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(rv) return nil case "ptrace.tracee.ancestors.interpreter.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = rv return nil case "ptrace.tracee.ancestors.interpreter.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(rv) return nil case "ptrace.tracee.ancestors.interpreter.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = rv return nil case "ptrace.tracee.ancestors.interpreter.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer = rv return nil case "ptrace.tracee.ancestors.interpreter.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(rv) return nil case "ptrace.tracee.ancestors.interpreter.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "ptrace.tracee.ancestors.interpreter.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(rv) return nil case "ptrace.tracee.ancestors.interpreter.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(rv) return nil case "ptrace.tracee.ancestors.interpreter.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = rv return nil case "ptrace.tracee.ancestors.interpreter.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.interpreter.file.name.length"} case "ptrace.tracee.ancestors.interpreter.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = rv return nil case "ptrace.tracee.ancestors.interpreter.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.ancestors.interpreter.file.path.length"} case "ptrace.tracee.ancestors.interpreter.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "ptrace.tracee.ancestors.interpreter.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(rv) return nil case "ptrace.tracee.ancestors.interpreter.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = rv return nil case "ptrace.tracee.ancestors.is_kworker": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.IsKworker"} } + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.IsKworker = rv return nil case "ptrace.tracee.ancestors.is_thread": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - var ok bool - if e.PTrace.Tracee.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.IsThread"} } + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.IsThread = rv return nil case "ptrace.tracee.ancestors.pid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Pid"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(rv) return nil case "ptrace.tracee.ancestors.ppid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PPid"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.PPid = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.PPid = uint32(rv) return nil case "ptrace.tracee.ancestors.tid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Tid"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(rv) return nil case "ptrace.tracee.ancestors.tty_name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.TTYName"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.TTYName = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.TTYName = rv return nil case "ptrace.tracee.ancestors.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.UID"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.UID = uint32(rv) return nil case "ptrace.tracee.ancestors.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Ancestor == nil { - e.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} + if ev.PTrace.Tracee.Ancestor == nil { + ev.PTrace.Tracee.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.User"} } - e.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.User = str + ev.PTrace.Tracee.Ancestor.ProcessContext.Process.Credentials.User = rv return nil case "ptrace.tracee.args": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Args"} } - e.PTrace.Tracee.Process.Args = str + ev.PTrace.Tracee.Process.Args = rv return nil case "ptrace.tracee.args_flags": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} - } - str, ok := value.(string) - if !ok { + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} + } + switch rv := value.(type) { + case string: + ev.PTrace.Tracee.Process.Argv = append(ev.PTrace.Tracee.Process.Argv, rv) + case []string: + ev.PTrace.Tracee.Process.Argv = append(ev.PTrace.Tracee.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv"} } - e.PTrace.Tracee.Process.Argv = append(e.PTrace.Tracee.Process.Argv, str) return nil case "ptrace.tracee.args_options": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} - } - str, ok := value.(string) - if !ok { + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} + } + switch rv := value.(type) { + case string: + ev.PTrace.Tracee.Process.Argv = append(ev.PTrace.Tracee.Process.Argv, rv) + case []string: + ev.PTrace.Tracee.Process.Argv = append(ev.PTrace.Tracee.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv"} } - e.PTrace.Tracee.Process.Argv = append(e.PTrace.Tracee.Process.Argv, str) return nil case "ptrace.tracee.args_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - var ok bool - if e.PTrace.Tracee.Process.ArgsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.ArgsTruncated"} } + ev.PTrace.Tracee.Process.ArgsTruncated = rv return nil case "ptrace.tracee.argv": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} - } - str, ok := value.(string) - if !ok { + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} + } + switch rv := value.(type) { + case string: + ev.PTrace.Tracee.Process.Argv = append(ev.PTrace.Tracee.Process.Argv, rv) + case []string: + ev.PTrace.Tracee.Process.Argv = append(ev.PTrace.Tracee.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv"} } - e.PTrace.Tracee.Process.Argv = append(e.PTrace.Tracee.Process.Argv, str) return nil case "ptrace.tracee.argv0": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Argv0"} } - e.PTrace.Tracee.Process.Argv0 = str + ev.PTrace.Tracee.Process.Argv0 = rv return nil case "ptrace.tracee.cap_effective": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.CapEffective"} } - e.PTrace.Tracee.Process.Credentials.CapEffective = uint64(v) + ev.PTrace.Tracee.Process.Credentials.CapEffective = uint64(rv) return nil case "ptrace.tracee.cap_permitted": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.CapPermitted"} } - e.PTrace.Tracee.Process.Credentials.CapPermitted = uint64(v) + ev.PTrace.Tracee.Process.Credentials.CapPermitted = uint64(rv) return nil case "ptrace.tracee.comm": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Comm"} } - e.PTrace.Tracee.Process.Comm = str + ev.PTrace.Tracee.Process.Comm = rv return nil case "ptrace.tracee.container.id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.ContainerID"} } - e.PTrace.Tracee.Process.ContainerID = str + ev.PTrace.Tracee.Process.ContainerID = rv return nil case "ptrace.tracee.cookie": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Cookie"} } - e.PTrace.Tracee.Process.Cookie = uint32(v) + ev.PTrace.Tracee.Process.Cookie = uint32(rv) return nil case "ptrace.tracee.created_at": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.CreatedAt"} } - e.PTrace.Tracee.Process.CreatedAt = uint64(v) + ev.PTrace.Tracee.Process.CreatedAt = uint64(rv) return nil case "ptrace.tracee.egid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EGID"} } - e.PTrace.Tracee.Process.Credentials.EGID = uint32(v) + ev.PTrace.Tracee.Process.Credentials.EGID = uint32(rv) return nil case "ptrace.tracee.egroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EGroup"} } - e.PTrace.Tracee.Process.Credentials.EGroup = str + ev.PTrace.Tracee.Process.Credentials.EGroup = rv return nil case "ptrace.tracee.envp": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} - } - str, ok := value.(string) - if !ok { + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} + } + switch rv := value.(type) { + case string: + ev.PTrace.Tracee.Process.Envp = append(ev.PTrace.Tracee.Process.Envp, rv) + case []string: + ev.PTrace.Tracee.Process.Envp = append(ev.PTrace.Tracee.Process.Envp, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Envp"} } - e.PTrace.Tracee.Process.Envp = append(e.PTrace.Tracee.Process.Envp, str) return nil case "ptrace.tracee.envs": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} - } - str, ok := value.(string) - if !ok { + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} + } + switch rv := value.(type) { + case string: + ev.PTrace.Tracee.Process.Envs = append(ev.PTrace.Tracee.Process.Envs, rv) + case []string: + ev.PTrace.Tracee.Process.Envs = append(ev.PTrace.Tracee.Process.Envs, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Envs"} } - e.PTrace.Tracee.Process.Envs = append(e.PTrace.Tracee.Process.Envs, str) return nil case "ptrace.tracee.envs_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - var ok bool - if e.PTrace.Tracee.Process.EnvsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.EnvsTruncated"} } + ev.PTrace.Tracee.Process.EnvsTruncated = rv return nil case "ptrace.tracee.euid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EUID"} } - e.PTrace.Tracee.Process.Credentials.EUID = uint32(v) + ev.PTrace.Tracee.Process.Credentials.EUID = uint32(rv) return nil case "ptrace.tracee.euser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.EUser"} } - e.PTrace.Tracee.Process.Credentials.EUser = str + ev.PTrace.Tracee.Process.Credentials.EUser = rv return nil case "ptrace.tracee.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.CTime"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.CTime = uint64(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.CTime = uint64(rv) return nil case "ptrace.tracee.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.Filesystem"} } - e.PTrace.Tracee.Process.FileEvent.Filesystem = str + ev.PTrace.Tracee.Process.FileEvent.Filesystem = rv return nil case "ptrace.tracee.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.GID"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.GID = uint32(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.GID = uint32(rv) return nil case "ptrace.tracee.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Group"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.Group = str + ev.PTrace.Tracee.Process.FileEvent.FileFields.Group = rv return nil case "ptrace.tracee.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - var ok bool - if e.PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer"} } + ev.PTrace.Tracee.Process.FileEvent.FileFields.InUpperLayer = rv return nil case "ptrace.tracee.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Inode"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.Inode = uint64(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.Inode = uint64(rv) return nil case "ptrace.tracee.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.Mode = uint16(rv) return nil case "ptrace.tracee.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.MTime"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.MTime = uint64(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.MTime = uint64(rv) return nil case "ptrace.tracee.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.MountID"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.MountID = uint32(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.MountID = uint32(rv) return nil case "ptrace.tracee.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.BasenameStr"} } - e.PTrace.Tracee.Process.FileEvent.BasenameStr = str + ev.PTrace.Tracee.Process.FileEvent.BasenameStr = rv return nil case "ptrace.tracee.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.file.name.length"} case "ptrace.tracee.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.PathnameStr"} } - e.PTrace.Tracee.Process.FileEvent.PathnameStr = str + ev.PTrace.Tracee.Process.FileEvent.PathnameStr = rv return nil case "ptrace.tracee.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.file.path.length"} case "ptrace.tracee.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.Mode = uint16(rv) return nil case "ptrace.tracee.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.UID"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.UID = uint32(v) + ev.PTrace.Tracee.Process.FileEvent.FileFields.UID = uint32(rv) return nil case "ptrace.tracee.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.FileEvent.FileFields.User"} } - e.PTrace.Tracee.Process.FileEvent.FileFields.User = str + ev.PTrace.Tracee.Process.FileEvent.FileFields.User = rv return nil case "ptrace.tracee.fsgid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSGID"} } - e.PTrace.Tracee.Process.Credentials.FSGID = uint32(v) + ev.PTrace.Tracee.Process.Credentials.FSGID = uint32(rv) return nil case "ptrace.tracee.fsgroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSGroup"} } - e.PTrace.Tracee.Process.Credentials.FSGroup = str + ev.PTrace.Tracee.Process.Credentials.FSGroup = rv return nil case "ptrace.tracee.fsuid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSUID"} } - e.PTrace.Tracee.Process.Credentials.FSUID = uint32(v) + ev.PTrace.Tracee.Process.Credentials.FSUID = uint32(rv) return nil case "ptrace.tracee.fsuser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.FSUser"} } - e.PTrace.Tracee.Process.Credentials.FSUser = str + ev.PTrace.Tracee.Process.Credentials.FSUser = rv return nil case "ptrace.tracee.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.GID"} } - e.PTrace.Tracee.Process.Credentials.GID = uint32(v) + ev.PTrace.Tracee.Process.Credentials.GID = uint32(rv) return nil case "ptrace.tracee.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.Group"} } - e.PTrace.Tracee.Process.Credentials.Group = str + ev.PTrace.Tracee.Process.Credentials.Group = rv return nil case "ptrace.tracee.interpreter.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(rv) return nil case "ptrace.tracee.interpreter.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.Filesystem = rv return nil case "ptrace.tracee.interpreter.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(rv) return nil case "ptrace.tracee.interpreter.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Group = rv return nil case "ptrace.tracee.interpreter.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - var ok bool - if e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer = rv return nil case "ptrace.tracee.interpreter.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(rv) return nil case "ptrace.tracee.interpreter.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "ptrace.tracee.interpreter.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(rv) return nil case "ptrace.tracee.interpreter.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(rv) return nil case "ptrace.tracee.interpreter.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.BasenameStr = rv return nil case "ptrace.tracee.interpreter.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.interpreter.file.name.length"} case "ptrace.tracee.interpreter.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.PathnameStr = rv return nil case "ptrace.tracee.interpreter.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.interpreter.file.path.length"} case "ptrace.tracee.interpreter.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "ptrace.tracee.interpreter.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(rv) return nil case "ptrace.tracee.interpreter.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields.User = rv return nil case "ptrace.tracee.is_kworker": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - var ok bool - if e.PTrace.Tracee.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PIDContext.IsKworker"} } + ev.PTrace.Tracee.Process.PIDContext.IsKworker = rv return nil case "ptrace.tracee.is_thread": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - var ok bool - if e.PTrace.Tracee.Process.IsThread, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.IsThread"} } + ev.PTrace.Tracee.Process.IsThread = rv return nil case "ptrace.tracee.parent.args": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Args"} } - e.PTrace.Tracee.Parent.Args = str + ev.PTrace.Tracee.Parent.Args = rv return nil case "ptrace.tracee.parent.args_flags": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} + } + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} + } + switch rv := value.(type) { + case string: + ev.PTrace.Tracee.Parent.Argv = append(ev.PTrace.Tracee.Parent.Argv, rv) + case []string: + ev.PTrace.Tracee.Parent.Argv = append(ev.PTrace.Tracee.Parent.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv"} } - e.PTrace.Tracee.Parent.Argv = append(e.PTrace.Tracee.Parent.Argv, str) return nil case "ptrace.tracee.parent.args_options": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} + } + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} + } + switch rv := value.(type) { + case string: + ev.PTrace.Tracee.Parent.Argv = append(ev.PTrace.Tracee.Parent.Argv, rv) + case []string: + ev.PTrace.Tracee.Parent.Argv = append(ev.PTrace.Tracee.Parent.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv"} } - e.PTrace.Tracee.Parent.Argv = append(e.PTrace.Tracee.Parent.Argv, str) return nil case "ptrace.tracee.parent.args_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - var ok bool - if e.PTrace.Tracee.Parent.ArgsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.ArgsTruncated"} } + ev.PTrace.Tracee.Parent.ArgsTruncated = rv return nil case "ptrace.tracee.parent.argv": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} + } + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} + } + switch rv := value.(type) { + case string: + ev.PTrace.Tracee.Parent.Argv = append(ev.PTrace.Tracee.Parent.Argv, rv) + case []string: + ev.PTrace.Tracee.Parent.Argv = append(ev.PTrace.Tracee.Parent.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv"} } - e.PTrace.Tracee.Parent.Argv = append(e.PTrace.Tracee.Parent.Argv, str) return nil case "ptrace.tracee.parent.argv0": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Argv0"} } - e.PTrace.Tracee.Parent.Argv0 = str + ev.PTrace.Tracee.Parent.Argv0 = rv return nil case "ptrace.tracee.parent.cap_effective": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.CapEffective"} } - e.PTrace.Tracee.Parent.Credentials.CapEffective = uint64(v) + ev.PTrace.Tracee.Parent.Credentials.CapEffective = uint64(rv) return nil case "ptrace.tracee.parent.cap_permitted": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.CapPermitted"} } - e.PTrace.Tracee.Parent.Credentials.CapPermitted = uint64(v) + ev.PTrace.Tracee.Parent.Credentials.CapPermitted = uint64(rv) return nil case "ptrace.tracee.parent.comm": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Comm"} } - e.PTrace.Tracee.Parent.Comm = str + ev.PTrace.Tracee.Parent.Comm = rv return nil case "ptrace.tracee.parent.container.id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.ContainerID"} } - e.PTrace.Tracee.Parent.ContainerID = str + ev.PTrace.Tracee.Parent.ContainerID = rv return nil case "ptrace.tracee.parent.cookie": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Cookie"} } - e.PTrace.Tracee.Parent.Cookie = uint32(v) + ev.PTrace.Tracee.Parent.Cookie = uint32(rv) return nil case "ptrace.tracee.parent.created_at": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.CreatedAt"} } - e.PTrace.Tracee.Parent.CreatedAt = uint64(v) + ev.PTrace.Tracee.Parent.CreatedAt = uint64(rv) return nil case "ptrace.tracee.parent.egid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EGID"} } - e.PTrace.Tracee.Parent.Credentials.EGID = uint32(v) + ev.PTrace.Tracee.Parent.Credentials.EGID = uint32(rv) return nil case "ptrace.tracee.parent.egroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EGroup"} } - e.PTrace.Tracee.Parent.Credentials.EGroup = str + ev.PTrace.Tracee.Parent.Credentials.EGroup = rv return nil case "ptrace.tracee.parent.envp": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} + } + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} + } + switch rv := value.(type) { + case string: + ev.PTrace.Tracee.Parent.Envp = append(ev.PTrace.Tracee.Parent.Envp, rv) + case []string: + ev.PTrace.Tracee.Parent.Envp = append(ev.PTrace.Tracee.Parent.Envp, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Envp"} } - e.PTrace.Tracee.Parent.Envp = append(e.PTrace.Tracee.Parent.Envp, str) return nil case "ptrace.tracee.parent.envs": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} - } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} + } + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} + } + switch rv := value.(type) { + case string: + ev.PTrace.Tracee.Parent.Envs = append(ev.PTrace.Tracee.Parent.Envs, rv) + case []string: + ev.PTrace.Tracee.Parent.Envs = append(ev.PTrace.Tracee.Parent.Envs, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Envs"} } - e.PTrace.Tracee.Parent.Envs = append(e.PTrace.Tracee.Parent.Envs, str) return nil case "ptrace.tracee.parent.envs_truncated": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - var ok bool - if e.PTrace.Tracee.Parent.EnvsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.EnvsTruncated"} } + ev.PTrace.Tracee.Parent.EnvsTruncated = rv return nil case "ptrace.tracee.parent.euid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EUID"} } - e.PTrace.Tracee.Parent.Credentials.EUID = uint32(v) + ev.PTrace.Tracee.Parent.Credentials.EUID = uint32(rv) return nil case "ptrace.tracee.parent.euser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.EUser"} } - e.PTrace.Tracee.Parent.Credentials.EUser = str + ev.PTrace.Tracee.Parent.Credentials.EUser = rv return nil case "ptrace.tracee.parent.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.CTime"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.CTime = uint64(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.CTime = uint64(rv) return nil case "ptrace.tracee.parent.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.Filesystem"} } - e.PTrace.Tracee.Parent.FileEvent.Filesystem = str + ev.PTrace.Tracee.Parent.FileEvent.Filesystem = rv return nil case "ptrace.tracee.parent.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.GID"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.GID = uint32(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.GID = uint32(rv) return nil case "ptrace.tracee.parent.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Group"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Group = str + ev.PTrace.Tracee.Parent.FileEvent.FileFields.Group = rv return nil case "ptrace.tracee.parent.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - var ok bool - if e.PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer"} } + ev.PTrace.Tracee.Parent.FileEvent.FileFields.InUpperLayer = rv return nil case "ptrace.tracee.parent.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Inode"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Inode = uint64(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.Inode = uint64(rv) return nil case "ptrace.tracee.parent.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.Mode = uint16(rv) return nil case "ptrace.tracee.parent.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.MTime"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.MTime = uint64(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.MTime = uint64(rv) return nil case "ptrace.tracee.parent.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.MountID"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.MountID = uint32(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.MountID = uint32(rv) return nil case "ptrace.tracee.parent.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.BasenameStr"} } - e.PTrace.Tracee.Parent.FileEvent.BasenameStr = str + ev.PTrace.Tracee.Parent.FileEvent.BasenameStr = rv return nil case "ptrace.tracee.parent.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.file.name.length"} case "ptrace.tracee.parent.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.PathnameStr"} } - e.PTrace.Tracee.Parent.FileEvent.PathnameStr = str + ev.PTrace.Tracee.Parent.FileEvent.PathnameStr = rv return nil case "ptrace.tracee.parent.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.file.path.length"} case "ptrace.tracee.parent.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.Mode = uint16(rv) return nil case "ptrace.tracee.parent.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.UID"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.UID = uint32(v) + ev.PTrace.Tracee.Parent.FileEvent.FileFields.UID = uint32(rv) return nil case "ptrace.tracee.parent.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.FileEvent.FileFields.User"} } - e.PTrace.Tracee.Parent.FileEvent.FileFields.User = str + ev.PTrace.Tracee.Parent.FileEvent.FileFields.User = rv return nil case "ptrace.tracee.parent.fsgid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSGID"} } - e.PTrace.Tracee.Parent.Credentials.FSGID = uint32(v) + ev.PTrace.Tracee.Parent.Credentials.FSGID = uint32(rv) return nil case "ptrace.tracee.parent.fsgroup": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSGroup"} } - e.PTrace.Tracee.Parent.Credentials.FSGroup = str + ev.PTrace.Tracee.Parent.Credentials.FSGroup = rv return nil case "ptrace.tracee.parent.fsuid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSUID"} } - e.PTrace.Tracee.Parent.Credentials.FSUID = uint32(v) + ev.PTrace.Tracee.Parent.Credentials.FSUID = uint32(rv) return nil case "ptrace.tracee.parent.fsuser": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.FSUser"} } - e.PTrace.Tracee.Parent.Credentials.FSUser = str + ev.PTrace.Tracee.Parent.Credentials.FSUser = rv return nil case "ptrace.tracee.parent.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.GID"} } - e.PTrace.Tracee.Parent.Credentials.GID = uint32(v) + ev.PTrace.Tracee.Parent.Credentials.GID = uint32(rv) return nil case "ptrace.tracee.parent.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.Group"} } - e.PTrace.Tracee.Parent.Credentials.Group = str + ev.PTrace.Tracee.Parent.Credentials.Group = rv return nil case "ptrace.tracee.parent.interpreter.file.change_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(rv) return nil case "ptrace.tracee.parent.interpreter.file.filesystem": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem = str + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.Filesystem = rv return nil case "ptrace.tracee.parent.interpreter.file.gid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(rv) return nil case "ptrace.tracee.parent.interpreter.file.group": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group = str + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Group = rv return nil case "ptrace.tracee.parent.interpreter.file.in_upper_layer": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - var ok bool - if e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer = rv return nil case "ptrace.tracee.parent.interpreter.file.inode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(rv) return nil case "ptrace.tracee.parent.interpreter.file.mode": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "ptrace.tracee.parent.interpreter.file.modification_time": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(rv) return nil case "ptrace.tracee.parent.interpreter.file.mount_id": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(rv) return nil case "ptrace.tracee.parent.interpreter.file.name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr = str + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.BasenameStr = rv return nil case "ptrace.tracee.parent.interpreter.file.name.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.interpreter.file.name.length"} case "ptrace.tracee.parent.interpreter.file.path": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr = str + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.PathnameStr = rv return nil case "ptrace.tracee.parent.interpreter.file.path.length": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "ptrace.tracee.parent.interpreter.file.path.length"} case "ptrace.tracee.parent.interpreter.file.rights": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "ptrace.tracee.parent.interpreter.file.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(rv) return nil case "ptrace.tracee.parent.interpreter.file.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User"} } - e.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User = str + ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields.User = rv return nil case "ptrace.tracee.parent.is_kworker": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - var ok bool - if e.PTrace.Tracee.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PIDContext.IsKworker"} } + ev.PTrace.Tracee.Parent.PIDContext.IsKworker = rv return nil case "ptrace.tracee.parent.is_thread": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - var ok bool - if e.PTrace.Tracee.Parent.IsThread, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.IsThread"} } + ev.PTrace.Tracee.Parent.IsThread = rv return nil case "ptrace.tracee.parent.pid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PIDContext.Pid"} } - e.PTrace.Tracee.Parent.PIDContext.Pid = uint32(v) + ev.PTrace.Tracee.Parent.PIDContext.Pid = uint32(rv) return nil case "ptrace.tracee.parent.ppid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PPid"} } - e.PTrace.Tracee.Parent.PPid = uint32(v) + ev.PTrace.Tracee.Parent.PPid = uint32(rv) return nil case "ptrace.tracee.parent.tid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.PIDContext.Tid"} } - e.PTrace.Tracee.Parent.PIDContext.Tid = uint32(v) + ev.PTrace.Tracee.Parent.PIDContext.Tid = uint32(rv) return nil case "ptrace.tracee.parent.tty_name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.TTYName"} } - e.PTrace.Tracee.Parent.TTYName = str + ev.PTrace.Tracee.Parent.TTYName = rv return nil case "ptrace.tracee.parent.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.UID"} } - e.PTrace.Tracee.Parent.Credentials.UID = uint32(v) + ev.PTrace.Tracee.Parent.Credentials.UID = uint32(rv) return nil case "ptrace.tracee.parent.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - if e.PTrace.Tracee.Parent == nil { - e.PTrace.Tracee.Parent = &Process{} + if ev.PTrace.Tracee.Parent == nil { + ev.PTrace.Tracee.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Parent.Credentials.User"} } - e.PTrace.Tracee.Parent.Credentials.User = str + ev.PTrace.Tracee.Parent.Credentials.User = rv return nil case "ptrace.tracee.pid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PIDContext.Pid"} } - e.PTrace.Tracee.Process.PIDContext.Pid = uint32(v) + ev.PTrace.Tracee.Process.PIDContext.Pid = uint32(rv) return nil case "ptrace.tracee.ppid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PPid"} } - e.PTrace.Tracee.Process.PPid = uint32(v) + ev.PTrace.Tracee.Process.PPid = uint32(rv) return nil case "ptrace.tracee.tid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.PIDContext.Tid"} } - e.PTrace.Tracee.Process.PIDContext.Tid = uint32(v) + ev.PTrace.Tracee.Process.PIDContext.Tid = uint32(rv) return nil case "ptrace.tracee.tty_name": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.TTYName"} } - e.PTrace.Tracee.Process.TTYName = str + ev.PTrace.Tracee.Process.TTYName = rv return nil case "ptrace.tracee.uid": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.UID"} } - e.PTrace.Tracee.Process.Credentials.UID = uint32(v) + ev.PTrace.Tracee.Process.Credentials.UID = uint32(rv) return nil case "ptrace.tracee.user": - if e.PTrace.Tracee == nil { - e.PTrace.Tracee = &ProcessContext{} + if ev.PTrace.Tracee == nil { + ev.PTrace.Tracee = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "PTrace.Tracee.Process.Credentials.User"} } - e.PTrace.Tracee.Process.Credentials.User = str + ev.PTrace.Tracee.Process.Credentials.User = rv return nil case "removexattr.file.change_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.CTime"} } - e.RemoveXAttr.File.FileFields.CTime = uint64(v) + ev.RemoveXAttr.File.FileFields.CTime = uint64(rv) return nil case "removexattr.file.destination.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.Name"} } - e.RemoveXAttr.Name = str + ev.RemoveXAttr.Name = rv return nil case "removexattr.file.destination.namespace": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.Namespace"} } - e.RemoveXAttr.Namespace = str + ev.RemoveXAttr.Namespace = rv return nil case "removexattr.file.filesystem": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.Filesystem"} } - e.RemoveXAttr.File.Filesystem = str + ev.RemoveXAttr.File.Filesystem = rv return nil case "removexattr.file.gid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.GID"} } - e.RemoveXAttr.File.FileFields.GID = uint32(v) + ev.RemoveXAttr.File.FileFields.GID = uint32(rv) return nil case "removexattr.file.group": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Group"} } - e.RemoveXAttr.File.FileFields.Group = str + ev.RemoveXAttr.File.FileFields.Group = rv return nil case "removexattr.file.in_upper_layer": - var ok bool - if e.RemoveXAttr.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.InUpperLayer"} } + ev.RemoveXAttr.File.FileFields.InUpperLayer = rv return nil case "removexattr.file.inode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Inode"} } - e.RemoveXAttr.File.FileFields.Inode = uint64(v) + ev.RemoveXAttr.File.FileFields.Inode = uint64(rv) return nil case "removexattr.file.mode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Mode"} } - e.RemoveXAttr.File.FileFields.Mode = uint16(v) + ev.RemoveXAttr.File.FileFields.Mode = uint16(rv) return nil case "removexattr.file.modification_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.MTime"} } - e.RemoveXAttr.File.FileFields.MTime = uint64(v) + ev.RemoveXAttr.File.FileFields.MTime = uint64(rv) return nil case "removexattr.file.mount_id": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.MountID"} } - e.RemoveXAttr.File.FileFields.MountID = uint32(v) + ev.RemoveXAttr.File.FileFields.MountID = uint32(rv) return nil case "removexattr.file.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.BasenameStr"} } - e.RemoveXAttr.File.BasenameStr = str + ev.RemoveXAttr.File.BasenameStr = rv return nil case "removexattr.file.name.length": return &eval.ErrFieldReadOnly{Field: "removexattr.file.name.length"} case "removexattr.file.path": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.PathnameStr"} } - e.RemoveXAttr.File.PathnameStr = str + ev.RemoveXAttr.File.PathnameStr = rv return nil case "removexattr.file.path.length": return &eval.ErrFieldReadOnly{Field: "removexattr.file.path.length"} case "removexattr.file.rights": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.Mode"} } - e.RemoveXAttr.File.FileFields.Mode = uint16(v) + ev.RemoveXAttr.File.FileFields.Mode = uint16(rv) return nil case "removexattr.file.uid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.UID"} } - e.RemoveXAttr.File.FileFields.UID = uint32(v) + ev.RemoveXAttr.File.FileFields.UID = uint32(rv) return nil case "removexattr.file.user": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.File.FileFields.User"} } - e.RemoveXAttr.File.FileFields.User = str + ev.RemoveXAttr.File.FileFields.User = rv return nil case "removexattr.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "RemoveXAttr.SyscallEvent.Retval"} } - e.RemoveXAttr.SyscallEvent.Retval = int64(v) + ev.RemoveXAttr.SyscallEvent.Retval = int64(rv) return nil case "rename.file.change_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.CTime"} } - e.Rename.Old.FileFields.CTime = uint64(v) + ev.Rename.Old.FileFields.CTime = uint64(rv) return nil case "rename.file.destination.change_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.CTime"} } - e.Rename.New.FileFields.CTime = uint64(v) + ev.Rename.New.FileFields.CTime = uint64(rv) return nil case "rename.file.destination.filesystem": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.Filesystem"} } - e.Rename.New.Filesystem = str + ev.Rename.New.Filesystem = rv return nil case "rename.file.destination.gid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.GID"} } - e.Rename.New.FileFields.GID = uint32(v) + ev.Rename.New.FileFields.GID = uint32(rv) return nil case "rename.file.destination.group": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Group"} } - e.Rename.New.FileFields.Group = str + ev.Rename.New.FileFields.Group = rv return nil case "rename.file.destination.in_upper_layer": - var ok bool - if e.Rename.New.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.InUpperLayer"} } + ev.Rename.New.FileFields.InUpperLayer = rv return nil case "rename.file.destination.inode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Inode"} } - e.Rename.New.FileFields.Inode = uint64(v) + ev.Rename.New.FileFields.Inode = uint64(rv) return nil case "rename.file.destination.mode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Mode"} } - e.Rename.New.FileFields.Mode = uint16(v) + ev.Rename.New.FileFields.Mode = uint16(rv) return nil case "rename.file.destination.modification_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.MTime"} } - e.Rename.New.FileFields.MTime = uint64(v) + ev.Rename.New.FileFields.MTime = uint64(rv) return nil case "rename.file.destination.mount_id": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.MountID"} } - e.Rename.New.FileFields.MountID = uint32(v) + ev.Rename.New.FileFields.MountID = uint32(rv) return nil case "rename.file.destination.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.BasenameStr"} } - e.Rename.New.BasenameStr = str + ev.Rename.New.BasenameStr = rv return nil case "rename.file.destination.name.length": return &eval.ErrFieldReadOnly{Field: "rename.file.destination.name.length"} case "rename.file.destination.path": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.PathnameStr"} } - e.Rename.New.PathnameStr = str + ev.Rename.New.PathnameStr = rv return nil case "rename.file.destination.path.length": return &eval.ErrFieldReadOnly{Field: "rename.file.destination.path.length"} case "rename.file.destination.rights": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.Mode"} } - e.Rename.New.FileFields.Mode = uint16(v) + ev.Rename.New.FileFields.Mode = uint16(rv) return nil case "rename.file.destination.uid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.UID"} } - e.Rename.New.FileFields.UID = uint32(v) + ev.Rename.New.FileFields.UID = uint32(rv) return nil case "rename.file.destination.user": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.New.FileFields.User"} } - e.Rename.New.FileFields.User = str + ev.Rename.New.FileFields.User = rv return nil case "rename.file.filesystem": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.Filesystem"} } - e.Rename.Old.Filesystem = str + ev.Rename.Old.Filesystem = rv return nil case "rename.file.gid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.GID"} } - e.Rename.Old.FileFields.GID = uint32(v) + ev.Rename.Old.FileFields.GID = uint32(rv) return nil case "rename.file.group": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Group"} } - e.Rename.Old.FileFields.Group = str + ev.Rename.Old.FileFields.Group = rv return nil case "rename.file.in_upper_layer": - var ok bool - if e.Rename.Old.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.InUpperLayer"} } + ev.Rename.Old.FileFields.InUpperLayer = rv return nil case "rename.file.inode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Inode"} } - e.Rename.Old.FileFields.Inode = uint64(v) + ev.Rename.Old.FileFields.Inode = uint64(rv) return nil case "rename.file.mode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Mode"} } - e.Rename.Old.FileFields.Mode = uint16(v) + ev.Rename.Old.FileFields.Mode = uint16(rv) return nil case "rename.file.modification_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.MTime"} } - e.Rename.Old.FileFields.MTime = uint64(v) + ev.Rename.Old.FileFields.MTime = uint64(rv) return nil case "rename.file.mount_id": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.MountID"} } - e.Rename.Old.FileFields.MountID = uint32(v) + ev.Rename.Old.FileFields.MountID = uint32(rv) return nil case "rename.file.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.BasenameStr"} } - e.Rename.Old.BasenameStr = str + ev.Rename.Old.BasenameStr = rv return nil case "rename.file.name.length": return &eval.ErrFieldReadOnly{Field: "rename.file.name.length"} case "rename.file.path": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.PathnameStr"} } - e.Rename.Old.PathnameStr = str + ev.Rename.Old.PathnameStr = rv return nil case "rename.file.path.length": return &eval.ErrFieldReadOnly{Field: "rename.file.path.length"} case "rename.file.rights": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.Mode"} } - e.Rename.Old.FileFields.Mode = uint16(v) + ev.Rename.Old.FileFields.Mode = uint16(rv) return nil case "rename.file.uid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.UID"} } - e.Rename.Old.FileFields.UID = uint32(v) + ev.Rename.Old.FileFields.UID = uint32(rv) return nil case "rename.file.user": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.Old.FileFields.User"} } - e.Rename.Old.FileFields.User = str + ev.Rename.Old.FileFields.User = rv return nil case "rename.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rename.SyscallEvent.Retval"} } - e.Rename.SyscallEvent.Retval = int64(v) + ev.Rename.SyscallEvent.Retval = int64(rv) return nil case "rmdir.file.change_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.CTime"} } - e.Rmdir.File.FileFields.CTime = uint64(v) + ev.Rmdir.File.FileFields.CTime = uint64(rv) return nil case "rmdir.file.filesystem": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.Filesystem"} } - e.Rmdir.File.Filesystem = str + ev.Rmdir.File.Filesystem = rv return nil case "rmdir.file.gid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.GID"} } - e.Rmdir.File.FileFields.GID = uint32(v) + ev.Rmdir.File.FileFields.GID = uint32(rv) return nil case "rmdir.file.group": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Group"} } - e.Rmdir.File.FileFields.Group = str + ev.Rmdir.File.FileFields.Group = rv return nil case "rmdir.file.in_upper_layer": - var ok bool - if e.Rmdir.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.InUpperLayer"} } + ev.Rmdir.File.FileFields.InUpperLayer = rv return nil case "rmdir.file.inode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Inode"} } - e.Rmdir.File.FileFields.Inode = uint64(v) + ev.Rmdir.File.FileFields.Inode = uint64(rv) return nil case "rmdir.file.mode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Mode"} } - e.Rmdir.File.FileFields.Mode = uint16(v) + ev.Rmdir.File.FileFields.Mode = uint16(rv) return nil case "rmdir.file.modification_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.MTime"} } - e.Rmdir.File.FileFields.MTime = uint64(v) + ev.Rmdir.File.FileFields.MTime = uint64(rv) return nil case "rmdir.file.mount_id": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.MountID"} } - e.Rmdir.File.FileFields.MountID = uint32(v) + ev.Rmdir.File.FileFields.MountID = uint32(rv) return nil case "rmdir.file.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.BasenameStr"} } - e.Rmdir.File.BasenameStr = str + ev.Rmdir.File.BasenameStr = rv return nil case "rmdir.file.name.length": return &eval.ErrFieldReadOnly{Field: "rmdir.file.name.length"} case "rmdir.file.path": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.PathnameStr"} } - e.Rmdir.File.PathnameStr = str + ev.Rmdir.File.PathnameStr = rv return nil case "rmdir.file.path.length": return &eval.ErrFieldReadOnly{Field: "rmdir.file.path.length"} case "rmdir.file.rights": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.Mode"} } - e.Rmdir.File.FileFields.Mode = uint16(v) + ev.Rmdir.File.FileFields.Mode = uint16(rv) return nil case "rmdir.file.uid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.UID"} } - e.Rmdir.File.FileFields.UID = uint32(v) + ev.Rmdir.File.FileFields.UID = uint32(rv) return nil case "rmdir.file.user": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.File.FileFields.User"} } - e.Rmdir.File.FileFields.User = str + ev.Rmdir.File.FileFields.User = rv return nil case "rmdir.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Rmdir.SyscallEvent.Retval"} } - e.Rmdir.SyscallEvent.Retval = int64(v) + ev.Rmdir.SyscallEvent.Retval = int64(rv) return nil case "selinux.bool.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SELinux.BoolName"} } - e.SELinux.BoolName = str + ev.SELinux.BoolName = rv return nil case "selinux.bool.state": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SELinux.BoolChangeValue"} } - e.SELinux.BoolChangeValue = str + ev.SELinux.BoolChangeValue = rv return nil case "selinux.bool_commit.state": - var ok bool - if e.SELinux.BoolCommitValue, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "SELinux.BoolCommitValue"} } + ev.SELinux.BoolCommitValue = rv return nil case "selinux.enforce.status": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SELinux.EnforceStatus"} } - e.SELinux.EnforceStatus = str + ev.SELinux.EnforceStatus = rv return nil case "setgid.egid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetGID.EGID"} } - e.SetGID.EGID = uint32(v) + ev.SetGID.EGID = uint32(rv) return nil case "setgid.egroup": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetGID.EGroup"} } - e.SetGID.EGroup = str + ev.SetGID.EGroup = rv return nil case "setgid.fsgid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetGID.FSGID"} } - e.SetGID.FSGID = uint32(v) + ev.SetGID.FSGID = uint32(rv) return nil case "setgid.fsgroup": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetGID.FSGroup"} } - e.SetGID.FSGroup = str + ev.SetGID.FSGroup = rv return nil case "setgid.gid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetGID.GID"} } - e.SetGID.GID = uint32(v) + ev.SetGID.GID = uint32(rv) return nil case "setgid.group": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetGID.Group"} } - e.SetGID.Group = str + ev.SetGID.Group = rv return nil case "setuid.euid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetUID.EUID"} } - e.SetUID.EUID = uint32(v) + ev.SetUID.EUID = uint32(rv) return nil case "setuid.euser": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetUID.EUser"} } - e.SetUID.EUser = str + ev.SetUID.EUser = rv return nil case "setuid.fsuid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetUID.FSUID"} } - e.SetUID.FSUID = uint32(v) + ev.SetUID.FSUID = uint32(rv) return nil case "setuid.fsuser": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetUID.FSUser"} } - e.SetUID.FSUser = str + ev.SetUID.FSUser = rv return nil case "setuid.uid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetUID.UID"} } - e.SetUID.UID = uint32(v) + ev.SetUID.UID = uint32(rv) return nil case "setuid.user": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetUID.User"} } - e.SetUID.User = str + ev.SetUID.User = rv return nil case "setxattr.file.change_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.CTime"} } - e.SetXAttr.File.FileFields.CTime = uint64(v) + ev.SetXAttr.File.FileFields.CTime = uint64(rv) return nil case "setxattr.file.destination.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.Name"} } - e.SetXAttr.Name = str + ev.SetXAttr.Name = rv return nil case "setxattr.file.destination.namespace": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.Namespace"} } - e.SetXAttr.Namespace = str + ev.SetXAttr.Namespace = rv return nil case "setxattr.file.filesystem": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.Filesystem"} } - e.SetXAttr.File.Filesystem = str + ev.SetXAttr.File.Filesystem = rv return nil case "setxattr.file.gid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.GID"} } - e.SetXAttr.File.FileFields.GID = uint32(v) + ev.SetXAttr.File.FileFields.GID = uint32(rv) return nil case "setxattr.file.group": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Group"} } - e.SetXAttr.File.FileFields.Group = str + ev.SetXAttr.File.FileFields.Group = rv return nil case "setxattr.file.in_upper_layer": - var ok bool - if e.SetXAttr.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.InUpperLayer"} } + ev.SetXAttr.File.FileFields.InUpperLayer = rv return nil case "setxattr.file.inode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Inode"} } - e.SetXAttr.File.FileFields.Inode = uint64(v) + ev.SetXAttr.File.FileFields.Inode = uint64(rv) return nil case "setxattr.file.mode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Mode"} } - e.SetXAttr.File.FileFields.Mode = uint16(v) + ev.SetXAttr.File.FileFields.Mode = uint16(rv) return nil case "setxattr.file.modification_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.MTime"} } - e.SetXAttr.File.FileFields.MTime = uint64(v) + ev.SetXAttr.File.FileFields.MTime = uint64(rv) return nil case "setxattr.file.mount_id": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.MountID"} } - e.SetXAttr.File.FileFields.MountID = uint32(v) + ev.SetXAttr.File.FileFields.MountID = uint32(rv) return nil case "setxattr.file.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.BasenameStr"} } - e.SetXAttr.File.BasenameStr = str + ev.SetXAttr.File.BasenameStr = rv return nil case "setxattr.file.name.length": return &eval.ErrFieldReadOnly{Field: "setxattr.file.name.length"} case "setxattr.file.path": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.PathnameStr"} } - e.SetXAttr.File.PathnameStr = str + ev.SetXAttr.File.PathnameStr = rv return nil case "setxattr.file.path.length": return &eval.ErrFieldReadOnly{Field: "setxattr.file.path.length"} case "setxattr.file.rights": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.Mode"} } - e.SetXAttr.File.FileFields.Mode = uint16(v) + ev.SetXAttr.File.FileFields.Mode = uint16(rv) return nil case "setxattr.file.uid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.UID"} } - e.SetXAttr.File.FileFields.UID = uint32(v) + ev.SetXAttr.File.FileFields.UID = uint32(rv) return nil case "setxattr.file.user": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.File.FileFields.User"} } - e.SetXAttr.File.FileFields.User = str + ev.SetXAttr.File.FileFields.User = rv return nil case "setxattr.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "SetXAttr.SyscallEvent.Retval"} } - e.SetXAttr.SyscallEvent.Retval = int64(v) + ev.SetXAttr.SyscallEvent.Retval = int64(rv) return nil case "signal.pid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.PID"} } - e.Signal.PID = uint32(v) + ev.Signal.PID = uint32(rv) return nil case "signal.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.SyscallEvent.Retval"} } - e.Signal.SyscallEvent.Retval = int64(v) + ev.Signal.SyscallEvent.Retval = int64(rv) return nil case "signal.target.ancestors.args": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Args"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Args = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Args = rv return nil case "signal.target.ancestors.args_flags": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} + } + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} + } + switch rv := value.(type) { + case string: + ev.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Argv, rv) + case []string: + ev.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(e.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) return nil case "signal.target.ancestors.args_options": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} + } + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} + } + switch rv := value.(type) { + case string: + ev.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Argv, rv) + case []string: + ev.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(e.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) return nil case "signal.target.ancestors.args_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.ArgsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.ArgsTruncated"} } + ev.Signal.Target.Ancestor.ProcessContext.Process.ArgsTruncated = rv return nil case "signal.target.ancestors.argv": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} + } + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} + } + switch rv := value.(type) { + case string: + ev.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Argv, rv) + case []string: + ev.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv = append(e.Signal.Target.Ancestor.ProcessContext.Process.Argv, str) return nil case "signal.target.ancestors.argv0": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Argv0"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Argv0 = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Argv0 = rv return nil case "signal.target.ancestors.cap_effective": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapEffective"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapEffective = uint64(rv) return nil case "signal.target.ancestors.cap_permitted": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapPermitted"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.CapPermitted = uint64(rv) return nil case "signal.target.ancestors.comm": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Comm"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Comm = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Comm = rv return nil case "signal.target.ancestors.container.id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.ContainerID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.ContainerID = str + ev.Signal.Target.Ancestor.ProcessContext.Process.ContainerID = rv return nil case "signal.target.ancestors.cookie": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Cookie"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Cookie = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Cookie = uint32(rv) return nil case "signal.target.ancestors.created_at": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.CreatedAt"} } - e.Signal.Target.Ancestor.ProcessContext.Process.CreatedAt = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.CreatedAt = uint64(rv) return nil case "signal.target.ancestors.egid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGID = uint32(rv) return nil case "signal.target.ancestors.egroup": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGroup"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGroup = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EGroup = rv return nil case "signal.target.ancestors.envp": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} + } + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} + } + switch rv := value.(type) { + case string: + ev.Signal.Target.Ancestor.ProcessContext.Process.Envp = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Envp, rv) + case []string: + ev.Signal.Target.Ancestor.ProcessContext.Process.Envp = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Envp, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Envp"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Envp = append(e.Signal.Target.Ancestor.ProcessContext.Process.Envp, str) return nil case "signal.target.ancestors.envs": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} - } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} - } - str, ok := value.(string) - if !ok { + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} + } + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} + } + switch rv := value.(type) { + case string: + ev.Signal.Target.Ancestor.ProcessContext.Process.Envs = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Envs, rv) + case []string: + ev.Signal.Target.Ancestor.ProcessContext.Process.Envs = append(ev.Signal.Target.Ancestor.ProcessContext.Process.Envs, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Envs"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Envs = append(e.Signal.Target.Ancestor.ProcessContext.Process.Envs, str) return nil case "signal.target.ancestors.envs_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.EnvsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.EnvsTruncated"} } + ev.Signal.Target.Ancestor.ProcessContext.Process.EnvsTruncated = rv return nil case "signal.target.ancestors.euid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUID = uint32(rv) return nil case "signal.target.ancestors.euser": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUser"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUser = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.EUser = rv return nil case "signal.target.ancestors.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.CTime = uint64(rv) return nil case "signal.target.ancestors.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.Filesystem"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.Filesystem = str + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.Filesystem = rv return nil case "signal.target.ancestors.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.GID = uint32(rv) return nil case "signal.target.ancestors.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = str + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Group = rv return nil case "signal.target.ancestors.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer"} } + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.InUpperLayer = rv return nil case "signal.target.ancestors.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Inode = uint64(rv) return nil case "signal.target.ancestors.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(rv) return nil case "signal.target.ancestors.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MTime = uint64(rv) return nil case "signal.target.ancestors.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.MountID = uint32(rv) return nil case "signal.target.ancestors.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.BasenameStr"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = str + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.BasenameStr = rv return nil case "signal.target.ancestors.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.file.name.length"} case "signal.target.ancestors.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.PathnameStr"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = str + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.PathnameStr = rv return nil case "signal.target.ancestors.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.file.path.length"} case "signal.target.ancestors.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.Mode = uint16(rv) return nil case "signal.target.ancestors.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.UID = uint32(rv) return nil case "signal.target.ancestors.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.User"} } - e.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = str + ev.Signal.Target.Ancestor.ProcessContext.Process.FileEvent.FileFields.User = rv return nil case "signal.target.ancestors.fsgid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGID = uint32(rv) return nil case "signal.target.ancestors.fsgroup": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGroup"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGroup = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSGroup = rv return nil case "signal.target.ancestors.fsuid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUID = uint32(rv) return nil case "signal.target.ancestors.fsuser": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUser"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUser = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.FSUser = rv return nil case "signal.target.ancestors.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.GID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.GID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.GID = uint32(rv) return nil case "signal.target.ancestors.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.Group"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.Group = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.Group = rv return nil case "signal.target.ancestors.interpreter.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(rv) return nil case "signal.target.ancestors.interpreter.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.Filesystem = rv return nil case "signal.target.ancestors.interpreter.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(rv) return nil case "signal.target.ancestors.interpreter.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Group = rv return nil case "signal.target.ancestors.interpreter.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer = rv return nil case "signal.target.ancestors.interpreter.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(rv) return nil case "signal.target.ancestors.interpreter.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "signal.target.ancestors.interpreter.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(rv) return nil case "signal.target.ancestors.interpreter.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(rv) return nil case "signal.target.ancestors.interpreter.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.BasenameStr = rv return nil case "signal.target.ancestors.interpreter.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.interpreter.file.name.length"} case "signal.target.ancestors.interpreter.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.PathnameStr = rv return nil case "signal.target.ancestors.interpreter.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } return &eval.ErrFieldReadOnly{Field: "signal.target.ancestors.interpreter.file.path.length"} case "signal.target.ancestors.interpreter.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "signal.target.ancestors.interpreter.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(rv) return nil case "signal.target.ancestors.interpreter.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.Signal.Target.Ancestor.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields.User = rv return nil case "signal.target.ancestors.is_kworker": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PIDContext.IsKworker"} } + ev.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.IsKworker = rv return nil case "signal.target.ancestors.is_thread": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - var ok bool - if e.Signal.Target.Ancestor.ProcessContext.Process.IsThread, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.IsThread"} } + ev.Signal.Target.Ancestor.ProcessContext.Process.IsThread = rv return nil case "signal.target.ancestors.pid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Pid"} } - e.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Pid = uint32(rv) return nil case "signal.target.ancestors.ppid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PPid"} } - e.Signal.Target.Ancestor.ProcessContext.Process.PPid = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.PPid = uint32(rv) return nil case "signal.target.ancestors.tid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Tid"} } - e.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.PIDContext.Tid = uint32(rv) return nil case "signal.target.ancestors.tty_name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.TTYName"} } - e.Signal.Target.Ancestor.ProcessContext.Process.TTYName = str + ev.Signal.Target.Ancestor.ProcessContext.Process.TTYName = rv return nil case "signal.target.ancestors.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.UID"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.UID = uint32(v) + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.UID = uint32(rv) return nil case "signal.target.ancestors.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Ancestor == nil { - e.Signal.Target.Ancestor = &ProcessCacheEntry{} + if ev.Signal.Target.Ancestor == nil { + ev.Signal.Target.Ancestor = &ProcessCacheEntry{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Ancestor.ProcessContext.Process.Credentials.User"} } - e.Signal.Target.Ancestor.ProcessContext.Process.Credentials.User = str + ev.Signal.Target.Ancestor.ProcessContext.Process.Credentials.User = rv return nil case "signal.target.args": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Args"} } - e.Signal.Target.Process.Args = str + ev.Signal.Target.Process.Args = rv return nil case "signal.target.args_flags": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} - } - str, ok := value.(string) - if !ok { + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} + } + switch rv := value.(type) { + case string: + ev.Signal.Target.Process.Argv = append(ev.Signal.Target.Process.Argv, rv) + case []string: + ev.Signal.Target.Process.Argv = append(ev.Signal.Target.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv"} } - e.Signal.Target.Process.Argv = append(e.Signal.Target.Process.Argv, str) return nil case "signal.target.args_options": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} - } - str, ok := value.(string) - if !ok { + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} + } + switch rv := value.(type) { + case string: + ev.Signal.Target.Process.Argv = append(ev.Signal.Target.Process.Argv, rv) + case []string: + ev.Signal.Target.Process.Argv = append(ev.Signal.Target.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv"} } - e.Signal.Target.Process.Argv = append(e.Signal.Target.Process.Argv, str) return nil case "signal.target.args_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - var ok bool - if e.Signal.Target.Process.ArgsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.ArgsTruncated"} } + ev.Signal.Target.Process.ArgsTruncated = rv return nil case "signal.target.argv": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} - } - str, ok := value.(string) - if !ok { + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} + } + switch rv := value.(type) { + case string: + ev.Signal.Target.Process.Argv = append(ev.Signal.Target.Process.Argv, rv) + case []string: + ev.Signal.Target.Process.Argv = append(ev.Signal.Target.Process.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv"} } - e.Signal.Target.Process.Argv = append(e.Signal.Target.Process.Argv, str) return nil case "signal.target.argv0": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Argv0"} } - e.Signal.Target.Process.Argv0 = str + ev.Signal.Target.Process.Argv0 = rv return nil case "signal.target.cap_effective": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.CapEffective"} } - e.Signal.Target.Process.Credentials.CapEffective = uint64(v) + ev.Signal.Target.Process.Credentials.CapEffective = uint64(rv) return nil case "signal.target.cap_permitted": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.CapPermitted"} } - e.Signal.Target.Process.Credentials.CapPermitted = uint64(v) + ev.Signal.Target.Process.Credentials.CapPermitted = uint64(rv) return nil case "signal.target.comm": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Comm"} } - e.Signal.Target.Process.Comm = str + ev.Signal.Target.Process.Comm = rv return nil case "signal.target.container.id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.ContainerID"} } - e.Signal.Target.Process.ContainerID = str + ev.Signal.Target.Process.ContainerID = rv return nil case "signal.target.cookie": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Cookie"} } - e.Signal.Target.Process.Cookie = uint32(v) + ev.Signal.Target.Process.Cookie = uint32(rv) return nil case "signal.target.created_at": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.CreatedAt"} } - e.Signal.Target.Process.CreatedAt = uint64(v) + ev.Signal.Target.Process.CreatedAt = uint64(rv) return nil case "signal.target.egid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EGID"} } - e.Signal.Target.Process.Credentials.EGID = uint32(v) + ev.Signal.Target.Process.Credentials.EGID = uint32(rv) return nil case "signal.target.egroup": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EGroup"} } - e.Signal.Target.Process.Credentials.EGroup = str + ev.Signal.Target.Process.Credentials.EGroup = rv return nil case "signal.target.envp": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} - } - str, ok := value.(string) - if !ok { + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} + } + switch rv := value.(type) { + case string: + ev.Signal.Target.Process.Envp = append(ev.Signal.Target.Process.Envp, rv) + case []string: + ev.Signal.Target.Process.Envp = append(ev.Signal.Target.Process.Envp, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Envp"} } - e.Signal.Target.Process.Envp = append(e.Signal.Target.Process.Envp, str) return nil case "signal.target.envs": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} - } - str, ok := value.(string) - if !ok { + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} + } + switch rv := value.(type) { + case string: + ev.Signal.Target.Process.Envs = append(ev.Signal.Target.Process.Envs, rv) + case []string: + ev.Signal.Target.Process.Envs = append(ev.Signal.Target.Process.Envs, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Envs"} } - e.Signal.Target.Process.Envs = append(e.Signal.Target.Process.Envs, str) return nil case "signal.target.envs_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - var ok bool - if e.Signal.Target.Process.EnvsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.EnvsTruncated"} } + ev.Signal.Target.Process.EnvsTruncated = rv return nil case "signal.target.euid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EUID"} } - e.Signal.Target.Process.Credentials.EUID = uint32(v) + ev.Signal.Target.Process.Credentials.EUID = uint32(rv) return nil case "signal.target.euser": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.EUser"} } - e.Signal.Target.Process.Credentials.EUser = str + ev.Signal.Target.Process.Credentials.EUser = rv return nil case "signal.target.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.CTime"} } - e.Signal.Target.Process.FileEvent.FileFields.CTime = uint64(v) + ev.Signal.Target.Process.FileEvent.FileFields.CTime = uint64(rv) return nil case "signal.target.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.Filesystem"} } - e.Signal.Target.Process.FileEvent.Filesystem = str + ev.Signal.Target.Process.FileEvent.Filesystem = rv return nil case "signal.target.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.GID"} } - e.Signal.Target.Process.FileEvent.FileFields.GID = uint32(v) + ev.Signal.Target.Process.FileEvent.FileFields.GID = uint32(rv) return nil case "signal.target.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Group"} } - e.Signal.Target.Process.FileEvent.FileFields.Group = str + ev.Signal.Target.Process.FileEvent.FileFields.Group = rv return nil case "signal.target.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - var ok bool - if e.Signal.Target.Process.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.InUpperLayer"} } + ev.Signal.Target.Process.FileEvent.FileFields.InUpperLayer = rv return nil case "signal.target.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Inode"} } - e.Signal.Target.Process.FileEvent.FileFields.Inode = uint64(v) + ev.Signal.Target.Process.FileEvent.FileFields.Inode = uint64(rv) return nil case "signal.target.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Mode"} } - e.Signal.Target.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Process.FileEvent.FileFields.Mode = uint16(rv) return nil case "signal.target.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.MTime"} } - e.Signal.Target.Process.FileEvent.FileFields.MTime = uint64(v) + ev.Signal.Target.Process.FileEvent.FileFields.MTime = uint64(rv) return nil case "signal.target.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.MountID"} } - e.Signal.Target.Process.FileEvent.FileFields.MountID = uint32(v) + ev.Signal.Target.Process.FileEvent.FileFields.MountID = uint32(rv) return nil case "signal.target.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.BasenameStr"} } - e.Signal.Target.Process.FileEvent.BasenameStr = str + ev.Signal.Target.Process.FileEvent.BasenameStr = rv return nil case "signal.target.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "signal.target.file.name.length"} case "signal.target.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.PathnameStr"} } - e.Signal.Target.Process.FileEvent.PathnameStr = str + ev.Signal.Target.Process.FileEvent.PathnameStr = rv return nil case "signal.target.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "signal.target.file.path.length"} case "signal.target.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.Mode"} } - e.Signal.Target.Process.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Process.FileEvent.FileFields.Mode = uint16(rv) return nil case "signal.target.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.UID"} } - e.Signal.Target.Process.FileEvent.FileFields.UID = uint32(v) + ev.Signal.Target.Process.FileEvent.FileFields.UID = uint32(rv) return nil case "signal.target.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.FileEvent.FileFields.User"} } - e.Signal.Target.Process.FileEvent.FileFields.User = str + ev.Signal.Target.Process.FileEvent.FileFields.User = rv return nil case "signal.target.fsgid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSGID"} } - e.Signal.Target.Process.Credentials.FSGID = uint32(v) + ev.Signal.Target.Process.Credentials.FSGID = uint32(rv) return nil case "signal.target.fsgroup": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSGroup"} } - e.Signal.Target.Process.Credentials.FSGroup = str + ev.Signal.Target.Process.Credentials.FSGroup = rv return nil case "signal.target.fsuid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSUID"} } - e.Signal.Target.Process.Credentials.FSUID = uint32(v) + ev.Signal.Target.Process.Credentials.FSUID = uint32(rv) return nil case "signal.target.fsuser": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.FSUser"} } - e.Signal.Target.Process.Credentials.FSUser = str + ev.Signal.Target.Process.Credentials.FSUser = rv return nil case "signal.target.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.GID"} } - e.Signal.Target.Process.Credentials.GID = uint32(v) + ev.Signal.Target.Process.Credentials.GID = uint32(rv) return nil case "signal.target.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.Group"} } - e.Signal.Target.Process.Credentials.Group = str + ev.Signal.Target.Process.Credentials.Group = rv return nil case "signal.target.interpreter.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.CTime = uint64(rv) return nil case "signal.target.interpreter.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem = str + ev.Signal.Target.Process.LinuxBinprm.FileEvent.Filesystem = rv return nil case "signal.target.interpreter.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.GID = uint32(rv) return nil case "signal.target.interpreter.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group = str + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Group = rv return nil case "signal.target.interpreter.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - var ok bool - if e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.InUpperLayer = rv return nil case "signal.target.interpreter.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Inode = uint64(rv) return nil case "signal.target.interpreter.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "signal.target.interpreter.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MTime = uint64(rv) return nil case "signal.target.interpreter.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.MountID = uint32(rv) return nil case "signal.target.interpreter.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr = str + ev.Signal.Target.Process.LinuxBinprm.FileEvent.BasenameStr = rv return nil case "signal.target.interpreter.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "signal.target.interpreter.file.name.length"} case "signal.target.interpreter.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr = str + ev.Signal.Target.Process.LinuxBinprm.FileEvent.PathnameStr = rv return nil case "signal.target.interpreter.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } return &eval.ErrFieldReadOnly{Field: "signal.target.interpreter.file.path.length"} case "signal.target.interpreter.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "signal.target.interpreter.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.UID = uint32(rv) return nil case "signal.target.interpreter.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User"} } - e.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User = str + ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields.User = rv return nil case "signal.target.is_kworker": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - var ok bool - if e.Signal.Target.Process.PIDContext.IsKworker, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PIDContext.IsKworker"} } + ev.Signal.Target.Process.PIDContext.IsKworker = rv return nil case "signal.target.is_thread": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - var ok bool - if e.Signal.Target.Process.IsThread, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.IsThread"} } + ev.Signal.Target.Process.IsThread = rv return nil case "signal.target.parent.args": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Args"} } - e.Signal.Target.Parent.Args = str + ev.Signal.Target.Parent.Args = rv return nil case "signal.target.parent.args_flags": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} + } + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} + } + switch rv := value.(type) { + case string: + ev.Signal.Target.Parent.Argv = append(ev.Signal.Target.Parent.Argv, rv) + case []string: + ev.Signal.Target.Parent.Argv = append(ev.Signal.Target.Parent.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv"} } - e.Signal.Target.Parent.Argv = append(e.Signal.Target.Parent.Argv, str) return nil case "signal.target.parent.args_options": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} + } + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} + } + switch rv := value.(type) { + case string: + ev.Signal.Target.Parent.Argv = append(ev.Signal.Target.Parent.Argv, rv) + case []string: + ev.Signal.Target.Parent.Argv = append(ev.Signal.Target.Parent.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv"} } - e.Signal.Target.Parent.Argv = append(e.Signal.Target.Parent.Argv, str) return nil case "signal.target.parent.args_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - var ok bool - if e.Signal.Target.Parent.ArgsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.ArgsTruncated"} } + ev.Signal.Target.Parent.ArgsTruncated = rv return nil case "signal.target.parent.argv": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} + } + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} + } + switch rv := value.(type) { + case string: + ev.Signal.Target.Parent.Argv = append(ev.Signal.Target.Parent.Argv, rv) + case []string: + ev.Signal.Target.Parent.Argv = append(ev.Signal.Target.Parent.Argv, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv"} } - e.Signal.Target.Parent.Argv = append(e.Signal.Target.Parent.Argv, str) return nil case "signal.target.parent.argv0": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Argv0"} } - e.Signal.Target.Parent.Argv0 = str + ev.Signal.Target.Parent.Argv0 = rv return nil case "signal.target.parent.cap_effective": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.CapEffective"} } - e.Signal.Target.Parent.Credentials.CapEffective = uint64(v) + ev.Signal.Target.Parent.Credentials.CapEffective = uint64(rv) return nil case "signal.target.parent.cap_permitted": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.CapPermitted"} } - e.Signal.Target.Parent.Credentials.CapPermitted = uint64(v) + ev.Signal.Target.Parent.Credentials.CapPermitted = uint64(rv) return nil case "signal.target.parent.comm": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Comm"} } - e.Signal.Target.Parent.Comm = str + ev.Signal.Target.Parent.Comm = rv return nil case "signal.target.parent.container.id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.ContainerID"} } - e.Signal.Target.Parent.ContainerID = str + ev.Signal.Target.Parent.ContainerID = rv return nil case "signal.target.parent.cookie": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Cookie"} } - e.Signal.Target.Parent.Cookie = uint32(v) + ev.Signal.Target.Parent.Cookie = uint32(rv) return nil case "signal.target.parent.created_at": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.CreatedAt"} } - e.Signal.Target.Parent.CreatedAt = uint64(v) + ev.Signal.Target.Parent.CreatedAt = uint64(rv) return nil case "signal.target.parent.egid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EGID"} } - e.Signal.Target.Parent.Credentials.EGID = uint32(v) + ev.Signal.Target.Parent.Credentials.EGID = uint32(rv) return nil case "signal.target.parent.egroup": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EGroup"} } - e.Signal.Target.Parent.Credentials.EGroup = str + ev.Signal.Target.Parent.Credentials.EGroup = rv return nil case "signal.target.parent.envp": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} + } + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} + } + switch rv := value.(type) { + case string: + ev.Signal.Target.Parent.Envp = append(ev.Signal.Target.Parent.Envp, rv) + case []string: + ev.Signal.Target.Parent.Envp = append(ev.Signal.Target.Parent.Envp, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Envp"} } - e.Signal.Target.Parent.Envp = append(e.Signal.Target.Parent.Envp, str) return nil case "signal.target.parent.envs": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} - } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} - } - str, ok := value.(string) - if !ok { + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} + } + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} + } + switch rv := value.(type) { + case string: + ev.Signal.Target.Parent.Envs = append(ev.Signal.Target.Parent.Envs, rv) + case []string: + ev.Signal.Target.Parent.Envs = append(ev.Signal.Target.Parent.Envs, rv...) + default: return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Envs"} } - e.Signal.Target.Parent.Envs = append(e.Signal.Target.Parent.Envs, str) return nil case "signal.target.parent.envs_truncated": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - var ok bool - if e.Signal.Target.Parent.EnvsTruncated, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.EnvsTruncated"} } + ev.Signal.Target.Parent.EnvsTruncated = rv return nil case "signal.target.parent.euid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EUID"} } - e.Signal.Target.Parent.Credentials.EUID = uint32(v) + ev.Signal.Target.Parent.Credentials.EUID = uint32(rv) return nil case "signal.target.parent.euser": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.EUser"} } - e.Signal.Target.Parent.Credentials.EUser = str + ev.Signal.Target.Parent.Credentials.EUser = rv return nil case "signal.target.parent.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.CTime"} } - e.Signal.Target.Parent.FileEvent.FileFields.CTime = uint64(v) + ev.Signal.Target.Parent.FileEvent.FileFields.CTime = uint64(rv) return nil case "signal.target.parent.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.Filesystem"} } - e.Signal.Target.Parent.FileEvent.Filesystem = str + ev.Signal.Target.Parent.FileEvent.Filesystem = rv return nil case "signal.target.parent.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.GID"} } - e.Signal.Target.Parent.FileEvent.FileFields.GID = uint32(v) + ev.Signal.Target.Parent.FileEvent.FileFields.GID = uint32(rv) return nil case "signal.target.parent.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Group"} } - e.Signal.Target.Parent.FileEvent.FileFields.Group = str + ev.Signal.Target.Parent.FileEvent.FileFields.Group = rv return nil case "signal.target.parent.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - var ok bool - if e.Signal.Target.Parent.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.InUpperLayer"} } + ev.Signal.Target.Parent.FileEvent.FileFields.InUpperLayer = rv return nil case "signal.target.parent.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Inode"} } - e.Signal.Target.Parent.FileEvent.FileFields.Inode = uint64(v) + ev.Signal.Target.Parent.FileEvent.FileFields.Inode = uint64(rv) return nil case "signal.target.parent.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Mode"} } - e.Signal.Target.Parent.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Parent.FileEvent.FileFields.Mode = uint16(rv) return nil case "signal.target.parent.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.MTime"} } - e.Signal.Target.Parent.FileEvent.FileFields.MTime = uint64(v) + ev.Signal.Target.Parent.FileEvent.FileFields.MTime = uint64(rv) return nil case "signal.target.parent.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.MountID"} } - e.Signal.Target.Parent.FileEvent.FileFields.MountID = uint32(v) + ev.Signal.Target.Parent.FileEvent.FileFields.MountID = uint32(rv) return nil case "signal.target.parent.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.BasenameStr"} } - e.Signal.Target.Parent.FileEvent.BasenameStr = str + ev.Signal.Target.Parent.FileEvent.BasenameStr = rv return nil case "signal.target.parent.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "signal.target.parent.file.name.length"} case "signal.target.parent.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.PathnameStr"} } - e.Signal.Target.Parent.FileEvent.PathnameStr = str + ev.Signal.Target.Parent.FileEvent.PathnameStr = rv return nil case "signal.target.parent.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "signal.target.parent.file.path.length"} case "signal.target.parent.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.Mode"} } - e.Signal.Target.Parent.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Parent.FileEvent.FileFields.Mode = uint16(rv) return nil case "signal.target.parent.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.UID"} } - e.Signal.Target.Parent.FileEvent.FileFields.UID = uint32(v) + ev.Signal.Target.Parent.FileEvent.FileFields.UID = uint32(rv) return nil case "signal.target.parent.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.FileEvent.FileFields.User"} } - e.Signal.Target.Parent.FileEvent.FileFields.User = str + ev.Signal.Target.Parent.FileEvent.FileFields.User = rv return nil case "signal.target.parent.fsgid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSGID"} } - e.Signal.Target.Parent.Credentials.FSGID = uint32(v) + ev.Signal.Target.Parent.Credentials.FSGID = uint32(rv) return nil case "signal.target.parent.fsgroup": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSGroup"} } - e.Signal.Target.Parent.Credentials.FSGroup = str + ev.Signal.Target.Parent.Credentials.FSGroup = rv return nil case "signal.target.parent.fsuid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSUID"} } - e.Signal.Target.Parent.Credentials.FSUID = uint32(v) + ev.Signal.Target.Parent.Credentials.FSUID = uint32(rv) return nil case "signal.target.parent.fsuser": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.FSUser"} } - e.Signal.Target.Parent.Credentials.FSUser = str + ev.Signal.Target.Parent.Credentials.FSUser = rv return nil case "signal.target.parent.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.GID"} } - e.Signal.Target.Parent.Credentials.GID = uint32(v) + ev.Signal.Target.Parent.Credentials.GID = uint32(rv) return nil case "signal.target.parent.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.Group"} } - e.Signal.Target.Parent.Credentials.Group = str + ev.Signal.Target.Parent.Credentials.Group = rv return nil case "signal.target.parent.interpreter.file.change_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.CTime = uint64(rv) return nil case "signal.target.parent.interpreter.file.filesystem": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem = str + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.Filesystem = rv return nil case "signal.target.parent.interpreter.file.gid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.GID = uint32(rv) return nil case "signal.target.parent.interpreter.file.group": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group = str + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Group = rv return nil case "signal.target.parent.interpreter.file.in_upper_layer": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - var ok bool - if e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer"} } + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.InUpperLayer = rv return nil case "signal.target.parent.interpreter.file.inode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Inode = uint64(rv) return nil case "signal.target.parent.interpreter.file.mode": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "signal.target.parent.interpreter.file.modification_time": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MTime = uint64(rv) return nil case "signal.target.parent.interpreter.file.mount_id": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.MountID = uint32(rv) return nil case "signal.target.parent.interpreter.file.name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr = str + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.BasenameStr = rv return nil case "signal.target.parent.interpreter.file.name.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "signal.target.parent.interpreter.file.name.length"} case "signal.target.parent.interpreter.file.path": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr = str + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.PathnameStr = rv return nil case "signal.target.parent.interpreter.file.path.length": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } return &eval.ErrFieldReadOnly{Field: "signal.target.parent.interpreter.file.path.length"} case "signal.target.parent.interpreter.file.rights": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.Mode = uint16(rv) return nil case "signal.target.parent.interpreter.file.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(v) + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.UID = uint32(rv) return nil case "signal.target.parent.interpreter.file.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User"} } - e.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User = str + ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields.User = rv return nil case "signal.target.parent.is_kworker": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - var ok bool - if e.Signal.Target.Parent.PIDContext.IsKworker, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PIDContext.IsKworker"} } + ev.Signal.Target.Parent.PIDContext.IsKworker = rv return nil case "signal.target.parent.is_thread": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - var ok bool - if e.Signal.Target.Parent.IsThread, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.IsThread"} } + ev.Signal.Target.Parent.IsThread = rv return nil case "signal.target.parent.pid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PIDContext.Pid"} } - e.Signal.Target.Parent.PIDContext.Pid = uint32(v) + ev.Signal.Target.Parent.PIDContext.Pid = uint32(rv) return nil case "signal.target.parent.ppid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PPid"} } - e.Signal.Target.Parent.PPid = uint32(v) + ev.Signal.Target.Parent.PPid = uint32(rv) return nil case "signal.target.parent.tid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.PIDContext.Tid"} } - e.Signal.Target.Parent.PIDContext.Tid = uint32(v) + ev.Signal.Target.Parent.PIDContext.Tid = uint32(rv) return nil case "signal.target.parent.tty_name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.TTYName"} } - e.Signal.Target.Parent.TTYName = str + ev.Signal.Target.Parent.TTYName = rv return nil case "signal.target.parent.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.UID"} } - e.Signal.Target.Parent.Credentials.UID = uint32(v) + ev.Signal.Target.Parent.Credentials.UID = uint32(rv) return nil case "signal.target.parent.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - if e.Signal.Target.Parent == nil { - e.Signal.Target.Parent = &Process{} + if ev.Signal.Target.Parent == nil { + ev.Signal.Target.Parent = &Process{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Parent.Credentials.User"} } - e.Signal.Target.Parent.Credentials.User = str + ev.Signal.Target.Parent.Credentials.User = rv return nil case "signal.target.pid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PIDContext.Pid"} } - e.Signal.Target.Process.PIDContext.Pid = uint32(v) + ev.Signal.Target.Process.PIDContext.Pid = uint32(rv) return nil case "signal.target.ppid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PPid"} } - e.Signal.Target.Process.PPid = uint32(v) + ev.Signal.Target.Process.PPid = uint32(rv) return nil case "signal.target.tid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.PIDContext.Tid"} } - e.Signal.Target.Process.PIDContext.Tid = uint32(v) + ev.Signal.Target.Process.PIDContext.Tid = uint32(rv) return nil case "signal.target.tty_name": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.TTYName"} } - e.Signal.Target.Process.TTYName = str + ev.Signal.Target.Process.TTYName = rv return nil case "signal.target.uid": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.UID"} } - e.Signal.Target.Process.Credentials.UID = uint32(v) + ev.Signal.Target.Process.Credentials.UID = uint32(rv) return nil case "signal.target.user": - if e.Signal.Target == nil { - e.Signal.Target = &ProcessContext{} + if ev.Signal.Target == nil { + ev.Signal.Target = &ProcessContext{} } - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Target.Process.Credentials.User"} } - e.Signal.Target.Process.Credentials.User = str + ev.Signal.Target.Process.Credentials.User = rv return nil case "signal.type": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Signal.Type"} } - e.Signal.Type = uint32(v) + ev.Signal.Type = uint32(rv) return nil case "splice.file.change_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.CTime"} } - e.Splice.File.FileFields.CTime = uint64(v) + ev.Splice.File.FileFields.CTime = uint64(rv) return nil case "splice.file.filesystem": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.Filesystem"} } - e.Splice.File.Filesystem = str + ev.Splice.File.Filesystem = rv return nil case "splice.file.gid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.GID"} } - e.Splice.File.FileFields.GID = uint32(v) + ev.Splice.File.FileFields.GID = uint32(rv) return nil case "splice.file.group": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Group"} } - e.Splice.File.FileFields.Group = str + ev.Splice.File.FileFields.Group = rv return nil case "splice.file.in_upper_layer": - var ok bool - if e.Splice.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.InUpperLayer"} } + ev.Splice.File.FileFields.InUpperLayer = rv return nil case "splice.file.inode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Inode"} } - e.Splice.File.FileFields.Inode = uint64(v) + ev.Splice.File.FileFields.Inode = uint64(rv) return nil case "splice.file.mode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Mode"} } - e.Splice.File.FileFields.Mode = uint16(v) + ev.Splice.File.FileFields.Mode = uint16(rv) return nil case "splice.file.modification_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.MTime"} } - e.Splice.File.FileFields.MTime = uint64(v) + ev.Splice.File.FileFields.MTime = uint64(rv) return nil case "splice.file.mount_id": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.MountID"} } - e.Splice.File.FileFields.MountID = uint32(v) + ev.Splice.File.FileFields.MountID = uint32(rv) return nil case "splice.file.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.BasenameStr"} } - e.Splice.File.BasenameStr = str + ev.Splice.File.BasenameStr = rv return nil case "splice.file.name.length": return &eval.ErrFieldReadOnly{Field: "splice.file.name.length"} case "splice.file.path": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.PathnameStr"} } - e.Splice.File.PathnameStr = str + ev.Splice.File.PathnameStr = rv return nil case "splice.file.path.length": return &eval.ErrFieldReadOnly{Field: "splice.file.path.length"} case "splice.file.rights": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.Mode"} } - e.Splice.File.FileFields.Mode = uint16(v) + ev.Splice.File.FileFields.Mode = uint16(rv) return nil case "splice.file.uid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.UID"} } - e.Splice.File.FileFields.UID = uint32(v) + ev.Splice.File.FileFields.UID = uint32(rv) return nil case "splice.file.user": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.File.FileFields.User"} } - e.Splice.File.FileFields.User = str + ev.Splice.File.FileFields.User = rv return nil case "splice.pipe_entry_flag": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.PipeEntryFlag"} } - e.Splice.PipeEntryFlag = uint32(v) + ev.Splice.PipeEntryFlag = uint32(rv) return nil case "splice.pipe_exit_flag": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.PipeExitFlag"} } - e.Splice.PipeExitFlag = uint32(v) + ev.Splice.PipeExitFlag = uint32(rv) return nil case "splice.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Splice.SyscallEvent.Retval"} } - e.Splice.SyscallEvent.Retval = int64(v) + ev.Splice.SyscallEvent.Retval = int64(rv) return nil case "unlink.file.change_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.CTime"} } - e.Unlink.File.FileFields.CTime = uint64(v) + ev.Unlink.File.FileFields.CTime = uint64(rv) return nil case "unlink.file.filesystem": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.Filesystem"} } - e.Unlink.File.Filesystem = str + ev.Unlink.File.Filesystem = rv return nil case "unlink.file.gid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.GID"} } - e.Unlink.File.FileFields.GID = uint32(v) + ev.Unlink.File.FileFields.GID = uint32(rv) return nil case "unlink.file.group": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Group"} } - e.Unlink.File.FileFields.Group = str + ev.Unlink.File.FileFields.Group = rv return nil case "unlink.file.in_upper_layer": - var ok bool - if e.Unlink.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.InUpperLayer"} } + ev.Unlink.File.FileFields.InUpperLayer = rv return nil case "unlink.file.inode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Inode"} } - e.Unlink.File.FileFields.Inode = uint64(v) + ev.Unlink.File.FileFields.Inode = uint64(rv) return nil case "unlink.file.mode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Mode"} } - e.Unlink.File.FileFields.Mode = uint16(v) + ev.Unlink.File.FileFields.Mode = uint16(rv) return nil case "unlink.file.modification_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.MTime"} } - e.Unlink.File.FileFields.MTime = uint64(v) + ev.Unlink.File.FileFields.MTime = uint64(rv) return nil case "unlink.file.mount_id": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.MountID"} } - e.Unlink.File.FileFields.MountID = uint32(v) + ev.Unlink.File.FileFields.MountID = uint32(rv) return nil case "unlink.file.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.BasenameStr"} } - e.Unlink.File.BasenameStr = str + ev.Unlink.File.BasenameStr = rv return nil case "unlink.file.name.length": return &eval.ErrFieldReadOnly{Field: "unlink.file.name.length"} case "unlink.file.path": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.PathnameStr"} } - e.Unlink.File.PathnameStr = str + ev.Unlink.File.PathnameStr = rv return nil case "unlink.file.path.length": return &eval.ErrFieldReadOnly{Field: "unlink.file.path.length"} case "unlink.file.rights": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.Mode"} } - e.Unlink.File.FileFields.Mode = uint16(v) + ev.Unlink.File.FileFields.Mode = uint16(rv) return nil case "unlink.file.uid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.UID"} } - e.Unlink.File.FileFields.UID = uint32(v) + ev.Unlink.File.FileFields.UID = uint32(rv) return nil case "unlink.file.user": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.File.FileFields.User"} } - e.Unlink.File.FileFields.User = str + ev.Unlink.File.FileFields.User = rv return nil case "unlink.flags": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.Flags"} } - e.Unlink.Flags = uint32(v) + ev.Unlink.Flags = uint32(rv) return nil case "unlink.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Unlink.SyscallEvent.Retval"} } - e.Unlink.SyscallEvent.Retval = int64(v) + ev.Unlink.SyscallEvent.Retval = int64(rv) return nil case "unload_module.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "UnloadModule.Name"} } - e.UnloadModule.Name = str + ev.UnloadModule.Name = rv return nil case "unload_module.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "UnloadModule.SyscallEvent.Retval"} } - e.UnloadModule.SyscallEvent.Retval = int64(v) + ev.UnloadModule.SyscallEvent.Retval = int64(rv) return nil case "utimes.file.change_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.CTime"} } - e.Utimes.File.FileFields.CTime = uint64(v) + ev.Utimes.File.FileFields.CTime = uint64(rv) return nil case "utimes.file.filesystem": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.Filesystem"} } - e.Utimes.File.Filesystem = str + ev.Utimes.File.Filesystem = rv return nil case "utimes.file.gid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.GID"} } - e.Utimes.File.FileFields.GID = uint32(v) + ev.Utimes.File.FileFields.GID = uint32(rv) return nil case "utimes.file.group": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Group"} } - e.Utimes.File.FileFields.Group = str + ev.Utimes.File.FileFields.Group = rv return nil case "utimes.file.in_upper_layer": - var ok bool - if e.Utimes.File.FileFields.InUpperLayer, ok = value.(bool); !ok { + rv, ok := value.(bool) + if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.InUpperLayer"} } + ev.Utimes.File.FileFields.InUpperLayer = rv return nil case "utimes.file.inode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Inode"} } - e.Utimes.File.FileFields.Inode = uint64(v) + ev.Utimes.File.FileFields.Inode = uint64(rv) return nil case "utimes.file.mode": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Mode"} } - e.Utimes.File.FileFields.Mode = uint16(v) + ev.Utimes.File.FileFields.Mode = uint16(rv) return nil case "utimes.file.modification_time": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.MTime"} } - e.Utimes.File.FileFields.MTime = uint64(v) + ev.Utimes.File.FileFields.MTime = uint64(rv) return nil case "utimes.file.mount_id": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.MountID"} } - e.Utimes.File.FileFields.MountID = uint32(v) + ev.Utimes.File.FileFields.MountID = uint32(rv) return nil case "utimes.file.name": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.BasenameStr"} } - e.Utimes.File.BasenameStr = str + ev.Utimes.File.BasenameStr = rv return nil case "utimes.file.name.length": return &eval.ErrFieldReadOnly{Field: "utimes.file.name.length"} case "utimes.file.path": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.PathnameStr"} } - e.Utimes.File.PathnameStr = str + ev.Utimes.File.PathnameStr = rv return nil case "utimes.file.path.length": return &eval.ErrFieldReadOnly{Field: "utimes.file.path.length"} case "utimes.file.rights": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.Mode"} } - e.Utimes.File.FileFields.Mode = uint16(v) + ev.Utimes.File.FileFields.Mode = uint16(rv) return nil case "utimes.file.uid": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.UID"} } - e.Utimes.File.FileFields.UID = uint32(v) + ev.Utimes.File.FileFields.UID = uint32(rv) return nil case "utimes.file.user": - str, ok := value.(string) + rv, ok := value.(string) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.File.FileFields.User"} } - e.Utimes.File.FileFields.User = str + ev.Utimes.File.FileFields.User = rv return nil case "utimes.retval": - v, ok := value.(int) + rv, ok := value.(int) if !ok { return &eval.ErrValueTypeMismatch{Field: "Utimes.SyscallEvent.Retval"} } - e.Utimes.SyscallEvent.Retval = int64(v) + ev.Utimes.SyscallEvent.Retval = int64(rv) return nil } return &eval.ErrFieldNotFound{Field: field} diff --git a/pkg/security/secl/model/consts_linux.go b/pkg/security/secl/model/consts_linux.go index c904e0c02da0c..71c92a78a95a1 100644 --- a/pkg/security/secl/model/consts_linux.go +++ b/pkg/security/secl/model/consts_linux.go @@ -13,7 +13,7 @@ import ( var ( // errorConstants are the supported error constants - // generate_constants:Error Constants,Error Constants are the supported error constants. + // generate_constants:Error constants,Error constants are the supported error constants. errorConstants = map[string]int{ "E2BIG": -int(syscall.E2BIG), "EACCES": -int(syscall.EACCES), diff --git a/pkg/security/secl/model/events.go b/pkg/security/secl/model/events.go index dc23daecafc8c..689115d4af64c 100644 --- a/pkg/security/secl/model/events.go +++ b/pkg/security/secl/model/events.go @@ -216,6 +216,7 @@ func (t EventType) String() string { // ParseEvalEventType convert a eval.EventType (string) to its uint64 representation // the current algorithm is not efficient but allows us to reduce the number of conversion functions +// //nolint:deadcode,unused func ParseEvalEventType(eventType eval.EventType) EventType { for i := uint64(0); i != uint64(MaxAllEventType); i++ { diff --git a/pkg/security/secl/model/field_handlers.go b/pkg/security/secl/model/field_handlers.go new file mode 100644 index 0000000000000..cdd8c9194fe3c --- /dev/null +++ b/pkg/security/secl/model/field_handlers.go @@ -0,0 +1,681 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. +// Code generated - DO NOT EDIT. +package model + +// ResolveFields resolves all the fields associate to the event type. Context fields are automatically resolved. +func (ev *Event) ResolveFields() { + ev.resolveFields(false) +} + +// ResolveFieldsForAD resolves all the fields associate to the event type. Context fields are automatically resolved. +func (ev *Event) ResolveFieldsForAD() { + ev.resolveFields(true) +} +func (ev *Event) resolveFields(forADs bool) { + // resolve context fields that are not related to any event type + _ = ev.FieldHandlers.ResolveContainerID(ev, &ev.ContainerContext) + if !forADs { + _ = ev.FieldHandlers.ResolveContainerTags(ev, &ev.ContainerContext) + } + _ = ev.FieldHandlers.ResolveNetworkDeviceIfName(ev, &ev.NetworkContext.Device) + _ = ev.FieldHandlers.ResolveProcessArgs(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessArgv(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.ProcessContext.Process) + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.ProcessContext.Process) + if ev.ProcessContext.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Process.FileEvent) + } + if ev.ProcessContext.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Process.FileEvent.FileFields) + } + if ev.ProcessContext.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Process.FileEvent.FileFields) + } + if ev.ProcessContext.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.FileEvent) + } + if ev.ProcessContext.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.FileEvent) + } + if ev.ProcessContext.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Process.FileEvent.FileFields) + } + if ev.ProcessContext.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent) + } + if ev.ProcessContext.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.ProcessContext.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.ProcessContext.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent) + } + if ev.ProcessContext.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent) + } + if ev.ProcessContext.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgs(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgv(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.ProcessContext.Parent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Parent.FileEvent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Parent.FileEvent.FileFields) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Parent.FileEvent.FileFields) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.FileEvent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.FileEvent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Parent.FileEvent.FileFields) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent) + } + if ev.ProcessContext.HasParent() && ev.ProcessContext.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.ProcessContext.Parent.LinuxBinprm.FileEvent.FileFields) + } + // resolve event specific fields + switch ev.GetEventType().String() { + case "bind": + case "bpf": + case "capset": + case "chmod": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Chmod.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Chmod.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Chmod.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Chmod.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chmod.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Chmod.File) + case "chown": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Chown.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Chown.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Chown.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Chown.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Chown.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Chown.File) + _ = ev.FieldHandlers.ResolveChownUID(ev, &ev.Chown) + _ = ev.FieldHandlers.ResolveChownGID(ev, &ev.Chown) + case "dns": + case "exec": + if ev.Exec.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exec.Process.FileEvent.FileFields) + } + if ev.Exec.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exec.Process.FileEvent.FileFields) + } + if ev.Exec.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exec.Process.FileEvent.FileFields) + } + if ev.Exec.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.FileEvent) + } + if ev.Exec.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.FileEvent) + } + if ev.Exec.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exec.Process.FileEvent) + } + if ev.Exec.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Exec.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Exec.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exec.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Exec.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Exec.Process.LinuxBinprm.FileEvent) + } + if ev.Exec.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exec.Process.LinuxBinprm.FileEvent) + } + if ev.Exec.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exec.Process.LinuxBinprm.FileEvent) + } + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessArgs(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessArgv(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Exec.Process) + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Exec.Process) + case "exit": + if ev.Exit.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exit.Process.FileEvent.FileFields) + } + if ev.Exit.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exit.Process.FileEvent.FileFields) + } + if ev.Exit.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exit.Process.FileEvent.FileFields) + } + if ev.Exit.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.FileEvent) + } + if ev.Exit.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.FileEvent) + } + if ev.Exit.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exit.Process.FileEvent) + } + if ev.Exit.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Exit.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Exit.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Exit.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Exit.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Exit.Process.LinuxBinprm.FileEvent) + } + if ev.Exit.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Exit.Process.LinuxBinprm.FileEvent) + } + if ev.Exit.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Exit.Process.LinuxBinprm.FileEvent) + } + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessArgs(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessArgv(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Exit.Process) + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Exit.Process) + case "link": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Link.Source.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Link.Source.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Link.Source.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Source) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Source) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Link.Source) + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Link.Target.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Link.Target.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Link.Target.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Link.Target) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Link.Target) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Link.Target) + case "load_module": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.LoadModule.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.LoadModule.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.LoadModule.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.LoadModule.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.LoadModule.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.LoadModule.File) + case "mkdir": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Mkdir.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Mkdir.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Mkdir.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Mkdir.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Mkdir.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Mkdir.File) + case "mmap": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.MMap.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.MMap.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.MMap.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.MMap.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.MMap.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.MMap.File) + case "mount": + _ = ev.FieldHandlers.ResolveMountPointPath(ev, &ev.Mount) + _ = ev.FieldHandlers.ResolveMountSourcePath(ev, &ev.Mount) + case "mprotect": + case "open": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Open.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Open.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Open.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Open.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Open.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Open.File) + case "ptrace": + if ev.PTrace.Tracee.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields) + } + if ev.PTrace.Tracee.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields) + } + if ev.PTrace.Tracee.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Process.FileEvent.FileFields) + } + if ev.PTrace.Tracee.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.FileEvent) + } + if ev.PTrace.Tracee.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.FileEvent) + } + if ev.PTrace.Tracee.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Process.FileEvent) + } + if ev.PTrace.Tracee.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.PTrace.Tracee.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.PTrace.Tracee.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.PTrace.Tracee.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) + } + if ev.PTrace.Tracee.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) + } + if ev.PTrace.Tracee.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Process.LinuxBinprm.FileEvent) + } + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessArgs(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessArgv(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.PTrace.Tracee.Process) + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.PTrace.Tracee.Process) + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Parent.FileEvent.FileFields) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.FileEvent) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.FileEvent) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Parent.FileEvent) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) + } + if ev.PTrace.Tracee.HasParent() && ev.PTrace.Tracee.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.PTrace.Tracee.Parent.LinuxBinprm.FileEvent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgs(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgv(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, ev.PTrace.Tracee.Parent) + } + if ev.PTrace.Tracee.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.PTrace.Tracee.Parent) + } + case "removexattr": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.RemoveXAttr.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.RemoveXAttr.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.RemoveXAttr.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.RemoveXAttr.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.RemoveXAttr.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.RemoveXAttr.File) + _ = ev.FieldHandlers.ResolveXAttrNamespace(ev, &ev.RemoveXAttr) + _ = ev.FieldHandlers.ResolveXAttrName(ev, &ev.RemoveXAttr) + case "rename": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rename.Old.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rename.Old.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rename.Old.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.Old) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.Old) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rename.Old) + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rename.New.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rename.New.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rename.New.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Rename.New) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rename.New) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rename.New) + case "rmdir": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Rmdir.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Rmdir.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Rmdir.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Rmdir.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Rmdir.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Rmdir.File) + case "selinux": + _ = ev.FieldHandlers.ResolveSELinuxBoolName(ev, &ev.SELinux) + case "setgid": + _ = ev.FieldHandlers.ResolveSetgidGroup(ev, &ev.SetGID) + _ = ev.FieldHandlers.ResolveSetgidEGroup(ev, &ev.SetGID) + _ = ev.FieldHandlers.ResolveSetgidFSGroup(ev, &ev.SetGID) + case "setuid": + _ = ev.FieldHandlers.ResolveSetuidUser(ev, &ev.SetUID) + _ = ev.FieldHandlers.ResolveSetuidEUser(ev, &ev.SetUID) + _ = ev.FieldHandlers.ResolveSetuidFSUser(ev, &ev.SetUID) + case "setxattr": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.SetXAttr.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.SetXAttr.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.SetXAttr.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.SetXAttr.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.SetXAttr.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.SetXAttr.File) + _ = ev.FieldHandlers.ResolveXAttrNamespace(ev, &ev.SetXAttr) + _ = ev.FieldHandlers.ResolveXAttrName(ev, &ev.SetXAttr) + case "signal": + if ev.Signal.Target.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Process.FileEvent.FileFields) + } + if ev.Signal.Target.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Process.FileEvent.FileFields) + } + if ev.Signal.Target.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Process.FileEvent.FileFields) + } + if ev.Signal.Target.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.FileEvent) + } + if ev.Signal.Target.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.FileEvent) + } + if ev.Signal.Target.Process.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Process.FileEvent) + } + if ev.Signal.Target.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Signal.Target.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Signal.Target.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent.FileFields) + } + if ev.Signal.Target.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent) + } + if ev.Signal.Target.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent) + } + if ev.Signal.Target.Process.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Process.LinuxBinprm.FileEvent) + } + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessArgs(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessArgv(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, &ev.Signal.Target.Process) + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, &ev.Signal.Target.Process) + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Parent.FileEvent.FileFields) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Parent.FileEvent.FileFields) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Parent.FileEvent.FileFields) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.FileEvent) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.FileEvent) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.IsNotKworker() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Parent.FileEvent) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent.FileFields) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent) + } + if ev.Signal.Target.HasParent() && ev.Signal.Target.Parent.HasInterpreter() { + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Signal.Target.Parent.LinuxBinprm.FileEvent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessCreatedAt(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgv0(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgs(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgv(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessArgsTruncated(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvs(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvp(ev, ev.Signal.Target.Parent) + } + if ev.Signal.Target.HasParent() { + _ = ev.FieldHandlers.ResolveProcessEnvsTruncated(ev, ev.Signal.Target.Parent) + } + case "splice": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Splice.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Splice.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Splice.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Splice.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Splice.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Splice.File) + case "unlink": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Unlink.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Unlink.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Unlink.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Unlink.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Unlink.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Unlink.File) + case "unload_module": + case "utimes": + _ = ev.FieldHandlers.ResolveFileFieldsUser(ev, &ev.Utimes.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsGroup(ev, &ev.Utimes.File.FileFields) + _ = ev.FieldHandlers.ResolveFileFieldsInUpperLayer(ev, &ev.Utimes.File.FileFields) + _ = ev.FieldHandlers.ResolveFilePath(ev, &ev.Utimes.File) + _ = ev.FieldHandlers.ResolveFileBasename(ev, &ev.Utimes.File) + _ = ev.FieldHandlers.ResolveFileFilesystem(ev, &ev.Utimes.File) + } +} + +type FieldHandlers interface { + ResolveChownGID(ev *Event, e *ChownEvent) string + ResolveChownUID(ev *Event, e *ChownEvent) string + ResolveContainerID(ev *Event, e *ContainerContext) string + ResolveContainerTags(ev *Event, e *ContainerContext) []string + ResolveFileBasename(ev *Event, e *FileEvent) string + ResolveFileFieldsGroup(ev *Event, e *FileFields) string + ResolveFileFieldsInUpperLayer(ev *Event, e *FileFields) bool + ResolveFileFieldsUser(ev *Event, e *FileFields) string + ResolveFileFilesystem(ev *Event, e *FileEvent) string + ResolveFilePath(ev *Event, e *FileEvent) string + ResolveMountPointPath(ev *Event, e *MountEvent) string + ResolveMountSourcePath(ev *Event, e *MountEvent) string + ResolveNetworkDeviceIfName(ev *Event, e *NetworkDeviceContext) string + ResolveProcessArgs(ev *Event, e *Process) string + ResolveProcessArgsFlags(ev *Event, e *Process) []string + ResolveProcessArgsOptions(ev *Event, e *Process) []string + ResolveProcessArgsTruncated(ev *Event, e *Process) bool + ResolveProcessArgv(ev *Event, e *Process) []string + ResolveProcessArgv0(ev *Event, e *Process) string + ResolveProcessCreatedAt(ev *Event, e *Process) int + ResolveProcessEnvp(ev *Event, e *Process) []string + ResolveProcessEnvs(ev *Event, e *Process) []string + ResolveProcessEnvsTruncated(ev *Event, e *Process) bool + ResolveRights(ev *Event, e *FileFields) int + ResolveSELinuxBoolName(ev *Event, e *SELinuxEvent) string + ResolveSetgidEGroup(ev *Event, e *SetgidEvent) string + ResolveSetgidFSGroup(ev *Event, e *SetgidEvent) string + ResolveSetgidGroup(ev *Event, e *SetgidEvent) string + ResolveSetuidEUser(ev *Event, e *SetuidEvent) string + ResolveSetuidFSUser(ev *Event, e *SetuidEvent) string + ResolveSetuidUser(ev *Event, e *SetuidEvent) string + ResolveXAttrName(ev *Event, e *SetXAttrEvent) string + ResolveXAttrNamespace(ev *Event, e *SetXAttrEvent) string + // custom handlers not tied to any fields + ExtraFieldHandlers +} +type DefaultFieldHandlers struct{} + +func (dfh *DefaultFieldHandlers) ResolveChownGID(ev *Event, e *ChownEvent) string { return e.Group } +func (dfh *DefaultFieldHandlers) ResolveChownUID(ev *Event, e *ChownEvent) string { return e.User } +func (dfh *DefaultFieldHandlers) ResolveContainerID(ev *Event, e *ContainerContext) string { + return e.ID +} +func (dfh *DefaultFieldHandlers) ResolveContainerTags(ev *Event, e *ContainerContext) []string { + return e.Tags +} +func (dfh *DefaultFieldHandlers) ResolveFileBasename(ev *Event, e *FileEvent) string { + return e.BasenameStr +} +func (dfh *DefaultFieldHandlers) ResolveFileFieldsGroup(ev *Event, e *FileFields) string { + return e.Group +} +func (dfh *DefaultFieldHandlers) ResolveFileFieldsInUpperLayer(ev *Event, e *FileFields) bool { + return e.InUpperLayer +} +func (dfh *DefaultFieldHandlers) ResolveFileFieldsUser(ev *Event, e *FileFields) string { + return e.User +} +func (dfh *DefaultFieldHandlers) ResolveFileFilesystem(ev *Event, e *FileEvent) string { + return e.Filesystem +} +func (dfh *DefaultFieldHandlers) ResolveFilePath(ev *Event, e *FileEvent) string { + return e.PathnameStr +} +func (dfh *DefaultFieldHandlers) ResolveMountPointPath(ev *Event, e *MountEvent) string { + return e.MountPointPath +} +func (dfh *DefaultFieldHandlers) ResolveMountSourcePath(ev *Event, e *MountEvent) string { + return e.MountSourcePath +} +func (dfh *DefaultFieldHandlers) ResolveNetworkDeviceIfName(ev *Event, e *NetworkDeviceContext) string { + return e.IfName +} +func (dfh *DefaultFieldHandlers) ResolveProcessArgs(ev *Event, e *Process) string { return e.Args } +func (dfh *DefaultFieldHandlers) ResolveProcessArgsFlags(ev *Event, e *Process) []string { + return e.Argv +} +func (dfh *DefaultFieldHandlers) ResolveProcessArgsOptions(ev *Event, e *Process) []string { + return e.Argv +} +func (dfh *DefaultFieldHandlers) ResolveProcessArgsTruncated(ev *Event, e *Process) bool { + return e.ArgsTruncated +} +func (dfh *DefaultFieldHandlers) ResolveProcessArgv(ev *Event, e *Process) []string { return e.Argv } +func (dfh *DefaultFieldHandlers) ResolveProcessArgv0(ev *Event, e *Process) string { return e.Argv0 } +func (dfh *DefaultFieldHandlers) ResolveProcessCreatedAt(ev *Event, e *Process) int { + return int(e.CreatedAt) +} +func (dfh *DefaultFieldHandlers) ResolveProcessEnvp(ev *Event, e *Process) []string { return e.Envp } +func (dfh *DefaultFieldHandlers) ResolveProcessEnvs(ev *Event, e *Process) []string { return e.Envs } +func (dfh *DefaultFieldHandlers) ResolveProcessEnvsTruncated(ev *Event, e *Process) bool { + return e.EnvsTruncated +} +func (dfh *DefaultFieldHandlers) ResolveRights(ev *Event, e *FileFields) int { return int(e.Mode) } +func (dfh *DefaultFieldHandlers) ResolveSELinuxBoolName(ev *Event, e *SELinuxEvent) string { + return e.BoolName +} +func (dfh *DefaultFieldHandlers) ResolveSetgidEGroup(ev *Event, e *SetgidEvent) string { + return e.EGroup +} +func (dfh *DefaultFieldHandlers) ResolveSetgidFSGroup(ev *Event, e *SetgidEvent) string { + return e.FSGroup +} +func (dfh *DefaultFieldHandlers) ResolveSetgidGroup(ev *Event, e *SetgidEvent) string { return e.Group } +func (dfh *DefaultFieldHandlers) ResolveSetuidEUser(ev *Event, e *SetuidEvent) string { return e.EUser } +func (dfh *DefaultFieldHandlers) ResolveSetuidFSUser(ev *Event, e *SetuidEvent) string { + return e.FSUser +} +func (dfh *DefaultFieldHandlers) ResolveSetuidUser(ev *Event, e *SetuidEvent) string { return e.User } +func (dfh *DefaultFieldHandlers) ResolveXAttrName(ev *Event, e *SetXAttrEvent) string { return e.Name } +func (dfh *DefaultFieldHandlers) ResolveXAttrNamespace(ev *Event, e *SetXAttrEvent) string { + return e.Namespace +} diff --git a/pkg/security/secl/model/model.go b/pkg/security/secl/model/model.go index 0986fec672794..4b9f65c2c29dd 100644 --- a/pkg/security/secl/model/model.go +++ b/pkg/security/secl/model/model.go @@ -3,8 +3,7 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:generate go run github.com/DataDog/datadog-agent/pkg/security/secl/compiler/generators/accessors -mock -output accessors.go -//go:generate go run github.com/DataDog/datadog-agent/pkg/security/secl/compiler/generators/accessors -tags linux -output ../../probe/accessors.go -doc ../../../../docs/cloud-workload-security/secl.json -fields-resolver ../../probe/fields_resolver.go +//go:generate go run github.com/DataDog/datadog-agent/pkg/security/secl/compiler/generators/accessors -output accessors.go -field-handlers field_handlers.go -doc ../../../../docs/cloud-workload-security/secl.json package model @@ -29,17 +28,20 @@ const ( ) // Model describes the data model for the runtime security agent events -type Model struct{} +type Model struct { + ExtraValidateFieldFnc func(field eval.Field, fieldValue eval.FieldValue) error +} // NewEvent returns a new Event func (m *Model) NewEvent() eval.Event { return &Event{} } -// NewEventWithType returns a new Event for the given type -func (m *Model) NewEventWithType(kind EventType) eval.Event { +// NewDefaultEventWithType returns a new Event for the given type +func (m *Model) NewDefaultEventWithType(kind EventType) eval.Event { return &Event{ - Type: uint32(kind), + Type: uint32(kind), + FieldHandlers: &DefaultFieldHandlers{}, } } @@ -117,6 +119,10 @@ func (m *Model) ValidateField(field eval.Field, fieldValue eval.FieldValue) erro } } + if m.ExtraValidateFieldFnc != nil { + return m.ExtraValidateFieldFnc(field, fieldValue) + } + return nil } @@ -124,23 +130,23 @@ func (m *Model) ValidateField(field eval.Field, fieldValue eval.FieldValue) erro type ChmodEvent struct { SyscallEvent File FileEvent `field:"file"` - Mode uint32 `field:"file.destination.mode; file.destination.rights" constants:"Chmod mode constants"` // New mode/rights of the chmod-ed file + Mode uint32 `field:"file.destination.mode; file.destination.rights"` // SECLDoc[file.destination.mode] Definition:`New mode of the chmod-ed file` Constants:`Chmod mode constants` SECLDoc[file.destination.rights] Definition:`New rights of the chmod-ed file` Constants:`Chmod mode constants` } // ChownEvent represents a chown event type ChownEvent struct { SyscallEvent File FileEvent `field:"file"` - UID int64 `field:"file.destination.uid"` // New UID of the chown-ed file's owner - User string `field:"file.destination.user,handler:ResolveChownUID"` // New user of the chown-ed file's owner - GID int64 `field:"file.destination.gid"` // New GID of the chown-ed file's owner - Group string `field:"file.destination.group,handler:ResolveChownGID"` // New group of the chown-ed file's owner + UID int64 `field:"file.destination.uid"` // SECLDoc[file.destination.uid] Definition:`New UID of the chown-ed file's owner` + User string `field:"file.destination.user,handler:ResolveChownUID"` // SECLDoc[file.destination.user] Definition:`New user of the chown-ed file's owner` + GID int64 `field:"file.destination.gid"` // SECLDoc[file.destination.gid] Definition:`New GID of the chown-ed file's owner` + Group string `field:"file.destination.group,handler:ResolveChownGID"` // SECLDoc[file.destination.group] Definition:`New group of the chown-ed file's owner` } // ContainerContext holds the container context of an event type ContainerContext struct { - ID string `field:"id,handler:ResolveContainerID"` // ID of the container - Tags []string `field:"tags,handler:ResolveContainerTags,opts:skip_ad,weight:9999"` // Tags of the container + ID string `field:"id,handler:ResolveContainerID"` // SECLDoc[id] Definition:`ID of the container` + Tags []string `field:"tags,handler:ResolveContainerTags,opts:skip_ad,weight:9999"` // SECLDoc[tags] Definition:`Tags of the container` } // Event represents an event sent from the kernel @@ -148,7 +154,7 @@ type ContainerContext struct { type Event struct { ID string `field:"-" json:"-"` Type uint32 `field:"-"` - Async bool `field:"async" event:"*"` // True if the syscall was asynchronous + Async bool `field:"async" event:"*"` // SECLDoc[async] Definition:`True if the syscall was asynchronous` SavedByActivityDumps bool `field:"-"` // True if the event should have been discarded if the AD were disabled IsActivityDumpSample bool `field:"-"` // True if the event was sampled for the activity dumps TimestampRaw uint64 `field:"-" json:"-"` @@ -200,14 +206,18 @@ type Event struct { Bind BindEvent `field:"bind" event:"bind"` // [7.37] [Network] [Experimental] A bind was executed // internal usage - Umount UmountEvent `field:"-" json:"-"` - InvalidateDentry InvalidateDentryEvent `field:"-" json:"-"` - ArgsEnvs ArgsEnvsEvent `field:"-" json:"-"` - MountReleased MountReleasedEvent `field:"-" json:"-"` - CgroupTracing CgroupTracingEvent `field:"-" json:"-"` - NetDevice NetDeviceEvent `field:"-" json:"-"` - VethPair VethPairEvent `field:"-" json:"-"` - UnshareMountNS UnshareMountNSEvent `field:"-" json:"-"` + Umount UmountEvent `field:"-" json:"-"` + InvalidateDentry InvalidateDentryEvent `field:"-" json:"-"` + ArgsEnvs ArgsEnvsEvent `field:"-" json:"-"` + MountReleased MountReleasedEvent `field:"-" json:"-"` + CgroupTracing CgroupTracingEvent `field:"-" json:"-"` + NetDevice NetDeviceEvent `field:"-" json:"-"` + VethPair VethPairEvent `field:"-" json:"-"` + UnshareMountNS UnshareMountNSEvent `field:"-" json:"-"` + PathResolutionError error `field:"-" json:"-"` // hold one of the path resolution error + + // field resolution + FieldHandlers FieldHandlers `field:"-" json:"-"` } func initMember(member reflect.Value, deja map[string]bool) { @@ -240,6 +250,13 @@ func initMember(member reflect.Value, deja map[string]bool) { } } +// NewDefaultEvent returns a new event using the default field handlers +func NewDefaultEvent() eval.Event { + return &Event{ + FieldHandlers: &DefaultFieldHandlers{}, + } +} + // Init initialize the event func (e *Event) Init() { initMember(reflect.ValueOf(e).Elem(), map[string]bool{}) @@ -266,56 +283,87 @@ func (e *Event) GetTags() []string { return tags } -// GetPointer return an unsafe.Pointer of the Event -func (e *Event) GetPointer() unsafe.Pointer { - return unsafe.Pointer(e) +// Retain the event +func (ev *Event) Retain() Event { + if ev.ProcessCacheEntry != nil { + ev.ProcessCacheEntry.Retain() + } + return *ev +} + +// Release the event +func (ev *Event) Release() { + if ev.ProcessCacheEntry != nil { + ev.ProcessCacheEntry.Release() + } +} + +// SetPathResolutionError sets the Event.pathResolutionError +func (ev *Event) SetPathResolutionError(fileFields *FileEvent, err error) { + fileFields.PathResolutionError = err + ev.PathResolutionError = err +} + +// ResolveProcessCacheEntry uses the field handler +func (ev *Event) ResolveProcessCacheEntry() (*ProcessCacheEntry, bool) { + return ev.FieldHandlers.ResolveProcessCacheEntry(ev) +} + +// ResolveEventTimestamp uses the field handler +func (ev *Event) ResolveEventTimestamp() time.Time { + return ev.FieldHandlers.ResolveEventTimestamp(ev) +} + +// GetProcessServiceTag uses the field handler +func (ev *Event) GetProcessServiceTag() string { + return ev.FieldHandlers.GetProcessServiceTag(ev) } // SetuidEvent represents a setuid event type SetuidEvent struct { - UID uint32 `field:"uid"` // New UID of the process - User string `field:"user,handler:ResolveSetuidUser"` // New user of the process - EUID uint32 `field:"euid"` // New effective UID of the process - EUser string `field:"euser,handler:ResolveSetuidEUser"` // New effective user of the process - FSUID uint32 `field:"fsuid"` // New FileSystem UID of the process - FSUser string `field:"fsuser,handler:ResolveSetuidFSUser"` // New FileSystem user of the process + UID uint32 `field:"uid"` // SECLDoc[uid] Definition:`New UID of the process` + User string `field:"user,handler:ResolveSetuidUser"` // SECLDoc[user] Definition:`New user of the process` + EUID uint32 `field:"euid"` // SECLDoc[euid] Definition:`New effective UID of the process` + EUser string `field:"euser,handler:ResolveSetuidEUser"` // SECLDoc[euser] Definition:`New effective user of the process` + FSUID uint32 `field:"fsuid"` // SECLDoc[fsuid] Definition:`New FileSystem UID of the process` + FSUser string `field:"fsuser,handler:ResolveSetuidFSUser"` // SECLDoc[fsuser] Definition:`New FileSystem user of the process` } // SetgidEvent represents a setgid event type SetgidEvent struct { - GID uint32 `field:"gid"` // New GID of the process - Group string `field:"group,handler:ResolveSetgidGroup"` // New group of the process - EGID uint32 `field:"egid"` // New effective GID of the process - EGroup string `field:"egroup,handler:ResolveSetgidEGroup"` // New effective group of the process - FSGID uint32 `field:"fsgid"` // New FileSystem GID of the process - FSGroup string `field:"fsgroup,handler:ResolveSetgidFSGroup"` // New FileSystem group of the process + GID uint32 `field:"gid"` // SECLDoc[gid] Definition:`New GID of the process` + Group string `field:"group,handler:ResolveSetgidGroup"` // SECLDoc[group] Definition:`New group of the process` + EGID uint32 `field:"egid"` // SECLDoc[egid] Definition:`New effective GID of the process` + EGroup string `field:"egroup,handler:ResolveSetgidEGroup"` // SECLDoc[egroup] Definition:`New effective group of the process` + FSGID uint32 `field:"fsgid"` // SECLDoc[fsgid] Definition:`New FileSystem GID of the process` + FSGroup string `field:"fsgroup,handler:ResolveSetgidFSGroup"` // SECLDoc[fsgroup] Definition:`New FileSystem group of the process` } // CapsetEvent represents a capset event type CapsetEvent struct { - CapEffective uint64 `field:"cap_effective" constants:"Kernel Capability constants"` // Effective capability set of the process - CapPermitted uint64 `field:"cap_permitted" constants:"Kernel Capability constants"` // Permitted capability set of the process + CapEffective uint64 `field:"cap_effective"` // SECLDoc[cap_effective] Definition:`Effective capability set of the process` Constants:`Kernel Capability constants` + CapPermitted uint64 `field:"cap_permitted"` // SECLDoc[cap_permitted] Definition:`Permitted capability set of the process` Constants:`Kernel Capability constants` } // Credentials represents the kernel credentials of a process type Credentials struct { - UID uint32 `field:"uid"` // UID of the process - GID uint32 `field:"gid"` // GID of the process - User string `field:"user"` // User of the process - Group string `field:"group"` // Group of the process + UID uint32 `field:"uid"` // SECLDoc[uid] Definition:`UID of the process` + GID uint32 `field:"gid"` // SECLDoc[gid] Definition:`GID of the process` + User string `field:"user"` // SECLDoc[user] Definition:`User of the process` Example:`process.user == "root"` Description:`Constrain an event to be triggered by a process running as the root user.` + Group string `field:"group"` // SECLDoc[group] Definition:`Group of the process` - EUID uint32 `field:"euid"` // Effective UID of the process - EGID uint32 `field:"egid"` // Effective GID of the process - EUser string `field:"euser"` // Effective user of the process - EGroup string `field:"egroup"` // Effective group of the process + EUID uint32 `field:"euid"` // SECLDoc[euid] Definition:`Effective UID of the process` + EGID uint32 `field:"egid"` // SECLDoc[egid] Definition:`Effective GID of the process` + EUser string `field:"euser"` // SECLDoc[euser] Definition:`Effective user of the process` + EGroup string `field:"egroup"` // SECLDoc[egroup] Definition:`Effective group of the process` - FSUID uint32 `field:"fsuid"` // FileSystem-uid of the process - FSGID uint32 `field:"fsgid"` // FileSystem-gid of the process - FSUser string `field:"fsuser"` // FileSystem-user of the process - FSGroup string `field:"fsgroup"` // FileSystem-group of the process + FSUID uint32 `field:"fsuid"` // SECLDoc[fsuid] Definition:`FileSystem-uid of the process` + FSGID uint32 `field:"fsgid"` // SECLDoc[fsgid] Definition:`FileSystem-gid of the process` + FSUser string `field:"fsuser"` // SECLDoc[fsuser] Definition:`FileSystem-user of the process` + FSGroup string `field:"fsgroup"` // SECLDoc[fsgroup] Definition:`FileSystem-group of the process` - CapEffective uint64 `field:"cap_effective" constants:"Kernel Capability constants"` // Effective capability set of the process - CapPermitted uint64 `field:"cap_permitted" constants:"Kernel Capability constants"` // Permitted capability set of the process + CapEffective uint64 `field:"cap_effective"` // SECLDoc[cap_effective] Definition:`Effective capability set of the process` Constants:`Kernel Capability constants` + CapPermitted uint64 `field:"cap_permitted"` // SECLDoc[cap_permitted] Definition:`Permitted capability set of the process` Constants:`Kernel Capability constants` } // GetPathResolutionError returns the path resolution error as a string if there is one @@ -344,14 +392,14 @@ type Process struct { FileEvent FileEvent `field:"file,check:IsNotKworker"` - ContainerID string `field:"container.id"` // Container ID + ContainerID string `field:"container.id"` // SECLDoc[container.id] Definition:`Container ID` ContainerTags []string `field:"-"` SpanID uint64 `field:"-"` TraceID uint64 `field:"-"` - TTYName string `field:"tty_name"` // Name of the TTY associated with the process - Comm string `field:"comm"` // Comm attribute of the process + TTYName string `field:"tty_name"` // SECLDoc[tty_name] Definition:`Name of the TTY associated with the process` + Comm string `field:"comm"` // SECLDoc[comm] Definition:`Comm attribute of the process` LinuxBinprm LinuxBinprm `field:"interpreter,check:HasInterpreter"` // Script interpreter as identified by the shebang // pid_cache_t @@ -359,10 +407,10 @@ type Process struct { ExitTime time.Time `field:"-" json:"-"` ExecTime time.Time `field:"-" json:"-"` - CreatedAt uint64 `field:"created_at,handler:ResolveProcessCreatedAt"` // Timestamp of the creation of the process + CreatedAt uint64 `field:"created_at,handler:ResolveProcessCreatedAt"` // SECLDoc[created_at] Definition:`Timestamp of the creation of the process` - Cookie uint32 `field:"cookie"` // Cookie of the process - PPid uint32 `field:"ppid"` // Parent process ID + Cookie uint32 `field:"cookie"` // SECLDoc[cookie] Definition:`Cookie of the process` + PPid uint32 `field:"ppid"` // SECLDoc[ppid] Definition:`Parent process ID` // credentials_t section of pid_cache_t Credentials `` @@ -374,13 +422,13 @@ type Process struct { EnvsEntry *EnvsEntry `field:"-" json:"-"` // defined to generate accessors, ArgsTruncated and EnvsTruncated are used during by unmarshaller - Argv0 string `field:"argv0,handler:ResolveProcessArgv0,weight:100"` // First argument of the process - Args string `field:"args,handler:ResolveProcessArgs,weight:100"` // Arguments of the process (as a string) - Argv []string `field:"argv,handler:ResolveProcessArgv,weight:100; args_flags,handler:ResolveProcessArgsFlags,opts:cacheless_resolution; args_options,handler:ResolveProcessArgsOptions,opts:cacheless_resolution"` // Arguments of the process (as an array) - ArgsTruncated bool `field:"args_truncated,handler:ResolveProcessArgsTruncated"` // Indicator of arguments truncation - Envs []string `field:"envs,handler:ResolveProcessEnvs:100"` // Environment variable names of the process - Envp []string `field:"envp,handler:ResolveProcessEnvp:100"` // Environment variables of the process - EnvsTruncated bool `field:"envs_truncated,handler:ResolveProcessEnvsTruncated"` // Indicator of environment variables truncation + Argv0 string `field:"argv0,handler:ResolveProcessArgv0,weight:100"` // SECLDoc[argv0] Definition:`First argument of the process` + Args string `field:"args,handler:ResolveProcessArgs,weight:100"` // SECLDoc[args] Definition:`Arguments of the process (as a string, excluding argv0)` Example:`exec.args == "-sV -p 22,53,110,143,4564 198.116.0-255.1-127"` Description:`Matches any process with these exact arguments.` Example:`exec.args =~ "* -F * http*"` Description:`Matches any process that has the "-F" argument anywhere before an argument starting with "http".` + Argv []string `field:"argv,handler:ResolveProcessArgv,weight:100; args_flags,handler:ResolveProcessArgsFlags,opts:cacheless_resolution; args_options,handler:ResolveProcessArgsOptions,opts:cacheless_resolution"` // SECLDoc[argv] Definition:`Arguments of the process (as an array, excluding argv0)` Example:`exec.argv in ["127.0.0.1"]` Description:`Matches any process that has this IP address as one of its arguments.` SECLDoc[args_flags] Definition:`Flags in the process arguments` Example:`exec.args_flags in ["s"] && exec.args_flags in ["V"]` Description:`Matches any process with both "-s" and "-V" flags in its arguments. Also matches "-sV".` SECLDoc[args_options] Definition:`Argument of the process as options` Example:`exec.args_options in ["p=0-1024"]` Description:`Matches any process that has either "-p 0-1024" or "--p=0-1024" in its arguments.` + ArgsTruncated bool `field:"args_truncated,handler:ResolveProcessArgsTruncated"` // SECLDoc[args_truncated] Definition:`Indicator of arguments truncation` + Envs []string `field:"envs,handler:ResolveProcessEnvs:100"` // SECLDoc[envs] Definition:`Environment variable names of the process` + Envp []string `field:"envp,handler:ResolveProcessEnvp:100"` // SECLDoc[envp] Definition:`Environment variables of the process` + EnvsTruncated bool `field:"envs_truncated,handler:ResolveProcessEnvsTruncated"` // SECLDoc[envs_truncated] Definition:`Indicator of environment variables truncation` // symlink to the process binary SymlinkPathnameStr [MaxSymlinks]string `field:"-" json:"-"` @@ -392,7 +440,7 @@ type Process struct { ScrubbedArgsTruncated bool `field:"-" json:"-"` Variables eval.Variables `field:"-" json:"-"` - IsThread bool `field:"is_thread"` // Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program) + IsThread bool `field:"is_thread"` // SECLDoc[is_thread] Definition:`Indicates whether the process is considered a thread (that is, a child process that hasn't executed another program)` } // SpanContext describes a span context @@ -409,23 +457,23 @@ type ExecEvent struct { // ExitEvent represents a process exit event type ExitEvent struct { *Process - Cause uint32 `field:"cause"` // Cause of the process termination (one of EXITED, SIGNALED, COREDUMPED) - Code uint32 `field:"code"` // Exit code of the process or number of the signal that caused the process to terminate + Cause uint32 `field:"cause"` // SECLDoc[cause] Definition:`Cause of the process termination (one of EXITED, SIGNALED, COREDUMPED)` + Code uint32 `field:"code"` // SECLDoc[code] Definition:`Exit code of the process or number of the signal that caused the process to terminate` } // FileFields holds the information required to identify a file type FileFields struct { - UID uint32 `field:"uid"` // UID of the file's owner - User string `field:"user,handler:ResolveFileFieldsUser"` // User of the file's owner - GID uint32 `field:"gid"` // GID of the file's owner - Group string `field:"group,handler:ResolveFileFieldsGroup"` // Group of the file's owner - Mode uint16 `field:"mode;rights,handler:ResolveRights,opts:cacheless_resolution" constants:"Chmod mode constants"` // Mode/rights of the file - CTime uint64 `field:"change_time"` // Change time of the file - MTime uint64 `field:"modification_time"` // Modification time of the file - - MountID uint32 `field:"mount_id"` // Mount ID of the file - Inode uint64 `field:"inode"` // Inode of the file - InUpperLayer bool `field:"in_upper_layer,handler:ResolveFileFieldsInUpperLayer"` // Indicator of the file layer, for example, in an OverlayFS + UID uint32 `field:"uid"` // SECLDoc[uid] Definition:`UID of the file's owner` + User string `field:"user,handler:ResolveFileFieldsUser"` // SECLDoc[user] Definition:`User of the file's owner` + GID uint32 `field:"gid"` // SECLDoc[gid] Definition:`GID of the file's owner` + Group string `field:"group,handler:ResolveFileFieldsGroup"` // SECLDoc[group] Definition:`Group of the file's owner` + Mode uint16 `field:"mode;rights,handler:ResolveRights,opts:cacheless_resolution"` // SECLDoc[mode] Definition:`Mode of the file` SECLDoc[rights] Definition:`Rights of the file` Constants:`Chmod mode constants` + CTime uint64 `field:"change_time"` // SECLDoc[change_time] Definition:`Change time of the file` + MTime uint64 `field:"modification_time"` // SECLDoc[modification_time] Definition:`Modification time of the file` + + MountID uint32 `field:"mount_id"` // SECLDoc[mount_id] Definition:`Mount ID of the file` + Inode uint64 `field:"inode"` // SECLDoc[inode] Definition:`Inode of the file` + InUpperLayer bool `field:"in_upper_layer,handler:ResolveFileFieldsInUpperLayer"` // SECLDoc[in_upper_layer] Definition:`Indicator of the file layer, for example, in an OverlayFS` NLink uint32 `field:"-" json:"-"` PathID uint32 `field:"-" json:"-"` @@ -457,9 +505,9 @@ func (f *FileFields) GetInUpperLayer() bool { type FileEvent struct { FileFields `` - PathnameStr string `field:"path,handler:ResolveFilePath,opts:length" op_override:"ProcessSymlinkPathname"` // File's path - BasenameStr string `field:"name,handler:ResolveFileBasename,opts:length" op_override:"ProcessSymlinkBasename"` // File's basename - Filesystem string `field:"filesystem,handler:ResolveFileFilesystem"` // File's filesystem + PathnameStr string `field:"path,handler:ResolveFilePath,opts:length" op_override:"ProcessSymlinkPathname"` // SECLDoc[path] Definition:`File's path` Example:`exec.file.path == "/usr/bin/apt"` Description:`Matches the execution of the file located at /usr/bin/apt` Example:`open.file.path == "/etc/passwd"` Description:`Matches any process opening the /etc/passwd file.` + BasenameStr string `field:"name,handler:ResolveFileBasename,opts:length" op_override:"ProcessSymlinkBasename"` // SECLDoc[name] Definition:`File's basename` Example:`exec.file.name == "apt"` Description:`Matches the execution of any file named apt.` + Filesystem string `field:"filesystem,handler:ResolveFileFilesystem"` // SECLDoc[filesystem] Definition:`File's filesystem` PathResolutionError error `field:"-" json:"-"` @@ -510,7 +558,7 @@ type LinkEvent struct { type MkdirEvent struct { SyscallEvent File FileEvent `field:"file"` - Mode uint32 `field:"file.destination.mode; file.destination.rights" constants:"Chmod mode constants"` // Mode/rights of the new directory + Mode uint32 `field:"file.destination.mode; file.destination.rights"` // SECLDoc[file.destination.mode] Definition:`Mode of the new directory` Constants:`Chmod mode constants` SECLDoc[file.destination.rights] Definition:`Rights of the new directory` Constants:`Chmod mode constants` } // ArgsEnvsEvent defines a args/envs event @@ -528,19 +576,20 @@ type Mount struct { RootMountID uint32 `field:"-"` RootInode uint64 `field:"-"` BindSrcMountID uint32 `field:"-"` - FSType string `field:"fs_type"` // Type of the mounted file system + FSType string `field:"fs_type"` // SECLDoc[fs_type] Definition:`Type of the mounted file system` MountPointStr string `field:"-"` RootStr string `field:"-"` Path string `field:"-"` } // MountEvent represents a mount event +// //msgp:ignore MountEvent type MountEvent struct { SyscallEvent Mount - MountPointPath string `field:"mountpoint.path,handler:ResolveMountPointPath"` // Path of the mount point - MountSourcePath string `field:"source.path,handler:ResolveMountSourcePath"` // Source path of a bind mount + MountPointPath string `field:"mountpoint.path,handler:ResolveMountPointPath"` // SECLDoc[mountpoint.path] Definition:`Path of the mount point` + MountSourcePath string `field:"source.path,handler:ResolveMountSourcePath"` // SECLDoc[source.path] Definition:`Source path of a bind mount` MountPointPathResolutionError error `field:"-"` MountSourcePathResolutionError error `field:"-"` } @@ -564,8 +613,8 @@ func (m *Mount) IsOverlayFS() bool { type OpenEvent struct { SyscallEvent File FileEvent `field:"file"` - Flags uint32 `field:"flags" constants:"Open flags"` // Flags used when opening the file - Mode uint32 `field:"file.destination.mode" constants:"Chmod mode constants"` // Mode of the created file + Flags uint32 `field:"flags"` // SECLDoc[flags] Definition:`Flags used when opening the file` Constants:`Open flags` + Mode uint32 `field:"file.destination.mode"` // SECLDoc[file.destination.mode] Definition:`Mode of the created file` Constants:`Chmod mode constants` } // SELinuxEventKind represents the event kind for SELinux events @@ -584,10 +633,10 @@ const ( type SELinuxEvent struct { File FileEvent `field:"-" json:"-"` EventKind SELinuxEventKind `field:"-" json:"-"` - BoolName string `field:"bool.name,handler:ResolveSELinuxBoolName"` // SELinux boolean name - BoolChangeValue string `field:"bool.state"` // SELinux boolean new value - BoolCommitValue bool `field:"bool_commit.state"` // Indicator of a SELinux boolean commit operation - EnforceStatus string `field:"enforce.status"` // SELinux enforcement status (one of "enforcing", "permissive", "disabled"") + BoolName string `field:"bool.name,handler:ResolveSELinuxBoolName"` // SECLDoc[bool.name] Definition:`SELinux boolean name` + BoolChangeValue string `field:"bool.state"` // SECLDoc[bool.state] Definition:`SELinux boolean new value` + BoolCommitValue bool `field:"bool_commit.state"` // SECLDoc[bool_commit.state] Definition:`Indicator of a SELinux boolean commit operation` + EnforceStatus string `field:"enforce.status"` // SECLDoc[enforce.status] Definition:`SELinux enforcement status (one of "enforcing", "permissive", "disabled")` } var zeroProcessContext ProcessContext @@ -651,7 +700,7 @@ type ProcessAncestorsIterator struct { // Front returns the first element func (it *ProcessAncestorsIterator) Front(ctx *eval.Context) unsafe.Pointer { - if front := (*Event)(ctx.Object).ProcessContext.Ancestor; front != nil { + if front := ctx.Event.(*Event).ProcessContext.Ancestor; front != nil { it.prev = front return unsafe.Pointer(front) } @@ -684,10 +733,11 @@ type ProcessContext struct { // PIDContext holds the process context of an kernel event type PIDContext struct { - Pid uint32 `field:"pid"` // Process ID of the process (also called thread group ID) - Tid uint32 `field:"tid"` // Thread ID of the thread + Pid uint32 `field:"pid"` // SECLDoc[pid] Definition:`Process ID of the process (also called thread group ID)` + Tid uint32 `field:"tid"` // SECLDoc[tid] Definition:`Thread ID of the thread` NetNS uint32 `field:"-"` - IsKworker bool `field:"is_kworker"` // Indicates whether the process is a kworker + IsKworker bool `field:"is_kworker"` // SECLDoc[is_kworker] Definition:`Indicates whether the process is a kworker` + Inode uint64 `field:"-"` // used to track exec and event loss } // RenameEvent represents a rename event @@ -707,22 +757,22 @@ type RmdirEvent struct { type SetXAttrEvent struct { SyscallEvent File FileEvent `field:"file"` - Namespace string `field:"file.destination.namespace,handler:ResolveXAttrNamespace"` // Namespace of the extended attribute - Name string `field:"file.destination.name,handler:ResolveXAttrName"` // Name of the extended attribute + Namespace string `field:"file.destination.namespace,handler:ResolveXAttrNamespace"` // SECLDoc[file.destination.namespace] Definition:`Namespace of the extended attribute` + Name string `field:"file.destination.name,handler:ResolveXAttrName"` // SECLDoc[file.destination.name] Definition:`Name of the extended attribute` NameRaw [200]byte `field:"-" json:"-"` } // SyscallEvent contains common fields for all the event type SyscallEvent struct { - Retval int64 `field:"retval" constants:"Error Constants"` // Return value of the syscall + Retval int64 `field:"retval"` // SECLDoc[retval] Definition:`Return value of the syscall` Constants:`Error constants` } // UnlinkEvent represents an unlink event type UnlinkEvent struct { SyscallEvent File FileEvent `field:"file"` - Flags uint32 `field:"flags" constants:"Unlink flags"` + Flags uint32 `field:"flags"` // SECLDoc[flags] Definition:`Flags of the unlink syscall` Constants:`Unlink flags` } // UmountEvent represents an umount event @@ -743,33 +793,33 @@ type UtimesEvent struct { type BPFEvent struct { SyscallEvent - Map BPFMap `field:"map"` // eBPF map involved in the BPF command - Program BPFProgram `field:"prog"` // eBPF program involved in the BPF command - Cmd uint32 `field:"cmd" constants:"BPF commands"` // BPF command name + Map BPFMap `field:"map"` // eBPF map involved in the BPF command + Program BPFProgram `field:"prog"` // eBPF program involved in the BPF command + Cmd uint32 `field:"cmd"` // SECLDoc[cmd] Definition:`BPF command name` Constants:`BPF commands` } // BPFMap represents a BPF map type BPFMap struct { - ID uint32 `field:"-" json:"-"` // ID of the eBPF map - Type uint32 `field:"type" constants:"BPF map types"` // Type of the eBPF map - Name string `field:"name"` // Name of the eBPF map (added in 7.35) + ID uint32 `field:"-" json:"-"` // ID of the eBPF map + Type uint32 `field:"type"` // SECLDoc[type] Definition:`Type of the eBPF map` Constants:`BPF map types` + Name string `field:"name"` // SECLDoc[name] Definition:`Name of the eBPF map (added in 7.35)` } // BPFProgram represents a BPF program type BPFProgram struct { - ID uint32 `field:"-" json:"-"` // ID of the eBPF program - Type uint32 `field:"type" constants:"BPF program types"` // Type of the eBPF program - AttachType uint32 `field:"attach_type" constants:"BPF attach types"` // Attach type of the eBPF program - Helpers []uint32 `field:"helpers,handler:ResolveHelpers" constants:"BPF helper functions"` // eBPF helpers used by the eBPF program (added in 7.35) - Name string `field:"name"` // Name of the eBPF program (added in 7.35) - Tag string `field:"tag"` // Hash (sha1) of the eBPF program (added in 7.35) + ID uint32 `field:"-" json:"-"` // ID of the eBPF program + Type uint32 `field:"type"` // SECLDoc[type] Definition:`Type of the eBPF program` Constants:`BPF program types` + AttachType uint32 `field:"attach_type"` // SECLDoc[attach_type] Definition:`Attach type of the eBPF program` Constants:`BPF attach types` + Helpers []uint32 `field:"helpers"` // SECLDoc[helpers] Definition:`eBPF helpers used by the eBPF program (added in 7.35)` Constants:`BPF helper functions` + Name string `field:"name"` // SECLDoc[name] Definition:`Name of the eBPF program (added in 7.35)` + Tag string `field:"tag"` // SECLDoc[tag] Definition:`Hash (sha1) of the eBPF program (added in 7.35)` } // PTraceEvent represents a ptrace event type PTraceEvent struct { SyscallEvent - Request uint32 `field:"request" constants:"Ptrace constants"` // ptrace request + Request uint32 `field:"request"` // SECLDoc[request] Definition:`ptrace request` Constants:`Ptrace constants` PID uint32 `field:"-" json:"-"` Address uint64 `field:"-" json:"-"` Tracee *ProcessContext `field:"tracee"` // process context of the tracee @@ -783,8 +833,8 @@ type MMapEvent struct { Addr uint64 `field:"-" json:"-"` Offset uint64 `field:"-" json:"-"` Len uint32 `field:"-" json:"-"` - Protection int `field:"protection" constants:"Protection constants"` // memory segment protection - Flags int `field:"flags" constants:"MMap flags"` // memory segment flags + Protection int `field:"protection"` // SECLDoc[protection] Definition:`memory segment protection` Constants:`Protection constants` + Flags int `field:"flags"` // SECLDoc[flags] Definition:`memory segment flags` Constants:`MMap flags` } // MProtectEvent represents a mprotect event @@ -793,8 +843,8 @@ type MProtectEvent struct { VMStart uint64 `field:"-" json:"-"` VMEnd uint64 `field:"-" json:"-"` - VMProtection int `field:"vm_protection" constants:"Virtual Memory flags"` // initial memory segment protection - ReqProtection int `field:"req_protection" constants:"Virtual Memory flags"` // new memory segment protection + VMProtection int `field:"vm_protection"` // SECLDoc[vm_protection] Definition:`initial memory segment protection` Constants:`Virtual Memory flags` + ReqProtection int `field:"req_protection"` // SECLDoc[req_protection] Definition:`new memory segment protection` Constants:`Virtual Memory flags` } // LoadModuleEvent represents a load_module event @@ -802,33 +852,33 @@ type LoadModuleEvent struct { SyscallEvent File FileEvent `field:"file"` // Path to the kernel module file - LoadedFromMemory bool `field:"loaded_from_memory"` // Indicates if the kernel module was loaded from memory - Name string `field:"name"` // Name of the new kernel module + LoadedFromMemory bool `field:"loaded_from_memory"` // SECLDoc[loaded_from_memory] Definition:`Indicates if the kernel module was loaded from memory` + Name string `field:"name"` // SECLDoc[name] Definition:`Name of the new kernel module` } // UnloadModuleEvent represents an unload_module event type UnloadModuleEvent struct { SyscallEvent - Name string `field:"name"` // Name of the kernel module that was deleted + Name string `field:"name"` // SECLDoc[name] Definition:`Name of the kernel module that was deleted` } // SignalEvent represents a signal event type SignalEvent struct { SyscallEvent - Type uint32 `field:"type" constants:"Signal constants"` // Signal type (ex: SIGHUP, SIGINT, SIGQUIT, etc) - PID uint32 `field:"pid"` // Target PID - Target *ProcessContext `field:"target"` // Target process context + Type uint32 `field:"type"` // SECLDoc[type] Definition:`Signal type (ex: SIGHUP, SIGINT, SIGQUIT, etc)` Constants:`Signal constants` + PID uint32 `field:"pid"` // SECLDoc[pid] Definition:`Target PID` + Target *ProcessContext `field:"target"` // Target process context } // SpliceEvent represents a splice event type SpliceEvent struct { SyscallEvent - File FileEvent `field:"file"` // File modified by the splice syscall - PipeEntryFlag uint32 `field:"pipe_entry_flag" constants:"Pipe buffer flags"` // Entry flag of the "fd_out" pipe passed to the splice syscall - PipeExitFlag uint32 `field:"pipe_exit_flag" constants:"Pipe buffer flags"` // Exit flag of the "fd_out" pipe passed to the splice syscall + File FileEvent `field:"file"` // File modified by the splice syscall + PipeEntryFlag uint32 `field:"pipe_entry_flag"` // SECLDoc[pipe_entry_flag] Definition:`Entry flag of the "fd_out" pipe passed to the splice syscall` Constants:`Pipe buffer flags` + PipeExitFlag uint32 `field:"pipe_exit_flag"` // SECLDoc[pipe_exit_flag] Definition:`Exit flag of the "fd_out" pipe passed to the splice syscall` Constants:`Pipe buffer flags` } // CgroupTracingEvent is used to signal that a new cgroup should be traced by the activity dump manager @@ -858,35 +908,35 @@ func (adlc *ActivityDumpLoadConfig) SetTimeout(duration time.Duration) { // NetworkDeviceContext represents the network device context of a network event type NetworkDeviceContext struct { NetNS uint32 `field:"-" json:"-"` - IfIndex uint32 `field:"ifindex"` // interface ifindex - IfName string `field:"ifname,handler:ResolveNetworkDeviceIfName"` // interface ifname + IfIndex uint32 `field:"ifindex"` // SECLDoc[ifindex] Definition:`interface ifindex` + IfName string `field:"ifname,handler:ResolveNetworkDeviceIfName"` // SECLDoc[ifname] Definition:`interface ifname` } // IPPortContext is used to hold an IP and Port type IPPortContext struct { - IPNet net.IPNet `field:"ip"` // IP address - Port uint16 `field:"port"` // Port number + IPNet net.IPNet `field:"ip"` // SECLDoc[ip] Definition:`IP address` + Port uint16 `field:"port"` // SECLDoc[port] Definition:`Port number` } // NetworkContext represents the network context of the event type NetworkContext struct { Device NetworkDeviceContext `field:"device"` // network device on which the network packet was captured - L3Protocol uint16 `field:"l3_protocol" constants:"L3 protocols"` // l3 protocol of the network packet - L4Protocol uint16 `field:"l4_protocol" constants:"L4 protocols"` // l4 protocol of the network packet - Source IPPortContext `field:"source"` // source of the network packet - Destination IPPortContext `field:"destination"` // destination of the network packet - Size uint32 `field:"size"` // size in bytes of the network packet + L3Protocol uint16 `field:"l3_protocol"` // SECLDoc[l3_protocol] Definition:`l3 protocol of the network packet` Constants:`L3 protocols` + L4Protocol uint16 `field:"l4_protocol"` // SECLDoc[l4_protocol] Definition:`l4 protocol of the network packet` Constants:`L4 protocols` + Source IPPortContext `field:"source"` // source of the network packet + Destination IPPortContext `field:"destination"` // destination of the network packet + Size uint32 `field:"size"` // SECLDoc[size] Definition:`size in bytes of the network packet` } // DNSEvent represents a DNS event type DNSEvent struct { - ID uint16 `field:"id" json:"-"` // [Experimental] the DNS request ID - Name string `field:"question.name,opts:length" op_override:"eval.DNSNameCmp"` // the queried domain name - Type uint16 `field:"question.type" constants:"DNS qtypes"` // a two octet code which specifies the DNS question type - Class uint16 `field:"question.class" constants:"DNS qclasses"` // the class looked up by the DNS question - Size uint16 `field:"question.length"` // the total DNS request size in bytes - Count uint16 `field:"question.count"` // the total count of questions in the DNS request + ID uint16 `field:"id" json:"-"` // SECLDoc[id] Definition:`[Experimental] the DNS request ID` + Name string `field:"question.name,opts:length" op_override:"eval.DNSNameCmp"` // SECLDoc[question.name] Definition:`the queried domain name` + Type uint16 `field:"question.type"` // SECLDoc[question.type] Definition:`a two octet code which specifies the DNS question type` Constants:`DNS qtypes` + Class uint16 `field:"question.class"` // SECLDoc[question.class] Definition:`the class looked up by the DNS question` Constants:`DNS qclasses` + Size uint16 `field:"question.length"` // SECLDoc[question.length] Definition:`the total DNS request size in bytes` + Count uint16 `field:"question.count"` // SECLDoc[question.count] Definition:`the total count of questions in the DNS request` } // BindEvent represents a bind event @@ -894,7 +944,7 @@ type BindEvent struct { SyscallEvent Addr IPPortContext `field:"addr"` // Bound address - AddrFamily uint16 `field:"addr.family"` // Address family + AddrFamily uint16 `field:"addr.family"` // SECLDoc[addr.family] Definition:`Address family` } // NetDevice represents a network device @@ -930,3 +980,25 @@ type VethPairEvent struct { type SyscallsEvent struct { Syscalls []Syscall // 64 * 8 = 512 > 450, bytes should be enough to hold all 450 syscalls } + +// ExtraFieldHandlers handlers not hold by any field +type ExtraFieldHandlers interface { + ResolveProcessCacheEntry(ev *Event) (*ProcessCacheEntry, bool) + ResolveEventTimestamp(ev *Event) time.Time + GetProcessServiceTag(ev *Event) string +} + +// ResolveProcessCacheEntry stub implementation +func (dfh *DefaultFieldHandlers) ResolveProcessCacheEntry(ev *Event) (*ProcessCacheEntry, bool) { + return nil, false +} + +// ResolveEventTimestamp stub implementation +func (dfh *DefaultFieldHandlers) ResolveEventTimestamp(ev *Event) time.Time { + return ev.Timestamp +} + +// GetProcessServiceTag stub implementation +func (dfh *DefaultFieldHandlers) GetProcessServiceTag(ev *Event) string { + return "" +} diff --git a/pkg/security/secl/model/model_test.go b/pkg/security/secl/model/model_test.go index f009cfafc0c10..e96ce61333dd2 100644 --- a/pkg/security/secl/model/model_test.go +++ b/pkg/security/secl/model/model_test.go @@ -9,6 +9,9 @@ package model import ( + "errors" + "net" + "reflect" "testing" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" @@ -83,3 +86,113 @@ func TestPathValidation(t *testing.T) { t.Error("should return an error") } } + +func TestSetFieldValue(t *testing.T) { + var readOnlyError *eval.ErrFieldReadOnly + + event := NewDefaultEvent() + for _, field := range event.(*Event).GetFields() { + kind, err := event.GetFieldType(field) + if err != nil { + t.Fatal(err) + } + + switch kind { + case reflect.String: + err = event.SetFieldValue(field, "aaa") + if err != nil { + if errors.As(err, &readOnlyError) { + continue + } else { + t.Error(err) + } + } + if err = event.SetFieldValue(field, "aaa"); err != nil && !errors.As(err, &readOnlyError) { + t.Error(err) + } + value, err := event.GetFieldValue(field) + if err != nil { + t.Errorf("unable to get the expected `%s` value: %v", field, err) + } + switch v := value.(type) { + case string: + if v != "aaa" { + t.Errorf("unable to get the expected `%s` value: %v", field, v) + } + case []string: + if v[0] != "aaa" { + t.Errorf("unable to get the expected `%s` value: %v", field, v) + } + default: + t.Errorf("unable to get the expected `%s` value: %v", field, v) + } + case reflect.Int: + err = event.SetFieldValue(field, 123) + if err != nil { + if errors.As(err, &readOnlyError) { + continue + } else { + t.Error(err) + } + } + value, err := event.GetFieldValue(field) + if err != nil { + t.Errorf("unable to get the expected `%s` value: %v", field, err) + } + switch v := value.(type) { + case int: + if v != 123 { + t.Errorf("unable to get the expected `%s` value: %v", field, v) + } + case []int: + if v[0] != 123 { + t.Errorf("unable to get the expected `%s` value: %v", field, v) + } + default: + t.Errorf("unable to get the expected `%s` value: %v", field, v) + } + case reflect.Bool: + err = event.SetFieldValue(field, true) + if err != nil { + if errors.As(err, &readOnlyError) { + continue + } else { + t.Error(err) + } + } + value, err := event.GetFieldValue(field) + if err != nil { + t.Errorf("unable to get the expected `%s` value: %v", field, err) + } + switch v := value.(type) { + case bool: + if !v { + t.Errorf("unable to get the expected `%s` value: %v", field, v) + } + case []bool: + if !v[0] { + t.Errorf("unable to get the expected `%s` value: %v", field, v) + } + default: + t.Errorf("unable to get the expected `%s` value: %v", field, v) + } + case reflect.Struct: + switch field { + case "network.destination.ip", "network.source.ip": + ip, ipnet, err := net.ParseCIDR("127.0.0.1/24") + if err != nil { + t.Error(err) + } + + if err = event.SetFieldValue(field, *ipnet); err != nil { + t.Error(err) + } + if value, err := event.GetFieldValue(field); err != nil || value.(net.IPNet).IP.Equal(ip) { + t.Errorf("unable to get the expected value: %v", err) + } + } + default: + t.Errorf("type of field %s unknown: %v", field, kind) + } + } +} diff --git a/pkg/security/secl/model/oo_symlink.go b/pkg/security/secl/model/oo_symlink.go index 403f8bd3e0d0b..d8d940af8039a 100644 --- a/pkg/security/secl/model/oo_symlink.go +++ b/pkg/security/secl/model/oo_symlink.go @@ -15,10 +15,10 @@ var ( return &eval.StringEvaluator{ Field: field, EvalFnc: func(ctx *eval.Context) string { - if path := (*Event)(ctx.Object).ProcessContext.SymlinkPathnameStr[0]; path != "" { + if path := ctx.Event.(*Event).ProcessContext.SymlinkPathnameStr[0]; path != "" { return path } - return (*Event)(ctx.Object).ProcessContext.FileEvent.PathnameStr + return ctx.Event.(*Event).ProcessContext.FileEvent.PathnameStr }, } }, @@ -26,10 +26,10 @@ var ( return &eval.StringEvaluator{ Field: field, EvalFnc: func(ctx *eval.Context) string { - if path := (*Event)(ctx.Object).ProcessContext.SymlinkPathnameStr[1]; path != "" { + if path := ctx.Event.(*Event).ProcessContext.SymlinkPathnameStr[1]; path != "" { return path } - return (*Event)(ctx.Object).ProcessContext.FileEvent.PathnameStr + return ctx.Event.(*Event).ProcessContext.FileEvent.PathnameStr }, } }, @@ -39,10 +39,10 @@ var ( return &eval.StringEvaluator{ Field: field, EvalFnc: func(ctx *eval.Context) string { - if name := (*Event)(ctx.Object).ProcessContext.SymlinkBasenameStr; name != "" { + if name := ctx.Event.(*Event).ProcessContext.SymlinkBasenameStr; name != "" { return name } - return (*Event)(ctx.Object).ProcessContext.FileEvent.BasenameStr + return ctx.Event.(*Event).ProcessContext.FileEvent.BasenameStr }, } } diff --git a/pkg/security/secl/model/process_cache_entry.go b/pkg/security/secl/model/process_cache_entry.go index 9f5c788d6f4e7..0b5a6d1e158eb 100644 --- a/pkg/security/secl/model/process_cache_entry.go +++ b/pkg/security/secl/model/process_cache_entry.go @@ -40,23 +40,29 @@ func (pc *ProcessCacheEntry) SetAncestor(parent *ProcessCacheEntry) { parent.Retain() } -// GetNextAncestorNoFork returns the first ancestor that is not a fork entry -func (pc *ProcessCacheEntry) GetNextAncestorNoFork() *ProcessCacheEntry { - if pc.Ancestor == nil { - return nil - } - +// GetNextAncestorBinary returns the first ancestor with a different binary +func (pc *ProcessCacheEntry) GetNextAncestorBinary() *ProcessCacheEntry { + current := pc ancestor := pc.Ancestor - for ancestor.Ancestor != nil { - if (ancestor.Ancestor.ExitTime == ancestor.ExecTime || ancestor.Ancestor.ExitTime.IsZero()) && ancestor.Tid == ancestor.Ancestor.Tid { - // this is a fork entry, move on to the next ancestor - ancestor = ancestor.Ancestor - } else { - break + for ancestor != nil { + if current.Inode != ancestor.Inode { + return ancestor } + current = ancestor + ancestor = ancestor.Ancestor } + return nil +} - return ancestor +// HasCompleteLineage returns false if, from the entry, we cannot ascend the ancestors list to PID 1 +func (pc *ProcessCacheEntry) HasCompleteLineage() bool { + for pc != nil { + if pc.Pid == 1 { + return true + } + pc = pc.Ancestor + } + return false } // Exit a process @@ -126,6 +132,11 @@ func (pc *ProcessCacheEntry) Equals(entry *ProcessCacheEntry) bool { return pc.Comm == entry.Comm && pc.ArgsEntry.Equals(entry.ArgsEntry) && pc.EnvsEntry.Equals(entry.EnvsEntry) } +// NewEmptyProcessCacheEntry returns an empty process cache entry for kworker events or failed process resolutions +func NewEmptyProcessCacheEntry(pid uint32, tid uint32, isKworker bool) *ProcessCacheEntry { + return &ProcessCacheEntry{ProcessContext: ProcessContext{Process: Process{PIDContext: PIDContext{Pid: pid, Tid: tid, IsKworker: isKworker}}}} +} + // ArgsEnvs raw value for args and envs type ArgsEnvs struct { ID uint32 @@ -171,6 +182,15 @@ func (p *ArgsEnvsCacheEntry) forceReleaseAll() { } } +// Init the head of the list +func (p *ArgsEnvsCacheEntry) Init(event *ArgsEnvsEvent) { + p.Size = event.ArgsEnvs.Size + p.ValuesRaw = make([]byte, p.Size) + copy(p.ValuesRaw, event.ArgsEnvs.ValuesRaw[:]) + + p.TotalSize = uint64(p.Size) +} + // Append an entry to the list func (p *ArgsEnvsCacheEntry) Append(entry *ArgsEnvsCacheEntry) { p.TotalSize += uint64(entry.Size) diff --git a/pkg/security/secl/model/syscalls.go b/pkg/security/secl/model/syscalls.go index ca1bd51451a64..59007c7629286 100644 --- a/pkg/security/secl/model/syscalls.go +++ b/pkg/security/secl/model/syscalls.go @@ -6,9 +6,6 @@ //go:build linux // +build linux -//go:generate go run github.com/DataDog/datadog-agent/pkg/security/secl/model/syscall_table_generator -table-url https://raw.githubusercontent.com/torvalds/linux/v5.19/arch/x86/entry/syscalls/syscall_64.tbl -output syscalls_linux_amd64.go -output-string syscalls_string_linux_amd64.go -abis common,64 -//go:generate go run github.com/DataDog/datadog-agent/pkg/security/secl/model/syscall_table_generator -table-url https://raw.githubusercontent.com/torvalds/linux/v5.19/include/uapi/asm-generic/unistd.h -output syscalls_linux_arm64.go -output-string syscalls_string_linux_arm64.go - package model import ( diff --git a/pkg/security/secl/model/syscalls_string_linux_amd64.go b/pkg/security/secl/model/syscalls_string_linux_amd64.go index 5b32b64f8a568..39b70b17150cf 100644 --- a/pkg/security/secl/model/syscalls_string_linux_amd64.go +++ b/pkg/security/secl/model/syscalls_string_linux_amd64.go @@ -1,4 +1,4 @@ -// Code generated by "stringer -type Syscall -output syscalls_string_linux_amd64.go syscalls_linux_amd64.go"; DO NOT EDIT. +// Code generated by "stringer -type Syscall -output pkg/security/secl/model/syscalls_string_linux_amd64.go pkg/security/secl/model/syscalls_linux_amd64.go"; DO NOT EDIT. package model diff --git a/pkg/security/secl/model/syscalls_string_linux_arm64.go b/pkg/security/secl/model/syscalls_string_linux_arm64.go index 54fa94f312bd9..1d2f5c941ecda 100644 --- a/pkg/security/secl/model/syscalls_string_linux_arm64.go +++ b/pkg/security/secl/model/syscalls_string_linux_arm64.go @@ -1,4 +1,4 @@ -// Code generated by "stringer -type Syscall -output syscalls_string_linux_arm64.go syscalls_linux_arm64.go"; DO NOT EDIT. +// Code generated by "stringer -type Syscall -output pkg/security/secl/model/syscalls_string_linux_arm64.go pkg/security/secl/model/syscalls_linux_arm64.go"; DO NOT EDIT. package model diff --git a/pkg/security/secl/model/unmarshallers.go b/pkg/security/secl/model/unmarshallers.go index e50528f52eddc..f160cf9a46cdf 100644 --- a/pkg/security/secl/model/unmarshallers.go +++ b/pkg/security/secl/model/unmarshallers.go @@ -479,7 +479,7 @@ func (e *SELinuxEvent) UnmarshalBinary(data []byte) (int, error) { // UnmarshalBinary unmarshalls a binary representation of itself, process_context_t kernel side func (p *PIDContext) UnmarshalBinary(data []byte) (int, error) { - if len(data) < 16 { + if len(data) < 24 { return 0, ErrNotEnoughData } @@ -487,8 +487,9 @@ func (p *PIDContext) UnmarshalBinary(data []byte) (int, error) { p.Tid = ByteOrder.Uint32(data[4:8]) p.NetNS = ByteOrder.Uint32(data[8:12]) p.IsKworker = ByteOrder.Uint32(data[12:16]) > 0 + p.Inode = ByteOrder.Uint64(data[16:24]) - return 16, nil + return 24, nil } // UnmarshalBinary unmarshalls a binary representation of itself diff --git a/pkg/security/secl/model/variables.go b/pkg/security/secl/model/variables.go index b78e11ec0c243..9188cc8033e11 100644 --- a/pkg/security/secl/model/variables.go +++ b/pkg/security/secl/model/variables.go @@ -3,9 +3,6 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build linux -// +build linux - package model import ( @@ -16,7 +13,7 @@ var ( // SECLVariables set of variables SECLVariables = map[string]eval.VariableValue{ "process.pid": eval.NewIntVariable(func(ctx *eval.Context) int { - pc := (*Event)(ctx.Object).ProcessContext + pc := ctx.Event.(*Event).ProcessContext if pc == nil { return 0 } diff --git a/pkg/security/secl/rules/approvers.go b/pkg/security/secl/rules/approvers.go index 6e07dfddd69aa..cc4898300d071 100644 --- a/pkg/security/secl/rules/approvers.go +++ b/pkg/security/secl/rules/approvers.go @@ -75,7 +75,7 @@ func bitmaskCombinations(bitmasks []int) []int { func GetApprovers(rules []*Rule, event eval.Event, fieldCaps FieldCapabilities) (Approvers, error) { approvers := make(Approvers) - ctx := eval.NewContext(event.GetPointer()) + ctx := eval.NewContext(event) // for each rule we should at least find one approver otherwise we will return no approver for the field for _, rule := range rules { diff --git a/pkg/security/secl/rules/model_test.go b/pkg/security/secl/rules/model_test.go index 955e38c1e9887..e922e0c9f8f7d 100644 --- a/pkg/security/secl/rules/model_test.go +++ b/pkg/security/secl/rules/model_test.go @@ -86,35 +86,35 @@ func (m *testModel) GetEvaluator(key string, regID eval.RegisterID) (eval.Evalua case "process.name": return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { return (*testEvent)(ctx.Object).process.name }, + EvalFnc: func(ctx *eval.Context) string { return ctx.Event.(*testEvent).process.name }, Field: key, }, nil case "process.uid": return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { return (*testEvent)(ctx.Object).process.uid }, + EvalFnc: func(ctx *eval.Context) int { return ctx.Event.(*testEvent).process.uid }, Field: key, }, nil case "process.gid": return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { return (*testEvent)(ctx.Object).process.gid }, + EvalFnc: func(ctx *eval.Context) int { return ctx.Event.(*testEvent).process.gid }, Field: key, }, nil case "process.is_root": return &eval.BoolEvaluator{ - EvalFnc: func(ctx *eval.Context) bool { return (*testEvent)(ctx.Object).process.isRoot }, + EvalFnc: func(ctx *eval.Context) bool { return ctx.Event.(*testEvent).process.isRoot }, Field: key, }, nil case "open.filename": return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { return (*testEvent)(ctx.Object).open.filename }, + EvalFnc: func(ctx *eval.Context) string { return ctx.Event.(*testEvent).open.filename }, Field: key, OpOverrides: eval.GlobCmp, }, nil @@ -122,28 +122,28 @@ func (m *testModel) GetEvaluator(key string, regID eval.RegisterID) (eval.Evalua case "open.flags": return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { return (*testEvent)(ctx.Object).open.flags }, + EvalFnc: func(ctx *eval.Context) int { return ctx.Event.(*testEvent).open.flags }, Field: key, }, nil case "open.mode": return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { return (*testEvent)(ctx.Object).open.mode }, + EvalFnc: func(ctx *eval.Context) int { return ctx.Event.(*testEvent).open.mode }, Field: key, }, nil case "mkdir.filename": return &eval.StringEvaluator{ - EvalFnc: func(ctx *eval.Context) string { return (*testEvent)(ctx.Object).mkdir.filename }, + EvalFnc: func(ctx *eval.Context) string { return ctx.Event.(*testEvent).mkdir.filename }, Field: key, }, nil case "mkdir.mode": return &eval.IntEvaluator{ - EvalFnc: func(ctx *eval.Context) int { return (*testEvent)(ctx.Object).mkdir.mode }, + EvalFnc: func(ctx *eval.Context) int { return ctx.Event.(*testEvent).mkdir.mode }, Field: key, }, nil diff --git a/pkg/security/secl/rules/opts.go b/pkg/security/secl/rules/opts.go index e2e90cf483052..b737c8024b4bf 100644 --- a/pkg/security/secl/rules/opts.go +++ b/pkg/security/secl/rules/opts.go @@ -8,6 +8,7 @@ package rules import ( "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/log" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" ) // VariableProvider is the interface implemented by SECL variable providers @@ -56,3 +57,25 @@ func (o *Opts) WithStateScopes(stateScopes map[Scope]VariableProviderFactory) *O o.StateScopes = stateScopes return o } + +// NetEvalOpts returns eval options +func NewEvalOpts(eventTypeEnabled map[eval.EventType]bool) (*Opts, *eval.Opts) { + var ruleOpts Opts + ruleOpts. + WithEventTypeEnabled(eventTypeEnabled). + WithStateScopes(map[Scope]VariableProviderFactory{ + "process": func() VariableProvider { + return eval.NewScopedVariables(func(ctx *eval.Context) *model.ProcessContext { + return ctx.Event.(*model.Event).ProcessContext + }, nil) + }, + }) + + var evalOpts eval.Opts + evalOpts. + WithConstants(model.SECLConstants). + WithLegacyFields(model.SECLLegacyFields). + WithVariables(model.SECLVariables) + + return &ruleOpts, &evalOpts +} diff --git a/pkg/security/secl/rules/policy_test.go b/pkg/security/secl/rules/policy_test.go index 200890997cbe3..fc54698cbe386 100644 --- a/pkg/security/secl/rules/policy_test.go +++ b/pkg/security/secl/rules/policy_test.go @@ -176,7 +176,7 @@ func (t *testVariableProvider) GetVariable(name string, value interface{}) (eval switch value.(type) { case []int: intVar := eval.NewIntArrayVariable(func(ctx *eval.Context) []int { - processName := (*testEvent)(ctx.Object).process.name + processName := ctx.Event.(*testEvent).process.name processVars, found := t.vars[processName] if !found { return nil @@ -190,7 +190,7 @@ func (t *testVariableProvider) GetVariable(name string, value interface{}) (eval i, _ := v.([]int) return i }, func(ctx *eval.Context, value interface{}) error { - processName := (*testEvent)(ctx.Object).process.name + processName := ctx.Event.(*testEvent).process.name if _, found := t.vars[processName]; !found { t.vars[processName] = map[string]interface{}{} } diff --git a/pkg/security/secl/rules/rule_filters.go b/pkg/security/secl/rules/rule_filters.go index 9dedc0ff4bff0..b3ba04b7bff56 100644 --- a/pkg/security/secl/rules/rule_filters.go +++ b/pkg/security/secl/rules/rule_filters.go @@ -89,7 +89,7 @@ func NewSECLRuleFilter(model eval.Model) *SECLRuleFilter { return &SECLRuleFilter{ model: model, context: &eval.Context{ - Object: model.NewEvent().GetPointer(), + Event: model.NewEvent(), }, parsingContext: ast.NewParsingContext(), } diff --git a/pkg/security/secl/rules/ruleset.go b/pkg/security/secl/rules/ruleset.go index 3d5d1e015f813..5668c4bb57943 100644 --- a/pkg/security/secl/rules/ruleset.go +++ b/pkg/security/secl/rules/ruleset.go @@ -474,7 +474,7 @@ func (rs *RuleSet) IsDiscarder(event eval.Event, field eval.Field) (bool, error) return false, &ErrNoEventTypeBucket{EventType: eventType} } - ctx := rs.pool.Get(event.GetPointer()) + ctx := rs.pool.Get(event) defer rs.pool.Put(ctx) return IsDiscarder(ctx, field, bucket.rules) @@ -521,7 +521,7 @@ func (rs *RuleSet) runRuleActions(ctx *eval.Context, rule *Rule) error { // Evaluate the specified event against the set of rules func (rs *RuleSet) Evaluate(event eval.Event) bool { - ctx := rs.pool.Get(event.GetPointer()) + ctx := rs.pool.Get(event) defer rs.pool.Put(ctx) eventType := event.GetType() @@ -672,7 +672,7 @@ func (rs *RuleSet) LoadPolicies(loader *PolicyLoader, opts PolicyLoaderOpts) *mu varName = string(action.Set.Scope) + "." + varName } - if _, err := rs.model.NewEvent().GetFieldValue(varName); err == nil { + if _, err := rs.eventCtor().GetFieldValue(varName); err == nil { errs = multierror.Append(errs, fmt.Errorf("variable '%s' conflicts with field", varName)) continue } @@ -771,6 +771,11 @@ func (rs *RuleSet) LoadPolicies(loader *PolicyLoader, opts PolicyLoaderOpts) *mu return errs } +// NewEvent returns a new event using the embedded constructor +func (rs *RuleSet) NewEvent() eval.Event { + return rs.eventCtor() +} + // NewRuleSet returns a new ruleset for the specified data model func NewRuleSet(model eval.Model, eventCtor func() eval.Event, opts *Opts, evalOpts *eval.Opts) *RuleSet { logger := log.OrNullLogger(opts.Logger) diff --git a/pkg/security/secl/rules/ruleset_test.go b/pkg/security/secl/rules/ruleset_test.go index 4741ed821fd29..9d1d031c66e6f 100644 --- a/pkg/security/secl/rules/ruleset_test.go +++ b/pkg/security/secl/rules/ruleset_test.go @@ -39,7 +39,7 @@ func (f *testHandler) EventDiscarderFound(rs *RuleSet, event eval.Event, field s } evaluator, _ := f.model.GetEvaluator(field, "") - ctx := eval.NewContext(event.GetPointer()) + ctx := eval.NewContext(event) value := evaluator.Eval(ctx) diff --git a/pkg/security/tests/bind_test.go b/pkg/security/tests/bind_test.go index 602fc67af9377..a52e10edac160 100644 --- a/pkg/security/tests/bind_test.go +++ b/pkg/security/tests/bind_test.go @@ -17,7 +17,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -59,16 +59,14 @@ func TestBindEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "bind", event.GetType(), "wrong event type") assert.Equal(t, uint16(unix.AF_INET), event.Bind.AddrFamily, "wrong address family") assert.Equal(t, uint16(4242), event.Bind.Addr.Port, "wrong address port") assert.Equal(t, string("0.0.0.0/32"), event.Bind.Addr.IPNet.String(), "wrong address") assert.Equal(t, int64(0), event.Bind.Retval, "wrong retval") - if !validateBindSchema(t, event) { - t.Error(event.String()) - } + test.validateBindSchema(t, event) }) }) @@ -83,16 +81,14 @@ func TestBindEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "bind", event.GetType(), "wrong event type") assert.Equal(t, uint16(unix.AF_INET), event.Bind.AddrFamily, "wrong address family") assert.Equal(t, uint16(4242), event.Bind.Addr.Port, "wrong address port") assert.Equal(t, string("0.0.0.0/32"), event.Bind.Addr.IPNet.String(), "wrong address") assert.Equal(t, int64(0), event.Bind.Retval, "wrong retval") - if !validateBindSchema(t, event) { - t.Error(event.String()) - } + test.validateBindSchema(t, event) }) }) @@ -107,16 +103,14 @@ func TestBindEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "bind", event.GetType(), "wrong event type") assert.Equal(t, uint16(unix.AF_INET6), event.Bind.AddrFamily, "wrong address family") assert.Equal(t, uint16(4242), event.Bind.Addr.Port, "wrong address port") assert.Equal(t, string("::/128"), event.Bind.Addr.IPNet.String(), "wrong address") assert.Equal(t, int64(0), event.Bind.Retval, "wrong retval") - if !validateBindSchema(t, event) { - t.Error(event.String()) - } + test.validateBindSchema(t, event) }) }) @@ -131,7 +125,7 @@ func TestBindEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "bind", event.GetType(), "wrong event type") assert.Equal(t, uint16(unix.AF_UNIX), event.Bind.AddrFamily, "wrong address family") assert.Equal(t, uint16(0), event.Bind.Addr.Port, "wrong address port") @@ -139,9 +133,7 @@ func TestBindEvent(t *testing.T) { event.Bind.Addr.IPNet, "wrong address") assert.Equal(t, int64(0), event.Bind.Retval, "wrong retval") - if !validateBindSchema(t, event) { - t.Error(event.String()) - } + test.validateBindSchema(t, event) }) }) } diff --git a/pkg/security/tests/bpf_test.go b/pkg/security/tests/bpf_test.go index 0df5a8af9f6cd..a4d7b8b2c132a 100644 --- a/pkg/security/tests/bpf_test.go +++ b/pkg/security/tests/bpf_test.go @@ -14,7 +14,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -45,13 +44,11 @@ func TestBPFEventLoad(t *testing.T) { t.Run("prog_load", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "-load-bpf") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "bpf", event.GetType(), "wrong event type") assert.Equal(t, uint32(model.BpfProgTypeKprobe), event.BPF.Program.Type, "wrong program type") - if !validateBPFSchema(t, event) { - t.Error(event.String()) - } + test.validateBPFSchema(t, event) }) }) } @@ -82,13 +79,11 @@ func TestBPFEventMap(t *testing.T) { t.Run("map_lookup", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "-load-bpf", "-clone-bpf") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "bpf", event.GetType(), "wrong event type") assert.Equal(t, uint32(model.BpfMapTypeHash), event.BPF.Map.Type, "wrong map type") - if !validateBPFSchema(t, event) { - t.Error(event.String()) - } + test.validateBPFSchema(t, event) }) }) } diff --git a/pkg/security/tests/chmod_test.go b/pkg/security/tests/chmod_test.go index 0892a7472cce8..60879777a7820 100644 --- a/pkg/security/tests/chmod_test.go +++ b/pkg/security/tests/chmod_test.go @@ -15,7 +15,7 @@ import ( "github.com/stretchr/testify/assert" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -54,7 +54,7 @@ func TestChmod(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chmod", event.GetType(), "wrong event type") assertRights(t, uint16(event.Chmod.Mode), 0o707) assert.Equal(t, getInode(t, testFile), event.Chmod.File.Inode, "wrong inode") @@ -63,9 +63,7 @@ func TestChmod(t *testing.T) { assertNearTime(t, event.Chmod.File.CTime) assert.Equal(t, event.Async, false) - if !validateChmodSchema(t, event) { - t.Error(event.String()) - } + test.validateChmodSchema(t, event) }) }) @@ -77,7 +75,7 @@ func TestChmod(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chmod", event.GetType(), "wrong event type") assertRights(t, uint16(event.Chmod.Mode), 0o757) assert.Equal(t, getInode(t, testFile), event.Chmod.File.Inode, "wrong inode") @@ -86,9 +84,7 @@ func TestChmod(t *testing.T) { assertNearTime(t, event.Chmod.File.CTime) assert.Equal(t, event.Async, false) - if !validateChmodSchema(t, event) { - t.Error(event.String()) - } + test.validateChmodSchema(t, event) }) }) @@ -98,7 +94,7 @@ func TestChmod(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chmod", event.GetType(), "wrong event type") assertRights(t, uint16(event.Chmod.Mode), 0o717, "wrong mode") assert.Equal(t, getInode(t, testFile), event.Chmod.File.Inode, "wrong inode") @@ -107,9 +103,7 @@ func TestChmod(t *testing.T) { assertNearTime(t, event.Chmod.File.CTime) assert.Equal(t, event.Async, false) - if !validateChmodSchema(t, event) { - t.Error(event.String()) - } + test.validateChmodSchema(t, event) }) })) } diff --git a/pkg/security/tests/chown32_test.go b/pkg/security/tests/chown32_test.go index c24db9f7caa14..bfd176607e334 100644 --- a/pkg/security/tests/chown32_test.go +++ b/pkg/security/tests/chown32_test.go @@ -15,7 +15,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -64,7 +64,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "chown", testFile, "100", "200") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(100), event.Chown.UID, "wrong user") assert.Equal(t, int64(200), event.Chown.GID, "wrong user") @@ -76,9 +76,7 @@ func TestChown32(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) }) @@ -91,7 +89,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "fchown", testFile, "101", "201") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(101), event.Chown.UID, "wrong user") assert.Equal(t, int64(201), event.Chown.GID, "wrong user") @@ -103,9 +101,7 @@ func TestChown32(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) }) @@ -118,7 +114,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "fchownat", testFile, "102", "202") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(102), event.Chown.UID, "wrong user") assert.Equal(t, int64(202), event.Chown.GID, "wrong user") @@ -130,9 +126,7 @@ func TestChown32(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) }) @@ -150,7 +144,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "lchown", testSymlink, "103", "203") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(103), event.Chown.UID, "wrong user") assert.Equal(t, int64(203), event.Chown.GID, "wrong user") @@ -162,9 +156,7 @@ func TestChown32(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) }) @@ -182,7 +174,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "lchown32", testSymlink, "104", "204") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(104), event.Chown.UID, "wrong user") assert.Equal(t, int64(204), event.Chown.GID, "wrong user") @@ -194,9 +186,7 @@ func TestChown32(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) }) @@ -210,7 +200,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "fchown32", testFile, "105", "205") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(105), event.Chown.UID, "wrong user") assert.Equal(t, int64(205), event.Chown.GID, "wrong user") @@ -222,9 +212,7 @@ func TestChown32(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) }) @@ -237,7 +225,7 @@ func TestChown32(t *testing.T) { test.WaitSignal(t, func() error { // fchown syscall return runSyscallTesterFunc(t, syscallTester, "chown32", testFile, "106", "206") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(106), event.Chown.UID, "wrong user") assert.Equal(t, int64(206), event.Chown.GID, "wrong user") @@ -249,9 +237,7 @@ func TestChown32(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) }) } diff --git a/pkg/security/tests/chown_test.go b/pkg/security/tests/chown_test.go index 714a34e2f3e69..ad1a3314a1465 100644 --- a/pkg/security/tests/chown_test.go +++ b/pkg/security/tests/chown_test.go @@ -18,7 +18,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -78,7 +78,7 @@ func TestChown(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(100), event.Chown.UID, "wrong user") assert.Equal(t, int64(200), event.Chown.GID, "wrong user") @@ -90,9 +90,7 @@ func TestChown(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) }) @@ -107,7 +105,7 @@ func TestChown(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(101), event.Chown.UID, "wrong user") assert.Equal(t, int64(201), event.Chown.GID, "wrong user") @@ -119,9 +117,7 @@ func TestChown(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) }) @@ -145,7 +141,7 @@ func TestChown(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assertTriggeredRule(t, rule, "test_rule2") assert.Equal(t, int64(102), event.Chown.UID, "wrong user") @@ -158,9 +154,7 @@ func TestChown(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) })) @@ -172,7 +166,7 @@ func TestChown(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assert.Equal(t, int64(103), event.Chown.UID, "wrong user") assert.Equal(t, int64(203), event.Chown.GID, "wrong user") @@ -184,9 +178,7 @@ func TestChown(t *testing.T) { assertNearTime(t, event.Chown.File.CTime) assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) })) @@ -199,16 +191,14 @@ func TestChown(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assertTriggeredRule(t, r, "test_rule3") assert.Equal(t, int64(104), event.Chown.UID, "wrong user") assert.Equal(t, int64(-1), event.Chown.GID, "wrong group") assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) })) @@ -221,16 +211,14 @@ func TestChown(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assertTriggeredRule(t, r, "test_rule4") assert.Equal(t, int64(-1), event.Chown.UID, "wrong user") assert.Equal(t, int64(204), event.Chown.GID, "wrong group") assert.Equal(t, event.Async, false) - if !validateChownSchema(t, event) { - t.Error(event.String()) - } + test.validateChownSchema(t, event) }) })) @@ -246,7 +234,7 @@ func TestChown(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { t.Error("Event received") }) }) diff --git a/pkg/security/tests/dentry_test.go b/pkg/security/tests/dentry_test.go index 24b0baf018ab9..1b07c0eb4dfed 100644 --- a/pkg/security/tests/dentry_test.go +++ b/pkg/security/tests/dentry_test.go @@ -19,13 +19,12 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" "github.com/DataDog/datadog-agent/pkg/security/metrics" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/probe/resolvers" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) -func validateResolution(test *testModule, event *sprobe.Event, testFile string, pathFnc func(uint32, uint64, uint32, bool) (string, error), parentFnc func(uint32, uint64, uint32) (uint32, uint64, error), nameFnc func(uint32, uint64, uint32) (string, error)) { +func validateResolution(test *testModule, event *model.Event, testFile string, pathFnc func(uint32, uint64, uint32, bool) (string, error), parentFnc func(uint32, uint64, uint32) (uint32, uint64, error), nameFnc func(uint32, uint64, uint32) (string, error)) { basename := path.Base(testFile) // Force an eRPC resolution to refresh the entry with the last generation as lost events may have invalidated the entry @@ -103,7 +102,7 @@ func TestDentryResolutionERPC(t *testing.T) { test.WaitSignal(t, func() error { _, err = os.Create(testFile) return err - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_erpc_rule") test.module.SendStats() @@ -157,7 +156,7 @@ func TestDentryResolutionMap(t *testing.T) { return err } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_map_rule") test.module.SendStats() @@ -207,7 +206,7 @@ func BenchmarkERPCDentryResolutionSegment(b *testing.B) { return err } return syscall.Close(fd) - }, func(event *sprobe.Event, _ *rules.Rule) { + }, func(event *model.Event, _ *rules.Rule) { mountID = event.Open.File.MountID inode = event.Open.File.Inode pathID = event.Open.File.PathID @@ -276,7 +275,7 @@ func BenchmarkERPCDentryResolutionPath(b *testing.B) { return err } return syscall.Close(fd) - }, func(event *sprobe.Event, _ *rules.Rule) { + }, func(event *model.Event, _ *rules.Rule) { mountID = event.Open.File.MountID inode = event.Open.File.Inode pathID = event.Open.File.PathID @@ -345,7 +344,7 @@ func BenchmarkMapDentryResolutionSegment(b *testing.B) { return err } return syscall.Close(fd) - }, func(event *sprobe.Event, _ *rules.Rule) { + }, func(event *model.Event, _ *rules.Rule) { mountID = event.Open.File.MountID inode = event.Open.File.Inode pathID = event.Open.File.PathID @@ -414,7 +413,7 @@ func BenchmarkMapDentryResolutionPath(b *testing.B) { return err } return syscall.Close(fd) - }, func(event *sprobe.Event, _ *rules.Rule) { + }, func(event *model.Event, _ *rules.Rule) { mountID = event.Open.File.MountID inode = event.Open.File.Inode pathID = event.Open.File.PathID diff --git a/pkg/security/tests/dns_test.go b/pkg/security/tests/dns_test.go index bac933332426c..cc8abb2c239d0 100644 --- a/pkg/security/tests/dns_test.go +++ b/pkg/security/tests/dns_test.go @@ -20,7 +20,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -65,13 +65,11 @@ func TestDNS(t *testing.T) { return err } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_dns") assert.Equal(t, "google.com", event.DNS.Name, "wrong domain name") - if !validateDNSSchema(t, event) { - t.Error(event.String()) - } + test.validateDNSSchema(t, event) }) }) @@ -82,13 +80,11 @@ func TestDNS(t *testing.T) { return err } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_dns") assert.Equal(t, "GOOGLE.COM", event.DNS.Name, "wrong domain name") - if !validateDNSSchema(t, event) { - t.Error(event.String()) - } + test.validateDNSSchema(t, event) }) }) @@ -97,14 +93,12 @@ func TestDNS(t *testing.T) { test.WaitSignal(t, func() error { net.LookupIP(longDomain) return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_long_query") assert.Equal(t, "dns", event.GetType(), "wrong event type") assert.Equal(t, longDomain, event.DNS.Name, "wrong domain name") - if !validateDNSSchema(t, event) { - t.Error(event.String()) - } + test.validateDNSSchema(t, event) }) }) } diff --git a/pkg/security/tests/event_monitoring_test.go b/pkg/security/tests/event_monitoring_test.go new file mode 100644 index 0000000000000..693a4016f7dc0 --- /dev/null +++ b/pkg/security/tests/event_monitoring_test.go @@ -0,0 +1,109 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build functionaltests +// +build functionaltests + +package tests + +import ( + "os/exec" + "testing" + "time" + + "github.com/stretchr/testify/assert" + + pmodel "github.com/DataDog/datadog-agent/pkg/process/events/model" +) + +func TestProcessMonitoringDisabled(t *testing.T) { + test, err := newTestModule(t, nil, nil, testOpts{}) + if err != nil { + t.Fatal(err) + } + defer test.Close() + + t.Run("no-event", func(t *testing.T) { + lsExecutable := which(t, "ls") + + err = test.GetProcessEvent(func() error { + cmd := exec.Command(lsExecutable) + return cmd.Run() + }, func(event *pmodel.ProcessEvent) bool { + t.Fatal("shouldn't get a process event") + return true + }, 3*time.Second, "") + if err == nil { + t.Fatal("shouldn't get a process event") + } else if otherErr, ok := err.(ErrTimeout); !ok { + t.Fatal(otherErr) + } + }) +} + +func TestProcessMonitoring(t *testing.T) { + test, err := newTestModule(t, nil, nil, testOpts{ + disableRuntimeSecurity: true, + enableEventMonitoringProcess: true, + }) + if err != nil { + t.Fatal(err) + } + defer test.Close() + + syscallTester, err := loadSyscallTester(t, test, "syscall_tester") + if err != nil { + t.Fatal(err) + } + + t.Run("fork", func(t *testing.T) { + err = test.GetProcessEvent(func() error { + cmd := exec.Command(syscallTester, "fork") + return cmd.Run() + }, func(event *pmodel.ProcessEvent) bool { + return assert.Equal(t, pmodel.Fork.String(), event.EventType.String(), "wrong process event type") && + assert.Equal(t, syscallTester, event.Exe, "wrong executable path") && + assert.Equal(t, []string{syscallTester, "fork"}, event.Cmdline, "wrong command line") && + assertNearTimeObject(t, event.ForkTime) + }, getEventTimeout, syscallTester, pmodel.Fork) + if err != nil { + t.Fatal(err) + } + }) + + t.Run("exec", func(t *testing.T) { + lsExecutable := which(t, "ls") + err = test.GetProcessEvent(func() error { + cmd := exec.Command(lsExecutable, "-l") + return cmd.Run() + }, func(event *pmodel.ProcessEvent) bool { + return assert.Equal(t, pmodel.Exec.String(), event.EventType.String(), "wrong process event type") && + assert.Equal(t, lsExecutable, event.Exe, "wrong executable path") && + assert.Equal(t, []string{lsExecutable, "-l"}, event.Cmdline, "wrong command line") && + assertNearTimeObject(t, event.ExecTime) + }, getEventTimeout, lsExecutable, pmodel.Exec) + if err != nil { + t.Fatal(err) + } + }) + + t.Run("exit", func(t *testing.T) { + sleepExecutable := which(t, "sleep") + err = test.GetProcessEvent(func() error { + cmd := exec.Command(sleepExecutable) + _ = cmd.Run() + return nil + }, func(event *pmodel.ProcessEvent) bool { + return assert.Equal(t, pmodel.Exit.String(), event.EventType.String(), "wrong process event type") && + assert.Equal(t, sleepExecutable, event.Exe, "wrong executable path") && + assert.Equal(t, []string{sleepExecutable}, event.Cmdline, "wrong command line") && + assertNearTimeObject(t, event.ExitTime) && + assert.Equal(t, uint32(1), event.ExitCode, "wrong exit code") + }, getEventTimeout, sleepExecutable, pmodel.Exit) + if err != nil { + t.Fatal(err) + } + }) +} diff --git a/pkg/security/tests/fields_test.go b/pkg/security/tests/fields_test.go index d1c0bc531c220..8722eeec6ea80 100644 --- a/pkg/security/tests/fields_test.go +++ b/pkg/security/tests/fields_test.go @@ -12,7 +12,7 @@ import ( "os/exec" "testing" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -38,10 +38,10 @@ func TestFieldsResolver(t *testing.T) { test.WaitSignal(t, func() error { _, _, err = test.Create("test-fields") return err - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_fields_open") - event.ResolveFields(false) + event.ResolveFields() // rely on validateAbnormalPaths }) @@ -54,10 +54,10 @@ func TestFieldsResolver(t *testing.T) { cmd := exec.Command(lsExecutable, "test-fields") _ = cmd.Run() return nil - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_fields_exec") - event.ResolveFields(false) + event.ResolveFields() // rely on validateAbnormalPaths })) diff --git a/pkg/security/tests/filters_test.go b/pkg/security/tests/filters_test.go index 1a637d2258d91..b78c36f0a940e 100644 --- a/pkg/security/tests/filters_test.go +++ b/pkg/security/tests/filters_test.go @@ -206,7 +206,7 @@ func TestFilterOpenLeafDiscarderActivityDump(t *testing.T) { } return syscall.Close(fd) }, func(event eval.Event, field eval.Field, eventType eval.EventType) bool { - e := event.(*probe.Event) + e := event.(*model.Event) if e == nil || (e != nil && e.GetEventType() != model.FileOpenEventType) { return false } @@ -226,7 +226,7 @@ func TestFilterOpenLeafDiscarderActivityDump(t *testing.T) { return err } return syscall.Close(fd) - }, func(event *probe.Event) bool { + }, func(event *model.Event) bool { return event.GetType() == "open" && event.SavedByActivityDumps && event.Open.File.Inode == getInode(t, testFile) @@ -340,7 +340,7 @@ func TestFilterDiscarderMask(t *testing.T) { testFile, testFilePtr, err = test.CreateWithOptions("test-mask", 98, 99, 0o447) return err - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_mask_open_rule") }) @@ -373,7 +373,7 @@ func TestFilterDiscarderMask(t *testing.T) { return err } return f.Close() - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_mask_open_rule") }) })) @@ -637,7 +637,7 @@ func TestFilterDiscarderRetention(t *testing.T) { } return syscall.Close(fd) }, func(event eval.Event, field eval.Field, eventType eval.EventType) bool { - e := event.(*probe.Event) + e := event.(*model.Event) if e == nil || (e != nil && e.GetEventType() != model.FileOpenEventType) { return false } diff --git a/pkg/security/tests/hardlink_test.go b/pkg/security/tests/hardlink_test.go index b727e4985358f..8950c654cfe2a 100644 --- a/pkg/security/tests/hardlink_test.go +++ b/pkg/security/tests/hardlink_test.go @@ -13,7 +13,7 @@ import ( "os/exec" "testing" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -52,7 +52,7 @@ func runHardlinkTests(t *testing.T, opts testOpts) { test.WaitSignal(t, func() error { cmd := exec.Command(testOrigExecutable, "/tmp/test1") return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_orig") }) @@ -70,7 +70,7 @@ func runHardlinkTests(t *testing.T, opts testOpts) { test.WaitSignal(t, func() error { cmd := exec.Command(testNewExecutable, "/tmp/test2") return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_link") }) }) @@ -90,14 +90,14 @@ func runHardlinkTests(t *testing.T, opts testOpts) { test.WaitSignal(t, func() error { cmd := exec.Command(testOrigExecutable, "/tmp/test1") return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_orig") }) test.WaitSignal(t, func() error { cmd := exec.Command(testNewExecutable, "/tmp/test2") return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_link") }) }) diff --git a/pkg/security/tests/kernel_module_test.go b/pkg/security/tests/kernel_module_test.go index 4c2712b5e52bb..2ca5cc6c387e3 100644 --- a/pkg/security/tests/kernel_module_test.go +++ b/pkg/security/tests/kernel_module_test.go @@ -20,7 +20,6 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -166,14 +165,14 @@ func TestLoadModule(t *testing.T) { } return unix.DeleteModule(testModuleName, unix.O_NONBLOCK) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "test_load_module_from_memory", r.ID, "invalid rule triggered") - assert.Equal(t, "", event.ResolveFilePath(&event.LoadModule.File), "shouldn't get a path") assert.Equal(t, event.Async, false) - if !validateLoadModuleNoFileSchema(t, event) { - t.Error(event.String()) - } + event.ResolveFields() + assert.Equal(t, "", event.LoadModule.File.PathnameStr, "shouldn't get a path") + + test.validateLoadModuleNoFileSchema(t, event) }) }) @@ -191,12 +190,10 @@ func TestLoadModule(t *testing.T) { } return unix.DeleteModule(testModuleName, unix.O_NONBLOCK) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "test_load_module", r.ID, "invalid rule triggered") - if !validateLoadModuleSchema(t, event) { - t.Error(event.String()) - } + test.validateLoadModuleSchema(t, event) }) }) @@ -223,7 +220,7 @@ func TestLoadModule(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "test_load_module_kworker", r.ID, "invalid rule triggered") }) }) @@ -284,12 +281,10 @@ func TestUnloadModule(t *testing.T) { } return unix.DeleteModule(testModuleName, unix.O_NONBLOCK) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "test_unload_module", r.ID, "invalid rule triggered") - if !validateUnloadModuleSchema(t, event) { - t.Error(event.String()) - } + test.validateUnloadModuleSchema(t, event) }) }) } diff --git a/pkg/security/tests/link_test.go b/pkg/security/tests/link_test.go index 166a140a47fbc..fd0ef1375a73f 100644 --- a/pkg/security/tests/link_test.go +++ b/pkg/security/tests/link_test.go @@ -19,7 +19,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -54,7 +54,7 @@ func TestLink(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "link", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Link.Source.Inode, "wrong inode") assertRights(t, event.Link.Source.Mode, uint16(expectedMode)) @@ -65,9 +65,7 @@ func TestLink(t *testing.T) { assertNearTime(t, event.Link.Target.CTime) assert.Equal(t, event.Async, false) - if !validateLinkSchema(t, event) { - t.Error(event.String()) - } + test.validateLinkSchema(t, event) }) if err = os.Remove(testNewFile); err != nil { @@ -82,7 +80,7 @@ func TestLink(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "link", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Link.Source.Inode, "wrong inode") assertRights(t, event.Link.Source.Mode, uint16(expectedMode)) @@ -93,9 +91,7 @@ func TestLink(t *testing.T) { assertNearTime(t, event.Link.Target.CTime) assert.Equal(t, event.Async, false) - if !validateLinkSchema(t, event) { - t.Error(event.String()) - } + test.validateLinkSchema(t, event) }) if err = os.Remove(testNewFile); err != nil { @@ -138,7 +134,7 @@ func TestLink(t *testing.T) { return fmt.Errorf("failed to create a link with io_uring: %d", ret) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "link", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Link.Source.Inode, "wrong inode") assertRights(t, event.Link.Source.Mode, uint16(expectedMode)) diff --git a/pkg/security/tests/macros_test.go b/pkg/security/tests/macros_test.go index 97572454db7df..312148c099906 100644 --- a/pkg/security/tests/macros_test.go +++ b/pkg/security/tests/macros_test.go @@ -14,7 +14,7 @@ import ( "github.com/stretchr/testify/assert" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -53,7 +53,7 @@ func TestMacros(t *testing.T) { return err } return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "mkdir", event.GetType(), "wrong event type") }) } diff --git a/pkg/security/tests/mkdir_test.go b/pkg/security/tests/mkdir_test.go index e9ea4839cdbe6..f9c6de0486222 100644 --- a/pkg/security/tests/mkdir_test.go +++ b/pkg/security/tests/mkdir_test.go @@ -19,7 +19,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -56,7 +56,7 @@ func TestMkdir(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_mkdir") assertRights(t, uint16(event.Mkdir.Mode), mkdirMode) assert.Equal(t, getInode(t, testFile), event.Mkdir.File.Inode, "wrong inode") @@ -79,7 +79,7 @@ func TestMkdir(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_mkdirat") assert.Equal(t, getInode(t, testatFile), event.Mkdir.File.Inode, "wrong inode") assertRights(t, uint16(event.Mkdir.Mode), 0777) @@ -132,7 +132,7 @@ func TestMkdir(t *testing.T) { return fmt.Errorf("failed to create directory with io_uring: %d", ret) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_mkdirat") assert.Equal(t, getInode(t, testatFile), event.Mkdir.File.Inode, "wrong inode") assertRights(t, uint16(event.Mkdir.Mode), 0777) @@ -182,7 +182,7 @@ func TestMkdirError(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "mkdirat-error", testatFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_mkdirat_error") assert.Equal(t, event.Mkdir.Retval, -int64(syscall.EACCES)) }) diff --git a/pkg/security/tests/mmap_test.go b/pkg/security/tests/mmap_test.go index 402e624447135..d15d40891a045 100644 --- a/pkg/security/tests/mmap_test.go +++ b/pkg/security/tests/mmap_test.go @@ -16,7 +16,6 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -46,7 +45,7 @@ func TestMMapEvent(t *testing.T) { return fmt.Errorf("couldn't unmap memory segment: %w", err) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "mmap", event.GetType(), "wrong event type") assert.Equal(t, unix.PROT_READ|unix.PROT_WRITE|unix.PROT_EXEC, event.MMap.Protection&(unix.PROT_READ|unix.PROT_WRITE|unix.PROT_EXEC), fmt.Sprintf("wrong protection: %s", model.Protection(event.MMap.Protection))) assert.Equal(t, event.Async, false) @@ -57,9 +56,7 @@ func TestMMapEvent(t *testing.T) { } assertFieldEqual(t, event, "process.file.path", executable) - if !validateMMapSchema(t, event) { - t.Error(event.String()) - } + test.validateMMapSchema(t, event) }) }) } diff --git a/pkg/security/tests/module_tester.go b/pkg/security/tests/module_tester.go index 2d661e5238397..ac6da4597d59d 100644 --- a/pkg/security/tests/module_tester.go +++ b/pkg/security/tests/module_tester.go @@ -41,6 +41,7 @@ import ( "golang.org/x/sys/unix" sysconfig "github.com/DataDog/datadog-agent/cmd/system-probe/config" + pmodel "github.com/DataDog/datadog-agent/pkg/process/events/model" "github.com/DataDog/datadog-agent/pkg/process/util" "github.com/DataDog/datadog-agent/pkg/security/api" "github.com/DataDog/datadog-agent/pkg/security/config" @@ -76,9 +77,14 @@ system_probe_config: enable_kernel_header_download: true enable_runtime_compiler: true +event_monitoring_config: + process: + enabled: {{ .EventMonitoringProcessEnabled }} + network_process: + enabled: {{ .EventMonitoringNetworkEnabled }} + runtime_security_config: - enabled: true - fim_enabled: true + enabled: {{ .RuntimeSecurityEnabled }} runtime_compilation: enabled: true remote_tagger: false @@ -197,6 +203,9 @@ type testOpts struct { disableMapDentryResolution bool envsWithValue []string disableAbnormalPathCheck bool + disableRuntimeSecurity bool + enableEventMonitoringProcess bool + enableEventMonitoringNetwork bool } func (s *stringSlice) String() string { @@ -224,7 +233,11 @@ func (to testOpts) Equal(opts testOpts) bool { to.eventsCountThreshold == opts.eventsCountThreshold && to.disableERPCDentryResolution == opts.disableERPCDentryResolution && to.disableMapDentryResolution == opts.disableMapDentryResolution && - reflect.DeepEqual(to.envsWithValue, opts.envsWithValue) + reflect.DeepEqual(to.envsWithValue, opts.envsWithValue) && + to.disableAbnormalPathCheck == opts.disableAbnormalPathCheck && + to.disableRuntimeSecurity == opts.disableRuntimeSecurity && + to.enableEventMonitoringProcess == opts.enableEventMonitoringProcess && + to.enableEventMonitoringNetwork == opts.enableEventMonitoringNetwork } type testModule struct { @@ -243,17 +256,19 @@ type testModule struct { var testMod *testModule -type onRuleHandler func(*sprobe.Event, *rules.Rule) -type onProbeEventHandler func(*sprobe.Event) +type onRuleHandler func(*model.Event, *rules.Rule) +type onProbeEventHandler func(*model.Event) type onCustomSendEventHandler func(*rules.Rule, *events.CustomEvent) type onDiscarderPushedHandler func(event eval.Event, field eval.Field, eventType eval.EventType) bool +type onProcessEventSendDataHandler func([]byte) type eventHandlers struct { sync.RWMutex - onRuleMatch onRuleHandler - onProbeEvent onProbeEventHandler - onCustomSendEvent onCustomSendEventHandler - onDiscarderPushed onDiscarderPushedHandler + onRuleMatch onRuleHandler + onProbeEvent onProbeEventHandler + onCustomSendEvent onCustomSendEventHandler + onDiscarderPushed onDiscarderPushedHandler + onProcessEventSendData onProcessEventSendDataHandler } //nolint:deadcode,unused @@ -324,16 +339,22 @@ func assertRights(tb testing.TB, actualMode, expectedMode uint16, msgAndArgs ... } //nolint:deadcode,unused -func assertNearTime(tb testing.TB, ns uint64) bool { +func assertNearTimeObject(tb testing.TB, eventTime time.Time) bool { tb.Helper() - now, event := time.Now(), time.Unix(0, int64(ns)) - if event.After(now) || event.Before(now.Add(-1*time.Hour)) { - tb.Errorf("expected time close to %s, got %s", now, event) + now := time.Now() + if eventTime.After(now) || eventTime.Before(now.Add(-1*time.Hour)) { + tb.Errorf("expected time close to %s, got %s", now, eventTime) return false } return true } +//nolint:deadcode,unused +func assertNearTime(tb testing.TB, ns uint64) bool { + tb.Helper() + return assertNearTimeObject(tb, time.Unix(0, int64(ns))) +} + //nolint:deadcode,unused func assertTriggeredRule(tb testing.TB, r *rules.Rule, id string) bool { tb.Helper() @@ -347,7 +368,7 @@ func assertReturnValue(tb testing.TB, retval, expected int64) bool { } //nolint:deadcode,unused -func assertFieldEqual(tb testing.TB, e *sprobe.Event, field string, value interface{}, msgAndArgs ...interface{}) bool { +func assertFieldEqual(tb testing.TB, e *model.Event, field string, value interface{}, msgAndArgs ...interface{}) bool { tb.Helper() fieldValue, err := e.GetFieldValue(field) if err != nil { @@ -358,7 +379,7 @@ func assertFieldEqual(tb testing.TB, e *sprobe.Event, field string, value interf } //nolint:deadcode,unused -func assertFieldNotEqual(tb testing.TB, e *sprobe.Event, field string, value interface{}, msgAndArgs ...interface{}) bool { +func assertFieldNotEqual(tb testing.TB, e *model.Event, field string, value interface{}, msgAndArgs ...interface{}) bool { tb.Helper() fieldValue, err := e.GetFieldValue(field) if err != nil { @@ -369,7 +390,7 @@ func assertFieldNotEqual(tb testing.TB, e *sprobe.Event, field string, value int } //nolint:deadcode,unused -func assertFieldNotEmpty(tb testing.TB, e *sprobe.Event, field string, msgAndArgs ...interface{}) bool { +func assertFieldNotEmpty(tb testing.TB, e *model.Event, field string, msgAndArgs ...interface{}) bool { tb.Helper() fieldValue, err := e.GetFieldValue(field) if err != nil { @@ -380,7 +401,7 @@ func assertFieldNotEmpty(tb testing.TB, e *sprobe.Event, field string, msgAndArg } //nolint:deadcode,unused -func assertFieldContains(tb testing.TB, e *sprobe.Event, field string, value interface{}, msgAndArgs ...interface{}) bool { +func assertFieldContains(tb testing.TB, e *model.Event, field string, value interface{}, msgAndArgs ...interface{}) bool { tb.Helper() fieldValue, err := e.GetFieldValue(field) if err != nil { @@ -391,7 +412,7 @@ func assertFieldContains(tb testing.TB, e *sprobe.Event, field string, value int } //nolint:deadcode,unused -func assertFieldIsOneOf(tb testing.TB, e *sprobe.Event, field string, possibleValues interface{}, msgAndArgs ...interface{}) bool { +func assertFieldIsOneOf(tb testing.TB, e *model.Event, field string, possibleValues interface{}, msgAndArgs ...interface{}) bool { tb.Helper() fieldValue, err := e.GetFieldValue(field) if err != nil { @@ -402,7 +423,7 @@ func assertFieldIsOneOf(tb testing.TB, e *sprobe.Event, field string, possibleVa } //nolint:deadcode,unused -func assertFieldStringArrayIndexedOneOf(tb *testing.T, e *sprobe.Event, field string, index int, values []string, msgAndArgs ...interface{}) bool { +func assertFieldStringArrayIndexedOneOf(tb *testing.T, e *model.Event, field string, index int, values []string, msgAndArgs ...interface{}) bool { tb.Helper() fieldValue, err := e.GetFieldValue(field) if err != nil { @@ -419,16 +440,25 @@ func assertFieldStringArrayIndexedOneOf(tb *testing.T, e *sprobe.Event, field st } //nolint:deadcode,unused -func validateProcessContextLineage(tb testing.TB, event *sprobe.Event) bool { +func validateProcessContextLineage(tb testing.TB, event *model.Event, probe *sprobe.Probe) { + eventJSON, err := sprobe.MarshalEvent(event, probe) + if err != nil { + tb.Errorf("failed to marshal event: %v", err) + return + } + var data interface{} - if err := json.Unmarshal([]byte(event.String()), &data); err != nil { + if err := json.Unmarshal(eventJSON, &data); err != nil { tb.Error(err) + tb.Error(eventJSON) + return } json, err := jsonpath.JsonPathLookup(data, "$.process.ancestors") if err != nil { tb.Errorf("should have a process context with ancestors, got %+v (%s)", json, spew.Sdump(data)) - return false + tb.Error(eventJSON) + return } var prevPID, prevPPID float64 @@ -437,19 +467,22 @@ func validateProcessContextLineage(tb testing.TB, event *sprobe.Event) bool { pce, ok := entry.(map[string]interface{}) if !ok { tb.Errorf("invalid process cache entry, %+v", entry) - return false + tb.Error(eventJSON) + return } pid, ok := pce["pid"].(float64) if !ok || pid == 0 { tb.Errorf("invalid pid, %+v", pce) - return false + tb.Error(eventJSON) + return } // check lineage, exec should have the exact same pid, fork pid/ppid relationship if prevPID != 0 && pid != prevPID && pid != prevPPID { tb.Errorf("invalid process tree, parent/child broken (%f -> %f/%f), %+v", pid, prevPID, prevPPID, json) - return false + tb.Error(eventJSON) + return } prevPID = pid @@ -457,7 +490,8 @@ func validateProcessContextLineage(tb testing.TB, event *sprobe.Event) bool { ppid, ok := pce["ppid"].(float64) if !ok { tb.Errorf("invalid pid, %+v", pce) - return false + tb.Error(eventJSON) + return } prevPPID = ppid @@ -466,13 +500,12 @@ func validateProcessContextLineage(tb testing.TB, event *sprobe.Event) bool { if prevPID != 1 { tb.Errorf("invalid process tree, last ancestor should be pid 1, %+v", json) + tb.Error(eventJSON) } - - return true } //nolint:deadcode,unused -func validateProcessContextSECL(tb testing.TB, event *sprobe.Event) bool { +func validateProcessContextSECL(tb testing.TB, event *model.Event, probe *sprobe.Probe) { // Process file name values cannot be blank nameFields := []string{ "process.file.name", @@ -494,10 +527,19 @@ func validateProcessContextSECL(tb testing.TB, event *sprobe.Event) bool { pathFieldValid, _ = checkProcessContextFieldsForBlankValues(tb, event, pathFields) } - return nameFieldValid && pathFieldValid + valid := nameFieldValid && pathFieldValid + + if !valid { + eventJSON, err := sprobe.MarshalEvent(event, probe) + if err != nil { + tb.Errorf("failed to marshal event: %v", err) + return + } + tb.Error(eventJSON) + } } -func checkProcessContextFieldsForBlankValues(tb testing.TB, event *sprobe.Event, fieldNamesToCheck []string) (bool, bool) { +func checkProcessContextFieldsForBlankValues(tb testing.TB, event *model.Event, fieldNamesToCheck []string) (bool, bool) { validField := true hasPath := true @@ -538,31 +580,26 @@ func checkProcessContextFieldsForBlankValues(tb testing.TB, event *sprobe.Event, } //nolint:deadcode,unused -func validateProcessContext(tb testing.TB, event *sprobe.Event) { +func validateProcessContext(tb testing.TB, event *model.Event, probe *sprobe.Probe) { if event.ProcessContext.IsKworker { return } - if !validateProcessContextLineage(tb, event) { - tb.Error(event.String()) - } - - if !validateProcessContextSECL(tb, event) { - tb.Error(event.String()) - } + validateProcessContextLineage(tb, event, probe) + validateProcessContextSECL(tb, event, probe) } //nolint:deadcode,unused -func validateEvent(tb testing.TB, validate func(event *sprobe.Event, rule *rules.Rule)) func(event *sprobe.Event, rule *rules.Rule) { - return func(event *sprobe.Event, rule *rules.Rule) { - validateProcessContext(tb, event) +func validateEvent(tb testing.TB, validate func(event *model.Event, rule *rules.Rule), probe *sprobe.Probe) func(event *model.Event, rule *rules.Rule) { + return func(event *model.Event, rule *rules.Rule) { + validateProcessContext(tb, event, probe) validate(event, rule) } } //nolint:deadcode,unused -func validateExecEvent(tb *testing.T, kind wrapperType, validate func(event *sprobe.Event, rule *rules.Rule)) func(event *sprobe.Event, rule *rules.Rule) { - return func(event *sprobe.Event, rule *rules.Rule) { +func (tm *testModule) validateExecEvent(tb *testing.T, kind wrapperType, validate func(event *model.Event, rule *rules.Rule)) func(event *model.Event, rule *rules.Rule) { + return func(event *model.Event, rule *rules.Rule) { validate(event, rule) if kind == dockerWrapperType { @@ -570,9 +607,7 @@ func validateExecEvent(tb *testing.T, kind wrapperType, validate func(event *spr assertFieldNotEmpty(tb, event, "process.container.id", "process container id not found") } - if !validateExecSchema(tb, event) { - tb.Error(event.String()) - } + tm.validateExecSchema(tb, event) } } @@ -652,6 +687,11 @@ func genTestConfig(dir string, opts testOpts) (*config.Config, error) { mapDentryResolutionEnabled = false } + runtimeSecurityEnabled := true + if opts.disableRuntimeSecurity { + runtimeSecurityEnabled = false + } + buffer := new(bytes.Buffer) if err := tmpl.Execute(buffer, map[string]interface{}{ "TestPoliciesDir": dir, @@ -670,6 +710,9 @@ func genTestConfig(dir string, opts testOpts) (*config.Config, error) { "LogPatterns": logPatterns, "LogTags": logTags, "EnvsWithValue": opts.envsWithValue, + "RuntimeSecurityEnabled": runtimeSecurityEnabled, + "EventMonitoringProcessEnabled": opts.enableEventMonitoringProcess, + "EventMonitoringNetworkEnabled": opts.enableEventMonitoringNetwork, }); err != nil { return nil, err } @@ -685,6 +728,11 @@ func genTestConfig(dir string, opts testOpts) (*config.Config, error) { return nil, err } + err = sysconfig.SetupOptionalDatadogConfig() + if err != nil { + return nil, fmt.Errorf("unable to set up datadog.yaml configuration: %s", err) + } + agentConfig, err := sysconfig.New(sysprobeConfig.Name()) if err != nil { return nil, fmt.Errorf("failed to load config: %w", err) @@ -787,7 +835,7 @@ func newTestModule(t testing.TB, macroDefs []*rules.MacroDefinition, ruleDefs [] eventHandlers: eventHandlers{}, } - mod, err := module.NewModule(config, module.Opts{StatsdClient: statsdClient, EventSender: testMod}) + mod, err := module.NewModule(config, module.Opts{StatsdClient: statsdClient, EventSender: testMod, DontDiscardRuntime: true}) if err != nil { return nil, fmt.Errorf("failed to create module: %w", err) } @@ -831,7 +879,7 @@ func newTestModule(t testing.TB, macroDefs []*rules.MacroDefinition, ruleDefs [] return testMod, nil } -func (tm *testModule) HandleEvent(event *sprobe.Event) { +func (tm *testModule) HandleEvent(event *model.Event) { tm.eventHandlers.RLock() defer tm.eventHandlers.RUnlock() @@ -847,7 +895,7 @@ func (tm *testModule) SendEvent(rule *rules.Rule, event module.Event, extTagsCb defer tm.eventHandlers.RUnlock() switch ev := event.(type) { - case *sprobe.Event: + case *model.Event: case *events.CustomEvent: if tm.eventHandlers.onCustomSendEvent != nil { tm.eventHandlers.onCustomSendEvent(rule, ev) @@ -855,6 +903,15 @@ func (tm *testModule) SendEvent(rule *rules.Rule, event module.Event, extTagsCb } } +func (tm *testModule) SendProcessEventData(data []byte) { + tm.eventHandlers.RLock() + defer tm.eventHandlers.RUnlock() + + if tm.eventHandlers.onProcessEventSendData != nil { + tm.eventHandlers.onProcessEventSendData(data) + } +} + func (tm *testModule) Run(t *testing.T, name string, fnc func(t *testing.T, kind wrapperType, cmd func(bin string, args []string, envs []string) *exec.Cmd)) { tm.cmdWrapper.Run(t, name, fnc) } @@ -885,7 +942,7 @@ func (tm *testModule) RuleMatch(rule *rules.Rule, event eval.Event) { tm.eventHandlers.RUnlock() if callback != nil { - callback(event.(*sprobe.Event), rule) + callback(event.(*model.Event), rule) } } @@ -898,7 +955,7 @@ func (tm *testModule) RegisterDiscarderPushedHandler(cb onDiscarderPushedHandler tm.eventHandlers.Unlock() } -func (tm *testModule) NotifyDiscarderPushedCallback(eventType string, event *sprobe.Event, field string) { +func (tm *testModule) NotifyDiscarderPushedCallback(eventType string, event *model.Event, field string) { tm.eventHandlers.RLock() callback := tm.eventHandlers.onDiscarderPushed tm.eventHandlers.RUnlock() @@ -955,6 +1012,21 @@ func (tm *testModule) GetEventDiscarder(tb testing.TB, action func() error, cb o } } +//nolint:deadcode,unused +func (tm *testModule) marshalEvent(ev *model.Event) (string, error) { + b, err := sprobe.MarshalEvent(ev, tm.probe) + return string(b), err +} + +//nolint:deadcode,unused +func (tm *testModule) debugEvent(ev *model.Event) string { + b, err := tm.marshalEvent(ev) + if err != nil { + return err.Error() + } + return string(b) +} + // GetStatusMetrics returns a string representation of the perf buffer monitor metrics func GetStatusMetrics(probe *sprobe.Probe) string { if probe == nil { @@ -1024,7 +1096,7 @@ func (err ErrSkipTest) Error() string { func (tm *testModule) WaitSignal(tb testing.TB, action func() error, cb onRuleHandler) { tb.Helper() - if err := tm.GetSignal(tb, action, validateEvent(tb, cb)); err != nil { + if err := tm.GetSignal(tb, action, validateEvent(tb, cb, tm.probe)); err != nil { if _, ok := err.(ErrSkipTest); ok { tb.Skip(err) } else { @@ -1042,7 +1114,7 @@ func (tm *testModule) GetSignal(tb testing.TB, action func() error, cb onRuleHan message := make(chan ActionMessage, 1) failNow := make(chan bool, 1) - tm.RegisterRuleEventHandler(func(e *sprobe.Event, r *rules.Rule) { + tm.RegisterRuleEventHandler(func(e *model.Event, r *rules.Rule) { tb.Helper() select { case <-ctx.Done(): @@ -1145,13 +1217,19 @@ func (tm *testModule) RegisterCustomSendEventHandler(cb onCustomSendEventHandler tm.eventHandlers.Unlock() } -func (tm *testModule) GetProbeEvent(action func() error, cb func(event *sprobe.Event) bool, timeout time.Duration, eventTypes ...model.EventType) error { +func (tm *testModule) RegisterProcessEventSendDataHandler(cb onProcessEventSendDataHandler) { + tm.eventHandlers.Lock() + tm.eventHandlers.onProcessEventSendData = cb + tm.eventHandlers.Unlock() +} + +func (tm *testModule) GetProbeEvent(action func() error, cb func(event *model.Event) bool, timeout time.Duration, eventTypes ...model.EventType) error { ctx, cancel := context.WithCancel(context.Background()) defer cancel() message := make(chan ActionMessage, 1) - tm.RegisterProbeEventHandler(func(event *sprobe.Event) { + tm.RegisterProbeEventHandler(func(event *model.Event) { if len(eventTypes) > 0 { match := false for _, eventType := range eventTypes { @@ -1201,6 +1279,72 @@ func (tm *testModule) GetProbeEvent(action func() error, cb func(event *sprobe.E } } +func (tm *testModule) GetProcessEvent(action func() error, cb func(event *pmodel.ProcessEvent) bool, timeout time.Duration, executablePath string, eventTypes ...pmodel.EventType) error { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + message := make(chan ActionMessage, 1) + var event pmodel.ProcessEvent + + tm.RegisterProcessEventSendDataHandler(func(data []byte) { + if _, err := event.UnmarshalMsg(data); err != nil { + tm.t.Logf("failed to unmarshall process event: %v\n", err) + return + } + + if len(eventTypes) > 0 { + match := false + for _, eventType := range eventTypes { + if event.EventType == eventType { + match = true + break + } + } + if !match { + return + } + } + + if executablePath != "" && event.Exe != executablePath { + return + } + + select { + case <-ctx.Done(): + return + case msg := <-message: + switch msg { + case Continue: + if cb(&event) { + cancel() + } else { + message <- Continue + } + case Skip: + cancel() + } + } + }) + defer tm.RegisterProcessEventSendDataHandler(nil) + + if action == nil { + message <- Continue + } else { + if err := action(); err != nil { + message <- Skip + return err + } + message <- Continue + } + + select { + case <-time.After(timeout): + return NewTimeoutError(tm.probe) + case <-ctx.Done(): + return nil + } +} + func (tm *testModule) Path(filename ...string) (string, unsafe.Pointer, error) { return tm.st.Path(filename...) } @@ -1322,7 +1466,9 @@ func (tm *testModule) validateAbnormalPaths() { } func (tm *testModule) Close() { - tm.module.SendStats() + if tm.config.RuntimeEnabled { + tm.module.SendStats() + } if !tm.opts.disableAbnormalPathCheck { tm.validateAbnormalPaths() @@ -1485,7 +1631,7 @@ func ifSyscallSupported(syscall string, test func(t *testing.T, syscallNB uintpt // //nolint:deadcode,unused func waitForProbeEvent(test *testModule, action func() error, key string, value interface{}, eventType model.EventType) error { - return test.GetProbeEvent(action, func(event *sprobe.Event) bool { + return test.GetProbeEvent(action, func(event *model.Event) bool { if v, _ := event.GetFieldValue(key); v == value { return true } @@ -1509,7 +1655,6 @@ func TestMain(m *testing.M) { } func init() { - os.Setenv("RUNTIME_SECURITY_TESTSUITE", "true") flag.StringVar(&testEnvironment, "env", HostEnvironment, "environment used to run the test suite: ex: host, docker") flag.StringVar(&logLevelStr, "loglevel", seelog.WarnStr, "log level") flag.Var(&logPatterns, "logpattern", "List of log pattern") diff --git a/pkg/security/tests/mount_test.go b/pkg/security/tests/mount_test.go index b58735a0ae382..4581ca1cf6a9c 100644 --- a/pkg/security/tests/mount_test.go +++ b/pkg/security/tests/mount_test.go @@ -21,7 +21,6 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" "github.com/DataDog/datadog-agent/pkg/security/utils" @@ -67,7 +66,7 @@ func TestMount(t *testing.T) { return fmt.Errorf("could not create bind mount: %w", err) } return nil - }, func(event *sprobe.Event) bool { + }, func(event *model.Event) bool { mntID = event.Mount.MountID if !assert.Equal(t, "mount", event.GetType(), "wrong event type") { @@ -102,7 +101,7 @@ func TestMount(t *testing.T) { test.WaitSignal(t, func() error { return os.Chmod(file, 0707) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "chmod", event.GetType(), "wrong event type") assert.Equal(t, file, event.Chmod.File.PathnameStr, "wrong path") }) @@ -121,7 +120,7 @@ func TestMount(t *testing.T) { return fmt.Errorf("could not unmount test-mount: %w", err) } return nil - }, func(event *sprobe.Event) bool { + }, func(event *model.Event) bool { if !assert.Equal(t, "umount", event.GetType(), "wrong event type") { return true } @@ -141,7 +140,7 @@ func TestMount(t *testing.T) { t.Run("release-mount", func(t *testing.T) { test.WaitSignal(t, func() error { return syscall.Fchownat(int(releaseFile.Fd()), "", 123, 123, unix.AT_EMPTY_PATH) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "chown", event.GetType(), "wrong event type") assertTriggeredRule(t, rule, "test_rule_pending") }) @@ -225,7 +224,7 @@ func TestMountPropagated(t *testing.T) { t.Run("bind-mounted-chmod", func(t *testing.T) { test.WaitSignal(t, func() error { return os.Chmod(file, 0700) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { t.Log(event.Open.File.PathnameStr) assert.Equal(t, "chmod", event.GetType(), "wrong event type") assert.Equal(t, file, event.Chmod.File.PathnameStr, "wrong path") @@ -434,14 +433,13 @@ func TestMountEvent(t *testing.T) { return err } return tmpfsMount.unmount(syscall.MNT_FORCE) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_mount_tmpfs") assertFieldEqual(t, event, "mount.mountpoint.path", tmpfsMountPointPath) assertFieldEqual(t, event, "mount.fs_type", "tmpfs") assertFieldEqual(t, event, "process.file.path", executable) - if !validateMountSchema(t, event) { - t.Error(event.String()) - } + + test.validateMountSchema(t, event) }) }) @@ -457,15 +455,14 @@ func TestMountEvent(t *testing.T) { return err } return bindMount.unmount(syscall.MNT_FORCE) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_mount_bind") assertFieldEqual(t, event, "mount.mountpoint.path", bindMountPointPath) assertFieldEqual(t, event, "mount.source.path", bindMountSourcePath) assertFieldEqual(t, event, "mount.fs_type", testDrive.FSType()) assertFieldEqual(t, event, "process.file.path", executable) - if !validateMountSchema(t, event) { - t.Error(event.String()) - } + + test.validateMountSchema(t, event) }) }) @@ -485,15 +482,14 @@ func TestMountEvent(t *testing.T) { return err } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_mount_in_container_root") assertFieldEqual(t, event, "mount.mountpoint.path", "/host_root") assertFieldEqual(t, event, "mount.source.path", "/") assertFieldNotEqual(t, event, "mount.fs_type", "overlay") assertFieldNotEmpty(t, event, "container.id", "container id shouldn't be empty") - if !validateMountSchema(t, event) { - t.Error(event.String()) - } + + test.validateMountSchema(t, event) }) }) @@ -515,8 +511,8 @@ func TestMountEvent(t *testing.T) { return err } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { - t.Errorf("shouldn't get an event: event %s matched rule %s", event, rule.Expression) + }, func(event *model.Event, rule *rules.Rule) { + t.Errorf("shouldn't get an event: event %s matched rule %s", test.debugEvent(event), rule.Expression) }) if err == nil { t.Error("shouldn't get an event") diff --git a/pkg/security/tests/mprotect_test.go b/pkg/security/tests/mprotect_test.go index 8b3ba226edbff..3c3edea595fb2 100644 --- a/pkg/security/tests/mprotect_test.go +++ b/pkg/security/tests/mprotect_test.go @@ -16,7 +16,6 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -47,7 +46,7 @@ func TestMProtectEvent(t *testing.T) { return fmt.Errorf("couldn't mprotect segment: %w", err) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "mprotect", event.GetType(), "wrong event type") assert.Equal(t, unix.PROT_READ|unix.PROT_WRITE, event.MProtect.VMProtection&(unix.PROT_READ|unix.PROT_WRITE), fmt.Sprintf("wrong initial protection: %s", model.Protection(event.MProtect.VMProtection))) assert.Equal(t, unix.PROT_READ|unix.PROT_WRITE|unix.PROT_EXEC, event.MProtect.ReqProtection&(unix.PROT_READ|unix.PROT_WRITE|unix.PROT_EXEC), fmt.Sprintf("wrong requested protection: %s", model.Protection(event.MProtect.ReqProtection))) @@ -59,9 +58,7 @@ func TestMProtectEvent(t *testing.T) { } assertFieldEqual(t, event, "process.file.path", executable) - if !validateMProtectSchema(t, event) { - t.Error(event.String()) - } + test.validateMProtectSchema(t, event) }) }) } diff --git a/pkg/security/tests/network_device_test.go b/pkg/security/tests/network_device_test.go index ac55f2db93972..531ea5d4f016d 100644 --- a/pkg/security/tests/network_device_test.go +++ b/pkg/security/tests/network_device_test.go @@ -20,7 +20,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" "github.com/DataDog/datadog-agent/pkg/security/utils" @@ -78,7 +77,7 @@ func TestNetDevice(t *testing.T) { testNetns = uint32(stat.Ino) return nil - }, func(event *sprobe.Event) bool { + }, func(event *model.Event) bool { if !assert.Equal(t, "net_device", event.GetType(), "wrong event type") { return true } @@ -95,7 +94,7 @@ func TestNetDevice(t *testing.T) { err = test.GetProbeEvent(func() error { cmd := exec.Command(executable, "link", "add", "host-eth0", "type", "veth", "peer", "name", "ns-eth0", "netns", "test_netns") return cmd.Run() - }, func(event *sprobe.Event) bool { + }, func(event *model.Event) bool { if !assert.Equal(t, "veth_pair", event.GetType(), "wrong event type") { return true } @@ -119,7 +118,7 @@ func TestNetDevice(t *testing.T) { cmd = exec.Command(executable, "link", "set", "ns-eth1", "netns", "test_netns") return cmd.Run() - }, func(event *sprobe.Event) bool { + }, func(event *model.Event) bool { if !assert.Equal(t, "veth_pair", event.GetType(), "wrong event type") { return true } diff --git a/pkg/security/tests/network_test.go b/pkg/security/tests/network_test.go index df94a4ce3c1d7..b9360b358ef79 100644 --- a/pkg/security/tests/network_test.go +++ b/pkg/security/tests/network_test.go @@ -14,12 +14,12 @@ import ( "strings" "testing" - "github.com/docker/libnetwork/resolvconf" + "github.com/docker/docker/libnetwork/resolvconf" "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -36,7 +36,7 @@ func TestNetworkCIDR(t *testing.T) { } // write the rules using the local resolv.conf file - resolvFile, err := resolvconf.Get() + resolvFile, err := resolvconf.GetSpecific("/etc/resolv.conf") if err != nil { t.Fatal(err) } @@ -60,13 +60,11 @@ func TestNetworkCIDR(t *testing.T) { return err } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "dns", event.GetType(), "wrong event type") assert.Equal(t, "google.com", event.DNS.Name, "wrong domain name") - if !validateDNSSchema(t, event) { - t.Error(event.String()) - } + test.validateDNSSchema(t, event) }) }) } diff --git a/pkg/security/tests/open_test.go b/pkg/security/tests/open_test.go index 928a53a16d920..65b77769ff90f 100644 --- a/pkg/security/tests/open_test.go +++ b/pkg/security/tests/open_test.go @@ -25,7 +25,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -55,16 +55,14 @@ func TestOpen(t *testing.T) { return error(errno) } return syscall.Close(int(fd)) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assert.Equal(t, syscall.O_CREAT, int(event.Open.Flags), "wrong flags") assertRights(t, uint16(event.Open.Mode), 0755) assert.Equal(t, getInode(t, testFile), event.Open.File.Inode, "wrong inode") assert.Equal(t, event.Async, false) - if !validateOpenSchema(t, event) { - t.Error(event.String()) - } + test.validateOpenSchema(t, event) }) })) @@ -77,7 +75,7 @@ func TestOpen(t *testing.T) { return error(errno) } return syscall.Close(int(fd)) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assert.Equal(t, syscall.O_CREAT, int(event.Open.Flags), "wrong flags") assertRights(t, uint16(event.Open.Mode), 0711) @@ -103,7 +101,7 @@ func TestOpen(t *testing.T) { return error(errno) } return syscall.Close(int(fd)) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assert.Equal(t, syscall.O_CREAT, int(event.Open.Flags), "wrong flags") assertRights(t, uint16(event.Open.Mode), 0711) @@ -121,7 +119,7 @@ func TestOpen(t *testing.T) { return error(errno) } return syscall.Close(int(fd)) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assert.Equal(t, syscall.O_CREAT|syscall.O_WRONLY|syscall.O_TRUNC, int(event.Open.Flags), "wrong flags") assertRights(t, uint16(event.Open.Mode), 0711) @@ -145,7 +143,7 @@ func TestOpen(t *testing.T) { } return f.Close() - }, func(event *sprobe.Event, r *rules.Rule) {}) + }, func(event *model.Event, r *rules.Rule) {}) test.WaitSignal(t, func() error { // truncate @@ -154,7 +152,7 @@ func TestOpen(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assert.Equal(t, syscall.O_CREAT|syscall.O_WRONLY|syscall.O_TRUNC, int(event.Open.Flags), "wrong flags") assert.Equal(t, getInode(t, testFile), event.Open.File.Inode, "wrong inode") @@ -172,7 +170,7 @@ func TestOpen(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") }) @@ -198,7 +196,7 @@ func TestOpen(t *testing.T) { return fmt.Errorf("OpenByHandleAt: %w", err) } return unix.Close(fdInt) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assert.Equal(t, syscall.O_CREAT, int(event.Open.Flags), "wrong flags") assert.Equal(t, getInode(t, testFile), event.Open.File.Inode, "wrong inode") @@ -215,7 +213,7 @@ func TestOpen(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") }) if err != nil { @@ -258,7 +256,7 @@ func TestOpen(t *testing.T) { } return unix.Close(fd) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") // O_LARGEFILE is added by io_uring during __io_openat_prep assert.Equal(t, syscall.O_CREAT, int(event.Open.Flags&0xfff), "wrong flags") @@ -298,7 +296,7 @@ func TestOpen(t *testing.T) { } return unix.Close(fd) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") // O_LARGEFILE is added by io_uring during __io_openat_prep assert.Equal(t, syscall.O_CREAT, int(event.Open.Flags&0xfff), "wrong flags") @@ -347,7 +345,7 @@ func TestOpenMetadata(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assertRights(t, event.Open.File.Mode, expectedMode) assert.Equal(t, getInode(t, testFile), event.Open.File.Inode, "wrong inode") diff --git a/pkg/security/tests/overlayfs_test.go b/pkg/security/tests/overlayfs_test.go index 7046a20a6851e..3158e031fa430 100644 --- a/pkg/security/tests/overlayfs_test.go +++ b/pkg/security/tests/overlayfs_test.go @@ -21,7 +21,7 @@ import ( "golang.org/x/sys/unix" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -181,7 +181,7 @@ func TestOverlayFS(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("open.file.in_upper_layer") @@ -195,7 +195,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -217,7 +217,7 @@ func TestOverlayFS(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("open.file.in_upper_layer") @@ -231,7 +231,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -253,7 +253,7 @@ func TestOverlayFS(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("open.file.in_upper_layer") @@ -267,7 +267,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -290,7 +290,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Rename(oldFile, newFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { success := true if value, _ := event.GetFieldValue("rename.file.path"); value.(string) != oldFile { @@ -315,7 +315,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(newFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -341,7 +341,7 @@ func TestOverlayFS(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_parent") }) @@ -360,7 +360,7 @@ func TestOverlayFS(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_renamed_parent") }) }) @@ -375,7 +375,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testDir) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("rmdir.file.in_upper_layer") assert.Equal(t, inode, event.Rmdir.File.Inode, "wrong rmdir inode") @@ -393,7 +393,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Chmod(testFile, 0777) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("chmod.file.in_upper_layer") @@ -407,7 +407,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -425,7 +425,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return syscall.Mkdir(testFile, 0777) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("mkdir.file.in_upper_layer") @@ -439,7 +439,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("rmdir.file.in_upper_layer") assert.Equal(t, inode, event.Rmdir.File.Inode, "wrong rmdir inode") @@ -457,7 +457,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Chtimes(testFile, time.Now(), time.Now()) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("utimes.file.in_upper_layer") @@ -471,7 +471,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -489,7 +489,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Chown(testFile, os.Getuid(), os.Getgid()) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("chown.file.in_upper_layer") @@ -503,7 +503,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -532,7 +532,7 @@ func TestOverlayFS(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("setxattr.file.in_upper_layer") @@ -546,7 +546,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -564,7 +564,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Truncate(testFile, 0) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testFile) inUpperLayer, _ := event.GetFieldValue("open.file.in_upper_layer") @@ -578,7 +578,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -601,7 +601,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Link(testSrc, testTarget) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inode = getInode(t, testSrc) success := assert.Equal(t, inode, event.Link.Source.Inode, "wrong link source inode") @@ -619,7 +619,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testSrc) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") success := assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") @@ -632,7 +632,7 @@ func TestOverlayFS(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testTarget) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { inUpperLayer, _ := event.GetFieldValue("unlink.file.in_upper_layer") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong unlink inode") diff --git a/pkg/security/tests/probe_monitor_test.go b/pkg/security/tests/probe_monitor_test.go index 31a73d2e42d0d..e67469a08c45a 100644 --- a/pkg/security/tests/probe_monitor_test.go +++ b/pkg/security/tests/probe_monitor_test.go @@ -21,7 +21,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/security/events" "github.com/DataDog/datadog-agent/pkg/security/metrics" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -121,7 +120,7 @@ func truncatedParents(t *testing.T, opts testOpts) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { // check the length of the filepath that triggered the custom event filepath, err := event.GetFieldValue("open.file.path") if err == nil { diff --git a/pkg/security/tests/process_test.go b/pkg/security/tests/process_test.go index ba93cf544901b..a35b88db64f1b 100644 --- a/pkg/security/tests/process_test.go +++ b/pkg/security/tests/process_test.go @@ -35,7 +35,6 @@ import ( "github.com/syndtr/gocapability/capability" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/secl/compiler/eval" "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" @@ -64,7 +63,7 @@ func TestProcess(t *testing.T) { return err } return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule") }) } @@ -188,8 +187,8 @@ func TestProcessContext(t *testing.T) { os.Remove(testFile) return nil - }, func(event *sprobe.Event, rule *rules.Rule) { - t.Errorf("shouldn't get an event: got event: %s", event) + }, func(event *model.Event, rule *rules.Rule) { + t.Errorf("shouldn't get an event: got event: %s", test.debugEvent(event)) }) if err == nil { t.Fatal("shouldn't get an event") @@ -209,7 +208,7 @@ func TestProcessContext(t *testing.T) { os.Remove(testFile) return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_exec_time_2") }) }) @@ -232,7 +231,7 @@ func TestProcessContext(t *testing.T) { } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertFieldEqual(t, event, "process.file.path", executable) entry, _ := event.ResolveProcessCacheEntry() @@ -249,7 +248,7 @@ func TestProcessContext(t *testing.T) { // we need to ignore the error because "--password" is not a valid option for ls _ = cmd.Run() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { argv0, err := event.GetFieldValue("exec.argv0") if err != nil { t.Errorf("not able to get argv0") @@ -295,7 +294,10 @@ func TestProcessContext(t *testing.T) { } // trigger serialization to test scrubber - str := event.String() + str, err := test.marshalEvent(event) + if err != nil { + t.Error(err) + } if !strings.Contains(str, "password") || !strings.Contains(str, "custom") { t.Error("args not serialized") @@ -315,7 +317,7 @@ func TestProcessContext(t *testing.T) { cmd := cmdFunc("ls", args, envs) _ = cmd.Run() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_envp", rule.ID, "wrong rule triggered") })) }) @@ -326,7 +328,7 @@ func TestProcessContext(t *testing.T) { test.WaitSignal(t, func() error { cmd := exec.Command(lsExecutable, "-ll") return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_argv") })) }) @@ -337,7 +339,7 @@ func TestProcessContext(t *testing.T) { test.WaitSignal(t, func() error { cmd := exec.Command(lsExecutable, "-ls", "--escape") return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_args_flags") })) }) @@ -348,7 +350,7 @@ func TestProcessContext(t *testing.T) { test.WaitSignal(t, func() error { cmd := exec.Command(lsExecutable, "--block-size", "123") return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_args_options") })) }) @@ -369,7 +371,7 @@ func TestProcessContext(t *testing.T) { // we need to ignore the error because the string of "a" generates a "File name too long" error _ = cmd.Run() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { args, err := event.GetFieldValue("exec.args") if err != nil { t.Errorf("not able to get args") @@ -409,21 +411,21 @@ func TestProcessContext(t *testing.T) { args = append(args, eval.RandString(50)) } - test.WaitSignal(t, func() error { + test.GetSignal(t, func() error { cmd := cmdFunc("ls", args, envs) // we need to ignore the error because the string of "a" generates a "File name too long" error _ = cmd.Run() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { execArgs, err := event.GetFieldValue("exec.args") if err != nil { t.Errorf("not able to get args") } argv := strings.Split(execArgs.(string), " ") - assert.Equal(t, 132, len(argv), "incorrect number of args: %s", argv) + assert.Equal(t, 459, len(argv), "incorrect number of args: %s", argv) - for i := 0; i != 132; i++ { + for i := 0; i != 459; i++ { assert.Equal(t, args[i], argv[i], "expected arg not found") } @@ -435,7 +437,7 @@ func TestProcessContext(t *testing.T) { if !truncated.(bool) { t.Errorf("arg not truncated: %s", execArgs.(string)) } - })) + }) }) test.Run(t, "args-overflow-list-500", func(t *testing.T, kind wrapperType, cmdFunc func(cmd string, args []string, envs []string) *exec.Cmd) { @@ -450,21 +452,21 @@ func TestProcessContext(t *testing.T) { args = append(args, eval.RandString(500)) } - test.WaitSignal(t, func() error { + test.GetSignal(t, func() error { cmd := cmdFunc("ls", args, envs) // we need to ignore the error because the string of "a" generates a "File name too long" error _ = cmd.Run() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { execArgs, err := event.GetFieldValue("exec.args") if err != nil { t.Errorf("not able to get args") } argv := strings.Split(execArgs.(string), " ") - assert.Equal(t, 159, len(argv), "incorrect number of args: %s", argv) + assert.Equal(t, 474, len(argv), "incorrect number of args: %s", argv) - for i := 0; i != 159; i++ { + for i := 0; i != 474; i++ { expected := args[i] if len(expected) > model.MaxArgEnvSize { expected = args[i][:model.MaxArgEnvSize-4] + "..." // 4 is the size number of the string @@ -480,7 +482,7 @@ func TestProcessContext(t *testing.T) { if !truncated.(bool) { t.Errorf("arg not truncated: %s", execArgs.(string)) } - })) + }) }) test.Run(t, "envs-overflow-single", func(t *testing.T, kind wrapperType, cmdFunc func(cmd string, args []string, envs []string) *exec.Cmd) { @@ -506,7 +508,7 @@ func TestProcessContext(t *testing.T) { } cmd := cmdFunc(bin, args, envs) return cmd.Run() - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { execEnvp, err := event.GetFieldValue("exec.envp") if err != nil { t.Errorf("not able to get exec.envp") @@ -550,23 +552,23 @@ func TestProcessContext(t *testing.T) { args = []string{"-u", "PATH", "-u", "HOSTNAME", "-u", "HOME", "ls", "-al"} } - test.WaitSignal(t, func() error { + test.GetSignal(t, func() error { bin := "ls" if kind == dockerWrapperType { bin = "env" } cmd := cmdFunc(bin, args, envs) return cmd.Run() - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { execEnvp, err := event.GetFieldValue("exec.envp") if err != nil { t.Errorf("not able to get exec.envp") } envp := (execEnvp.([]string)) - assert.Equal(t, 57, len(envp), "incorrect number of envs: %s", envp) + assert.Equal(t, 736, len(envp), "incorrect number of envs: %s", envp) - for i := 0; i != 57; i++ { + for i := 0; i != 736; i++ { assert.Equal(t, envs[i], envp[i], "expected env not found") } @@ -578,7 +580,7 @@ func TestProcessContext(t *testing.T) { if !truncated.(bool) { t.Errorf("envs not truncated: %s", execEnvp.([]string)) } - })) + }) }) test.Run(t, "envs-overflow-list-500", func(t *testing.T, kind wrapperType, cmdFunc func(cmd string, args []string, envs []string) *exec.Cmd) { @@ -601,23 +603,23 @@ func TestProcessContext(t *testing.T) { args = []string{"-u", "PATH", "-u", "HOSTNAME", "-u", "HOME", "ls", "-al"} } - test.WaitSignal(t, func() error { + test.GetSignal(t, func() error { bin := "ls" if kind == dockerWrapperType { bin = "env" } cmd := cmdFunc(bin, args, envs) return cmd.Run() - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { execEnvp, err := event.GetFieldValue("exec.envp") if err != nil { t.Errorf("not able to get exec.envp") } envp := (execEnvp.([]string)) - assert.Equal(t, 68, len(envp), "incorrect number of envs: %s", envp) + assert.Equal(t, 895, len(envp), "incorrect number of envs: %s", envp) - for i := 0; i != 68; i++ { + for i := 0; i != 895; i++ { expected := envs[i] if len(expected) > model.MaxArgEnvSize { expected = envs[i][:model.MaxArgEnvSize-4] + "..." // 4 is the size number of the string @@ -633,7 +635,7 @@ func TestProcessContext(t *testing.T) { if !truncated.(bool) { t.Errorf("envs not truncated: %s", execEnvp.([]string)) } - })) + }) }) t.Run("tty", func(t *testing.T) { @@ -684,7 +686,7 @@ func TestProcessContext(t *testing.T) { } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertFieldEqual(t, event, "process.file.path", executable) if name, _ := event.GetFieldValue("process.tty_name"); !strings.HasPrefix(name.(string), "pts") { @@ -697,7 +699,10 @@ func TestProcessContext(t *testing.T) { t.Errorf("expected inode %d, got %d => %+v", entry.FileEvent.Inode, inode, event) } - str := event.String() + str, err := test.marshalEvent(event) + if err != nil { + t.Error(err) + } if !strings.Contains(str, "pts") { t.Error("tty not serialized") @@ -723,7 +728,7 @@ func TestProcessContext(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_ancestors") assert.Equal(t, "sh", event.ProcessContext.Ancestor.Comm) }) @@ -747,7 +752,7 @@ func TestProcessContext(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_parent") assert.Equal(t, "sh", event.ProcessContext.Parent.Comm) assert.Equal(t, "sh", event.ProcessContext.Ancestor.Comm) @@ -772,7 +777,7 @@ func TestProcessContext(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_pid1", rule.ID, "wrong rule triggered") }) }) @@ -796,7 +801,7 @@ func TestProcessContext(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_inode", rule.ID, "wrong rule triggered") service := event.GetProcessServiceTag() @@ -819,7 +824,7 @@ func TestProcessContext(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_ancestors_args", rule.ID, "wrong rule triggered") }) }) @@ -831,11 +836,15 @@ func TestProcessContext(t *testing.T) { cmd := cmdFunc(shell, args, envs) _ = cmd.Run() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_args_envs_dedup", rule.ID, "wrong rule triggered") var data interface{} - serialized := event.String() + serialized, err := test.marshalEvent(event) + if err != nil { + t.Error(err) + } + if err := json.Unmarshal([]byte(serialized), &data); err != nil { t.Error(err) } @@ -865,7 +874,7 @@ func TestProcessContext(t *testing.T) { cmd := exec.Command(lsExecutable, "glob") _ = cmd.Run() return nil - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_rule_ancestors_glob") })) }) @@ -879,7 +888,7 @@ func TestProcessContext(t *testing.T) { _, _ = cmd.CombinedOutput() return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_self_exec") })) }) @@ -900,7 +909,7 @@ func TestProcessContext(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, validateExecEvent(t, kind, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, kind, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_container", rule.ID, "wrong rule triggered") if kind == dockerWrapperType { @@ -925,7 +934,7 @@ func TestProcessContext(t *testing.T) { } f.Close() return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, ruleID, rule.ID, "wrong rule triggered") }) }) @@ -965,7 +974,7 @@ func TestProcessEnvsWithValue(t *testing.T) { cmd.Env = envp _ = cmd.Run() return nil - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_ldpreload_from_tmp_with_envs") assertFieldEqual(t, event, "exec.file.path", lsExec) assertFieldStringArrayIndexedOneOf(t, event, "exec.envs", 0, []string{"LD_PRELOAD=/tmp/dyn.so"}) @@ -996,7 +1005,7 @@ func TestProcessExecCTime(t *testing.T) { cmd := exec.Command(testFile, "/tmp/test") return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_exec_ctime", rule.ID, "wrong rule triggered") })) } @@ -1018,7 +1027,7 @@ func TestProcessPIDVariable(t *testing.T) { test.WaitSignal(t, func() error { cmd := exec.Command(executable, fmt.Sprintf("/proc/%d/maps", os.Getpid())) return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_var", rule.ID, "wrong rule triggered") }) if err != nil { @@ -1104,7 +1113,7 @@ func TestProcessMutableVariable(t *testing.T) { test.WaitSignal(t, func() error { filename1, _, err = test.Create("test-open") return err - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_set_mutable_vars", rule.ID, "wrong rule triggered") }) if err != nil { @@ -1115,7 +1124,7 @@ func TestProcessMutableVariable(t *testing.T) { test.WaitSignal(t, func() error { filename2, _, err = test.Create("test-open-2") return err - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_modify_mutable_vars", rule.ID, "wrong rule triggered") }) if err != nil { @@ -1126,7 +1135,7 @@ func TestProcessMutableVariable(t *testing.T) { test.WaitSignal(t, func() error { filename3, _, err = test.Create("test-open-3") return err - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_rule_test_mutable_vars", rule.ID, "wrong rule triggered") }) if err != nil { @@ -1158,7 +1167,7 @@ func TestProcessExec(t *testing.T) { test.WaitSignal(t, func() error { cmd := exec.Command("sh", "-c", executable+" /dev/null") return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertFieldEqual(t, event, "exec.file.path", executable) assertFieldIsOneOf(t, event, "process.parent.file.name", []string{"sh", "bash", "dash"}, "wrong process parent file name") assertFieldStringArrayIndexedOneOf(t, event, "process.ancestors.file.name", 0, []string{"sh", "bash", "dash"}) @@ -1170,7 +1179,7 @@ func TestProcessExec(t *testing.T) { args := []string{"exec-in-pthread", executable, "/dev/null"} cmd := exec.Command(syscallTester, args...) return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertFieldEqual(t, event, "exec.file.path", executable) assertFieldEqual(t, event, "process.parent.file.name", "syscall_tester", "wrong process parent file name") })) @@ -1216,7 +1225,7 @@ func TestProcessMetadata(t *testing.T) { test.WaitSignal(t, func() error { cmd := exec.Command(testFile) return cmd.Run() - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "exec", event.GetType(), "wrong event type") assertRights(t, event.Exec.FileEvent.Mode, fileMode) assertNearTime(t, event.Exec.FileEvent.MTime) @@ -1236,7 +1245,7 @@ func TestProcessMetadata(t *testing.T) { } _, err := syscall.ForkExec(testFile, []string{}, attr) return err - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "exec", event.GetType(), "wrong event type") assert.Equal(t, 1001, int(event.Exec.Credentials.UID), "wrong uid") assert.Equal(t, 1001, int(event.Exec.Credentials.EUID), "wrong euid") @@ -1267,7 +1276,7 @@ func TestProcessExecExit(t *testing.T) { err = test.GetProbeEvent(func() error { cmd := exec.Command(executable, "-t", "01010101", "/dev/null") return cmd.Run() - }, func(event *sprobe.Event) bool { + }, func(event *model.Event) bool { switch event.GetEventType() { case model.ExecEventType: if basename, err := event.GetFieldValue("exec.file.name"); err != nil || basename.(string) != "touch" { @@ -1278,14 +1287,9 @@ func TestProcessExecExit(t *testing.T) { return false } - validate := validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { - if !validateProcessContextLineage(t, event) { - t.Error(event.String()) - } - - if !validateProcessContextSECL(t, event) { - t.Error(event.String()) - } + validate := test.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { + validateProcessContextLineage(t, event, test.probe) + validateProcessContextSECL(t, event, test.probe) assertFieldEqual(t, event, "exec.file.name", "touch") assertFieldContains(t, event, "exec.args", "01010101") @@ -1376,7 +1380,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setuid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setuid", "1001", "0") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setuid") assert.Equal(t, uint32(1001), event.SetUID.UID, "wrong uid") }) @@ -1385,7 +1389,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setreuid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setreuid", "1002", "1003") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setreuid") assert.Equal(t, uint32(1002), event.SetUID.UID, "wrong uid") assert.Equal(t, uint32(1003), event.SetUID.EUID, "wrong euid") @@ -1395,7 +1399,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setresuid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setresuid", "1002", "1003") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setreuid") assert.Equal(t, uint32(1002), event.SetUID.UID, "wrong uid") assert.Equal(t, uint32(1003), event.SetUID.EUID, "wrong euid") @@ -1405,7 +1409,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setfsuid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setfsuid", "1004", "0") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setfsuid") assert.Equal(t, uint32(1004), event.SetUID.FSUID, "wrong fsuid") }) @@ -1414,7 +1418,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setgid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setgid", "1005", "0") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setgid") assert.Equal(t, uint32(1005), event.SetGID.GID, "wrong gid") }) @@ -1423,7 +1427,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setregid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setregid", "1006", "1007") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setregid") assert.Equal(t, uint32(1006), event.SetGID.GID, "wrong gid") assert.Equal(t, uint32(1007), event.SetGID.EGID, "wrong egid") @@ -1433,7 +1437,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setresgid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setresgid", "1006", "1007") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setregid") assert.Equal(t, uint32(1006), event.SetGID.GID, "wrong gid") assert.Equal(t, uint32(1007), event.SetGID.EGID, "wrong egid") @@ -1443,7 +1447,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { t.Run("setfsgid", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "process-credentials", "setfsgid", "1008", "0") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_setfsgid") assert.Equal(t, uint32(1008), event.SetGID.FSGID, "wrong gid") }) @@ -1464,7 +1468,7 @@ func TestProcessCredentialsUpdate(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, goSyscallTester, "-process-credentials-capset") - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_capset") // transform the collected kernel capabilities into a usable capability set @@ -1529,7 +1533,7 @@ func TestProcessIsThread(t *testing.T) { cmd := exec.Command(syscallTester, args...) _ = cmd.Run() return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_process_fork_is_thread") assert.Equal(t, unix.PROT_READ|unix.PROT_WRITE, event.MMap.Protection&(unix.PROT_READ|unix.PROT_WRITE), "wrong mmap protection flags") assert.Equal(t, "syscall_tester", event.ProcessContext.FileEvent.BasenameStr, "wrong process file basename") @@ -1545,7 +1549,7 @@ func TestProcessIsThread(t *testing.T) { cmd := exec.Command(syscallTester, args...) _ = cmd.Run() return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_process_exec_is_not_thread") assert.Equal(t, unix.PROT_READ|unix.PROT_WRITE, event.MMap.Protection&(unix.PROT_READ|unix.PROT_WRITE), "wrong mmap protection flags") assert.Equal(t, "syscall_tester", event.ProcessContext.FileEvent.BasenameStr, "wrong process file basename") @@ -1604,10 +1608,8 @@ func TestProcessExit(t *testing.T) { cmd := exec.Command(sleepExec, args...) cmd.Env = envp return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { - if !validateExitSchema(t, event) { - t.Error(event.String()) - } + }, func(event *model.Event, rule *rules.Rule) { + test.validateExitSchema(t, event) assertTriggeredRule(t, rule, "test_exit_ok") assertFieldEqual(t, event, "exit.file.path", sleepExec) assert.Equal(t, uint32(model.ExitExited), event.Exit.Cause, "wrong exit cause") @@ -1625,10 +1627,8 @@ func TestProcessExit(t *testing.T) { cmd.Env = envp _ = cmd.Run() return nil - }, func(event *sprobe.Event, rule *rules.Rule) { - if !validateExitSchema(t, event) { - t.Error(event.String()) - } + }, func(event *model.Event, rule *rules.Rule) { + test.validateExitSchema(t, event) assertTriggeredRule(t, rule, "test_exit_error") assertFieldEqual(t, event, "exit.file.path", sleepExec) assert.Equal(t, uint32(model.ExitExited), event.Exit.Cause, "wrong exit cause") @@ -1646,10 +1646,8 @@ func TestProcessExit(t *testing.T) { cmd.Env = envp _ = cmd.Run() return nil - }, func(event *sprobe.Event, rule *rules.Rule) { - if !validateExitSchema(t, event) { - t.Error(event.String()) - } + }, func(event *model.Event, rule *rules.Rule) { + test.validateExitSchema(t, event) assertTriggeredRule(t, rule, "test_exit_coredump") assertFieldEqual(t, event, "exit.file.path", sleepExec) assert.Equal(t, uint32(model.ExitCoreDumped), event.Exit.Cause, "wrong exit cause") @@ -1667,10 +1665,8 @@ func TestProcessExit(t *testing.T) { cmd.Env = envp _ = cmd.Run() return nil - }, func(event *sprobe.Event, rule *rules.Rule) { - if !validateExitSchema(t, event) { - t.Error(event.String()) - } + }, func(event *model.Event, rule *rules.Rule) { + test.validateExitSchema(t, event) assertTriggeredRule(t, rule, "test_exit_signal") assertFieldEqual(t, event, "exit.file.path", sleepExec) assert.Equal(t, uint32(model.ExitSignaled), event.Exit.Cause, "wrong exit cause") @@ -1687,10 +1683,8 @@ func TestProcessExit(t *testing.T) { cmd := exec.Command(timeoutExec, args...) cmd.Env = envp return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { - if !validateExitSchema(t, event) { - t.Error(event.String()) - } + }, func(event *model.Event, rule *rules.Rule) { + test.validateExitSchema(t, event) assertTriggeredRule(t, rule, "test_exit_time_1") assertFieldEqual(t, event, "exit.file.path", sleepExec) assert.Equal(t, uint32(model.ExitExited), event.Exit.Cause, "wrong exit cause") @@ -1707,10 +1701,8 @@ func TestProcessExit(t *testing.T) { cmd := exec.Command(timeoutExec, args...) cmd.Env = envp return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { - if !validateExitSchema(t, event) { - t.Error(event.String()) - } + }, func(event *model.Event, rule *rules.Rule) { + test.validateExitSchema(t, event) assertTriggeredRule(t, rule, "test_exit_time_2") assertFieldEqual(t, event, "exit.file.path", sleepExec) assert.Equal(t, uint32(model.ExitExited), event.Exit.Cause, "wrong exit cause") @@ -1759,7 +1751,7 @@ func TestProcessBusybox(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_busybox_1", rule.ID, "wrong rule triggered") }) }) @@ -1771,7 +1763,7 @@ func TestProcessBusybox(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_busybox_2", rule.ID, "wrong rule triggered") }) }) @@ -1783,7 +1775,7 @@ func TestProcessBusybox(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_busybox_3", rule.ID, "wrong rule triggered") }) }) @@ -1795,7 +1787,7 @@ func TestProcessBusybox(t *testing.T) { return fmt.Errorf("%s: %w", out, err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_busybox_4", rule.ID, "wrong rule triggered") }) }) @@ -1814,7 +1806,7 @@ func TestProcessIdentifyInterpreter(t *testing.T) { scriptName string executedScript string innerScriptName string - check func(event *sprobe.Event) + check func(event *model.Event) }{ { name: "regular exec", @@ -1833,7 +1825,7 @@ print('Executing print inside a python (%s) script inside a bash script') EOF echo "Back to bash"`, python, python), - check: func(event *sprobe.Event) { + check: func(event *model.Event) { assertFieldEqual(t, event, "exec.interpreter.file.name", "", "wrong interpreter file name") assertFieldEqual(t, event, "process.parent.file.name", "regularExec.sh", "wrong process parent file name") assertFieldStringArrayIndexedOneOf(t, event, "process.ancestors.file.name", 0, []string{"regularExec.sh"}, "ancestor file name not an option") @@ -1857,7 +1849,7 @@ print "Executing print inside a perl (%s) script inside a bash script\n"; __HERE__ echo "Back to bash"`, perl, perl, perl), - check: func(event *sprobe.Event) { + check: func(event *model.Event) { assertFieldEqual(t, event, "exec.interpreter.file.name", "", "wrong interpreter file name") assertFieldEqual(t, event, "process.parent.file.name", "regularExecWithInterpreterRule.sh", "wrong process parent file name") assertFieldStringArrayIndexedOneOf(t, event, "process.ancestors.file.name", 0, []string{"regularExecWithInterpreterRule.sh"}, "ancestor file name not an option") @@ -1886,7 +1878,7 @@ echo "Back to bash" chmod 755 pyscript.py ./pyscript.py`, python, python), - check: func(event *sprobe.Event) { + check: func(event *model.Event) { assertFieldEqual(t, event, "exec.interpreter.file.name", filepath.Base(python), "wrong interpreter file name") assertFieldEqual(t, event, "process.parent.file.name", "interpretedExec.sh", "wrong process parent file name") assertFieldStringArrayIndexedOneOf(t, event, "process.ancestors.file.name", 0, []string{"interpretedExec.sh"}, "ancestor file name not an option") @@ -1965,7 +1957,7 @@ chmod 755 pyscript.py t.Logf("%s: %+v\n", constantfetch.OffsetNameLinuxBinprmStructFile, offsets[constantfetch.OffsetNameLinuxBinprmStructFile]) return nil - }, validateExecEvent(t, noWrapperType, func(event *sprobe.Event, rule *rules.Rule) { + }, testModule.validateExecEvent(t, noWrapperType, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, test.rule.ID) test.check(event) })) @@ -2024,7 +2016,7 @@ func TestProcessResolution(t *testing.T) { } return err - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "test_resolution", rule.ID, "wrong rule triggered") value, err := event.GetFieldValue("process.pid") @@ -2033,6 +2025,12 @@ func TestProcessResolution(t *testing.T) { } pid := uint32(value.(int)) + value, err = event.GetFieldValue("process.file.inode") + if err != nil { + t.Errorf("not able to get pid") + } + inode := uint64(value.(int)) + resolvers := test.probe.GetResolvers() // compare only few fields as the hierarchy fields(pointers, etc) are modified by the resolution function calls @@ -2046,7 +2044,7 @@ func TestProcessResolution(t *testing.T) { assert.Equal(t, entry1.ContainerID, entry2.ContainerID) } - cacheEntry := resolvers.ProcessResolver.ResolveFromCache(pid, pid) + cacheEntry := resolvers.ProcessResolver.ResolveFromCache(pid, pid, inode) if cacheEntry == nil { t.Errorf("not able to resolve the entry") } @@ -2088,14 +2086,14 @@ func TestProcessFilelessExecution(t *testing.T) { rule *rules.RuleDefinition syscallTesterToRun string syscallTesterScriptFilenameToRun string - check func(event *sprobe.Event, rule *rules.Rule) + check func(event *model.Event, rule *rules.Rule) }{ { name: "fileless", rule: filelessDetectionRule, syscallTesterToRun: "fileless", syscallTesterScriptFilenameToRun: "", - check: func(event *sprobe.Event, rule *rules.Rule) { + check: func(event *model.Event, rule *rules.Rule) { assertFieldEqual(t, event, "process.file.name", filelessExecutionFilenamePrefix, "process.file.name not matching") assertFieldStringArrayIndexedOneOf(t, event, "process.ancestors.file.name", 0, []string{"syscall_tester"}, "process.ancestors.file.name not matching") }, @@ -2105,7 +2103,7 @@ func TestProcessFilelessExecution(t *testing.T) { rule: filelessWithInterpreterDetectionRule, syscallTesterToRun: "fileless", syscallTesterScriptFilenameToRun: "script", - check: func(event *sprobe.Event, rule *rules.Rule) { + check: func(event *model.Event, rule *rules.Rule) { assertFieldEqual(t, event, "process.file.name", "memfd:script", "process.file.name not matching") }, }, @@ -2156,8 +2154,8 @@ func TestProcessFilelessExecution(t *testing.T) { cmd := exec.Command(testFile) return cmd.Run() - }, func(event *sprobe.Event, rule *rules.Rule) { - t.Errorf("shouldn't get an event: got event: %s", event) + }, func(event *model.Event, rule *rules.Rule) { + t.Errorf("shouldn't get an event: got event: %s", testModule.debugEvent(event)) }) if err == nil { t.Fatal("shouldn't get an event") @@ -2165,7 +2163,7 @@ func TestProcessFilelessExecution(t *testing.T) { } else { testModule.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, test.syscallTesterToRun, test.syscallTesterScriptFilenameToRun) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, test.rule.ID) test.check(event, rule) }) diff --git a/pkg/security/tests/ptrace_test.go b/pkg/security/tests/ptrace_test.go index a93d0e920d528..8f041442312e0 100644 --- a/pkg/security/tests/ptrace_test.go +++ b/pkg/security/tests/ptrace_test.go @@ -15,7 +15,7 @@ import ( "github.com/stretchr/testify/assert" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -49,14 +49,12 @@ func TestPTraceEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "ptrace", event.GetType(), "wrong event type") assert.Equal(t, uint64(42), event.PTrace.Address, "wrong address") assert.Equal(t, event.Async, false) - if !validatePTraceSchema(t, event) { - t.Error(event.String()) - } + test.validatePTraceSchema(t, event) }) }) } diff --git a/pkg/security/tests/rename_test.go b/pkg/security/tests/rename_test.go index 6897f0d69b6fd..7f0feeb1eee85 100644 --- a/pkg/security/tests/rename_test.go +++ b/pkg/security/tests/rename_test.go @@ -21,7 +21,7 @@ import ( "golang.org/x/sys/unix" "github.com/DataDog/datadog-agent/pkg/security/ebpf/kernel" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -62,7 +62,7 @@ func TestRename(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rename", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Rename.New.Inode, "wrong inode") assertFieldEqual(t, event, "rename.file.destination.inode", int(getInode(t, testNewFile)), "wrong inode") @@ -74,9 +74,7 @@ func TestRename(t *testing.T) { assertNearTime(t, event.Rename.New.CTime) assert.Equal(t, event.Async, false) - if !validateRenameSchema(t, event) { - t.Error(event.String()) - } + test.validateRenameSchema(t, event) }) })) @@ -93,7 +91,7 @@ func TestRename(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rename", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Rename.New.Inode, "wrong inode") assertFieldEqual(t, event, "rename.file.destination.inode", int(getInode(t, testNewFile)), "wrong inode") @@ -105,9 +103,7 @@ func TestRename(t *testing.T) { assertNearTime(t, event.Rename.New.CTime) assert.Equal(t, event.Async, false) - if !validateRenameSchema(t, event) { - t.Error(event.String()) - } + test.validateRenameSchema(t, event) }) }) @@ -125,7 +121,7 @@ func TestRename(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rename", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Rename.New.Inode, "wrong inode") assertFieldEqual(t, event, "rename.file.destination.inode", int(getInode(t, testNewFile)), "wrong inode") @@ -137,9 +133,7 @@ func TestRename(t *testing.T) { assertNearTime(t, event.Rename.New.CTime) assert.Equal(t, event.Async, false) - if !validateRenameSchema(t, event) { - t.Error(event.String()) - } + test.validateRenameSchema(t, event) }) }) @@ -182,7 +176,7 @@ func TestRename(t *testing.T) { return fmt.Errorf("failed to rename file with io_uring: %d", ret) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rename", event.GetType(), "wrong event type") assert.Equal(t, getInode(t, testNewFile), event.Rename.New.Inode, "wrong inode") assertFieldEqual(t, event, "rename.file.destination.inode", int(getInode(t, testNewFile)), "wrong inode") @@ -237,13 +231,11 @@ func TestRenameInvalidate(t *testing.T) { for i := 0; i != 5; i++ { test.WaitSignal(t, func() error { return os.Rename(testOldFile, testNewFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rename", event.GetType(), "wrong event type") assertFieldEqual(t, event, "rename.file.destination.path", testNewFile) - if !validateRenameSchema(t, event) { - t.Error(event.String()) - } + test.validateRenameSchema(t, event) }) // swap @@ -308,7 +300,7 @@ func TestRenameReuseInode(t *testing.T) { } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") }) @@ -335,14 +327,12 @@ func TestRenameReuseInode(t *testing.T) { return err } return f.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assertFieldEqual(t, event, "open.file.inode", int(testNewFileInode)) assertFieldEqual(t, event, "open.file.path", testReuseInodeFile) - if !validateOpenSchema(t, event) { - t.Error(event.String()) - } + test.validateOpenSchema(t, event) }) } @@ -380,13 +370,11 @@ func TestRenameFolder(t *testing.T) { return err } return testFile.Close() - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "open", event.GetType(), "wrong event type") assertFieldEqual(t, event, "open.file.path", filename) - if !validateOpenSchema(t, event) { - t.Error(event.String()) - } + test.validateOpenSchema(t, event) // swap if err := os.Rename(testOldFolder, testNewFolder); err != nil { diff --git a/pkg/security/tests/rmdir_test.go b/pkg/security/tests/rmdir_test.go index 71b8487f75c6f..2ad7105c43754 100644 --- a/pkg/security/tests/rmdir_test.go +++ b/pkg/security/tests/rmdir_test.go @@ -19,7 +19,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -56,7 +56,7 @@ func TestRmdir(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rmdir", event.GetType(), "wrong event type") assert.Equal(t, inode, event.Rmdir.File.Inode, "wrong inode") assertRights(t, event.Rmdir.File.Mode, expectedMode, "wrong initial mode") @@ -84,7 +84,7 @@ func TestRmdir(t *testing.T) { return error(err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rmdir", event.GetType(), "wrong event type") assert.Equal(t, inode, event.Rmdir.File.Inode, "wrong inode") assertRights(t, event.Rmdir.File.Mode, expectedMode, "wrong initial mode") @@ -141,7 +141,7 @@ func TestRmdir(t *testing.T) { return fmt.Errorf("failed to unlink file with io_uring: %d", ret) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rmdir", event.GetType(), "wrong event type") assert.Equal(t, inode, event.Rmdir.File.Inode, "wrong inode") assertRights(t, event.Rmdir.File.Mode, expectedMode, "wrong initial mode") @@ -182,7 +182,7 @@ func TestRmdirInvalidate(t *testing.T) { test.WaitSignal(t, func() error { return syscall.Rmdir(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "rmdir", event.GetType(), "wrong event type") assertFieldEqual(t, event, "rmdir.file.path", testFile) }) diff --git a/pkg/security/tests/schemas.go b/pkg/security/tests/schemas.go index c93417f10bde1..33a2bd723f65a 100644 --- a/pkg/security/tests/schemas.go +++ b/pkg/security/tests/schemas.go @@ -17,8 +17,9 @@ import ( "github.com/xeipuuv/gojsonschema" "github.com/DataDog/datadog-agent/pkg/security/events" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/probe" "github.com/DataDog/datadog-agent/pkg/security/probe/resolvers" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" ) //nolint:deadcode,unused @@ -53,7 +54,7 @@ func (v ValidInodeFormatChecker) IsFormat(input interface{}) bool { } //nolint:deadcode,unused -func validateSchema(t *testing.T, json string, path string) bool { +func validateStringSchema(t *testing.T, json string, path string) bool { t.Helper() fs := http.FS(schemaAssetFS) @@ -72,6 +73,7 @@ func validateSchema(t *testing.T, json string, path string) bool { for _, desc := range result.Errors() { t.Errorf("%s", desc) } + t.Error(json) return false } @@ -79,141 +81,155 @@ func validateSchema(t *testing.T, json string, path string) bool { } //nolint:deadcode,unused -func validateEventSchema(t *testing.T, event *sprobe.Event, path string) bool { +func (tm *testModule) validateEventSchema(t *testing.T, event *model.Event, path string) bool { t.Helper() - return validateSchema(t, event.String(), path) + + eventJSON, err := tm.marshalEvent(event) + if err != nil { + t.Error(err) + return false + } + + return validateStringSchema(t, eventJSON, path) } //nolint:deadcode,unused -func validateStringSchema(t *testing.T, event string, path string) bool { +func (tm *testModule) validateExecSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateSchema(t, event, path) + return tm.validateEventSchema(t, event, "file:///schemas/exec.schema.json") } //nolint:deadcode,unused -func validateExecSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateExitSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/exec.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/exit.schema.json") } //nolint:deadcode,unused -func validateExitSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateOpenSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/exit.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/open.schema.json") } //nolint:deadcode,unused -func validateOpenSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateRenameSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/open.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/rename.schema.json") } //nolint:deadcode,unused -func validateRenameSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateChmodSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/rename.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/chmod.schema.json") } //nolint:deadcode,unused -func validateChmodSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateChownSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/chmod.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/chown.schema.json") } //nolint:deadcode,unused -func validateChownSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateSELinuxSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/chown.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/selinux.schema.json") } //nolint:deadcode,unused -func validateSELinuxSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateLinkSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/selinux.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/link.schema.json") } //nolint:deadcode,unused -func validateLinkSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateSpanSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/link.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/span.schema.json") } //nolint:deadcode,unused -func validateSpanSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateBPFSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/span.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/bpf.schema.json") } //nolint:deadcode,unused -func validateBPFSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateMMapSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/bpf.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/mmap.schema.json") } //nolint:deadcode,unused -func validateMMapSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateMProtectSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/mmap.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/mprotect.schema.json") } //nolint:deadcode,unused -func validateMProtectSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validatePTraceSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/mprotect.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/ptrace.schema.json") } //nolint:deadcode,unused -func validatePTraceSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateLoadModuleSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/ptrace.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/load_module.schema.json") } //nolint:deadcode,unused -func validateLoadModuleSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateLoadModuleNoFileSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/load_module.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/load_module_no_file.schema.json") } //nolint:deadcode,unused -func validateLoadModuleNoFileSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateUnloadModuleSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/load_module_no_file.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/unload_module.schema.json") } //nolint:deadcode,unused -func validateUnloadModuleSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateSignalSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/unload_module.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/signal.schema.json") } //nolint:deadcode,unused -func validateSignalSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateSpliceSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/signal.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/splice.schema.json") } //nolint:deadcode,unused -func validateSpliceSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateDNSSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/splice.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/dns.schema.json") } //nolint:deadcode,unused -func validateDNSSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateBindSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/dns.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/bind.schema.json") } //nolint:deadcode,unused -func validateBindSchema(t *testing.T, event *sprobe.Event) bool { +func (tm *testModule) validateMountSchema(t *testing.T, event *model.Event) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/bind.schema.json") + return tm.validateEventSchema(t, event, "file:///schemas/mount.schema.json") } //nolint:deadcode,unused -func validateMountSchema(t *testing.T, event *sprobe.Event) bool { +func validateRuleSetLoadedSchema(t *testing.T, event *events.CustomEvent) bool { t.Helper() - return validateEventSchema(t, event, "file:///schemas/mount.schema.json") + + eventJSON, err := probe.MarshalCustomEvent(event) + if err != nil { + t.Error(err) + return false + } + + return validateStringSchema(t, string(eventJSON), "file:///schemas/ruleset_loaded.schema.json") } //nolint:deadcode,unused @@ -221,9 +237,3 @@ func validateActivityDumpProtoSchema(t *testing.T, ad string) bool { t.Helper() return validateStringSchema(t, ad, "file:///schemas/activity_dump_proto.schema.json") } - -//nolint:deadcode,unused -func validateRuleSetLoadedSchema(t *testing.T, event *events.CustomEvent) bool { - t.Helper() - return validateStringSchema(t, event.String(), "file:///schemas/ruleset_loaded.schema.json") -} diff --git a/pkg/security/tests/schemas/mount.schema.json b/pkg/security/tests/schemas/mount.schema.json index dd923abbb18bf..1b2570ea2e2b4 100644 --- a/pkg/security/tests/schemas/mount.schema.json +++ b/pkg/security/tests/schemas/mount.schema.json @@ -16,13 +16,13 @@ "mount": { "type": "object", "required": [ - "mountpoint", + "mp", "mount_id", "parent_mount_id", "fs_type" ], "properties": { - "mountpoint": { + "mp": { "properties": { "path": { "type": "string" @@ -41,7 +41,7 @@ "fs_type": { "type": "string" }, - "source": { + "root": { "properties": { "path": { "type": "string" diff --git a/pkg/security/tests/selinux_test.go b/pkg/security/tests/selinux_test.go index f48f611310e9a..05c1b24478298 100644 --- a/pkg/security/tests/selinux_test.go +++ b/pkg/security/tests/selinux_test.go @@ -19,7 +19,7 @@ import ( "github.com/stretchr/testify/assert" - "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -71,14 +71,12 @@ func TestSELinux(t *testing.T) { return fmt.Errorf("failed to run setenforce: %w", err) } return nil - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_selinux_enforce") assert.Equal(t, "selinux", event.GetType(), "wrong event type") assertFieldEqual(t, event, "selinux.enforce.status", "permissive", "wrong enforce value") - if !validateSELinuxSchema(t, event) { - t.Error(event.String()) - } + test.validateSELinuxSchema(t, event) }) }) @@ -88,13 +86,11 @@ func TestSELinux(t *testing.T) { return fmt.Errorf("failed to write to selinuxfs: %w", err) } return nil - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_selinux_enforce") assert.Equal(t, "selinux", event.GetType(), "wrong event type") - if !validateSELinuxSchema(t, event) { - t.Error(event.String()) - } + test.validateSELinuxSchema(t, event) }) }) @@ -104,15 +100,13 @@ func TestSELinux(t *testing.T) { return fmt.Errorf("failed to run setsebool: %w", err) } return nil - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_selinux_write_bool_true") assert.Equal(t, "selinux", event.GetType(), "wrong event type") assertFieldEqual(t, event, "selinux.bool.name", TestBoolName, "wrong bool name") assertFieldEqual(t, event, "selinux.bool.state", "on", "wrong bool value") - if !validateSELinuxSchema(t, event) { - t.Error(event.String()) - } + test.validateSELinuxSchema(t, event) }) }) @@ -122,15 +116,13 @@ func TestSELinux(t *testing.T) { return fmt.Errorf("failed to run setsebool: %w", err) } return nil - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_selinux_write_bool_false") assert.Equal(t, "selinux", event.GetType(), "wrong event type") assertFieldEqual(t, event, "selinux.bool.name", TestBoolName, "wrong bool name") assertFieldEqual(t, event, "selinux.bool.state", "off", "wrong bool value") - if !validateSELinuxSchema(t, event) { - t.Error(event.String()) - } + test.validateSELinuxSchema(t, event) }) }) @@ -140,8 +132,8 @@ func TestSELinux(t *testing.T) { return fmt.Errorf("failed to write to selinuxfs: %w", err) } return nil - }, func(event *probe.Event, rule *rules.Rule) { - t.Errorf("expected error and got an event: %s", event) + }, func(event *model.Event, rule *rules.Rule) { + t.Errorf("expected error and got an event: %s", test.debugEvent(event)) }) if err == nil { t.Fatal("expected error") @@ -182,14 +174,12 @@ func TestSELinuxCommitBools(t *testing.T) { return fmt.Errorf("failed to run setsebool: %w", err) } return nil - }, func(event *probe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_selinux_commit_bools") assert.Equal(t, "selinux", event.GetType(), "wrong event type") assertFieldEqual(t, event, "selinux.bool_commit.state", true, "wrong bool value") - if !validateSELinuxSchema(t, event) { - t.Error(event.String()) - } + test.validateSELinuxSchema(t, event) }) }) } diff --git a/pkg/security/tests/serializers_test.go b/pkg/security/tests/serializers_test.go index e411161f376f1..511ca2dafbb4a 100644 --- a/pkg/security/tests/serializers_test.go +++ b/pkg/security/tests/serializers_test.go @@ -18,6 +18,7 @@ import ( "github.com/stretchr/testify/assert" sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -48,19 +49,19 @@ func fetchRealisticEventSerializerInner(tb testing.TB) *sprobe.EventSerializer { tb.Fatal(err) } - var workingEvent *sprobe.Event + var workingEvent *model.Event test.WaitSignal(tb, func() error { fd, _, errno := syscall.Syscall6(syscall.SYS_OPENAT, 0, uintptr(testFilePtr), syscall.O_CREAT, 0711, 0, 0) if errno != 0 { return error(errno) } return syscall.Close(int(fd)) - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { workingEvent = event assert.Equal(tb, "open", event.GetType(), "wrong event type") }) - return sprobe.NewEventSerializer(workingEvent) + return sprobe.NewEventSerializer(workingEvent, test.probe) } func BenchmarkSerializersEasyJson(b *testing.B) { diff --git a/pkg/security/tests/signal_test.go b/pkg/security/tests/signal_test.go index 1f3731b0fddf3..e4d208b56d718 100644 --- a/pkg/security/tests/signal_test.go +++ b/pkg/security/tests/signal_test.go @@ -16,7 +16,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -54,15 +54,13 @@ func TestSignalEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "signal", event.GetType(), "wrong event type") assert.Equal(t, uint32(unix.SIGUSR1), event.Signal.Type, "wrong signal") assert.Equal(t, int64(0), event.Signal.Retval, "wrong retval") assert.Equal(t, event.Async, false) - if !validateSignalSchema(t, event) { - t.Error(event.String()) - } + test.validateSignalSchema(t, event) }) }) @@ -77,15 +75,13 @@ func TestSignalEvent(t *testing.T) { } return nil - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "signal", event.GetType(), "wrong event type") assert.Equal(t, uint32(unix.SIGKILL), event.Signal.Type, "wrong signal") assert.Equal(t, -int64(unix.EPERM), event.Signal.Retval, "wrong retval") assert.Equal(t, event.Async, false) - if !validateSignalSchema(t, event) { - t.Error(event.String()) - } + test.validateSignalSchema(t, event) }) }) } diff --git a/pkg/security/tests/span_test.go b/pkg/security/tests/span_test.go index 020c7928e1f2d..bcd686fdd441f 100644 --- a/pkg/security/tests/span_test.go +++ b/pkg/security/tests/span_test.go @@ -16,7 +16,7 @@ import ( "github.com/stretchr/testify/assert" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -64,12 +64,10 @@ func TestSpan(t *testing.T) { } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_span_rule_open") - if !validateSpanSchema(t, event) { - t.Error(event.String()) - } + test.validateSpanSchema(t, event) assert.Equal(t, uint64(204), event.SpanContext.SpanID) assert.Equal(t, uint64(104), event.SpanContext.TraceID) @@ -98,12 +96,10 @@ func TestSpan(t *testing.T) { } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assertTriggeredRule(t, rule, "test_span_rule_exec") - if !validateSpanSchema(t, event) { - t.Error(event.String()) - } + test.validateSpanSchema(t, event) assert.Equal(t, uint64(204), event.SpanContext.SpanID) assert.Equal(t, uint64(104), event.SpanContext.TraceID) diff --git a/pkg/security/tests/splice_test.go b/pkg/security/tests/splice_test.go index cd14f6bcce01b..0c48ab24b343c 100644 --- a/pkg/security/tests/splice_test.go +++ b/pkg/security/tests/splice_test.go @@ -13,7 +13,7 @@ import ( "github.com/stretchr/testify/assert" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -39,15 +39,13 @@ func TestSpliceEvent(t *testing.T) { t.Run("test_splice", func(t *testing.T) { test.WaitSignal(t, func() error { return runSyscallTesterFunc(t, syscallTester, "splice") - }, func(event *sprobe.Event, r *rules.Rule) { + }, func(event *model.Event, r *rules.Rule) { assert.Equal(t, "splice", event.GetType(), "wrong event type") assert.Equal(t, uint32(0), event.Splice.PipeEntryFlag, "wrong pipe entry flag") assert.Equal(t, uint32(0), event.Splice.PipeExitFlag, "wrong pipe exit flag") assert.Equal(t, event.Async, false) - if !validateSpliceSchema(t, event) { - t.Error(event.String()) - } + test.validateSpliceSchema(t, event) }) }) } diff --git a/pkg/security/tests/stress_test.go b/pkg/security/tests/stress_test.go index 85e206f9fe349..097163656f3fc 100644 --- a/pkg/security/tests/stress_test.go +++ b/pkg/security/tests/stress_test.go @@ -17,7 +17,7 @@ import ( "testing" "time" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -82,7 +82,7 @@ func stressOpen(t *testing.T, rule *rules.RuleDefinition, pathname string, size } events := 0 - test.RegisterRuleEventHandler(func(_ *sprobe.Event, _ *rules.Rule) { + test.RegisterRuleEventHandler(func(_ *model.Event, _ *rules.Rule) { events++ }) defer test.RegisterRuleEventHandler(nil) @@ -214,13 +214,13 @@ func stressExec(t *testing.T, rule *rules.RuleDefinition, pathname string, execu } events := 0 - test.RegisterRuleEventHandler(func(_ *sprobe.Event, _ *rules.Rule) { + test.RegisterRuleEventHandler(func(_ *model.Event, _ *rules.Rule) { events++ }) defer test.RegisterRuleEventHandler(nil) kevents := 0 - test.RegisterProbeEventHandler(func(_ *sprobe.Event) { + test.RegisterProbeEventHandler(func(_ *model.Event) { kevents++ }) defer test.RegisterProbeEventHandler(nil) diff --git a/pkg/security/tests/syscall_tester/c/syscall_tester.c b/pkg/security/tests/syscall_tester/c/syscall_tester.c index fc29cce39e0e8..5f5488eec4abb 100644 --- a/pkg/security/tests/syscall_tester/c/syscall_tester.c +++ b/pkg/security/tests/syscall_tester/c/syscall_tester.c @@ -159,18 +159,24 @@ int ptrace_traceme() { return EXIT_SUCCESS; } -int test_signal_sigusr(int child, int sig) { +void sig_handler(int signum){ + exit(0); +} + +int test_signal_sigusr(int sig) { + pid_t child = fork(); if (child == 0) { - child = fork(); - if (child == 0) { - sleep(5); - return EXIT_SUCCESS; - } + signal(sig, sig_handler); + sleep(60); + + return EXIT_SUCCESS; } int ret = kill(child, sig); - sleep(1); - return ret; + if (ret < 0) { + return ret; + } + return wait(NULL); } int test_signal_eperm(void) { @@ -196,19 +202,10 @@ int test_signal(int argc, char **argv) { return EXIT_FAILURE; } - int pid = 0; - if (argc >= 3) { - pid = atoi(argv[2]); - if (pid < 1) { - fprintf(stderr, "invalid pid: %s\n", argv[2]); - return EXIT_FAILURE; - } - } - if (!strcmp(argv[1], "sigusr")) - return test_signal_sigusr(pid, SIGUSR1); + return test_signal_sigusr(SIGUSR1); if (!strcmp(argv[1], "sigusr2")) - return test_signal_sigusr(pid, SIGUSR2); + return test_signal_sigusr(SIGUSR2); else if (!strcmp(argv[1], "eperm")) return test_signal_eperm(); fprintf(stderr, "%s: Unknown argument: %s.\n", __FUNCTION__, argv[1]); diff --git a/pkg/security/tests/unlink_test.go b/pkg/security/tests/unlink_test.go index c7add4606c9f1..401f6c59ce050 100644 --- a/pkg/security/tests/unlink_test.go +++ b/pkg/security/tests/unlink_test.go @@ -19,7 +19,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -51,7 +51,7 @@ func TestUnlink(t *testing.T) { return error(err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "unlink", event.GetType(), "wrong event type") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong inode") assertRights(t, event.Unlink.File.Mode, expectedMode) @@ -75,7 +75,7 @@ func TestUnlink(t *testing.T) { return error(err) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "unlink", event.GetType(), "wrong event type") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong inode") assertRights(t, event.Unlink.File.Mode, expectedMode) @@ -128,7 +128,7 @@ func TestUnlink(t *testing.T) { return fmt.Errorf("failed to unlink file with io_uring: %d", ret) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "unlink", event.GetType(), "wrong event type") assert.Equal(t, inode, event.Unlink.File.Inode, "wrong inode") assertRights(t, event.Unlink.File.Mode, expectedMode) @@ -173,7 +173,7 @@ func TestUnlinkInvalidate(t *testing.T) { test.WaitSignal(t, func() error { return os.Remove(testFile) - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "unlink", event.GetType(), "wrong event type") assertFieldEqual(t, event, "unlink.file.path", testFile) }) diff --git a/pkg/security/tests/utimes_test.go b/pkg/security/tests/utimes_test.go index 6c0ad70875071..74b97c6bb18c5 100644 --- a/pkg/security/tests/utimes_test.go +++ b/pkg/security/tests/utimes_test.go @@ -17,7 +17,7 @@ import ( "github.com/stretchr/testify/assert" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -52,7 +52,7 @@ func TestUtimes(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "utimes", event.GetType(), "wrong event type") assert.Equal(t, int64(123), event.Utimes.Atime.Unix()) assert.Equal(t, int64(456), event.Utimes.Mtime.Unix()) @@ -89,7 +89,7 @@ func TestUtimes(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "utimes", event.GetType(), "wrong event type") assert.Equal(t, int64(111), event.Utimes.Atime.Unix()) assert.Equal(t, int64(222), event.Utimes.Atime.UnixNano()%int64(time.Second)/int64(time.Microsecond)) @@ -129,7 +129,7 @@ func TestUtimes(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "utimes", event.GetType(), "wrong event type") assert.Equal(t, int64(555), event.Utimes.Mtime.Unix()) assert.Equal(t, int64(666), event.Utimes.Mtime.UnixNano()%int64(time.Second)/int64(time.Nanosecond)) diff --git a/pkg/security/tests/xattr_test.go b/pkg/security/tests/xattr_test.go index 7013075547023..da9f68b041087 100644 --- a/pkg/security/tests/xattr_test.go +++ b/pkg/security/tests/xattr_test.go @@ -17,7 +17,7 @@ import ( "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" - sprobe "github.com/DataDog/datadog-agent/pkg/security/probe" + "github.com/DataDog/datadog-agent/pkg/security/secl/model" "github.com/DataDog/datadog-agent/pkg/security/secl/rules" ) @@ -62,7 +62,7 @@ func TestSetXAttr(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "setxattr", event.GetType(), "wrong event type") assert.Equal(t, "user.test_xattr", event.SetXAttr.Name) assert.Equal(t, "user", event.SetXAttr.Namespace) @@ -100,7 +100,7 @@ func TestSetXAttr(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "setxattr", event.GetType(), "wrong event type") assert.Equal(t, "user.test_xattr", event.SetXAttr.Name) assert.Equal(t, "user", event.SetXAttr.Namespace) @@ -131,7 +131,7 @@ func TestSetXAttr(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "setxattr", event.GetType(), "wrong event type") assert.Equal(t, "user.test_xattr", event.SetXAttr.Name) assert.Equal(t, "user", event.SetXAttr.Namespace) @@ -198,7 +198,7 @@ func TestRemoveXAttr(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "removexattr", event.GetType(), "wrong event type") assert.Equal(t, "user.test_xattr", event.RemoveXAttr.Name) assert.Equal(t, getInode(t, testFile), event.RemoveXAttr.File.Inode, "wrong inode") @@ -242,7 +242,7 @@ func TestRemoveXAttr(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { assert.Equal(t, "removexattr", event.GetType(), "wrong event type") assert.Equal(t, "user.test_xattr", event.RemoveXAttr.Name) assert.Equal(t, getInode(t, testFile), event.RemoveXAttr.File.Inode, "wrong inode") @@ -278,7 +278,7 @@ func TestRemoveXAttr(t *testing.T) { return error(errno) } return nil - }, func(event *sprobe.Event, rule *rules.Rule) { + }, func(event *model.Event, rule *rules.Rule) { if event.GetType() != "removexattr" { t.Errorf("expected removexattr event, got %s", event.GetType()) } diff --git a/pkg/security/utils/proc.go b/pkg/security/utils/proc.go index 5ca4bd8825469..3b412c09b635f 100644 --- a/pkg/security/utils/proc.go +++ b/pkg/security/utils/proc.go @@ -97,27 +97,27 @@ func (path *NetNSPath) GetProcessNetworkNamespace() (uint32, error) { // CgroupTaskPath returns the path to the cgroup file of a pid in /proc func CgroupTaskPath(tgid, pid uint32) string { - return filepath.Join(util.HostProc(), fmt.Sprintf("%d/task/%d/cgroup", tgid, pid)) + return util.HostProc(strconv.FormatUint(uint64(tgid), 10), "task", strconv.FormatUint(uint64(pid), 10), "cgroup") } // ProcExePath returns the path to the exe file of a pid in /proc func ProcExePath(pid int32) string { - return filepath.Join(util.HostProc(), fmt.Sprintf("%d/exe", pid)) + return util.HostProc(strconv.FormatUint(uint64(pid), 10), "exe") } // StatusPath returns the path to the status file of a pid in /proc func StatusPath(pid int32) string { - return filepath.Join(util.HostProc(), fmt.Sprintf("%d/status", pid)) + return util.HostProc(strconv.FormatInt(int64(pid), 10), "status") } // ModulesPath returns the path to the modules file in /proc func ModulesPath() string { - return filepath.Join(util.HostProc(), "modules") + return util.HostProc("modules") } // RootPath returns the path to the root folder of a pid in /proc func RootPath(pid int32) string { - return filepath.Join(util.HostProc(), fmt.Sprintf("%d/root", pid)) + return util.HostProc(strconv.FormatInt(int64(pid), 10), "root") } // CapEffCapEprm returns the effective and permitted kernel capabilities of a process diff --git a/pkg/serializer/internal/metrics/events.go b/pkg/serializer/internal/metrics/events.go index 13a67f8366a98..6702cf6bc5be7 100644 --- a/pkg/serializer/internal/metrics/events.go +++ b/pkg/serializer/internal/metrics/events.go @@ -81,7 +81,7 @@ func (events Events) getEventsBySourceType() map[string][]*metrics.Event { // MarshalJSON serializes events to JSON so it can be sent to the Agent 5 intake // (we don't use the v1 event endpoint because it only supports 1 event per payload) -//FIXME(olivier): to be removed when v2 endpoints are available +// FIXME(olivier): to be removed when v2 endpoints are available func (events Events) MarshalJSON() ([]byte, error) { // Regroup events by their source type name eventsBySourceType := events.getEventsBySourceType() diff --git a/pkg/serializer/internal/metrics/iterable_series.go b/pkg/serializer/internal/metrics/iterable_series.go index afa531adc7a50..19b5113e2fca5 100644 --- a/pkg/serializer/internal/metrics/iterable_series.go +++ b/pkg/serializer/internal/metrics/iterable_series.go @@ -365,7 +365,7 @@ func (series *IterableSeries) MarshalSplitCompress(bufferContext *marshaler.Buff } // MarshalJSON serializes timeseries to JSON so it can be sent to V1 endpoints -//FIXME(maxime): to be removed when v2 endpoints are available +// FIXME(maxime): to be removed when v2 endpoints are available func (series *IterableSeries) MarshalJSON() ([]byte, error) { // use an alias to avoid infinite recursion while serializing a Series type SeriesAlias Series diff --git a/pkg/serializer/internal/metrics/series.go b/pkg/serializer/internal/metrics/series.go index feb60c1af905f..64ad08503b428 100644 --- a/pkg/serializer/internal/metrics/series.go +++ b/pkg/serializer/internal/metrics/series.go @@ -27,7 +27,7 @@ var ( type Series []*metrics.Serie // MarshalJSON serializes timeseries to JSON so it can be sent to V1 endpoints -//FIXME(maxime): to be removed when v2 endpoints are available +// FIXME(maxime): to be removed when v2 endpoints are available func (series Series) MarshalJSON() ([]byte, error) { // use an alias to avoid infinite recursion while serializing a Series type SeriesAlias Series diff --git a/pkg/serializer/internal/metrics/service_checks.go b/pkg/serializer/internal/metrics/service_checks.go index dec5d5c5058c5..3c72eb9892abe 100644 --- a/pkg/serializer/internal/metrics/service_checks.go +++ b/pkg/serializer/internal/metrics/service_checks.go @@ -31,7 +31,7 @@ var ( type ServiceChecks []*metrics.ServiceCheck // MarshalJSON serializes service checks to JSON so it can be sent to V1 endpoints -//FIXME(olivier): to be removed when v2 endpoints are available +// FIXME(olivier): to be removed when v2 endpoints are available func (sc ServiceChecks) MarshalJSON() ([]byte, error) { // use an alias to avoid infinite recursion while serializing type ServiceChecksAlias ServiceChecks diff --git a/pkg/serializer/internal/stream/compressor.go b/pkg/serializer/internal/stream/compressor.go index 87b20c693db4e..6b18e5ed7c2bc 100644 --- a/pkg/serializer/internal/stream/compressor.go +++ b/pkg/serializer/internal/stream/compressor.go @@ -76,7 +76,7 @@ type Compressor struct { separator []byte } -// NewCompressor TODO : IML-199 +// NewCompressor returns a new instance of a Compressor func NewCompressor(input, output *bytes.Buffer, maxPayloadSize, maxUncompressedSize int, header, footer []byte, separator []byte) (*Compressor, error) { c := &Compressor{ header: header, @@ -170,7 +170,7 @@ func (c *Compressor) AddItem(data []byte) error { return nil } -// Close TODO : IML-199 +// Close closes the Compressor, flushing any remaining uncompressed data func (c *Compressor) Close() ([]byte, error) { // Flush remaining uncompressed data if c.input.Len() > 0 { diff --git a/pkg/serializer/internal/stream/json_payload_builder.go b/pkg/serializer/internal/stream/json_payload_builder.go index 79eb80b85b23d..96986146c256a 100644 --- a/pkg/serializer/internal/stream/json_payload_builder.go +++ b/pkg/serializer/internal/stream/json_payload_builder.go @@ -70,7 +70,7 @@ type JSONPayloadBuilder struct { mu sync.Mutex } -// NewJSONPayloadBuilder TODO : IML-199 +// NewJSONPayloadBuilder returns a new JSONPayloadBuilder func NewJSONPayloadBuilder(shareAndLockBuffers bool) *JSONPayloadBuilder { if shareAndLockBuffers { return &JSONPayloadBuilder{ diff --git a/pkg/serializer/marshaler/marshaler.go b/pkg/serializer/marshaler/marshaler.go index daea200cfd73f..1af60ebf52fdf 100644 --- a/pkg/serializer/marshaler/marshaler.go +++ b/pkg/serializer/marshaler/marshaler.go @@ -46,11 +46,11 @@ type StreamJSONMarshaler interface { // serialize themselves in a stream. // Expected usage: // -// m.WriteHeader(stream) -// for m.MoveNext() { -// m.WriteCurrentItem(stream) -// } -// m.WriteFooter(stream) +// m.WriteHeader(stream) +// for m.MoveNext() { +// m.WriteCurrentItem(stream) +// } +// m.WriteFooter(stream) type IterableStreamJSONMarshaler interface { WriteHeader(*jsoniter.Stream) error WriteFooter(*jsoniter.Stream) error diff --git a/pkg/serializer/serializer.go b/pkg/serializer/serializer.go index 0919ee345d499..e0311ba85cafc 100644 --- a/pkg/serializer/serializer.go +++ b/pkg/serializer/serializer.go @@ -27,7 +27,9 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/version" + "github.com/benbjohnson/clock" "github.com/gogo/protobuf/proto" + googleproto "google.golang.org/protobuf/proto" ) const ( @@ -100,13 +102,18 @@ type MetricSerializer interface { SendOrchestratorMetadata(msgs []ProcessMessageBody, hostName, clusterID string, payloadType int) error SendOrchestratorManifests(msgs []ProcessMessageBody, hostName, clusterID string) error SendContainerLifecycleEvent(msgs []ContainerLifecycleMessage, hostName string) error + SendContainerImage(msgs []ContainerImageMessage, hostname string) error + SendSBOM(msgs []SBOMMessage, hostname string) error } // Serializer serializes metrics to the correct format and routes the payloads to the correct endpoint in the Forwarder type Serializer struct { + clock clock.Clock Forwarder forwarder.Forwarder orchestratorForwarder forwarder.Forwarder contlcycleForwarder forwarder.Forwarder + contimageForwarder forwarder.Forwarder + sbomForwarder forwarder.Forwarder seriesJSONPayloadBuilder *stream.JSONPayloadBuilder @@ -128,11 +135,14 @@ type Serializer struct { } // NewSerializer returns a new Serializer initialized -func NewSerializer(forwarder forwarder.Forwarder, orchestratorForwarder, contlcycleForwarder forwarder.Forwarder) *Serializer { +func NewSerializer(forwarder forwarder.Forwarder, orchestratorForwarder, contlcycleForwarder, contimageForwarder, sbomForwarder forwarder.Forwarder) *Serializer { s := &Serializer{ + clock: clock.New(), Forwarder: forwarder, orchestratorForwarder: orchestratorForwarder, contlcycleForwarder: contlcycleForwarder, + contimageForwarder: contimageForwarder, + sbomForwarder: sbomForwarder, seriesJSONPayloadBuilder: stream.NewJSONPayloadBuilder(config.Datadog.GetBool("enable_json_stream_shared_compressor_buffers")), enableEvents: config.Datadog.GetBool("enable_payloads.events"), enableSeries: config.Datadog.GetBool("enable_payloads.series"), @@ -460,23 +470,105 @@ func (s *Serializer) SendContainerLifecycleEvent(msgs []ContainerLifecycleMessag return errors.New("container lifecycle forwarder is not setup") } + payloads := make([]*[]byte, 0, len(msgs)) + for _, msg := range msgs { - extraHeaders := make(http.Header) - extraHeaders.Set("Content-Type", protobufContentType) msg.Host = hostname encoded, err := proto.Marshal(&msg) if err != nil { return log.Errorf("Unable to encode message: %v", err) } - payloads := transaction.NewBytesPayloadsWithoutMetaData([]*[]byte{&encoded}) - if err := s.contlcycleForwarder.SubmitContainerLifecycleEvents(payloads, extraHeaders); err != nil { - return log.Errorf("Unable to submit container lifecycle payload: %v", err) + payloads = append(payloads, &encoded) + } + + bytePayloads := transaction.NewBytesPayloadsWithoutMetaData(payloads) + + extraHeaders := make(http.Header) + extraHeaders.Set(headers.TimestampHeader, strconv.Itoa(int(s.clock.Now().Unix()))) + extraHeaders.Set(headers.EVPOriginHeader, "agent") + extraHeaders.Set(headers.EVPOriginVersionHeader, version.AgentVersion) + extraHeaders.Set(headers.ContentTypeHeader, headers.ProtobufContentType) + extraHeaders.Set(payloadVersionHTTPHeader, AgentPayloadVersion) + + if err := s.contlcycleForwarder.SubmitContainerLifecycleEvents(bytePayloads, extraHeaders); err != nil { + return log.Errorf("Unable to submit container lifecycle payloads: %v", err) + } + + log.Tracef("Sent container lifecycle events %+v", msgs) + + return nil +} + +// SendContainerImage serializes & sends container image payloads +func (s *Serializer) SendContainerImage(msgs []ContainerImageMessage, hostname string) error { + if s.contimageForwarder == nil { + return errors.New("container image forwarder is not setup") + } + + payloads := make([]*[]byte, 0, len(msgs)) + + for i := range msgs { + msgs[i].Host = hostname + encoded, err := googleproto.Marshal(&msgs[i]) + if err != nil { + return log.Errorf("Unable to encode message: %+v", err) + } + + payloads = append(payloads, &encoded) + } + + bytesPayloads := transaction.NewBytesPayloadsWithoutMetaData(payloads) + + extraHeaders := make(http.Header) + extraHeaders.Set(headers.TimestampHeader, strconv.Itoa(int(s.clock.Now().Unix()))) + extraHeaders.Set(headers.EVPOriginHeader, "agent") + extraHeaders.Set(headers.EVPOriginVersionHeader, version.AgentVersion) + extraHeaders.Set(headers.ContentTypeHeader, headers.ProtobufContentType) + extraHeaders.Set(payloadVersionHTTPHeader, AgentPayloadVersion) + + if err := s.contimageForwarder.SubmitContainerImages(bytesPayloads, extraHeaders); err != nil { + return log.Errorf("Unable to submit container image payload: %v", err) + } + + log.Tracef("Send container images %+v", msgs) + + return nil +} + +// SendSBOM serializes & sends sbom payloads +func (s *Serializer) SendSBOM(msgs []SBOMMessage, hostname string) error { + if s.sbomForwarder == nil { + return errors.New("SBOM forwarder is not setup") + } + + payloads := make([]*[]byte, 0, len(msgs)) + + for i := range msgs { + msgs[i].Host = hostname + encoded, err := googleproto.Marshal(&msgs[i]) + if err != nil { + return log.Errorf("Unable to encode message: %+v", err) } - log.Tracef("Sent container lifecycle event %+v", msg) + payloads = append(payloads, &encoded) + } + + bytesPayloads := transaction.NewBytesPayloadsWithoutMetaData(payloads) + + extraHeaders := make(http.Header) + extraHeaders.Set(headers.TimestampHeader, strconv.Itoa(int(s.clock.Now().Unix()))) + extraHeaders.Set(headers.EVPOriginHeader, "agent") + extraHeaders.Set(headers.EVPOriginVersionHeader, version.AgentVersion) + extraHeaders.Set(headers.ContentTypeHeader, headers.ProtobufContentType) + extraHeaders.Set(payloadVersionHTTPHeader, AgentPayloadVersion) + + if err := s.sbomForwarder.SubmitSBOM(bytesPayloads, extraHeaders); err != nil { + return log.Errorf("Unable to submit SBOM payload: %v", err) } + log.Tracef("Send SBOM %+v", msgs) + return nil } diff --git a/pkg/serializer/serializer_test.go b/pkg/serializer/serializer_test.go index 3c97eb8afcf81..bc9e909bfe52f 100644 --- a/pkg/serializer/serializer_test.go +++ b/pkg/serializer/serializer_test.go @@ -12,21 +12,29 @@ import ( "fmt" "net/http" "reflect" + "strconv" "strings" "testing" + "github.com/benbjohnson/clock" jsoniter "github.com/json-iterator/go" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" + "github.com/DataDog/agent-payload/v5/contimage" + "github.com/DataDog/agent-payload/v5/contlcycle" + "github.com/DataDog/agent-payload/v5/sbom" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/forwarder" "github.com/DataDog/datadog-agent/pkg/forwarder/transaction" "github.com/DataDog/datadog-agent/pkg/metrics" + "github.com/DataDog/datadog-agent/pkg/process/util/api/headers" metricsserializer "github.com/DataDog/datadog-agent/pkg/serializer/internal/metrics" "github.com/DataDog/datadog-agent/pkg/serializer/marshaler" "github.com/DataDog/datadog-agent/pkg/util/compression" + "github.com/DataDog/datadog-agent/pkg/util/pointer" + "github.com/DataDog/datadog-agent/pkg/version" ) var initialContentEncoding = compression.ContentEncoding @@ -224,7 +232,7 @@ func TestSendV1Events(t *testing.T) { matcher := createJSONPayloadMatcher(`{"apiKey":"","events":{},"internalHostname"`) f.On("SubmitV1Intake", matcher, jsonExtraHeadersWithCompression).Return(nil).Times(1) - s := NewSerializer(f, nil, nil) + s := NewSerializer(f, nil, nil, nil, nil) err := s.SendEvents([]*metrics.Event{}) require.Nil(t, err) f.AssertExpectations(t) @@ -242,7 +250,7 @@ func TestSendV1EventsCreateMarshalersBySourceType(t *testing.T) { defer config.Datadog.Set("enable_events_stream_payload_serialization", nil) f := &forwarder.MockedForwarder{} - s := NewSerializer(f, nil, nil) + s := NewSerializer(f, nil, nil, nil, nil) events := metrics.Events{&metrics.Event{SourceTypeName: "source1"}, &metrics.Event{SourceTypeName: "source2"}, &metrics.Event{SourceTypeName: "source3"}} payloadsCountMatcher := func(payloadCount int) interface{} { @@ -272,7 +280,7 @@ func TestSendV1ServiceChecks(t *testing.T) { config.Datadog.Set("enable_service_checks_stream_payload_serialization", false) defer config.Datadog.Set("enable_service_checks_stream_payload_serialization", nil) - s := NewSerializer(f, nil, nil) + s := NewSerializer(f, nil, nil, nil, nil) err := s.SendServiceChecks(metrics.ServiceChecks{&metrics.ServiceCheck{}}) require.Nil(t, err) f.AssertExpectations(t) @@ -288,7 +296,7 @@ func TestSendV1Series(t *testing.T) { config.Datadog.Set("use_v2_api.series", false) defer config.Datadog.Set("use_v2_api.series", true) - s := NewSerializer(f, nil, nil) + s := NewSerializer(f, nil, nil, nil, nil) err := s.SendIterableSeries(metricsserializer.CreateSerieSource(metrics.Series{})) require.Nil(t, err) @@ -301,7 +309,7 @@ func TestSendSeries(t *testing.T) { f.On("SubmitSeries", matcher, protobufExtraHeadersWithCompression).Return(nil).Times(1) config.Datadog.Set("use_v2_api.series", true) // default value, but just to be sure - s := NewSerializer(f, nil, nil) + s := NewSerializer(f, nil, nil, nil, nil) err := s.SendIterableSeries(metricsserializer.CreateSerieSource(metrics.Series{&metrics.Serie{}})) require.Nil(t, err) @@ -314,7 +322,7 @@ func TestSendSketch(t *testing.T) { matcher := createProtoPayloadMatcher([]byte{18, 0}) f.On("SubmitSketchSeries", matcher, protobufExtraHeadersWithCompression).Return(nil).Times(1) - s := NewSerializer(f, nil, nil) + s := NewSerializer(f, nil, nil, nil, nil) err := s.SendSketch(metrics.NewSketchesSourceTest()) require.Nil(t, err) f.AssertExpectations(t) @@ -324,7 +332,7 @@ func TestSendMetadata(t *testing.T) { f := &forwarder.MockedForwarder{} f.On("SubmitMetadata", jsonPayloads, jsonExtraHeadersWithCompression).Return(nil).Times(1) - s := NewSerializer(f, nil, nil) + s := NewSerializer(f, nil, nil, nil, nil) payload := &testPayload{} err := s.SendMetadata(payload) @@ -347,7 +355,7 @@ func TestSendProcessesMetadata(t *testing.T) { payloads, _ := mkPayloads(payload, true) f.On("SubmitV1Intake", payloads, jsonExtraHeadersWithCompression).Return(nil).Times(1) - s := NewSerializer(f, nil, nil) + s := NewSerializer(f, nil, nil, nil, nil) err := s.SendProcessesMetadata("test") require.Nil(t, err) @@ -363,6 +371,101 @@ func TestSendProcessesMetadata(t *testing.T) { require.NotNil(t, err) } +func TestSendContainerLifecycleEvents(t *testing.T) { + clock := clock.NewMock() + f := &forwarder.MockedForwarder{} + payload := []byte("\x0a\x02v1\x12\x08hostname\x18\x01") + payloads, _ := mkPayloads(payload, false) + extraHeaders := protobufExtraHeaders.Clone() + extraHeaders.Set(headers.EVPOriginHeader, "agent") + extraHeaders.Set(headers.EVPOriginVersionHeader, version.AgentVersion) + extraHeaders.Set(headers.TimestampHeader, strconv.Itoa(int(clock.Now().Unix()))) + f.On("SubmitContainerLifecycleEvents", payloads, extraHeaders).Return(nil).Times(1) + + s := NewSerializer(nil, nil, f, nil, nil) + s.clock = clock + + msg := []ContainerLifecycleMessage{ + { + Version: "v1", + Host: "hostname", + ObjectKind: contlcycle.EventsPayload_Pod, + Events: []*contlcycle.Event{}, + }, + } + err := s.SendContainerLifecycleEvent(msg, "hostname") + require.Nil(t, err) + f.AssertExpectations(t) + + f.On("SubmitContainerLifecycleEvents", payloads, extraHeaders).Return(fmt.Errorf("some error")).Times(1) + err = s.SendContainerLifecycleEvent(msg, "hostname") + require.NotNil(t, err) + f.AssertExpectations(t) +} + +func TestSendContainerImage(t *testing.T) { + clock := clock.NewMock() + f := &forwarder.MockedForwarder{} + payload := []byte("\x0a\x02v1\x12\x08hostname") + payloads, _ := mkPayloads(payload, false) + extraHeaders := protobufExtraHeaders.Clone() + extraHeaders.Set(headers.EVPOriginHeader, "agent") + extraHeaders.Set(headers.EVPOriginVersionHeader, version.AgentVersion) + extraHeaders.Set(headers.TimestampHeader, strconv.Itoa(int(clock.Now().Unix()))) + f.On("SubmitContainerImages", payloads, extraHeaders).Return(nil).Times(1) + + s := NewSerializer(nil, nil, nil, f, nil) + s.clock = clock + + msg := []ContainerImageMessage{ + { + Version: "v1", + Host: "hostname", + Images: []*contimage.ContainerImage{}, + }, + } + err := s.SendContainerImage(msg, "hostname") + require.Nil(t, err) + f.AssertExpectations(t) + + f.On("SubmitContainerImages", payloads, extraHeaders).Return(fmt.Errorf("some error")).Times(1) + err = s.SendContainerImage(msg, "hostname") + require.NotNil(t, err) + f.AssertExpectations(t) +} + +func TestSendSBOM(t *testing.T) { + clock := clock.NewMock() + f := &forwarder.MockedForwarder{} + payload := []byte("\x08\x01\x12\x08hostname\x1a\x05agent") + payloads, _ := mkPayloads(payload, false) + extraHeaders := protobufExtraHeaders.Clone() + extraHeaders.Set(headers.EVPOriginHeader, "agent") + extraHeaders.Set(headers.EVPOriginVersionHeader, version.AgentVersion) + extraHeaders.Set(headers.TimestampHeader, strconv.Itoa(int(clock.Now().Unix()))) + f.On("SubmitSBOM", payloads, extraHeaders).Return(nil).Times(1) + + s := NewSerializer(nil, nil, nil, nil, f) + s.clock = clock + + msg := []SBOMMessage{ + { + Version: 1, + Host: "hostname", + Source: pointer.Ptr("agent"), + Entities: []*sbom.SBOMEntity{}, + }, + } + err := s.SendSBOM(msg, "hostname") + require.Nil(t, err) + f.AssertExpectations(t) + + f.On("SubmitSBOM", payloads, extraHeaders).Return(fmt.Errorf("some error")).Times(1) + err = s.SendSBOM(msg, "hostname") + require.NotNil(t, err) + f.AssertExpectations(t) +} + func TestSendWithDisabledKind(t *testing.T) { mockConfig := config.Mock(t) @@ -382,7 +485,7 @@ func TestSendWithDisabledKind(t *testing.T) { }() f := &forwarder.MockedForwarder{} - s := NewSerializer(f, nil, nil) + s := NewSerializer(f, nil, nil, nil, nil) payload := &testPayload{} diff --git a/pkg/serializer/test_common.go b/pkg/serializer/test_common.go index 587594f847ddc..3e4dd058d5e94 100644 --- a/pkg/serializer/test_common.go +++ b/pkg/serializer/test_common.go @@ -66,17 +66,27 @@ func (s *MockSerializer) SendProcessesMetadata(data interface{}) error { return s.Called(data).Error(0) } -// SendOrchestratorMetadata serializes & send orchestrator metadata payloads +// SendOrchestratorMetadata serializes & sends orchestrator metadata payloads func (s *MockSerializer) SendOrchestratorMetadata(msgs []ProcessMessageBody, hostName, clusterID string, payloadType int) error { return s.Called(msgs, hostName, clusterID, payloadType).Error(0) } -// SendContainerLifecycleEvent serializes & send container lifecycle event payloads +// SendContainerLifecycleEvent serializes & sends container lifecycle event payloads func (s *MockSerializer) SendContainerLifecycleEvent(msgs []ContainerLifecycleMessage, hostname string) error { return s.Called(msgs, hostname).Error(0) } -// SendOrchestratorManifests serializes & send orchestrator manifest payloads +// SendContainerImage serializes & sends container image payloads +func (s *MockSerializer) SendContainerImage(msgs []ContainerImageMessage, hostname string) error { + return s.Called(msgs, hostname).Error(0) +} + +// SendSBOM serializes & sends SBOM payloads +func (s *MockSerializer) SendSBOM(msgs []SBOMMessage, hostname string) error { + return s.Called(msgs, hostname).Error(0) +} + +// SendOrchestratorManifests serializes & sends orchestrator manifest payloads func (s *MockSerializer) SendOrchestratorManifests(msgs []ProcessMessageBody, hostName, clusterID string) error { return s.Called(msgs, hostName, clusterID).Error(0) } diff --git a/pkg/serializer/types_contimage.go b/pkg/serializer/types_contimage.go new file mode 100644 index 0000000000000..bd5ba52bfd844 --- /dev/null +++ b/pkg/serializer/types_contimage.go @@ -0,0 +1,13 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package serializer + +import ( + "github.com/DataDog/agent-payload/v5/contimage" +) + +// ContainerImageMessage is a type alias for contimage proto payload +type ContainerImageMessage = contimage.ContainerImagePayload diff --git a/pkg/serializer/types_sbom.go b/pkg/serializer/types_sbom.go new file mode 100644 index 0000000000000..abda2692aed2b --- /dev/null +++ b/pkg/serializer/types_sbom.go @@ -0,0 +1,13 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package serializer + +import ( + "github.com/DataDog/agent-payload/v5/sbom" +) + +// SBOMMessage is a type alias for SBOM proto payload +type SBOMMessage = sbom.SBOMPayload diff --git a/pkg/serverless/daemon/daemon_test.go b/pkg/serverless/daemon/daemon_test.go index 57b90701f4cc2..18aa0e03c89c9 100644 --- a/pkg/serverless/daemon/daemon_test.go +++ b/pkg/serverless/daemon/daemon_test.go @@ -74,7 +74,7 @@ func TestTellDaemonRuntimeDoneOnceStartAndEnd(t *testing.T) { } func TestTellDaemonRuntimeDoneIfLocalTest(t *testing.T) { - t.Setenv(localTestEnvVar, "1") + t.Setenv(LocalTestEnvVar, "1") assert := assert.New(t) port := testutil.FreeTCPPort(t) d := StartDaemon(fmt.Sprint("127.0.0.1:", port)) diff --git a/pkg/serverless/daemon/routes.go b/pkg/serverless/daemon/routes.go index b2459ce26e2db..88b2a6108a50e 100644 --- a/pkg/serverless/daemon/routes.go +++ b/pkg/serverless/daemon/routes.go @@ -16,8 +16,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" ) -const localTestEnvVar = "DD_LOCAL_TEST" - // Hello is a route called by the Datadog Lambda Library when it starts. // It is used to detect the Datadog Lambda Library in the environment. type Hello struct { @@ -37,7 +35,7 @@ type Flush struct { func (f *Flush) ServeHTTP(w http.ResponseWriter, r *http.Request) { log.Debug("Hit on the serverless.Flush route.") - if len(os.Getenv(localTestEnvVar)) > 0 { + if len(os.Getenv(LocalTestEnvVar)) > 0 { // used only for testing purpose as the Logs API is not supported by the Lambda Emulator // thus we canot get the REPORT log line telling that the invocation is finished f.daemon.HandleRuntimeDone() diff --git a/pkg/serverless/daemon/utils.go b/pkg/serverless/daemon/utils.go index 7dea437175890..e45a93cd54ab7 100644 --- a/pkg/serverless/daemon/utils.go +++ b/pkg/serverless/daemon/utils.go @@ -10,6 +10,8 @@ import ( "time" ) +const LocalTestEnvVar = "DD_LOCAL_TEST" + // waitWithTimeout waits for a WaitGroup with a specified max timeout. // Returns true if waiting timed out. func waitWithTimeout(wg *sync.WaitGroup, timeout time.Duration) bool { diff --git a/pkg/serverless/logs/parse.go b/pkg/serverless/logs/parse.go index 2f0f7c877a606..ed2433f647813 100644 --- a/pkg/serverless/logs/parse.go +++ b/pkg/serverless/logs/parse.go @@ -196,7 +196,8 @@ func (l *LambdaLogAPIMessage) handlePlatformRuntimeDone(objectRecord map[string] func (l *LambdaLogAPIMessage) handlePlatformRuntimeDoneSpans(objectRecord map[string]interface{}) { spans, ok := objectRecord["spans"].([]interface{}) if !ok { - log.Error("LogMessage.UnmarshalJSON: can't read the spans object") + // no spans if the function errored and did not return a response + log.Debug("LogMessage.UnmarshalJSON: no spans object received") return } for _, span := range spans { diff --git a/pkg/serverless/registration/telemetry_api_test.go b/pkg/serverless/registration/telemetry_api_test.go index ace4719041a6c..e519bb2101ac9 100644 --- a/pkg/serverless/registration/telemetry_api_test.go +++ b/pkg/serverless/registration/telemetry_api_test.go @@ -86,13 +86,18 @@ func TestSubscribeLogsSuccess(t *testing.T) { func TestSubscribeLogsTimeout(t *testing.T) { payload := buildLogRegistrationPayload("myUri", "platform function", 10, 100, 1000) + done := make(chan struct{}) //fake the register route ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // timeout - time.Sleep(registerLogsTimeout + 100*time.Millisecond) + select { + case <-time.After(registerLogsTimeout + 5*time.Second): + case <-done: + } w.WriteHeader(200) })) defer ts.Close() + defer close(done) err := subscribeTelemetry("myId", ts.URL, registerLogsTimeout, payload) assert.NotNil(t, err) diff --git a/pkg/serverless/serverless_test.go b/pkg/serverless/serverless_test.go index 780921373a501..9250a6b84afac 100644 --- a/pkg/serverless/serverless_test.go +++ b/pkg/serverless/serverless_test.go @@ -16,6 +16,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/DataDog/datadog-agent/pkg/serverless/daemon" + "github.com/DataDog/datadog-agent/pkg/serverless/flush" "github.com/DataDog/datadog-agent/pkg/serverless/tags" ) @@ -30,14 +31,14 @@ func TestHandleInvocationShouldSetExtraTags(t *testing.T) { d := daemon.StartDaemon("http://localhost:8124") defer d.Stop() - d.WaitForDaemon() + // force daemon not to wait for flush at end of handleInvocation + d.SetFlushStrategy(flush.NewPeriodically(time.Second)) + d.UseAdaptiveFlush(false) - d.TellDaemonRuntimeStarted() + // deadline = current time + 5s + deadlineMs := (time.Now().UnixNano())/1000000 + 5000 - //deadline = current time + 20 ms - deadlineMs := (time.Now().UnixNano())/1000000 + 20 - - //setting DD_TAGS and DD_EXTRA_TAGS + // setting DD_TAGS and DD_EXTRA_TAGS t.Setenv("DD_TAGS", "a1:valueA1,a2:valueA2,A_MAJ:valueAMaj") t.Setenv("DD_EXTRA_TAGS", "a3:valueA3 a4:valueA4") diff --git a/pkg/serverless/trace/cold_start_span_creator_test.go b/pkg/serverless/trace/cold_start_span_creator_test.go index b220b1306b2fd..4ad14e71f4bde 100644 --- a/pkg/serverless/trace/cold_start_span_creator_test.go +++ b/pkg/serverless/trace/cold_start_span_creator_test.go @@ -17,6 +17,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/trace/agent" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/pb" + "github.com/DataDog/datadog-agent/pkg/trace/telemetry" ) func TestColdStartSpanCreatorCreateValid(t *testing.T) { @@ -25,7 +26,7 @@ func TestColdStartSpanCreatorCreateValid(t *testing.T) { cfg.Endpoints[0].APIKey = "test" ctx, cancel := context.WithCancel(context.Background()) defer cancel() - agnt := agent.NewAgent(ctx, cfg) + agnt := agent.NewAgent(ctx, cfg, telemetry.NewNoopCollector()) traceAgent := &ServerlessTraceAgent{ ta: agnt, } @@ -81,7 +82,7 @@ func TestColdStartSpanCreatorCreateDuplicate(t *testing.T) { cfg.Endpoints[0].APIKey = "test" ctx, cancel := context.WithCancel(context.Background()) defer cancel() - agnt := agent.NewAgent(ctx, cfg) + agnt := agent.NewAgent(ctx, cfg, telemetry.NewNoopCollector()) traceAgent := &ServerlessTraceAgent{ ta: agnt, } @@ -129,7 +130,7 @@ func TestColdStartSpanCreatorNotColdStart(t *testing.T) { cfg.Endpoints[0].APIKey = "test" ctx, cancel := context.WithCancel(context.Background()) defer cancel() - agnt := agent.NewAgent(ctx, cfg) + agnt := agent.NewAgent(ctx, cfg, telemetry.NewNoopCollector()) traceAgent := &ServerlessTraceAgent{ ta: agnt, } diff --git a/pkg/serverless/trace/span_modifer_test.go b/pkg/serverless/trace/span_modifer_test.go index fee79f7de0bf8..8d96cf41120af 100644 --- a/pkg/serverless/trace/span_modifer_test.go +++ b/pkg/serverless/trace/span_modifer_test.go @@ -17,6 +17,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/info" "github.com/DataDog/datadog-agent/pkg/trace/pb" + "github.com/DataDog/datadog-agent/pkg/trace/telemetry" "github.com/DataDog/datadog-agent/pkg/trace/testutil" ) @@ -27,7 +28,7 @@ func TestServerlessServiceRewrite(t *testing.T) { } cfg.Endpoints[0].APIKey = "test" ctx, cancel := context.WithCancel(context.Background()) - agnt := agent.NewAgent(ctx, cfg) + agnt := agent.NewAgent(ctx, cfg, telemetry.NewNoopCollector()) spanModifier := &spanModifier{ tags: cfg.GlobalTags, } @@ -58,7 +59,7 @@ func TestInferredSpanFunctionTagFiltering(t *testing.T) { cfg.GlobalTags = map[string]string{"some": "tag", "function_arn": "arn:aws:foo:bar:baz"} cfg.Endpoints[0].APIKey = "test" ctx, cancel := context.WithCancel(context.Background()) - agnt := agent.NewAgent(ctx, cfg) + agnt := agent.NewAgent(ctx, cfg, telemetry.NewNoopCollector()) spanModifier := &spanModifier{ tags: cfg.GlobalTags, } diff --git a/pkg/serverless/trace/trace.go b/pkg/serverless/trace/trace.go index 036397aa8863e..97b28b6302d33 100644 --- a/pkg/serverless/trace/trace.go +++ b/pkg/serverless/trace/trace.go @@ -14,6 +14,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/trace/agent" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/pb" + "github.com/DataDog/datadog-agent/pkg/trace/telemetry" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -68,7 +69,7 @@ func (s *ServerlessTraceAgent) Start(enabled bool, loadConfig Load, lambdaSpanCh context, cancel := context.WithCancel(context.Background()) tc.Hostname = "" tc.SynchronousFlushing = true - s.ta = agent.NewAgent(context, tc) + s.ta = agent.NewAgent(context, tc, telemetry.NewNoopCollector()) s.spanModifier = &spanModifier{ coldStartSpanId: coldStartSpanId, lambdaSpanChan: lambdaSpanChan, diff --git a/pkg/snmp/traps/formatter.go b/pkg/snmp/traps/formatter.go index a7b3b7fd6a470..144b445b80f2a 100644 --- a/pkg/snmp/traps/formatter.go +++ b/pkg/snmp/traps/formatter.go @@ -49,27 +49,28 @@ func NewJSONFormatter(oidResolver OIDResolver, namespace string) (JSONFormatter, } // FormatPacket converts a raw SNMP trap packet to a FormattedSnmpPacket containing the JSON data and the tags to attach -// { -// "trap": { -// "ddsource": "snmp-traps", -// "ddtags": "namespace:default,snmp_device:10.0.0.2,...", -// "timestamp": 123456789, -// "snmpTrapName": "...", -// "snmpTrapOID": "1.3.6.1.5.3.....", -// "snmpTrapMIB": "...", -// "uptime": "12345", -// "genericTrap": "5", # v1 only -// "specificTrap": "0", # v1 only -// "variables": [ -// { -// "oid": "1.3.4.1....", -// "type": "integer", -// "value": 12 -// }, -// ... -// ], -// } -// } +// +// { +// "trap": { +// "ddsource": "snmp-traps", +// "ddtags": "namespace:default,snmp_device:10.0.0.2,...", +// "timestamp": 123456789, +// "snmpTrapName": "...", +// "snmpTrapOID": "1.3.6.1.5.3.....", +// "snmpTrapMIB": "...", +// "uptime": "12345", +// "genericTrap": "5", # v1 only +// "specificTrap": "0", # v1 only +// "variables": [ +// { +// "oid": "1.3.4.1....", +// "type": "integer", +// "value": 12 +// }, +// ... +// ], +// } +// } func (f JSONFormatter) FormatPacket(packet *SnmpPacket) ([]byte, error) { payload := make(map[string]interface{}) var formattedTrap map[string]interface{} diff --git a/pkg/status/render.go b/pkg/status/render.go index 4ebed9fe0fc39..5e5448fbf27c3 100644 --- a/pkg/status/render.go +++ b/pkg/status/render.go @@ -68,7 +68,7 @@ func FormatStatus(data []byte) (string, error) { endpointsFunc := func() { renderStatusTemplate(b, "/endpoints.tmpl", endpointsInfos) } logsAgentFunc := func() { renderStatusTemplate(b, "/logsagent.tmpl", logsStats) } systemProbeFunc := func() { - if config.Datadog.GetBool("system_probe_config.enabled") { + if systemProbeStats != nil { renderStatusTemplate(b, "/systemprobe.tmpl", systemProbeStats) } } diff --git a/pkg/status/status.go b/pkg/status/status.go index 7df10825e595f..7866da87b78d7 100644 --- a/pkg/status/status.go +++ b/pkg/status/status.go @@ -74,8 +74,8 @@ func GetStatus() (map[string]interface{}, error) { stats["clusterAgentStatus"] = getDCAStatus() } - if config.Datadog.GetBool("system_probe_config.enabled") { - stats["systemProbeStats"] = GetSystemProbeStats(config.Datadog.GetString("system_probe_config.sysprobe_socket")) + if config.SystemProbe.GetBool("system_probe_config.enabled") { + stats["systemProbeStats"] = GetSystemProbeStats(config.SystemProbe.GetString("system_probe_config.sysprobe_socket")) } stats["processAgentStatus"] = GetProcessAgentStatus() diff --git a/pkg/status/templates/logsagent.tmpl b/pkg/status/templates/logsagent.tmpl index 91a7bbb76408c..8a68f36d69659 100644 --- a/pkg/status/templates/logsagent.tmpl +++ b/pkg/status/templates/logsagent.tmpl @@ -67,10 +67,6 @@ Logs Agent {{$input}} {{- end }} {{- end }} - Average Latency (ms): {{ .all_time_avg_latency }} - 24h Average Latency (ms): {{ .recent_avg_latency }} - Peak Latency (ms): {{ .all_time_peak_latency }} - 24h Peak Latency (ms): {{ .recent_peak_latency }} {{- if .info }} {{- range $key, $value := .info }} {{ $len := len $value }} {{ if eq $len 1 }} {{$key}}: {{index $value 0}} {{ else }} diff --git a/pkg/status/templates/systemprobe.tmpl b/pkg/status/templates/systemprobe.tmpl index e453f281e913a..5ff9ff2510ef7 100644 --- a/pkg/status/templates/systemprobe.tmpl +++ b/pkg/status/templates/systemprobe.tmpl @@ -12,6 +12,18 @@ System Probe {{- end }} {{- if .network_tracer }} + USM + === + {{- if .network_tracer.universal_service_monitoring.Error }} + Status: Not running + Error: {{ .network_tracer.universal_service_monitoring.Error }} + {{- else }} + Status: Running + {{- if .network_tracer.universal_service_monitoring.last_check }} + Last Check: {{ formatUnixTime .network_tracer.universal_service_monitoring.last_check }} + {{- end }} + {{- end }} + NPM === {{- if .network_tracer.Error }} diff --git a/pkg/tagger/telemetry/telemetry.go b/pkg/tagger/telemetry/telemetry.go index 8772799350886..c5116c1a03ec7 100644 --- a/pkg/tagger/telemetry/telemetry.go +++ b/pkg/tagger/telemetry/telemetry.go @@ -11,6 +11,7 @@ import ( ) const ( + subsystem = "tagger" // queryEmptyEntityID refers to a query made with an empty entity id queryEmptyEntityID = "empty_entity_id" // queryEmptyTags refers to a query that returned no tags @@ -21,56 +22,56 @@ const ( var ( // StoredEntities tracks how many entities are stored in the tagger. - StoredEntities = telemetry.NewGaugeWithOpts("tagger", "stored_entities", + StoredEntities = telemetry.NewGaugeWithOpts(subsystem, "stored_entities", []string{"source", "prefix"}, "Number of entities in the store.", telemetry.Options{NoDoubleUnderscoreSep: true}) // UpdatedEntities tracks the number of updates to tagger entities. - UpdatedEntities = telemetry.NewCounterWithOpts("tagger", "updated_entities", + UpdatedEntities = telemetry.NewCounterWithOpts(subsystem, "updated_entities", []string{}, "Number of updates made to entities.", telemetry.Options{NoDoubleUnderscoreSep: true}) // PrunedEntities tracks the number of pruned tagger entities. - PrunedEntities = telemetry.NewGaugeWithOpts("tagger", "pruned_entities", + PrunedEntities = telemetry.NewGaugeWithOpts(subsystem, "pruned_entities", []string{}, "Number of pruned tagger entities.", telemetry.Options{NoDoubleUnderscoreSep: true}) // queries tracks the number of queries made against the tagger. - queries = telemetry.NewCounterWithOpts("tagger", "queries", + queries = telemetry.NewCounterWithOpts(subsystem, "queries", []string{"cardinality", "status"}, "Queries made against the tagger.", telemetry.Options{NoDoubleUnderscoreSep: true}) // ClientStreamErrors tracks how many errors were received when streaming // tagger events. - ClientStreamErrors = telemetry.NewCounterWithOpts("tagger", "client_stream_errors", + ClientStreamErrors = telemetry.NewCounterWithOpts(subsystem, "client_stream_errors", []string{}, "Errors received when streaming tagger events", telemetry.Options{NoDoubleUnderscoreSep: true}) // ServerStreamErrors tracks how many errors happened when streaming // out tagger events. - ServerStreamErrors = telemetry.NewCounterWithOpts("tagger", "server_stream_errors", + ServerStreamErrors = telemetry.NewCounterWithOpts(subsystem, "server_stream_errors", []string{}, "Errors when streaming out tagger events", telemetry.Options{NoDoubleUnderscoreSep: true}) // Subscribers tracks how many subscribers the tagger has. - Subscribers = telemetry.NewGaugeWithOpts("tagger", "subscribers", + Subscribers = telemetry.NewGaugeWithOpts(subsystem, "subscribers", []string{}, "Number of channels subscribing to tagger events", telemetry.Options{NoDoubleUnderscoreSep: true}) // Events tracks the number of tagger events being sent out. - Events = telemetry.NewCounterWithOpts("tagger", "events", + Events = telemetry.NewCounterWithOpts(subsystem, "events", []string{"cardinality"}, "Number of tagger events being sent out", telemetry.Options{NoDoubleUnderscoreSep: true}) // Sends tracks the number of times the tagger has sent a // notification with a group of events. - Sends = telemetry.NewCounterWithOpts("tagger", "sends", + Sends = telemetry.NewCounterWithOpts(subsystem, "sends", []string{}, "Number of of times the tagger has sent a notification with a group of events", telemetry.Options{NoDoubleUnderscoreSep: true}) // Receives tracks the number of times the tagger has received a // notification with a group of events. - Receives = telemetry.NewCounterWithOpts("tagger", "receives", + Receives = telemetry.NewCounterWithOpts(subsystem, "receives", []string{}, "Number of of times the tagger has received a notification with a group of events", telemetry.Options{NoDoubleUnderscoreSep: true}) ) diff --git a/pkg/tagset/composite_tags.go b/pkg/tagset/composite_tags.go index 97ff74db73867..2254c985e7728 100644 --- a/pkg/tagset/composite_tags.go +++ b/pkg/tagset/composite_tags.go @@ -71,7 +71,7 @@ func (t CompositeTags) ForEach(callback func(tag string)) { } } -// ForEachErr applies `callback` to each tag while `callback`` returns nil. +// ForEachErr applies `callback` to each tag while `callback“ returns nil. // The first error is returned. func (t CompositeTags) ForEachErr(callback func(tag string) error) error { for _, t := range t.tags1 { diff --git a/pkg/tagset/docs.go b/pkg/tagset/docs.go index d995468831ac4..6934eaf9b35da 100644 --- a/pkg/tagset/docs.go +++ b/pkg/tagset/docs.go @@ -13,12 +13,12 @@ // The package otherwise presents a fairly abstract API that allows performance // optimizations without changing semantics. // -// Accumulators +// # Accumulators // // HashlessTagsAccumulator and HashingTagsAccumulator both allow building tagsets bit-by-bit, by // appending new tags. // -// HashedTags +// # HashedTags // // The HashedTags type represents an _immutable_ set of tags and associated hashes. // It is the primary data structure used to represent a set of tags. diff --git a/pkg/telemetry/prom_counter.go b/pkg/telemetry/prom_counter.go index 6ab5f973272c8..b7f9bf5447428 100644 --- a/pkg/telemetry/prom_counter.go +++ b/pkg/telemetry/prom_counter.go @@ -38,7 +38,6 @@ func (c *promCounter) Add(value float64, tagsValue ...string) { // Even if less convenient, this signature could be used in hot path // instead of Add(float64, ...string) to avoid escaping the parameters on the heap. // -// // If the value is < 0, no add takes place, as the counter is monotonic. // The prometheus client would panic in such a case. func (c *promCounter) AddWithTags(value float64, tags map[string]string) { diff --git a/pkg/trace/agent/agent.go b/pkg/trace/agent/agent.go index 355b8660df33f..8d6ef17acf670 100644 --- a/pkg/trace/agent/agent.go +++ b/pkg/trace/agent/agent.go @@ -11,6 +11,7 @@ import ( "time" "github.com/DataDog/datadog-agent/pkg/trace/remoteconfighandler" + "github.com/DataDog/datadog-agent/pkg/trace/telemetry" "github.com/DataDog/datadog-agent/pkg/obfuscate" "github.com/DataDog/datadog-agent/pkg/trace/api" @@ -57,6 +58,7 @@ type Agent struct { TraceWriter *writer.TraceWriter StatsWriter *writer.StatsWriter RemoteConfigHandler *remoteconfighandler.RemoteConfigHandler + TelemetryCollector telemetry.TelemetryCollector // obfuscator is used to obfuscate sensitive data from various span // tags based on their type. @@ -81,7 +83,7 @@ type Agent struct { // NewAgent returns a new Agent object, ready to be started. It takes a context // which may be cancelled in order to gracefully stop the agent. -func NewAgent(ctx context.Context, conf *config.AgentConfig) *Agent { +func NewAgent(ctx context.Context, conf *config.AgentConfig, telemetryCollector telemetry.TelemetryCollector) *Agent { dynConf := sampler.NewDynamicConfig() in := make(chan *api.Payload, 1000) statsChan := make(chan pb.StatsPayload, 100) @@ -100,17 +102,17 @@ func NewAgent(ctx context.Context, conf *config.AgentConfig) *Agent { RareSampler: sampler.NewRareSampler(conf), NoPrioritySampler: sampler.NewNoPrioritySampler(conf), EventProcessor: newEventProcessor(conf), - StatsWriter: writer.NewStatsWriter(conf, statsChan), + StatsWriter: writer.NewStatsWriter(conf, statsChan, telemetryCollector), obfuscator: obfuscate.NewObfuscator(oconf), cardObfuscator: newCreditCardsObfuscator(conf.Obfuscation.CreditCards), In: in, conf: conf, ctx: ctx, } - agnt.Receiver = api.NewHTTPReceiver(conf, dynConf, in, agnt) + agnt.Receiver = api.NewHTTPReceiver(conf, dynConf, in, agnt, telemetryCollector) agnt.OTLPReceiver = api.NewOTLPReceiver(in, conf) agnt.RemoteConfigHandler = remoteconfighandler.New(conf, agnt.PrioritySampler, agnt.RareSampler, agnt.ErrorsSampler) - agnt.TraceWriter = writer.NewTraceWriter(conf, agnt.PrioritySampler, agnt.ErrorsSampler, agnt.RareSampler) + agnt.TraceWriter = writer.NewTraceWriter(conf, agnt.PrioritySampler, agnt.ErrorsSampler, agnt.RareSampler, telemetryCollector) return agnt } diff --git a/pkg/trace/agent/agent_test.go b/pkg/trace/agent/agent_test.go index 0f25dfeb3c298..3988e836959f4 100644 --- a/pkg/trace/agent/agent_test.go +++ b/pkg/trace/agent/agent_test.go @@ -33,6 +33,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/trace/pb" "github.com/DataDog/datadog-agent/pkg/trace/sampler" "github.com/DataDog/datadog-agent/pkg/trace/stats" + "github.com/DataDog/datadog-agent/pkg/trace/telemetry" "github.com/DataDog/datadog-agent/pkg/trace/testutil" "github.com/DataDog/datadog-agent/pkg/trace/traceutil" "github.com/DataDog/datadog-agent/pkg/trace/writer" @@ -84,7 +85,7 @@ func TestProcess(t *testing.T) { Repl: "...", }} ctx, cancel := context.WithCancel(context.Background()) - agnt := NewAgent(ctx, cfg) + agnt := NewAgent(ctx, cfg, telemetry.NewNoopCollector()) defer cancel() now := time.Now() @@ -112,7 +113,7 @@ func TestProcess(t *testing.T) { cfg.Endpoints[0].APIKey = "test" cfg.Ignore["resource"] = []string{"^INSERT.*"} ctx, cancel := context.WithCancel(context.Background()) - agnt := NewAgent(ctx, cfg) + agnt := NewAgent(ctx, cfg, telemetry.NewNoopCollector()) defer cancel() now := time.Now() @@ -160,7 +161,7 @@ func TestProcess(t *testing.T) { cfg.Endpoints[0].APIKey = "test" cfg.Ignore["resource"] = []string{"^INSERT.*"} ctx, cancel := context.WithCancel(context.Background()) - agnt := NewAgent(ctx, cfg) + agnt := NewAgent(ctx, cfg, telemetry.NewNoopCollector()) defer cancel() now := time.Now() @@ -210,7 +211,7 @@ func TestProcess(t *testing.T) { cfg := config.New() cfg.Endpoints[0].APIKey = "test" ctx, cancel := context.WithCancel(context.Background()) - agnt := NewAgent(ctx, cfg) + agnt := NewAgent(ctx, cfg, telemetry.NewNoopCollector()) defer cancel() want := agnt.Receiver.Stats.GetTagStats(info.Tags{}) @@ -261,7 +262,7 @@ func TestProcess(t *testing.T) { cfg := config.New() cfg.Endpoints[0].APIKey = "test" ctx, cancel := context.WithCancel(context.Background()) - agnt := NewAgent(ctx, cfg) + agnt := NewAgent(ctx, cfg, telemetry.NewNoopCollector()) defer cancel() tp := testutil.TracerPayloadWithChunk(testutil.TraceChunkWithSpanAndPriority(&pb.Span{ @@ -293,7 +294,7 @@ func TestProcess(t *testing.T) { cfg := config.New() cfg.Endpoints[0].APIKey = "test" ctx, cancel := context.WithCancel(context.Background()) - agnt := NewAgent(ctx, cfg) + agnt := NewAgent(ctx, cfg, telemetry.NewNoopCollector()) defer cancel() tp := testutil.TracerPayloadWithChunk(testutil.RandomTraceChunk(1, 1)) @@ -317,7 +318,7 @@ func TestProcess(t *testing.T) { cfg := config.New() cfg.Endpoints[0].APIKey = "test" ctx, cancel := context.WithCancel(context.Background()) - agnt := NewAgent(ctx, cfg) + agnt := NewAgent(ctx, cfg, telemetry.NewNoopCollector()) defer cancel() testDiscardFunction := func(span *pb.Span) bool { @@ -360,7 +361,7 @@ func TestProcess(t *testing.T) { cfg := config.New() cfg.Endpoints[0].APIKey = "test" ctx, cancel := context.WithCancel(context.Background()) - agnt := NewAgent(ctx, cfg) + agnt := NewAgent(ctx, cfg, telemetry.NewNoopCollector()) defer cancel() chunk1 := testutil.TraceChunkWithSpan(testutil.RandomSpan()) @@ -601,7 +602,7 @@ func TestConcentratorInput(t *testing.T) { cfg.FargateOrchestrator = config.OrchestratorECS } cfg.RareSamplerEnabled = true - agent := NewAgent(context.TODO(), cfg) + agent := NewAgent(context.TODO(), cfg, telemetry.NewNoopCollector()) tc.in.Source = agent.Receiver.Stats.GetTagStats(info.Tags{}) agent.Process(tc.in) @@ -625,7 +626,7 @@ func TestClientComputedTopLevel(t *testing.T) { cfg := config.New() cfg.Endpoints[0].APIKey = "test" ctx, cancel := context.WithCancel(context.Background()) - agnt := NewAgent(ctx, cfg) + agnt := NewAgent(ctx, cfg, telemetry.NewNoopCollector()) defer cancel() t.Run("onNotTop", func(t *testing.T) { @@ -775,7 +776,7 @@ func TestClientComputedStats(t *testing.T) { cfg := config.New() cfg.Endpoints[0].APIKey = "test" ctx, cancel := context.WithCancel(context.Background()) - agnt := NewAgent(ctx, cfg) + agnt := NewAgent(ctx, cfg, telemetry.NewNoopCollector()) defer cancel() tp := testutil.TracerPayloadWithChunk(testutil.TraceChunkWithSpanAndPriority(&pb.Span{ Service: "something &&<@# that should be a metric!", @@ -1034,7 +1035,7 @@ func TestPartialSamplingFree(t *testing.T) { TraceWriter: &writer.TraceWriter{In: writerChan}, conf: cfg, } - agnt.Receiver = api.NewHTTPReceiver(cfg, dynConf, in, agnt) + agnt.Receiver = api.NewHTTPReceiver(cfg, dynConf, in, agnt, telemetry.NewNoopCollector()) now := time.Now() smallKeptSpan := &pb.Span{ TraceID: 1, @@ -1277,7 +1278,7 @@ func runTraceProcessingBenchmark(b *testing.B, c *config.AgentConfig) { defer wg.Wait() defer cancelFunc() - ta := NewAgent(ctx, c) + ta := NewAgent(ctx, c, telemetry.NewNoopCollector()) wg.Add(1) go func() { defer wg.Done() @@ -1334,7 +1335,7 @@ func benchThroughput(file string) func(*testing.B) { ctx, cancelFunc := context.WithCancel(context.Background()) http.DefaultServeMux = &http.ServeMux{} - agnt := NewAgent(ctx, cfg) + agnt := NewAgent(ctx, cfg, telemetry.NewNoopCollector()) defer cancelFunc() // start the agent without the trace and stats writers; we will be draining @@ -1626,7 +1627,7 @@ func TestSampleWithPriorityNone(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) cfg := config.New() cfg.Endpoints[0].APIKey = "test" - agnt := NewAgent(ctx, cfg) + agnt := NewAgent(ctx, cfg, telemetry.NewNoopCollector()) defer cancel() span := testutil.RandomSpan() @@ -1923,7 +1924,7 @@ func TestSpanSampling(t *testing.T) { cfg.RareSamplerEnabled = false ctx, cancel := context.WithCancel(context.Background()) defer cancel() - traceAgent := NewAgent(ctx, cfg) + traceAgent := NewAgent(ctx, cfg, telemetry.NewNoopCollector()) traceAgent.Process(&api.Payload{ // The payload might get modified in-place, so first deep copy it so // that we have the original for comparison later. @@ -1944,7 +1945,7 @@ func TestSetRootSpanTagsInAzureAppServices(t *testing.T) { cfg.Endpoints[0].APIKey = "test" cfg.InAzureAppServices = true ctx, cancel := context.WithCancel(context.Background()) - agnt := NewAgent(ctx, cfg) + agnt := NewAgent(ctx, cfg, telemetry.NewNoopCollector()) defer cancel() span := &pb.Span{} diff --git a/pkg/trace/agent/obfuscate_test.go b/pkg/trace/agent/obfuscate_test.go index ce1f0f8d6226f..f0236027a80f5 100644 --- a/pkg/trace/agent/obfuscate_test.go +++ b/pkg/trace/agent/obfuscate_test.go @@ -11,6 +11,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/pb" + "github.com/DataDog/datadog-agent/pkg/trace/telemetry" "github.com/DataDog/datadog-agent/pkg/trace/testutil" "github.com/stretchr/testify/assert" @@ -24,7 +25,7 @@ func TestNewCreditCardsObfuscator(t *testing.T) { cfg := config.New() cfg.Endpoints[0].APIKey = "test" cfg.Obfuscation.CreditCards.Enabled = true - NewAgent(ctx, cfg) + NewAgent(ctx, cfg, telemetry.NewNoopCollector()) _, ok = pb.MetaHook() assert.True(t, ok) } @@ -109,7 +110,7 @@ func agentWithDefaults() (agnt *Agent, stop func()) { ctx, cancelFunc := context.WithCancel(context.Background()) cfg := config.New() cfg.Endpoints[0].APIKey = "test" - return NewAgent(ctx, cfg), cancelFunc + return NewAgent(ctx, cfg, telemetry.NewNoopCollector()), cancelFunc } func TestObfuscateConfig(t *testing.T) { @@ -125,7 +126,7 @@ func TestObfuscateConfig(t *testing.T) { cfg := config.New() cfg.Endpoints[0].APIKey = "test" cfg.Obfuscation = ocfg - agnt := NewAgent(ctx, cfg) + agnt := NewAgent(ctx, cfg, telemetry.NewNoopCollector()) defer cancelFunc() span := &pb.Span{Type: typ, Meta: map[string]string{key: val}} agnt.obfuscateSpan(span) diff --git a/pkg/trace/api/api.go b/pkg/trace/api/api.go index 265b2fe48a8b2..73667643770ac 100644 --- a/pkg/trace/api/api.go +++ b/pkg/trace/api/api.go @@ -30,6 +30,7 @@ import ( "go.uber.org/atomic" "github.com/DataDog/datadog-agent/pkg/trace/api/apiutil" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/config/features" "github.com/DataDog/datadog-agent/pkg/trace/info" @@ -38,6 +39,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/trace/metrics/timing" "github.com/DataDog/datadog-agent/pkg/trace/pb" "github.com/DataDog/datadog-agent/pkg/trace/sampler" + "github.com/DataDog/datadog-agent/pkg/trace/telemetry" "github.com/DataDog/datadog-agent/pkg/trace/watchdog" ) @@ -75,6 +77,8 @@ type HTTPReceiver struct { statsProcessor StatsProcessor containerIDProvider IDProvider + telemetryCollector telemetry.TelemetryCollector + rateLimiterResponse int // HTTP status code when refusing wg sync.WaitGroup // waits for all requests to be processed @@ -85,7 +89,7 @@ type HTTPReceiver struct { } // NewHTTPReceiver returns a pointer to a new HTTPReceiver -func NewHTTPReceiver(conf *config.AgentConfig, dynConf *sampler.DynamicConfig, out chan *Payload, statsProcessor StatsProcessor) *HTTPReceiver { +func NewHTTPReceiver(conf *config.AgentConfig, dynConf *sampler.DynamicConfig, out chan *Payload, statsProcessor StatsProcessor, telemetryCollector telemetry.TelemetryCollector) *HTTPReceiver { rateLimiterResponse := http.StatusOK if features.Has("429") { rateLimiterResponse = http.StatusTooManyRequests @@ -100,6 +104,8 @@ func NewHTTPReceiver(conf *config.AgentConfig, dynConf *sampler.DynamicConfig, o dynConf: dynConf, containerIDProvider: NewIDProvider(conf.ContainerProcRoot), + telemetryCollector: telemetryCollector, + rateLimiterResponse: rateLimiterResponse, exit: make(chan struct{}), @@ -157,12 +163,14 @@ func (r *HTTPReceiver) Start() { addr := fmt.Sprintf("%s:%d", r.conf.ReceiverHost, r.conf.ReceiverPort) ln, err := r.listenTCP(addr) if err != nil { + r.telemetryCollector.SendStartupError(telemetry.CantStartHttpServer, err) killProcess("Error creating tcp listener: %v", err) } go func() { defer watchdog.LogOnPanic() if err := r.server.Serve(ln); err != nil && err != http.ErrServerClosed { log.Errorf("Could not start HTTP server: %v. HTTP receiver disabled.", err) + r.telemetryCollector.SendStartupError(telemetry.CantStartHttpServer, err) } }() log.Infof("Listening for traces at http://%s", addr) @@ -170,12 +178,14 @@ func (r *HTTPReceiver) Start() { if path := r.conf.ReceiverSocket; path != "" { ln, err := r.listenUnix(path) if err != nil { + r.telemetryCollector.SendStartupError(telemetry.CantStartUdsServer, err) killProcess("Error creating UDS listener: %v", err) } go func() { defer watchdog.LogOnPanic() if err := r.server.Serve(ln); err != nil && err != http.ErrServerClosed { log.Errorf("Could not start UDS server: %v. UDS receiver disabled.", err) + r.telemetryCollector.SendStartupError(telemetry.CantStartUdsServer, err) } }() log.Infof("Listening for traces at unix://%s", path) @@ -187,12 +197,14 @@ func (r *HTTPReceiver) Start() { secdec := r.conf.PipeSecurityDescriptor ln, err := listenPipe(pipepath, secdec, bufferSize) if err != nil { + r.telemetryCollector.SendStartupError(telemetry.CantStartWindowsPipeServer, err) killProcess("Error creating %q named pipe: %v", pipepath, err) } go func() { defer watchdog.LogOnPanic() if err := r.server.Serve(ln); err != nil && err != http.ErrServerClosed { log.Errorf("Could not start Windows Pipes server: %v. Windows Pipes receiver disabled.", err) + r.telemetryCollector.SendStartupError(telemetry.CantStartWindowsPipeServer, err) } }() log.Infof("Listening for traces on Windowes pipe %q. Security descriptor is %q", pipepath, secdec) @@ -311,6 +323,11 @@ func (r *HTTPReceiver) handleWithVersion(v Version, f func(Version, http.Respons return } + if req.Header.Get("Sec-Fetch-Site") == "cross-site" { + http.Error(w, "cross-site request rejected", http.StatusForbidden) + return + } + // TODO(x): replace with http.MaxBytesReader? req.Body = apiutil.NewLimitedReader(req.Body, r.conf.MaxRequestBytes) @@ -318,12 +335,12 @@ func (r *HTTPReceiver) handleWithVersion(v Version, f func(Version, http.Respons } } -var errInvalidHeaderTraceCountValue = fmt.Errorf("%q header value is not a number", headerTraceCount) +var errInvalidHeaderTraceCountValue = fmt.Errorf("%q header value is not a number", header.TraceCount) func traceCount(req *http.Request) (int64, error) { - str := req.Header.Get(headerTraceCount) + str := req.Header.Get(header.TraceCount) if str == "" { - return 0, fmt.Errorf("HTTP header %q not found", headerTraceCount) + return 0, fmt.Errorf("HTTP header %q not found", header.TraceCount) } n, err := strconv.Atoi(str) if err != nil { @@ -333,54 +350,6 @@ func traceCount(req *http.Request) (int64, error) { } const ( - // headerTraceCount is the header client implementation should fill - // with the number of traces contained in the payload. - headerTraceCount = "X-Datadog-Trace-Count" - - // headerContainerID specifies the name of the header which contains the ID of the - // container where the request originated. - headerContainerID = "Datadog-Container-ID" - - // headerLang specifies the name of the header which contains the language from - // which the traces originate. - headerLang = "Datadog-Meta-Lang" - - // headerLangVersion specifies the name of the header which contains the origin - // language's version. - headerLangVersion = "Datadog-Meta-Lang-Version" - - // headerLangInterpreter specifies the name of the HTTP header containing information - // about the language interpreter, where applicable. - headerLangInterpreter = "Datadog-Meta-Lang-Interpreter" - - // headerLangInterpreterVendor specifies the name of the HTTP header containing information - // about the language interpreter vendor, where applicable. - headerLangInterpreterVendor = "Datadog-Meta-Lang-Interpreter-Vendor" - - // headerTracerVersion specifies the name of the header which contains the version - // of the tracer sending the payload. - headerTracerVersion = "Datadog-Meta-Tracer-Version" - - // headerComputedTopLevel specifies that the client has marked top-level spans, when set. - // Any non-empty value will mean 'yes'. - headerComputedTopLevel = "Datadog-Client-Computed-Top-Level" - - // headerComputedStats specifies whether the client has computed stats so that the agent - // doesn't have to. - headerComputedStats = "Datadog-Client-Computed-Stats" - - // headderDroppedP0Traces contains the number of P0 trace chunks dropped by the client. - // This value is used to adjust priority rates computed by the agent. - headerDroppedP0Traces = "Datadog-Client-Dropped-P0-Traces" - - // headderDroppedP0Spans contains the number of P0 spans dropped by the client. - // This value is used for metrics and could be used in the future to adjust priority rates. - headerDroppedP0Spans = "Datadog-Client-Dropped-P0-Spans" - - // headerRatesPayloadVersion contains the version of sampling rates. - // If both agent and client have the same version, the agent won't return rates in API response. - headerRatesPayloadVersion = "Datadog-Rates-Payload-Version" - // tagContainersTags specifies the name of the tag which holds key/value // pairs representing information about the container (Docker, EC2, etc). tagContainersTags = "_dd.tags.container" @@ -392,13 +361,13 @@ func (r *HTTPReceiver) TagStats(v Version, header http.Header) *info.TagStats { return r.tagStats(v, header) } -func (r *HTTPReceiver) tagStats(v Version, header http.Header) *info.TagStats { +func (r *HTTPReceiver) tagStats(v Version, httpHeader http.Header) *info.TagStats { return r.Stats.GetTagStats(info.Tags{ - Lang: header.Get(headerLang), - LangVersion: header.Get(headerLangVersion), - Interpreter: header.Get(headerLangInterpreter), - LangVendor: header.Get(headerLangInterpreterVendor), - TracerVersion: header.Get(headerTracerVersion), + Lang: httpHeader.Get(header.Lang), + LangVersion: httpHeader.Get(header.LangVersion), + Interpreter: httpHeader.Get(header.LangInterpreter), + LangVendor: httpHeader.Get(header.LangInterpreterVendor), + TracerVersion: httpHeader.Get(header.TracerVersion), EndpointVersion: string(v), }) } @@ -468,7 +437,7 @@ func (r *HTTPReceiver) replyOK(req *http.Request, v Version, w http.ResponseWrit case v01, v02, v03: return httpOK(w) default: - ratesVersion := req.Header.Get(headerRatesPayloadVersion) + ratesVersion := req.Header.Get(header.RatesPayloadVersion) return httpRateByService(ratesVersion, w, r.dynConf) } } @@ -510,7 +479,7 @@ func (r *HTTPReceiver) handleStats(w http.ResponseWriter, req *http.Request) { metrics.Count("datadog.trace_agent.receiver.stats_bytes", rd.Count, ts.AsTags(), 1) metrics.Count("datadog.trace_agent.receiver.stats_buckets", int64(len(in.Stats)), ts.AsTags(), 1) - r.statsProcessor.ProcessStats(in, req.Header.Get(headerLang), req.Header.Get(headerTracerVersion)) + r.statsProcessor.ProcessStats(in, req.Header.Get(header.Lang), req.Header.Get(header.TracerVersion)) } // handleTraces knows how to handle a bunch of traces @@ -581,8 +550,8 @@ func (r *HTTPReceiver) handleTraces(v Version, w http.ResponseWriter, req *http. payload := &Payload{ Source: ts, TracerPayload: tp, - ClientComputedTopLevel: req.Header.Get(headerComputedTopLevel) != "", - ClientComputedStats: req.Header.Get(headerComputedStats) != "", + ClientComputedTopLevel: req.Header.Get(header.ComputedTopLevel) != "", + ClientComputedStats: req.Header.Get(header.ComputedStats) != "", ClientDroppedP0s: droppedTracesFromHeader(req.Header, ts), } @@ -627,14 +596,14 @@ func runMetaHook(chunks []*pb.TraceChunk) { func droppedTracesFromHeader(h http.Header, ts *info.TagStats) int64 { var dropped int64 - if v := h.Get(headerDroppedP0Traces); v != "" { + if v := h.Get(header.DroppedP0Traces); v != "" { count, err := strconv.ParseInt(v, 10, 64) if err == nil { dropped = count ts.ClientDroppedP0Traces.Add(count) } } - if v := h.Get(headerDroppedP0Spans); v != "" { + if v := h.Get(header.DroppedP0Spans); v != "" { count, err := strconv.ParseInt(v, 10, 64) if err == nil { ts.ClientDroppedP0Spans.Add(count) diff --git a/pkg/trace/api/api_test.go b/pkg/trace/api/api_test.go index cc8c9668243aa..c2ca41d6c8cf5 100644 --- a/pkg/trace/api/api_test.go +++ b/pkg/trace/api/api_test.go @@ -19,10 +19,12 @@ import ( "testing" "time" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/info" "github.com/DataDog/datadog-agent/pkg/trace/pb" "github.com/DataDog/datadog-agent/pkg/trace/sampler" + "github.com/DataDog/datadog-agent/pkg/trace/telemetry" "github.com/DataDog/datadog-agent/pkg/trace/testutil" "github.com/stretchr/testify/assert" @@ -50,7 +52,7 @@ func newTestReceiverFromConfig(conf *config.AgentConfig) *HTTPReceiver { dynConf := sampler.NewDynamicConfig() rawTraceChan := make(chan *Payload, 5000) - receiver := NewHTTPReceiver(conf, dynConf, rawTraceChan, noopStatsProcessor{}) + receiver := NewHTTPReceiver(conf, dynConf, rawTraceChan, noopStatsProcessor{}, telemetry.NewNoopCollector()) return receiver } @@ -140,6 +142,19 @@ func TestListenTCP(t *testing.T) { }) } +func TestTracesDecodeMakingHugeAllocation(t *testing.T) { + r := newTestReceiverFromConfig(config.New()) + r.Start() + defer r.Stop() + data := []byte{0x96, 0x97, 0xa4, 0x30, 0x30, 0x30, 0x30, 0xa6, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xa6, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xa6, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xa6, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xa6, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xa6, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x96, 0x94, 0x9c, 0x00, 0x00, 0x00, 0x30, 0x30, 0xd1, 0x30, 0x30, 0x30, 0x30, 0x30, 0xdf, 0x30, 0x30, 0x30, 0x30} + + path := fmt.Sprintf("http://%s:%d/v0.5/traces", r.conf.ReceiverHost, r.conf.ReceiverPort) + resp, err := http.Post(path, "application/msgpack", bytes.NewReader(data)) + require.NoError(t, err) + defer resp.Body.Close() + assert.Equal(t, http.StatusBadRequest, resp.StatusCode) +} + func TestStateHeaders(t *testing.T) { assert := assert.New(t) cfg := config.New() @@ -422,7 +437,7 @@ func TestReceiverDecodingError(t *testing.T) { req, err := http.NewRequest("POST", server.URL, bytes.NewBuffer(data)) assert.NoError(err) traceCount := 10 - req.Header.Set(headerTraceCount, strconv.Itoa(traceCount)) + req.Header.Set(header.TraceCount, strconv.Itoa(traceCount)) req.Header.Set("Content-Type", "application/json") resp, err := client.Do(req) @@ -433,6 +448,24 @@ func TestReceiverDecodingError(t *testing.T) { }) } +func TestHandleWithVersionRejectCrossSite(t *testing.T) { + assert := assert.New(t) + conf := newTestReceiverConfig() + r := newTestReceiverFromConfig(conf) + server := httptest.NewServer(r.handleWithVersion(v04, r.handleTraces)) + + var client http.Client + req, err := http.NewRequest("POST", server.URL, nil) + assert.NoError(err) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Sec-Fetch-Site", "cross-site") + + resp, err := client.Do(req) + assert.NoError(err) + resp.Body.Close() + assert.Equal(http.StatusForbidden, resp.StatusCode) +} + func TestReceiverUnexpectedEOF(t *testing.T) { assert := assert.New(t) conf := newTestReceiverConfig() @@ -453,7 +486,7 @@ func TestReceiverUnexpectedEOF(t *testing.T) { assert.NoError(err) req.Header.Set("Content-Type", "application/msgpack") req.Header.Set("Content-Length", "270") - req.Header.Set(headerTraceCount, strconv.Itoa(traceCount)) + req.Header.Set(header.TraceCount, strconv.Itoa(traceCount)) resp, err := client.Do(req) assert.NoError(err) @@ -472,23 +505,23 @@ func TestTraceCount(t *testing.T) { delete(req.Header, k) } _, err := traceCount(req) - assert.EqualError(t, err, fmt.Sprintf("HTTP header %q not found", headerTraceCount)) + assert.EqualError(t, err, fmt.Sprintf("HTTP header %q not found", header.TraceCount)) }) t.Run("value-empty", func(t *testing.T) { - req.Header.Set(headerTraceCount, "") + req.Header.Set(header.TraceCount, "") _, err := traceCount(req) - assert.EqualError(t, err, fmt.Sprintf("HTTP header %q not found", headerTraceCount)) + assert.EqualError(t, err, fmt.Sprintf("HTTP header %q not found", header.TraceCount)) }) t.Run("value-bad", func(t *testing.T) { - req.Header.Set(headerTraceCount, "qwe") + req.Header.Set(header.TraceCount, "qwe") _, err := traceCount(req) assert.Equal(t, err, errInvalidHeaderTraceCountValue) }) t.Run("ok", func(t *testing.T) { - req.Header.Set(headerTraceCount, "123") + req.Header.Set(header.TraceCount, "123") count, err := traceCount(req) assert.NoError(t, err) assert.Equal(t, count, int64(123)) @@ -525,7 +558,7 @@ func TestDecodeV05(t *testing.T) { assert.NoError(err) req, err := http.NewRequest("POST", "/v0.5/traces", bytes.NewReader(b)) assert.NoError(err) - req.Header.Set(headerContainerID, "abcdef123789456") + req.Header.Set(header.ContainerID, "abcdef123789456") tp, _, err := decodeTracerPayload(v05, req, &info.TagStats{ Tags: info.Tags{ Lang: "python", @@ -628,8 +661,8 @@ func TestHandleStats(t *testing.T) { } req, _ := http.NewRequest("POST", server.URL+"/v0.6/stats", &buf) req.Header.Set("Content-Type", "application/msgpack") - req.Header.Set(headerLang, "lang1") - req.Header.Set(headerTracerVersion, "0.1.0") + req.Header.Set(header.Lang, "lang1") + req.Header.Set(header.TracerVersion, "0.1.0") resp, err := http.DefaultClient.Do(req) if err != nil { t.Fatal(err) @@ -661,9 +694,9 @@ func TestClientComputedStatsHeader(t *testing.T) { req, _ := http.NewRequest("POST", server.URL+"/v0.4/traces", bytes.NewReader(bts)) req.Header.Set("Content-Type", "application/msgpack") - req.Header.Set(headerLang, "lang1") + req.Header.Set(header.Lang, "lang1") if on { - req.Header.Set(headerComputedStats, "yes") + req.Header.Set(header.ComputedStats, "yes") } var wg sync.WaitGroup wg.Add(1) @@ -774,9 +807,9 @@ func TestClientComputedTopLevel(t *testing.T) { req, _ := http.NewRequest("POST", server.URL+"/v0.4/traces", bytes.NewReader(bts)) req.Header.Set("Content-Type", "application/msgpack") - req.Header.Set(headerLang, "lang1") + req.Header.Set(header.Lang, "lang1") if on { - req.Header.Set(headerComputedTopLevel, "yes") + req.Header.Set(header.ComputedTopLevel, "yes") } var wg sync.WaitGroup wg.Add(1) @@ -822,9 +855,9 @@ func TestClientDropP0s(t *testing.T) { req, _ := http.NewRequest("POST", server.URL+"/v0.4/traces", bytes.NewReader(bts)) req.Header.Set("Content-Type", "application/msgpack") - req.Header.Set(headerLang, "lang1") - req.Header.Set(headerDroppedP0Traces, "153") - req.Header.Set(headerDroppedP0Spans, "2331") + req.Header.Set(header.Lang, "lang1") + req.Header.Set(header.DroppedP0Traces, "153") + req.Header.Set(header.DroppedP0Spans, "2331") resp, err := http.DefaultClient.Do(req) if err != nil { t.Fatal(err) @@ -866,7 +899,7 @@ func TestReceiverRateLimiterCancel(t *testing.T) { reader := &chunkedReader{reader: bytes.NewReader(bts)} req, err := http.NewRequest("POST", url, reader) req.Header.Set("Content-Type", "application/msgpack") - req.Header.Set(headerTraceCount, strconv.Itoa(n)) + req.Header.Set(header.TraceCount, strconv.Itoa(n)) assert.Nil(err) resp, err := client.Do(req) @@ -1016,7 +1049,7 @@ func BenchmarkWatchdog(b *testing.B) { now := time.Now() conf := config.New() conf.Endpoints[0].APIKey = "apikey_2" - r := NewHTTPReceiver(conf, nil, nil, nil) + r := NewHTTPReceiver(conf, nil, nil, nil, telemetry.NewNoopCollector()) b.ResetTimer() b.ReportAllocs() @@ -1109,7 +1142,7 @@ func TestWatchdog(t *testing.T) { t.Fatal(err) } req.Header.Set("Content-Type", "application/msgpack") - req.Header.Set(headerTraceCount, "3") + req.Header.Set(header.TraceCount, "3") resp, err = http.DefaultClient.Do(req) if err != nil { t.Fatal(err) diff --git a/pkg/trace/api/container.go b/pkg/trace/api/container.go index db97a9146100d..c962305399910 100644 --- a/pkg/trace/api/container.go +++ b/pkg/trace/api/container.go @@ -12,6 +12,8 @@ import ( "context" "net" "net/http" + + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" ) // connContext is unimplemented for non-linux builds. @@ -32,5 +34,5 @@ func NewIDProvider(_ string) IDProvider { } func (_ *idProvider) GetContainerID(_ context.Context, h http.Header) string { - return h.Get(headerContainerID) + return h.Get(header.ContainerID) } diff --git a/pkg/trace/api/container_linux.go b/pkg/trace/api/container_linux.go index c3a68492448d0..446d075432f35 100644 --- a/pkg/trace/api/container_linux.go +++ b/pkg/trace/api/container_linux.go @@ -14,6 +14,7 @@ import ( "syscall" "time" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/util/cgroups" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -60,7 +61,7 @@ type IDProvider interface { type noCgroupsProvider struct{} func (i *noCgroupsProvider) GetContainerID(_ context.Context, h http.Header) string { - return h.Get(headerContainerID) + return h.Get(header.ContainerID) } // NewIDProvider initializes an IDProvider instance using the provided procRoot to perform cgroups lookups in linux environments. @@ -91,7 +92,7 @@ type cgroupIDProvider struct { // GetContainerID returns the container ID in the http.Header, // otherwise looks for a PID in the ctx which is used to search cgroups for a container ID. func (c *cgroupIDProvider) GetContainerID(ctx context.Context, h http.Header) string { - if id := h.Get(headerContainerID); id != "" { + if id := h.Get(header.ContainerID); id != "" { return id } ucred, ok := ctx.Value(ucredKey{}).(*syscall.Ucred) diff --git a/pkg/trace/api/container_linux_test.go b/pkg/trace/api/container_linux_test.go index 5a770dd0af279..df265d54afaa7 100644 --- a/pkg/trace/api/container_linux_test.go +++ b/pkg/trace/api/container_linux_test.go @@ -17,6 +17,7 @@ import ( "testing" "time" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/pb" "github.com/DataDog/datadog-agent/pkg/trace/testutil" "github.com/stretchr/testify/assert" @@ -92,7 +93,7 @@ func TestGetContainerID(t *testing.T) { if !assert.NoError(t, err) { t.Fail() } - req.Header.Add(headerContainerID, containerID) + req.Header.Add(header.ContainerID, containerID) assert.Equal(t, containerID, provider.GetContainerID(req.Context(), req.Header)) }) @@ -102,7 +103,7 @@ func TestGetContainerID(t *testing.T) { if !assert.NoError(t, err) { t.Fail() } - req.Header.Add(headerContainerID, containerID) + req.Header.Add(header.ContainerID, containerID) assert.Equal(t, containerID, provider.GetContainerID(req.Context(), req.Header)) }) diff --git a/pkg/trace/api/evp_proxy.go b/pkg/trace/api/evp_proxy.go index ff37568912812..5d5f309309b0e 100644 --- a/pkg/trace/api/evp_proxy.go +++ b/pkg/trace/api/evp_proxy.go @@ -16,6 +16,7 @@ import ( "time" "github.com/DataDog/datadog-agent/pkg/trace/api/apiutil" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/log" "github.com/DataDog/datadog-agent/pkg/trace/metrics" @@ -158,14 +159,14 @@ func (t *evpProxyTransport) RoundTrip(req *http.Request) (rresp *http.Response, // Set Datadog headers, except API key which is set per-endpoint if containerID != "" { - req.Header.Set(headerContainerID, containerID) + req.Header.Set(header.ContainerID, containerID) if ctags := getContainerTags(t.conf.ContainerTags, containerID); ctags != "" { req.Header.Set("X-Datadog-Container-Tags", ctags) } } req.Header.Set("X-Datadog-Hostname", t.conf.Hostname) req.Header.Set("X-Datadog-AgentDefaultEnv", t.conf.DefaultEnv) - req.Header.Set(headerContainerID, containerID) + req.Header.Set(header.ContainerID, containerID) if needsAppKey { req.Header.Set("DD-APPLICATION-KEY", t.conf.EVPProxy.ApplicationKey) } diff --git a/pkg/trace/api/evp_proxy_test.go b/pkg/trace/api/evp_proxy_test.go index fd2909d41c512..a0e3c37681676 100644 --- a/pkg/trace/api/evp_proxy_test.go +++ b/pkg/trace/api/evp_proxy_test.go @@ -19,6 +19,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/teststatsd" "github.com/DataDog/datadog-agent/pkg/trace/testutil" @@ -94,7 +95,7 @@ func TestEVPProxyForwarder(t *testing.T) { assert.Equal(t, "test_user_agent", proxyreq.Header.Get("User-Agent")) assert.Equal(t, "text/json", proxyreq.Header.Get("Content-Type")) assert.NotContains(t, proxyreq.Header, "X-Datadog-Container-Tags") - assert.NotContains(t, proxyreq.Header, headerContainerID) + assert.NotContains(t, proxyreq.Header, header.ContainerID) assert.Equal(t, "", logs) // check metrics @@ -127,14 +128,14 @@ func TestEVPProxyForwarder(t *testing.T) { req := httptest.NewRequest("POST", "/mypath/mysubpath?arg=test", bytes.NewReader(randBodyBuf)) req.Header.Set("X-Datadog-EVP-Subdomain", "my.subdomain") - req.Header.Set(headerContainerID, "myid") + req.Header.Set(header.ContainerID, "myid") proxyreqs, resp, logs := sendRequestThroughForwarder(conf, req) resp.Body.Close() require.Equal(t, http.StatusOK, resp.StatusCode, "Got: ", fmt.Sprint(resp.StatusCode)) require.Len(t, proxyreqs, 1) assert.Equal(t, "container:myid", proxyreqs[0].Header.Get("X-Datadog-Container-Tags")) - assert.Equal(t, "myid", proxyreqs[0].Header.Get(headerContainerID)) + assert.Equal(t, "myid", proxyreqs[0].Header.Get(header.ContainerID)) assert.Equal(t, "", logs) }) diff --git a/pkg/trace/api/fuzz_test.go b/pkg/trace/api/fuzz_test.go index e1c3fd6f1b1ea..c630e5278d899 100644 --- a/pkg/trace/api/fuzz_test.go +++ b/pkg/trace/api/fuzz_test.go @@ -17,6 +17,7 @@ import ( "testing" "github.com/DataDog/datadog-agent/pkg/trace/api/apiutil" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/pb" "github.com/DataDog/datadog-agent/pkg/trace/testutil" @@ -183,8 +184,8 @@ func FuzzHandleStats(f *testing.F) { t.Fatalf("Couldn't create http request: %v", err) } req.Header.Set("Content-Type", "application/msgpack") - req.Header.Set(headerLang, "lang") - req.Header.Set(headerTracerVersion, "0.0.1") + req.Header.Set(header.Lang, "lang") + req.Header.Set(header.TracerVersion, "0.0.1") var client http.Client resp, err := client.Do(req) if err != nil { diff --git a/pkg/trace/api/internal/header/headers.go b/pkg/trace/api/internal/header/headers.go new file mode 100644 index 0000000000000..f6f8f2f4bb332 --- /dev/null +++ b/pkg/trace/api/internal/header/headers.go @@ -0,0 +1,57 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// package header defines HTTP headers known convention used by the Trace Agent and Datadog's APM intake. +package header + +const ( + // TraceCount is the header client implementation should fill + // with the number of traces contained in the payload. + TraceCount = "X-Datadog-Trace-Count" + + // ContainerID specifies the name of the header which contains the ID of the + // container where the request originated. + ContainerID = "Datadog-Container-ID" + + // Lang specifies the name of the header which contains the language from + // which the traces originate. + Lang = "Datadog-Meta-Lang" + + // LangVersion specifies the name of the header which contains the origin + // language's version. + LangVersion = "Datadog-Meta-Lang-Version" + + // LangInterpreter specifies the name of the HTTP header containing information + // about the language interpreter, where applicable. + LangInterpreter = "Datadog-Meta-Lang-Interpreter" + + // LangInterpreterVendor specifies the name of the HTTP header containing information + // about the language interpreter vendor, where applicable. + LangInterpreterVendor = "Datadog-Meta-Lang-Interpreter-Vendor" + + // TracerVersion specifies the name of the header which contains the version + // of the tracer sending the payload. + TracerVersion = "Datadog-Meta-Tracer-Version" + + // ComputedTopLevel specifies that the client has marked top-level spans, when set. + // Any non-empty value will mean 'yes'. + ComputedTopLevel = "Datadog-Client-Computed-Top-Level" + + // ComputedStats specifies whether the client has computed stats so that the agent + // doesn't have to. + ComputedStats = "Datadog-Client-Computed-Stats" + + // DroppedP0Traces contains the number of P0 trace chunks dropped by the client. + // This value is used to adjust priority rates computed by the agent. + DroppedP0Traces = "Datadog-Client-Dropped-P0-Traces" + + // DroppedP0Spans contains the number of P0 spans dropped by the client. + // This value is used for metrics and could be used in the future to adjust priority rates. + DroppedP0Spans = "Datadog-Client-Dropped-P0-Spans" + + // RatesPayloadVersion contains the version of sampling rates. + // If both agent and client have the same version, the agent won't return rates in API response. + RatesPayloadVersion = "Datadog-Rates-Payload-Version" +) diff --git a/pkg/trace/api/otlp.go b/pkg/trace/api/otlp.go index d655962227359..2a2554d57152a 100644 --- a/pkg/trace/api/otlp.go +++ b/pkg/trace/api/otlp.go @@ -6,12 +6,10 @@ package api import ( - "compress/gzip" "context" "encoding/binary" "encoding/hex" "fmt" - "io" "net" "net/http" "strconv" @@ -21,7 +19,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/otlp/model/attributes" "github.com/DataDog/datadog-agent/pkg/otlp/model/source" - "github.com/DataDog/datadog-agent/pkg/trace/api/apiutil" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/info" "github.com/DataDog/datadog-agent/pkg/trace/log" @@ -43,18 +41,13 @@ import ( // computed for the resource spans. const keyStatsComputed = "_dd.stats_computed" -const ( - // otlpProtocolHTTP specifies that the incoming connection was made over plain HTTP. - otlpProtocolHTTP = "http" - // otlpProtocolGRPC specifies that the incoming connection was made over gRPC. - otlpProtocolGRPC = "grpc" -) +var _ (ptraceotlp.GRPCServer) = (*OTLPReceiver)(nil) // OTLPReceiver implements an OpenTelemetry Collector receiver which accepts incoming // data on two ports for both plain HTTP and gRPC. type OTLPReceiver struct { + ptraceotlp.UnimplementedGRPCServer wg sync.WaitGroup // waits for a graceful shutdown - httpsrv *http.Server // the running HTTP server on a started receiver, if enabled grpcsrv *grpc.Server // the running GRPC server on a started receiver, if enabled out chan<- *Payload // the outgoing payload channel conf *config.AgentConfig // receiver config @@ -69,23 +62,6 @@ func NewOTLPReceiver(out chan<- *Payload, cfg *config.AgentConfig) *OTLPReceiver // Start starts the OTLPReceiver, if any of the servers were configured as active. func (o *OTLPReceiver) Start() { cfg := o.conf.OTLPReceiver - if cfg.HTTPPort != 0 { - o.httpsrv = &http.Server{ - Addr: net.JoinHostPort(cfg.BindHost, strconv.Itoa(cfg.HTTPPort)), - Handler: o, - ConnContext: connContext, - } - o.wg.Add(1) - go func() { - defer o.wg.Done() - if err := o.httpsrv.ListenAndServe(); err != nil { - if err != http.ErrServerClosed { - log.Criticalf("Error starting OpenTelemetry HTTP server: %v", err) - } - } - }() - log.Debugf("Listening to core Agent for OTLP traces on internal HTTP port (http://%s:%d, internal use only). Check core Agent logs for information on the OTLP ingest status.", cfg.BindHost, cfg.HTTPPort) - } if cfg.GRPCPort != 0 { ln, err := net.Listen("tcp", fmt.Sprintf("%s:%d", cfg.BindHost, cfg.GRPCPort)) if err != nil { @@ -107,15 +83,6 @@ func (o *OTLPReceiver) Start() { // Stop stops any running server. func (o *OTLPReceiver) Stop() { - if o.httpsrv != nil { - timeout, cancel := context.WithTimeout(context.Background(), 2*time.Second) - go func() { - if err := o.httpsrv.Shutdown(timeout); err != nil { - log.Errorf("Error shutting down OTLP HTTP server: %v", err) - } - cancel() - }() - } if o.grpcsrv != nil { go o.grpcsrv.Stop() } @@ -126,67 +93,23 @@ func (o *OTLPReceiver) Stop() { func (o *OTLPReceiver) Export(ctx context.Context, in ptraceotlp.ExportRequest) (ptraceotlp.ExportResponse, error) { defer timing.Since("datadog.trace_agent.otlp.process_grpc_request_ms", time.Now()) md, _ := metadata.FromIncomingContext(ctx) - metrics.Count("datadog.trace_agent.otlp.payload", 1, tagsFromHeaders(http.Header(md), otlpProtocolGRPC), 1) - o.processRequest(ctx, otlpProtocolGRPC, http.Header(md), in) + metrics.Count("datadog.trace_agent.otlp.payload", 1, tagsFromHeaders(http.Header(md)), 1) + o.processRequest(ctx, http.Header(md), in) return ptraceotlp.NewExportResponse(), nil } -// ServeHTTP implements http.Handler -func (o *OTLPReceiver) ServeHTTP(w http.ResponseWriter, req *http.Request) { - defer timing.Since("datadog.trace_agent.otlp.process_http_request_ms", time.Now()) - mtags := tagsFromHeaders(req.Header, otlpProtocolHTTP) - metrics.Count("datadog.trace_agent.otlp.payload", 1, mtags, 1) - - r := req.Body - if req.Header.Get("Content-Encoding") == "gzip" { - gzipr, err := gzip.NewReader(r) - if err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - metrics.Count("datadog.trace_agent.otlp.error", 1, append(mtags, "reason:corrupt_gzip"), 1) - return - } - r = gzipr - } - rd := apiutil.NewLimitedReader(r, o.conf.OTLPReceiver.MaxRequestBytes) - slurp, err := io.ReadAll(rd) - if err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - metrics.Count("datadog.trace_agent.otlp.error", 1, append(mtags, "reason:read_body"), 1) - return - } - metrics.Count("datadog.trace_agent.otlp.bytes", int64(len(slurp)), mtags, 1) - in := ptraceotlp.NewExportRequest() - switch getMediaType(req) { - case "application/x-protobuf": - if err := in.UnmarshalProto(slurp); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - metrics.Count("datadog.trace_agent.otlp.error", 1, append(mtags, "reason:decode_proto"), 1) - return - } - case "application/json": - fallthrough - default: - if err := in.UnmarshalJSON(slurp); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - metrics.Count("datadog.trace_agent.otlp.error", 1, append(mtags, "reason:decode_json"), 1) - return - } - } - o.processRequest(req.Context(), otlpProtocolHTTP, req.Header, in) -} - -func tagsFromHeaders(h http.Header, protocol string) []string { - tags := []string{"endpoint_version:opentelemetry_" + protocol + "_v1"} - if v := fastHeaderGet(h, headerLang); v != "" { +func tagsFromHeaders(h http.Header) []string { + tags := []string{"endpoint_version:opentelemetry_grpc_v1"} + if v := fastHeaderGet(h, header.Lang); v != "" { tags = append(tags, "lang:"+v) } - if v := fastHeaderGet(h, headerLangVersion); v != "" { + if v := fastHeaderGet(h, header.LangVersion); v != "" { tags = append(tags, "lang_version:"+v) } - if v := fastHeaderGet(h, headerLangInterpreter); v != "" { + if v := fastHeaderGet(h, header.LangInterpreter); v != "" { tags = append(tags, "interpreter:"+v) } - if v := fastHeaderGet(h, headerLangInterpreterVendor); v != "" { + if v := fastHeaderGet(h, header.LangInterpreterVendor); v != "" { tags = append(tags, "lang_vendor:"+v) } return tags @@ -205,17 +128,16 @@ func fastHeaderGet(h http.Header, canonicalKey string) string { return v[0] } -// processRequest processes the incoming request in. It marks it as received by the given protocol -// using the given headers. -func (o *OTLPReceiver) processRequest(ctx context.Context, protocol string, header http.Header, in ptraceotlp.ExportRequest) { +// processRequest processes the incoming request in. +func (o *OTLPReceiver) processRequest(ctx context.Context, header http.Header, in ptraceotlp.ExportRequest) { for i := 0; i < in.Traces().ResourceSpans().Len(); i++ { rspans := in.Traces().ResourceSpans().At(i) - o.ReceiveResourceSpans(ctx, rspans, header, protocol) + o.ReceiveResourceSpans(ctx, rspans, header) } } // ReceiveResourceSpans processes the given rspans and returns the source that it identified from processing them. -func (o *OTLPReceiver) ReceiveResourceSpans(ctx context.Context, rspans ptrace.ResourceSpans, header http.Header, protocol string) source.Source { +func (o *OTLPReceiver) ReceiveResourceSpans(ctx context.Context, rspans ptrace.ResourceSpans, httpHeader http.Header) source.Source { // each rspans is coming from a different resource and should be considered // a separate payload; typically there is only one item in this slice attr := rspans.Resource().Attributes() @@ -238,23 +160,23 @@ func (o *OTLPReceiver) ReceiveResourceSpans(ctx context.Context, rspans ptrace.R env := rattr[string(semconv.AttributeDeploymentEnvironment)] lang := rattr[string(semconv.AttributeTelemetrySDKLanguage)] if lang == "" { - lang = fastHeaderGet(header, headerLang) + lang = fastHeaderGet(httpHeader, header.Lang) } containerID := rattr[string(semconv.AttributeContainerID)] if containerID == "" { containerID = rattr[string(semconv.AttributeK8SPodUID)] } if containerID == "" { - containerID = o.cidProvider.GetContainerID(ctx, header) + containerID = o.cidProvider.GetContainerID(ctx, httpHeader) } tagstats := &info.TagStats{ Tags: info.Tags{ Lang: lang, - LangVersion: fastHeaderGet(header, headerLangVersion), - Interpreter: fastHeaderGet(header, headerLangInterpreter), - LangVendor: fastHeaderGet(header, headerLangInterpreterVendor), + LangVersion: fastHeaderGet(httpHeader, header.LangVersion), + Interpreter: fastHeaderGet(httpHeader, header.LangInterpreter), + LangVendor: fastHeaderGet(httpHeader, header.LangInterpreterVendor), TracerVersion: fmt.Sprintf("otlp-%s", rattr[string(semconv.AttributeTelemetrySDKVersion)]), - EndpointVersion: fmt.Sprintf("opentelemetry_%s_v1", protocol), + EndpointVersion: "opentelemetry_grpc_v1", }, Stats: info.NewStats(), } diff --git a/pkg/trace/api/otlp_test.go b/pkg/trace/api/otlp_test.go index ecb1b832de003..ce1206915b232 100644 --- a/pkg/trace/api/otlp_test.go +++ b/pkg/trace/api/otlp_test.go @@ -17,6 +17,7 @@ import ( "unicode" "github.com/DataDog/datadog-agent/pkg/otlp/model/source" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/pb" "github.com/DataDog/datadog-agent/pkg/trace/sampler" @@ -117,15 +118,15 @@ func TestOTLPMetrics(t *testing.T) { }, }).Traces().ResourceSpans() - rcv.ReceiveResourceSpans(context.Background(), rspans.At(0), http.Header{}, "") - rcv.ReceiveResourceSpans(context.Background(), rspans.At(1), http.Header{}, "") + rcv.ReceiveResourceSpans(context.Background(), rspans.At(0), http.Header{}) + rcv.ReceiveResourceSpans(context.Background(), rspans.At(1), http.Header{}) calls := stats.CountCalls assert.Equal(4, len(calls)) - assert.Contains(calls, teststatsd.MetricsArgs{Name: "datadog.trace_agent.otlp.spans", Value: 3, Tags: []string{"tracer_version:otlp-", "endpoint_version:opentelemetry__v1"}, Rate: 1}) - assert.Contains(calls, teststatsd.MetricsArgs{Name: "datadog.trace_agent.otlp.spans", Value: 2, Tags: []string{"tracer_version:otlp-", "endpoint_version:opentelemetry__v1"}, Rate: 1}) - assert.Contains(calls, teststatsd.MetricsArgs{Name: "datadog.trace_agent.otlp.traces", Value: 1, Tags: []string{"tracer_version:otlp-", "endpoint_version:opentelemetry__v1"}, Rate: 1}) - assert.Contains(calls, teststatsd.MetricsArgs{Name: "datadog.trace_agent.otlp.traces", Value: 2, Tags: []string{"tracer_version:otlp-", "endpoint_version:opentelemetry__v1"}, Rate: 1}) + assert.Contains(calls, teststatsd.MetricsArgs{Name: "datadog.trace_agent.otlp.spans", Value: 3, Tags: []string{"tracer_version:otlp-", "endpoint_version:opentelemetry_grpc_v1"}, Rate: 1}) + assert.Contains(calls, teststatsd.MetricsArgs{Name: "datadog.trace_agent.otlp.spans", Value: 2, Tags: []string{"tracer_version:otlp-", "endpoint_version:opentelemetry_grpc_v1"}, Rate: 1}) + assert.Contains(calls, teststatsd.MetricsArgs{Name: "datadog.trace_agent.otlp.traces", Value: 1, Tags: []string{"tracer_version:otlp-", "endpoint_version:opentelemetry_grpc_v1"}, Rate: 1}) + assert.Contains(calls, teststatsd.MetricsArgs{Name: "datadog.trace_agent.otlp.traces", Value: 2, Tags: []string{"tracer_version:otlp-", "endpoint_version:opentelemetry_grpc_v1"}, Rate: 1}) } func TestOTLPNameRemapping(t *testing.T) { @@ -142,7 +143,7 @@ func TestOTLPNameRemapping(t *testing.T) { {Name: "asd"}, }, }, - }).Traces().ResourceSpans().At(0), http.Header{}, "") + }).Traces().ResourceSpans().At(0), http.Header{}) timeout := time.After(500 * time.Millisecond) select { case <-timeout: @@ -341,7 +342,7 @@ func TestOTLPReceiveResourceSpans(t *testing.T) { } { t.Run("", func(t *testing.T) { rspans := testutil.NewOTLPTracesRequest(tt.in).Traces().ResourceSpans().At(0) - rcv.ReceiveResourceSpans(context.Background(), rspans, http.Header{}, "agent_tests") + rcv.ReceiveResourceSpans(context.Background(), rspans, http.Header{}) timeout := time.After(500 * time.Millisecond) select { case <-timeout: @@ -363,7 +364,7 @@ func TestOTLPReceiveResourceSpans(t *testing.T) { }, }, }).Traces().ResourceSpans().At(0) - rcv.ReceiveResourceSpans(context.Background(), rspans, http.Header{}, "agent_tests") + rcv.ReceiveResourceSpans(context.Background(), rspans, http.Header{}) timeout := time.After(500 * time.Millisecond) select { case <-timeout: @@ -452,7 +453,7 @@ func TestOTLPHostname(t *testing.T) { Attributes: rattr, Spans: []*testutil.OTLPSpan{{Attributes: sattr}}, }, - }).Traces().ResourceSpans().At(0), http.Header{}, "") + }).Traces().ResourceSpans().At(0), http.Header{}) assert.Equal(t, src.Kind, source.HostnameKind) assert.Equal(t, src.Identifier, tt.out) timeout := time.After(500 * time.Millisecond) @@ -475,25 +476,9 @@ func TestOTLPReceiver(t *testing.T) { o := NewOTLPReceiver(nil, config.New()) o.Start() defer o.Stop() - assert.Nil(t, o.httpsrv) assert.Nil(t, o.grpcsrv) }) - t.Run("Start/http", func(t *testing.T) { - port := testutil.FreeTCPPort(t) - cfg := config.New() - cfg.OTLPReceiver = &config.OTLP{ - BindHost: "localhost", - HTTPPort: port, - } - o := NewOTLPReceiver(nil, cfg) - o.Start() - defer o.Stop() - assert.Nil(t, o.grpcsrv) - assert.NotNil(t, o.httpsrv) - assert.Equal(t, fmt.Sprintf("localhost:%d", port), o.httpsrv.Addr) - }) - t.Run("Start/grpc", func(t *testing.T) { port := testutil.FreeTCPPort(t) cfg := config.New() @@ -505,7 +490,6 @@ func TestOTLPReceiver(t *testing.T) { o.Start() defer o.Stop() assert := assert.New(t) - assert.Nil(o.httpsrv) assert.NotNil(o.grpcsrv) svc, ok := o.grpcsrv.GetServiceInfo()["opentelemetry.proto.collector.trace.v1.TraceService"] assert.True(ok) @@ -513,27 +497,12 @@ func TestOTLPReceiver(t *testing.T) { assert.Equal("Export", svc.Methods[0].Name) }) - t.Run("Start/http+grpc", func(t *testing.T) { - port1, port2 := testutil.FreeTCPPort(t), testutil.FreeTCPPort(t) - cfg := config.New() - cfg.OTLPReceiver = &config.OTLP{ - BindHost: "localhost", - HTTPPort: port1, - GRPCPort: port2, - } - o := NewOTLPReceiver(nil, cfg) - o.Start() - defer o.Stop() - assert.NotNil(t, o.grpcsrv) - assert.NotNil(t, o.httpsrv) - }) - t.Run("processRequest", func(t *testing.T) { out := make(chan *Payload, 5) o := NewOTLPReceiver(out, config.New()) - o.processRequest(context.Background(), otlpProtocolGRPC, http.Header(map[string][]string{ - headerLang: {"go"}, - headerContainerID: {"containerdID"}, + o.processRequest(context.Background(), http.Header(map[string][]string{ + header.Lang: {"go"}, + header.ContainerID: {"containerdID"}, }), otlpTestTracesRequest) ps := make([]*Payload, 2) timeout := time.After(time.Second / 2) @@ -764,11 +733,11 @@ func TestOTLPHelpers(t *testing.T) { t.Run("tagsFromHeaders", func(t *testing.T) { out := tagsFromHeaders(http.Header(map[string][]string{ - headerLang: {"go"}, - headerLangVersion: {"1.14"}, - headerLangInterpreter: {"x"}, - headerLangInterpreterVendor: {"y"}, - }), otlpProtocolGRPC) + header.Lang: {"go"}, + header.LangVersion: {"1.14"}, + header.LangInterpreter: {"x"}, + header.LangInterpreterVendor: {"y"}, + })) assert.Equal(t, []string{"endpoint_version:opentelemetry_grpc_v1", "lang:go", "lang_version:1.14", "interpreter:x", "lang_vendor:y"}, out) }) } @@ -1266,8 +1235,8 @@ func trimSpaces(str string) string { func BenchmarkProcessRequest(b *testing.B) { metadata := http.Header(map[string][]string{ - headerLang: {"go"}, - headerContainerID: {"containerdID"}, + header.Lang: {"go"}, + header.ContainerID: {"containerdID"}, }) out := make(chan *Payload, 100) end := make(chan struct{}) @@ -1287,7 +1256,7 @@ func BenchmarkProcessRequest(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - r.processRequest(context.Background(), otlpProtocolHTTP, metadata, otlpTestTracesRequest) + r.processRequest(context.Background(), metadata, otlpTestTracesRequest) } b.StopTimer() end <- struct{}{} diff --git a/pkg/trace/api/ratelimiter.go b/pkg/trace/api/ratelimiter.go index f9a1d97f21eba..762ff63b7dbfa 100644 --- a/pkg/trace/api/ratelimiter.go +++ b/pkg/trace/api/ratelimiter.go @@ -162,11 +162,11 @@ func (ps *rateLimiter) Permits(n int64) bool { // // For example: // -// • If [max]=500 and [current]=700, the new rate will be 0.71 (500/700) to slow down the intake. Considering -// we are not rate limiting already ([rate]=1). +// • If [max]=500 and [current]=700, the new rate will be 0.71 (500/700) to slow down the intake. Considering +// we are not rate limiting already ([rate]=1). // -// • If [max]=500 and [current]=700, and we are already rate-limiting at 50% ([rate]=0.5), then the new rate -// will be 0.71 * 0.5 = 0.35 to further reduce the intake. +// • If [max]=500 and [current]=700, and we are already rate-limiting at 50% ([rate]=0.5), then the new rate +// will be 0.71 * 0.5 = 0.35 to further reduce the intake. // // The formula also works backwards to gradually increase the intake once the [current] value is again <= [max]. func computeRateLimitingRate(max, current, rate float64) float64 { diff --git a/pkg/trace/api/responses.go b/pkg/trace/api/responses.go index 08b70d8d933a3..7465fd19f5c51 100644 --- a/pkg/trace/api/responses.go +++ b/pkg/trace/api/responses.go @@ -15,6 +15,7 @@ import ( "go.uber.org/atomic" "github.com/DataDog/datadog-agent/pkg/trace/api/apiutil" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/log" "github.com/DataDog/datadog-agent/pkg/trace/metrics" "github.com/DataDog/datadog-agent/pkg/trace/sampler" @@ -111,7 +112,7 @@ func httpRateByService(ratesVersion string, w http.ResponseWriter, dynConf *samp Rates: currentState.Rates, } if ratesVersion != "" { - w.Header().Set(headerRatesPayloadVersion, currentState.Version) + w.Header().Set(header.RatesPayloadVersion, currentState.Version) if ratesVersion == currentState.Version { _, err = wc.Write([]byte("{}")) return diff --git a/pkg/trace/api/telemetry.go b/pkg/trace/api/telemetry.go index cdbfae5592a71..8b89afa04442c 100644 --- a/pkg/trace/api/telemetry.go +++ b/pkg/trace/api/telemetry.go @@ -15,6 +15,7 @@ import ( "net/url" "time" + "github.com/DataDog/datadog-agent/pkg/trace/api/internal/header" "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/log" "github.com/DataDog/datadog-agent/pkg/trace/metrics" @@ -84,7 +85,7 @@ func (r *HTTPReceiver) telemetryProxyHandler() http.Handler { } if cid := r.containerIDProvider.GetContainerID(req.Context(), req.Header); cid != "" { - req.Header.Set(headerContainerID, cid) + req.Header.Set(header.ContainerID, cid) } else { metrics.Count("datadog.trace_agent.telemetry_proxy.no_container_id_found", 1, []string{}, 1) } diff --git a/pkg/trace/api/version.go b/pkg/trace/api/version.go index cb3268c8dd842..7e5c41558de75 100644 --- a/pkg/trace/api/version.go +++ b/pkg/trace/api/version.go @@ -20,16 +20,51 @@ const ( v03 Version = "v0.3" // v04 - // Traces: msgpack/JSON (Content-Type) slice of traces + returns service sampling ratios + // + // Request: Trace chunks. + // Content-Type: application/msgpack + // Payload: An array of arrays of Span (pkg/trace/pb/span.proto) + // + // Response: Service sampling rates. + // Content-Type: application/json + // Payload: Object mapping span pattern to sample rate. + // + // The response payload is an object whose keys are of the form + // "service:my-service,env:my-env", where "my-service" is the name of the + // affected service, and "my-env" is the name of the relevant deployment + // environment. The value at each key is the sample rate to apply to traces + // beginning with a span that matches the key. + // + // { + // "service:foosvc,env:prod": 0.223443, + // "service:barsvc,env:staging": 0.011249 + // } + // + // There is a special key, "service:,env:", that denotes the sample rate for + // traces that do not match any other key. + // + // { + // "service:foosvc,env:prod": 0.223443, + // "service:barsvc,env:staging": 0.011249, + // "service:,env:": 0.5 + // } + // + // Neither the "service:,env:" key nor any other need be present in the + // response. + // + // {} + // v04 Version = "v0.4" // v05 // - // Content-Type: application/msgpack - // Payload: Traces with strings de-duplicated into a dictionary. - // Response: Service sampling rates. + // Request: Trace chunks with a shared dictionary of strings. + // Content-Type: application/msgpack + // Payload: Traces with strings de-duplicated into a dictionary (see below). // - // The payload is an array containing exactly 2 elements: + // Response: Service sampling rates (see description in v04). + // + // The request payload is an array containing exactly 2 elements: // // 1. An array of all unique strings present in the payload (a dictionary referred to by index). // 2. An array of traces, where each trace is an array of spans. A span is encoded as an array having @@ -76,9 +111,11 @@ const ( // V07 API // - // Content-Type: application/msgpack - // Payload: TracerPayload (pkg/trace/pb/tracer_payload.proto) - // Response: Service sampling rates. + // Request: Tracer Payload. + // Content-Type: application/msgpack + // Payload: TracerPayload (pkg/trace/pb/tracer_payload.proto) + // + // Response: Service sampling rates (see description in v04). // V07 Version = "v0.7" ) diff --git a/pkg/trace/config/config.go b/pkg/trace/config/config.go index 1a44c415386e6..2dd7e2b867769 100644 --- a/pkg/trace/config/config.go +++ b/pkg/trace/config/config.go @@ -46,10 +46,6 @@ type OTLP struct { // BindHost specifies the host to bind the receiver to. BindHost string `mapstructure:"-"` - // HTTPPort specifies the port to use for the plain HTTP receiver. - // If unset (or 0), the receiver will be off. - HTTPPort int `mapstructure:"http_port"` - // GRPCPort specifies the port to use for the plain HTTP receiver. // If unset (or 0), the receiver will be off. GRPCPort int `mapstructure:"grpc_port"` @@ -414,7 +410,7 @@ type AgentConfig struct { MaxCatalogEntries int // RemoteSamplingClient retrieves sampling updates from the remote config backend - RemoteSamplingClient RemoteClient + RemoteSamplingClient RemoteClient `json:"-"` // ContainerTags ... ContainerTags func(cid string) ([]string, error) `json:"-"` diff --git a/pkg/trace/event/processor.go b/pkg/trace/event/processor.go index 105be1e209ae8..730c5b3537db9 100644 --- a/pkg/trace/event/processor.go +++ b/pkg/trace/event/processor.go @@ -22,11 +22,11 @@ type Processor struct { // will be tried in the provided order, with the first one returning an event stopping the chain. // // All extracted APM events are then submitted to sampling. This sampling is 2-fold: -// * A first sampling step is done based on the extraction sampling rate returned by an Extractor. If an Extractor -// returns an event accompanied with a 0.1 extraction rate, then there's a 90% chance that this event will get -// discarded. -// * A max events per second maxEPSSampler is applied to all non-PriorityUserKeep events that survived the first step -// and will ensure that, in average, the total rate of events returned by the processor is not bigger than maxEPS. +// - A first sampling step is done based on the extraction sampling rate returned by an Extractor. If an Extractor +// returns an event accompanied with a 0.1 extraction rate, then there's a 90% chance that this event will get +// discarded. +// - A max events per second maxEPSSampler is applied to all non-PriorityUserKeep events that survived the first step +// and will ensure that, in average, the total rate of events returned by the processor is not bigger than maxEPS. func NewProcessor(extractors []Extractor, maxEPS float64) *Processor { return newProcessor(extractors, newMaxEPSSampler(maxEPS)) } diff --git a/pkg/trace/go.mod b/pkg/trace/go.mod index b29a11366786e..b4a507da08a86 100644 --- a/pkg/trace/go.mod +++ b/pkg/trace/go.mod @@ -10,11 +10,12 @@ go 1.18 replace github.com/docker/distribution => github.com/docker/distribution v2.8.1+incompatible require ( - github.com/DataDog/datadog-agent/pkg/obfuscate v0.42.0-rc.3 - github.com/DataDog/datadog-agent/pkg/otlp/model v0.42.0-rc.3 - github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.42.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/cgroups v0.42.0-rc.3 - github.com/DataDog/datadog-agent/pkg/util/log v0.42.0-rc.3 + github.com/DataDog/datadog-agent/pkg/obfuscate v0.43.0-rc.3 + github.com/DataDog/datadog-agent/pkg/otlp/model v0.43.0-rc.3 + github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.43.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/cgroups v0.43.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/log v0.43.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/pointer v0.43.0-rc.3 github.com/DataDog/datadog-go/v5 v5.1.1 github.com/DataDog/sketches-go v1.4.1 github.com/Microsoft/go-winio v0.5.2 @@ -28,23 +29,22 @@ require ( github.com/stretchr/testify v1.8.1 github.com/tinylib/msgp v1.1.6 github.com/vmihailenco/msgpack/v4 v4.3.12 - go.opentelemetry.io/collector/pdata v0.66.0 - go.opentelemetry.io/collector/semconv v0.66.0 + go.opentelemetry.io/collector/pdata v1.0.0-rc4 + go.opentelemetry.io/collector/semconv v0.70.0 go.uber.org/atomic v1.10.0 - golang.org/x/sys v0.2.0 + golang.org/x/sys v0.4.0 golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba - google.golang.org/grpc v1.51.0 + google.golang.org/grpc v1.52.0 k8s.io/apimachinery v0.23.8 ) require ( - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.42.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.43.0-rc.3 // indirect github.com/DataDog/go-tuf v0.3.0--fix-localmeta-fork // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/containerd/cgroups v1.0.4 // indirect github.com/coreos/go-systemd/v22 v22.3.2 // indirect - github.com/dgraph-io/ristretto v0.1.0 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/docker/go-units v0.4.0 // indirect github.com/dustin/go-humanize v1.0.0 // indirect @@ -58,6 +58,7 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 // indirect + github.com/outcaste-io/ristretto v0.2.0 // indirect github.com/philhofer/fwd v1.1.1 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect @@ -67,12 +68,12 @@ require ( github.com/tklauser/numcpus v0.5.0 // indirect github.com/vmihailenco/tagparser v0.1.2 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect - go.uber.org/multierr v1.8.0 // indirect + go.uber.org/multierr v1.9.0 // indirect golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e // indirect - golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect - golang.org/x/text v0.4.0 // indirect + golang.org/x/net v0.5.0 // indirect + golang.org/x/text v0.6.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd // indirect + google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) @@ -85,5 +86,6 @@ replace ( github.com/DataDog/datadog-agent/pkg/remoteconfig/state => ../remoteconfig/state github.com/DataDog/datadog-agent/pkg/util/cgroups => ../util/cgroups github.com/DataDog/datadog-agent/pkg/util/log => ../util/log + github.com/DataDog/datadog-agent/pkg/util/pointer => ../util/pointer github.com/DataDog/datadog-agent/pkg/util/scrubber => ../util/scrubber ) diff --git a/pkg/trace/go.sum b/pkg/trace/go.sum index 0ac75b7b1d26f..60c6e2e43108f 100644 --- a/pkg/trace/go.sum +++ b/pkg/trace/go.sum @@ -1,5 +1,4 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DataDog/datadog-go/v5 v5.1.1 h1:JLZ6s2K1pG2h9GkvEvMdEGqMDyVLEAccdX5TltWcLMU= github.com/DataDog/datadog-go/v5 v5.1.1/go.mod h1:KhiYb2Badlv9/rofz+OznKoEF5XKTonWyhx5K83AP8E= @@ -14,7 +13,6 @@ github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -26,12 +24,6 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 h1:kHaBemcxl8o/pQ5VM1c8PVE1PubbNx3mjUr09OqWGCs= github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb/go.mod h1:ZjrT6AXHbDs86ZSdt/osfBi5qfexBrKUdONk989Wnk4= github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA= github.com/containerd/cgroups v1.0.4/go.mod h1:nLNQtsF7Sl2HxNebu77i1R0oDlhiTG+kO4JTrUzo6IA= @@ -41,8 +33,6 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= -github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= @@ -53,11 +43,7 @@ github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4 github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/flynn/go-docopt v0.0.0-20140912013429-f6dd2ebbb31e/go.mod h1:HyVoz1Mz5Co8TFO8EupIdlcpwShBmY98dkT2xeHkvEI= @@ -89,7 +75,6 @@ github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+Licev github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= @@ -98,7 +83,6 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= @@ -107,7 +91,6 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -125,7 +108,6 @@ github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2c github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -175,6 +157,8 @@ github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAl github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/outcaste-io/ristretto v0.2.0 h1:47w059XTZWFt01OucwjcBt8mEa3VUUhntUWEfmgVBFc= +github.com/outcaste-io/ristretto v0.2.0/go.mod h1:iBZA7RCt6jaOr0z6hiBQ6t662/oZ6Gx/yauuPvIWHAI= github.com/philhofer/fwd v1.1.1 h1:GdGcTjf5RNAxwS4QLsiMzJYj5KEvPJD3Abr261yRQXQ= github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -185,7 +169,6 @@ github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:Om github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c h1:NRoLoZvkBTKvR5gQLgA3e0hqjkY9u1wm+iOL45VN/qI= github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/secure-systems-lab/go-securesystemslib v0.3.1/go.mod h1:o8hhjkbNl2gOamKUA/eNW3xUrntHT9L4W89W1nfj43U= @@ -229,16 +212,14 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -go.opentelemetry.io/collector/pdata v0.66.0 h1:UdE5U6MsDNzuiWaXdjGx2lC3ElVqWmN/hiUE8vyvSuM= -go.opentelemetry.io/collector/pdata v0.66.0/go.mod h1:pqyaznLzk21m+1KL6fwOsRryRELL+zNM0qiVSn0MbVc= -go.opentelemetry.io/collector/semconv v0.66.0 h1:gz4fYzOVOt1EQCcOL6pbSmTRj93pZErjHD+H100pH+4= -go.opentelemetry.io/collector/semconv v0.66.0/go.mod h1:5o9yhOa+ABt7g2E5JABDxGZ1PQPbtfxrKNbYn+LOTXU= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.opentelemetry.io/collector/pdata v1.0.0-rc4 h1:vIQHHiaDqvTM3I30j3PDo44ttkv9n8prroe4G+RsUe0= +go.opentelemetry.io/collector/pdata v1.0.0-rc4/go.mod h1:ft/11i2R6Ld/DC543bAS4R30/W8heexIvNqtzmQpnLQ= +go.opentelemetry.io/collector/semconv v0.70.0 h1:zuito4A9yoB5v+4M7GnwMBNcQdfhutHeysDAkTaGJjw= +go.opentelemetry.io/collector/semconv v0.70.0/go.mod h1:UAp+qAMqEXOD0eEBmWJ3IJ5+LkF7zVTgmfufwpHmL8w= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI= +go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -255,7 +236,6 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -266,20 +246,17 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -301,7 +278,6 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -312,8 +288,8 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -322,8 +298,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -350,20 +326,15 @@ google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6 google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd h1:e0TwkXOdbnH/1x5rc5MZ/VYyiZ4v+RdVfrGMqEwT68I= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 h1:a2S6M0+660BgMNl++4JPlcAO/CjkqYItDEZwkoDQK7c= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.52.0 h1:kd48UiU7EHsV4rnLyOJRuP/Il/UHE7gdDAQ+SZI7nZk= +google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -373,7 +344,6 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= @@ -392,7 +362,6 @@ gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/pkg/trace/pb/decoder_v05.go b/pkg/trace/pb/decoder_v05.go index dfdeec54377f6..01ffae1bdc4a3 100644 --- a/pkg/trace/pb/decoder_v05.go +++ b/pkg/trace/pb/decoder_v05.go @@ -42,6 +42,9 @@ func (t *Traces) UnmarshalMsgDictionary(bts []byte) error { if sz, bts, err = msgp.ReadArrayHeaderBytes(bts); err != nil { return err } + if sz > 25*1e6 { // Dictionary can't be larger than 25 MB + return errors.New("too long payload") + } dict := make([]string, sz) for i := range dict { var str string @@ -152,6 +155,9 @@ func (z *Span) UnmarshalMsgDictionary(bts []byte, dict []string) ([]byte, error) if err != nil { return bts, err } + if sz > 25*1e6 { // Dictionary can't be larger than 25 MB + return bts, errors.New("too long payload") + } if z.Meta == nil && sz > 0 { z.Meta = make(map[string]string, sz) } else if len(z.Meta) > 0 { diff --git a/pkg/trace/pb/decoder_v05_test.go b/pkg/trace/pb/decoder_v05_test.go index aa895a4582ef1..c94fd5aafd2b6 100644 --- a/pkg/trace/pb/decoder_v05_test.go +++ b/pkg/trace/pb/decoder_v05_test.go @@ -80,6 +80,20 @@ func TestUnmarshalMsgDictionary(t *testing.T) { }) } +func TestUnmarshalMsgDictionaryLimitsSize(t *testing.T) { + ps := [][]byte{ + []byte("\x9e\xdd\xff\xff\xff\xff"), + []byte("\x96\x97\xa40000\xa6000000\xa6000000\xa6000000\xa6000000\xa6000000\xa6000000\x96\x94\x9c\x00\x00\x0000\xd100000\xdf0000"), + } + for _, p := range ps { + t.Run("", func(t *testing.T) { + var traces Traces + err := traces.UnmarshalMsgDictionary(p) + assert.EqualError(t, err, "too long payload") + }) + } +} + var benchOut Traces func BenchmarkUnmarshalMsgDictionary(b *testing.B) { diff --git a/pkg/trace/remoteconfighandler/mock_remote_client.go b/pkg/trace/remoteconfighandler/mock_remote_client.go index 77ac2f5c7e27c..0e2cc56754bba 100644 --- a/pkg/trace/remoteconfighandler/mock_remote_client.go +++ b/pkg/trace/remoteconfighandler/mock_remote_client.go @@ -4,67 +4,67 @@ package remoteconfighandler import ( - reflect "reflect" + reflect "reflect" - state "github.com/DataDog/datadog-agent/pkg/remoteconfig/state" - gomock "github.com/golang/mock/gomock" + state "github.com/DataDog/datadog-agent/pkg/remoteconfig/state" + gomock "github.com/golang/mock/gomock" ) // MockRemoteClient is a mock of RemoteClient interface. type MockRemoteClient struct { - ctrl *gomock.Controller - recorder *MockRemoteClientMockRecorder + ctrl *gomock.Controller + recorder *MockRemoteClientMockRecorder } // MockRemoteClientMockRecorder is the mock recorder for MockRemoteClient. type MockRemoteClientMockRecorder struct { - mock *MockRemoteClient + mock *MockRemoteClient } // NewMockRemoteClient creates a new mock instance. func NewMockRemoteClient(ctrl *gomock.Controller) *MockRemoteClient { - mock := &MockRemoteClient{ctrl: ctrl} - mock.recorder = &MockRemoteClientMockRecorder{mock} - return mock + mock := &MockRemoteClient{ctrl: ctrl} + mock.recorder = &MockRemoteClientMockRecorder{mock} + return mock } // EXPECT returns an object that allows the caller to indicate expected use. func (m *MockRemoteClient) EXPECT() *MockRemoteClientMockRecorder { - return m.recorder + return m.recorder } // Close mocks base method. func (m *MockRemoteClient) Close() { - m.ctrl.T.Helper() - m.ctrl.Call(m, "Close") + m.ctrl.T.Helper() + m.ctrl.Call(m, "Close") } // Close indicates an expected call of Close. func (mr *MockRemoteClientMockRecorder) Close() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockRemoteClient)(nil).Close)) + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockRemoteClient)(nil).Close)) } // RegisterAPMUpdate mocks base method. func (m *MockRemoteClient) RegisterAPMUpdate(arg0 func(map[string]state.APMSamplingConfig)) { - m.ctrl.T.Helper() - m.ctrl.Call(m, "RegisterAPMUpdate", arg0) + m.ctrl.T.Helper() + m.ctrl.Call(m, "RegisterAPMUpdate", arg0) } // RegisterAPMUpdate indicates an expected call of RegisterAPMUpdate. func (mr *MockRemoteClientMockRecorder) RegisterAPMUpdate(arg0 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterAPMUpdate", reflect.TypeOf((*MockRemoteClient)(nil).RegisterAPMUpdate), arg0) + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RegisterAPMUpdate", reflect.TypeOf((*MockRemoteClient)(nil).RegisterAPMUpdate), arg0) } // Start mocks base method. func (m *MockRemoteClient) Start() { - m.ctrl.T.Helper() - m.ctrl.Call(m, "Start") + m.ctrl.T.Helper() + m.ctrl.Call(m, "Start") } // Start indicates an expected call of Start. func (mr *MockRemoteClientMockRecorder) Start() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Start", reflect.TypeOf((*MockRemoteClient)(nil).Start)) -} \ No newline at end of file + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Start", reflect.TypeOf((*MockRemoteClient)(nil).Start)) +} diff --git a/pkg/trace/remoteconfighandler/remote_config_handler_test.go b/pkg/trace/remoteconfighandler/remote_config_handler_test.go index 11160d031b360..21cc52bc9c8b3 100644 --- a/pkg/trace/remoteconfighandler/remote_config_handler_test.go +++ b/pkg/trace/remoteconfighandler/remote_config_handler_test.go @@ -12,6 +12,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/remoteconfig/state" "github.com/DataDog/datadog-agent/pkg/remoteconfig/state/products/apmsampling" "github.com/DataDog/datadog-agent/pkg/trace/config" + "github.com/DataDog/datadog-agent/pkg/util/pointer" "github.com/golang/mock/gomock" "github.com/stretchr/testify/assert" ) @@ -51,7 +52,7 @@ func TestPrioritySampler(t *testing.T) { payload := apmsampling.SamplerConfig{ AllEnvs: apmsampling.SamplerEnvConfig{ - PrioritySamplerTargetTPS: floatPointer(42), + PrioritySamplerTargetTPS: pointer.Ptr(42.0), }, } @@ -81,7 +82,7 @@ func TestErrorsSampler(t *testing.T) { payload := apmsampling.SamplerConfig{ AllEnvs: apmsampling.SamplerEnvConfig{ - ErrorsSamplerTargetTPS: floatPointer(42), + ErrorsSamplerTargetTPS: pointer.Ptr(42.0), }, } @@ -111,7 +112,7 @@ func TestRareSampler(t *testing.T) { payload := apmsampling.SamplerConfig{ AllEnvs: apmsampling.SamplerEnvConfig{ - RareSamplerEnabled: boolPointer(false), + RareSamplerEnabled: pointer.Ptr(false), }, } @@ -141,16 +142,16 @@ func TestEnvPrecedence(t *testing.T) { payload := apmsampling.SamplerConfig{ AllEnvs: apmsampling.SamplerEnvConfig{ - PrioritySamplerTargetTPS: floatPointer(42), - ErrorsSamplerTargetTPS: floatPointer(42), - RareSamplerEnabled: boolPointer(true), + PrioritySamplerTargetTPS: pointer.Ptr(42.0), + ErrorsSamplerTargetTPS: pointer.Ptr(42.0), + RareSamplerEnabled: pointer.Ptr(true), }, ByEnv: []apmsampling.EnvAndConfig{{ Env: "agent-env", Config: apmsampling.SamplerEnvConfig{ - PrioritySamplerTargetTPS: floatPointer(43), - ErrorsSamplerTargetTPS: floatPointer(43), - RareSamplerEnabled: boolPointer(false), + PrioritySamplerTargetTPS: pointer.Ptr(43.0), + ErrorsSamplerTargetTPS: pointer.Ptr(43.0), + RareSamplerEnabled: pointer.Ptr(false), }, }}, } @@ -168,11 +169,3 @@ func TestEnvPrecedence(t *testing.T) { ctrl.Finish() } - -func floatPointer(f float64) *float64 { - return &f -} - -func boolPointer(b bool) *bool { - return &b -} diff --git a/pkg/trace/sampler/spansampler_test.go b/pkg/trace/sampler/spansampler_test.go index 90c0ea12fdc72..7a1b93c1b3ae0 100644 --- a/pkg/trace/sampler/spansampler_test.go +++ b/pkg/trace/sampler/spansampler_test.go @@ -50,10 +50,10 @@ func TestNoTagNoTouch(t *testing.T) { // TestTagCausesInPlaceFilterAndKeep verifies that the presence of a span // sampling tag in any of the spans passed to ApplySpanSampling causes the // argument of ApplySpanSampling to be modified in the following ways: -// - The chunk is filtered to contain only those spans that have the span -// sampling tag. -// - The chunk's sampling priority is PriorityUserKeep. -// - The chunk is not marked as dropped. +// - The chunk is filtered to contain only those spans that have the span +// sampling tag. +// - The chunk's sampling priority is PriorityUserKeep. +// - The chunk is not marked as dropped. func TestTagCausesInPlaceFilterAndKeep(t *testing.T) { // spanSamplingMetrics returns a map of numeric tags that contains the span // sampling metric (numeric tag) that tracers use to indicate that the span diff --git a/pkg/trace/telemetry/collector.go b/pkg/trace/telemetry/collector.go new file mode 100644 index 0000000000000..5bf6726d2e7e1 --- /dev/null +++ b/pkg/trace/telemetry/collector.go @@ -0,0 +1,177 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package telemetry + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + + "github.com/DataDog/datadog-agent/pkg/trace/config" + + "go.uber.org/atomic" +) + +// Error codes associated with each startup error +// The full list, and associated description is contained in the Tracking APM Onboarding RFC +const ( + GenericError = 1 + CantCreateLogger = 8 + TraceAgentNotEnabled = 9 + CantWritePIDFile = 10 + CantSetupAutoExit = 11 + CantConfigureDogstatsd = 12 + CantCreateRCCLient = 13 + CantStartHttpServer = 14 + CantStartUdsServer = 15 + CantStartWindowsPipeServer = 16 + InvalidIntakeEndpoint = 17 +) + +// OnboardingEvent contains +type OnboardingEvent struct { + RequestType string `json:"request_type"` + ApiVersion string `json:"api_version"` + Payload OnboardingEventPayload `json:"payload,omitempty"` +} + +// OnboardingEventPayload ... +type OnboardingEventPayload struct { + EventName string `json:"event_name"` + Tags OnboardingEventTags `json:"tags"` + Error OnboardingEventError `json:"error,omitempty"` +} + +// OnboardingEventTags ... +type OnboardingEventTags struct { + AgentPlatform string `json:"agent_platform,omitempty"` + AgentVersion string `json:"agent_version,omitempty"` + AgentHostname string `json:"agent_hostname,omitempty"` + Env string `json:"env,omitempty"` +} + +// OnboardingEventError ... +type OnboardingEventError struct { + Code int `json:"code,omitempty"` + Message string `json:"message,omitempty"` +} + +// TelemetryCollector is the interface used to send reports about startup to the instrumentation telemetry intake +type TelemetryCollector interface { + SendStartupSuccess() + SendStartupError(code int, err error) +} + +type telemetryCollector struct { + client *config.ResetClient + + endpoints []config.Endpoint + userAgent string + cfg *config.AgentConfig + collectedStartupError *atomic.Bool +} + +// NewCollector returns either collector, or a noop implementation if instrumentation telemetry is disabled +func NewCollector(cfg *config.AgentConfig) TelemetryCollector { + if !cfg.TelemetryConfig.Enabled { + return &noopTelemetryCollector{} + } + + var endpoints []config.Endpoint + for _, endpoint := range cfg.TelemetryConfig.Endpoints { + u, err := url.Parse(endpoint.Host) + if err != nil { + continue + } + u.Path = "/api/v2/apmtelemetry" + endpointWithPath := *endpoint + endpointWithPath.Host = u.String() + + endpoints = append(endpoints, endpointWithPath) + } + + return &telemetryCollector{ + client: cfg.NewHTTPClient(), + endpoints: endpoints, + userAgent: fmt.Sprintf("Datadog Trace Agent/%s/%s", cfg.AgentVersion, cfg.GitCommit), + + cfg: cfg, + collectedStartupError: &atomic.Bool{}, + } +} + +// NewNoopCollector returns a noop collector +func NewNoopCollector() TelemetryCollector { + return &noopTelemetryCollector{} +} + +func (f *telemetryCollector) sendEvent(event *OnboardingEvent) { + body, err := json.Marshal(event) + if err != nil { + return + } + bodyLen := strconv.Itoa(len(body)) + for _, endpoint := range f.endpoints { + fmt.Println(endpoint) + req, err := http.NewRequest("POST", endpoint.Host, bytes.NewReader(body)) + if err != nil { + continue + } + req.Header.Add("Content-Type", "application/json") + req.Header.Add("User-Agent", f.userAgent) + req.Header.Add("DD-Api-Key", endpoint.APIKey) + req.Header.Add("Content-Length", bodyLen) + + resp, err := f.client.Do(req) + if err != nil { + continue + } + // Unconditionally read the body and ignore any errors + _, _ = io.Copy(io.Discard, resp.Body) + resp.Body.Close() + } +} + +func newOnboardingTelemetryPayload(config *config.AgentConfig) OnboardingEvent { + return OnboardingEvent{ + RequestType: "apm-onboarding-event", + ApiVersion: "v1", + Payload: OnboardingEventPayload{ + Tags: OnboardingEventTags{ + AgentVersion: config.AgentVersion, + AgentHostname: config.Hostname, + Env: config.DefaultEnv, + }, + }, + } +} + +func (f *telemetryCollector) SendStartupSuccess() { + if f.collectedStartupError.Load() { + return + } + ev := newOnboardingTelemetryPayload(f.cfg) + ev.Payload.EventName = "agent.startup.success" + f.sendEvent(&ev) +} + +func (f *telemetryCollector) SendStartupError(code int, err error) { + f.collectedStartupError.Store(true) + ev := newOnboardingTelemetryPayload(f.cfg) + ev.Payload.EventName = "agent.startup.error" + ev.Payload.Error.Code = code + ev.Payload.Error.Message = err.Error() + f.sendEvent(&ev) +} + +type noopTelemetryCollector struct{} + +func (*noopTelemetryCollector) SendStartupSuccess() {} +func (*noopTelemetryCollector) SendStartupError(code int, err error) {} diff --git a/pkg/trace/telemetry/collector_test.go b/pkg/trace/telemetry/collector_test.go new file mode 100644 index 0000000000000..23e055f037af9 --- /dev/null +++ b/pkg/trace/telemetry/collector_test.go @@ -0,0 +1,181 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package telemetry + +import ( + "encoding/json" + "fmt" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/DataDog/datadog-agent/pkg/trace/config" + "github.com/stretchr/testify/assert" +) + +func testCfg(serverUrl string) *config.AgentConfig { + cfg := config.New() + cfg.TelemetryConfig.Endpoints[0].Host = serverUrl + cfg.TelemetryConfig.Enabled = true + return cfg +} + +func TestTelemetryDisabled(t *testing.T) { + server := newTestServer() + defer server.Close() + + cfg := testCfg(server.URL) + cfg.TelemetryConfig.Enabled = false + + collector := NewCollector(cfg) + + server.assertReq = func(req *http.Request) { + t.Fail() + } + collector.SendStartupError(GenericError, fmt.Errorf("")) + collector.SendStartupSuccess() +} + +func TestTelemetryPath(t *testing.T) { + server := newTestServer() + defer server.Close() + + cfg := testCfg(server.URL) + collector := NewCollector(cfg) + + var reqCount int + var path string + server.assertReq = func(req *http.Request) { + reqCount += 1 + path = req.URL.Path + } + + collector.SendStartupError(GenericError, fmt.Errorf("")) + collector.SendStartupSuccess() + + assert.Equal(t, 1, reqCount) + assert.Equal(t, "/api/v2/apmtelemetry", path) +} + +func TestNoSuccessAfterError(t *testing.T) { + server := newTestServer() + defer server.Close() + + cfg := testCfg(server.URL) + collector := NewCollector(cfg) + + var eventName string + var reqCount int + + server.assertReq = func(req *http.Request) { + reqCount += 1 + body, err := io.ReadAll(req.Body) + assert.NoError(t, err) + ev := OnboardingEvent{} + err = json.Unmarshal(body, &ev) + assert.NoError(t, err) + eventName = ev.Payload.EventName + } + + collector.SendStartupError(GenericError, fmt.Errorf("")) + collector.SendStartupSuccess() + + assert.Equal(t, 1, reqCount) + assert.Equal(t, "agent.startup.error", eventName) +} + +func TestErrorAfterSuccess(t *testing.T) { + server := newTestServer() + defer server.Close() + + cfg := testCfg(server.URL) + collector := NewCollector(cfg) + + var eventNames []string + var reqCount int + + server.assertReq = func(req *http.Request) { + reqCount += 1 + body, err := io.ReadAll(req.Body) + assert.NoError(t, err) + ev := OnboardingEvent{} + err = json.Unmarshal(body, &ev) + assert.NoError(t, err) + eventNames = append(eventNames, ev.Payload.EventName) + } + + collector.SendStartupSuccess() + collector.SendStartupError(GenericError, fmt.Errorf("")) + + assert.Equal(t, 2, reqCount) + assert.Equal(t, "agent.startup.success", eventNames[0]) + assert.Equal(t, "agent.startup.error", eventNames[1]) +} + +func TestDualShipping(t *testing.T) { + server := newTestServer() + defer server.Close() + + server2 := newTestServer() + defer server2.Close() + + cfg := testCfg(server.URL) + cfg.TelemetryConfig.Endpoints = append(cfg.TelemetryConfig.Endpoints, &config.Endpoint{Host: server2.URL}) + + collector := NewCollector(cfg) + + var body, body2 []byte + var reqCount, reqCount2 int + + server.assertReq = func(req *http.Request) { + reqCount += 1 + b, err := io.ReadAll(req.Body) + assert.NoError(t, err) + body = b + } + server2.assertReq = func(req *http.Request) { + reqCount2 += 1 + b, err := io.ReadAll(req.Body) + assert.NoError(t, err) + body2 = b + } + + collector.SendStartupSuccess() + + assert.Equal(t, 1, reqCount) + assert.Equal(t, reqCount, reqCount2) + assert.Equal(t, body, body2) +} + +type testServer struct { + server *httptest.Server + URL string + assertReq func(*http.Request) +} + +func newTestServer() *testServer { + srv := &testServer{} + srv.server = httptest.NewServer(srv) + srv.URL = srv.server.URL + return srv +} + +// ServeHTTP responds based on the request body. +func (ts *testServer) ServeHTTP(w http.ResponseWriter, req *http.Request) { + if ts.assertReq != nil { + ts.assertReq(req) + } + _, err := io.ReadAll(req.Body) + if err != nil { + panic(fmt.Sprintf("error reading request body: %v", err)) + } + req.Body.Close() + w.WriteHeader(202) +} + +// Close closes the underlying http.Server. +func (ts *testServer) Close() { ts.server.Close() } diff --git a/pkg/trace/testutil/span.go b/pkg/trace/testutil/span.go index 8474576e4b060..2dadd727863d7 100644 --- a/pkg/trace/testutil/span.go +++ b/pkg/trace/testutil/span.go @@ -225,7 +225,13 @@ func int32RandomChoice(s []int32) int32 { } func stringRandomChoice(s []string) string { - return randomChoice(stringSlice(s)).(string) + got := randomChoice(stringSlice(s)).(string) + runes := []rune(got) + rand.Shuffle(len(runes), func(x, y int) { + // Add more randomization by shuffling the characters + runes[x], runes[y] = runes[y], runes[x] + }) + return string(runes) } // RandomSpanDuration generates a random span duration diff --git a/pkg/trace/testutil/trace.go b/pkg/trace/testutil/trace.go index f36b1f107a918..5c5f8b5889ca4 100644 --- a/pkg/trace/testutil/trace.go +++ b/pkg/trace/testutil/trace.go @@ -97,8 +97,8 @@ func RandomTraceChunk(maxLevels, maxSpans int) *pb.TraceChunk { } } -// GetTestTraces returns a []Trace that is composed by ``traceN`` number -// of traces, each one composed by ``size`` number of spans. +// GetTestTraces returns a []Trace that is composed by “traceN“ number +// of traces, each one composed by “size“ number of spans. func GetTestTraces(traceN, size int, realisticIDs bool) pb.Traces { traces := pb.Traces{} @@ -127,8 +127,8 @@ func GetTestTraces(traceN, size int, realisticIDs bool) pb.Traces { return traces } -// GetTestTraceChunks returns a []TraceChunk that is composed by ``traceN`` number -// of traces, each one composed by ``size`` number of spans. +// GetTestTraceChunks returns a []TraceChunk that is composed by “traceN“ number +// of traces, each one composed by “size“ number of spans. func GetTestTraceChunks(traceN, size int, realisticIDs bool) []*pb.TraceChunk { traces := GetTestTraces(traceN, size, realisticIDs) traceChunks := make([]*pb.TraceChunk, 0, len(traces)) diff --git a/pkg/trace/traceutil/trace.go b/pkg/trace/traceutil/trace.go index 2c340adfd2e03..3f2058377cb60 100644 --- a/pkg/trace/traceutil/trace.go +++ b/pkg/trace/traceutil/trace.go @@ -108,11 +108,11 @@ func ChildrenMap(t pb.Trace) map[uint64][]*pb.Span { // ComputeTopLevel updates all the spans top-level attribute. // // A span is considered top-level if: -// - it's a root span -// - OR its parent is unknown (other part of the code, distributed trace) -// - OR its parent belongs to another service (in that case it's a "local root" -// being the highest ancestor of other spans belonging to this service and -// attached to it). +// - it's a root span +// - OR its parent is unknown (other part of the code, distributed trace) +// - OR its parent belongs to another service (in that case it's a "local root" +// being the highest ancestor of other spans belonging to this service and +// attached to it). func ComputeTopLevel(trace pb.Trace) { spanIDToIndex := make(map[uint64]int, len(trace)) for i, span := range trace { diff --git a/pkg/trace/writer/sender.go b/pkg/trace/writer/sender.go index d8cdbecf0d61a..02db7814ed8ca 100644 --- a/pkg/trace/writer/sender.go +++ b/pkg/trace/writer/sender.go @@ -23,11 +23,12 @@ import ( "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/log" + "github.com/DataDog/datadog-agent/pkg/trace/telemetry" ) // newSenders returns a list of senders based on the given agent configuration, using climit // as the maximum number of concurrent outgoing connections, writing to path. -func newSenders(cfg *config.AgentConfig, r eventRecorder, path string, climit, qsize int) []*sender { +func newSenders(cfg *config.AgentConfig, r eventRecorder, path string, climit, qsize int, telemetryCollector telemetry.TelemetryCollector) []*sender { if e := cfg.Endpoints; len(e) == 0 || e[0].Host == "" || e[0].APIKey == "" { panic(errors.New("config was not properly validated")) } @@ -37,6 +38,7 @@ func newSenders(cfg *config.AgentConfig, r eventRecorder, path string, climit, q for i, endpoint := range cfg.Endpoints { url, err := url.Parse(endpoint.Host + path) if err != nil { + telemetryCollector.SendStartupError(telemetry.InvalidIntakeEndpoint, err) log.Criticalf("Invalid host endpoint: %q", endpoint.Host) os.Exit(1) } @@ -475,7 +477,9 @@ const ( // backoffDuration returns the backoff duration necessary for the given attempt. // The formula is "Full Jitter": -// random_between(0, min(cap, base * 2 ** attempt)) +// +// random_between(0, min(cap, base * 2 ** attempt)) +// // https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/ var backoffDuration = func(attempt int) time.Duration { if attempt == 0 { diff --git a/pkg/trace/writer/stats.go b/pkg/trace/writer/stats.go index e4907f766cc96..f7e8571c98a65 100644 --- a/pkg/trace/writer/stats.go +++ b/pkg/trace/writer/stats.go @@ -19,6 +19,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/trace/metrics" "github.com/DataDog/datadog-agent/pkg/trace/metrics/timing" "github.com/DataDog/datadog-agent/pkg/trace/pb" + "github.com/DataDog/datadog-agent/pkg/trace/telemetry" "github.com/tinylib/msgp/msgp" ) @@ -54,7 +55,7 @@ type StatsWriter struct { } // NewStatsWriter returns a new StatsWriter. It must be started using Run. -func NewStatsWriter(cfg *config.AgentConfig, in <-chan pb.StatsPayload) *StatsWriter { +func NewStatsWriter(cfg *config.AgentConfig, in <-chan pb.StatsPayload, telemetryCollector telemetry.TelemetryCollector) *StatsWriter { sw := &StatsWriter{ in: in, stats: &info.StatsWriterInfo{}, @@ -82,7 +83,7 @@ func NewStatsWriter(cfg *config.AgentConfig, in <-chan pb.StatsPayload) *StatsWr qsize = int(math.Max(1, maxmem/payloadSize)) } log.Debugf("Stats writer initialized (climit=%d qsize=%d)", climit, qsize) - sw.senders = newSenders(cfg, sw, pathStats, climit, qsize) + sw.senders = newSenders(cfg, sw, pathStats, climit, qsize, telemetryCollector) return sw } diff --git a/pkg/trace/writer/stats_test.go b/pkg/trace/writer/stats_test.go index 79a7f65bbee2c..ae5c86a450046 100644 --- a/pkg/trace/writer/stats_test.go +++ b/pkg/trace/writer/stats_test.go @@ -18,6 +18,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/trace/info" "github.com/DataDog/datadog-agent/pkg/trace/pb" "github.com/DataDog/datadog-agent/pkg/trace/stats" + "github.com/DataDog/datadog-agent/pkg/trace/telemetry" "github.com/DataDog/datadog-agent/pkg/trace/testutil" "github.com/stretchr/testify/assert" @@ -286,7 +287,7 @@ func testStatsWriter() (*StatsWriter, chan pb.StatsPayload, *testServer) { StatsWriter: &config.WriterConfig{ConnectionLimit: 20, QueueSize: 20}, ContainerTags: func(cid string) ([]string, error) { return nil, nil }, } - return NewStatsWriter(cfg, in), in, srv + return NewStatsWriter(cfg, in, telemetry.NewNoopCollector()), in, srv } func testStatsSyncWriter() (*StatsWriter, chan pb.StatsPayload, *testServer) { @@ -299,7 +300,7 @@ func testStatsSyncWriter() (*StatsWriter, chan pb.StatsPayload, *testServer) { StatsWriter: &config.WriterConfig{ConnectionLimit: 20, QueueSize: 20}, SynchronousFlushing: true, } - return NewStatsWriter(cfg, in), in, srv + return NewStatsWriter(cfg, in, telemetry.NewNoopCollector()), in, srv } type key struct { diff --git a/pkg/trace/writer/trace.go b/pkg/trace/writer/trace.go index bf5205803f156..05d9b793d2ab2 100644 --- a/pkg/trace/writer/trace.go +++ b/pkg/trace/writer/trace.go @@ -19,6 +19,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/trace/metrics" "github.com/DataDog/datadog-agent/pkg/trace/metrics/timing" "github.com/DataDog/datadog-agent/pkg/trace/pb" + "github.com/DataDog/datadog-agent/pkg/trace/telemetry" "github.com/gogo/protobuf/proto" ) @@ -81,7 +82,7 @@ type TraceWriter struct { // NewTraceWriter returns a new TraceWriter. It is created for the given agent configuration and // will accept incoming spans via the in channel. -func NewTraceWriter(cfg *config.AgentConfig, prioritySampler samplerTPSReader, errorsSampler samplerTPSReader, rareSampler samplerEnabledReader) *TraceWriter { +func NewTraceWriter(cfg *config.AgentConfig, prioritySampler samplerTPSReader, errorsSampler samplerTPSReader, rareSampler samplerEnabledReader, telemetryCollector telemetry.TelemetryCollector) *TraceWriter { tw := &TraceWriter{ In: make(chan *SampledChunks, 1000), prioritySampler: prioritySampler, @@ -118,7 +119,7 @@ func NewTraceWriter(cfg *config.AgentConfig, prioritySampler samplerTPSReader, e tw.tick = time.Duration(s*1000) * time.Millisecond } log.Debugf("Trace writer initialized (climit=%d qsize=%d)", climit, qsize) - tw.senders = newSenders(cfg, tw, pathTraces, climit, qsize) + tw.senders = newSenders(cfg, tw, pathTraces, climit, qsize, telemetryCollector) return tw } diff --git a/pkg/trace/writer/trace_test.go b/pkg/trace/writer/trace_test.go index 710e2fe2b7512..708ac753df167 100644 --- a/pkg/trace/writer/trace_test.go +++ b/pkg/trace/writer/trace_test.go @@ -19,6 +19,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/trace/config" "github.com/DataDog/datadog-agent/pkg/trace/pb" + "github.com/DataDog/datadog-agent/pkg/trace/telemetry" "github.com/DataDog/datadog-agent/pkg/trace/testutil" ) @@ -59,7 +60,7 @@ func TestTraceWriter(t *testing.T) { // Use a flush threshold that allows the first two entries to not overflow, // but overflow on the third. defer useFlushThreshold(testSpans[0].Size + testSpans[1].Size + 10)() - tw := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler) + tw := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler, telemetry.NewNoopCollector()) tw.In = make(chan *SampledChunks) go tw.Run() for _, ss := range testSpans { @@ -100,7 +101,7 @@ func TestTraceWriterMultipleEndpointsConcurrent(t *testing.T) { randomSampledSpans(10, 0), randomSampledSpans(40, 5), } - tw := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler) + tw := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler, telemetry.NewNoopCollector()) tw.In = make(chan *SampledChunks, 100) go tw.Run() @@ -193,7 +194,7 @@ func TestTraceWriterFlushSync(t *testing.T) { randomSampledSpans(10, 0), randomSampledSpans(40, 5), } - tw := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler) + tw := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler, telemetry.NewNoopCollector()) go tw.Run() for _, ss := range testSpans { tw.In <- ss @@ -221,7 +222,7 @@ func TestResetBuffer(t *testing.T) { SynchronousFlushing: true, } - w := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler) + w := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler, telemetry.NewNoopCollector()) runtime.GC() var m runtime.MemStats @@ -262,7 +263,7 @@ func TestTraceWriterSyncStop(t *testing.T) { randomSampledSpans(10, 0), randomSampledSpans(40, 5), } - tw := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler) + tw := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler, telemetry.NewNoopCollector()) go tw.Run() for _, ss := range testSpans { tw.In <- ss @@ -290,7 +291,7 @@ func TestTraceWriterSyncNoop(t *testing.T) { SynchronousFlushing: false, } t.Run("ok", func(t *testing.T) { - tw := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler) + tw := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler, telemetry.NewNoopCollector()) err := tw.FlushSync() assert.NotNil(t, err) }) @@ -328,7 +329,7 @@ func TestTraceWriterAgentPayload(t *testing.T) { } t.Run("static TPS config", func(t *testing.T) { - tw := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler) + tw := NewTraceWriter(cfg, mockSampler, mockSampler, mockSampler, telemetry.NewNoopCollector()) go tw.Run() defer tw.Stop() sendRandomSpanAndFlush(t, tw) @@ -340,7 +341,7 @@ func TestTraceWriterAgentPayload(t *testing.T) { errorSampler := &MockSampler{TargetTPS: 6} rareSampler := &MockSampler{Enabled: false} - tw := NewTraceWriter(cfg, prioritySampler, errorSampler, rareSampler) + tw := NewTraceWriter(cfg, prioritySampler, errorSampler, rareSampler, telemetry.NewNoopCollector()) go tw.Run() defer tw.Stop() sendRandomSpanAndFlush(t, tw) diff --git a/pkg/util/aggregatingqueue/queue.go b/pkg/util/aggregatingqueue/queue.go new file mode 100644 index 0000000000000..84407ff2150e0 --- /dev/null +++ b/pkg/util/aggregatingqueue/queue.go @@ -0,0 +1,78 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package queue + +import ( + "github.com/benbjohnson/clock" +) + +type queue[T any] struct { + clock clock.Clock + maxNbItem int + maxRetentionTime clock.Duration + flushCB func([]T) + enqueueCh chan T + data []T + timer *clock.Timer +} + +// NewQueue returns a chan to enqueue elements +// The flushCB function will be called with a slice of elements as soon as +// * either maxNbItem elements have been enqueued since the last flush +// * or maxRetentionTime has elapsed since the first element has been enqueued after the last flush. +func NewQueue[T any](maxNbItem int, maxRetentionTime clock.Duration, flushCB func([]T)) chan T { + return newQueue(maxNbItem, maxRetentionTime, flushCB, clock.New()) +} + +func newQueue[T any](maxNbItem int, maxRetentionTime clock.Duration, flushCB func([]T), cl clock.Clock) chan T { + q := queue[T]{ + clock: cl, + maxNbItem: maxNbItem, + maxRetentionTime: maxRetentionTime, + flushCB: flushCB, + enqueueCh: make(chan T), + data: make([]T, 0, maxNbItem), + timer: cl.Timer(maxRetentionTime), + } + + if !q.timer.Stop() { + <-q.timer.C + } + + go func() { + for { + select { + case <-q.timer.C: + q.flush() + case elem, more := <-q.enqueueCh: + if !more { + return + } + q.enqueue(elem) + } + } + }() + + return q.enqueueCh +} + +func (q *queue[T]) enqueue(elem T) { + if len(q.data) == 0 { + q.timer.Reset(q.maxRetentionTime) + } + + q.data = append(q.data, elem) + + if len(q.data) == q.maxNbItem { + q.flush() + } +} + +func (q *queue[T]) flush() { + q.timer.Stop() + q.flushCB(q.data) + q.data = make([]T, 0, q.maxNbItem) +} diff --git a/pkg/util/aggregatingqueue/queue_test.go b/pkg/util/aggregatingqueue/queue_test.go new file mode 100644 index 0000000000000..eeb058375a064 --- /dev/null +++ b/pkg/util/aggregatingqueue/queue_test.go @@ -0,0 +1,69 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2022-present Datadog, Inc. + +package queue + +import ( + "sync" + "testing" + "time" + + "github.com/benbjohnson/clock" + "github.com/stretchr/testify/assert" +) + +func newMockFlush[T any]() (callback func([]T), getAccumulator func() [][]T) { + accumulator := [][]T{} + var mutex sync.RWMutex + + callback = func(elems []T) { + mutex.Lock() + defer mutex.Unlock() + accumulator = append(accumulator, elems) + } + + getAccumulator = func() [][]T { + mutex.RLock() + defer mutex.RUnlock() + return accumulator + } + + return +} + +func TestQueue(t *testing.T) { + callback, accumulator := newMockFlush[int]() + cl := clock.NewMock() + queue := newQueue(3, 1*time.Minute, callback, cl) + + for i := 0; i <= 10; i++ { + queue <- i + } + + assert.Equal( + t, + accumulator(), + [][]int{ + {0, 1, 2}, + {3, 4, 5}, + {6, 7, 8}, + }, + ) + + cl.Add(2 * time.Minute) + + assert.Equal( + t, + accumulator(), + [][]int{ + {0, 1, 2}, + {3, 4, 5}, + {6, 7, 8}, + {9, 10}, + }, + ) + + close(queue) +} diff --git a/pkg/util/atomicstats/reporter.go b/pkg/util/atomicstats/reporter.go index 05b021638e98e..69fe9fd0f9075 100644 --- a/pkg/util/atomicstats/reporter.go +++ b/pkg/util/atomicstats/reporter.go @@ -26,30 +26,30 @@ const statsTag = "stats" // Such structs should tag fields to be included in the stats with `stats:""`. // Stats fields can be of any of the following types: // -// int -// int8 -// int16 -// int32 -// int64 -// uint -// uint8 -// uint16 -// uint32 -// uint64 -// uintptr -// go.uber.org/atomic.Bool -// go.uber.org/atomic.Duration -// go.uber.org/atomic.Error -// go.uber.org/atomic.Float64 -// go.uber.org/atomic.Int32 -// go.uber.org/atomic.Int64 -// go.uber.org/atomic.String -// go.uber.org/atomic.Time -// go.uber.org/atomic.Uint32 -// go.uber.org/atomic.Uint64 -// go.uber.org/atomic.Uintptr -// go.uber.org/atomic.UnsafePointer -// go.uber.org/atomic.Value +// int +// int8 +// int16 +// int32 +// int64 +// uint +// uint8 +// uint16 +// uint32 +// uint64 +// uintptr +// go.uber.org/atomic.Bool +// go.uber.org/atomic.Duration +// go.uber.org/atomic.Error +// go.uber.org/atomic.Float64 +// go.uber.org/atomic.Int32 +// go.uber.org/atomic.Int64 +// go.uber.org/atomic.String +// go.uber.org/atomic.Time +// go.uber.org/atomic.Uint32 +// go.uber.org/atomic.Uint64 +// go.uber.org/atomic.Uintptr +// go.uber.org/atomic.UnsafePointer +// go.uber.org/atomic.Value func Report(v interface{}) map[string]interface{} { rep := getReporter(reflect.TypeOf(v)) diff --git a/pkg/util/bimap.go b/pkg/util/bimap.go index 2eb78352aa445..71678a80e6a1b 100644 --- a/pkg/util/bimap.go +++ b/pkg/util/bimap.go @@ -10,7 +10,7 @@ import ( "reflect" ) -//BiMap provides a bidirectional map of keys and values. +// BiMap provides a bidirectional map of keys and values. type BiMap struct { key2Val reflect.Value val2Key reflect.Value @@ -18,7 +18,7 @@ type BiMap struct { valType reflect.Type } -//NewBiMap instantiates BiMap +// NewBiMap instantiates BiMap func NewBiMap(k, v interface{}) *BiMap { ktype := reflect.TypeOf(k) vtype := reflect.TypeOf(v) @@ -31,7 +31,7 @@ func NewBiMap(k, v interface{}) *BiMap { return bimap } -//GetKV gets value provided the key. +// GetKV gets value provided the key. func (b *BiMap) GetKV(key interface{}) (interface{}, error) { keyType := reflect.TypeOf(key) if b.keyType != keyType { @@ -46,7 +46,7 @@ func (b *BiMap) GetKV(key interface{}) (interface{}, error) { return nil, errors.New("no value found in lookup for key provided") } -//GetKVReverse gets key provided the value. +// GetKVReverse gets key provided the value. func (b *BiMap) GetKVReverse(key interface{}) (interface{}, error) { keyType := reflect.TypeOf(key) if b.valType != keyType { @@ -61,8 +61,11 @@ func (b *BiMap) GetKVReverse(key interface{}) (interface{}, error) { return nil, errors.New("no key found in reverse lookup for value provided") } -/*GetKVBimap looks for the provided key both for keys and values in the map. - The first occurrence will be returned.*/ +/* +GetKVBimap looks for the provided key both for keys and values in the map. + + The first occurrence will be returned. +*/ func (b *BiMap) GetKVBimap(key interface{}) (interface{}, error) { keyType := reflect.TypeOf(key) if b.keyType != keyType && b.valType != keyType { @@ -86,7 +89,7 @@ func (b *BiMap) GetKVBimap(key interface{}) (interface{}, error) { return nil, nil } -//AddKV adds value `v` to map the map indexed with key `k`. +// AddKV adds value `v` to map the map indexed with key `k`. func (b *BiMap) AddKV(k, v interface{}) error { keyType := reflect.TypeOf(k) valType := reflect.TypeOf(v) @@ -100,7 +103,7 @@ func (b *BiMap) AddKV(k, v interface{}) error { return nil } -//Keys returns a slice with all keys in the map. +// Keys returns a slice with all keys in the map. func (b *BiMap) Keys() []interface{} { keys := b.key2Val.MapKeys() @@ -112,7 +115,7 @@ func (b *BiMap) Keys() []interface{} { return ks } -//Values returns a slice with all values in the map. +// Values returns a slice with all values in the map. func (b *BiMap) Values() []interface{} { vals := b.val2Key.MapKeys() diff --git a/pkg/util/buffered_chan.go b/pkg/util/buffered_chan.go index bfc83c6b0ea67..dbbfe16adeba7 100644 --- a/pkg/util/buffered_chan.go +++ b/pkg/util/buffered_chan.go @@ -15,9 +15,9 @@ import ( // and writes to the channel. Instead of having one write and one read for each value for a regular channel, // there are one write and one read for each `bufferSize` value. // Thread safety: -// - `BufferedChan.Put` cannot be called concurrently. -// - `BufferedChan.Get` cannot be called concurrently. -// - `BufferedChan.Put` can be called while another goroutine calls `BufferedChan.Get`. +// - `BufferedChan.Put` cannot be called concurrently. +// - `BufferedChan.Get` cannot be called concurrently. +// - `BufferedChan.Put` can be called while another goroutine calls `BufferedChan.Get`. type BufferedChan struct { c chan []interface{} pool *sync.Pool @@ -68,7 +68,9 @@ func (c *BufferedChan) Close() { } // Get gets the value and returns false when the channel is closed and all -// values were read. +// +// values were read. +// // Cannot be called concurrently. func (c *BufferedChan) Get() (interface{}, bool) { if !c.WaitForValue() { diff --git a/pkg/util/cgroups/cgroupv1_cpu.go b/pkg/util/cgroups/cgroupv1_cpu.go index c287b360382ad..8f75c76d10ae4 100644 --- a/pkg/util/cgroups/cgroupv1_cpu.go +++ b/pkg/util/cgroups/cgroupv1_cpu.go @@ -11,6 +11,8 @@ package cgroups import ( "strconv" "time" + + "github.com/DataDog/datadog-agent/pkg/util/pointer" ) func (c *cgroupV1) GetCPUStats(stats *CPUStats) error { @@ -65,7 +67,7 @@ func (c *cgroupV1) parseCPUController(stats *CPUStats) { if err := parseSingleUnsignedStat(c.fr, c.pathFor("cpu", "cpu.cfs_period_us"), &stats.SchedulerPeriod); err == nil { if stats.SchedulerPeriod != nil { - stats.SchedulerPeriod = uint64Ptr(*stats.SchedulerPeriod * uint64(time.Microsecond)) + stats.SchedulerPeriod = pointer.Ptr(*stats.SchedulerPeriod * uint64(time.Microsecond)) } } else { reportError(err) @@ -74,7 +76,7 @@ func (c *cgroupV1) parseCPUController(stats *CPUStats) { var tempValue *int64 if err := parseSingleSignedStat(c.fr, c.pathFor("cpu", "cpu.cfs_quota_us"), &tempValue); err == nil { if tempValue != nil && *tempValue != -1 { - stats.SchedulerQuota = uint64Ptr(uint64(*tempValue) * uint64(time.Microsecond)) + stats.SchedulerQuota = pointer.Ptr(uint64(*tempValue) * uint64(time.Microsecond)) } } else { reportError(err) @@ -116,9 +118,9 @@ func parseV1CPUAcctStatFn(stats *CPUStats) func(key, val string) error { switch key { case "user": - stats.User = uint64Ptr(intVal * UserHZToNano) + stats.User = pointer.Ptr(intVal * UserHZToNano) case "system": - stats.System = uint64Ptr(intVal * UserHZToNano) + stats.System = pointer.Ptr(intVal * UserHZToNano) } return nil diff --git a/pkg/util/cgroups/cgroupv1_cpu_test.go b/pkg/util/cgroups/cgroupv1_cpu_test.go index c112cf59a0e61..565b0412a0647 100644 --- a/pkg/util/cgroups/cgroupv1_cpu_test.go +++ b/pkg/util/cgroups/cgroupv1_cpu_test.go @@ -12,6 +12,8 @@ import ( "testing" "time" + "github.com/DataDog/datadog-agent/pkg/util/pointer" + "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/assert" ) @@ -67,16 +69,16 @@ func TestCgroupV1CPUStats(t *testing.T) { assert.NoError(t, err) assert.ElementsMatch(t, []error{}, tr.errors) assert.Equal(t, "", cmp.Diff(CPUStats{ - User: uint64Ptr(8718602 * UserHZToNano), - System: uint64Ptr(1439790 * UserHZToNano), - Total: uint64Ptr(115456978426898), - Shares: uint64Ptr(200), - ElapsedPeriods: uint64Ptr(421), - ThrottledPeriods: uint64Ptr(0), - ThrottledTime: uint64Ptr(0), - SchedulerPeriod: uint64Ptr(100000 * uint64(time.Microsecond)), + User: pointer.Ptr(8718602 * UserHZToNano), + System: pointer.Ptr(1439790 * UserHZToNano), + Total: pointer.Ptr(uint64(115456978426898)), + Shares: pointer.Ptr(uint64(200)), + ElapsedPeriods: pointer.Ptr(uint64(421)), + ThrottledPeriods: pointer.Ptr(uint64(0)), + ThrottledTime: pointer.Ptr(uint64(0)), + SchedulerPeriod: pointer.Ptr(100000 * uint64(time.Microsecond)), SchedulerQuota: nil, - CPUCount: uint64Ptr(8), + CPUCount: pointer.Ptr(uint64(8)), }, *stats)) // Test reading files in CPU controllers, all files present except 1 (cpu.shares) @@ -90,15 +92,15 @@ func TestCgroupV1CPUStats(t *testing.T) { assert.NoError(t, err) assert.Equal(t, len(tr.errors), 1) assert.Equal(t, "", cmp.Diff(CPUStats{ - User: uint64Ptr(8718602 * UserHZToNano), - System: uint64Ptr(1439790 * UserHZToNano), - Total: uint64Ptr(115456978426898), + User: pointer.Ptr(8718602 * UserHZToNano), + System: pointer.Ptr(1439790 * UserHZToNano), + Total: pointer.Ptr(uint64(115456978426898)), Shares: nil, - ElapsedPeriods: uint64Ptr(421), - ThrottledPeriods: uint64Ptr(0), - ThrottledTime: uint64Ptr(0), + ElapsedPeriods: pointer.Ptr(uint64(421)), + ThrottledPeriods: pointer.Ptr(uint64(0)), + ThrottledTime: pointer.Ptr(uint64(0)), SchedulerPeriod: nil, SchedulerQuota: nil, - CPUCount: uint64Ptr(8), + CPUCount: pointer.Ptr(uint64(8)), }, *stats)) } diff --git a/pkg/util/cgroups/cgroupv1_io.go b/pkg/util/cgroups/cgroupv1_io.go index 45d8de6283c35..b2416919233c8 100644 --- a/pkg/util/cgroups/cgroupv1_io.go +++ b/pkg/util/cgroups/cgroupv1_io.go @@ -10,6 +10,8 @@ package cgroups import ( "strconv" + + "github.com/DataDog/datadog-agent/pkg/util/pointer" ) func (c *cgroupV1) GetIOStats(stats *IOStats) error { @@ -24,10 +26,10 @@ func (c *cgroupV1) GetIOStats(stats *IOStats) error { // Struct is defaulted to allow in-place sums // But we clear it if we get errors while trying to read data stats.Devices = make(map[string]DeviceIOStats) - stats.ReadBytes = uint64Ptr(0) - stats.WriteBytes = uint64Ptr(0) - stats.ReadOperations = uint64Ptr(0) - stats.WriteOperations = uint64Ptr(0) + stats.ReadBytes = pointer.Ptr(uint64(0)) + stats.WriteBytes = pointer.Ptr(uint64(0)) + stats.ReadOperations = pointer.Ptr(uint64(0)) + stats.WriteOperations = pointer.Ptr(uint64(0)) if err := c.parseV1blkio(c.pathFor("blkio", "blkio.throttle.io_service_bytes"), stats.Devices, bytesWriter(stats)); err != nil { stats.ReadBytes = nil @@ -76,11 +78,11 @@ func bytesWriter(stats *IOStats) func(*DeviceIOStats, string, uint64) bool { case opType == "Read": written = true device.ReadBytes = &value - stats.ReadBytes = uint64Ptr(*stats.ReadBytes + value) + stats.ReadBytes = pointer.Ptr(*stats.ReadBytes + value) case opType == "Write": written = true device.WriteBytes = &value - stats.WriteBytes = uint64Ptr(*stats.WriteBytes + value) + stats.WriteBytes = pointer.Ptr(*stats.WriteBytes + value) } return written @@ -95,11 +97,11 @@ func opsWriter(stats *IOStats) func(*DeviceIOStats, string, uint64) bool { case opType == "Read": written = true device.ReadOperations = &value - stats.ReadOperations = uint64Ptr(*stats.ReadOperations + value) + stats.ReadOperations = pointer.Ptr(*stats.ReadOperations + value) case opType == "Write": written = true device.WriteOperations = &value - stats.WriteOperations = uint64Ptr(*stats.WriteOperations + value) + stats.WriteOperations = pointer.Ptr(*stats.WriteOperations + value) } return written diff --git a/pkg/util/cgroups/cgroupv1_io_test.go b/pkg/util/cgroups/cgroupv1_io_test.go index 3acc5566487aa..9566191a4ee74 100644 --- a/pkg/util/cgroups/cgroupv1_io_test.go +++ b/pkg/util/cgroups/cgroupv1_io_test.go @@ -11,6 +11,8 @@ package cgroups import ( "testing" + "github.com/DataDog/datadog-agent/pkg/util/pointer" + "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/assert" ) @@ -74,26 +76,26 @@ func TestCgroupV1IOStats(t *testing.T) { assert.NoError(t, err) assert.ElementsMatch(t, []error{}, tr.errors) assert.Empty(t, cmp.Diff(IOStats{ - ReadBytes: uint64Ptr(80053760), - WriteBytes: uint64Ptr(2237900288), - ReadOperations: uint64Ptr(38), - WriteOperations: uint64Ptr(27528), + ReadBytes: pointer.Ptr(uint64(80053760)), + WriteBytes: pointer.Ptr(uint64(2237900288)), + ReadOperations: pointer.Ptr(uint64(38)), + WriteOperations: pointer.Ptr(uint64(27528)), Devices: map[string]DeviceIOStats{ "8:16": { - ReadBytes: uint64Ptr(585728), - WriteBytes: uint64Ptr(0), + ReadBytes: pointer.Ptr(uint64(585728)), + WriteBytes: pointer.Ptr(uint64(0)), }, "8:32": { - ReadBytes: uint64Ptr(4410880), - WriteBytes: uint64Ptr(273678336), + ReadBytes: pointer.Ptr(uint64(4410880)), + WriteBytes: pointer.Ptr(uint64(273678336)), }, "8:48": { - ReadBytes: uint64Ptr(75057152), - WriteBytes: uint64Ptr(1964221952), + ReadBytes: pointer.Ptr(uint64(75057152)), + WriteBytes: pointer.Ptr(uint64(1964221952)), }, "259:0": { - ReadOperations: uint64Ptr(38), - WriteOperations: uint64Ptr(27528), + ReadOperations: pointer.Ptr(uint64(38)), + WriteOperations: pointer.Ptr(uint64(27528)), }, }, }, *stats)) @@ -107,10 +109,10 @@ func TestCgroupV1IOStats(t *testing.T) { assert.NoError(t, err) assert.ElementsMatch(t, []error{}, tr.errors) assert.Empty(t, cmp.Diff(IOStats{ - ReadBytes: uint64Ptr(0), - WriteBytes: uint64Ptr(0), - ReadOperations: uint64Ptr(0), - WriteOperations: uint64Ptr(0), + ReadBytes: pointer.Ptr(uint64(0)), + WriteBytes: pointer.Ptr(uint64(0)), + ReadOperations: pointer.Ptr(uint64(0)), + WriteOperations: pointer.Ptr(uint64(0)), Devices: nil, }, *stats)) } diff --git a/pkg/util/cgroups/cgroupv1_memory_test.go b/pkg/util/cgroups/cgroupv1_memory_test.go index e6abfd52bae46..027547417f429 100644 --- a/pkg/util/cgroups/cgroupv1_memory_test.go +++ b/pkg/util/cgroups/cgroupv1_memory_test.go @@ -11,6 +11,8 @@ package cgroups import ( "testing" + "github.com/DataDog/datadog-agent/pkg/util/pointer" + "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/assert" ) @@ -93,23 +95,23 @@ func TestCgroupV1MemoryStats(t *testing.T) { assert.NoError(t, err) assert.ElementsMatch(t, []error{}, tr.errors) assert.Equal(t, "", cmp.Diff(MemoryStats{ - UsageTotal: uint64Ptr(354488320), - Cache: uint64Ptr(4866048), - Swap: uint64Ptr(0), - RSS: uint64Ptr(19058688), - RSSHuge: uint64Ptr(0), - MappedFile: uint64Ptr(0), - Pgpgin: uint64Ptr(878460), - Pgpgout: uint64Ptr(872515), - Pgfault: uint64Ptr(879450), - Pgmajfault: uint64Ptr(0), - InactiveAnon: uint64Ptr(0), - ActiveAnon: uint64Ptr(18923520), - InactiveFile: uint64Ptr(4595712), - ActiveFile: uint64Ptr(0), - Unevictable: uint64Ptr(0), - OOMEvents: uint64Ptr(0), - Limit: uint64Ptr(67108864), - KernelMemory: uint64Ptr(4444160), + UsageTotal: pointer.Ptr(uint64(354488320)), + Cache: pointer.Ptr(uint64(4866048)), + Swap: pointer.Ptr(uint64(0)), + RSS: pointer.Ptr(uint64(19058688)), + RSSHuge: pointer.Ptr(uint64(0)), + MappedFile: pointer.Ptr(uint64(0)), + Pgpgin: pointer.Ptr(uint64(878460)), + Pgpgout: pointer.Ptr(uint64(872515)), + Pgfault: pointer.Ptr(uint64(879450)), + Pgmajfault: pointer.Ptr(uint64(0)), + InactiveAnon: pointer.Ptr(uint64(0)), + ActiveAnon: pointer.Ptr(uint64(18923520)), + InactiveFile: pointer.Ptr(uint64(4595712)), + ActiveFile: pointer.Ptr(uint64(0)), + Unevictable: pointer.Ptr(uint64(0)), + OOMEvents: pointer.Ptr(uint64(0)), + Limit: pointer.Ptr(uint64(67108864)), + KernelMemory: pointer.Ptr(uint64(4444160)), }, *stats)) } diff --git a/pkg/util/cgroups/cgroupv1_pids_test.go b/pkg/util/cgroups/cgroupv1_pids_test.go index 745e3170bac8c..56d165065e3c3 100644 --- a/pkg/util/cgroups/cgroupv1_pids_test.go +++ b/pkg/util/cgroups/cgroupv1_pids_test.go @@ -11,6 +11,8 @@ package cgroups import ( "testing" + "github.com/DataDog/datadog-agent/pkg/util/pointer" + "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/assert" ) @@ -52,8 +54,8 @@ func TestCgroupV1PIDStats(t *testing.T) { err = cgFoo1.GetPIDStats(stats) assert.NoError(t, err) assert.Equal(t, "", cmp.Diff(PIDStats{ - HierarchicalThreadCount: uint64Ptr(12), - HierarchicalThreadLimit: uint64Ptr(42), + HierarchicalThreadCount: pointer.Ptr(uint64(12)), + HierarchicalThreadLimit: pointer.Ptr(uint64(42)), }, *stats)) // Test reading pids.max string value (max) @@ -63,7 +65,7 @@ func TestCgroupV1PIDStats(t *testing.T) { err = cgFoo1.GetPIDStats(stats) assert.NoError(t, err) assert.Equal(t, "", cmp.Diff(PIDStats{ - HierarchicalThreadCount: uint64Ptr(12), + HierarchicalThreadCount: pointer.Ptr(uint64(12)), HierarchicalThreadLimit: nil, }, *stats)) } diff --git a/pkg/util/cgroups/cgroupv2_cpu.go b/pkg/util/cgroups/cgroupv2_cpu.go index c8acd26ea8934..536062268402a 100644 --- a/pkg/util/cgroups/cgroupv2_cpu.go +++ b/pkg/util/cgroups/cgroupv2_cpu.go @@ -11,6 +11,8 @@ package cgroups import ( "strconv" "time" + + "github.com/DataDog/datadog-agent/pkg/util/pointer" ) func (c *cgroupV2) GetCPUStats(stats *CPUStats) error { @@ -101,7 +103,7 @@ func parseV2CPUMax(stats *CPUStats) func(key, value string) error { return func(limit, period string) error { periodVal, err := strconv.ParseUint(period, 10, 64) if err == nil { - stats.SchedulerPeriod = uint64Ptr(periodVal * uint64(time.Microsecond)) + stats.SchedulerPeriod = pointer.Ptr(periodVal * uint64(time.Microsecond)) } else { return newValueError(period, err) } @@ -109,7 +111,7 @@ func parseV2CPUMax(stats *CPUStats) func(key, value string) error { if limit != "max" { limitVal, err := strconv.ParseUint(limit, 10, 64) if err == nil { - stats.SchedulerQuota = uint64Ptr(limitVal * uint64(time.Microsecond)) + stats.SchedulerQuota = pointer.Ptr(limitVal * uint64(time.Microsecond)) } else { return newValueError(limit, err) } diff --git a/pkg/util/cgroups/cgroupv2_cpu_test.go b/pkg/util/cgroups/cgroupv2_cpu_test.go index f067371aaa43b..0fc1f4922d5b8 100644 --- a/pkg/util/cgroups/cgroupv2_cpu_test.go +++ b/pkg/util/cgroups/cgroupv2_cpu_test.go @@ -13,6 +13,8 @@ import ( "testing" "time" + "github.com/DataDog/datadog-agent/pkg/util/pointer" + "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/assert" ) @@ -65,21 +67,21 @@ func TestCgroupV2CPUStats(t *testing.T) { assert.NoError(t, err) assert.ElementsMatch(t, []error{}, tr.errors) assert.Empty(t, cmp.Diff(CPUStats{ - User: uint64Ptr(3569637760 * uint64(time.Microsecond)), - System: uint64Ptr(2047009667 * uint64(time.Microsecond)), - Total: uint64Ptr(5616647428 * uint64(time.Microsecond)), - Shares: uint64Ptr(16), - ElapsedPeriods: uint64Ptr(0), - ThrottledPeriods: uint64Ptr(0), - ThrottledTime: uint64Ptr(0), - SchedulerPeriod: uint64Ptr(100000 * uint64(time.Microsecond)), - SchedulerQuota: uint64Ptr(40000 * uint64(time.Microsecond)), - CPUCount: uint64Ptr(4), + User: pointer.Ptr(3569637760 * uint64(time.Microsecond)), + System: pointer.Ptr(2047009667 * uint64(time.Microsecond)), + Total: pointer.Ptr(5616647428 * uint64(time.Microsecond)), + Shares: pointer.Ptr(uint64(16)), + ElapsedPeriods: pointer.Ptr(uint64(0)), + ThrottledPeriods: pointer.Ptr(uint64(0)), + ThrottledTime: pointer.Ptr(uint64(0)), + SchedulerPeriod: pointer.Ptr(100000 * uint64(time.Microsecond)), + SchedulerQuota: pointer.Ptr(40000 * uint64(time.Microsecond)), + CPUCount: pointer.Ptr(uint64(4)), PSISome: PSIStats{ - Avg10: float64Ptr(42.64), - Avg60: float64Ptr(43.72), - Avg300: float64Ptr(25.76), - Total: uint64Ptr(114289003), + Avg10: pointer.Ptr(42.64), + Avg60: pointer.Ptr(43.72), + Avg300: pointer.Ptr(25.76), + Total: pointer.Ptr(uint64(114289003)), }, }, *stats)) @@ -91,20 +93,20 @@ func TestCgroupV2CPUStats(t *testing.T) { assert.NoError(t, err) assert.Equal(t, len(tr.errors), 1) assert.Empty(t, cmp.Diff(CPUStats{ - User: uint64Ptr(3569637760 * uint64(time.Microsecond)), - System: uint64Ptr(2047009667 * uint64(time.Microsecond)), - Total: uint64Ptr(5616647428 * uint64(time.Microsecond)), - Shares: uint64Ptr(16), - ElapsedPeriods: uint64Ptr(0), - ThrottledPeriods: uint64Ptr(0), - ThrottledTime: uint64Ptr(0), - SchedulerPeriod: uint64Ptr(100000 * uint64(time.Microsecond)), - SchedulerQuota: uint64Ptr(40000 * uint64(time.Microsecond)), + User: pointer.Ptr(3569637760 * uint64(time.Microsecond)), + System: pointer.Ptr(2047009667 * uint64(time.Microsecond)), + Total: pointer.Ptr(5616647428 * uint64(time.Microsecond)), + Shares: pointer.Ptr(uint64(16)), + ElapsedPeriods: pointer.Ptr(uint64(0)), + ThrottledPeriods: pointer.Ptr(uint64(0)), + ThrottledTime: pointer.Ptr(uint64(0)), + SchedulerPeriod: pointer.Ptr(100000 * uint64(time.Microsecond)), + SchedulerQuota: pointer.Ptr(40000 * uint64(time.Microsecond)), PSISome: PSIStats{ - Avg10: float64Ptr(42.64), - Avg60: float64Ptr(43.72), - Avg300: float64Ptr(25.76), - Total: uint64Ptr(114289003), + Avg10: pointer.Ptr(42.64), + Avg60: pointer.Ptr(43.72), + Avg300: pointer.Ptr(25.76), + Total: pointer.Ptr(uint64(114289003)), }, }, *stats)) } @@ -122,7 +124,7 @@ func TestParseV2CPUStat(t *testing.T) { inputKey: "usage_usec", inputVal: "100", want: &CPUStats{ - Total: uint64Ptr(100000), + Total: pointer.Ptr(uint64(100000)), }, wantErr: nil, }, @@ -165,7 +167,7 @@ func TestParseV2CPUMax(t *testing.T) { inputKey: "max", inputVal: "100", want: &CPUStats{ - SchedulerPeriod: uint64Ptr(100000), + SchedulerPeriod: pointer.Ptr(uint64(100000)), }, wantErr: nil, }, @@ -181,7 +183,7 @@ func TestParseV2CPUMax(t *testing.T) { inputKey: "foo", inputVal: "1000", want: &CPUStats{ - SchedulerPeriod: uint64Ptr(1000000), + SchedulerPeriod: pointer.Ptr(uint64(1000000)), }, wantErr: strconv.ErrSyntax, }, diff --git a/pkg/util/cgroups/cgroupv2_io.go b/pkg/util/cgroups/cgroupv2_io.go index c7bf7d89370ac..8600a6bbbaf61 100644 --- a/pkg/util/cgroups/cgroupv2_io.go +++ b/pkg/util/cgroups/cgroupv2_io.go @@ -12,6 +12,8 @@ import ( "fmt" "strconv" "strings" + + "github.com/DataDog/datadog-agent/pkg/util/pointer" ) func (c *cgroupV2) GetIOStats(stats *IOStats) error { @@ -24,10 +26,10 @@ func (c *cgroupV2) GetIOStats(stats *IOStats) error { } stats.Devices = make(map[string]DeviceIOStats) - stats.ReadBytes = uint64Ptr(0) - stats.WriteBytes = uint64Ptr(0) - stats.ReadOperations = uint64Ptr(0) - stats.WriteOperations = uint64Ptr(0) + stats.ReadBytes = pointer.Ptr(uint64(0)) + stats.WriteBytes = pointer.Ptr(uint64(0)) + stats.ReadOperations = pointer.Ptr(uint64(0)) + stats.WriteOperations = pointer.Ptr(uint64(0)) if err := parseColumnStats(c.fr, c.pathFor("io.stat"), parseV2IOFn(stats)); err != nil { reportError(err) @@ -85,19 +87,19 @@ func parseV2IOFn(stats *IOStats) func([]string) error { switch parts[0] { case "rbytes": written = true - stats.ReadBytes = uint64Ptr(*stats.ReadBytes + val) + stats.ReadBytes = pointer.Ptr(*stats.ReadBytes + val) device.ReadBytes = &val case "wbytes": written = true - stats.WriteBytes = uint64Ptr(*stats.WriteBytes + val) + stats.WriteBytes = pointer.Ptr(*stats.WriteBytes + val) device.WriteBytes = &val case "rios": written = true - stats.ReadOperations = uint64Ptr(*stats.ReadOperations + val) + stats.ReadOperations = pointer.Ptr(*stats.ReadOperations + val) device.ReadOperations = &val case "wios": written = true - stats.WriteOperations = uint64Ptr(*stats.WriteOperations + val) + stats.WriteOperations = pointer.Ptr(*stats.WriteOperations + val) device.WriteOperations = &val case "rbps": written = true diff --git a/pkg/util/cgroups/cgroupv2_io_test.go b/pkg/util/cgroups/cgroupv2_io_test.go index 892ab05723446..125e094704240 100644 --- a/pkg/util/cgroups/cgroupv2_io_test.go +++ b/pkg/util/cgroups/cgroupv2_io_test.go @@ -11,6 +11,8 @@ package cgroups import ( "testing" + "github.com/DataDog/datadog-agent/pkg/util/pointer" + "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/assert" ) @@ -56,37 +58,37 @@ func TestCgroupV2IOStats(t *testing.T) { assert.NoError(t, err) assert.ElementsMatch(t, []error{}, tr.errors) assert.Empty(t, cmp.Diff(IOStats{ - ReadBytes: uint64Ptr(557056), - WriteBytes: uint64Ptr(23247798272), - ReadOperations: uint64Ptr(12), - WriteOperations: uint64Ptr(5489880), + ReadBytes: pointer.Ptr(uint64(557056)), + WriteBytes: pointer.Ptr(uint64(23247798272)), + ReadOperations: pointer.Ptr(uint64(12)), + WriteOperations: pointer.Ptr(uint64(5489880)), Devices: map[string]DeviceIOStats{ "259:0": { - ReadBytes: uint64Ptr(278528), - WriteBytes: uint64Ptr(11623899136), - ReadOperations: uint64Ptr(6), - WriteOperations: uint64Ptr(2744940), + ReadBytes: pointer.Ptr(uint64(278528)), + WriteBytes: pointer.Ptr(uint64(11623899136)), + ReadOperations: pointer.Ptr(uint64(6)), + WriteOperations: pointer.Ptr(uint64(2744940)), }, "8:16": { - ReadBytes: uint64Ptr(278528), - WriteBytes: uint64Ptr(11623899136), - ReadOperations: uint64Ptr(6), - WriteOperations: uint64Ptr(2744940), - ReadBytesLimit: uint64Ptr(2097152), - WriteOperationsLimit: uint64Ptr(120), + ReadBytes: pointer.Ptr(uint64(278528)), + WriteBytes: pointer.Ptr(uint64(11623899136)), + ReadOperations: pointer.Ptr(uint64(6)), + WriteOperations: pointer.Ptr(uint64(2744940)), + ReadBytesLimit: pointer.Ptr(uint64(2097152)), + WriteOperationsLimit: pointer.Ptr(uint64(120)), }, }, PSISome: PSIStats{ - Avg10: float64Ptr(0), - Avg60: float64Ptr(0), - Avg300: float64Ptr(0), - Total: uint64Ptr(0), + Avg10: pointer.Ptr(0.0), + Avg60: pointer.Ptr(0.0), + Avg300: pointer.Ptr(0.0), + Total: pointer.Ptr(uint64(0)), }, PSIFull: PSIStats{ - Avg10: float64Ptr(0), - Avg60: float64Ptr(0), - Avg300: float64Ptr(0), - Total: uint64Ptr(0), + Avg10: pointer.Ptr(0.0), + Avg60: pointer.Ptr(0.0), + Avg300: pointer.Ptr(0.0), + Total: pointer.Ptr(uint64(0)), }, }, *stats)) @@ -100,16 +102,16 @@ func TestCgroupV2IOStats(t *testing.T) { assert.ElementsMatch(t, []error{}, tr.errors) assert.Empty(t, cmp.Diff(IOStats{ PSISome: PSIStats{ - Avg10: float64Ptr(0), - Avg60: float64Ptr(0), - Avg300: float64Ptr(0), - Total: uint64Ptr(0), + Avg10: pointer.Ptr(0.0), + Avg60: pointer.Ptr(0.0), + Avg300: pointer.Ptr(0.0), + Total: pointer.Ptr(uint64(0)), }, PSIFull: PSIStats{ - Avg10: float64Ptr(0), - Avg60: float64Ptr(0), - Avg300: float64Ptr(0), - Total: uint64Ptr(0), + Avg10: pointer.Ptr(0.0), + Avg60: pointer.Ptr(0.0), + Avg300: pointer.Ptr(0.0), + Total: pointer.Ptr(uint64(0)), }, }, *stats)) } diff --git a/pkg/util/cgroups/cgroupv2_memory.go b/pkg/util/cgroups/cgroupv2_memory.go index ca3c9008ba609..36365f4ccf0f6 100644 --- a/pkg/util/cgroups/cgroupv2_memory.go +++ b/pkg/util/cgroups/cgroupv2_memory.go @@ -8,7 +8,11 @@ package cgroups -import "strconv" +import ( + "strconv" + + "github.com/DataDog/datadog-agent/pkg/util/pointer" +) func (c *cgroupV2) GetMemoryStats(stats *MemoryStats) error { if stats == nil { @@ -64,7 +68,7 @@ func (c *cgroupV2) GetMemoryStats(stats *MemoryStats) error { } if kernelStack != nil && slab != nil { - stats.KernelMemory = uint64Ptr(*kernelStack + *slab) + stats.KernelMemory = pointer.Ptr(*kernelStack + *slab) } if err := parseSingleUnsignedStat(c.fr, c.pathFor("memory.current"), &stats.UsageTotal); err != nil { diff --git a/pkg/util/cgroups/cgroupv2_memory_test.go b/pkg/util/cgroups/cgroupv2_memory_test.go index 8eae3e7572c1b..46208f08a50fb 100644 --- a/pkg/util/cgroups/cgroupv2_memory_test.go +++ b/pkg/util/cgroups/cgroupv2_memory_test.go @@ -11,6 +11,8 @@ package cgroups import ( "testing" + "github.com/DataDog/datadog-agent/pkg/util/pointer" + "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/assert" ) @@ -113,33 +115,33 @@ func TestCgroupV2MemoryStats(t *testing.T) { assert.NoError(t, err) assert.ElementsMatch(t, []error{}, tr.errors) assert.Empty(t, cmp.Diff(MemoryStats{ - UsageTotal: uint64Ptr(6193152), - Cache: uint64Ptr(2297856), - Swap: uint64Ptr(0), - RSS: uint64Ptr(3108864), - RSSHuge: uint64Ptr(0), - MappedFile: uint64Ptr(2297856), - Pgfault: uint64Ptr(2706), - Pgmajfault: uint64Ptr(0), - InactiveAnon: uint64Ptr(5541888), - ActiveAnon: uint64Ptr(0), - InactiveFile: uint64Ptr(0), - ActiveFile: uint64Ptr(0), - Unevictable: uint64Ptr(0), - KernelMemory: uint64Ptr(49152), - OOMEvents: uint64Ptr(3), - OOMKiilEvents: uint64Ptr(0), + UsageTotal: pointer.Ptr(uint64(6193152)), + Cache: pointer.Ptr(uint64(2297856)), + Swap: pointer.Ptr(uint64(0)), + RSS: pointer.Ptr(uint64(3108864)), + RSSHuge: pointer.Ptr(uint64(0)), + MappedFile: pointer.Ptr(uint64(2297856)), + Pgfault: pointer.Ptr(uint64(2706)), + Pgmajfault: pointer.Ptr(uint64(0)), + InactiveAnon: pointer.Ptr(uint64(5541888)), + ActiveAnon: pointer.Ptr(uint64(0)), + InactiveFile: pointer.Ptr(uint64(0)), + ActiveFile: pointer.Ptr(uint64(0)), + Unevictable: pointer.Ptr(uint64(0)), + KernelMemory: pointer.Ptr(uint64(49152)), + OOMEvents: pointer.Ptr(uint64(3)), + OOMKiilEvents: pointer.Ptr(uint64(0)), PSISome: PSIStats{ - Avg10: float64Ptr(0), - Avg60: float64Ptr(0), - Avg300: float64Ptr(0), - Total: uint64Ptr(0), + Avg10: pointer.Ptr(0.0), + Avg60: pointer.Ptr(0.0), + Avg300: pointer.Ptr(0.0), + Total: pointer.Ptr(uint64(0)), }, PSIFull: PSIStats{ - Avg10: float64Ptr(0), - Avg60: float64Ptr(0), - Avg300: float64Ptr(0), - Total: uint64Ptr(0), + Avg10: pointer.Ptr(0.0), + Avg60: pointer.Ptr(0.0), + Avg300: pointer.Ptr(0.0), + Total: pointer.Ptr(uint64(0)), }, }, *stats)) } diff --git a/pkg/util/cgroups/cgroupv2_pids_test.go b/pkg/util/cgroups/cgroupv2_pids_test.go index 379c3adf06b8e..3dceed4dd071b 100644 --- a/pkg/util/cgroups/cgroupv2_pids_test.go +++ b/pkg/util/cgroups/cgroupv2_pids_test.go @@ -11,6 +11,8 @@ package cgroups import ( "testing" + "github.com/DataDog/datadog-agent/pkg/util/pointer" + "github.com/google/go-cmp/cmp" "github.com/stretchr/testify/assert" ) @@ -52,8 +54,8 @@ func TestCgroupV2PIDStats(t *testing.T) { err = cgFoo1.GetPIDStats(stats) assert.NoError(t, err) assert.Empty(t, cmp.Diff(PIDStats{ - HierarchicalThreadCount: uint64Ptr(12), - HierarchicalThreadLimit: uint64Ptr(42), + HierarchicalThreadCount: pointer.Ptr(uint64(12)), + HierarchicalThreadLimit: pointer.Ptr(uint64(42)), }, *stats)) // Test reading pids.max string value (max) @@ -63,7 +65,7 @@ func TestCgroupV2PIDStats(t *testing.T) { err = cgFoo1.GetPIDStats(stats) assert.NoError(t, err) assert.Equal(t, "", cmp.Diff(PIDStats{ - HierarchicalThreadCount: uint64Ptr(12), + HierarchicalThreadCount: pointer.Ptr(uint64(12)), HierarchicalThreadLimit: nil, }, *stats)) } diff --git a/pkg/util/cgroups/go.mod b/pkg/util/cgroups/go.mod index 5ea2f41b9ea81..985ee160f821b 100644 --- a/pkg/util/cgroups/go.mod +++ b/pkg/util/cgroups/go.mod @@ -4,11 +4,13 @@ go 1.18 replace ( github.com/DataDog/datadog-agent/pkg/util/log => ../log + github.com/DataDog/datadog-agent/pkg/util/pointer => ../pointer github.com/DataDog/datadog-agent/pkg/util/scrubber => ../scrubber ) require ( - github.com/DataDog/datadog-agent/pkg/util/log v0.42.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/log v0.43.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/pointer v0.43.0-rc.3 github.com/containerd/cgroups v1.0.4 github.com/google/go-cmp v0.5.8 github.com/karrick/godirwalk v1.17.0 @@ -16,7 +18,7 @@ require ( ) require ( - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.42.0-rc.3 // indirect + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.43.0-rc.3 // indirect github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect github.com/coreos/go-systemd/v22 v22.3.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/pkg/util/cgroups/utils.go b/pkg/util/cgroups/utils.go index e8ad0ab73c023..686fd935705ba 100644 --- a/pkg/util/cgroups/utils.go +++ b/pkg/util/cgroups/utils.go @@ -20,14 +20,6 @@ const ( UserHZToNano uint64 = uint64(time.Second) / 100 ) -func uint64Ptr(v uint64) *uint64 { - return &v -} - -func float64Ptr(v float64) *float64 { - return &v -} - func randToken(n int) (string, error) { bytes := make([]byte, n) if _, err := rand.Read(bytes); err != nil { diff --git a/pkg/util/cloudproviders/cloudproviders.go b/pkg/util/cloudproviders/cloudproviders.go index 1832351628e36..bb525b4a532ef 100644 --- a/pkg/util/cloudproviders/cloudproviders.go +++ b/pkg/util/cloudproviders/cloudproviders.go @@ -7,16 +7,15 @@ package cloudproviders import ( "context" + "errors" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/metadata/inventories" "github.com/DataDog/datadog-agent/pkg/util" - ecscommon "github.com/DataDog/datadog-agent/pkg/util/ecs/common" "github.com/DataDog/datadog-agent/pkg/util/kubelet" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/ec2" - "github.com/DataDog/datadog-agent/pkg/util/ecs" "github.com/DataDog/datadog-agent/pkg/util/cloudproviders/alibaba" "github.com/DataDog/datadog-agent/pkg/util/cloudproviders/azure" @@ -36,7 +35,6 @@ type cloudProviderDetector struct { // DetectCloudProvider detects the cloud provider where the agent is running in order: func DetectCloudProvider(ctx context.Context) { detectors := []cloudProviderDetector{ - {name: ecscommon.CloudProviderName, callback: ecs.IsRunningOn}, {name: ec2.CloudProviderName, callback: ec2.IsRunningOn}, {name: gce.CloudProviderName, callback: gce.IsRunningOn}, {name: azure.CloudProviderName, callback: azure.IsRunningOn}, @@ -48,7 +46,7 @@ func DetectCloudProvider(ctx context.Context) { for _, cloudDetector := range detectors { if cloudDetector.callback(ctx) { - inventories.SetAgentMetadata(inventories.AgentCloudProvider, cloudDetector.name) + inventories.SetAgentMetadata(inventories.HostCloudProvider, cloudDetector.name) log.Infof("Cloud provider %s detected", cloudDetector.name) return } @@ -64,7 +62,6 @@ type cloudProviderNTPDetector struct { // GetCloudProviderNTPHosts detects the cloud provider where the agent is running in order and returns its NTP host name. func GetCloudProviderNTPHosts(ctx context.Context) []string { detectors := []cloudProviderNTPDetector{ - {name: ecscommon.CloudProviderName, callback: ecs.GetNTPHosts}, {name: ec2.CloudProviderName, callback: ec2.GetNTPHosts}, {name: gce.CloudProviderName, callback: gce.GetNTPHosts}, {name: azure.CloudProviderName, callback: azure.GetNTPHosts}, @@ -116,3 +113,22 @@ func GetHostAliases(ctx context.Context) []string { return util.SortUniqInPlace(aliases) } + +// GetPublicIPv4 returns the public IPv4 from different providers +func GetPublicIPv4(ctx context.Context) (string, error) { + publicIPProvider := map[string]func(context.Context) (string, error){ + "EC2": ec2.GetPublicIPv4, + "GCE": gce.GetPublicIPv4, + "Azure": azure.GetPublicIPv4, + } + for name, fetcher := range publicIPProvider { + publicIPv4, err := fetcher(ctx) + if err == nil { + log.Debugf("%s public IP: %s", name, publicIPv4) + return publicIPv4, nil + } + log.Debugf("Could not fetch %s public IPv4: %s", name, err) + } + log.Infof("No public IPv4 address found") + return "", errors.New("No public IPv4 address found") +} diff --git a/pkg/util/clusteragent/clusteragent.go b/pkg/util/clusteragent/clusteragent.go index d8ad7d0e4c1ac..01488c1d2b349 100644 --- a/pkg/util/clusteragent/clusteragent.go +++ b/pkg/util/clusteragent/clusteragent.go @@ -201,9 +201,12 @@ func (c *DCAClient) initLeaderClient() { // GetClusterAgentEndpoint provides a validated https endpoint from configuration keys in datadog.yaml: // 1st. configuration key "cluster_agent.url" (or the DD_CLUSTER_AGENT_URL environment variable), -// add the https prefix if the scheme isn't specified +// +// add the https prefix if the scheme isn't specified +// // 2nd. environment variables associated with "cluster_agent.kubernetes_service_name" -// ${dcaServiceName}_SERVICE_HOST and ${dcaServiceName}_SERVICE_PORT +// +// ${dcaServiceName}_SERVICE_HOST and ${dcaServiceName}_SERVICE_PORT func GetClusterAgentEndpoint() (string, error) { const configDcaURL = "cluster_agent.url" const configDcaSvcName = "cluster_agent.kubernetes_service_name" diff --git a/pkg/util/common.go b/pkg/util/common.go index 7688e6551b02e..8b9a4261e4400 100644 --- a/pkg/util/common.go +++ b/pkg/util/common.go @@ -25,7 +25,7 @@ func init() { rand.Seed(time.Now().UnixNano()) } -// CopyFile atomically copies file path `src`` to file path `dst`. +// CopyFile atomically copies file path `src“ to file path `dst`. func CopyFile(src, dst string) error { fi, err := os.Stat(src) if err != nil { diff --git a/pkg/util/compression/zlib.go b/pkg/util/compression/zlib.go index cb02961f69f7c..95d2aee87acd7 100644 --- a/pkg/util/compression/zlib.go +++ b/pkg/util/compression/zlib.go @@ -49,7 +49,7 @@ func Decompress(src []byte) ([]byte, error) { return dst, nil } -// CompressBound returns the worst case size needed for a destination buffer +// CompressBound returns the worst case size needed for a destination buffer func CompressBound(sourceLen int) int { // From https://code.woboq.org/gcc/zlib/compress.c.html#compressBound return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + (sourceLen >> 25) + 13 diff --git a/pkg/util/containerd/containerd_util.go b/pkg/util/containerd/containerd_util.go index 2c0058e9ac5e8..017f24587e745 100644 --- a/pkg/util/containerd/containerd_util.go +++ b/pkg/util/containerd/containerd_util.go @@ -11,6 +11,7 @@ package containerd import ( "context" "errors" + "fmt" "strings" "time" @@ -18,11 +19,14 @@ import ( dderrors "github.com/DataDog/datadog-agent/pkg/errors" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/util/retry" + "github.com/opencontainers/image-spec/identity" "github.com/containerd/containerd" "github.com/containerd/containerd/api/types" "github.com/containerd/containerd/containers" "github.com/containerd/containerd/errdefs" + "github.com/containerd/containerd/leases" + "github.com/containerd/containerd/mount" "github.com/containerd/containerd/namespaces" "github.com/containerd/containerd/oci" ) @@ -35,6 +39,7 @@ const ( // ContainerdItf is the interface implementing a subset of methods that leverage the Containerd api. type ContainerdItf interface { + RawClient() *containerd.Client Close() error CheckConnectivity() *retry.Error Container(namespace string, id string) (containerd.Container, error) @@ -46,7 +51,8 @@ type ContainerdItf interface { Labels(namespace string, ctn containerd.Container) (map[string]string, error) LabelsWithContext(ctx context.Context, namespace string, ctn containerd.Container) (map[string]string, error) ListImages(namespace string) ([]containerd.Image, error) - Image(namespace string, ctn containerd.Container) (containerd.Image, error) + Image(namespace string, name string) (containerd.Image, error) + ImageOfContainer(namespace string, ctn containerd.Container) (containerd.Image, error) ImageSize(namespace string, ctn containerd.Container) (int64, error) Spec(namespace string, ctn containerd.Container) (*oci.Spec, error) SpecWithContext(ctx context.Context, namespace string, ctn containerd.Container) (*oci.Spec, error) @@ -58,6 +64,7 @@ type ContainerdItf interface { CallWithClientContext(namespace string, f func(context.Context) error) error Annotations(namespace string, ctn containerd.Container) (map[string]string, error) IsSandbox(namespace string, ctn containerd.Container) (bool, error) + MountImage(ctx context.Context, expiration time.Duration, namespace string, img containerd.Image, targetDir string) (func(context.Context) error, error) } // ContainerdUtil is the util used to interact with the Containerd api. @@ -101,6 +108,11 @@ func NewContainerdUtil() (ContainerdItf, error) { return containerdUtil, nil } +// CheckConnectivity tries to connect to containerd api +func (c *ContainerdUtil) RawClient() *containerd.Client { + return c.cl +} + // CheckConnectivity tries to connect to containerd api func (c *ContainerdUtil) CheckConnectivity() *retry.Error { return c.initRetry.TriggerRetry() @@ -231,7 +243,16 @@ func (c *ContainerdUtil) ListImages(namespace string) ([]containerd.Image, error } // Image interfaces with the containerd api to get an image -func (c *ContainerdUtil) Image(namespace string, ctn containerd.Container) (containerd.Image, error) { +func (c *ContainerdUtil) Image(namespace string, name string) (containerd.Image, error) { + ctx, cancel := context.WithTimeout(context.Background(), c.queryTimeout) + defer cancel() + ctxNamespace := namespaces.WithNamespace(ctx, namespace) + + return c.cl.GetImage(ctxNamespace, name) +} + +// ImageOfContainer interfaces with the containerd api to get an image +func (c *ContainerdUtil) ImageOfContainer(namespace string, ctn containerd.Container) (containerd.Image, error) { ctx, cancel := context.WithTimeout(context.Background(), c.queryTimeout) defer cancel() ctxNamespace := namespaces.WithNamespace(ctx, namespace) @@ -374,3 +395,108 @@ func (c *ContainerdUtil) IsSandbox(namespace string, ctn containerd.Container) ( return annotations["io.kubernetes.cri.container-type"] == "sandbox", nil } + +func (c *ContainerdUtil) MountImage(ctx context.Context, expiration time.Duration, namespace string, img containerd.Image, targetDir string) (func(context.Context) error, error) { + snapshotter := containerd.DefaultSnapshotter + ctx = namespaces.WithNamespace(ctx, namespace) + + // Checking if image is already unpacked + imgUnpacked, err := img.IsUnpacked(ctx, snapshotter) + if err != nil { + return nil, fmt.Errorf("unable to check if image named: %s is unpacked, err: %w", img.Name(), err) + } + if !imgUnpacked { + return nil, fmt.Errorf("unable to scan image named: %s, image is not unpacked", img.Name()) + } + + // Getting image id + imgConfig, err := img.Config(ctx) + if err != nil { + return nil, fmt.Errorf("unable to get image config for image named: %s, err: %w", img.Name(), err) + } + imageID := imgConfig.Digest.String() + + // Adding a lease to cleanup dandling snaphots at expiration + ctx, done, err := c.cl.WithLease(ctx, + leases.WithID(imageID), + leases.WithExpiration(expiration), + leases.WithLabels(map[string]string{ + "containerd.io/gc.ref.snapshot." + snapshotter: imageID, + }), + ) + if err != nil && !errdefs.IsAlreadyExists(err) { + return nil, fmt.Errorf("unable to get a lease, err: %w", err) + } + + // Getting top layer image id + diffIDs, err := img.RootFS(ctx) + if err != nil { + if err := done(ctx); err != nil { + log.Warnf("Unable to cancel containerd lease with id: %s, err: %v", imageID, err) + } + return nil, fmt.Errorf("unable to get layers digests for image: %s, err: %w", imageID, err) + } + chainID := identity.ChainID(diffIDs).String() + + // Creating snaphot for the top layer + s := c.cl.SnapshotService(snapshotter) + mounts, err := s.View(ctx, imageID, chainID) + if err != nil && !errdefs.IsAlreadyExists(err) { + if err := done(ctx); err != nil { + log.Warnf("Unable to cancel containerd lease with id: %s, err: %v", imageID, err) + } + return nil, fmt.Errorf("unable to build snapshot for image: %s, err: %w", imageID, err) + } + cleanSnapshot := func(ctx context.Context) error { + return s.Remove(ctx, imageID) + } + + // Nothing returned + if len(mounts) == 0 { + if err := cleanSnapshot(ctx); err != nil { + log.Warnf("Unable to clean snapshot with id: %s, err: %v", imageID, err) + } + if err := done(ctx); err != nil { + log.Warnf("Unable to cancel containerd lease with id: %s, err: %v", imageID, err) + } + return nil, fmt.Errorf("No snapshots returned for image: %s, err: %w", imageID, err) + } + + // Transforming mounts in case we're running in a container + if config.IsContainerized() { + for i := range mounts { + mounts[i].Source = strings.ReplaceAll(mounts[i].Source, "/var/lib", "/host/var/lib") + for j := range mounts[i].Options { + mounts[i].Options[j] = strings.ReplaceAll(mounts[i].Options[j], "/var/lib", "/host/var/lib") + } + } + } + + // Mouting returned mounts + log.Infof("Mounting %+v to %s", mounts, targetDir) + if err := mount.All(mounts, targetDir); err != nil { + if err := cleanSnapshot(ctx); err != nil { + log.Warnf("Unable to clean snapshot with id: %s, err: %v", imageID, err) + } + if err := done(ctx); err != nil { + log.Warnf("Unable to cancel containerd lease with id: %s, err: %v", imageID, err) + } + return nil, fmt.Errorf("unable to mount image %s to dir %s, err: %w", imageID, targetDir, err) + } + + return func(ctx context.Context) error { + ctx = namespaces.WithNamespace(ctx, namespace) + + if err := mount.UnmountAll(targetDir, 0); err != nil { + return fmt.Errorf("unable to unmount directory: %s for image: %s, err: %w", targetDir, imageID, err) + } + if err := cleanSnapshot(ctx); err != nil && !errdefs.IsNotFound(err) { + return fmt.Errorf("unable to cleanup snapshot for image: %s, err: %w", imageID, err) + } + if err := done(ctx); err != nil { + return fmt.Errorf("unable to cancel lease for image: %s, err: %w", imageID, err) + } + + return nil + }, nil +} diff --git a/pkg/util/containerd/containerd_util_test.go b/pkg/util/containerd/containerd_util_test.go index 59dead49ecbca..215157621fa78 100644 --- a/pkg/util/containerd/containerd_util_test.go +++ b/pkg/util/containerd/containerd_util_test.go @@ -147,7 +147,7 @@ func TestInfo(t *testing.T) { require.Equal(t, "foo", c.Image) } -func TestImage(t *testing.T) { +func TestImageOfContainer(t *testing.T) { mockUtil := ContainerdUtil{} image := &mockImage{ @@ -160,7 +160,7 @@ func TestImage(t *testing.T) { }, } - resultImage, err := mockUtil.Image(TestNamespace, container) + resultImage, err := mockUtil.ImageOfContainer(TestNamespace, container) require.NoError(t, err) require.Equal(t, resultImage, image) } diff --git a/pkg/util/containerd/fake/containerd_util.go b/pkg/util/containerd/fake/containerd_util.go index a9e0bdc6ee4c0..445fd9e4f2e93 100644 --- a/pkg/util/containerd/fake/containerd_util.go +++ b/pkg/util/containerd/fake/containerd_util.go @@ -10,6 +10,7 @@ package fake import ( "context" + "time" "github.com/containerd/containerd" "github.com/containerd/containerd/api/types" @@ -23,6 +24,7 @@ import ( // ContainerItf interface. It's only meant to be used in unit tests. type MockedContainerdClient struct { MockClose func() error + MockRawClient func() *containerd.Client MockCheckConnectivity func() *retry.Error MockEvents func() containerd.EventService MockContainers func(namespace string) ([]containerd.Container, error) @@ -31,7 +33,8 @@ type MockedContainerdClient struct { MockEnvVars func(namespace string, ctn containerd.Container) (map[string]string, error) MockMetadata func() (containerd.Version, error) MockListImages func(namespace string) ([]containerd.Image, error) - MockImage func(namespace string, ctn containerd.Container) (containerd.Image, error) + MockImage func(namespace string, name string) (containerd.Image, error) + MockImageOfContainer func(namespace string, ctn containerd.Container) (containerd.Image, error) MockImageSize func(namespace string, ctn containerd.Container) (int64, error) MockTaskMetrics func(namespace string, ctn containerd.Container) (*types.Metric, error) MockTaskPids func(namespace string, ctn containerd.Container) ([]containerd.ProcessInfo, error) @@ -45,6 +48,7 @@ type MockedContainerdClient struct { MockCallWithClientContext func(namespace string, f func(context.Context) error) error MockAnnotations func(namespace string, ctn containerd.Container) (map[string]string, error) MockIsSandbox func(namespace string, ctn containerd.Container) (bool, error) + MockMountImage func(ctx context.Context, expiration time.Duration, namespace string, img containerd.Image, targetDir string) (func(context.Context) error, error) } // Close is a mock method @@ -52,6 +56,11 @@ func (client *MockedContainerdClient) Close() error { return client.MockClose() } +// Close is a mock method +func (client *MockedContainerdClient) RawClient() *containerd.Client { + return client.MockRawClient() +} + // CheckConnectivity is a mock method func (client *MockedContainerdClient) CheckConnectivity() *retry.Error { return client.MockCheckConnectivity() @@ -63,8 +72,13 @@ func (client *MockedContainerdClient) ListImages(namespace string) ([]containerd } // Image is a mock method -func (client *MockedContainerdClient) Image(namespace string, ctn containerd.Container) (containerd.Image, error) { - return client.MockImage(namespace, ctn) +func (client *MockedContainerdClient) Image(namespace string, name string) (containerd.Image, error) { + return client.MockImage(namespace, name) +} + +// ImageOfContainer is a mock method +func (client *MockedContainerdClient) ImageOfContainer(namespace string, ctn containerd.Container) (containerd.Image, error) { + return client.MockImageOfContainer(namespace, ctn) } // ImageSize is a mock method @@ -161,3 +175,7 @@ func (client *MockedContainerdClient) Annotations(namespace string, ctn containe func (client *MockedContainerdClient) IsSandbox(namespace string, ctn containerd.Container) (bool, error) { return client.MockIsSandbox(namespace, ctn) } + +func (client *MockedContainerdClient) MountImage(ctx context.Context, expiration time.Duration, namespace string, img containerd.Image, targetDir string) (func(context.Context) error, error) { + return client.MockMountImage(ctx, expiration, namespace, img, targetDir) +} diff --git a/pkg/util/containers/image.go b/pkg/util/containers/image.go index 1959ef95720b3..e7cb6a0d20039 100644 --- a/pkg/util/containers/image.go +++ b/pkg/util/containers/image.go @@ -18,17 +18,18 @@ var ( ) // SplitImageName splits a valid image name (from ResolveImageName) and returns: -// - the "long image name" with registry and prefix, without tag -// - the "short image name", without registry, prefix nor tag -// - the image tag if present -// - an error if parsing failed -func SplitImageName(image string) (string, string, string, error) { +// - the "long image name" with registry and prefix, without tag +// - the registry +// - the "short image name", without registry, prefix nor tag +// - the image tag if present +// - an error if parsing failed +func SplitImageName(image string) (string, string, string, string, error) { // See TestSplitImageName for supported formats (number 6 will surprise you!) if image == "" { - return "", "", "", ErrEmptyImage + return "", "", "", "", ErrEmptyImage } if strings.HasPrefix(image, "sha256:") { - return "", "", "", ErrImageIsSha256 + return "", "", "", "", ErrImageIsSha256 } long := image if pos := strings.LastIndex(long, "@sha"); pos > 0 { @@ -36,9 +37,10 @@ func SplitImageName(image string) (string, string, string, error) { long = long[0:pos] } - var short, tag string + var registry, short, tag string lastColon := strings.LastIndex(long, ":") lastSlash := strings.LastIndex(long, "/") + firstSlash := strings.Index(long, "/") if lastColon > -1 && lastColon > lastSlash { // We have a tag @@ -51,5 +53,9 @@ func SplitImageName(image string) (string, string, string, error) { } else { short = long } - return long, short, tag, nil + if firstSlash > -1 && firstSlash != lastSlash { + // we have a registry + registry = long[:firstSlash] + } + return long, registry, short, tag, nil } diff --git a/pkg/util/containers/image_test.go b/pkg/util/containers/image_test.go index c2c541bb4b94e..7574af49675f0 100644 --- a/pkg/util/containers/image_test.go +++ b/pkg/util/containers/image_test.go @@ -16,43 +16,45 @@ func TestSplitImageName(t *testing.T) { for nb, tc := range []struct { source string longName string + registry string shortName string tag string err error }{ // Empty - {"", "", "", "", fmt.Errorf("empty image name")}, + {"", "", "", "", "", fmt.Errorf("empty image name")}, // A sha256 string - {"sha256:5bef08742407efd622d243692b79ba0055383bbce12900324f75e56f589aedb0", "", "", "", fmt.Errorf("invalid image name (is a sha256)")}, + {"sha256:5bef08742407efd622d243692b79ba0055383bbce12900324f75e56f589aedb0", "", "", "", "", fmt.Errorf("invalid image name (is a sha256)")}, // Shortest possibility - {"alpine", "alpine", "alpine", "", nil}, + {"alpine", "alpine", "", "alpine", "", nil}, // Historical docker format - {"nginx:latest", "nginx", "nginx", "latest", nil}, + {"nginx:latest", "nginx", "", "nginx", "latest", nil}, // Org prefix to be removed for short name {"datadog/docker-dd-agent:latest-jmx", - "datadog/docker-dd-agent", "docker-dd-agent", "latest-jmx", nil}, + "datadog/docker-dd-agent", "", "docker-dd-agent", "latest-jmx", nil}, // Sha-pinning used by many orchestrators -> empty tag // We should not have this string here as ResolveImageName should // have handled that before, but let's keep it just in case {"redis@sha256:5bef08742407efd622d243692b79ba0055383bbce12900324f75e56f589aedb0", - "redis", "redis", "", nil}, + "redis", "", "redis", "", nil}, // Quirky pinning used by swarm {"org/redis:latest@sha256:5bef08742407efd622d243692b79ba0055383bbce12900324f75e56f589aedb0", - "org/redis", "redis", "latest", nil}, + "org/redis", "", "redis", "latest", nil}, // Custom registry, simple form {"myregistry.local:5000/testing/test-image:version", - "myregistry.local:5000/testing/test-image", "test-image", "version", nil}, + "myregistry.local:5000/testing/test-image", "myregistry.local:5000", "test-image", "version", nil}, // Custom registry, most insane form possible {"myregistry.local:5000/testing/test-image:version@sha256:5bef08742407efd622d243692b79ba0055383bbce12900324f75e56f589aedb0", - "myregistry.local:5000/testing/test-image", "test-image", "version", nil}, + "myregistry.local:5000/testing/test-image", "myregistry.local:5000", "test-image", "version", nil}, // Test swarm image {"dockercloud/haproxy:1.6.7@sha256:8c4ed4049f55de49cbc8d03d057a5a7e8d609c264bb75b59a04470db1d1c5121", - "dockercloud/haproxy", "haproxy", "1.6.7", nil}, + "dockercloud/haproxy", "", "haproxy", "1.6.7", nil}, } { t.Run(fmt.Sprintf("case %d: %s", nb, tc.source), func(t *testing.T) { assert := assert.New(t) - long, short, tag, err := SplitImageName(tc.source) + long, registry, short, tag, err := SplitImageName(tc.source) assert.Equal(tc.longName, long) + assert.Equal(tc.registry, registry) assert.Equal(tc.shortName, short) assert.Equal(tc.tag, tag) diff --git a/pkg/util/containers/metrics/containerd/collector_cgroupv1.go b/pkg/util/containers/metrics/containerd/collector_cgroupv1.go index 0ff226a2a192f..983c212ece1f0 100644 --- a/pkg/util/containers/metrics/containerd/collector_cgroupv1.go +++ b/pkg/util/containers/metrics/containerd/collector_cgroupv1.go @@ -41,14 +41,14 @@ func getCPUStatsCgroupV1(cpuStat *v1.CPUStat) *provider.ContainerCPUStats { res := provider.ContainerCPUStats{} if cpuStat.Usage != nil { - res.Total = pointer.UIntToFloatPtr(cpuStat.Usage.Total) - res.System = pointer.UIntToFloatPtr(cpuStat.Usage.Kernel) - res.User = pointer.UIntToFloatPtr(cpuStat.Usage.User) + res.Total = pointer.Ptr(float64(cpuStat.Usage.Total)) + res.System = pointer.Ptr(float64(cpuStat.Usage.Kernel)) + res.User = pointer.Ptr(float64(cpuStat.Usage.User)) } if cpuStat.Throttling != nil { - res.ThrottledPeriods = pointer.UIntToFloatPtr(cpuStat.Throttling.ThrottledPeriods) - res.ThrottledTime = pointer.UIntToFloatPtr(cpuStat.Throttling.ThrottledTime) + res.ThrottledPeriods = pointer.Ptr(float64(cpuStat.Throttling.ThrottledPeriods)) + res.ThrottledTime = pointer.Ptr(float64(cpuStat.Throttling.ThrottledTime)) } return &res @@ -60,21 +60,21 @@ func getMemoryStatsCgroupV1(memStat *v1.MemoryStat) *provider.ContainerMemStats } res := provider.ContainerMemStats{ - RSS: pointer.UIntToFloatPtr(memStat.RSS), - Cache: pointer.UIntToFloatPtr(memStat.Cache), + RSS: pointer.Ptr(float64(memStat.RSS)), + Cache: pointer.Ptr(float64(memStat.Cache)), } if memStat.Usage != nil { - res.UsageTotal = pointer.UIntToFloatPtr(memStat.Usage.Usage) - res.Limit = pointer.UIntToFloatPtr(memStat.Usage.Limit) + res.UsageTotal = pointer.Ptr(float64(memStat.Usage.Usage)) + res.Limit = pointer.Ptr(float64(memStat.Usage.Limit)) } if memStat.Kernel != nil { - res.KernelMemory = pointer.UIntToFloatPtr(memStat.Kernel.Usage) + res.KernelMemory = pointer.Ptr(float64(memStat.Kernel.Usage)) } if memStat.Swap != nil { - res.Swap = pointer.UIntToFloatPtr(memStat.Swap.Usage) + res.Swap = pointer.Ptr(float64(memStat.Swap.Usage)) } return &res @@ -86,10 +86,10 @@ func getIOStatsCgroupV1(blkioStat *v1.BlkIOStat) *provider.ContainerIOStats { } result := provider.ContainerIOStats{ - ReadBytes: pointer.Float64Ptr(0), - WriteBytes: pointer.Float64Ptr(0), - ReadOperations: pointer.Float64Ptr(0), - WriteOperations: pointer.Float64Ptr(0), + ReadBytes: pointer.Ptr(0.0), + WriteBytes: pointer.Ptr(0.0), + ReadOperations: pointer.Ptr(0.0), + WriteOperations: pointer.Ptr(0.0), Devices: make(map[string]provider.DeviceIOStats), } @@ -98,9 +98,9 @@ func getIOStatsCgroupV1(blkioStat *v1.BlkIOStat) *provider.ContainerIOStats { device := result.Devices[deviceName] switch blkioStatEntry.Op { case "Read": - device.ReadBytes = pointer.Float64Ptr(float64(blkioStatEntry.Value)) + device.ReadBytes = pointer.Ptr(float64(blkioStatEntry.Value)) case "Write": - device.WriteBytes = pointer.Float64Ptr(float64(blkioStatEntry.Value)) + device.WriteBytes = pointer.Ptr(float64(blkioStatEntry.Value)) } result.Devices[deviceName] = device } @@ -110,9 +110,9 @@ func getIOStatsCgroupV1(blkioStat *v1.BlkIOStat) *provider.ContainerIOStats { device := result.Devices[deviceName] switch blkioStatEntry.Op { case "Read": - device.ReadOperations = pointer.Float64Ptr(float64(blkioStatEntry.Value)) + device.ReadOperations = pointer.Ptr(float64(blkioStatEntry.Value)) case "Write": - device.WriteOperations = pointer.Float64Ptr(float64(blkioStatEntry.Value)) + device.WriteOperations = pointer.Ptr(float64(blkioStatEntry.Value)) } result.Devices[deviceName] = device } @@ -138,10 +138,10 @@ func getIOStatsCgroupV1(blkioStat *v1.BlkIOStat) *provider.ContainerIOStats { func getNetworkStatsCgroupV1(networkStats []*v1.NetworkStat) *provider.ContainerNetworkStats { containerNetworkStats := provider.ContainerNetworkStats{ Timestamp: time.Now(), - BytesSent: pointer.Float64Ptr(0), - BytesRcvd: pointer.Float64Ptr(0), - PacketsSent: pointer.Float64Ptr(0), - PacketsRcvd: pointer.Float64Ptr(0), + BytesSent: pointer.Ptr(0.0), + BytesRcvd: pointer.Ptr(0.0), + PacketsSent: pointer.Ptr(0.0), + PacketsRcvd: pointer.Ptr(0.0), Interfaces: make(map[string]provider.InterfaceNetStats), } @@ -152,10 +152,10 @@ func getNetworkStatsCgroupV1(networkStats []*v1.NetworkStat) *provider.Container *containerNetworkStats.PacketsRcvd += float64(stats.RxPackets) containerNetworkStats.Interfaces[stats.Name] = provider.InterfaceNetStats{ - BytesSent: pointer.UIntToFloatPtr(stats.TxBytes), - BytesRcvd: pointer.UIntToFloatPtr(stats.RxBytes), - PacketsSent: pointer.UIntToFloatPtr(stats.TxPackets), - PacketsRcvd: pointer.UIntToFloatPtr(stats.RxPackets), + BytesSent: pointer.Ptr(float64(stats.TxBytes)), + BytesRcvd: pointer.Ptr(float64(stats.RxBytes)), + PacketsSent: pointer.Ptr(float64(stats.TxPackets)), + PacketsRcvd: pointer.Ptr(float64(stats.RxPackets)), } } diff --git a/pkg/util/containers/metrics/containerd/collector_cgroupv2.go b/pkg/util/containers/metrics/containerd/collector_cgroupv2.go index 10839bc95d3d4..aee65691a30f0 100644 --- a/pkg/util/containers/metrics/containerd/collector_cgroupv2.go +++ b/pkg/util/containers/metrics/containerd/collector_cgroupv2.go @@ -40,11 +40,11 @@ func getCPUStatsCgroupV2(cpuStat *v2.CPUStat) *provider.ContainerCPUStats { // Unfortunately the underlying struct does not provide a way to know if metrics are set or not return &provider.ContainerCPUStats{ - Total: pointer.UIntToFloatPtr(cpuStat.UsageUsec * uint64(time.Microsecond)), - System: pointer.UIntToFloatPtr(cpuStat.SystemUsec * uint64(time.Microsecond)), - User: pointer.UIntToFloatPtr(cpuStat.UserUsec * uint64(time.Microsecond)), - ThrottledTime: pointer.UIntToFloatPtr(cpuStat.ThrottledUsec * uint64(time.Microsecond)), - ThrottledPeriods: pointer.UIntToFloatPtr(cpuStat.NrThrottled), + Total: pointer.Ptr(float64(cpuStat.UsageUsec * uint64(time.Microsecond))), + System: pointer.Ptr(float64(cpuStat.SystemUsec * uint64(time.Microsecond))), + User: pointer.Ptr(float64(cpuStat.UserUsec * uint64(time.Microsecond))), + ThrottledTime: pointer.Ptr(float64(cpuStat.ThrottledUsec * uint64(time.Microsecond))), + ThrottledPeriods: pointer.Ptr(float64(cpuStat.NrThrottled)), } } @@ -54,16 +54,16 @@ func getMemoryStatsCgroupV2(memStat *v2.MemoryStat, memEvents *v2.MemoryEvents) } res := provider.ContainerMemStats{ - UsageTotal: pointer.UIntToFloatPtr(memStat.Usage), - RSS: pointer.UIntToFloatPtr(memStat.Anon), - Cache: pointer.UIntToFloatPtr(memStat.File), - KernelMemory: pointer.UIntToFloatPtr(memStat.Slab + memStat.KernelStack), - Limit: pointer.UIntToFloatPtr(memStat.UsageLimit), // TODO: Check value if no limit - Swap: pointer.UIntToFloatPtr(memStat.SwapUsage), + UsageTotal: pointer.Ptr(float64(memStat.Usage)), + RSS: pointer.Ptr(float64(memStat.Anon)), + Cache: pointer.Ptr(float64(memStat.File)), + KernelMemory: pointer.Ptr(float64(memStat.Slab + memStat.KernelStack)), + Limit: pointer.Ptr(float64(memStat.UsageLimit)), // TODO: Check value if no limit + Swap: pointer.Ptr(float64(memStat.SwapUsage)), } if memEvents != nil { - res.OOMEvents = pointer.UIntToFloatPtr(memEvents.Oom) + res.OOMEvents = pointer.Ptr(float64(memEvents.Oom)) } return &res @@ -86,10 +86,10 @@ func getIOStatsCgroupV2(ioStat *v2.IOStat) *provider.ContainerIOStats { sumWOps += float64(ioEntry.Wios) outIOStats := provider.DeviceIOStats{ - ReadBytes: pointer.UIntToFloatPtr(ioEntry.Rbytes), - WriteBytes: pointer.UIntToFloatPtr(ioEntry.Wbytes), - ReadOperations: pointer.UIntToFloatPtr(ioEntry.Rios), - WriteOperations: pointer.UIntToFloatPtr(ioEntry.Wios), + ReadBytes: pointer.Ptr(float64(ioEntry.Rbytes)), + WriteBytes: pointer.Ptr(float64(ioEntry.Wbytes)), + ReadOperations: pointer.Ptr(float64(ioEntry.Rios)), + WriteOperations: pointer.Ptr(float64(ioEntry.Wios)), } deviceName := fmt.Sprintf("%d:%d", ioEntry.Major, ioEntry.Minor) result.Devices[deviceName] = outIOStats diff --git a/pkg/util/containers/metrics/containerd/collector_linux.go b/pkg/util/containers/metrics/containerd/collector_linux.go index 78efa48d4f438..ae82246e79030 100644 --- a/pkg/util/containers/metrics/containerd/collector_linux.go +++ b/pkg/util/containers/metrics/containerd/collector_linux.go @@ -58,19 +58,19 @@ func fillStatsFromSpec(outContainerStats *provider.ContainerStats, spec *oci.Spe // If no limit is available, setting the limit to number of CPUs. // Always reporting a limit allows to compute CPU % accurately. if outContainerStats.CPU.Limit == nil { - outContainerStats.CPU.Limit = pointer.Float64Ptr(100 * float64(system.HostCPUCount())) + outContainerStats.CPU.Limit = pointer.Ptr(100 * float64(system.HostCPUCount())) } } func computeCPULimit(containerStats *provider.ContainerStats, spec *specs.LinuxCPU) { switch { case spec.Cpus != "": - containerStats.CPU.Limit = pointer.Float64Ptr(100 * float64(cgroups.ParseCPUSetFormat(spec.Cpus))) + containerStats.CPU.Limit = pointer.Ptr(100 * float64(cgroups.ParseCPUSetFormat(spec.Cpus))) case spec.Quota != nil && *spec.Quota > 0: period := 100000 // Default CFS Period if spec.Period != nil && *spec.Period > 0 { period = int(*spec.Period) } - containerStats.CPU.Limit = pointer.Float64Ptr(100 * float64(*spec.Quota) / float64(period)) + containerStats.CPU.Limit = pointer.Ptr(100 * float64(*spec.Quota) / float64(period)) } } diff --git a/pkg/util/containers/metrics/containerd/collector_linux_test.go b/pkg/util/containers/metrics/containerd/collector_linux_test.go index b78dddfb49fc8..c554ff8835998 100644 --- a/pkg/util/containers/metrics/containerd/collector_linux_test.go +++ b/pkg/util/containers/metrics/containerd/collector_linux_test.go @@ -169,37 +169,37 @@ func TestGetContainerStats_Containerd(t *testing.T) { expectedContainerStats: &provider.ContainerStats{ Timestamp: currentTime, CPU: &provider.ContainerCPUStats{ - Total: pointer.Float64Ptr(10000), - System: pointer.Float64Ptr(6000), - User: pointer.Float64Ptr(4000), - ThrottledPeriods: pointer.Float64Ptr(1), - ThrottledTime: pointer.Float64Ptr(1000), + Total: pointer.Ptr(10000.0), + System: pointer.Ptr(6000.0), + User: pointer.Ptr(4000.0), + ThrottledPeriods: pointer.Ptr(1.0), + ThrottledTime: pointer.Ptr(1000.0), }, Memory: &provider.ContainerMemStats{ - UsageTotal: pointer.Float64Ptr(1000), - KernelMemory: pointer.Float64Ptr(500), - Limit: pointer.Float64Ptr(2000), - RSS: pointer.Float64Ptr(100), - Cache: pointer.Float64Ptr(20), - Swap: pointer.Float64Ptr(10), + UsageTotal: pointer.Ptr(1000.0), + KernelMemory: pointer.Ptr(500.0), + Limit: pointer.Ptr(2000.0), + RSS: pointer.Ptr(100.0), + Cache: pointer.Ptr(20.0), + Swap: pointer.Ptr(10.0), }, IO: &provider.ContainerIOStats{ - ReadBytes: pointer.Float64Ptr(60), - WriteBytes: pointer.Float64Ptr(20), - ReadOperations: pointer.Float64Ptr(6), - WriteOperations: pointer.Float64Ptr(3), + ReadBytes: pointer.Ptr(60.0), + WriteBytes: pointer.Ptr(20.0), + ReadOperations: pointer.Ptr(6.0), + WriteOperations: pointer.Ptr(3.0), Devices: map[string]provider.DeviceIOStats{ "1:1": { - ReadBytes: pointer.Float64Ptr(10), - WriteBytes: pointer.Float64Ptr(15), - ReadOperations: pointer.Float64Ptr(1), - WriteOperations: pointer.Float64Ptr(2), + ReadBytes: pointer.Ptr(10.0), + WriteBytes: pointer.Ptr(15.0), + ReadOperations: pointer.Ptr(1.0), + WriteOperations: pointer.Ptr(2.0), }, "1:2": { - ReadBytes: pointer.Float64Ptr(50), - WriteBytes: pointer.Float64Ptr(5), - ReadOperations: pointer.Float64Ptr(5), - WriteOperations: pointer.Float64Ptr(1), + ReadBytes: pointer.Ptr(50.0), + WriteBytes: pointer.Ptr(5.0), + ReadOperations: pointer.Ptr(5.0), + WriteOperations: pointer.Ptr(1.0), }, }, }, @@ -213,37 +213,37 @@ func TestGetContainerStats_Containerd(t *testing.T) { expectedContainerStats: &provider.ContainerStats{ Timestamp: currentTime, CPU: &provider.ContainerCPUStats{ - Total: pointer.Float64Ptr(10000), - System: pointer.Float64Ptr(6000), - User: pointer.Float64Ptr(4000), - ThrottledPeriods: pointer.Float64Ptr(1), - ThrottledTime: pointer.Float64Ptr(1000), + Total: pointer.Ptr(10000.0), + System: pointer.Ptr(6000.0), + User: pointer.Ptr(4000.0), + ThrottledPeriods: pointer.Ptr(1.0), + ThrottledTime: pointer.Ptr(1000.0), }, Memory: &provider.ContainerMemStats{ - UsageTotal: pointer.Float64Ptr(1000), - KernelMemory: pointer.Float64Ptr(500), - Limit: pointer.Float64Ptr(2000), - RSS: pointer.Float64Ptr(100), - Cache: pointer.Float64Ptr(20), - Swap: pointer.Float64Ptr(10), + UsageTotal: pointer.Ptr(1000.0), + KernelMemory: pointer.Ptr(500.0), + Limit: pointer.Ptr(2000.0), + RSS: pointer.Ptr(100.0), + Cache: pointer.Ptr(20.0), + Swap: pointer.Ptr(10.0), }, IO: &provider.ContainerIOStats{ - ReadBytes: pointer.Float64Ptr(60), - WriteBytes: pointer.Float64Ptr(20), - ReadOperations: pointer.Float64Ptr(6), - WriteOperations: pointer.Float64Ptr(3), + ReadBytes: pointer.Ptr(60.0), + WriteBytes: pointer.Ptr(20.0), + ReadOperations: pointer.Ptr(6.0), + WriteOperations: pointer.Ptr(3.0), Devices: map[string]provider.DeviceIOStats{ "1:1": { - ReadBytes: pointer.Float64Ptr(10), - WriteBytes: pointer.Float64Ptr(15), - ReadOperations: pointer.Float64Ptr(1), - WriteOperations: pointer.Float64Ptr(2), + ReadBytes: pointer.Ptr(10.0), + WriteBytes: pointer.Ptr(15.0), + ReadOperations: pointer.Ptr(1.0), + WriteOperations: pointer.Ptr(2.0), }, "1:2": { - ReadBytes: pointer.Float64Ptr(50), - WriteBytes: pointer.Float64Ptr(5), - ReadOperations: pointer.Float64Ptr(5), - WriteOperations: pointer.Float64Ptr(1), + ReadBytes: pointer.Ptr(50.0), + WriteBytes: pointer.Ptr(5.0), + ReadOperations: pointer.Ptr(5.0), + WriteOperations: pointer.Ptr(1.0), }, }, }, @@ -319,22 +319,22 @@ func TestGetContainerNetworkStats_Containerd(t *testing.T) { Data: linuxMetricsAny, }, expectedNetworkStats: &provider.ContainerNetworkStats{ - BytesSent: pointer.Float64Ptr(220), - BytesRcvd: pointer.Float64Ptr(110), - PacketsSent: pointer.Float64Ptr(22), - PacketsRcvd: pointer.Float64Ptr(11), + BytesSent: pointer.Ptr(220.0), + BytesRcvd: pointer.Ptr(110.0), + PacketsSent: pointer.Ptr(22.0), + PacketsRcvd: pointer.Ptr(11.0), Interfaces: map[string]provider.InterfaceNetStats{ "interface-1": { - BytesSent: pointer.Float64Ptr(20), - BytesRcvd: pointer.Float64Ptr(10), - PacketsSent: pointer.Float64Ptr(2), - PacketsRcvd: pointer.Float64Ptr(1), + BytesSent: pointer.Ptr(20.0), + BytesRcvd: pointer.Ptr(10.0), + PacketsSent: pointer.Ptr(2.0), + PacketsRcvd: pointer.Ptr(1.0), }, "interface-2": { - BytesSent: pointer.Float64Ptr(200), - BytesRcvd: pointer.Float64Ptr(100), - PacketsSent: pointer.Float64Ptr(20), - PacketsRcvd: pointer.Float64Ptr(10), + BytesSent: pointer.Ptr(200.0), + BytesRcvd: pointer.Ptr(100.0), + PacketsSent: pointer.Ptr(20.0), + PacketsRcvd: pointer.Ptr(10.0), }, }, }, @@ -385,15 +385,15 @@ func Test_fillStatsFromSpec(t *testing.T) { Linux: &specs.Linux{ Resources: &specs.LinuxResources{ CPU: &specs.LinuxCPU{ - Quota: pointer.Int64Ptr(1000), - Period: pointer.UInt64Ptr(10000), + Quota: pointer.Ptr(int64(1000)), + Period: pointer.Ptr(uint64(10000)), }, }, }, }, expected: &provider.ContainerStats{ CPU: &provider.ContainerCPUStats{ - Limit: pointer.Float64Ptr(10), + Limit: pointer.Ptr(10.0), }, }, }, @@ -403,14 +403,14 @@ func Test_fillStatsFromSpec(t *testing.T) { Linux: &specs.Linux{ Resources: &specs.LinuxResources{ CPU: &specs.LinuxCPU{ - Quota: pointer.Int64Ptr(10000), + Quota: pointer.Ptr(int64(10000)), }, }, }, }, expected: &provider.ContainerStats{ CPU: &provider.ContainerCPUStats{ - Limit: pointer.Float64Ptr(10), + Limit: pointer.Ptr(10.0), }, }, }, @@ -427,7 +427,7 @@ func Test_fillStatsFromSpec(t *testing.T) { }, expected: &provider.ContainerStats{ CPU: &provider.ContainerCPUStats{ - Limit: pointer.Float64Ptr(400), + Limit: pointer.Ptr(400.0), }, }, }, @@ -440,7 +440,7 @@ func Test_fillStatsFromSpec(t *testing.T) { }, expected: &provider.ContainerStats{ CPU: &provider.ContainerCPUStats{ - Limit: pointer.Float64Ptr(100 * float64(system.HostCPUCount())), + Limit: pointer.Ptr(100 * float64(system.HostCPUCount())), }, }, }, diff --git a/pkg/util/containers/metrics/containerd/collector_test.go b/pkg/util/containers/metrics/containerd/collector_test.go index a7141e515d716..7691404e06652 100644 --- a/pkg/util/containers/metrics/containerd/collector_test.go +++ b/pkg/util/containers/metrics/containerd/collector_test.go @@ -78,7 +78,7 @@ func TestGetContainerIDForPID(t *testing.T) { // Returns a fake containerd client for testing. // For these tests we need 2 things: // - 1) Being able to control the metrics returned by the TaskMetrics -// function. +// function. // - 2) Define functions like Info, Spec, etc. so they don't return errors. func containerdClient(metrics *types.Metric) *fake.MockedContainerdClient { return &fake.MockedContainerdClient{ diff --git a/pkg/util/containers/metrics/containerd/collector_windows.go b/pkg/util/containers/metrics/containerd/collector_windows.go index aa05adc80136d..93e3259ba8fdf 100644 --- a/pkg/util/containers/metrics/containerd/collector_windows.go +++ b/pkg/util/containers/metrics/containerd/collector_windows.go @@ -57,9 +57,9 @@ func getContainerdCPUStatsWindows(procStats *wstats.WindowsContainerProcessorSta } return &provider.ContainerCPUStats{ - Total: pointer.UIntToFloatPtr(procStats.TotalRuntimeNS), - System: pointer.UIntToFloatPtr(procStats.RuntimeKernelNS), - User: pointer.UIntToFloatPtr(procStats.RuntimeUserNS), + Total: pointer.Ptr(float64(procStats.TotalRuntimeNS)), + System: pointer.Ptr(float64(procStats.RuntimeKernelNS)), + User: pointer.Ptr(float64(procStats.RuntimeUserNS)), } } @@ -69,10 +69,10 @@ func getContainerdMemoryStatsWindows(memStats *wstats.WindowsContainerMemoryStat } return &provider.ContainerMemStats{ - UsageTotal: pointer.UIntToFloatPtr(memStats.MemoryUsageCommitBytes), - PrivateWorkingSet: pointer.UIntToFloatPtr(memStats.MemoryUsagePrivateWorkingSetBytes), - CommitBytes: pointer.UIntToFloatPtr(memStats.MemoryUsageCommitBytes), - CommitPeakBytes: pointer.UIntToFloatPtr(memStats.MemoryUsageCommitPeakBytes), + UsageTotal: pointer.Ptr(float64(memStats.MemoryUsageCommitBytes)), + PrivateWorkingSet: pointer.Ptr(float64(memStats.MemoryUsagePrivateWorkingSetBytes)), + CommitBytes: pointer.Ptr(float64(memStats.MemoryUsageCommitBytes)), + CommitPeakBytes: pointer.Ptr(float64(memStats.MemoryUsageCommitPeakBytes)), } } @@ -82,10 +82,10 @@ func getContainerdIOStatsWindows(ioStats *wstats.WindowsContainerStorageStatisti } return &provider.ContainerIOStats{ - ReadBytes: pointer.UIntToFloatPtr(ioStats.ReadSizeBytes), - WriteBytes: pointer.UIntToFloatPtr(ioStats.WriteSizeBytes), - ReadOperations: pointer.UIntToFloatPtr(ioStats.ReadCountNormalized), - WriteOperations: pointer.UIntToFloatPtr(ioStats.WriteCountNormalized), + ReadBytes: pointer.Ptr(float64(ioStats.ReadSizeBytes)), + WriteBytes: pointer.Ptr(float64(ioStats.WriteSizeBytes)), + ReadOperations: pointer.Ptr(float64(ioStats.ReadCountNormalized)), + WriteOperations: pointer.Ptr(float64(ioStats.WriteCountNormalized)), } } @@ -101,10 +101,10 @@ func fillStatsFromSpec(outContainerStats *provider.ContainerStats, spec *oci.Spe // Setting CPU Limit from Spec if spec.Windows.Resources.CPU != nil && outContainerStats.CPU != nil { if spec.Windows.Resources.CPU.Count != nil && *spec.Windows.Resources.CPU.Count > 0 { - outContainerStats.CPU.Limit = pointer.Float64Ptr(float64(*spec.Windows.Resources.CPU.Count) * 100) + outContainerStats.CPU.Limit = pointer.Ptr(float64(*spec.Windows.Resources.CPU.Count) * 100) } else if spec.Windows.Resources.CPU.Maximum != nil && *spec.Windows.Resources.CPU.Maximum > 0 { // CPU Maximum is a 0-10000 value that gets computed as 10000 * (cpuLimit.MilliValue() / 1000) / runtime.NumCPU() - outContainerStats.CPU.Limit = pointer.Float64Ptr(float64(*spec.Windows.Resources.CPU.Maximum) / 100 * float64(system.HostCPUCount())) + outContainerStats.CPU.Limit = pointer.Ptr(float64(*spec.Windows.Resources.CPU.Maximum) / 100 * float64(system.HostCPUCount())) } } @@ -119,6 +119,6 @@ func fillStatsFromSpec(outContainerStats *provider.ContainerStats, spec *oci.Spe // If no limit is available, setting the limit to number of CPUs. // Always reporting a limit allows to compute CPU % accurately. if outContainerStats.CPU != nil && outContainerStats.CPU.Limit == nil { - outContainerStats.CPU.Limit = pointer.Float64Ptr(100 * float64(system.HostCPUCount())) + outContainerStats.CPU.Limit = pointer.Ptr(100 * float64(system.HostCPUCount())) } } diff --git a/pkg/util/containers/metrics/containerd/collector_windows_test.go b/pkg/util/containers/metrics/containerd/collector_windows_test.go index 548c66bbcc68b..825e853e8254c 100644 --- a/pkg/util/containers/metrics/containerd/collector_windows_test.go +++ b/pkg/util/containers/metrics/containerd/collector_windows_test.go @@ -70,21 +70,21 @@ func TestGetContainerStats_Containerd(t *testing.T) { expectedContainerStats: &provider.ContainerStats{ Timestamp: currentTime, CPU: &provider.ContainerCPUStats{ - Total: pointer.Float64Ptr(1000), - System: pointer.Float64Ptr(600), - User: pointer.Float64Ptr(400), + Total: pointer.Ptr(1000.0), + System: pointer.Ptr(600.0), + User: pointer.Ptr(400.0), }, Memory: &provider.ContainerMemStats{ - UsageTotal: pointer.Float64Ptr(1000), - PrivateWorkingSet: pointer.Float64Ptr(100), - CommitBytes: pointer.Float64Ptr(1000), - CommitPeakBytes: pointer.Float64Ptr(1500), + UsageTotal: pointer.Ptr(1000.0), + PrivateWorkingSet: pointer.Ptr(100.0), + CommitBytes: pointer.Ptr(1000.0), + CommitPeakBytes: pointer.Ptr(1500.0), }, IO: &provider.ContainerIOStats{ - ReadBytes: pointer.Float64Ptr(20), - WriteBytes: pointer.Float64Ptr(10), - ReadOperations: pointer.Float64Ptr(2), - WriteOperations: pointer.Float64Ptr(1), + ReadBytes: pointer.Ptr(20.0), + WriteBytes: pointer.Ptr(10.0), + ReadOperations: pointer.Ptr(2.0), + WriteOperations: pointer.Ptr(1.0), }, }, }, @@ -191,14 +191,14 @@ func Test_fillStatsFromSpec(t *testing.T) { Windows: &specs.Windows{ Resources: &specs.WindowsResources{ CPU: &specs.WindowsCPUResources{ - Count: pointer.UInt64Ptr(5), + Count: pointer.Ptr(uint64(5)), }, }, }, }, expected: &provider.ContainerStats{ CPU: &provider.ContainerCPUStats{ - Limit: pointer.Float64Ptr(500), + Limit: pointer.Ptr(500.0), }, Memory: &provider.ContainerMemStats{}, }, @@ -209,14 +209,14 @@ func Test_fillStatsFromSpec(t *testing.T) { Windows: &specs.Windows{ Resources: &specs.WindowsResources{ CPU: &specs.WindowsCPUResources{ - Maximum: pointer.UInt16Ptr(5000), + Maximum: pointer.Ptr(uint16(5000)), }, }, }, }, expected: &provider.ContainerStats{ CPU: &provider.ContainerCPUStats{ - Limit: pointer.Float64Ptr(50 * float64(system.HostCPUCount())), + Limit: pointer.Ptr(50 * float64(system.HostCPUCount())), }, Memory: &provider.ContainerMemStats{}, }, @@ -227,17 +227,17 @@ func Test_fillStatsFromSpec(t *testing.T) { Windows: &specs.Windows{ Resources: &specs.WindowsResources{ Memory: &specs.WindowsMemoryResources{ - Limit: pointer.UInt64Ptr(500), + Limit: pointer.Ptr(uint64(500)), }, }, }, }, expected: &provider.ContainerStats{ CPU: &provider.ContainerCPUStats{ - Limit: pointer.Float64Ptr(100 * float64(system.HostCPUCount())), + Limit: pointer.Ptr(100 * float64(system.HostCPUCount())), }, Memory: &provider.ContainerMemStats{ - Limit: pointer.Float64Ptr(500), + Limit: pointer.Ptr(500.0), }, }, }, diff --git a/pkg/util/containers/metrics/cri/collector.go b/pkg/util/containers/metrics/cri/collector.go index 112991b61fba5..fe68eb59926f0 100644 --- a/pkg/util/containers/metrics/cri/collector.go +++ b/pkg/util/containers/metrics/cri/collector.go @@ -67,10 +67,10 @@ func (collector *criCollector) GetContainerStats(containerNS, containerID string return &provider.ContainerStats{ Timestamp: time.Now(), CPU: &provider.ContainerCPUStats{ - Total: pointer.UIntToFloatPtr(stats.GetCpu().GetUsageCoreNanoSeconds().GetValue()), + Total: pointer.Ptr(float64(stats.GetCpu().GetUsageCoreNanoSeconds().GetValue())), }, Memory: &provider.ContainerMemStats{ - UsageTotal: pointer.UIntToFloatPtr(stats.GetMemory().GetWorkingSetBytes().GetValue()), + UsageTotal: pointer.Ptr(float64(stats.GetMemory().GetWorkingSetBytes().GetValue())), }, }, nil } diff --git a/pkg/util/containers/metrics/cri/collector_test.go b/pkg/util/containers/metrics/cri/collector_test.go index 12b603ac017be..1374263161025 100644 --- a/pkg/util/containers/metrics/cri/collector_test.go +++ b/pkg/util/containers/metrics/cri/collector_test.go @@ -49,8 +49,8 @@ func TestGetContainerStats(t *testing.T) { stats, err := collector.GetContainerStats("", containerID, 10*time.Second) assert.NoError(t, err) - assert.Equal(t, pointer.UIntToFloatPtr(1000), stats.CPU.Total) - assert.Equal(t, pointer.UIntToFloatPtr(1024), stats.Memory.UsageTotal) + assert.Equal(t, pointer.Ptr(1000.0), stats.CPU.Total) + assert.Equal(t, pointer.Ptr(1024.0), stats.Memory.UsageTotal) } func TestGetContainerNetworkStats(t *testing.T) { diff --git a/pkg/util/containers/metrics/docker/collector.go b/pkg/util/containers/metrics/docker/collector.go index 07556e26a4c0a..176c09198a766 100644 --- a/pkg/util/containers/metrics/docker/collector.go +++ b/pkg/util/containers/metrics/docker/collector.go @@ -219,17 +219,17 @@ func computeMemoryLimit(containerStats *provider.ContainerStats, spec *types.Con } if spec.HostConfig.Memory > 0 { - containerStats.Memory.Limit = pointer.IntToFloatPtr(spec.HostConfig.Memory) + containerStats.Memory.Limit = pointer.Ptr(float64(spec.HostConfig.Memory)) } } func convertNetworkStats(stats *types.StatsJSON) *provider.ContainerNetworkStats { containerNetworkStats := &provider.ContainerNetworkStats{ Timestamp: stats.Read, - BytesSent: pointer.Float64Ptr(0), - BytesRcvd: pointer.Float64Ptr(0), - PacketsSent: pointer.Float64Ptr(0), - PacketsRcvd: pointer.Float64Ptr(0), + BytesSent: pointer.Ptr(0.0), + BytesRcvd: pointer.Ptr(0.0), + PacketsSent: pointer.Ptr(0.0), + PacketsRcvd: pointer.Ptr(0.0), Interfaces: make(map[string]provider.InterfaceNetStats), } @@ -240,10 +240,10 @@ func convertNetworkStats(stats *types.StatsJSON) *provider.ContainerNetworkStats *containerNetworkStats.PacketsRcvd += float64(netStats.RxPackets) ifNetStats := provider.InterfaceNetStats{ - BytesSent: pointer.UIntToFloatPtr(netStats.TxBytes), - BytesRcvd: pointer.UIntToFloatPtr(netStats.RxBytes), - PacketsSent: pointer.UIntToFloatPtr(netStats.TxPackets), - PacketsRcvd: pointer.UIntToFloatPtr(netStats.RxPackets), + BytesSent: pointer.Ptr(float64(netStats.TxBytes)), + BytesRcvd: pointer.Ptr(float64(netStats.RxBytes)), + PacketsSent: pointer.Ptr(float64(netStats.TxPackets)), + PacketsRcvd: pointer.Ptr(float64(netStats.RxPackets)), } containerNetworkStats.Interfaces[ifname] = ifNetStats } diff --git a/pkg/util/containers/metrics/docker/collector_linux.go b/pkg/util/containers/metrics/docker/collector_linux.go index 9bff32820c49e..a18f79f2b4f74 100644 --- a/pkg/util/containers/metrics/docker/collector_linux.go +++ b/pkg/util/containers/metrics/docker/collector_linux.go @@ -34,33 +34,33 @@ func convertContainerStats(stats *types.Stats) *provider.ContainerStats { func convertCPUStats(cpuStats *types.CPUStats) *provider.ContainerCPUStats { return &provider.ContainerCPUStats{ - Total: pointer.UIntToFloatPtr(cpuStats.CPUUsage.TotalUsage), - System: pointer.UIntToFloatPtr(cpuStats.CPUUsage.UsageInKernelmode), - User: pointer.UIntToFloatPtr(cpuStats.CPUUsage.UsageInUsermode), - ThrottledPeriods: pointer.UIntToFloatPtr(cpuStats.ThrottlingData.ThrottledPeriods), - ThrottledTime: pointer.UIntToFloatPtr(cpuStats.ThrottlingData.ThrottledTime), + Total: pointer.Ptr(float64(cpuStats.CPUUsage.TotalUsage)), + System: pointer.Ptr(float64(cpuStats.CPUUsage.UsageInKernelmode)), + User: pointer.Ptr(float64(cpuStats.CPUUsage.UsageInUsermode)), + ThrottledPeriods: pointer.Ptr(float64(cpuStats.ThrottlingData.ThrottledPeriods)), + ThrottledTime: pointer.Ptr(float64(cpuStats.ThrottlingData.ThrottledTime)), } } func convertMemoryStats(memStats *types.MemoryStats) *provider.ContainerMemStats { containerMemStats := &provider.ContainerMemStats{ - UsageTotal: pointer.UIntToFloatPtr(memStats.Usage), - Limit: pointer.UIntToFloatPtr(memStats.Limit), - OOMEvents: pointer.UIntToFloatPtr(memStats.Failcnt), + UsageTotal: pointer.Ptr(float64(memStats.Usage)), + Limit: pointer.Ptr(float64(memStats.Limit)), + OOMEvents: pointer.Ptr(float64(memStats.Failcnt)), } if rss, found := memStats.Stats["rss"]; found { - containerMemStats.RSS = pointer.UIntToFloatPtr(rss) + containerMemStats.RSS = pointer.Ptr(float64(rss)) } if cache, found := memStats.Stats["cache"]; found { - containerMemStats.Cache = pointer.UIntToFloatPtr(cache) + containerMemStats.Cache = pointer.Ptr(float64(cache)) } // `kernel_stack` and `slab`, which are used to compute `KernelMemory` are available only with cgroup v2 if kernelStack, found := memStats.Stats["kernel_stack"]; found { if slab, found := memStats.Stats["slab"]; found { - containerMemStats.KernelMemory = pointer.UIntToFloatPtr(kernelStack + slab) + containerMemStats.KernelMemory = pointer.Ptr(float64(kernelStack + slab)) } } @@ -69,10 +69,10 @@ func convertMemoryStats(memStats *types.MemoryStats) *provider.ContainerMemStats func convertIOStats(ioStats *types.BlkioStats) *provider.ContainerIOStats { containerIOStats := provider.ContainerIOStats{ - ReadBytes: pointer.Float64Ptr(0), - WriteBytes: pointer.Float64Ptr(0), - ReadOperations: pointer.Float64Ptr(0), - WriteOperations: pointer.Float64Ptr(0), + ReadBytes: pointer.Ptr(0.0), + WriteBytes: pointer.Ptr(0.0), + ReadOperations: pointer.Ptr(0.0), + WriteOperations: pointer.Ptr(0.0), Devices: make(map[string]provider.DeviceIOStats), } @@ -92,10 +92,10 @@ func convertIOStats(ioStats *types.BlkioStats) *provider.ContainerIOStats { switch blkioStatEntry.Op { case "Read": - device.ReadBytes = pointer.UIntToFloatPtr(blkioStatEntry.Value) + device.ReadBytes = pointer.Ptr(float64(blkioStatEntry.Value)) *containerIOStats.ReadBytes += *device.ReadBytes case "Write": - device.WriteBytes = pointer.UIntToFloatPtr(blkioStatEntry.Value) + device.WriteBytes = pointer.Ptr(float64(blkioStatEntry.Value)) *containerIOStats.WriteBytes += *device.WriteBytes } @@ -114,10 +114,10 @@ func convertIOStats(ioStats *types.BlkioStats) *provider.ContainerIOStats { switch blkioStatEntry.Op { case "Read": - device.ReadOperations = pointer.UIntToFloatPtr(blkioStatEntry.Value) + device.ReadOperations = pointer.Ptr(float64(blkioStatEntry.Value)) *containerIOStats.ReadOperations += *device.ReadOperations case "Write": - device.WriteOperations = pointer.UIntToFloatPtr(blkioStatEntry.Value) + device.WriteOperations = pointer.Ptr(float64(blkioStatEntry.Value)) *containerIOStats.WriteOperations += *device.WriteOperations } @@ -131,8 +131,8 @@ func convertIOStats(ioStats *types.BlkioStats) *provider.ContainerIOStats { func convertPIDStats(pidStats *types.PidsStats) *provider.ContainerPIDStats { return &provider.ContainerPIDStats{ - ThreadCount: pointer.UIntToFloatPtr(pidStats.Current), - ThreadLimit: pointer.UIntToFloatPtr(pidStats.Limit), + ThreadCount: pointer.Ptr(float64(pidStats.Current)), + ThreadLimit: pointer.Ptr(float64(pidStats.Limit)), } } diff --git a/pkg/util/containers/metrics/docker/collector_linux_test.go b/pkg/util/containers/metrics/docker/collector_linux_test.go index aad7a987eb4ec..2e0eb752f9f5c 100644 --- a/pkg/util/containers/metrics/docker/collector_linux_test.go +++ b/pkg/util/containers/metrics/docker/collector_linux_test.go @@ -42,11 +42,11 @@ func Test_convertCPUStats(t *testing.T) { }, }, expectedOutput: provider.ContainerCPUStats{ - Total: pointer.Float64Ptr(42), - System: pointer.Float64Ptr(43), - User: pointer.Float64Ptr(44), - ThrottledPeriods: pointer.Float64Ptr(45), - ThrottledTime: pointer.Float64Ptr(46), + Total: pointer.Ptr(42.0), + System: pointer.Ptr(43.0), + User: pointer.Ptr(44.0), + ThrottledPeriods: pointer.Ptr(45.0), + ThrottledTime: pointer.Ptr(46.0), }, }, } @@ -78,12 +78,12 @@ func Test_convertMemoryStats(t *testing.T) { }, }, expectedOutput: provider.ContainerMemStats{ - UsageTotal: pointer.Float64Ptr(42), - KernelMemory: pointer.Float64Ptr(95), - Limit: pointer.Float64Ptr(43), - OOMEvents: pointer.Float64Ptr(44), - RSS: pointer.Float64Ptr(45), - Cache: pointer.Float64Ptr(46), + UsageTotal: pointer.Ptr(42.0), + KernelMemory: pointer.Ptr(95.0), + Limit: pointer.Ptr(43.0), + OOMEvents: pointer.Ptr(44.0), + RSS: pointer.Ptr(45.0), + Cache: pointer.Ptr(46.0), }, }, } @@ -158,22 +158,22 @@ func Test_convertIOStats(t *testing.T) { }, }, expectedOutput: provider.ContainerIOStats{ - ReadBytes: pointer.Float64Ptr(86), - WriteBytes: pointer.Float64Ptr(88), - ReadOperations: pointer.Float64Ptr(94), - WriteOperations: pointer.Float64Ptr(96), + ReadBytes: pointer.Ptr(86.0), + WriteBytes: pointer.Ptr(88.0), + ReadOperations: pointer.Ptr(94.0), + WriteOperations: pointer.Ptr(96.0), Devices: map[string]provider.DeviceIOStats{ "foo1": { - ReadBytes: pointer.Float64Ptr(42), - WriteBytes: pointer.Float64Ptr(43), - ReadOperations: pointer.Float64Ptr(46), - WriteOperations: pointer.Float64Ptr(47), + ReadBytes: pointer.Ptr(42.0), + WriteBytes: pointer.Ptr(43.0), + ReadOperations: pointer.Ptr(46.0), + WriteOperations: pointer.Ptr(47.0), }, "bar2": { - ReadBytes: pointer.Float64Ptr(44), - WriteBytes: pointer.Float64Ptr(45), - ReadOperations: pointer.Float64Ptr(48), - WriteOperations: pointer.Float64Ptr(49), + ReadBytes: pointer.Ptr(44.0), + WriteBytes: pointer.Ptr(45.0), + ReadOperations: pointer.Ptr(48.0), + WriteOperations: pointer.Ptr(49.0), }, }, }, @@ -213,8 +213,8 @@ func Test_convetrPIDStats(t *testing.T) { Limit: 43, }, expectedOutput: provider.ContainerPIDStats{ - ThreadCount: pointer.Float64Ptr(42), - ThreadLimit: pointer.Float64Ptr(43), + ThreadCount: pointer.Ptr(42.0), + ThreadLimit: pointer.Ptr(43.0), }, }, } diff --git a/pkg/util/containers/metrics/docker/collector_test.go b/pkg/util/containers/metrics/docker/collector_test.go index 2716f0f44f6e0..967a061de58ce 100644 --- a/pkg/util/containers/metrics/docker/collector_test.go +++ b/pkg/util/containers/metrics/docker/collector_test.go @@ -49,22 +49,22 @@ func TestConvertNetworkStats(t *testing.T) { }, }, expectedOutput: provider.ContainerNetworkStats{ - BytesSent: pointer.Float64Ptr(92), - BytesRcvd: pointer.Float64Ptr(88), - PacketsSent: pointer.Float64Ptr(94), - PacketsRcvd: pointer.Float64Ptr(90), + BytesSent: pointer.Ptr(92.0), + BytesRcvd: pointer.Ptr(88.0), + PacketsSent: pointer.Ptr(94.0), + PacketsRcvd: pointer.Ptr(90.0), Interfaces: map[string]provider.InterfaceNetStats{ "eth0": { - BytesSent: pointer.Float64Ptr(44), - BytesRcvd: pointer.Float64Ptr(42), - PacketsSent: pointer.Float64Ptr(45), - PacketsRcvd: pointer.Float64Ptr(43), + BytesSent: pointer.Ptr(44.0), + BytesRcvd: pointer.Ptr(42.0), + PacketsSent: pointer.Ptr(45.0), + PacketsRcvd: pointer.Ptr(43.0), }, "eth1": { - BytesSent: pointer.Float64Ptr(48), - BytesRcvd: pointer.Float64Ptr(46), - PacketsSent: pointer.Float64Ptr(49), - PacketsRcvd: pointer.Float64Ptr(47), + BytesSent: pointer.Ptr(48.0), + BytesRcvd: pointer.Ptr(46.0), + PacketsSent: pointer.Ptr(49.0), + PacketsRcvd: pointer.Ptr(47.0), }, }, }, @@ -148,7 +148,7 @@ func Test_fillStatsFromSpec(t *testing.T) { }, expectedStats: &provider.ContainerStats{ Memory: &provider.ContainerMemStats{ - Limit: pointer.Float64Ptr(500), + Limit: pointer.Ptr(500.0), }, }, }, diff --git a/pkg/util/containers/metrics/docker/collector_windows.go b/pkg/util/containers/metrics/docker/collector_windows.go index 8d6b30018ac8a..86d2527c5f294 100644 --- a/pkg/util/containers/metrics/docker/collector_windows.go +++ b/pkg/util/containers/metrics/docker/collector_windows.go @@ -30,33 +30,33 @@ func convertCPUStats(cpuStats *types.CPUStats) *provider.ContainerCPUStats { return &provider.ContainerCPUStats{ // ContainerCPUStats expects CPU metrics in nanoseconds // *On Windows* (only) CPUStats units are 100’s of nanoseconds - Total: pointer.UIntToFloatPtr(100 * cpuStats.CPUUsage.TotalUsage), - System: pointer.UIntToFloatPtr(100 * cpuStats.CPUUsage.UsageInKernelmode), - User: pointer.UIntToFloatPtr(100 * cpuStats.CPUUsage.UsageInUsermode), + Total: pointer.Ptr(100 * float64(cpuStats.CPUUsage.TotalUsage)), + System: pointer.Ptr(100 * float64(cpuStats.CPUUsage.UsageInKernelmode)), + User: pointer.Ptr(100 * float64(cpuStats.CPUUsage.UsageInUsermode)), } } func convertMemoryStats(memStats *types.MemoryStats) *provider.ContainerMemStats { return &provider.ContainerMemStats{ - UsageTotal: pointer.UIntToFloatPtr(memStats.Commit), - PrivateWorkingSet: pointer.UIntToFloatPtr(memStats.PrivateWorkingSet), - CommitBytes: pointer.UIntToFloatPtr(memStats.Commit), - CommitPeakBytes: pointer.UIntToFloatPtr(memStats.CommitPeak), + UsageTotal: pointer.Ptr(float64(memStats.Commit)), + PrivateWorkingSet: pointer.Ptr(float64(memStats.PrivateWorkingSet)), + CommitBytes: pointer.Ptr(float64(memStats.Commit)), + CommitPeakBytes: pointer.Ptr(float64(memStats.CommitPeak)), } } func convertIOStats(storageStats *types.StorageStats) *provider.ContainerIOStats { return &provider.ContainerIOStats{ - ReadBytes: pointer.UIntToFloatPtr(storageStats.ReadSizeBytes), - WriteBytes: pointer.UIntToFloatPtr(storageStats.WriteSizeBytes), - ReadOperations: pointer.UIntToFloatPtr(storageStats.ReadCountNormalized), - WriteOperations: pointer.UIntToFloatPtr(storageStats.WriteCountNormalized), + ReadBytes: pointer.Ptr(float64(storageStats.ReadSizeBytes)), + WriteBytes: pointer.Ptr(float64(storageStats.WriteSizeBytes)), + ReadOperations: pointer.Ptr(float64(storageStats.ReadCountNormalized)), + WriteOperations: pointer.Ptr(float64(storageStats.WriteCountNormalized)), } } func convertPIDStats(numProcs uint32) *provider.ContainerPIDStats { return &provider.ContainerPIDStats{ - ThreadCount: pointer.UIntToFloatPtr(uint64(numProcs)), + ThreadCount: pointer.Ptr(float64(numProcs)), } } diff --git a/pkg/util/containers/metrics/docker/collector_windows_test.go b/pkg/util/containers/metrics/docker/collector_windows_test.go index c32bb5545177a..54b47009ca047 100644 --- a/pkg/util/containers/metrics/docker/collector_windows_test.go +++ b/pkg/util/containers/metrics/docker/collector_windows_test.go @@ -36,9 +36,9 @@ func Test_convertCPUStats(t *testing.T) { }, }, expectedOutput: provider.ContainerCPUStats{ - Total: pointer.Float64Ptr(4200), - System: pointer.Float64Ptr(4300), - User: pointer.Float64Ptr(4400), + Total: pointer.Ptr(4200.0), + System: pointer.Ptr(4300.0), + User: pointer.Ptr(4400.0), }, }, } @@ -64,10 +64,10 @@ func Test_convertMemoryStats(t *testing.T) { PrivateWorkingSet: 46, }, expectedOutput: provider.ContainerMemStats{ - UsageTotal: pointer.Float64Ptr(44), - PrivateWorkingSet: pointer.Float64Ptr(46), - CommitBytes: pointer.Float64Ptr(44), - CommitPeakBytes: pointer.Float64Ptr(45), + UsageTotal: pointer.Ptr(44.0), + PrivateWorkingSet: pointer.Ptr(46.0), + CommitBytes: pointer.Ptr(44.0), + CommitPeakBytes: pointer.Ptr(45.0), }, }, } @@ -94,10 +94,10 @@ func Test_convertIOStats(t *testing.T) { WriteSizeBytes: 45, }, expectedOutput: provider.ContainerIOStats{ - ReadBytes: pointer.Float64Ptr(43), - WriteBytes: pointer.Float64Ptr(45), - ReadOperations: pointer.Float64Ptr(42), - WriteOperations: pointer.Float64Ptr(44), + ReadBytes: pointer.Ptr(43.0), + WriteBytes: pointer.Ptr(45.0), + ReadOperations: pointer.Ptr(42.0), + WriteOperations: pointer.Ptr(44.0), }, }, } @@ -119,7 +119,7 @@ func Test_convetrPIDStats(t *testing.T) { name: "basic", input: 42, expectedOutput: provider.ContainerPIDStats{ - ThreadCount: pointer.Float64Ptr(42), + ThreadCount: pointer.Ptr(42.0), }, }, } diff --git a/pkg/util/containers/metrics/ecsfargate/collector.go b/pkg/util/containers/metrics/ecsfargate/collector.go index b75b79a33ffe0..dae5d13fee7b7 100644 --- a/pkg/util/containers/metrics/ecsfargate/collector.go +++ b/pkg/util/containers/metrics/ecsfargate/collector.go @@ -190,10 +190,10 @@ func convertNetworkStats(ecsStats *v2.ContainerStats) *provider.ContainerNetwork var totalPacketsRcvd, totalPacketsSent, totalBytesRcvd, totalBytesSent uint64 for iface, statsPerInterface := range ecsStats.Networks { iStats := provider.InterfaceNetStats{ - BytesSent: pointer.UIntToFloatPtr(statsPerInterface.TxBytes), - PacketsSent: pointer.UIntToFloatPtr(statsPerInterface.TxPackets), - BytesRcvd: pointer.UIntToFloatPtr(statsPerInterface.RxBytes), - PacketsRcvd: pointer.UIntToFloatPtr(statsPerInterface.RxPackets), + BytesSent: pointer.Ptr(float64(statsPerInterface.TxBytes)), + PacketsSent: pointer.Ptr(float64(statsPerInterface.TxPackets)), + BytesRcvd: pointer.Ptr(float64(statsPerInterface.RxBytes)), + PacketsRcvd: pointer.Ptr(float64(statsPerInterface.RxPackets)), } stats.Interfaces[iface] = iStats @@ -203,10 +203,10 @@ func convertNetworkStats(ecsStats *v2.ContainerStats) *provider.ContainerNetwork totalBytesSent += statsPerInterface.TxBytes } - stats.PacketsRcvd = pointer.UIntToFloatPtr(totalPacketsRcvd) - stats.PacketsSent = pointer.UIntToFloatPtr(totalPacketsSent) - stats.BytesRcvd = pointer.UIntToFloatPtr(totalBytesRcvd) - stats.BytesSent = pointer.UIntToFloatPtr(totalBytesSent) + stats.PacketsRcvd = pointer.Ptr(float64(totalPacketsRcvd)) + stats.PacketsSent = pointer.Ptr(float64(totalPacketsSent)) + stats.BytesRcvd = pointer.Ptr(float64(totalBytesRcvd)) + stats.BytesSent = pointer.Ptr(float64(totalBytesSent)) return stats } @@ -217,9 +217,9 @@ func convertCPUStats(cpuStats *v2.CPUStats) *provider.ContainerCPUStats { } return &provider.ContainerCPUStats{ - Total: pointer.UIntToFloatPtr(cpuStats.Usage.Total), - System: pointer.UIntToFloatPtr(cpuStats.Usage.Kernelmode), - User: pointer.UIntToFloatPtr(cpuStats.Usage.Usermode), + Total: pointer.Ptr(float64(cpuStats.Usage.Total)), + System: pointer.Ptr(float64(cpuStats.Usage.Kernelmode)), + User: pointer.Ptr(float64(cpuStats.Usage.Usermode)), } } @@ -229,13 +229,13 @@ func convertMemoryStats(memStats *v2.MemStats) *provider.ContainerMemStats { } cMemStats := &provider.ContainerMemStats{ - UsageTotal: pointer.UIntToFloatPtr(memStats.Usage), - RSS: pointer.UIntToFloatPtr(memStats.Details.RSS), - Cache: pointer.UIntToFloatPtr(memStats.Details.Cache), + UsageTotal: pointer.Ptr(float64(memStats.Usage)), + RSS: pointer.Ptr(float64(memStats.Details.RSS)), + Cache: pointer.Ptr(float64(memStats.Details.Cache)), } if memStats.Limit > 0 && memStats.Limit < ecsUnsetMemoryLimit { - cMemStats.Limit = pointer.UIntToFloatPtr(memStats.Limit) + cMemStats.Limit = pointer.Ptr(float64(memStats.Limit)) } return cMemStats @@ -271,10 +271,10 @@ func convertIOStats(ioStats *v2.IOStats) *provider.ContainerIOStats { } return &provider.ContainerIOStats{ - ReadBytes: pointer.UIntToFloatPtr(readBytes), - WriteBytes: pointer.UIntToFloatPtr(writeBytes), - ReadOperations: pointer.UIntToFloatPtr(readOp), - WriteOperations: pointer.UIntToFloatPtr(writeOp), + ReadBytes: pointer.Ptr(float64(readBytes)), + WriteBytes: pointer.Ptr(float64(writeBytes)), + ReadOperations: pointer.Ptr(float64(readOp)), + WriteOperations: pointer.Ptr(float64(writeOp)), } } @@ -282,11 +282,11 @@ func fillFromSpec(containerStats *provider.ContainerStats, taskSpec *v2.Task) { // Handling Task CPU/Memory Limit (cannot be empty, mandatory on ECS Fargate) taskCPULimit := taskSpec.Limits[cpuKey] if taskCPULimit != 0 && containerStats.CPU != nil { - containerStats.CPU.Limit = pointer.Float64Ptr(taskCPULimit * 100) // vCPU to percentage (0-N00%) + containerStats.CPU.Limit = pointer.Ptr(taskCPULimit * 100) // vCPU to percentage (0-N00%) } taskMemoryLimit := taskSpec.Limits[memoryKey] if taskMemoryLimit != 0 && containerStats.Memory != nil && containerStats.Memory.Limit == nil { - containerStats.Memory.Limit = pointer.Float64Ptr(taskMemoryLimit * 1024 * 1024) // Megabytes to bytes + containerStats.Memory.Limit = pointer.Ptr(taskMemoryLimit * 1024 * 1024) // Megabytes to bytes } } diff --git a/pkg/util/containers/metrics/ecsfargate/collector_test.go b/pkg/util/containers/metrics/ecsfargate/collector_test.go index 91dffb5259f28..c71920c08afb8 100644 --- a/pkg/util/containers/metrics/ecsfargate/collector_test.go +++ b/pkg/util/containers/metrics/ecsfargate/collector_test.go @@ -42,11 +42,11 @@ func TestConvertEcsNetworkStats(t *testing.T) { }, want: &provider.ContainerNetworkStats{ Timestamp: testTime, - Interfaces: map[string]provider.InterfaceNetStats{"eth1": {BytesRcvd: pointer.UIntToFloatPtr(2398415937), PacketsRcvd: pointer.UIntToFloatPtr(1898631), BytesSent: pointer.UIntToFloatPtr(1259037719), PacketsSent: pointer.UIntToFloatPtr(428002)}}, - BytesRcvd: pointer.UIntToFloatPtr(2398415937), - PacketsRcvd: pointer.UIntToFloatPtr(1898631), - BytesSent: pointer.UIntToFloatPtr(1259037719), - PacketsSent: pointer.UIntToFloatPtr(428002), + Interfaces: map[string]provider.InterfaceNetStats{"eth1": {BytesRcvd: pointer.Ptr(2398415937.0), PacketsRcvd: pointer.Ptr(1898631.0), BytesSent: pointer.Ptr(1259037719.0), PacketsSent: pointer.Ptr(428002.0)}}, + BytesRcvd: pointer.Ptr(2398415937.0), + PacketsRcvd: pointer.Ptr(1898631.0), + BytesSent: pointer.Ptr(1259037719.0), + PacketsSent: pointer.Ptr(428002.0), }, }, { @@ -63,13 +63,13 @@ func TestConvertEcsNetworkStats(t *testing.T) { want: &provider.ContainerNetworkStats{ Timestamp: testTime, Interfaces: map[string]provider.InterfaceNetStats{ - "eth0": {BytesRcvd: pointer.UIntToFloatPtr(2398415937), PacketsRcvd: pointer.UIntToFloatPtr(1898631), BytesSent: pointer.UIntToFloatPtr(1259037719), PacketsSent: pointer.UIntToFloatPtr(428002)}, - "eth1": {BytesSent: pointer.UIntToFloatPtr(2398415936), PacketsSent: pointer.UIntToFloatPtr(1898630), BytesRcvd: pointer.UIntToFloatPtr(1259037718), PacketsRcvd: pointer.UIntToFloatPtr(428001)}, + "eth0": {BytesRcvd: pointer.Ptr(2398415937.0), PacketsRcvd: pointer.Ptr(1898631.0), BytesSent: pointer.Ptr(1259037719.0), PacketsSent: pointer.Ptr(428002.0)}, + "eth1": {BytesSent: pointer.Ptr(2398415936.0), PacketsSent: pointer.Ptr(1898630.0), BytesRcvd: pointer.Ptr(1259037718.0), PacketsRcvd: pointer.Ptr(428001.0)}, }, - BytesRcvd: pointer.UIntToFloatPtr(3657453655), - PacketsRcvd: pointer.UIntToFloatPtr(2326632), - BytesSent: pointer.UIntToFloatPtr(3657453655), - PacketsSent: pointer.UIntToFloatPtr(2326632), + BytesRcvd: pointer.Ptr(3657453655.0), + PacketsRcvd: pointer.Ptr(2326632.0), + BytesSent: pointer.Ptr(3657453655.0), + PacketsSent: pointer.Ptr(2326632.0), }, }, } @@ -171,20 +171,20 @@ func TestConvertEcsStats(t *testing.T) { want: &provider.ContainerStats{ Timestamp: testTime, CPU: &provider.ContainerCPUStats{ - Total: pointer.UIntToFloatPtr(1137691504), - System: pointer.UIntToFloatPtr(80000000), - User: pointer.UIntToFloatPtr(810000000), + Total: pointer.Ptr(1137691504.0), + System: pointer.Ptr(80000000.0), + User: pointer.Ptr(810000000.0), }, Memory: &provider.ContainerMemStats{ - UsageTotal: pointer.UIntToFloatPtr(6504448), - RSS: pointer.UIntToFloatPtr(4669440), - Cache: pointer.UIntToFloatPtr(651264), + UsageTotal: pointer.Ptr(6504448.0), + RSS: pointer.Ptr(4669440.0), + Cache: pointer.Ptr(651264.0), }, IO: &provider.ContainerIOStats{ - ReadBytes: pointer.UIntToFloatPtr(638976), - WriteBytes: pointer.UIntToFloatPtr(0), - ReadOperations: pointer.UIntToFloatPtr(12), - WriteOperations: pointer.UIntToFloatPtr(0), + ReadBytes: pointer.Ptr(638976.0), + WriteBytes: pointer.Ptr(0.0), + ReadOperations: pointer.Ptr(12.0), + WriteOperations: pointer.Ptr(0.0), }, }, }, @@ -213,10 +213,10 @@ func TestFillFromSpec(t *testing.T) { fillFromSpec(containerStats, testSpec) assert.EqualValues(t, &provider.ContainerStats{ CPU: &provider.ContainerCPUStats{ - Limit: pointer.Float64Ptr(50), + Limit: pointer.Ptr(50.0), }, Memory: &provider.ContainerMemStats{ - Limit: pointer.Float64Ptr(4294967296), + Limit: pointer.Ptr(4294967296.0), }, }, containerStats) @@ -224,16 +224,16 @@ func TestFillFromSpec(t *testing.T) { containerStats = &provider.ContainerStats{ CPU: &provider.ContainerCPUStats{}, Memory: &provider.ContainerMemStats{ - Limit: pointer.Float64Ptr(1024), + Limit: pointer.Ptr(1024.0), }, } fillFromSpec(containerStats, testSpec) assert.EqualValues(t, &provider.ContainerStats{ CPU: &provider.ContainerCPUStats{ - Limit: pointer.Float64Ptr(50), + Limit: pointer.Ptr(50.0), }, Memory: &provider.ContainerMemStats{ - Limit: pointer.Float64Ptr(1024), + Limit: pointer.Ptr(1024.0), }, }, containerStats) } diff --git a/pkg/util/containers/metrics/kubelet/collector.go b/pkg/util/containers/metrics/kubelet/collector.go index a31b59a7a0874..eae56fd9a1f09 100644 --- a/pkg/util/containers/metrics/kubelet/collector.go +++ b/pkg/util/containers/metrics/kubelet/collector.go @@ -209,7 +209,7 @@ func (kc *kubeletCollector) processStatsSummary(currentTime time.Time, statsSumm // underlying host, it should not be an issue. podNetworkStats := &provider.ContainerNetworkStats{} convertNetworkStats(pod.Network, podNetworkStats) - podNetworkStats.NetworkIsolationGroupID = pointer.UInt64Ptr(networkIDFromPODUID(pod.PodRef.UID)) + podNetworkStats.NetworkIsolationGroupID = pointer.Ptr(networkIDFromPODUID(pod.PodRef.UID)) // As Metadata collector is running through polling, it can happen that we have newer PODs, containers metaPod, err := kc.metadataStore.GetKubernetesPod(pod.PodRef.UID) diff --git a/pkg/util/containers/metrics/kubelet/collector_test.go b/pkg/util/containers/metrics/kubelet/collector_test.go index 31ca8dee417fe..db0c5dd7716c6 100644 --- a/pkg/util/containers/metrics/kubelet/collector_test.go +++ b/pkg/util/containers/metrics/kubelet/collector_test.go @@ -69,11 +69,11 @@ func TestKubeletCollectorLinux(t *testing.T) { assert.Equal(t, &provider.ContainerStats{ Timestamp: expectedTime, CPU: &provider.ContainerCPUStats{ - Total: pointer.Float64Ptr(194414788585), + Total: pointer.Ptr(194414788585.0), }, Memory: &provider.ContainerMemStats{ - UsageTotal: pointer.Float64Ptr(12713984), - RSS: pointer.Float64Ptr(12238848), + UsageTotal: pointer.Ptr(12713984.0), + RSS: pointer.Ptr(12238848.0), }, }, cID1Stats) @@ -84,11 +84,11 @@ func TestKubeletCollectorLinux(t *testing.T) { assert.Equal(t, &provider.ContainerStats{ Timestamp: expectedTime, CPU: &provider.ContainerCPUStats{ - Total: pointer.Float64Ptr(12460233103), + Total: pointer.Ptr(12460233103.0), }, Memory: &provider.ContainerMemStats{ - UsageTotal: pointer.Float64Ptr(6705152), - RSS: pointer.Float64Ptr(6119424), + UsageTotal: pointer.Ptr(6705152.0), + RSS: pointer.Ptr(6119424.0), }, }, cID2Stats) @@ -99,26 +99,26 @@ func TestKubeletCollectorLinux(t *testing.T) { assert.Equal(t, &provider.ContainerStats{ Timestamp: expectedTime, CPU: &provider.ContainerCPUStats{ - Total: pointer.Float64Ptr(139979939975), + Total: pointer.Ptr(139979939975.0), }, Memory: &provider.ContainerMemStats{ - UsageTotal: pointer.Float64Ptr(11325440), - RSS: pointer.Float64Ptr(10797056), + UsageTotal: pointer.Ptr(11325440.0), + RSS: pointer.Ptr(10797056.0), }, }, cID3Stats) // Test network stats expectedPodNetworkStats := &provider.ContainerNetworkStats{ Timestamp: expectedTime, - BytesRcvd: pointer.Float64Ptr(254942755), - BytesSent: pointer.Float64Ptr(137422821), + BytesRcvd: pointer.Ptr(254942755.0), + BytesSent: pointer.Ptr(137422821.0), Interfaces: map[string]provider.InterfaceNetStats{ "eth0": { - BytesRcvd: pointer.Float64Ptr(254942755), - BytesSent: pointer.Float64Ptr(137422821), + BytesRcvd: pointer.Ptr(254942755.0), + BytesSent: pointer.Ptr(137422821.0), }, }, - NetworkIsolationGroupID: pointer.UInt64Ptr(17659160645723176180), + NetworkIsolationGroupID: pointer.Ptr(uint64(17659160645723176180)), } cID3NetworkStats, err := kubeletCollector.GetContainerNetworkStats("", "cID3", time.Minute) @@ -177,11 +177,11 @@ func TestKubeletCollectorWindows(t *testing.T) { assert.Equal(t, &provider.ContainerStats{ Timestamp: expectedTime, CPU: &provider.ContainerCPUStats{ - Total: pointer.Float64Ptr(9359375000), + Total: pointer.Ptr(9359375000.0), }, Memory: &provider.ContainerMemStats{ - UsageTotal: pointer.Float64Ptr(65474560), - PrivateWorkingSet: pointer.Float64Ptr(65474560), + UsageTotal: pointer.Ptr(65474560.0), + PrivateWorkingSet: pointer.Ptr(65474560.0), }, }, cID1Stats) } diff --git a/pkg/util/containers/metrics/mock/mock_samples.go b/pkg/util/containers/metrics/mock/mock_samples.go index 9db4bf0fdec13..afb348810af75 100644 --- a/pkg/util/containers/metrics/mock/mock_samples.go +++ b/pkg/util/containers/metrics/mock/mock_samples.go @@ -15,67 +15,67 @@ func GetFullSampleContainerEntry() ContainerEntry { return ContainerEntry{ Error: nil, NetworkStats: &metrics.ContainerNetworkStats{ - BytesSent: pointer.Float64Ptr(42), - BytesRcvd: pointer.Float64Ptr(43), - PacketsSent: pointer.Float64Ptr(420), - PacketsRcvd: pointer.Float64Ptr(421), + BytesSent: pointer.Ptr(42.0), + BytesRcvd: pointer.Ptr(43.0), + PacketsSent: pointer.Ptr(420.0), + PacketsRcvd: pointer.Ptr(421.0), Interfaces: map[string]metrics.InterfaceNetStats{ "eth42": { - BytesSent: pointer.Float64Ptr(42), - BytesRcvd: pointer.Float64Ptr(43), - PacketsSent: pointer.Float64Ptr(420), - PacketsRcvd: pointer.Float64Ptr(421), + BytesSent: pointer.Ptr(42.0), + BytesRcvd: pointer.Ptr(43.0), + PacketsSent: pointer.Ptr(420.0), + PacketsRcvd: pointer.Ptr(421.0), }, }, }, ContainerStats: &metrics.ContainerStats{ CPU: &metrics.ContainerCPUStats{ - Total: pointer.Float64Ptr(100), - System: pointer.Float64Ptr(200), - User: pointer.Float64Ptr(300), - Shares: pointer.Float64Ptr(400), - Limit: pointer.Float64Ptr(50), - ElapsedPeriods: pointer.Float64Ptr(500), - ThrottledPeriods: pointer.Float64Ptr(0), - ThrottledTime: pointer.Float64Ptr(100), + Total: pointer.Ptr(100.0), + System: pointer.Ptr(200.0), + User: pointer.Ptr(300.0), + Shares: pointer.Ptr(400.0), + Limit: pointer.Ptr(50.0), + ElapsedPeriods: pointer.Ptr(500.0), + ThrottledPeriods: pointer.Ptr(0.0), + ThrottledTime: pointer.Ptr(100.0), }, Memory: &metrics.ContainerMemStats{ - UsageTotal: pointer.Float64Ptr(42000), - KernelMemory: pointer.Float64Ptr(40), - Limit: pointer.Float64Ptr(42000), - SwapLimit: pointer.Float64Ptr(500), - Softlimit: pointer.Float64Ptr(40000), - RSS: pointer.Float64Ptr(300), - Cache: pointer.Float64Ptr(200), - Swap: pointer.Float64Ptr(0), - OOMEvents: pointer.Float64Ptr(10), + UsageTotal: pointer.Ptr(42000.0), + KernelMemory: pointer.Ptr(40.0), + Limit: pointer.Ptr(42000.0), + SwapLimit: pointer.Ptr(500.0), + Softlimit: pointer.Ptr(40000.0), + RSS: pointer.Ptr(300.0), + Cache: pointer.Ptr(200.0), + Swap: pointer.Ptr(0.0), + OOMEvents: pointer.Ptr(10.0), }, IO: &metrics.ContainerIOStats{ Devices: map[string]metrics.DeviceIOStats{ "/dev/foo": { - ReadBytes: pointer.Float64Ptr(100), - WriteBytes: pointer.Float64Ptr(200), - ReadOperations: pointer.Float64Ptr(10), - WriteOperations: pointer.Float64Ptr(20), + ReadBytes: pointer.Ptr(100.0), + WriteBytes: pointer.Ptr(200.0), + ReadOperations: pointer.Ptr(10.0), + WriteOperations: pointer.Ptr(20.0), }, "/dev/bar": { - ReadBytes: pointer.Float64Ptr(100), - WriteBytes: pointer.Float64Ptr(200), - ReadOperations: pointer.Float64Ptr(10), - WriteOperations: pointer.Float64Ptr(20), + ReadBytes: pointer.Ptr(100.0), + WriteBytes: pointer.Ptr(200.0), + ReadOperations: pointer.Ptr(10.0), + WriteOperations: pointer.Ptr(20.0), }, }, - ReadBytes: pointer.Float64Ptr(200), - WriteBytes: pointer.Float64Ptr(400), - ReadOperations: pointer.Float64Ptr(20), - WriteOperations: pointer.Float64Ptr(40), + ReadBytes: pointer.Ptr(200.0), + WriteBytes: pointer.Ptr(400.0), + ReadOperations: pointer.Ptr(20.0), + WriteOperations: pointer.Ptr(40.0), }, PID: &metrics.ContainerPIDStats{ PIDs: []int{4, 2}, - ThreadCount: pointer.Float64Ptr(10), - ThreadLimit: pointer.Float64Ptr(20), + ThreadCount: pointer.Ptr(10.0), + ThreadLimit: pointer.Ptr(20.0), }, }, - OpenFiles: pointer.UInt64Ptr(200), + OpenFiles: pointer.Ptr(uint64(200)), } } diff --git a/pkg/util/containers/metrics/provider/collector_cache_test.go b/pkg/util/containers/metrics/provider/collector_cache_test.go index 83615e06e0278..ec0d48332cac6 100644 --- a/pkg/util/containers/metrics/provider/collector_cache_test.go +++ b/pkg/util/containers/metrics/provider/collector_cache_test.go @@ -20,21 +20,21 @@ func TestCollectorCache(t *testing.T) { cStats: map[string]*ContainerStats{ "cID1": { CPU: &ContainerCPUStats{ - Total: pointer.Float64Ptr(100), + Total: pointer.Ptr(100.0), }, }, "cID2": { CPU: &ContainerCPUStats{ - Total: pointer.Float64Ptr(200), + Total: pointer.Ptr(200.0), }, }, }, cNetStats: map[string]*ContainerNetworkStats{ "cID1": { - BytesSent: pointer.Float64Ptr(110), + BytesSent: pointer.Ptr(110.0), }, "cID2": { - BytesSent: pointer.Float64Ptr(210), + BytesSent: pointer.Ptr(210.0), }, }, cIDForPID: map[int]string{ @@ -73,16 +73,16 @@ func TestCollectorCache(t *testing.T) { // Changing underlying source actualCollector.cStats["cID1"] = &ContainerStats{ CPU: &ContainerCPUStats{ - Total: pointer.Float64Ptr(150), + Total: pointer.Ptr(150.0), }, } actualCollector.cStats["cID2"] = &ContainerStats{ CPU: &ContainerCPUStats{ - Total: pointer.Float64Ptr(250), + Total: pointer.Ptr(250.0), }, } actualCollector.cNetStats["cID2"] = &ContainerNetworkStats{ - BytesSent: pointer.Float64Ptr(260), + BytesSent: pointer.Ptr(260.0), } actualCollector.cIDForPID[2] = "cID22" diff --git a/pkg/util/containers/metrics/system/collector_linux.go b/pkg/util/containers/metrics/system/collector_linux.go index b8793b0a708b4..09e43bb443475 100644 --- a/pkg/util/containers/metrics/system/collector_linux.go +++ b/pkg/util/containers/metrics/system/collector_linux.go @@ -263,7 +263,7 @@ func computeCPULimitPct(cgs *cgroups.CPUStats, parentCPUStatsRetriever func(pare // If no limit is available, setting the limit to number of CPUs. // Always reporting a limit allows to compute CPU % accurately. if limitPct == nil { - limitPct = pointer.Float64Ptr(float64(systemutils.HostCPUCount() * 100)) + limitPct = pointer.Ptr(float64(systemutils.HostCPUCount() * 100)) } return limitPct @@ -274,7 +274,7 @@ func computeCgroupCPULimitPct(cgs *cgroups.CPUStats) *float64 { var limitPct *float64 if cgs.CPUCount != nil && *cgs.CPUCount != uint64(systemutils.HostCPUCount()) { - limitPct = pointer.UIntToFloatPtr(*cgs.CPUCount * 100) + limitPct = pointer.Ptr(float64(*cgs.CPUCount) * 100.0) } if cgs.SchedulerQuota != nil && cgs.SchedulerPeriod != nil { diff --git a/pkg/util/containers/metrics/system/collector_linux_test.go b/pkg/util/containers/metrics/system/collector_linux_test.go index 91fdeb5debf9c..97e79a40a48f1 100644 --- a/pkg/util/containers/metrics/system/collector_linux_test.go +++ b/pkg/util/containers/metrics/system/collector_linux_test.go @@ -37,81 +37,81 @@ func TestBuildContainerMetrics(t *testing.T) { name: "structs with all stats", cg: &cgroups.MockCgroup{ CPU: &cgroups.CPUStats{ - Total: pointer.UInt64Ptr(100), - System: pointer.UInt64Ptr(200), - User: pointer.UInt64Ptr(300), - Shares: pointer.UInt64Ptr(400), - ElapsedPeriods: pointer.UInt64Ptr(500), - ThrottledPeriods: pointer.UInt64Ptr(0), - ThrottledTime: pointer.UInt64Ptr(100), - CPUCount: pointer.UInt64Ptr(10), - SchedulerPeriod: pointer.UInt64Ptr(100), - SchedulerQuota: pointer.UInt64Ptr(50), + Total: pointer.Ptr(uint64(100)), + System: pointer.Ptr(uint64(200)), + User: pointer.Ptr(uint64(300)), + Shares: pointer.Ptr(uint64(400)), + ElapsedPeriods: pointer.Ptr(uint64(500)), + ThrottledPeriods: pointer.Ptr(uint64(0)), + ThrottledTime: pointer.Ptr(uint64(100)), + CPUCount: pointer.Ptr(uint64(10)), + SchedulerPeriod: pointer.Ptr(uint64(100)), + SchedulerQuota: pointer.Ptr(uint64(50)), }, Memory: &cgroups.MemoryStats{ - UsageTotal: pointer.UInt64Ptr(100), - KernelMemory: pointer.UInt64Ptr(40), - Limit: pointer.UInt64Ptr(42000), - LowThreshold: pointer.UInt64Ptr(40000), - RSS: pointer.UInt64Ptr(300), - Cache: pointer.UInt64Ptr(200), - Swap: pointer.UInt64Ptr(0), - SwapLimit: pointer.UInt64Ptr(500), - OOMEvents: pointer.UInt64Ptr(10), + UsageTotal: pointer.Ptr(uint64(100)), + KernelMemory: pointer.Ptr(uint64(40)), + Limit: pointer.Ptr(uint64(42000)), + LowThreshold: pointer.Ptr(uint64(40000)), + RSS: pointer.Ptr(uint64(300)), + Cache: pointer.Ptr(uint64(200)), + Swap: pointer.Ptr(uint64(0)), + SwapLimit: pointer.Ptr(uint64(500)), + OOMEvents: pointer.Ptr(uint64(10)), }, IOStats: &cgroups.IOStats{ - ReadBytes: pointer.UInt64Ptr(100), - WriteBytes: pointer.UInt64Ptr(200), - ReadOperations: pointer.UInt64Ptr(10), - WriteOperations: pointer.UInt64Ptr(20), + ReadBytes: pointer.Ptr(uint64(100)), + WriteBytes: pointer.Ptr(uint64(200)), + ReadOperations: pointer.Ptr(uint64(10)), + WriteOperations: pointer.Ptr(uint64(20)), // Device will be ignored as no matching device name Devices: map[string]cgroups.DeviceIOStats{ "foo": { - ReadBytes: pointer.UInt64Ptr(100), - WriteBytes: pointer.UInt64Ptr(200), - ReadOperations: pointer.UInt64Ptr(10), - WriteOperations: pointer.UInt64Ptr(20), + ReadBytes: pointer.Ptr(uint64(100)), + WriteBytes: pointer.Ptr(uint64(200)), + ReadOperations: pointer.Ptr(uint64(10)), + WriteOperations: pointer.Ptr(uint64(20)), }, }, }, PIDStats: &cgroups.PIDStats{ - HierarchicalThreadCount: pointer.UInt64Ptr(10), - HierarchicalThreadLimit: pointer.UInt64Ptr(20), + HierarchicalThreadCount: pointer.Ptr(uint64(10)), + HierarchicalThreadLimit: pointer.Ptr(uint64(20)), }, PIDs: []int{4, 2}, }, want: &provider.ContainerStats{ CPU: &provider.ContainerCPUStats{ - Total: pointer.Float64Ptr(100), - System: pointer.Float64Ptr(200), - User: pointer.Float64Ptr(300), - Shares: pointer.Float64Ptr(400), - Limit: pointer.Float64Ptr(50), - ElapsedPeriods: pointer.Float64Ptr(500), - ThrottledPeriods: pointer.Float64Ptr(0), - ThrottledTime: pointer.Float64Ptr(100), + Total: pointer.Ptr(100.0), + System: pointer.Ptr(200.0), + User: pointer.Ptr(300.0), + Shares: pointer.Ptr(400.0), + Limit: pointer.Ptr(50.0), + ElapsedPeriods: pointer.Ptr(500.0), + ThrottledPeriods: pointer.Ptr(0.0), + ThrottledTime: pointer.Ptr(100.0), }, Memory: &provider.ContainerMemStats{ - UsageTotal: pointer.Float64Ptr(100), - KernelMemory: pointer.Float64Ptr(40), - Limit: pointer.Float64Ptr(42000), - Softlimit: pointer.Float64Ptr(40000), - RSS: pointer.Float64Ptr(300), - Cache: pointer.Float64Ptr(200), - Swap: pointer.Float64Ptr(0), - SwapLimit: pointer.Float64Ptr(500), - OOMEvents: pointer.Float64Ptr(10), + UsageTotal: pointer.Ptr(100.0), + KernelMemory: pointer.Ptr(40.0), + Limit: pointer.Ptr(42000.0), + Softlimit: pointer.Ptr(40000.0), + RSS: pointer.Ptr(300.0), + Cache: pointer.Ptr(200.0), + Swap: pointer.Ptr(0.0), + SwapLimit: pointer.Ptr(500.0), + OOMEvents: pointer.Ptr(10.0), }, IO: &provider.ContainerIOStats{ - ReadBytes: pointer.Float64Ptr(100), - WriteBytes: pointer.Float64Ptr(200), - ReadOperations: pointer.Float64Ptr(10), - WriteOperations: pointer.Float64Ptr(20), + ReadBytes: pointer.Ptr(100.0), + WriteBytes: pointer.Ptr(200.0), + ReadOperations: pointer.Ptr(10.0), + WriteOperations: pointer.Ptr(20.0), }, PID: &provider.ContainerPIDStats{ PIDs: []int{4, 2}, - ThreadCount: pointer.Float64Ptr(10), - ThreadLimit: pointer.Float64Ptr(20), + ThreadCount: pointer.Ptr(10.0), + ThreadLimit: pointer.Ptr(20.0), }, }, }, @@ -119,12 +119,12 @@ func TestBuildContainerMetrics(t *testing.T) { name: "limit cpu count no quota", cg: &cgroups.MockCgroup{ CPU: &cgroups.CPUStats{ - CPUCount: pointer.UInt64Ptr(10), + CPUCount: pointer.Ptr(uint64(10)), }, }, want: &provider.ContainerStats{ CPU: &provider.ContainerCPUStats{ - Limit: pointer.Float64Ptr(1000), + Limit: pointer.Ptr(1000.0), }, PID: &provider.ContainerPIDStats{}, }, @@ -136,7 +136,7 @@ func TestBuildContainerMetrics(t *testing.T) { }, want: &provider.ContainerStats{ CPU: &provider.ContainerCPUStats{ - Limit: pointer.Float64Ptr(float64(utilsystem.HostCPUCount()) * 100), + Limit: pointer.Ptr(float64(utilsystem.HostCPUCount()) * 100), }, PID: &provider.ContainerPIDStats{}, }, @@ -145,19 +145,19 @@ func TestBuildContainerMetrics(t *testing.T) { name: "limit cpu count on parent", cg: &cgroups.MockCgroup{ CPU: &cgroups.CPUStats{ - CPUCount: pointer.UInt64Ptr(uint64(utilsystem.HostCPUCount())), + CPUCount: pointer.Ptr(uint64(utilsystem.HostCPUCount())), }, Parent: &cgroups.MockCgroup{ CPU: &cgroups.CPUStats{ - CPUCount: pointer.UInt64Ptr(uint64(utilsystem.HostCPUCount())), - SchedulerPeriod: pointer.UInt64Ptr(100), - SchedulerQuota: pointer.UInt64Ptr(10), + CPUCount: pointer.Ptr(uint64(utilsystem.HostCPUCount())), + SchedulerPeriod: pointer.Ptr(uint64(100)), + SchedulerQuota: pointer.Ptr(uint64(10)), }, }, }, want: &provider.ContainerStats{ CPU: &provider.ContainerCPUStats{ - Limit: pointer.Float64Ptr(10), + Limit: pointer.Ptr(10.0), }, PID: &provider.ContainerPIDStats{}, }, diff --git a/pkg/util/containers/metrics/system/collector_network_linux_test.go b/pkg/util/containers/metrics/system/collector_network_linux_test.go index a9459a382ade7..fcbd79ec75724 100644 --- a/pkg/util/containers/metrics/system/collector_network_linux_test.go +++ b/pkg/util/containers/metrics/system/collector_network_linux_test.go @@ -44,16 +44,16 @@ func TestCollectNetworkStats(t *testing.T) { stat: provider.ContainerNetworkStats{ Interfaces: map[string]provider.InterfaceNetStats{ "eth0": { - BytesRcvd: pointer.Float64Ptr(1345), - PacketsRcvd: pointer.Float64Ptr(10), - BytesSent: pointer.Float64Ptr(0), - PacketsSent: pointer.Float64Ptr(0), + BytesRcvd: pointer.Ptr(1345.0), + PacketsRcvd: pointer.Ptr(10.0), + BytesSent: pointer.Ptr(0.0), + PacketsSent: pointer.Ptr(0.0), }, }, - BytesRcvd: pointer.Float64Ptr(1345), - PacketsRcvd: pointer.Float64Ptr(10), - BytesSent: pointer.Float64Ptr(0), - PacketsSent: pointer.Float64Ptr(0), + BytesRcvd: pointer.Ptr(1345.0), + PacketsRcvd: pointer.Ptr(10.0), + BytesSent: pointer.Ptr(0.0), + PacketsSent: pointer.Ptr(0.0), }, }, // Multiple docker networks @@ -69,22 +69,22 @@ func TestCollectNetworkStats(t *testing.T) { stat: provider.ContainerNetworkStats{ Interfaces: map[string]provider.InterfaceNetStats{ "eth0": { - BytesRcvd: pointer.Float64Ptr(648), - PacketsRcvd: pointer.Float64Ptr(8), - BytesSent: pointer.Float64Ptr(0), - PacketsSent: pointer.Float64Ptr(0), + BytesRcvd: pointer.Ptr(648.0), + PacketsRcvd: pointer.Ptr(8.0), + BytesSent: pointer.Ptr(0.0), + PacketsSent: pointer.Ptr(0.0), }, "eth1": { - BytesRcvd: pointer.Float64Ptr(1478), - PacketsRcvd: pointer.Float64Ptr(19), - BytesSent: pointer.Float64Ptr(182), - PacketsSent: pointer.Float64Ptr(3), + BytesRcvd: pointer.Ptr(1478.0), + PacketsRcvd: pointer.Ptr(19.0), + BytesSent: pointer.Ptr(182.0), + PacketsSent: pointer.Ptr(3.0), }, }, - BytesRcvd: pointer.Float64Ptr(2126), - PacketsRcvd: pointer.Float64Ptr(27), - BytesSent: pointer.Float64Ptr(182), - PacketsSent: pointer.Float64Ptr(3), + BytesRcvd: pointer.Ptr(2126.0), + PacketsRcvd: pointer.Ptr(27.0), + BytesSent: pointer.Ptr(182.0), + PacketsSent: pointer.Ptr(3.0), }, }, } { diff --git a/pkg/util/containers/metrics/system/util.go b/pkg/util/containers/metrics/system/util.go index b7e97267dffb9..65ac8620bcd59 100644 --- a/pkg/util/containers/metrics/system/util.go +++ b/pkg/util/containers/metrics/system/util.go @@ -12,6 +12,6 @@ import "github.com/DataDog/datadog-agent/pkg/util/pointer" func convertField(s *uint64, t **float64) { if s != nil { - *t = pointer.Float64Ptr(float64(*s)) + *t = pointer.Ptr(float64(*s)) } } diff --git a/pkg/util/core.go b/pkg/util/core.go index 865eb6f53ad47..b95157f386377 100644 --- a/pkg/util/core.go +++ b/pkg/util/core.go @@ -18,8 +18,8 @@ import ( ) // SetupCoreDump enables core dumps and sets the core dump size limit based on configuration -func SetupCoreDump() error { - if config.Datadog.GetBool("go_core_dump") { +func SetupCoreDump(cfg config.ConfigReader) error { + if cfg.GetBool("go_core_dump") { debug.SetTraceback("crash") err := unix.Setrlimit(unix.RLIMIT_CORE, &unix.Rlimit{ diff --git a/pkg/util/core_windows.go b/pkg/util/core_windows.go index 706f1035f63ec..804ba48517908 100644 --- a/pkg/util/core_windows.go +++ b/pkg/util/core_windows.go @@ -12,8 +12,8 @@ import ( ) // SetupCoreDump enables core dumps and sets the core dump size limit based on configuration -func SetupCoreDump() error { - if config.Datadog.GetBool("go_core_dump") { +func SetupCoreDump(cfg config.ConfigReader) error { + if cfg.GetBool("go_core_dump") { return fmt.Errorf("Not supported on Windows") } return nil diff --git a/pkg/util/dmi/dmi_mock.go b/pkg/util/dmi/dmi_mock.go new file mode 100644 index 0000000000000..932b3979826a5 --- /dev/null +++ b/pkg/util/dmi/dmi_mock.go @@ -0,0 +1,38 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows +// +build !windows + +package dmi + +import ( + "os" + "path/filepath" + "testing" +) + +func resetSysPath() { + hypervisorUUIDPath = "/sys/hypervisor/uuid" + dmiProductUUIDPath = "/sys/devices/virtual/dmi/id/product_uuid" + dmiBoardAssetTagPath = "/sys/devices/virtual/dmi/id/board_asset_tag" + dmiBoardVendorPath = "/sys/devices/virtual/dmi/id/board_vendor" +} + +func SetupMock(t *testing.T, hypervisorUUID, productUUID, boardAssetTag, boardVendor string) { + tempDir := t.TempDir() + t.Cleanup(resetSysPath) + + setTestFile := func(data string, name string) string { + tempPath := filepath.Join(tempDir, name) + _ = os.WriteFile(tempPath, []byte(data), os.ModePerm) + return tempPath + } + + hypervisorUUIDPath = setTestFile(hypervisorUUID, "hypervisor_uuid") + dmiProductUUIDPath = setTestFile(productUUID, "product_uuid") + dmiBoardAssetTagPath = setTestFile(boardAssetTag, "board_asset_tag") + dmiBoardVendorPath = setTestFile(boardVendor, "board_vendor") +} diff --git a/pkg/metadata/inventories/host_metadata_nix.go b/pkg/util/dmi/dmi_nix.go similarity index 59% rename from pkg/metadata/inventories/host_metadata_nix.go rename to pkg/util/dmi/dmi_nix.go index f2961ca3bda39..f90ef1484df79 100644 --- a/pkg/metadata/inventories/host_metadata_nix.go +++ b/pkg/util/dmi/dmi_nix.go @@ -6,7 +6,7 @@ //go:build !windows // +build !windows -package inventories +package dmi import ( "os" @@ -28,9 +28,22 @@ func readFile(path string) string { return strings.TrimSuffix(string(data), "\n") } -func getSystemSpecificHosttMetadata(metadata *HostMetadata) { - metadata.HypervisorGuestUUID = readFile(hypervisorUUIDPath) - metadata.DmiProductUUID = readFile(dmiProductUUIDPath) - metadata.DmiBoardAssetTag = readFile(dmiBoardAssetTagPath) - metadata.DmiBoardVendor = readFile(dmiBoardVendorPath) +// GetBoardAssetTag returns the board asset tag from DMI +func GetBoardAssetTag() string { + return readFile(dmiBoardAssetTagPath) +} + +// GetBoardVendor returns the board vendor +func GetBoardVendor() string { + return readFile(dmiBoardVendorPath) +} + +// GetProductUUID returns the product UUID +func GetProductUUID() string { + return readFile(dmiProductUUIDPath) +} + +// GetHypervisorUUID returns the hypervisor UUID +func GetHypervisorUUID() string { + return readFile(hypervisorUUIDPath) } diff --git a/pkg/util/dmi/dmi_nix_test.go b/pkg/util/dmi/dmi_nix_test.go new file mode 100644 index 0000000000000..ab0c4b5eb7755 --- /dev/null +++ b/pkg/util/dmi/dmi_nix_test.go @@ -0,0 +1,39 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows +// +build !windows + +package dmi + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestGetSystemSpecificHosttMetadata(t *testing.T) { + SetupMock(t, + "UUID1\n", + "UUID2\n", + "i-test\n", + "test vendor\n", + ) + + assert.Equal(t, "UUID1", GetHypervisorUUID()) + assert.Equal(t, "UUID2", GetProductUUID()) + assert.Equal(t, "i-test", GetBoardAssetTag()) + assert.Equal(t, "test vendor", GetBoardVendor()) + + hypervisorUUIDPath = "does not exist" + dmiProductUUIDPath = "does not exist" + dmiBoardAssetTagPath = "does not exist" + dmiBoardVendorPath = "does not exist" + + assert.Equal(t, "", GetHypervisorUUID()) + assert.Equal(t, "", GetProductUUID()) + assert.Equal(t, "", GetBoardAssetTag()) + assert.Equal(t, "", GetBoardVendor()) +} diff --git a/pkg/util/dmi/dmi_windows.go b/pkg/util/dmi/dmi_windows.go new file mode 100644 index 0000000000000..38788f96517ad --- /dev/null +++ b/pkg/util/dmi/dmi_windows.go @@ -0,0 +1,37 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build windows +// +build windows + +package dmi + +// Used by the mock +var ( + boardAssetTag = "" + boardVendor = "" + productUUID = "" + hypervisorUUID = "" +) + +// GetBoardAssetTag returns an empty string on Windows +func GetBoardAssetTag() string { + return boardAssetTag +} + +// GetBoardVendor returns an empty string on Windows +func GetBoardVendor() string { + return boardVendor +} + +// GetProductUUID returns an empty string on Windows +func GetProductUUID() string { + return productUUID +} + +// GetHypervisorUUID returns an empty string on Windows +func GetHypervisorUUID() string { + return hypervisorUUID +} diff --git a/pkg/util/dmi/dmi_windows_mock.go b/pkg/util/dmi/dmi_windows_mock.go new file mode 100644 index 0000000000000..b89d643d351e0 --- /dev/null +++ b/pkg/util/dmi/dmi_windows_mock.go @@ -0,0 +1,27 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build windows +// +build windows + +package dmi + +import ( + "testing" +) + +func SetupMock(t *testing.T, testHypervisorUUID, testProductUUID, testBoardAssetTag, testBoardVendor string) { + t.Cleanup(func() { + boardAssetTag = "" + boardVendor = "" + productUUID = "" + hypervisorUUID = "" + }) + + boardAssetTag = testBoardAssetTag + boardVendor = testBoardVendor + productUUID = testProductUUID + hypervisorUUID = testHypervisorUUID +} diff --git a/pkg/util/docker/event_stream.go b/pkg/util/docker/event_stream.go index bb77f72d4c242..26076ee9f3d2c 100644 --- a/pkg/util/docker/event_stream.go +++ b/pkg/util/docker/event_stream.go @@ -21,8 +21,8 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/log" ) -//// eventStreamState logic unit tested in event_stream_test.go -//// DockerUtil logic covered by the listeners/docker and dogstatsd/origin_detection integration tests. +// // eventStreamState logic unit tested in event_stream_test.go +// // DockerUtil logic covered by the listeners/docker and dogstatsd/origin_detection integration tests. const eventSendBuffer = 5 // SubscribeToContainerEvents allows a package to subscribe to events from the event stream. diff --git a/pkg/util/docker/fake/system_api_client.go b/pkg/util/docker/fake/system_api_client.go index c951e1bec02de..30cd056e1c24a 100644 --- a/pkg/util/docker/fake/system_api_client.go +++ b/pkg/util/docker/fake/system_api_client.go @@ -37,7 +37,7 @@ func (c *SystemAPIClient) RegistryLogin(ctx context.Context, auth types.AuthConf } // DiskUsage is a mock method -func (c *SystemAPIClient) DiskUsage(ctx context.Context) (types.DiskUsage, error) { +func (c *SystemAPIClient) DiskUsage(ctx context.Context, options types.DiskUsageOptions) (types.DiskUsage, error) { return types.DiskUsage{}, nil } diff --git a/pkg/util/ec2/dmi.go b/pkg/util/ec2/dmi.go new file mode 100644 index 0000000000000..471014f5ca170 --- /dev/null +++ b/pkg/util/ec2/dmi.go @@ -0,0 +1,88 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package ec2 + +import ( + "fmt" + "strings" + + "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/util/dmi" + "github.com/google/uuid" +) + +func isBoardVendorEC2() bool { + if !config.Datadog.GetBool("ec2_use_dmi") { + return false + } + return dmi.GetBoardVendor() == DMIBoardVendor +} + +// getInstanceIDFromDMI fetches the instance id for current host from DMI +// +// On AWS Nitro instances dmi information contains the instanceID for the host. We check that the board vendor is +// EC2 and that the board_asset_tag match an instanceID format before using it +func getInstanceIDFromDMI() (string, error) { + if !config.Datadog.GetBool("ec2_use_dmi") { + return "", fmt.Errorf("'ec2_use_dmi' is disabled") + } + + if !isBoardVendorEC2() { + isEC2UUID() + return "", fmt.Errorf("board vendor is not AWS") + } + + boardAssetTag := dmi.GetBoardAssetTag() + if !strings.HasPrefix(boardAssetTag, "i-") { + isEC2UUID() + return "", fmt.Errorf("invalid board_asset_tag: '%s'", boardAssetTag) + } + setCloudProviderSource(metadataSourceDMI) + return boardAssetTag, nil +} + +// isEC2UUID returns true if the hypervisor or product UUID starts by "ec2". This doesn't tell us on which instances the +// agent is running but let us know we're on EC2. Source +// https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/identify_ec2_instances.html. +// +// Depending on the instance type either the DMI product UUID or the hypervisor UUID is available. In both case, if they +// start with "ec2" we return true. +func isEC2UUID() bool { + uuidData := dmi.GetProductUUID() + if uuidData == "" { + uuidData = dmi.GetHypervisorUUID() + } + + if uuidData == "" { + return false + } + + if strings.HasPrefix(strings.ToLower(uuidData), "ec2") { + setCloudProviderSource(metadataSourceUUID) + return true + } + + // Some SMBIOS might represent the UUID in little-endian format. We swap the endianness and re-check for the + // "ec2" prefix (according to EC2 documentation linked above). + uuidObj, err := uuid.Parse(uuidData) + if err != nil { + return false + } + + IDPart := uuidObj.ID() + + b := make([]byte, 2) + b[0] = byte(IDPart) + b[1] = byte(IDPart >> 8) + + swapID := fmt.Sprintf("%x", b) + if strings.HasPrefix(strings.ToLower(swapID), "ec2") { + setCloudProviderSource(metadataSourceUUID) + return true + } + + return false +} diff --git a/pkg/util/ec2/dmi_test.go b/pkg/util/ec2/dmi_test.go new file mode 100644 index 0000000000000..672a5c6d43843 --- /dev/null +++ b/pkg/util/ec2/dmi_test.go @@ -0,0 +1,71 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package ec2 + +import ( + "testing" + + "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/util/dmi" + "github.com/stretchr/testify/assert" +) + +func TestIsBoardVendorEC2(t *testing.T) { + setupDMIForNotEC2(t) + assert.False(t, isBoardVendorEC2()) + + setupDMIForEC2(t) + assert.True(t, isBoardVendorEC2()) + + config.Mock(t) + config.Datadog.Set("ec2_use_dmi", false) + assert.False(t, isBoardVendorEC2()) +} + +func TestGetInstanceIDFromDMI(t *testing.T) { + setupDMIForNotEC2(t) + instanceID, err := getInstanceIDFromDMI() + assert.Error(t, err) + assert.Equal(t, "", instanceID) + + setupDMIForEC2(t) + instanceID, err = getInstanceIDFromDMI() + assert.NoError(t, err) + assert.Equal(t, "i-myinstance", instanceID) + + config.Mock(t) + config.Datadog.Set("ec2_use_dmi", false) + _, err = getInstanceIDFromDMI() + assert.Error(t, err) +} + +func TestIsEC2UUID(t *testing.T) { + // no UUID + dmi.SetupMock(t, "", "", "", "") + assert.False(t, isEC2UUID()) + + // hypervisor + dmi.SetupMock(t, "ec20b498-1488-4e75-82ba-a6931a9daf36", "", "", "") + assert.True(t, isEC2UUID()) + dmi.SetupMock(t, "8550b498-1488-4e75-82ba-a6931a9daf36", "", "", "") + assert.False(t, isEC2UUID()) + + // product_uuid + dmi.SetupMock(t, "", "ec20b498-1488-4e75-82ba-a6931a9daf36", "", "") + assert.True(t, isEC2UUID()) + dmi.SetupMock(t, "", "8550b498-1488-4e75-82ba-a6931a9daf36", "", "") + assert.False(t, isEC2UUID()) +} + +func TestIsEC2UUIDSwapEndian(t *testing.T) { + // hypervisor + dmi.SetupMock(t, "45E12AEC-DCD1-B213-94ED-012345ABCDEF", "", "", "") + assert.True(t, isEC2UUID()) + + // product_uuid + dmi.SetupMock(t, "", "45E12AEC-DCD1-B213-94ED-012345ABCDEF", "", "") + assert.True(t, isEC2UUID()) +} diff --git a/pkg/util/ec2/ec2.go b/pkg/util/ec2/ec2.go index 7755a54c807bb..636bda35bf164 100644 --- a/pkg/util/ec2/ec2.go +++ b/pkg/util/ec2/ec2.go @@ -9,13 +9,12 @@ import ( "context" "errors" "fmt" - "net" "strings" "time" "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/metadata/inventories" "github.com/DataDog/datadog-agent/pkg/util/cachedfetch" - "github.com/DataDog/datadog-agent/pkg/util/common" httputils "github.com/DataDog/datadog-agent/pkg/util/http" "github.com/DataDog/datadog-agent/pkg/util/log" ) @@ -32,31 +31,58 @@ var ( // CloudProviderName contains the inventory name of for EC2 CloudProviderName = "AWS" + // DMIBoardVendor contains the DMI board vendor for EC2 + DMIBoardVendor = "Amazon EC2" + + currentMetadataSource = metadataSourceNone ) func init() { token = httputils.NewAPIToken(getToken) } -func getToken(ctx context.Context) (string, time.Time, error) { - tokenLifetime := time.Duration(config.Datadog.GetInt("ec2_metadata_token_lifetime")) * time.Second - // Set the local expiration date before requesting the metadata endpoint so the local expiration date will always - // expire before the expiration date computed on the AWS side. The expiration date is set minus the renewal window - // to ensure the token will be refreshed before it expires. - expirationDate := time.Now().Add(tokenLifetime - tokenRenewalWindow) - - res, err := httputils.Put(ctx, - tokenURL, - map[string]string{ - "X-aws-ec2-metadata-token-ttl-seconds": fmt.Sprintf("%d", int(tokenLifetime.Seconds())), - }, - nil, - config.Datadog.GetDuration("ec2_metadata_timeout")*time.Millisecond) +const ( + metadataSourceNone = iota + metadataSourceUUID + metadataSourceDMI + metadataSourceIMDSv1 + metadataSourceIMDSv2 +) - if err != nil { - return "", time.Now(), err +// setCloudProviderSource set the best source available for EC2 metadata to the inventories payload. +// +// The different sources that can be used to know if we are running on EC2. This data is registered in the +// inventories metadata payload. +// +// We current have 3 ways to know we're on EC2 (if one fails we fallback to the next): +// - we succeed in reaching IMDS v1 or v2 metadata API. +// - the DMI information match EC2 and we can get the instanceID from it. +// - the product UUID or hypervisor UUID match EC2 (we know we're on EC2 but can't fetch the instance ID). +// +// Since some ways can temporary fail, we always register the "best" that worked at some point. This is mainly aimed at +// IMDS which is sometimes unavailable at startup. +func setCloudProviderSource(source int) { + if source <= currentMetadataSource { + return + } + + sourceName := "" + currentMetadataSource = source + + switch source { + case metadataSourceUUID: + sourceName = "UUID" + case metadataSourceDMI: + sourceName = "DMI" + case metadataSourceIMDSv1: + sourceName = "IMDSv1" + case metadataSourceIMDSv2: + sourceName = "IMDSv2" + default: // unknown source or metadataSourceNone + return } - return res, expirationDate, nil + + inventories.SetHostMetadata(inventories.HostCloudProviderSource, sourceName) } var instanceIDFetcher = cachedfetch.Fetcher{ @@ -74,52 +100,32 @@ func GetInstanceID(ctx context.Context) (string, error) { return instanceIDFetcher.FetchString(ctx) } -var localIPv4Fetcher = cachedfetch.Fetcher{ - Name: "EC2 Local IPv4 Address", - Attempt: func(ctx context.Context) (interface{}, error) { - return getMetadataItem(ctx, "/local-ipv4") - }, -} - -// GetLocalIPv4 gets the local IPv4 for the currently running host using the EC2 metadata API. -// Returns a []string to implement the HostIPProvider interface expected in pkg/process/util -func GetLocalIPv4() ([]string, error) { - v, err := localIPv4Fetcher.Fetch(context.TODO()) - if err != nil { - return nil, err - } - return []string{v.(string)}, nil -} - -var publicIPv4Fetcher = cachedfetch.Fetcher{ - Name: "EC2 Public IPv4 Address", - Attempt: func(ctx context.Context) (interface{}, error) { - return getMetadataItem(ctx, "/public-ipv4") - }, -} - -// GetPublicIPv4 gets the public IPv4 for the currently running host using the EC2 metadata API. -func GetPublicIPv4(ctx context.Context) (string, error) { - return publicIPv4Fetcher.FetchString(ctx) -} - // IsRunningOn returns true if the agent is running on AWS func IsRunningOn(ctx context.Context) bool { if _, err := GetHostname(ctx); err == nil { return true } - return false + if isBoardVendorEC2() || isEC2UUID() { + return true + } + + return config.IsFeaturePresent(config.ECSEC2) || config.IsFeaturePresent(config.ECSFargate) } // GetHostAliases returns the host aliases from the EC2 metadata API. func GetHostAliases(ctx context.Context) ([]string, error) { - instanceID, err := GetInstanceID(ctx) if err == nil { return []string{instanceID}, nil } + log.Debugf("failed to get instance ID from metadata API for Host Alias: %s", err) - log.Debugf("failed to get instance ID to use as Host Alias: %s", err) + // we fallback on DMI + instanceID, err = getInstanceIDFromDMI() + if err == nil { + return []string{instanceID}, nil + } + log.Debugf("failed to get instance ID from DMI for Host Alias: %s", err) return []string{}, nil } @@ -139,78 +145,6 @@ func GetHostname(ctx context.Context) (string, error) { return hostnameFetcher.FetchString(ctx) } -var networkIDFetcher = cachedfetch.Fetcher{ - Name: "VPC IDs", - Attempt: func(ctx context.Context) (interface{}, error) { - resp, err := getMetadataItem(ctx, "/network/interfaces/macs") - if err != nil { - return "", err - } - - macs := strings.Split(strings.TrimSpace(resp), "\n") - vpcIDs := common.NewStringSet() - - for _, mac := range macs { - if mac == "" { - continue - } - mac = strings.TrimSuffix(mac, "/") - id, err := getMetadataItem(ctx, fmt.Sprintf("/network/interfaces/macs/%s/vpc-id", mac)) - if err != nil { - return "", err - } - vpcIDs.Add(id) - } - - switch len(vpcIDs) { - case 0: - return "", fmt.Errorf("EC2: GetNetworkID no mac addresses returned") - case 1: - return vpcIDs.GetAll()[0], nil - default: - return "", fmt.Errorf("EC2: GetNetworkID too many mac addresses returned") - } - }, -} - -// GetNetworkID retrieves the network ID using the EC2 metadata endpoint. For -// EC2 instances, the the network ID is the VPC ID, if the instance is found to -// be a part of exactly one VPC. -func GetNetworkID(ctx context.Context) (string, error) { - return networkIDFetcher.FetchString(ctx) -} - -// Subnet stores information about an AWS subnet -type Subnet struct { - ID string - Cidr string -} - -// GetSubnetForHardwareAddr returns info about the subnet associated with a hardware -// address (mac address) on the current host -func GetSubnetForHardwareAddr(ctx context.Context, hwAddr net.HardwareAddr) (subnet Subnet, err error) { - if len(hwAddr) == 0 { - err = fmt.Errorf("could not get subnet for empty hw addr") - return - } - - var resp string - resp, err = getMetadataItem(ctx, fmt.Sprintf("/network/interfaces/macs/%s/subnet-id", hwAddr)) - if err != nil { - return - } - - subnet.ID = strings.TrimSpace(resp) - - resp, err = getMetadataItem(ctx, fmt.Sprintf("/network/interfaces/macs/%s/subnet-ipv4-cidr-block", hwAddr)) - if err != nil { - return - } - - subnet.Cidr = strings.TrimSpace(resp) - return -} - // GetNTPHosts returns the NTP hosts for EC2 if it is detected as the cloud provider, otherwise an empty array. // Docs: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html#configure_ntp func GetNTPHosts(ctx context.Context) []string { @@ -221,25 +155,6 @@ func GetNTPHosts(ctx context.Context) []string { return nil } -func getMetadataItemWithMaxLength(ctx context.Context, endpoint string, maxLength int) (string, error) { - result, err := getMetadataItem(ctx, endpoint) - if err != nil { - return result, err - } - if len(result) > maxLength { - return "", fmt.Errorf("%v gave a response with length > to %v", endpoint, maxLength) - } - return result, err -} - -func getMetadataItem(ctx context.Context, endpoint string) (string, error) { - if !config.IsCloudProviderEnabled(CloudProviderName) { - return "", fmt.Errorf("cloud provider is disabled by configuration") - } - - return doHTTPRequest(ctx, metadataURL+endpoint) -} - // GetClusterName returns the name of the cluster containing the current EC2 instance func GetClusterName(ctx context.Context) (string, error) { if !config.IsCloudProviderEnabled(CloudProviderName) { @@ -270,20 +185,6 @@ func extractClusterName(tags []string) (string, error) { return clusterName, nil } -func doHTTPRequest(ctx context.Context, url string) (string, error) { - headers := map[string]string{} - if config.Datadog.GetBool("ec2_prefer_imdsv2") { - tokenValue, err := token.Get(ctx) - if err != nil { - log.Warnf("ec2_prefer_imdsv2 is set to true in the configuration but the agent was unable to proceed: %s", err) - } else { - headers["X-aws-ec2-metadata-token"] = tokenValue - } - } - - return httputils.Get(ctx, url, headers, time.Duration(config.Datadog.GetInt("ec2_metadata_timeout"))*time.Millisecond) -} - // IsDefaultHostname returns whether the given hostname is a default one for EC2 func IsDefaultHostname(hostname string) bool { return isDefaultHostname(hostname, config.Datadog.GetBool("ec2_use_windows_prefix_detection")) diff --git a/pkg/util/ec2/ec2_test.go b/pkg/util/ec2/ec2_test.go index 9e86d4f3589f4..4408ab35bc915 100644 --- a/pkg/util/ec2/ec2_test.go +++ b/pkg/util/ec2/ec2_test.go @@ -19,6 +19,7 @@ import ( "github.com/stretchr/testify/require" "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/util/dmi" httputils "github.com/DataDog/datadog-agent/pkg/util/http" ) @@ -33,14 +34,22 @@ func resetPackageVars() { metadataURL = initialMetadataURL tokenURL = initialTokenURL token = httputils.NewAPIToken(getToken) + currentMetadataSource = metadataSourceNone instanceIDFetcher.Reset() - localIPv4Fetcher.Reset() publicIPv4Fetcher.Reset() hostnameFetcher.Reset() networkIDFetcher.Reset() } +func setupDMIForEC2(t *testing.T) { + dmi.SetupMock(t, "ec2something", "ec2something2", "i-myinstance", DMIBoardVendor) +} + +func setupDMIForNotEC2(t *testing.T) { + dmi.SetupMock(t, "", "", "", "") +} + func TestIsDefaultHostname(t *testing.T) { const key = "ec2_use_windows_prefix_detection" prefixDetection := config.Datadog.GetBool(key) @@ -119,20 +128,46 @@ func TestGetHostAliases(t *testing.T) { name string instanceID string expectedHosts []string + setupDMI bool + disableDMI bool }{ { name: "Instance ID found", instanceID: "i-0b22a22eec53b9321", expectedHosts: []string{"i-0b22a22eec53b9321"}, + setupDMI: false, }, { name: "No Instance ID found", expectedHosts: []string{}, + setupDMI: false, + }, + { + name: "Instance ID found with DMI", + expectedHosts: []string{"i-myinstance"}, + setupDMI: true, + }, + { + name: "Instance ID found with DMI", + expectedHosts: []string{}, + setupDMI: true, + disableDMI: true, }, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { + if tc.setupDMI { + setupDMIForEC2(t) + } else { + setupDMIForNotEC2(t) + } + + config.Mock(t) + if tc.disableDMI { + config.Datadog.Set("ec2_use_dmi", false) + } + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/plain") var responseCode int @@ -259,124 +294,6 @@ func TestExtractClusterName(t *testing.T) { } } -func TestGetNetworkID(t *testing.T) { - ctx := context.Background() - mac := "00:00:00:00:00" - vpc := "vpc-12345" - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Type", "text/plain") - switch r.RequestURI { - case "/network/interfaces/macs": - io.WriteString(w, mac+"/") - case "/network/interfaces/macs/00:00:00:00:00/vpc-id": - io.WriteString(w, vpc) - default: - w.WriteHeader(http.StatusNotFound) - } - })) - - defer ts.Close() - metadataURL = ts.URL - config.Datadog.Set("ec2_metadata_timeout", 1000) - defer resetPackageVars() - - val, err := GetNetworkID(ctx) - assert.NoError(t, err) - assert.Equal(t, vpc, val) -} - -func TestGetInstanceIDNoMac(t *testing.T) { - ctx := context.Background() - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - io.WriteString(w, "") - })) - - defer ts.Close() - metadataURL = ts.URL - config.Datadog.Set("ec2_metadata_timeout", 1000) - defer resetPackageVars() - - _, err := GetNetworkID(ctx) - require.Error(t, err) - assert.Contains(t, err.Error(), "no mac addresses returned") -} - -func TestGetInstanceIDMultipleVPC(t *testing.T) { - ctx := context.Background() - mac := "00:00:00:00:00" - vpc := "vpc-12345" - mac2 := "00:00:00:00:01" - vpc2 := "vpc-6789" - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Type", "text/plain") - switch r.RequestURI { - case "/network/interfaces/macs": - io.WriteString(w, mac+"/\n") - io.WriteString(w, mac2+"/\n") - case "/network/interfaces/macs/00:00:00:00:00/vpc-id": - io.WriteString(w, vpc) - case "/network/interfaces/macs/00:00:00:00:01/vpc-id": - io.WriteString(w, vpc2) - default: - w.WriteHeader(http.StatusNotFound) - } - })) - - defer ts.Close() - metadataURL = ts.URL - config.Datadog.Set("ec2_metadata_timeout", 1000) - defer resetPackageVars() - - _, err := GetNetworkID(ctx) - require.Error(t, err) - assert.Contains(t, err.Error(), "too many mac addresses returned") -} - -func TestGetLocalIPv4(t *testing.T) { - ip := "10.0.0.2" - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Type", "text/plain") - switch r.RequestURI { - case "/local-ipv4": - io.WriteString(w, ip) - default: - w.WriteHeader(http.StatusNotFound) - } - })) - - defer ts.Close() - metadataURL = ts.URL - config.Datadog.Set("ec2_metadata_timeout", 1000) - defer resetPackageVars() - - ips, err := GetLocalIPv4() - require.NoError(t, err) - assert.Equal(t, []string{ip}, ips) -} - -func TestGetPublicIPv4(t *testing.T) { - ctx := context.Background() - ip := "10.0.0.2" - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Type", "text/plain") - switch r.RequestURI { - case "/public-ipv4": - io.WriteString(w, ip) - default: - w.WriteHeader(http.StatusNotFound) - } - })) - - defer ts.Close() - metadataURL = ts.URL - config.Datadog.Set("ec2_metadata_timeout", 1000) - defer resetPackageVars() - - val, err := GetPublicIPv4(ctx) - require.NoError(t, err) - assert.Equal(t, ip, val) -} - func TestGetToken(t *testing.T) { ctx := context.Background() originalToken := "AQAAAFKw7LyqwVmmBMkqXHpDBuDWw2GnfGswTHi2yiIOGvzD7OMaWw==" @@ -406,6 +323,7 @@ func TestMetedataRequestWithToken(t *testing.T) { var requestWithToken *http.Request var seq int config.Datadog.SetDefault("ec2_prefer_imdsv2", true) + ctx := context.Background() ipv4 := "198.51.100.1" tok := "AQAAAFKw7LyqwVmmBMkqXHpDBuDWw2GnfGswTHi2yiIOGvzD7OMaWw==" @@ -434,7 +352,7 @@ func TestMetedataRequestWithToken(t *testing.T) { return } switch r.RequestURI { - case "/local-ipv4": + case "/public-ipv4": r.Header.Add("X-sequence", fmt.Sprintf("%v", seq)) seq++ requestWithToken = r @@ -443,7 +361,6 @@ func TestMetedataRequestWithToken(t *testing.T) { w.WriteHeader(http.StatusNotFound) } default: - fmt.Println("q") w.WriteHeader(http.StatusNotFound) } })) @@ -453,9 +370,9 @@ func TestMetedataRequestWithToken(t *testing.T) { config.Datadog.Set("ec2_metadata_timeout", 1000) defer resetPackageVars() - ips, err := GetLocalIPv4() + ips, err := GetPublicIPv4(ctx) require.NoError(t, err) - assert.Equal(t, []string{ipv4}, ips) + assert.Equal(t, ipv4, ips) assert.Nil(t, requestWithoutToken) @@ -465,13 +382,13 @@ func TestMetedataRequestWithToken(t *testing.T) { assert.Equal(t, http.MethodPut, requestForToken.Method) assert.Equal(t, "/", requestForToken.RequestURI) assert.Equal(t, tok, requestWithToken.Header.Get("X-aws-ec2-metadata-token")) - assert.Equal(t, "/local-ipv4", requestWithToken.RequestURI) + assert.Equal(t, "/public-ipv4", requestWithToken.RequestURI) assert.Equal(t, http.MethodGet, requestWithToken.Method) // Ensure token has been cached - ips, err = GetLocalIPv4() + ips, err = GetPublicIPv4(ctx) require.NoError(t, err) - assert.Equal(t, []string{ipv4}, ips) + assert.Equal(t, ipv4, ips) // Unchanged assert.Equal(t, "0", requestForToken.Header.Get("X-sequence")) // Incremented @@ -479,9 +396,9 @@ func TestMetedataRequestWithToken(t *testing.T) { // Force refresh token.ExpirationDate = time.Now() - ips, err = GetLocalIPv4() + ips, err = GetPublicIPv4(ctx) require.NoError(t, err) - assert.Equal(t, []string{ipv4}, ips) + assert.Equal(t, ipv4, ips) // Incremented assert.Equal(t, "3", requestForToken.Header.Get("X-sequence")) assert.Equal(t, "4", requestWithToken.Header.Get("X-sequence")) @@ -503,7 +420,7 @@ func TestMetedataRequestWithoutToken(t *testing.T) { token := r.Header.Get("X-aws-ec2-metadata-token") assert.Equal(t, token, "") switch r.RequestURI { - case "/local-ipv4": + case "/public-ipv4": requestWithoutToken = r io.WriteString(w, ipv4) default: @@ -519,27 +436,147 @@ func TestMetedataRequestWithoutToken(t *testing.T) { config.Datadog.Set("ec2_metadata_timeout", 1000) defer resetPackageVars() - ips, err := GetLocalIPv4() + ips, err := GetPublicIPv4(context.Background()) require.NoError(t, err) - assert.Equal(t, []string{ipv4}, ips) + assert.Equal(t, ipv4, ips) - assert.Equal(t, "/local-ipv4", requestWithoutToken.RequestURI) + assert.Equal(t, "/public-ipv4", requestWithoutToken.RequestURI) assert.Equal(t, http.MethodGet, requestWithoutToken.Method) } -func TestGetNTPHosts(t *testing.T) { +func TestGetNTPHostsFromIMDS(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "text/plain") + io.WriteString(w, "test") + })) + defer ts.Close() + defer resetPackageVars() + + metadataURL = ts.URL + actualHosts := GetNTPHosts(context.Background()) + assert.Equal(t, []string{"169.254.169.123"}, actualHosts) +} + +func TestGetNTPHostsDMI(t *testing.T) { + setupDMIForEC2(t) + defer resetPackageVars() + metadataURL = "" + + actualHosts := GetNTPHosts(context.Background()) + assert.Equal(t, []string{"169.254.169.123"}, actualHosts) +} + +func TestGetNTPHostsEC2UUID(t *testing.T) { + dmi.SetupMock(t, "ec2something", "", "", "") + defer resetPackageVars() + metadataURL = "" + + actualHosts := GetNTPHosts(context.Background()) + assert.Equal(t, []string{"169.254.169.123"}, actualHosts) +} + +func TestGetNTPHostsDisabledDMI(t *testing.T) { + config.Mock(t) + config.Datadog.Set("ec2_use_dmi", false) + + // DMI without EC2 UUID + dmi.SetupMock(t, "something", "something", "i-myinstance", DMIBoardVendor) + defer resetPackageVars() + metadataURL = "" + + actualHosts := GetNTPHosts(context.Background()) + assert.Equal(t, []string(nil), actualHosts) +} + +func TestGetNTPHostsNotEC2(t *testing.T) { + setupDMIForNotEC2(t) + defer resetPackageVars() + metadataURL = "" + + actualHosts := GetNTPHosts(context.Background()) + assert.Equal(t, []string(nil), actualHosts) +} + +func TestMetadataSourceIMDS(t *testing.T) { ctx := context.Background() - expectedHosts := []string{"169.254.169.123"} ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/plain") - io.WriteString(w, "test") + switch r.Method { + case http.MethodPut: // token request + io.WriteString(w, "AQAAAFKw7LyqwVmmBMkqXHpDBuDWw2GnfGswTHi2yiIOGvzD7OMaWw==") + case http.MethodGet: // metadata request + switch r.RequestURI { + case "/hostname": + io.WriteString(w, "ip-10-10-10-10.ec2.internal") + default: + w.WriteHeader(http.StatusNotFound) + } + default: + w.WriteHeader(http.StatusNotFound) + } })) defer ts.Close() metadataURL = ts.URL - config.Datadog.Set("cloud_provider_metadata", []string{"aws"}) - actualHosts := GetNTPHosts(ctx) + tokenURL = ts.URL + defer resetPackageVars() + config.Mock(t) + config.Datadog.Set("ec2_metadata_timeout", 1000) + config.Datadog.Set("ec2_prefer_imdsv2", true) + + assert.True(t, IsRunningOn(ctx)) + assert.Equal(t, metadataSourceIMDSv2, currentMetadataSource) + + // trying IMDSv1 + hostnameFetcher.Reset() + currentMetadataSource = metadataSourceNone + config.Datadog.Set("ec2_prefer_imdsv2", false) + + assert.True(t, IsRunningOn(ctx)) + assert.Equal(t, metadataSourceIMDSv1, currentMetadataSource) +} + +func TestMetadataSourceUUID(t *testing.T) { + ctx := context.Background() + + metadataURL = "" + defer resetPackageVars() + + dmi.SetupMock(t, "ec2something", "", "", "") + assert.True(t, IsRunningOn(ctx)) + assert.Equal(t, metadataSourceUUID, currentMetadataSource) + + dmi.SetupMock(t, "", "ec2something", "", "") + assert.True(t, IsRunningOn(ctx)) + assert.Equal(t, metadataSourceUUID, currentMetadataSource) + + dmi.SetupMock(t, "", "45E12AEC-DCD1-B213-94ED-012345ABCDEF", "", "") + assert.True(t, IsRunningOn(ctx)) + assert.Equal(t, metadataSourceUUID, currentMetadataSource) +} + +func TestMetadataSourceDMI(t *testing.T) { + ctx := context.Background() + + metadataURL = "" + defer resetPackageVars() + + setupDMIForEC2(t) + GetHostAliases(ctx) + assert.Equal(t, metadataSourceDMI, currentMetadataSource) +} + +func TestMetadataSourceDMIPreventFallback(t *testing.T) { + ctx := context.Background() + + metadataURL = "" + defer resetPackageVars() + + setupDMIForEC2(t) + GetHostAliases(ctx) + assert.Equal(t, metadataSourceDMI, currentMetadataSource) - assert.Equal(t, expectedHosts, actualHosts) + assert.True(t, IsRunningOn(ctx)) + assert.Equal(t, metadataSourceDMI, currentMetadataSource) } diff --git a/pkg/util/ec2/imds_helpers.go b/pkg/util/ec2/imds_helpers.go new file mode 100644 index 0000000000000..1dc78bdbc6966 --- /dev/null +++ b/pkg/util/ec2/imds_helpers.go @@ -0,0 +1,76 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package ec2 + +import ( + "context" + "fmt" + "time" + + "github.com/DataDog/datadog-agent/pkg/config" + httputils "github.com/DataDog/datadog-agent/pkg/util/http" + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +func getToken(ctx context.Context) (string, time.Time, error) { + tokenLifetime := time.Duration(config.Datadog.GetInt("ec2_metadata_token_lifetime")) * time.Second + // Set the local expiration date before requesting the metadata endpoint so the local expiration date will always + // expire before the expiration date computed on the AWS side. The expiration date is set minus the renewal window + // to ensure the token will be refreshed before it expires. + expirationDate := time.Now().Add(tokenLifetime - tokenRenewalWindow) + + res, err := httputils.Put(ctx, + tokenURL, + map[string]string{ + "X-aws-ec2-metadata-token-ttl-seconds": fmt.Sprintf("%d", int(tokenLifetime.Seconds())), + }, + nil, + config.Datadog.GetDuration("ec2_metadata_timeout")*time.Millisecond) + + if err != nil { + return "", time.Now(), err + } + return res, expirationDate, nil +} + +func getMetadataItemWithMaxLength(ctx context.Context, endpoint string, maxLength int) (string, error) { + result, err := getMetadataItem(ctx, endpoint) + if err != nil { + return result, err + } + if len(result) > maxLength { + return "", fmt.Errorf("%v gave a response with length > to %v", endpoint, maxLength) + } + return result, err +} + +func getMetadataItem(ctx context.Context, endpoint string) (string, error) { + if !config.IsCloudProviderEnabled(CloudProviderName) { + return "", fmt.Errorf("cloud provider is disabled by configuration") + } + + return doHTTPRequest(ctx, metadataURL+endpoint) +} + +func doHTTPRequest(ctx context.Context, url string) (string, error) { + source := metadataSourceIMDSv1 + headers := map[string]string{} + if config.Datadog.GetBool("ec2_prefer_imdsv2") { + tokenValue, err := token.Get(ctx) + if err != nil { + log.Warnf("ec2_prefer_imdsv2 is set to true in the configuration but the agent was unable to proceed: %s", err) + } else { + headers["X-aws-ec2-metadata-token"] = tokenValue + source = metadataSourceIMDSv2 + } + } + + res, err := httputils.Get(ctx, url, headers, time.Duration(config.Datadog.GetInt("ec2_metadata_timeout"))*time.Millisecond) + if err == nil { + setCloudProviderSource(source) + } + return res, err +} diff --git a/pkg/util/ec2/network.go b/pkg/util/ec2/network.go new file mode 100644 index 0000000000000..39d051bebd217 --- /dev/null +++ b/pkg/util/ec2/network.go @@ -0,0 +1,100 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package ec2 + +import ( + "context" + "fmt" + "net" + "strings" + + "github.com/DataDog/datadog-agent/pkg/util/cachedfetch" + "github.com/DataDog/datadog-agent/pkg/util/common" +) + +var publicIPv4Fetcher = cachedfetch.Fetcher{ + Name: "EC2 Public IPv4 Address", + Attempt: func(ctx context.Context) (interface{}, error) { + return getMetadataItem(ctx, "/public-ipv4") + }, +} + +// GetPublicIPv4 gets the public IPv4 for the currently running host using the EC2 metadata API. +func GetPublicIPv4(ctx context.Context) (string, error) { + return publicIPv4Fetcher.FetchString(ctx) +} + +var networkIDFetcher = cachedfetch.Fetcher{ + Name: "VPC IDs", + Attempt: func(ctx context.Context) (interface{}, error) { + resp, err := getMetadataItem(ctx, "/network/interfaces/macs") + if err != nil { + return "", err + } + + macs := strings.Split(strings.TrimSpace(resp), "\n") + vpcIDs := common.NewStringSet() + + for _, mac := range macs { + if mac == "" { + continue + } + mac = strings.TrimSuffix(mac, "/") + id, err := getMetadataItem(ctx, fmt.Sprintf("/network/interfaces/macs/%s/vpc-id", mac)) + if err != nil { + return "", err + } + vpcIDs.Add(id) + } + + switch len(vpcIDs) { + case 0: + return "", fmt.Errorf("EC2: GetNetworkID no mac addresses returned") + case 1: + return vpcIDs.GetAll()[0], nil + default: + return "", fmt.Errorf("EC2: GetNetworkID too many mac addresses returned") + } + }, +} + +// GetNetworkID retrieves the network ID using the EC2 metadata endpoint. For +// EC2 instances, the the network ID is the VPC ID, if the instance is found to +// be a part of exactly one VPC. +func GetNetworkID(ctx context.Context) (string, error) { + return networkIDFetcher.FetchString(ctx) +} + +// Subnet stores information about an AWS subnet +type Subnet struct { + ID string + Cidr string +} + +// GetSubnetForHardwareAddr returns info about the subnet associated with a hardware +// address (mac address) on the current host +func GetSubnetForHardwareAddr(ctx context.Context, hwAddr net.HardwareAddr) (subnet Subnet, err error) { + if len(hwAddr) == 0 { + err = fmt.Errorf("could not get subnet for empty hw addr") + return + } + + var resp string + resp, err = getMetadataItem(ctx, fmt.Sprintf("/network/interfaces/macs/%s/subnet-id", hwAddr)) + if err != nil { + return + } + + subnet.ID = strings.TrimSpace(resp) + + resp, err = getMetadataItem(ctx, fmt.Sprintf("/network/interfaces/macs/%s/subnet-ipv4-cidr-block", hwAddr)) + if err != nil { + return + } + + subnet.Cidr = strings.TrimSpace(resp) + return +} diff --git a/pkg/util/ec2/network_test.go b/pkg/util/ec2/network_test.go new file mode 100644 index 0000000000000..76378ff572cfe --- /dev/null +++ b/pkg/util/ec2/network_test.go @@ -0,0 +1,114 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package ec2 + +import ( + "context" + "io" + "net/http" + "net/http/httptest" + "testing" + + "github.com/DataDog/datadog-agent/pkg/config" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestGetPublicIPv4(t *testing.T) { + ctx := context.Background() + ip := "10.0.0.2" + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "text/plain") + switch r.RequestURI { + case "/public-ipv4": + io.WriteString(w, ip) + default: + w.WriteHeader(http.StatusNotFound) + } + })) + + defer ts.Close() + metadataURL = ts.URL + config.Datadog.Set("ec2_metadata_timeout", 1000) + defer resetPackageVars() + + val, err := GetPublicIPv4(ctx) + require.NoError(t, err) + assert.Equal(t, ip, val) +} + +func TestGetNetworkID(t *testing.T) { + ctx := context.Background() + mac := "00:00:00:00:00" + vpc := "vpc-12345" + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "text/plain") + switch r.RequestURI { + case "/network/interfaces/macs": + io.WriteString(w, mac+"/") + case "/network/interfaces/macs/00:00:00:00:00/vpc-id": + io.WriteString(w, vpc) + default: + w.WriteHeader(http.StatusNotFound) + } + })) + + defer ts.Close() + metadataURL = ts.URL + config.Datadog.Set("ec2_metadata_timeout", 1000) + defer resetPackageVars() + + val, err := GetNetworkID(ctx) + assert.NoError(t, err) + assert.Equal(t, vpc, val) +} + +func TestGetInstanceIDNoMac(t *testing.T) { + ctx := context.Background() + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + io.WriteString(w, "") + })) + + defer ts.Close() + metadataURL = ts.URL + config.Datadog.Set("ec2_metadata_timeout", 1000) + defer resetPackageVars() + + _, err := GetNetworkID(ctx) + require.Error(t, err) + assert.Contains(t, err.Error(), "no mac addresses returned") +} + +func TestGetInstanceIDMultipleVPC(t *testing.T) { + ctx := context.Background() + mac := "00:00:00:00:00" + vpc := "vpc-12345" + mac2 := "00:00:00:00:01" + vpc2 := "vpc-6789" + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "text/plain") + switch r.RequestURI { + case "/network/interfaces/macs": + io.WriteString(w, mac+"/\n") + io.WriteString(w, mac2+"/\n") + case "/network/interfaces/macs/00:00:00:00:00/vpc-id": + io.WriteString(w, vpc) + case "/network/interfaces/macs/00:00:00:00:01/vpc-id": + io.WriteString(w, vpc2) + default: + w.WriteHeader(http.StatusNotFound) + } + })) + + defer ts.Close() + metadataURL = ts.URL + config.Datadog.Set("ec2_metadata_timeout", 1000) + defer resetPackageVars() + + _, err := GetNetworkID(ctx) + require.Error(t, err) + assert.Contains(t, err.Error(), "too many mac addresses returned") +} diff --git a/pkg/util/ecs/detection.go b/pkg/util/ecs/detection.go index 4ab8e5220cee3..0f830dbd48f81 100644 --- a/pkg/util/ecs/detection.go +++ b/pkg/util/ecs/detection.go @@ -10,7 +10,6 @@ package ecs import ( "context" - "os" "time" "github.com/DataDog/datadog-agent/pkg/config" @@ -21,61 +20,11 @@ import ( ) const ( - isFargateInstanceCacheKey = "IsFargateInstanceCacheKey" hasFargateResourceTagsCacheKey = "HasFargateResourceTagsCacheKey" hasEC2ResourceTagsCacheKey = "HasEC2ResourceTagsCacheKey" hasEC2ResourceTagsCacheExpiry = 5 * time.Minute ) -// IsECSInstance returns whether the agent is running in ECS. -func IsECSInstance() bool { - if !config.IsCloudProviderEnabled(common.CloudProviderName) { - return false - } - _, err := ecsmeta.V1() - return err == nil -} - -// IsFargateInstance returns whether the agent is in an ECS fargate task. -// It detects it by getting and unmarshalling the metadata API response. -// This function identifies Fargate on ECS only. Make sure to use the Fargate pkg -// to identify Fargate instances in other orchestrators (e.g EKS Fargate) -func IsFargateInstance(ctx context.Context) bool { - if !config.IsCloudProviderEnabled(common.CloudProviderName) { - return false - } - return queryCacheBool(isFargateInstanceCacheKey, func() (bool, time.Duration) { - - // This envvar is set to AWS_ECS_EC2 on classic EC2 instances - // Versions 1.0.0 to 1.3.0 (latest at the time) of the Fargate - // platform set this envvar. - // If Fargate detection were to fail, running a container with - // `env` as cmd will allow to check if it is still present. - if os.Getenv("AWS_EXECUTION_ENV") != "AWS_ECS_FARGATE" { - return newBoolEntry(false) - } - - client, err := ecsmeta.V2() - if err != nil { - log.Debugf("error while initializing ECS metadata V2 client: %s", err) - return newBoolEntry(false) - } - - _, err = client.GetTask(ctx) - if err != nil { - log.Debug(err) - return newBoolEntry(false) - } - - return newBoolEntry(true) - }) -} - -// IsRunningOn returns true if the agent is running on ECS/Fargate -func IsRunningOn(ctx context.Context) bool { - return IsECSInstance() || IsFargateInstance(ctx) -} - // HasEC2ResourceTags returns whether the metadata endpoint in ECS exposes // resource tags. func HasEC2ResourceTags() bool { @@ -111,16 +60,6 @@ func HasFargateResourceTags(ctx context.Context) bool { }) } -// GetNTPHosts returns the NTP hosts for ECS/Fargate if it is detected as the cloud provider, otherwise an empty array. -// Docs: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html#configure_ntp -func GetNTPHosts(ctx context.Context) []string { - if IsRunningOn(ctx) { - return []string{"169.254.169.123"} - } - - return nil -} - func queryCacheBool(cacheKey string, cacheMissEvalFunc func() (bool, time.Duration)) bool { if !config.IsCloudProviderEnabled(common.CloudProviderName) { return false diff --git a/pkg/util/ecs/detection_nodocker.go b/pkg/util/ecs/detection_nodocker.go deleted file mode 100644 index 70327f8a3e5af..0000000000000 --- a/pkg/util/ecs/detection_nodocker.go +++ /dev/null @@ -1,32 +0,0 @@ -// Unless explicitly stated otherwise all files in this repository are licensed -// under the Apache License Version 2.0. -// This product includes software developed at Datadog (https://www.datadoghq.com/). -// Copyright 2020-present Datadog, Inc. - -//go:build !docker -// +build !docker - -package ecs - -import "context" - -// IsECSInstance returns whether the agent is running in ECS. -func IsECSInstance() bool { - return false -} - -// IsFargateInstance returns whether the agent is in an ECS fargate task. -// It detects it by getting and unmarshalling the metadata API response. -func IsFargateInstance(ctx context.Context) bool { - return false -} - -// IsRunningOn returns true if the agent is running on ECS/Fargate -func IsRunningOn(ctx context.Context) bool { - return false -} - -// GetNTPHosts returns the NTP hosts for ECS/Fargate if it is detected as the cloud provider, otherwise an empty array. -func GetNTPHosts(ctx context.Context) []string { - return nil -} diff --git a/pkg/util/ecs/metadata/doc.go b/pkg/util/ecs/metadata/doc.go index 4e82e70414bce..e549b2ed5d8b8 100644 --- a/pkg/util/ecs/metadata/doc.go +++ b/pkg/util/ecs/metadata/doc.go @@ -7,13 +7,13 @@ Package metadata provides clients for Metadata APIs exposed by the ECS agent. There are three versions of these APIs: - - V1: also called introspection endpoint. + - V1: also called introspection endpoint. - - V2: available since ecs-agent 1.17.0 with the EC2 launch type and since - platform version 1.1.0 with the Fargate launch type. + - V2: available since ecs-agent 1.17.0 with the EC2 launch type and since + platform version 1.1.0 with the Fargate launch type. - - V3: available since ecs-agent 1.21.0 with the EC2 launch type and since - platform version 1.3.0 with the Faragate launch type. + - V3: available since ecs-agent 1.21.0 with the EC2 launch type and since + platform version 1.3.0 with the Faragate launch type. Each of these versions sits in its own subpackage. */ diff --git a/pkg/util/filesystem/permission_nowindows.go b/pkg/util/filesystem/permission_nowindows.go index fc900c6b50a04..8af90c5445278 100644 --- a/pkg/util/filesystem/permission_nowindows.go +++ b/pkg/util/filesystem/permission_nowindows.go @@ -2,6 +2,7 @@ // under the Apache License Version 2.0. // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. + //go:build !windows // +build !windows @@ -26,7 +27,8 @@ func NewPermission() (*Permission, error) { return &Permission{}, nil } -// RestrictAccessToUser restricts the access to a file to the current user and its group +// RestrictAccessToUser sets the file user and group to the same as 'dd-agent' user. If the function fails to lookup +// "dd-agent" user it return nil immediately. func (p *Permission) RestrictAccessToUser(path string) error { usr, err := user.Lookup("dd-agent") if err != nil { @@ -54,3 +56,18 @@ func (p *Permission) RestrictAccessToUser(path string) error { return nil } + +// RemoveAccessToOtherUsers on Unix this calls RestrictAccessToUser and then removes all access to the file for 'group' +// and 'other' +func (p *Permission) RemoveAccessToOtherUsers(path string) error { + // We first try to set other and group to "dd-agent" when possible + _ = p.RestrictAccessToUser(path) + + fperm, err := os.Stat(path) + if err != nil { + return err + } + // We keep the original 'user' rights but set 'group' and 'other' to zero. + newPerm := fperm.Mode().Perm() & 0700 + return os.Chmod(path, fs.FileMode(newPerm)) +} diff --git a/pkg/util/filesystem/permission_nowindows_test.go b/pkg/util/filesystem/permission_nowindows_test.go new file mode 100644 index 0000000000000..d5ac928c20858 --- /dev/null +++ b/pkg/util/filesystem/permission_nowindows_test.go @@ -0,0 +1,45 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build !windows +// +build !windows + +package filesystem + +import ( + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/require" + "gotest.tools/assert" +) + +func TestRemoveAccessToOtherUsers(t *testing.T) { + p, err := NewPermission() + require.NoError(t, err) + + root := t.TempDir() + + testFile := filepath.Join(root, "file") + testDir := filepath.Join(root, "dir") + + err = os.WriteFile(testFile, []byte("test"), 0777) + require.NoError(t, err) + err = os.Mkdir(testDir, 0777) + require.NoError(t, err) + + err = p.RemoveAccessToOtherUsers(testFile) + require.NoError(t, err) + stat, err := os.Stat(testFile) + require.NoError(t, err) + assert.Equal(t, int(stat.Mode().Perm()), 0700) + + err = p.RemoveAccessToOtherUsers(testDir) + require.NoError(t, err) + stat, err = os.Stat(testDir) + require.NoError(t, err) + assert.Equal(t, int(stat.Mode().Perm()), 0700) +} diff --git a/pkg/util/filesystem/permission_windows.go b/pkg/util/filesystem/permission_windows.go index edf3503876022..11d5eb2f78e90 100644 --- a/pkg/util/filesystem/permission_windows.go +++ b/pkg/util/filesystem/permission_windows.go @@ -71,3 +71,8 @@ func (p *Permission) RestrictAccessToUser(path string) error { acl.GrantSid(windows.GENERIC_ALL, p.systemSid), acl.GrantSid(windows.GENERIC_ALL, p.currentUserSid)) } + +// RemoveAccessToOtherUsers on Windows this function calls RestrictAccessToUser +func (p *Permission) RemoveAccessToOtherUsers(path string) error { + return p.RestrictAccessToUser(path) +} diff --git a/pkg/util/hostname/common.go b/pkg/util/hostname/common.go index b9f785fe99b41..ea61b064d63c9 100644 --- a/pkg/util/hostname/common.go +++ b/pkg/util/hostname/common.go @@ -15,7 +15,6 @@ import ( "github.com/DataDog/datadog-agent/pkg/util/cloudproviders/azure" "github.com/DataDog/datadog-agent/pkg/util/cloudproviders/gce" "github.com/DataDog/datadog-agent/pkg/util/ec2" - "github.com/DataDog/datadog-agent/pkg/util/ecs" "github.com/DataDog/datadog-agent/pkg/util/fargate" "github.com/DataDog/datadog-agent/pkg/util/hostname/validate" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -132,7 +131,7 @@ func fromEC2(ctx context.Context, currentHostname string) (string, error) { // We use the instance id if we're on an ECS cluster or we're on EC2 and the hostname is one of the default ones // or ec2_prioritize_instance_id_as_hostname is set to true - if ecs.IsECSInstance() || ec2.IsDefaultHostname(currentHostname) || prioritizeEC2Hostname { + if config.IsFeaturePresent(config.ECSEC2) || ec2.IsDefaultHostname(currentHostname) || prioritizeEC2Hostname { return getValidEC2Hostname(ctx) } else if ec2.IsWindowsDefaultHostname(currentHostname) { // Display a message when enabling `ec2_use_windows_prefix_detection` would make the hostname resolution change. diff --git a/pkg/util/jsonquery/yaml.go b/pkg/util/jsonquery/yaml.go index 58cfba9742efe..a980b6a59f8c1 100644 --- a/pkg/util/jsonquery/yaml.go +++ b/pkg/util/jsonquery/yaml.go @@ -8,6 +8,8 @@ package jsonquery import ( "fmt" "time" + + "gopkg.in/yaml.v3" ) // Copy from https://github.com/itchyny/gojq/blob/main/cli/yaml.go @@ -46,3 +48,18 @@ func NormalizeYAMLForGoJQ(v interface{}) interface{} { return v } } + +// YAMLCheckExist check a property/value from a YAML exist (jq style syntax) +func YAMLCheckExist(yamlData []byte, query string) (bool, error) { + var yamlContent interface{} + if err := yaml.Unmarshal(yamlData, &yamlContent); err != nil { + return false, err + } + yamlContent = NormalizeYAMLForGoJQ(yamlContent) + output, _, err := RunSingleOutput(query, yamlContent) + var exist bool + if err := yaml.Unmarshal([]byte(output), &exist); err != nil { + return false, fmt.Errorf("filter query must return a boolean: %s", err) + } + return exist, err +} diff --git a/pkg/util/jsonquery/yaml_test.go b/pkg/util/jsonquery/yaml_test.go new file mode 100644 index 0000000000000..231141e78d6be --- /dev/null +++ b/pkg/util/jsonquery/yaml_test.go @@ -0,0 +1,32 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2023-present Datadog, Inc. + +package jsonquery + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/DataDog/datadog-agent/pkg/autodiscovery/integration" +) + +func TestYAMLExistQuery(t *testing.T) { + exist, err := YAMLCheckExist(integration.Data("{\"ip_address\": \"127.0.0.50\"}"), ".ip_address == \"127.0.0.50\"") + assert.NoError(t, err) + assert.True(t, exist) + + exist, err = YAMLCheckExist(integration.Data("{\"ip_address\": \"127.0.0.50\"}"), ".ip_address == \"127.0.0.99\"") + assert.NoError(t, err) + assert.False(t, exist) + + exist, err = YAMLCheckExist(integration.Data("{\"ip_address\": \"127.0.0.50\"}"), ".ip_address") + assert.EqualError(t, err, "filter query must return a boolean: yaml: unmarshal errors:\n line 1: cannot unmarshal !!str `127.0.0.50` into bool") + assert.False(t, exist) + + exist, err = YAMLCheckExist(integration.Data("{}"), ".ip_address == \"127.0.0.99\"") + assert.NoError(t, err) + assert.False(t, exist) +} diff --git a/pkg/util/kernel/arch.go b/pkg/util/kernel/arch.go index bc08992136b27..bc479eea59f56 100644 --- a/pkg/util/kernel/arch.go +++ b/pkg/util/kernel/arch.go @@ -26,6 +26,6 @@ func Arch() string { case "s390x": return "s390" default: - return "" + return runtime.GOARCH } } diff --git a/pkg/util/kernel/find_headers.go b/pkg/util/kernel/find_headers.go index e5d6232035711..24d9017497b00 100644 --- a/pkg/util/kernel/find_headers.go +++ b/pkg/util/kernel/find_headers.go @@ -31,7 +31,6 @@ import ( "github.com/DataDog/datadog-go/v5/statsd" "github.com/DataDog/nikos/types" - "github.com/DataDog/datadog-agent/pkg/ebpf" "github.com/DataDog/datadog-agent/pkg/metadata/host" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/version" @@ -82,16 +81,26 @@ type headerProvider struct { kernelHeaders []string } -func initProvider(config *ebpf.Config) { +type KernelHeaderOptions struct { + DownloadEnabled bool + Dirs []string + DownloadDir string + + AptConfigDir string + YumReposDir string + ZypperReposDir string +} + +func initProvider(opts KernelHeaderOptions) { HeaderProvider = &headerProvider{ - downloadEnabled: config.EnableKernelHeaderDownload, - headerDirs: config.KernelHeadersDirs, - headerDownloadDir: config.KernelHeadersDownloadDir, + downloadEnabled: opts.DownloadEnabled, + headerDirs: opts.Dirs, + headerDownloadDir: opts.DownloadDir, downloader: headerDownloader{ - aptConfigDir: config.AptConfigDir, - yumReposDir: config.YumReposDir, - zypperReposDir: config.ZypperReposDir, + aptConfigDir: opts.AptConfigDir, + yumReposDir: opts.YumReposDir, + zypperReposDir: opts.ZypperReposDir, }, result: notAttempted, @@ -107,12 +116,12 @@ func initProvider(config *ebpf.Config) { // Any subsequent calls to GetKernelHeaders will return the result of the first call. This is because // kernel header downloading can be a resource intensive process, so we don't want to retry it an unlimited // number of times. -func GetKernelHeaders(config *ebpf.Config, client statsd.ClientInterface) []string { +func GetKernelHeaders(opts KernelHeaderOptions, client statsd.ClientInterface) []string { providerMu.Lock() defer providerMu.Unlock() if HeaderProvider == nil { - initProvider(config) + initProvider(opts) } if HeaderProvider.result != notAttempted { diff --git a/pkg/util/kernel/find_headers_test.go b/pkg/util/kernel/find_headers_test.go index 3a43aa8aa4674..61444c46710ec 100644 --- a/pkg/util/kernel/find_headers_test.go +++ b/pkg/util/kernel/find_headers_test.go @@ -14,8 +14,6 @@ import ( "testing" "github.com/stretchr/testify/assert" - - "github.com/DataDog/datadog-agent/pkg/ebpf" ) func TestGetKernelHeaders(t *testing.T) { @@ -23,8 +21,8 @@ func TestGetKernelHeaders(t *testing.T) { t.Skip("set INTEGRATION environment variable to run") } - cfg := testConfig() - dirs := GetKernelHeaders(cfg, nil) + opts := KernelHeaderOptions{} + dirs := GetKernelHeaders(opts, nil) assert.NotZero(t, len(dirs), "expected to find header directories") t.Log(dirs) @@ -56,14 +54,3 @@ func TestParseHeaderVersion(t *testing.T) { } } } - -func testConfig() *ebpf.Config { - return &ebpf.Config{ - EnableKernelHeaderDownload: false, - KernelHeadersDirs: nil, - KernelHeadersDownloadDir: "", - AptConfigDir: "", - YumReposDir: "", - ZypperReposDir: "", - } -} diff --git a/pkg/util/kubernetes/apiserver/apiserver.go b/pkg/util/kubernetes/apiserver/apiserver.go index 20f8541640a57..9c04d452611cf 100644 --- a/pkg/util/kubernetes/apiserver/apiserver.go +++ b/pkg/util/kubernetes/apiserver/apiserver.go @@ -22,6 +22,7 @@ import ( "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/runtime" vpa "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/clientset/versioned" + vpai "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/informers/externalversions" "k8s.io/client-go/discovery" "k8s.io/client-go/dynamic" "k8s.io/client-go/dynamic/dynamicinformer" @@ -100,6 +101,9 @@ type APIClient struct { // VPAClient holds kubernetes VerticalPodAutoscalers client VPAClient vpa.Interface + // VPAInformerFactory + VPAInformerFactory vpai.SharedInformerFactory + // timeoutSeconds defines the kubernetes client timeout timeoutSeconds int64 } @@ -239,6 +243,13 @@ func getKubeVPAClient(timeout time.Duration) (vpa.Interface, error) { return vpa.NewForConfig(clientConfig) } +// VPAInformerFactory vpai.SharedInformerFactory +func getVPAInformerFactory(client vpa.Interface) (vpai.SharedInformerFactory, error) { + // default to 300s + resyncPeriodSeconds := time.Duration(config.Datadog.GetInt64("kubernetes_informers_resync_period")) + return vpai.NewSharedInformerFactory(client, resyncPeriodSeconds*time.Second), nil +} + func getWPAInformerFactory() (dynamicinformer.DynamicSharedInformerFactory, error) { // default to 300s resyncPeriodSeconds := time.Duration(config.Datadog.GetInt64("kubernetes_informers_resync_period")) @@ -356,6 +367,13 @@ func (c *APIClient) connect() error { _ = log.Errorf("Error getting datadoghq informer Client: %s", err.Error()) return err } + + c.VPAInformerFactory, err = getVPAInformerFactory(c.VPAClient) + if err != nil { + log.Infof("Could not get a vpa informer factory: %v", err) + return err + } + } if config.Datadog.GetBool("admission_controller.enabled") { diff --git a/pkg/util/kubernetes/apiserver/apiserver_kubelet.go b/pkg/util/kubernetes/apiserver/apiserver_kubelet.go index 714562873df32..5ac14579c6af5 100644 --- a/pkg/util/kubernetes/apiserver/apiserver_kubelet.go +++ b/pkg/util/kubernetes/apiserver/apiserver_kubelet.go @@ -23,7 +23,7 @@ import ( // node to the cache // Only called when the node agent computes the metadata mapper locally and does not rely on the DCA. func (c *APIClient) NodeMetadataMapping(nodeName string, pods []*kubelet.Pod) error { - endpointList, err := c.Cl.CoreV1().Endpoints("").List(context.TODO(), metav1.ListOptions{TimeoutSeconds: &c.timeoutSeconds}) + endpointList, err := c.Cl.CoreV1().Endpoints("").List(context.TODO(), metav1.ListOptions{TimeoutSeconds: &c.timeoutSeconds, ResourceVersion: "0"}) if err != nil { log.Errorf("Could not collect endpoints from the API Server: %q", err.Error()) return err diff --git a/pkg/util/kubernetes/apiserver/hpa_controller_test.go b/pkg/util/kubernetes/apiserver/hpa_controller_test.go index 94d278c541434..91e64fabe8efa 100644 --- a/pkg/util/kubernetes/apiserver/hpa_controller_test.go +++ b/pkg/util/kubernetes/apiserver/hpa_controller_test.go @@ -31,6 +31,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/clusteragent/custommetrics" "github.com/DataDog/datadog-agent/pkg/errors" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/autoscalers" + "github.com/DataDog/datadog-agent/pkg/util/pointer" ) const ( @@ -124,13 +125,15 @@ func (h *fakeProcessor) UpdateExternalMetrics(emList map[string]custommetrics.Ex } return nil } + func (h *fakeProcessor) ProcessEMList(metrics []custommetrics.ExternalMetricValue) map[string]custommetrics.ExternalMetricValue { if h.processFunc != nil { return h.processFunc(metrics) } return nil } -func (h *fakeProcessor) QueryExternalMetric(queries []string) (map[string]autoscalers.Point, error) { + +func (h *fakeProcessor) QueryExternalMetric(queries []string, timeWindow time.Duration) (map[string]autoscalers.Point, error) { return nil, nil } @@ -158,10 +161,6 @@ func makePoints(ts int, val float64) datadog.DataPoint { return datadog.DataPoint{&tsPtr, &val} } -func makePtr(val string) *string { - return &val -} - func makeAnnotations(metricName string, labels map[string]string) map[string]string { return map[string]string{ "kubectl.kubernetes.io/last-applied-configuration": fmt.Sprintf(` @@ -292,7 +291,6 @@ func TestUpdate(t *testing.T) { require.True(t, reflect.DeepEqual(m.Labels, map[string]string{"foo": "baz"})) } } - } // TestAutoscalerController is an integration test of the AutoscalerController @@ -309,7 +307,7 @@ func TestAutoscalerController(t *testing.T) { makePoints(penTime, 14.123), makePoints(0, 25.12), }, - Scope: makePtr("foo:bar"), + Scope: pointer.Ptr("foo:bar"), }, } d := &fakeDatadogClient{ @@ -406,7 +404,7 @@ func TestAutoscalerController(t *testing.T) { makePoints(penTime, 1.01), makePoints(0, 0.902), }, - Scope: makePtr("dcos_version:2.1.9"), + Scope: pointer.Ptr("dcos_version:2.1.9"), }, } mockedHPA.Annotations = makeAnnotations("nginx.net.request_per_s", map[string]string{"dcos_version": "2.1.9"}) diff --git a/pkg/util/kubernetes/apiserver/leaderelection/leaderelection.go b/pkg/util/kubernetes/apiserver/leaderelection/leaderelection.go index 3a6497161e02a..0fd1086b477fd 100644 --- a/pkg/util/kubernetes/apiserver/leaderelection/leaderelection.go +++ b/pkg/util/kubernetes/apiserver/leaderelection/leaderelection.go @@ -9,6 +9,7 @@ package leaderelection import ( + "context" "encoding/json" "fmt" "os" @@ -17,12 +18,11 @@ import ( "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + coordinationv1 "k8s.io/client-go/kubernetes/typed/coordination/v1" corev1 "k8s.io/client-go/kubernetes/typed/core/v1" "k8s.io/client-go/tools/leaderelection" rl "k8s.io/client-go/tools/leaderelection/resourcelock" - "context" - "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/telemetry" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/apiserver" @@ -37,9 +37,7 @@ const ( getLeaderTimeout = 10 * time.Second ) -var ( - globalLeaderEngine *LeaderEngine -) +var globalLeaderEngine *LeaderEngine // LeaderEngine is a structure for the LeaderEngine client to run leader election // on Kubernetes clusters @@ -56,6 +54,7 @@ type LeaderEngine struct { LeaseName string LeaderNamespace string coreClient corev1.CoreV1Interface + coordClient coordinationv1.CoordinationV1Interface ServiceName string leaderIdentityMutex sync.RWMutex leaderElector *leaderelection.LeaderElector @@ -138,7 +137,9 @@ func (le *LeaderEngine) init() error { return err } - le.coreClient = apiClient.Cl.CoreV1().(*corev1.CoreV1Client) + le.coreClient = apiClient.Cl.CoreV1() + // Will be required once we migrate to Kubernetes deps >= 0.24 + le.coordClient = nil // check if we can get ConfigMap. _, err = le.coreClient.ConfigMaps(le.LeaderNamespace).Get(context.TODO(), le.LeaseName, metav1.GetOptions{}) diff --git a/pkg/util/kubernetes/apiserver/leaderelection/leaderelection_engine.go b/pkg/util/kubernetes/apiserver/leaderelection/leaderelection_engine.go index bd1b7adba7099..2f1d309283f9e 100644 --- a/pkg/util/kubernetes/apiserver/leaderelection/leaderelection_engine.go +++ b/pkg/util/kubernetes/apiserver/leaderelection/leaderelection_engine.go @@ -110,7 +110,7 @@ func (le *LeaderEngine) newElection() (*ld.LeaderElector, error) { configMap.ObjectMeta.Namespace, configMap.ObjectMeta.Name, le.coreClient, - nil, // relying on CM so unnecessary. + le.coordClient, resourceLockConfig, ) if err != nil { diff --git a/pkg/util/kubernetes/apiserver/leaderelection/leaderelection_test.go b/pkg/util/kubernetes/apiserver/leaderelection/leaderelection_test.go index 9b8dbf17893b5..37df69a51cec6 100644 --- a/pkg/util/kubernetes/apiserver/leaderelection/leaderelection_test.go +++ b/pkg/util/kubernetes/apiserver/leaderelection/leaderelection_test.go @@ -75,6 +75,7 @@ func TestNewLeaseAcquiring(t *testing.T) { LeaderNamespace: "default", LeaseDuration: 1 * time.Second, coreClient: client.CoreV1(), + coordClient: client.CoordinationV1(), leaderMetric: &dummyGauge{}, } _, err := client.CoreV1().ConfigMaps("default").Get(context.TODO(), leaseName, metav1.GetOptions{}) @@ -110,6 +111,7 @@ func TestSubscribe(t *testing.T) { LeaderNamespace: "default", LeaseDuration: 1 * time.Second, coreClient: client.CoreV1(), + coordClient: client.CoordinationV1(), leaderMetric: &dummyGauge{}, } @@ -167,6 +169,7 @@ func TestGetLeaderIPFollower(t *testing.T) { LeaderNamespace: "default", LeaseDuration: 120 * time.Second, coreClient: client.CoreV1(), + coordClient: client.CoordinationV1(), leaderMetric: &dummyGauge{}, } diff --git a/pkg/util/kubernetes/apiserver/wpa_controller_test.go b/pkg/util/kubernetes/apiserver/wpa_controller_test.go index 9b5c08cb73033..7602e7fb2db7b 100644 --- a/pkg/util/kubernetes/apiserver/wpa_controller_test.go +++ b/pkg/util/kubernetes/apiserver/wpa_controller_test.go @@ -44,6 +44,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/errors" "github.com/DataDog/datadog-agent/pkg/util/kubernetes/autoscalers" "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/util/pointer" "github.com/DataDog/datadog-agent/pkg/util/testutil" ) @@ -239,7 +240,7 @@ func TestWPAController(t *testing.T) { makePoints(penTime, 14.123), makePoints(0, 25.12), }, - Scope: makePtr("foo:bar"), + Scope: pointer.Ptr("foo:bar"), }, { Metric: &metricName, @@ -248,7 +249,7 @@ func TestWPAController(t *testing.T) { makePoints(penTime, 1.01), makePoints(0, 0.902), }, - Scope: makePtr("dcos_version:2.1.9"), + Scope: pointer.Ptr("dcos_version:2.1.9"), }, } d := &fakeDatadogClient{ @@ -375,7 +376,7 @@ func TestWPAController(t *testing.T) { makePoints(penTime, 1.01), makePoints(0, 0.902), }, - Scope: makePtr("dcos_version:2.1.9"), + Scope: pointer.Ptr("dcos_version:2.1.9"), }, } diff --git a/pkg/util/kubernetes/autoscalers/datadogexternal.go b/pkg/util/kubernetes/autoscalers/datadogexternal.go index 678d376be1059..1b8f47648c473 100644 --- a/pkg/util/kubernetes/autoscalers/datadogexternal.go +++ b/pkg/util/kubernetes/autoscalers/datadogexternal.go @@ -9,6 +9,7 @@ package autoscalers import ( + "errors" "fmt" "strconv" "strings" @@ -50,6 +51,7 @@ type Point struct { Value float64 Timestamp int64 Valid bool + Error error } const ( @@ -60,7 +62,7 @@ const ( // queryDatadogExternal converts the metric name and labels from the Ref format into a Datadog metric. // It returns the last value for a bucket of 5 minutes, -func (p *Processor) queryDatadogExternal(ddQueries []string, bucketSize int64) (map[string]Point, error) { +func (p *Processor) queryDatadogExternal(ddQueries []string, timeWindow time.Duration) (map[string]Point, error) { ddQueriesLen := len(ddQueries) if ddQueriesLen == 0 { log.Tracef("No query in input - nothing to do") @@ -68,10 +70,11 @@ func (p *Processor) queryDatadogExternal(ddQueries []string, bucketSize int64) ( } query := strings.Join(ddQueries, ",") - seriesSlice, err := p.datadogClient.QueryMetrics(time.Now().Unix()-bucketSize, time.Now().Unix(), query) + currentTime := time.Now() + seriesSlice, err := p.datadogClient.QueryMetrics(currentTime.Add(-timeWindow).Unix(), currentTime.Unix(), query) if err != nil { ddRequests.Inc("error", le.JoinLeaderValue) - return nil, log.Errorf("Error while executing metric query %s: %s", query, err) + return nil, fmt.Errorf("error while executing metric query %s: %w", query, err) } ddRequests.Inc("success", le.JoinLeaderValue) @@ -97,9 +100,9 @@ func (p *Processor) queryDatadogExternal(ddQueries []string, bucketSize int64) ( // Otherwise we are not able to determine which value we should take for Autoscaling if existingPoint, found := processedMetrics[ddQueries[queryIndex]]; found { if existingPoint.Valid { - log.Warnf("Multiple Series found for query: %s. Please change your query to return a single Serie. Results will be flagged as invalid", ddQueries[queryIndex]) existingPoint.Valid = false - existingPoint.Timestamp = time.Now().Unix() + existingPoint.Timestamp = currentTime.Unix() + existingPoint.Error = errors.New("multiple series found. Please change your query to return a single serie") processedMetrics[ddQueries[queryIndex]] = existingPoint } continue @@ -130,7 +133,7 @@ func (p *Processor) queryDatadogExternal(ddQueries []string, bucketSize int64) ( // Prometheus submissions on the processed external metrics metricsEval.Set(point.Value, m, le.JoinLeaderValue) - precision := time.Now().Unix() - point.Timestamp + precision := currentTime.Unix() - point.Timestamp metricsDelay.Set(float64(precision), m, le.JoinLeaderValue) log.Debugf("Validated %s | Value:%v at %d after %d/%d buckets", ddQueries[queryIndex], point.Value, point.Timestamp, i+1, len(serie.Points)) @@ -143,15 +146,11 @@ func (p *Processor) queryDatadogExternal(ddQueries []string, bucketSize int64) ( if _, found := processedMetrics[ddQuery]; !found { processedMetrics[ddQuery] = Point{ Timestamp: time.Now().Unix(), + Error: fmt.Errorf("no serie returned for this query, check data is available in the last %d seconds", timeWindow), } } } - // If we add no series at all, return an error on top of invalid metrics - if len(seriesSlice) == 0 { - return processedMetrics, log.Warnf("none of the queries %s returned any point, there might be an issue with them", query) - } - return processedMetrics, nil } diff --git a/pkg/util/kubernetes/autoscalers/datadogexternal_test.go b/pkg/util/kubernetes/autoscalers/datadogexternal_test.go index cde222a41ebeb..554d5862bb089 100644 --- a/pkg/util/kubernetes/autoscalers/datadogexternal_test.go +++ b/pkg/util/kubernetes/autoscalers/datadogexternal_test.go @@ -17,6 +17,7 @@ import ( "gopkg.in/zorkian/go-datadog-api.v2" "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/util/pointer" ) // TestDatadogExternalQuery tests that the outputs gotten from Datadog are appropriately dealt with. @@ -36,15 +37,6 @@ func TestDatadogExternalQuery(t *testing.T) { nil, nil, }, - { - "metricName yields empty response from Datadog", - func(from, to int64, query string) ([]datadog.Series, error) { - return nil, nil - }, - []string{"mymetric{foo:bar}"}, - map[string]Point{"mymetric{foo:bar}": {Value: 0, Valid: false}}, - fmt.Errorf("none of the queries mymetric{foo:bar} returned any point, there might be an issue with them"), - }, { "metricName yields rate limiting error response from Datadog", func(int64, int64, string) ([]datadog.Series, error) { @@ -52,7 +44,7 @@ func TestDatadogExternalQuery(t *testing.T) { }, []string{"avg:mymetric{foo:bar}.rollup(30)"}, nil, - fmt.Errorf("Error while executing metric query avg:mymetric{foo:bar}.rollup(30): Rate limit of 300 requests in 3600 seconds"), + fmt.Errorf("error while executing metric query avg:mymetric{foo:bar}.rollup(30): Rate limit of 300 requests in 3600 seconds"), }, { "metrics with different granularities Datadog", @@ -67,9 +59,9 @@ func TestDatadogExternalQuery(t *testing.T) { makePoints(300000, 42), makePoints(400000, 911), }, - Scope: makePtr("foo:bar,baz:ar"), - Metric: makePtr("mymetric"), - QueryIndex: makePtrInt(0), + Scope: pointer.Ptr("foo:bar,baz:ar"), + Metric: pointer.Ptr("mymetric"), + QueryIndex: pointer.Ptr(0), }, { Points: []datadog.DataPoint{ makePartialPoints(10000), @@ -78,9 +70,9 @@ func TestDatadogExternalQuery(t *testing.T) { makePoints(300000, 42), makePartialPoints(40000), }, - Scope: makePtr("foo:baz"), - Metric: makePtr("mymetric2"), - QueryIndex: makePtrInt(1), + Scope: pointer.Ptr("foo:baz"), + Metric: pointer.Ptr("mymetric2"), + QueryIndex: pointer.Ptr(1), }, { Points: []datadog.DataPoint{ makePartialPoints(10000), @@ -89,9 +81,9 @@ func TestDatadogExternalQuery(t *testing.T) { makePartialPoints(30000), makePartialPoints(40000), }, - Scope: makePtr("ba:bar"), - Metric: makePtr("my.aws.metric"), - QueryIndex: makePtrInt(2), + Scope: pointer.Ptr("ba:bar"), + Metric: pointer.Ptr("my.aws.metric"), + QueryIndex: pointer.Ptr(2), }, }, nil }, @@ -128,9 +120,9 @@ func TestDatadogExternalQuery(t *testing.T) { makePoints(300000, 42), makePoints(400000, 911), }, - Metric: makePtr("(system.io.rkb_s + system.io.rkb_s)"), - Scope: makePtr("device:sda,device:sdb,host:a"), - QueryIndex: makePtrInt(0), + Metric: pointer.Ptr("(system.io.rkb_s + system.io.rkb_s)"), + Scope: pointer.Ptr("device:sda,device:sdb,host:a"), + QueryIndex: pointer.Ptr(0), }, { Points: []datadog.DataPoint{ @@ -140,9 +132,9 @@ func TestDatadogExternalQuery(t *testing.T) { makePoints(300000, 42), makePoints(400000, 912), }, - Metric: makePtr("(system.io.rkb_s + system.io.rkb_s)"), - Scope: makePtr("device:sda,device:sdb,host:b"), - QueryIndex: makePtrInt(0), + Metric: pointer.Ptr("(system.io.rkb_s + system.io.rkb_s)"), + Scope: pointer.Ptr("device:sda,device:sdb,host:b"), + QueryIndex: pointer.Ptr(0), }, { Points: []datadog.DataPoint{ @@ -152,9 +144,9 @@ func TestDatadogExternalQuery(t *testing.T) { makePoints(300000, 42), makePartialPoints(40000), }, - Metric: makePtr("mymetric2"), - Scope: makePtr("foo:baz"), - QueryIndex: makePtrInt(1), + Metric: pointer.Ptr("mymetric2"), + Scope: pointer.Ptr("foo:baz"), + QueryIndex: pointer.Ptr(1), }, { Points: []datadog.DataPoint{ @@ -164,9 +156,9 @@ func TestDatadogExternalQuery(t *testing.T) { makePartialPoints(30000), makePartialPoints(40000), }, - Metric: makePtr("my.aws.metric"), - Scope: makePtr("ba:bar"), - QueryIndex: makePtrInt(2), + Metric: pointer.Ptr("my.aws.metric"), + Scope: pointer.Ptr("ba:bar"), + QueryIndex: pointer.Ptr(2), }, }, nil }, @@ -203,9 +195,9 @@ func TestDatadogExternalQuery(t *testing.T) { makePoints(300000, 42), makePoints(400000, 911), }, - Metric: makePtr("(system.io.rkb_s + system.io.rkb_s)"), - Scope: makePtr("device:sda,device:sdb,host:a"), - QueryIndex: makePtrInt(0), + Metric: pointer.Ptr("(system.io.rkb_s + system.io.rkb_s)"), + Scope: pointer.Ptr("device:sda,device:sdb,host:a"), + QueryIndex: pointer.Ptr(0), }, { Points: []datadog.DataPoint{ @@ -215,8 +207,8 @@ func TestDatadogExternalQuery(t *testing.T) { makePoints(300000, 42), makePartialPoints(40000), }, - Metric: makePtr("mymetric2"), - Scope: makePtr("foo:baz"), + Metric: pointer.Ptr("mymetric2"), + Scope: pointer.Ptr("foo:baz"), }, { Points: []datadog.DataPoint{ @@ -226,9 +218,9 @@ func TestDatadogExternalQuery(t *testing.T) { makePartialPoints(30000), makePartialPoints(40000), }, - Metric: makePtr("my.aws.metric"), - Scope: makePtr("ba:bar"), - QueryIndex: makePtrInt(2), + Metric: pointer.Ptr("my.aws.metric"), + Scope: pointer.Ptr("ba:bar"), + QueryIndex: pointer.Ptr(2), }, }, nil }, @@ -259,7 +251,7 @@ func TestDatadogExternalQuery(t *testing.T) { queryMetricsFunc: test.queryfunc, } p := Processor{datadogClient: cl} - points, err := p.queryDatadogExternal(test.metricName, config.Datadog.GetInt64("external_metrics_provider.bucket_size")) + points, err := p.queryDatadogExternal(test.metricName, time.Duration(config.Datadog.GetInt64("external_metrics_provider.bucket_size"))*time.Second) if test.err != nil { require.EqualError(t, test.err, err.Error()) } diff --git a/pkg/util/kubernetes/autoscalers/processor.go b/pkg/util/kubernetes/autoscalers/processor.go index 1584411f54d4b..dbf6483a32ba9 100644 --- a/pkg/util/kubernetes/autoscalers/processor.go +++ b/pkg/util/kubernetes/autoscalers/processor.go @@ -33,6 +33,8 @@ const ( maxCharactersPerChunk = 7000 // extraQueryCharacters accounts for the extra characters added to form a query to Datadog's API (e.g.: `avg:`, `.rollup(X)` ...) extraQueryCharacters = 16 + // maxTimeWindow is a safeguard to prevent the Cluster Agent from making queries on a large time window + maxTimeWindow = 24 * time.Hour ) // DatadogClient abstracts the dependency on the Datadog api @@ -44,7 +46,7 @@ type DatadogClient interface { // ProcessorInterface is used to easily mock the interface for testing type ProcessorInterface interface { UpdateExternalMetrics(emList map[string]custommetrics.ExternalMetricValue) map[string]custommetrics.ExternalMetricValue - QueryExternalMetric(queries []string) (map[string]Point, error) + QueryExternalMetric(queries []string, timeWindow time.Duration) (map[string]Point, error) ProcessEMList(emList []custommetrics.ExternalMetricValue) map[string]custommetrics.ExternalMetricValue } @@ -132,7 +134,8 @@ func (p *Processor) UpdateExternalMetrics(emList map[string]custommetrics.Extern } } - metrics, err := p.QueryExternalMetric(batch) + // In non-DatadogMetric path, we don't have any custom maxAge possible, passing 0 as custom time window to QueryExternalMetric + metrics, err := p.QueryExternalMetric(batch, 0) if len(metrics) == 0 && err != nil { log.Errorf("Error getting metrics from Datadog: %v", err.Error()) // If no metrics can be retrieved from Datadog in a given list, we need to invalidate them @@ -164,13 +167,28 @@ func (p *Processor) UpdateExternalMetrics(emList map[string]custommetrics.Extern // QueryExternalMetric queries Datadog to validate the availability and value of one or more external metrics // Also updates the rate limits statistics as a result of the query. -func (p *Processor) QueryExternalMetric(queries []string) (processed map[string]Point, err error) { +func (p *Processor) QueryExternalMetric(queries []string, timeWindow time.Duration) (processed map[string]Point, err error) { processed = make(map[string]Point) if len(queries) == 0 { return processed, nil } - bucketSize := config.Datadog.GetInt64("external_metrics_provider.bucket_size") + configMaxAge := time.Duration(config.Datadog.GetInt64("external_metrics_provider.max_age")) * time.Second + if configMaxAge > timeWindow { + timeWindow = configMaxAge + } + + configTimeWindow := time.Duration(config.Datadog.GetInt64("external_metrics_provider.bucket_size")) * time.Second + if configTimeWindow > timeWindow { + timeWindow = configTimeWindow + } + + // Safeguard against large time window + if timeWindow > maxTimeWindow { + log.Warnf("Querying external metrics with a time window larger than: %v is not allowed, ceiling value", maxTimeWindow) + timeWindow = maxTimeWindow + } + chunks := makeChunks(queries) log.Tracef("List of batches %v", chunks) @@ -182,7 +200,7 @@ func (p *Processor) QueryExternalMetric(queries []string) (processed map[string] for _, c := range chunks { go func(chunk []string) { defer waitResp.Done() - resp, err := p.queryDatadogExternal(chunk, bucketSize) + resp, err := p.queryDatadogExternal(chunk, timeWindow) responses <- queryResponse{resp, err} }(c) } diff --git a/pkg/util/kubernetes/autoscalers/processor_test.go b/pkg/util/kubernetes/autoscalers/processor_test.go index 27747e6f916f9..d7ce761da07d7 100644 --- a/pkg/util/kubernetes/autoscalers/processor_test.go +++ b/pkg/util/kubernetes/autoscalers/processor_test.go @@ -18,6 +18,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/clusteragent/custommetrics" le "github.com/DataDog/datadog-agent/pkg/util/kubernetes/apiserver/leaderelection/metrics" + "github.com/DataDog/datadog-agent/pkg/util/pointer" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -62,14 +63,6 @@ func makePartialPoints(ts int) datadog.DataPoint { return datadog.DataPoint{&tsPtr, nil} } -func makePtr(val string) *string { - return &val -} - -func makePtrInt(val int) *int { - return &val -} - func TestProcessor_UpdateExternalMetrics(t *testing.T) { penTime := (int(time.Now().Unix()) - int(maxAge.Seconds()/2)) * 1000 metricName := "requests_per_s" @@ -96,7 +89,7 @@ func TestProcessor_UpdateExternalMetrics(t *testing.T) { makePoints(penTime, 14), // Force the penultimate point to be considered fresh at all time(< externalMaxAge) makePoints(0, 27), }, - Scope: makePtr("foo:bar"), + Scope: pointer.Ptr("foo:bar"), }, }, map[string]custommetrics.ExternalMetricValue{ @@ -130,7 +123,7 @@ func TestProcessor_UpdateExternalMetrics(t *testing.T) { makePoints(penTime, 14), // Force the penultimate point to be considered fresh at all time(< externalMaxAge) makePoints(0, 27), }, - Scope: makePtr("foo:bar"), + Scope: pointer.Ptr("foo:bar"), }, }, map[string]custommetrics.ExternalMetricValue{ @@ -165,7 +158,7 @@ func TestProcessor_UpdateExternalMetrics(t *testing.T) { makePoints(1431492453000, 14), // Force the point to be considered outdated at all time(> externalMaxAge) makePoints(0, 1000), // Force the point to be considered fresh at all time(< externalMaxAge) }, - Scope: makePtr("2foo:bar"), + Scope: pointer.Ptr("2foo:bar"), }, }, map[string]custommetrics.ExternalMetricValue{ @@ -228,7 +221,6 @@ func TestProcessor_UpdateExternalMetrics(t *testing.T) { for _, i := range invList { require.False(t, i.Valid) } - } var ASCIIRunes = []rune("qwertyuiopasdfghjklzxcvbnm1234567890") @@ -256,7 +248,8 @@ func TestValidateExternalMetricsBatching(t *testing.T) { desc: "one batch", in: lambdaMakeChunks(14, custommetrics.ExternalMetricValue{ MetricName: "foo", - Labels: map[string]string{"foo": "bar"}}), + Labels: map[string]string{"foo": "bar"}, + }), out: []datadog.Series{ { Metric: &metricName, @@ -265,7 +258,7 @@ func TestValidateExternalMetricsBatching(t *testing.T) { makePoints(penTime, 14), // Force the penultimate point to be considered fresh at all time(< externalMaxAge) makePoints(0, 27), }, - Scope: makePtr("foo:bar"), + Scope: pointer.Ptr("foo:bar"), }, }, batchCalls: 1, @@ -276,7 +269,8 @@ func TestValidateExternalMetricsBatching(t *testing.T) { desc: "several batches", in: lambdaMakeChunks(158, custommetrics.ExternalMetricValue{ MetricName: "foo", - Labels: map[string]string{"foo": "bar"}}), + Labels: map[string]string{"foo": "bar"}, + }), out: []datadog.Series{ { Metric: &metricName, @@ -285,7 +279,7 @@ func TestValidateExternalMetricsBatching(t *testing.T) { makePoints(penTime, 14), // Force the penultimate point to be considered fresh at all time(< externalMaxAge) makePoints(0, 27), }, - Scope: makePtr("foo:bar"), + Scope: pointer.Ptr("foo:bar"), }, }, batchCalls: 5, @@ -296,7 +290,8 @@ func TestValidateExternalMetricsBatching(t *testing.T) { desc: "Overspilling queries", in: lambdaMakeChunks(20, custommetrics.ExternalMetricValue{ MetricName: randStringRune(4000), - Labels: map[string]string{"foo": "bar"}}), + Labels: map[string]string{"foo": "bar"}, + }), out: []datadog.Series{ { Metric: &metricName, @@ -305,7 +300,7 @@ func TestValidateExternalMetricsBatching(t *testing.T) { makePoints(penTime, 14), // Force the penultimate point to be considered fresh at all time(< externalMaxAge) makePoints(0, 27), }, - Scope: makePtr("foo:bar"), + Scope: pointer.Ptr("foo:bar"), }, }, batchCalls: 21, @@ -316,7 +311,8 @@ func TestValidateExternalMetricsBatching(t *testing.T) { desc: "Overspilling single query", in: lambdaMakeChunks(0, custommetrics.ExternalMetricValue{ MetricName: randStringRune(7000), - Labels: map[string]string{"foo": "bar"}}), + Labels: map[string]string{"foo": "bar"}, + }), out: []datadog.Series{ { Metric: &metricName, @@ -325,7 +321,7 @@ func TestValidateExternalMetricsBatching(t *testing.T) { makePoints(penTime, 14), // Force the penultimate point to be considered fresh at all time(< externalMaxAge) makePoints(0, 27), }, - Scope: makePtr("foo:bar"), + Scope: pointer.Ptr("foo:bar"), }, }, batchCalls: 0, @@ -336,7 +332,8 @@ func TestValidateExternalMetricsBatching(t *testing.T) { desc: "several batches, one error", in: lambdaMakeChunks(158, custommetrics.ExternalMetricValue{ MetricName: "foo", - Labels: map[string]string{"foo": "bar"}}), + Labels: map[string]string{"foo": "bar"}, + }), out: []datadog.Series{ { Metric: &metricName, @@ -345,7 +342,7 @@ func TestValidateExternalMetricsBatching(t *testing.T) { makePoints(penTime, 14), // Force the penultimate point to be considered fresh at all time(< externalMaxAge) makePoints(0, 27), }, - Scope: makePtr("foo:bar"), + Scope: pointer.Ptr("foo:bar"), }, }, batchCalls: 5, @@ -389,7 +386,7 @@ func TestValidateExternalMetricsBatching(t *testing.T) { } p := &Processor{datadogClient: datadogClient} - _, err := p.QueryExternalMetric(tt.in) + _, err := p.QueryExternalMetric(tt.in, 0) if err != nil || tt.err != nil { assert.Contains(t, err.Error(), tt.err.Error()) } diff --git a/pkg/util/kubernetes/clustername/clustername.go b/pkg/util/kubernetes/clustername/clustername.go index 4d8138c77af1a..dbc7af9df2457 100644 --- a/pkg/util/kubernetes/clustername/clustername.go +++ b/pkg/util/kubernetes/clustername/clustername.go @@ -120,8 +120,11 @@ func getClusterName(ctx context.Context, data *clusterNameData, hostname string) } } if len(clusterName) > 0 { - log.Infof("Using cluster name %s from the node label", clusterName) - data.clusterName = clusterName + if !IsRFC1123CompliantClusterName(clusterName) { + log.Warnf("Cluster name \"%s\" is not RFC 1123 compliant, it will be converted, ", clusterName) + } + data.clusterName = MakeClusterNameRFC1123Compliant(clusterName) + log.Infof("Using cluster name %s from the node label", data.clusterName) } } @@ -143,6 +146,24 @@ func GetClusterName(ctx context.Context, hostname string) string { return getClusterName(ctx, defaultClusterNameData, hostname) } +// GetClusterNameTagValue a k8s cluster name if it exists, either directly specified or autodiscovered +// +// This function also "normalize" the k8s cluster name if the configuration option +// "enabled_rfc1123_compliant_cluster_name_tag" is set to "true" +// this allow to limit the risk of breaking user that currently rely on previous `kube_cluster_name` tag value. +func GetClusterNameTagValue(ctx context.Context, hostname string) string { + if config.Datadog.GetBool("enabled_rfc1123_compliant_cluster_name_tag") { + return GetRFC1123CompliantClusterName(ctx, hostname) + } + return GetClusterName(ctx, hostname) +} + +// IsRFC1123CompliantClusterName check if the clusterName is RFC1123 compliant +// return false if not compliant +func IsRFC1123CompliantClusterName(clusterName string) bool { + return !strings.Contains(clusterName, "_") +} + // GetRFC1123CompliantClusterName returns an RFC-1123 compliant k8s cluster // name if it exists, either directly specified or autodiscovered func GetRFC1123CompliantClusterName(ctx context.Context, hostname string) string { diff --git a/pkg/util/log/go.mod b/pkg/util/log/go.mod index 29c4792fa5a48..49b7bba958f78 100644 --- a/pkg/util/log/go.mod +++ b/pkg/util/log/go.mod @@ -5,7 +5,7 @@ go 1.18 replace github.com/DataDog/datadog-agent/pkg/util/scrubber => ../scrubber require ( - github.com/DataDog/datadog-agent/pkg/util/scrubber v0.42.0-rc.3 + github.com/DataDog/datadog-agent/pkg/util/scrubber v0.43.0-rc.3 github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 github.com/stretchr/testify v1.8.1 go.uber.org/zap v1.22.0 diff --git a/pkg/util/log/log.go b/pkg/util/log/log.go index ee7b5ddea174c..c486cf1dca796 100644 --- a/pkg/util/log/log.go +++ b/pkg/util/log/log.go @@ -7,7 +7,7 @@ // supports logging to multiple destinations, buffering messages logged before // setup, and scrubbing secrets from log messages. // -// Compatibility +// # Compatibility // // This module is exported and can be used outside of the datadog-agent // repository, but is not designed as a general-purpose logging system. Its diff --git a/pkg/util/pointer/go.mod b/pkg/util/pointer/go.mod new file mode 100644 index 0000000000000..5de5b8f194210 --- /dev/null +++ b/pkg/util/pointer/go.mod @@ -0,0 +1,3 @@ +module github.com/DataDog/datadog-agent/pkg/util/pointer + +go 1.18 diff --git a/pkg/util/pointer/go.sum b/pkg/util/pointer/go.sum new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/pkg/util/pointer/pointer.go b/pkg/util/pointer/pointer.go index ee1f86d2efbe5..1d65f4e6efe2f 100644 --- a/pkg/util/pointer/pointer.go +++ b/pkg/util/pointer/pointer.go @@ -5,44 +5,11 @@ package pointer -// Int64Ptr returns a pointer from a value. It will allocate a new heap object for it. -func Int64Ptr(v int64) *int64 { +// Ptr returns a pointer from a value. It will allocate a new heap object for it. +func Ptr[T any](v T) *T { return &v } -// UInt16Ptr returns a pointer from a value. It will allocate a new heap object for it. -func UInt16Ptr(v uint16) *uint16 { - return &v -} - -// UInt64Ptr returns a pointer from a value. It will allocate a new heap object for it. -func UInt64Ptr(v uint64) *uint64 { - return &v -} - -// UInt32Ptr returns a pointer from a value. It will allocate a new heap object for it. -func UInt32Ptr(v int64) *uint32 { - vUInt32 := uint32(v) - return &vUInt32 -} - -// Float64Ptr returns a pointer from a value. It will allocate a new heap object for it. -func Float64Ptr(v float64) *float64 { - return &v -} - -// IntToFloatPtr converts a int64 value to float64 and returns a pointer. -func IntToFloatPtr(u int64) *float64 { - f := float64(u) - return &f -} - -// UIntToFloatPtr converts a uint64 value to float64 and returns a pointer. -func UIntToFloatPtr(u uint64) *float64 { - f := float64(u) - return &f -} - // UIntPtrToFloatPtr converts a uint64 value to float64 and returns a pointer. func UIntPtrToFloatPtr(u *uint64) *float64 { if u == nil { @@ -52,8 +19,3 @@ func UIntPtrToFloatPtr(u *uint64) *float64 { f := float64(*u) return &f } - -// BoolPtr returns a pointer from a value. It will allocate a new heap object for it. -func BoolPtr(b bool) *bool { - return &b -} diff --git a/pkg/util/profiling/profiling.go b/pkg/util/profiling/profiling.go index a5fa0617755c3..95e9920c83cf6 100644 --- a/pkg/util/profiling/profiling.go +++ b/pkg/util/profiling/profiling.go @@ -48,6 +48,7 @@ func Start(settings Settings) error { profiler.WithPeriod(settings.Period), profiler.WithProfileTypes(types...), profiler.CPUDuration(settings.CPUDuration), + profiler.WithDeltaProfiles(settings.WithDeltaProfiles), profiler.WithTags(settings.Tags...), } diff --git a/pkg/util/profiling/profiling_test.go b/pkg/util/profiling/profiling_test.go index 5d26236bf5599..1e552f5e5fa4c 100644 --- a/pkg/util/profiling/profiling_test.go +++ b/pkg/util/profiling/profiling_test.go @@ -22,6 +22,7 @@ func TestProfiling(t *testing.T) { MutexProfileFraction: 0, BlockProfileRate: 0, WithGoroutineProfile: false, + WithDeltaProfiles: false, Tags: []string{"1.0.0"}, } err := Start(settings) diff --git a/pkg/util/profiling/settings.go b/pkg/util/profiling/settings.go index 806fcff8dfe5e..679e3eff9580d 100644 --- a/pkg/util/profiling/settings.go +++ b/pkg/util/profiling/settings.go @@ -33,12 +33,14 @@ type Settings struct { BlockProfileRate int // WithGoroutineProfile additionally reports stack traces of all current goroutines WithGoroutineProfile bool + // WithDeltaProfiles specifies if delta profiles are enabled + WithDeltaProfiles bool // Tags are the additional tags to attach to profiles. Tags []string } func (settings *Settings) String() string { - return fmt.Sprintf("[Target:%q][Env:%q][Period:%s][CPU:%s][Mutex:%d][Block:%d][Routines:%v]", + return fmt.Sprintf("[Target:%q][Env:%q][Period:%s][CPU:%s][Mutex:%d][Block:%d][Routines:%v][DeltaProfiles:%v]", settings.ProfilingURL, settings.Env, settings.Period, @@ -46,6 +48,7 @@ func (settings *Settings) String() string { settings.MutexProfileFraction, settings.BlockProfileRate, settings.WithGoroutineProfile, + settings.WithDeltaProfiles, ) } diff --git a/pkg/util/scrubber/scrubber.go b/pkg/util/scrubber/scrubber.go index 4274e348b772b..6ccad606a7be0 100644 --- a/pkg/util/scrubber/scrubber.go +++ b/pkg/util/scrubber/scrubber.go @@ -6,7 +6,7 @@ // Package scrubber implements support for cleaning sensitive information out of strings // and files. // -// Compatibility +// # Compatibility // // This module's API is not yet stable, and may change incompatibly from version to version. package scrubber diff --git a/pkg/util/static_tags.go b/pkg/util/static_tags.go index 4612ad64df23d..00f4e59d38912 100644 --- a/pkg/util/static_tags.go +++ b/pkg/util/static_tags.go @@ -56,7 +56,7 @@ func GetStaticTagsSlice(ctx context.Context) []string { if found { log.Infof("'%s' was set manually via DD_TAGS, not changing it", clusterTagNamePrefix+tag) } else { - cluster := clustername.GetClusterName(ctx, "") + cluster := clustername.GetClusterNameTagValue(ctx, "") if cluster == "" { log.Infof("Couldn't build the %q.. tag, DD_CLUSTER_NAME can be used to set it", clusterTagNamePrefix) } else { diff --git a/pkg/util/stats_tracker.go b/pkg/util/stats_tracker.go index 1e3e38f8e0494..b462ada3102e7 100644 --- a/pkg/util/stats_tracker.go +++ b/pkg/util/stats_tracker.go @@ -6,6 +6,7 @@ package util import ( + "fmt" "sync" "time" ) @@ -161,3 +162,21 @@ func (s *StatsTracker) dropOldPoints(now int64) { s.peakPointsHead = nil } } + +func (s *StatsTracker) InfoKey() string { + return "Pipeline Latency" +} + +func (s *StatsTracker) Info() []string { + AllTimeAvgLatency := s.AllTimeAvg() / int64(time.Millisecond) + AllTimePeakLatency := s.AllTimePeak() / int64(time.Millisecond) + RecentAvgLatency := s.MovingAvg() / int64(time.Millisecond) + RecentPeakLatency := s.MovingPeak() / int64(time.Millisecond) + + return []string{ + fmt.Sprintf("Average Latency (ms): %d", RecentAvgLatency), + fmt.Sprintf("24h Average Latency (ms): %d", AllTimeAvgLatency), + fmt.Sprintf("Peak Latency (ms): %d", RecentPeakLatency), + fmt.Sprintf("24h Peak Latency (ms): %d", AllTimePeakLatency), + } +} diff --git a/pkg/util/subscriptions/doc.go b/pkg/util/subscriptions/doc.go index 8a08e5ce2b2c1..5f2d5bb2e260b 100644 --- a/pkg/util/subscriptions/doc.go +++ b/pkg/util/subscriptions/doc.go @@ -16,7 +16,7 @@ // See the components documentation (doc/components) for more detailed usage // information. // -// Warning +// # Warning // // This package is not intended for high-bandwidth messaging such as metric // samples. It use should be limited to events that occur on a per-second diff --git a/pkg/util/system/namespace_linux.go b/pkg/util/system/namespace_linux.go index 5c9e4cf5e706b..14e16e3abf104 100644 --- a/pkg/util/system/namespace_linux.go +++ b/pkg/util/system/namespace_linux.go @@ -59,5 +59,5 @@ func IsProcessHostNetwork(procPath string, namespaceID uint64) *bool { // IsProcessHostUTSNamespace compares namespaceID with known, harcoded host PID Namespace inode // Keeps same signature as `IsProcessHostNetwork` as we may need to change implementation depending on Kernel evolution func IsProcessHostUTSNamespace(procPath string, namespaceID uint64) *bool { - return pointer.BoolPtr(namespaceID == hostUTSNamespecInode) + return pointer.Ptr(namespaceID == hostUTSNamespecInode) } diff --git a/pkg/util/system/network_linux.go b/pkg/util/system/network_linux.go index 7a8bd8f759667..4b6abbdbfc692 100644 --- a/pkg/util/system/network_linux.go +++ b/pkg/util/system/network_linux.go @@ -94,6 +94,7 @@ func GetDefaultGateway(procPath string) (net.IP, error) { // addresses found. The result does not contain duplicate IPs. // // Here's an example of /proc//net/fib_trie that shows its format: +// // Main: // +-- 0.0.0.0/1 2 0 2 // +-- 0.0.0.0/4 2 0 2 diff --git a/pkg/util/system/network_windows.go b/pkg/util/system/network_windows.go index babc42b73ece4..5272f6519935a 100644 --- a/pkg/util/system/network_windows.go +++ b/pkg/util/system/network_windows.go @@ -59,31 +59,40 @@ func GetDefaultGateway(procPath string) (net.IP, error) { // Output from route print 0.0.0.0: // // λ route print 0.0.0.0 -//=========================================================================== -//Interface List +// =========================================================================== +// Interface List // 17...00 1c 42 86 10 92 ......Intel(R) 82574L Gigabit Network Connection // 16...bc 9a 78 56 34 12 ......Bluetooth Device (Personal Area Network) -// 1...........................Software Loopback Interface 1 +// +// 1...........................Software Loopback Interface 1 +// // 24...00 15 5d 2c 6f c0 ......Hyper-V Virtual Ethernet Adapter #2 -//=========================================================================== +// =========================================================================== +// +// IPv4 Route Table +// =========================================================================== +// Active Routes: +// Network Destination Netmask Gateway Interface Metric +// +// 0.0.0.0 0.0.0.0 10.211.55.1 10.211.55.4 25 +// +// =========================================================================== +// Persistent Routes: +// +// Network Address Netmask Gateway Address Metric +// 0.0.0.0 0.0.0.0 172.21.96.1 Default +// +// =========================================================================== +// +// IPv6 Route Table +// =========================================================================== +// Active Routes: +// +// None // -//IPv4 Route Table -//=========================================================================== -//Active Routes: -//Network Destination Netmask Gateway Interface Metric -// 0.0.0.0 0.0.0.0 10.211.55.1 10.211.55.4 25 -//=========================================================================== -//Persistent Routes: -// Network Address Netmask Gateway Address Metric -// 0.0.0.0 0.0.0.0 172.21.96.1 Default -//=========================================================================== +// Persistent Routes: // -//IPv6 Route Table -//=========================================================================== -//Active Routes: -// None -//Persistent Routes: -// None +// None // // We are interested in the Gateway and Interface fields of the Active Routes, // so this method returns any line that has 5 fields with the first one being diff --git a/pkg/util/trivy/collector.go b/pkg/util/trivy/collector.go new file mode 100644 index 0000000000000..0a7f47bdc09b0 --- /dev/null +++ b/pkg/util/trivy/collector.go @@ -0,0 +1,21 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package trivy + +import ( + "context" + + "github.com/DataDog/datadog-agent/pkg/workloadmeta" + + cyclonedxgo "github.com/CycloneDX/cyclonedx-go" + "github.com/containerd/containerd" +) + +// Collector interface +type Collector interface { + ScanContainerdImage(ctx context.Context, imageMeta *workloadmeta.ContainerImageMetadata, img containerd.Image) (*cyclonedxgo.BOM, error) + ScanContainerdImageFromFilesystem(ctx context.Context, imgMeta *workloadmeta.ContainerImageMetadata, img containerd.Image) (*cyclonedxgo.BOM, error) +} diff --git a/pkg/util/trivy/containerd.go b/pkg/util/trivy/containerd.go new file mode 100644 index 0000000000000..68acdc5016363 --- /dev/null +++ b/pkg/util/trivy/containerd.go @@ -0,0 +1,177 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build trivy +// +build trivy + +package trivy + +import ( + "context" + "encoding/json" + "io" + "os" + "strings" + "time" + + "github.com/DataDog/datadog-agent/pkg/workloadmeta" + "github.com/aquasecurity/trivy/pkg/fanal/types" + "github.com/containerd/containerd" + "github.com/containerd/containerd/content" + "github.com/containerd/containerd/images/archive" + "github.com/containerd/containerd/namespaces" + "github.com/containerd/containerd/platforms" + refdocker "github.com/containerd/containerd/reference/docker" + api "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" + "github.com/docker/go-connections/nat" + v1 "github.com/google/go-containerregistry/pkg/v1" + "github.com/opencontainers/go-digest" + ocispec "github.com/opencontainers/image-spec/specs-go/v1" + "github.com/samber/lo" + "golang.org/x/xerrors" +) + +// Code ported from https://github.com/aquasecurity/trivy/blob/2206e008ea6e5f4e5c1aa7bc8fc77dae7041de6a/pkg/fanal/image/daemon/containerd.go +type familiarNamed string + +func (n familiarNamed) Name() string { + return strings.Split(string(n), ":")[0] +} + +func (n familiarNamed) Tag() string { + s := strings.Split(string(n), ":") + if len(s) < 2 { + return "" + } + + return s[1] +} + +func (n familiarNamed) String() string { + return string(n) +} + +// Code ported from https://github.com/aquasecurity/trivy/blob/2206e008ea6e5f4e5c1aa7bc8fc77dae7041de6a/pkg/fanal/image/daemon/containerd.go +func imageWriter(client *containerd.Client, img containerd.Image) imageSave { + return func(ctx context.Context, ref []string) (io.ReadCloser, error) { + if len(ref) < 1 { + return nil, xerrors.New("no image reference") + } + imgOpts := archive.WithImage(client.ImageService(), ref[0]) + manifestOpts := archive.WithManifest(img.Target()) + platOpts := archive.WithPlatform(platforms.DefaultStrict()) + pr, pw := io.Pipe() + go func() { + pw.CloseWithError(archive.Export(ctx, client.ContentStore(), pw, imgOpts, manifestOpts, platOpts)) + }() + return pr, nil + } +} + +// Custom code based on https://github.com/aquasecurity/trivy/blob/2206e008ea6e5f4e5c1aa7bc8fc77dae7041de6a/pkg/fanal/image/daemon/containerd.go `ContainerdImage` +func convertContainerdImage(ctx context.Context, client *containerd.Client, imgMeta *workloadmeta.ContainerImageMetadata, img containerd.Image) (types.Image, func(), error) { + ctx = namespaces.WithNamespace(ctx, imgMeta.Namespace) + cleanup := func() {} + + f, err := os.CreateTemp("", "fanal-containerd-*") + if err != nil { + return nil, cleanup, xerrors.Errorf("failed to create a temporary file: %w", err) + } + + cleanup = func() { + _ = f.Close() + _ = os.Remove(f.Name()) + } + + insp, history, ref, err := inspect(ctx, imgMeta, img) + if err != nil { + return nil, cleanup, xerrors.Errorf("inspect error: %w", err) // Note: the original code doesn't return "cleanup". + } + + return &image{ + name: img.Name(), + opener: imageOpener(ctx, ref.String(), f, imageWriter(client, img)), + inspect: insp, + history: history, + }, cleanup, nil +} + +// readImageConfig reads the config spec (`application/vnd.oci.image.config.v1+json`) for img.platform from content store. +// ported from https://github.com/aquasecurity/trivy/blob/2206e008ea6e5f4e5c1aa7bc8fc77dae7041de6a/pkg/fanal/image/daemon/containerd.go +func readImageConfig(ctx context.Context, img containerd.Image) (ocispec.Image, ocispec.Descriptor, error) { + var config ocispec.Image + + configDesc, err := img.Config(ctx) // aware of img.platform + if err != nil { + return config, configDesc, err + } + p, err := content.ReadBlob(ctx, img.ContentStore(), configDesc) + if err != nil { + return config, configDesc, err + } + if err = json.Unmarshal(p, &config); err != nil { + return config, configDesc, err + } + return config, configDesc, nil +} + +// ported from https://github.com/aquasecurity/trivy/blob/2206e008ea6e5f4e5c1aa7bc8fc77dae7041de6a/pkg/fanal/image/daemon/containerd.go +func inspect(ctx context.Context, imgMeta *workloadmeta.ContainerImageMetadata, img containerd.Image) (api.ImageInspect, []v1.History, refdocker.Reference, error) { + ref := familiarNamed(img.Name()) + + imgConfig, imgConfigDesc, err := readImageConfig(ctx, img) + if err != nil { + return api.ImageInspect{}, nil, nil, err + } + + var lastHistory ocispec.History + if len(imgConfig.History) > 0 { + lastHistory = imgConfig.History[len(imgConfig.History)-1] + } + + var history []v1.History + for _, h := range imgConfig.History { + history = append(history, v1.History{ + Author: h.Author, + Created: v1.Time{Time: *h.Created}, + CreatedBy: h.CreatedBy, + Comment: h.Comment, + EmptyLayer: h.EmptyLayer, + }) + } + + portSet := make(nat.PortSet) + for k := range imgConfig.Config.ExposedPorts { + portSet[nat.Port(k)] = struct{}{} + } + + return api.ImageInspect{ + ID: imgConfigDesc.Digest.String(), + RepoTags: imgMeta.RepoTags, + RepoDigests: imgMeta.RepoDigests, + Comment: lastHistory.Comment, + Created: lastHistory.Created.Format(time.RFC3339Nano), + Author: lastHistory.Author, + Config: &container.Config{ + User: imgConfig.Config.User, + ExposedPorts: portSet, + Env: imgConfig.Config.Env, + Cmd: imgConfig.Config.Cmd, + Volumes: imgConfig.Config.Volumes, + WorkingDir: imgConfig.Config.WorkingDir, + Entrypoint: imgConfig.Config.Entrypoint, + Labels: imgConfig.Config.Labels, + }, + Architecture: imgConfig.Architecture, + Os: imgConfig.OS, + RootFS: api.RootFS{ + Type: imgConfig.RootFS.Type, + Layers: lo.Map(imgConfig.RootFS.DiffIDs, func(d digest.Digest, _ int) string { + return d.String() + }), + }, + }, history, ref, nil +} diff --git a/pkg/util/trivy/image.go b/pkg/util/trivy/image.go new file mode 100644 index 0000000000000..4da6de0c13c9e --- /dev/null +++ b/pkg/util/trivy/image.go @@ -0,0 +1,235 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +// Imported from https://github.com/aquasecurity/trivy/blob/main/pkg/fanal/image/daemon/image.go + +//go:build trivy +// +build trivy + +package trivy + +import ( + "context" + "io" + "os" + "sync" + "time" + + fimage "github.com/aquasecurity/trivy/pkg/fanal/image" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" + v1 "github.com/google/go-containerregistry/pkg/v1" + "github.com/google/go-containerregistry/pkg/v1/tarball" + "github.com/samber/lo" + "golang.org/x/xerrors" +) + +var mu sync.Mutex + +type opener func() (v1.Image, error) + +type imageSave func(context.Context, []string) (io.ReadCloser, error) + +func imageOpener(ctx context.Context, ref string, f *os.File, imageSave imageSave) opener { + return func() (v1.Image, error) { + // Store the tarball in local filesystem and return a new reader into the bytes each time we need to access something. + rc, err := imageSave(ctx, []string{ref}) + if err != nil { + return nil, xerrors.Errorf("unable to export the image: %w", err) + } + defer rc.Close() + + if _, err = io.Copy(f, rc); err != nil { + return nil, xerrors.Errorf("failed to copy the image: %w", err) + } + defer f.Close() + + img, err := tarball.ImageFromPath(f.Name(), nil) + if err != nil { + return nil, xerrors.Errorf("failed to initialize the struct from the temporary file: %w", err) + } + + return img, nil + } +} + +// image is a wrapper for github.com/google/go-containerregistry/pkg/v1/daemon.Image +// daemon.Image loads the entire image into the memory at first, +// but it doesn't need to load it if the information is already in the cache, +// To avoid entire loading, this wrapper uses ImageInspectWithRaw and checks image ID and layer IDs. +type image struct { + v1.Image + name string + opener opener + inspect types.ImageInspect + history []v1.History +} + +// populateImage initializes an "image" struct. +// This method is called by some goroutines at the same time. +// To prevent multiple heavy initializations, the lock is necessary. +func (img *image) populateImage() (err error) { + mu.Lock() + defer mu.Unlock() + + // img.Image is already initialized, so we don't have to do it again. + if img.Image != nil { + return nil + } + + img.Image, err = img.opener() + if err != nil { + return xerrors.Errorf("unable to open: %w", err) + } + + return nil +} + +func (img *image) ConfigName() (v1.Hash, error) { + return v1.NewHash(img.inspect.ID) +} + +func (img *image) ConfigFile() (*v1.ConfigFile, error) { + if len(img.inspect.RootFS.Layers) == 0 { + // Podman doesn't return RootFS... + return img.configFile() + } + + nonEmptyLayerCount := lo.CountBy(img.history, func(history v1.History) bool { + return !history.EmptyLayer + }) + + if len(img.inspect.RootFS.Layers) != nonEmptyLayerCount { + // In cases where empty layers are not correctly determined from the history API. + // There are some edge cases where we cannot guess empty layers well. + return img.configFile() + } + + diffIDs, err := img.diffIDs() + if err != nil { + return nil, xerrors.Errorf("unable to get diff IDs: %w", err) + } + + created, err := time.Parse(time.RFC3339Nano, img.inspect.Created) + if err != nil { + return nil, xerrors.Errorf("failed parsing created %s: %w", img.inspect.Created, err) + } + + return &v1.ConfigFile{ + Architecture: img.inspect.Architecture, + Author: img.inspect.Author, + Container: img.inspect.Container, + Created: v1.Time{Time: created}, + DockerVersion: img.inspect.DockerVersion, + Config: img.imageConfig(img.inspect.Config), + History: img.history, + OS: img.inspect.Os, + RootFS: v1.RootFS{ + Type: img.inspect.RootFS.Type, + DiffIDs: diffIDs, + }, + }, nil +} + +func (img *image) configFile() (*v1.ConfigFile, error) { + // Need to fall back into expensive operations like "docker save" + // because the config file cannot be generated properly from container engine API for some reason. + if err := img.populateImage(); err != nil { + return nil, xerrors.Errorf("unable to populate: %w", err) + } + return img.Image.ConfigFile() +} + +func (img *image) LayerByDiffID(h v1.Hash) (v1.Layer, error) { + if err := img.populateImage(); err != nil { + return nil, xerrors.Errorf("unable to populate: %w", err) + } + return img.Image.LayerByDiffID(h) +} + +func (img *image) RawConfigFile() ([]byte, error) { + if err := img.populateImage(); err != nil { + return nil, xerrors.Errorf("unable to populate: %w", err) + } + return img.Image.RawConfigFile() +} + +func (img *image) RepoTags() []string { + return img.inspect.RepoTags +} + +func (img *image) RepoDigests() []string { + return img.inspect.RepoDigests +} + +func (img *image) diffIDs() ([]v1.Hash, error) { + var diffIDs []v1.Hash + for _, l := range img.inspect.RootFS.Layers { + h, err := v1.NewHash(l) + if err != nil { + return nil, xerrors.Errorf("invalid hash %s: %w", l, err) + } + diffIDs = append(diffIDs, h) + } + return diffIDs, nil +} + +func (img *image) imageConfig(config *container.Config) v1.Config { + if config == nil { + return v1.Config{} + } + + c := v1.Config{ + AttachStderr: config.AttachStderr, + AttachStdin: config.AttachStdin, + AttachStdout: config.AttachStdout, + Cmd: config.Cmd, + Domainname: config.Domainname, + Entrypoint: config.Entrypoint, + Env: config.Env, + Hostname: config.Hostname, + Image: config.Image, + Labels: config.Labels, + OnBuild: config.OnBuild, + OpenStdin: config.OpenStdin, + StdinOnce: config.StdinOnce, + Tty: config.Tty, + User: config.User, + Volumes: config.Volumes, + WorkingDir: config.WorkingDir, + ArgsEscaped: config.ArgsEscaped, + NetworkDisabled: config.NetworkDisabled, + MacAddress: config.MacAddress, + StopSignal: config.StopSignal, + Shell: config.Shell, + } + + if config.Healthcheck != nil { + c.Healthcheck = &v1.HealthConfig{ + Test: config.Healthcheck.Test, + Interval: config.Healthcheck.Interval, + Timeout: config.Healthcheck.Timeout, + StartPeriod: config.Healthcheck.StartPeriod, + Retries: config.Healthcheck.Retries, + } + } + + if len(config.ExposedPorts) > 0 { + c.ExposedPorts = map[string]struct{}{} + for port := range c.ExposedPorts { + c.ExposedPorts[port] = struct{}{} + } + } + + return c +} + +func (img *image) Name() string { + return img.name +} + +func (img *image) ID() (string, error) { + return fimage.ID(img) +} diff --git a/pkg/util/trivy/trivy.go b/pkg/util/trivy/trivy.go new file mode 100644 index 0000000000000..e46ac50170b89 --- /dev/null +++ b/pkg/util/trivy/trivy.go @@ -0,0 +1,237 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build trivy +// +build trivy + +package trivy + +import ( + "context" + "fmt" + "os" + "sort" + "time" + + containerdUtil "github.com/DataDog/datadog-agent/pkg/util/containerd" + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" + + cyclonedxgo "github.com/CycloneDX/cyclonedx-go" + "github.com/aquasecurity/trivy-db/pkg/db" + "github.com/aquasecurity/trivy/pkg/commands/operation" + "github.com/aquasecurity/trivy/pkg/detector/ospkg" + "github.com/aquasecurity/trivy/pkg/fanal/analyzer" + "github.com/aquasecurity/trivy/pkg/fanal/applier" + "github.com/aquasecurity/trivy/pkg/fanal/artifact" + image2 "github.com/aquasecurity/trivy/pkg/fanal/artifact/image" + local2 "github.com/aquasecurity/trivy/pkg/fanal/artifact/local" + "github.com/aquasecurity/trivy/pkg/fanal/cache" + ftypes "github.com/aquasecurity/trivy/pkg/fanal/types" + "github.com/aquasecurity/trivy/pkg/flag" + "github.com/aquasecurity/trivy/pkg/sbom/cyclonedx" + "github.com/aquasecurity/trivy/pkg/scanner" + "github.com/aquasecurity/trivy/pkg/scanner/local" + "github.com/aquasecurity/trivy/pkg/types" + "github.com/aquasecurity/trivy/pkg/vulnerability" + "github.com/containerd/containerd" +) + +const ( + cleanupTimeout = 30 * time.Second + OSAnalyzers = "os" + LanguagesAnalyzers = "languages" + SecretAnalyzers = "secret" + ConfigFileAnalyzers = "config" + LicenseAnalyzers = "license" +) + +// CollectorConfig allows to pass configuration +type CollectorConfig struct { + ArtifactCache cache.ArtifactCache + LocalArtifactCache cache.LocalArtifactCache + ArtifactOption artifact.Option + + ContainerdAccessor func() (containerdUtil.ContainerdItf, error) +} + +// Collector uses trivy to generate a SBOM +type collector struct { + config CollectorConfig + applier local.Applier + detector local.OspkgDetector + dbConfig db.Config + vulnClient vulnerability.Client + marshaler *cyclonedx.Marshaler +} + +// DefaultCollectorConfig returns a default collector configuration +// However, accessors still need to be filled in externally +func DefaultCollectorConfig(enabledAnalyzers []string) (CollectorConfig, error) { + cache, err := operation.NewCache(flag.CacheOptions{CacheBackend: "fs"}) + if err != nil { + return CollectorConfig{}, err + } + + collectorConfig := CollectorConfig{ + ArtifactCache: cache, + LocalArtifactCache: cache, + ArtifactOption: artifact.Option{ + Offline: true, + NoProgress: true, + DisabledAnalyzers: DefaultDisabledCollectors(enabledAnalyzers), + Slow: true, + SBOMSources: []string{}, + DisabledHandlers: DefaultDisabledHandlers(), + }, + } + + if len(enabledAnalyzers) == 1 && enabledAnalyzers[0] == OSAnalyzers { + collectorConfig.ArtifactOption.OnlyDirs = []string{"/etc", "/var/lib/dpkg", "/var/lib/rpm", "/lib/apk"} + } + + return collectorConfig, nil +} + +func DefaultDisabledCollectors(enabledAnalyzers []string) []analyzer.Type { + sort.Strings(enabledAnalyzers) + analyzersDisabled := func(analyzers string) bool { + index := sort.SearchStrings(enabledAnalyzers, analyzers) + return index >= len(enabledAnalyzers) || enabledAnalyzers[index] != analyzers + } + + var disabledAnalyzers []analyzer.Type + if analyzersDisabled(OSAnalyzers) { + disabledAnalyzers = append(disabledAnalyzers, analyzer.TypeOSes...) + } + if analyzersDisabled(LanguagesAnalyzers) { + disabledAnalyzers = append(disabledAnalyzers, analyzer.TypeLanguages...) + } + if analyzersDisabled(SecretAnalyzers) { + disabledAnalyzers = append(disabledAnalyzers, analyzer.TypeSecret) + } + if analyzersDisabled(ConfigFileAnalyzers) { + disabledAnalyzers = append(disabledAnalyzers, analyzer.TypeConfigFiles...) + } + if analyzersDisabled(LicenseAnalyzers) { + disabledAnalyzers = append(disabledAnalyzers, analyzer.TypeLicenseFile) + } + + return disabledAnalyzers +} + +func DefaultDisabledHandlers() []ftypes.HandlerType { + return []ftypes.HandlerType{ftypes.UnpackagedPostHandler} +} + +func NewCollector(collectorConfig CollectorConfig) (Collector, error) { + dbConfig := db.Config{} + + return &collector{ + config: collectorConfig, + applier: applier.NewApplier(collectorConfig.LocalArtifactCache), + detector: ospkg.Detector{}, + dbConfig: dbConfig, + vulnClient: vulnerability.NewClient(dbConfig), + marshaler: cyclonedx.NewMarshaler(""), + }, nil +} + +func (c *collector) ScanContainerdImage(ctx context.Context, imgMeta *workloadmeta.ContainerImageMetadata, img containerd.Image) (*cyclonedxgo.BOM, error) { + client, err := c.config.ContainerdAccessor() + if err != nil { + return nil, fmt.Errorf("unable to access containerd client, err: %w", err) + } + + fanalImage, cleanup, err := convertContainerdImage(ctx, client.RawClient(), imgMeta, img) + if cleanup != nil { + defer cleanup() + } + if err != nil { + return nil, fmt.Errorf("unable to convert containerd image, err: %w", err) + } + + imageArtifact, err := image2.NewArtifact(fanalImage, c.config.ArtifactCache, c.config.ArtifactOption) + if err != nil { + return nil, fmt.Errorf("unable to create artifact from image, err: %w", err) + } + + bom, err := c.scan(ctx, imageArtifact) + if err != nil { + return nil, fmt.Errorf("unable to marshal report to sbom format, err: %w", err) + } + + return bom, nil +} + +func (c *collector) ScanContainerdImageFromFilesystem(ctx context.Context, imgMeta *workloadmeta.ContainerImageMetadata, img containerd.Image) (*cyclonedxgo.BOM, error) { + client, err := c.config.ContainerdAccessor() + if err != nil { + return nil, fmt.Errorf("unable to access containerd client, err: %w", err) + } + + imagePath, err := os.MkdirTemp(os.TempDir(), fmt.Sprintf("containerd-image-*")) + if err != nil { + return nil, fmt.Errorf("unable to create temp dir, err: %w", err) + } + defer func() { + err := os.RemoveAll(imagePath) + if err != nil { + log.Errorf("Unable to remove temp dir: %s, err: %v", imagePath, err) + } + }() + + // Computing duration of containerd lease + deadline, _ := ctx.Deadline() + expiration := deadline.Sub(time.Now().Add(cleanupTimeout)) + + cleanUp, err := client.MountImage(ctx, expiration, imgMeta.Namespace, img, imagePath) + if err != nil { + return nil, fmt.Errorf("unable to mount containerd image, err: %w", err) + } + + defer func() { + cleanUpContext, cleanUpContextCancel := context.WithTimeout(context.Background(), cleanupTimeout) + err := cleanUp(cleanUpContext) + cleanUpContextCancel() + if err != nil { + log.Errorf("Unable to clean up mounted image, err: %v", err) + } + }() + + fsArtifact, err := local2.NewArtifact(imagePath, c.config.ArtifactCache, c.config.ArtifactOption) + if err != nil { + return nil, fmt.Errorf("unable to create artifact from fs, err: %w", err) + } + + bom, err := c.scan(ctx, fsArtifact) + if err != nil { + return nil, fmt.Errorf("unable to marshal report to sbom format, err: %w", err) + } + + return bom, nil +} + +func (c *collector) scan(ctx context.Context, artifact artifact.Artifact) (*cyclonedxgo.BOM, error) { + s := scanner.NewScanner(local.NewScanner(c.applier, c.detector, c.vulnClient), artifact) + report, err := s.ScanArtifact(ctx, types.ScanOptions{ + VulnType: []string{}, + SecurityChecks: []string{}, + ScanRemovedPackages: false, + ListAllPackages: true, + }) + if err != nil { + return nil, err + } + + bom, err := c.marshaler.Marshal(report) + if err != nil { + return nil, err + } + + // We don't need the dependencies attribute. Remove to save memory. + bom.Dependencies = nil + return bom, nil +} diff --git a/pkg/util/winutil/etw/etw-utils.go b/pkg/util/winutil/etw/etw-utils.go index e0d263d2a5059..0ac1da69e6bdb 100644 --- a/pkg/util/winutil/etw/etw-utils.go +++ b/pkg/util/winutil/etw/etw-utils.go @@ -34,6 +34,7 @@ const EPOCH_DIFFERENCE_SECS uint64 = 116444736000000000 // Copied from github.com\DataDog\datadog-agent\pkg\network\http\http_stats.go // Note: cannot refer to it due to package circularity +// //nolint:deadcode const ( methodUnknown uint32 = iota @@ -48,6 +49,7 @@ const ( ) // From HTTP_VERB enumeration (http.h) +// //nolint:deadcode const ( httpVerbUnparsed uint32 = iota @@ -201,7 +203,9 @@ func bytesIndexOfDoubleZero(data []byte) int { } // From -// datadog-agent\pkg\util\winutil\winstrings.go +// +// datadog-agent\pkg\util\winutil\winstrings.go +// // ConvertWindowsString converts a windows c-string // into a go string. Even though the input is array // of uint8, the underlying data is expected to be diff --git a/pkg/util/winutil/pdhutil/pdh.go b/pkg/util/winutil/pdhutil/pdh.go index 0f6f045ebbba3..03828ce939daa 100644 --- a/pkg/util/winutil/pdhutil/pdh.go +++ b/pkg/util/winutil/pdhutil/pdh.go @@ -226,8 +226,10 @@ func PdhAddEnglishCounter(hQuery PDH_HQUERY, szFullCounterPath string, dwUserDat return uint32(ret) } -/* pdhCollectQueryData - Collects the current raw data value for all counters in the specified query and updates the status code of each counter. +/* + pdhCollectQueryData + Collects the current raw data value for all counters in the specified query and updates the status code of each counter. + Parameters hQuery [in, out] Handle of the query for which you want to collect data. The PdhOpenQuery function returns this handle. diff --git a/pkg/util/winutil/pdhutil/pdhcounter.go b/pkg/util/winutil/pdhutil/pdhcounter.go index 8f5726db1719e..a2aa737c3edd8 100644 --- a/pkg/util/winutil/pdhutil/pdhcounter.go +++ b/pkg/util/winutil/pdhutil/pdhcounter.go @@ -189,16 +189,16 @@ func (query *PdhQuery) AddCounter(counter PdhCounter) { // https://learn.microsoft.com/en-us/windows/win32/api/pdh/nf-pdh-pdhaddenglishcounterw // // Implementation detail: This function does not actually call the Windows API PdhAddEnglishCounter. That happens -// when (*PdhQuery).CollectQueryData calls AddToQuery. This function only links our pdhCounter struct -// to our PdhQuery struct. -// We do this so we can handle several PDH error cases and their recovery behind the scenes to reduce -// duplicate/error prone code in the checks that uses this package. -// For example, see tryRefreshPdhObjectCache(). -// This function cannot fail, if it does then the checks that use it will need to be -// restructured so that their Configure() call does not fail if the counter is not available -// right away on host boot (see https://github.com/DataDog/datadog-agent/pull/13101). -// All errors related to the counter are returned from the GetValue()/GetAllValues() function. // +// when (*PdhQuery).CollectQueryData calls AddToQuery. This function only links our pdhCounter struct +// to our PdhQuery struct. +// We do this so we can handle several PDH error cases and their recovery behind the scenes to reduce +// duplicate/error prone code in the checks that uses this package. +// For example, see tryRefreshPdhObjectCache(). +// This function cannot fail, if it does then the checks that use it will need to be +// restructured so that their Configure() call does not fail if the counter is not available +// right away on host boot (see https://github.com/DataDog/datadog-agent/pull/13101). +// All errors related to the counter are returned from the GetValue()/GetAllValues() function. func (query *PdhQuery) AddEnglishCounterInstance(objectName string, counterName string, instanceName string) PdhSingleInstanceCounter { var p PdhEnglishSingleInstanceCounter p.Initialize(objectName, counterName, instanceName) diff --git a/pkg/util/winutil/process.go b/pkg/util/winutil/process.go index e6601d2264365..af4b5f445eb58 100644 --- a/pkg/util/winutil/process.go +++ b/pkg/util/winutil/process.go @@ -363,3 +363,40 @@ func GetImagePathForProcess(h windows.Handle) (string, error) { } return "", lastErr } + +const ( + processQueryLimitedInformation = windows.PROCESS_QUERY_LIMITED_INFORMATION + + stillActive = windows.STATUS_PENDING +) + +// IsProcess checks to see if a given pid is currently valid in the process table +func IsProcess(pid int) bool { + h, err := windows.OpenProcess(processQueryLimitedInformation, false, uint32(pid)) + if err != nil { + return false + } + var c windows.NTStatus + err = windows.GetExitCodeProcess(h, (*uint32)(&c)) + windows.Close(h) + if err == nil { + return c == stillActive + } + return false +} + +func getProcessStartTimeAsNs(pid uint64) (uint64, error) { + h, err := windows.OpenProcess(processQueryLimitedInformation, false, uint32(pid)) + if err != nil { + return 0, fmt.Errorf("Error opening process %v", err) + } + var creation windows.Filetime + var exit windows.Filetime + var krn windows.Filetime + var user windows.Filetime + err = windows.GetProcessTimes(h, &creation, &exit, &krn, &user) + if err != nil { + return 0, err + } + return uint64(creation.Nanoseconds()), nil +} diff --git a/pkg/util/winutil/scmmonitor.go b/pkg/util/winutil/scmmonitor.go new file mode 100644 index 0000000000000..1afa4badceb18 --- /dev/null +++ b/pkg/util/winutil/scmmonitor.go @@ -0,0 +1,203 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. +//go:build windows +// +build windows + +package winutil + +import ( + "fmt" + "sync" + "unsafe" + + "golang.org/x/sys/windows" + "golang.org/x/sys/windows/svc/mgr" + + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +type ServiceInfo struct { + ServiceName []string + DisplayName []string +} + +// ServiceList is the return value from a query by pid. +type ServiceList struct { + essp []*windows.ENUM_SERVICE_STATUS_PROCESS + startTime uint64 +} + +// SCMMonitor is an object that allows the caller to monitor Windows services. +// The object will maintain a table of active services indexed by PID +type SCMMonitor struct { + mux sync.Mutex + pidToService map[uint64]*ServiceList + nonServicePid map[uint64]uint64 // start time of this pid + lastMapTime uint64 // ns since jan1 1970 + serviceRefreshes uint64 +} + +// GetServiceMonitor returns a service monitor object +func GetServiceMonitor() *SCMMonitor { + return &SCMMonitor{ + pidToService: make(map[uint64]*ServiceList), + nonServicePid: make(map[uint64]uint64), + } +} + +type StartTimeFunc func(uint64) (uint64, error) + +var pGetProcessStartTimeAsNs = StartTimeFunc(getProcessStartTimeAsNs) + +// GetRefreshCount returns the number of times we've actually queried +// the SCM database. used for logging stats. +func (scm *SCMMonitor) GetRefreshCount() uint64 { + return scm.serviceRefreshes +} +func (scm *SCMMonitor) refreshCache() error { + + // EnumServiceStatusEx requires only SC_MANAGER_ENUM_SERVICE. Switch to + // new library to use least privilege + h, err := windows.OpenSCManager(nil, nil, windows.SC_MANAGER_ENUMERATE_SERVICE) + if err != nil { + log.Warnf("Failed to connect to scm %v", err) + return fmt.Errorf("Failed to open SCM %v", err) + } + m := &mgr.Mgr{Handle: h} + defer m.Disconnect() + + var bytesNeeded, servicesReturned uint32 + var buf []byte + for { + var p *byte + if len(buf) > 0 { + p = &buf[0] + } + err = windows.EnumServicesStatusEx(m.Handle, windows.SC_ENUM_PROCESS_INFO, + windows.SERVICE_WIN32, windows.SERVICE_STATE_ALL, + p, uint32(len(buf)), &bytesNeeded, &servicesReturned, nil, nil) + if err == nil { + break + } + if err != windows.ERROR_MORE_DATA { + return fmt.Errorf("Failed to enum services %v", err) + } + if bytesNeeded <= uint32(len(buf)) { + return err + } + buf = make([]byte, bytesNeeded) + } + if servicesReturned == 0 { + return nil + } + + services := unsafe.Slice((*windows.ENUM_SERVICE_STATUS_PROCESS)(unsafe.Pointer(&buf[0])), servicesReturned) + + newmap := make(map[uint64]*ServiceList) + for idx, svc := range services { + var thissvc *ServiceList + var ok bool + if thissvc, ok = newmap[uint64(svc.ServiceStatusProcess.ProcessId)]; !ok { + thissvc = &ServiceList{} + newmap[uint64(svc.ServiceStatusProcess.ProcessId)] = thissvc + } + thissvc.essp = append(thissvc.essp, &services[idx]) + } + var current windows.Filetime + windows.GetSystemTimeAsFileTime(¤t) + scm.lastMapTime = uint64(current.Nanoseconds()) + scm.pidToService = newmap + scm.serviceRefreshes++ + return nil +} + +func (s *ServiceList) toServiceInfo() *ServiceInfo { + var si ServiceInfo + for _, inf := range s.essp { + si.DisplayName = append(si.DisplayName, windows.UTF16PtrToString(inf.DisplayName)) + si.ServiceName = append(si.ServiceName, windows.UTF16PtrToString(inf.ServiceName)) + } + return &si + +} + +func (scm *SCMMonitor) getServiceFromCache(pid, pidstart uint64) (*ServiceInfo, error) { + var err error + if val, ok := scm.pidToService[pid]; ok { + // it was in there. see if it's the right one + if val.startTime == 0 { + // we don't prepopulate the cache with pid start times + val.startTime, err = pGetProcessStartTimeAsNs(pid) + if err != nil { + return nil, err + } + } + if val.startTime == pidstart { + // it's the same one. + return val.toServiceInfo(), nil + } + } + return nil, nil +} + +// GetServiceInfo gets the service name and display name if the process identified +// by the pid is in the SCM. A process which is not an SCM controlled service will +// return nil with no error +func (scm *SCMMonitor) GetServiceInfo(pid uint64) (*ServiceInfo, error) { + // get the process start time of the pid being checked + pidstart, err := pGetProcessStartTimeAsNs(pid) + if err != nil { + return nil, err + } + scm.mux.Lock() + defer scm.mux.Unlock() + // check to see if the pid is in the cache of known, not service pids + if val, ok := scm.nonServicePid[pid]; ok { + // it's a known non service pid. Make sure it's not recycled. + if val == pidstart { + // it's the same process. We know this isn't a service + return nil, nil + } else { + // it was in there but the times didn't match, which means + // it's a different process. Clean it out. + delete(scm.nonServicePid, pid) + } + } + // if we get here it either wasn't in the map, or it was but the + // start time didn't match + + if pidstart <= scm.lastMapTime { + // so it's been around longer than our last check of the service + // table. so if it's in there it's probably good. + si, err := scm.getServiceFromCache(pid, pidstart) + if err != nil { + return nil, err + } + if si != nil { + return si, nil + } + // else + scm.nonServicePid[pid] = pidstart + return nil, nil + + } + + // if we get here, the process + // is newer than the service map. + if err = scm.refreshCache(); err != nil { + return nil, err + } + // now check the service map + si, err := scm.getServiceFromCache(pid, pidstart) + if err != nil { + return nil, err + } + if si != nil { + return si, nil + } + // otherwise put this pid as a known, non service + scm.nonServicePid[pid] = pidstart + return nil, nil +} diff --git a/pkg/util/winutil/scmmonitor_test.go b/pkg/util/winutil/scmmonitor_test.go new file mode 100644 index 0000000000000..cea71391e913d --- /dev/null +++ b/pkg/util/winutil/scmmonitor_test.go @@ -0,0 +1,91 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. +//go:build windows +// +build windows + +package winutil + +import ( + "os" + "os/exec" + "strconv" + "strings" + "sync" + "testing" + + "github.com/stretchr/testify/assert" + "golang.org/x/sys/windows" +) + +type saveOutput struct { + savedOutput []byte +} + +func (so *saveOutput) Write(p []byte) (n int, err error) { + so.savedOutput = append(so.savedOutput, p...) + return os.Stdout.Write(p) +} + +var startTime windows.Filetime + +func testGetProcessStartTimeAsNs(pid uint64) (uint64, error) { + var once sync.Once + + once.Do(func() { + windows.GetSystemTimeAsFileTime(&startTime) + // move the start a bit earlier to make sure it's always + // before current + startTime.LowDateTime -= 1000000 + }) + return uint64(startTime.Nanoseconds()), nil + +} +func TestServices(t *testing.T) { + var output saveOutput + cmd := exec.Command("tasklist", "/svc", "/fo", "csv") + cmd.Stdin = os.Stdin + cmd.Stdout = &output + cmd.Stderr = os.Stderr + _ = cmd.Run() + + pGetProcessStartTimeAsNs = testGetProcessStartTimeAsNs + scm := GetServiceMonitor() + + for _, line := range strings.Split(strings.TrimRight(string(output.savedOutput), "\r\n"), "\r\n")[1:] { + + entries := strings.Split(line, ",") + for i, s := range entries { + entries[i] = strings.Replace(s, "\"", "", -1) + } + pid, _ := strconv.ParseInt(entries[1], 10, 64) + if pid == 0 { + continue + } + if pid == int64(windows.GetCurrentProcessId()) { + continue + } + if pid == int64(cmd.Process.Pid) { + continue + } + si, err := scm.GetServiceInfo(uint64(pid)) + assert.Nil(t, err, "Error on pid %v", pid) + if entries[2] != "N/A" { + if assert.NotNil(t, si) { + for _, name := range entries[2:] { + assert.Contains(t, si.ServiceName, name) + } + } else { + t.Logf("Unexpected empty entry %v", entries) + } + } else { + // the "N/A" processes are not services, so should not get + // an entry back + assert.Nil(t, si) + } + } + count := scm.GetRefreshCount() + assert.EqualValues(t, 1, count) + +} diff --git a/pkg/util/winutil/service.go b/pkg/util/winutil/service.go new file mode 100644 index 0000000000000..38abdc9a23780 --- /dev/null +++ b/pkg/util/winutil/service.go @@ -0,0 +1,243 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build windows +// +build windows + +package winutil + +import ( + "bytes" + "encoding/binary" + "fmt" + "time" + "unsafe" + + "golang.org/x/sys/windows" + "golang.org/x/sys/windows/svc" + "golang.org/x/sys/windows/svc/mgr" + + "github.com/DataDog/datadog-agent/pkg/util/log" +) + +const ( + defaultServiceCommandTimeout = 10 +) + +var ( + modadvapi32 = windows.NewLazyDLL("advapi32.dll") + procEnumDependentServices = modadvapi32.NewProc("EnumDependentServicesW") +) + +type enumServiceState uint32 + +func OpenSCManager(desiredAccess uint32) (*mgr.Mgr, error) { + h, err := windows.OpenSCManager(nil, nil, desiredAccess) + if err != nil { + return nil, err + } + return &mgr.Mgr{Handle: h}, nil +} + +func OpenService(manager *mgr.Mgr, serviceName string, desiredAccess uint32) (*mgr.Service, error) { + h, err := windows.OpenService(manager.Handle, windows.StringToUTF16Ptr(serviceName), desiredAccess) + if err != nil { + return nil, err + } + return &mgr.Service{Name: serviceName, Handle: h}, nil +} + +// Start serviceName via SCM +// Does not block until service is started +// https://learn.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-startservicea#remarks +func StartService(serviceName string, serviceArgs ...string) error { + + manager, err := OpenSCManager(windows.SC_MANAGER_CONNECT) + if err != nil { + return fmt.Errorf("could not open SCM: %v", err) + } + defer manager.Disconnect() + + service, err := OpenService(manager, serviceName, windows.SERVICE_START) + if err != nil { + return fmt.Errorf("could not open service %s: %v", serviceName, err) + } + defer service.Close() + + err = service.Start(serviceArgs...) + if err != nil { + return fmt.Errorf("could not start service %s: %v", serviceName, err) + } + return nil +} + +// This function sends a control code to a specified service and waits up to +// timeout for the service to transition to the requested state +func ControlService(serviceName string, command svc.Cmd, to svc.State, desiredAccess uint32, timeout int64) error { + + manager, err := OpenSCManager(windows.SC_MANAGER_CONNECT) + if err != nil { + return fmt.Errorf("could not open SCM: %v", err) + } + defer manager.Disconnect() + + service, err := OpenService(manager, serviceName, desiredAccess) + if err != nil { + return fmt.Errorf("could not open service %s: %v", serviceName, err) + } + defer service.Close() + + status, err := service.Control(command) + if err != nil { + return fmt.Errorf("could not send control %d: %v", command, err) + } + + timesup := time.Now().Add(time.Duration(timeout) * time.Second) + for status.State != to { + if time.Now().After(timesup) { + return fmt.Errorf("timeout waiting for service %s to go to state %d; current state: %d", serviceName, to, status.State) + } + time.Sleep(300 * time.Millisecond) + status, err = service.Query() + if err != nil { + return fmt.Errorf("could not retrieve status for %s: %v", serviceName, err) + } + } + return nil +} + +func doStopService(serviceName string) error { + return ControlService(serviceName, svc.Stop, svc.Stopped, windows.SERVICE_STOP|windows.SERVICE_QUERY_STATUS, defaultServiceCommandTimeout) +} + +func StopService(serviceName string) error { + + deps, err := ListDependentServices(serviceName, windows.SERVICE_ACTIVE) + if err != nil { + return fmt.Errorf("could not list dependent services for %s: %v", serviceName, err) + } + + for _, dep := range deps { + err = doStopService(dep.serviceName) + if err != nil { + return fmt.Errorf("could not stop service %s: %v", dep.serviceName, err) + } + } + return doStopService(serviceName) +} + +func RestartService(serviceName string) error { + var err error + if err = StopService(serviceName); err == nil { + err = StartService(serviceName) + } + return err +} + +// when Go has their version, replace ours with the upstream +// https://github.com/golang/go/issues/56766 +func ListDependentServices(serviceName string, state enumServiceState) ([]EnumServiceStatus, error) { + manager, err := OpenSCManager(windows.SC_MANAGER_CONNECT) + if err != nil { + return nil, err + } + defer manager.Disconnect() + + service, err := OpenService(manager, serviceName, windows.SERVICE_ENUMERATE_DEPENDENTS) + if err != nil { + return nil, fmt.Errorf("could not open service %s: %v", serviceName, err) + } + defer service.Close() + + deps, err := enumDependentServices(service.Handle, state) + if err != nil { + return nil, fmt.Errorf("could not enumerate dependent services for %s: %v", serviceName, err) + } + return deps, nil +} + +// ServiceStatus reports information pertaining to enumerated services +// only exported so binary.Read works +type ServiceStatus struct { + DwServiceType uint32 + DwCurrentState uint32 + DwControlsAccepted uint32 + DwWin32ExitCode uint32 + DwServiceSpecificExitCode uint32 + DwCheckPoint uint32 + DwWaitHint uint32 +} + +// EnumServiceStatus complete enumerated service information +// only exported so binary.Read works +type EnumServiceStatus struct { + serviceName string + displayName string + status ServiceStatus +} + +type internalEnumServiceStatus struct { + ServiceName uint64 // offset from beginning of buffer + DisplayName uint64 // offset from beginning of buffer. + Status ServiceStatus + Padding uint32 // structure is qword aligned. + +} + +func enumDependentServices(h windows.Handle, state enumServiceState) (services []EnumServiceStatus, err error) { + services = make([]EnumServiceStatus, 0) + var bufsz uint32 + var count uint32 + _, _, err = procEnumDependentServices.Call(uintptr(h), + uintptr(state), + uintptr(0), + uintptr(0), // current buffer size is zero + uintptr(unsafe.Pointer(&bufsz)), + uintptr(unsafe.Pointer(&count))) + + // success with a 0 buffer means no dependent services + if err == error(windows.ERROR_SUCCESS) { + err = nil + return + } + + // since the initial buffer sent is 0 bytes, we expect the return code to + // always be ERROR_MORE_DATA, unless something went wrong + if err != error(windows.ERROR_MORE_DATA) { + log.Warnf("Error getting buffer %v", err) + return + } + + servicearray := make([]uint8, bufsz) + ret, _, err := procEnumDependentServices.Call(uintptr(h), + uintptr(state), + uintptr(unsafe.Pointer(&servicearray[0])), + uintptr(bufsz), + uintptr(unsafe.Pointer(&bufsz)), + uintptr(unsafe.Pointer(&count))) + if ret == 0 { + log.Warnf("Error getting deps %d %v", int(ret), err) + return + } + // now get to parse out the C structure into go. + var ess internalEnumServiceStatus + baseptr := uintptr(unsafe.Pointer(&servicearray[0])) + buf := bytes.NewReader(servicearray) + for i := uint32(0); i < count; i++ { + + err = binary.Read(buf, binary.LittleEndian, &ess) + if err != nil { + break + } + + ess.ServiceName = ess.ServiceName - uint64(baseptr) + ess.DisplayName = ess.DisplayName - uint64(baseptr) + ss := EnumServiceStatus{serviceName: ConvertWindowsString(servicearray[ess.ServiceName:]), + displayName: ConvertWindowsString(servicearray[ess.DisplayName:]), + status: ess.Status} + services = append(services, ss) + } + return +} diff --git a/pkg/util/winutil/service_test.go b/pkg/util/winutil/service_test.go new file mode 100644 index 0000000000000..415fb819fad9f --- /dev/null +++ b/pkg/util/winutil/service_test.go @@ -0,0 +1,186 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build windows +// +build windows + +package winutil + +import ( + "testing" + "time" + + "github.com/stretchr/testify/assert" + "golang.org/x/sys/windows" + "golang.org/x/sys/windows/svc/mgr" +) + +// copied from go\pkg\mod\golang.org\x\sys@v0.4.0\windows\svc\mgr\mgr_test.go +func install(t *testing.T, m *mgr.Mgr, name, exepath string, c mgr.Config) { + // Sometimes it takes a while for the service to get + // removed after previous test run. + for i := 0; ; i++ { + s, err := m.OpenService(name) + if err != nil { + break + } + s.Close() + + if i > 10 { + t.Fatalf("service %s already exists", name) + } + time.Sleep(300 * time.Millisecond) + } + + s, err := m.CreateService(name, exepath, c) + if err != nil { + t.Fatalf("CreateService(%s) failed: %v", name, err) + } + defer s.Close() +} + +// copied from go\pkg\mod\golang.org\x\sys@v0.4.0\windows\svc\mgr\mgr_test.go +func remove(t *testing.T, s *mgr.Service) { + err := s.Delete() + if err != nil { + t.Fatalf("Delete failed: %s", err) + } +} + +func TestOpenSCManager(t *testing.T) { + + // test that OpenSCManager returns an error if the desired access is not valid + _, err := OpenSCManager(777) + assert.NotNil(t, err, "Expected OpenSCManager to return an error with invalid desired access") + + // test that OpenSCManager returns a valid manager handle with valid desired access + m, err := OpenSCManager(windows.SC_MANAGER_CONNECT) + assert.Nilf(t, err, "Unexpected error: %v", err) + assert.NotNil(t, m, "Expected OpenSCManager to return a valid manager handle") + defer m.Disconnect() +} + +func TestOpenService(t *testing.T) { + + // open the SC manager with CONNECT and CREATE_SERVICE + m, err := OpenSCManager(windows.SC_MANAGER_CONNECT | windows.SC_MANAGER_CREATE_SERVICE) + assert.Nilf(t, err, "Unexpected error: %v", err) + assert.NotNil(t, m, "Expected OpenSCManager to return a valid manager handle") + defer m.Disconnect() + + // test that OpenService returns an error with non-existent service + _, err = OpenService(m, "nottestingservice", windows.SERVICE_START) + assert.NotNil(t, err, "Expected OpenService to return an error with invalid service name") + + c := mgr.Config{ + StartType: mgr.StartDisabled, + DisplayName: "Test Service", + Description: "This is a test service", + Dependencies: []string{"LanmanServer", "W32Time"}, + } + install(t, m, "testingservice", "", c) + + // test that OpenService returns a valid service handle with a valid service name + s, err := OpenService(m, "testingservice", windows.SERVICE_START|windows.DELETE) + assert.Nil(t, err, "Unexpected error: %v", err) + assert.NotNil(t, s, "Expected OpenService to return a valid service handle") + remove(t, s) + s.Close() +} + +func TestListDependentServices(t *testing.T) { + + // test that ListDependentServices returns an error if the service name is not valid + notAServiceName := "notaservice" + _, err := ListDependentServices(notAServiceName, windows.SERVICE_ACTIVE) + assert.NotNil(t, err, "Expected ListDependentServices to return an error with invalid service name") + + // open the SC manager so we can create some test services + m, err := OpenSCManager(windows.SC_MANAGER_CONNECT | windows.SC_MANAGER_CREATE_SERVICE) + assert.Nilf(t, err, "Unexpected error: %v", err) + assert.NotNil(t, m, "Expected OpenSCManager to return a valid manager handle") + defer m.Disconnect() + + // install the base service, it will have no dependents, but several dependents + baseServiceName := "baseservice" + c := mgr.Config{ + StartType: mgr.StartDisabled, + DisplayName: "Base Test Service", + Description: "This is the base test service", + } + install(t, m, baseServiceName, "", c) + + // install a first level dependent service, it will depend on the base service + firstLevelServiceName := "dependentservice-firstlevel" + c = mgr.Config{ + StartType: mgr.StartDisabled, + DisplayName: "Dependent Test Service: First Level", + Description: "This service depends on the base service", + Dependencies: []string{baseServiceName}, + } + install(t, m, firstLevelServiceName, "", c) + + // install a second level service, it will depend on the first level + secondLevelServiceName := "dependentservice-secondlevel" + c = mgr.Config{ + StartType: mgr.StartDisabled, + DisplayName: "Dependent Test Service: Second Level", + Description: "This service depends on the dependent service", + Dependencies: []string{firstLevelServiceName}, + } + install(t, m, secondLevelServiceName, "", c) + + // test that ListDependentServices returns an empty list for service with no dependents + deps, err := ListDependentServices(secondLevelServiceName, windows.SERVICE_STATE_ALL) + assert.Nilf(t, err, "Unexpected error: %v", err) + assert.Zero(t, len(deps), "") + + // test that ListDependentServices returns a list of dependent services for service with dependents + deps, err = ListDependentServices(firstLevelServiceName, windows.SERVICE_STATE_ALL) + assert.Nilf(t, err, "Unexpected error: %v", err) + assert.Equal(t, 1, len(deps), "Expected ListDependentServices to return a list of dependent services") + + // the deps + t.Logf("%s has the following dependents", firstLevelServiceName) + for _, dep := range deps { + t.Log(dep.serviceName) + } + + // test that ListDependentServices returns a list of dependent services for service with nested dependents + deps, err = ListDependentServices(baseServiceName, windows.SERVICE_STATE_ALL) + assert.Nilf(t, err, "Unexpected error: %v", err) + assert.Equal(t, 2, len(deps), "Expected ListDependentServices to return a list of dependent services") + + // ensure that we get the deps back in reverse startup order + // so that when this is used to stop services, we stop the outermost ones + // first + // https://learn.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-enumdependentservicesa#parameters + assert.EqualValues(t, secondLevelServiceName, deps[0].serviceName) + assert.EqualValues(t, firstLevelServiceName, deps[1].serviceName) + + // the deps + t.Logf("%s has the following dependents", baseServiceName) + for _, dep := range deps { + t.Log(dep.serviceName) + } + + s, err := OpenService(m, baseServiceName, windows.SERVICE_START|windows.DELETE) + assert.Nil(t, err, "Unexpected error: %v", err) + assert.NotNil(t, s, "Expected OpenService to return a valid service handle") + remove(t, s) + s.Close() + + s, err = OpenService(m, firstLevelServiceName, windows.SERVICE_START|windows.DELETE) + assert.Nil(t, err, "Unexpected error: %v", err) + assert.NotNil(t, s, "Expected OpenService to return a valid service handle") + remove(t, s) + s.Close() + + s, err = OpenService(m, secondLevelServiceName, windows.SERVICE_START|windows.DELETE) + assert.Nil(t, err, "Unexpected error: %v", err) + assert.NotNil(t, s, "Expected OpenService to return a valid service handle") + remove(t, s) + s.Close() +} diff --git a/pkg/util/winutil/users.go b/pkg/util/winutil/users.go index 51a89437cf6ff..b04fe6908f269 100644 --- a/pkg/util/winutil/users.go +++ b/pkg/util/winutil/users.go @@ -8,6 +8,7 @@ package winutil import ( + "fmt" "syscall" "golang.org/x/sys/windows" @@ -40,3 +41,22 @@ func GetSidFromUser() (*windows.SID, error) { return windows.StringToSid(sidString) } + +// Returns true is a user is a member of the Administrator's group +// TODO: Microsoft does not recommend using this function, instead CheckTokenMembership should be used. +// https://learn.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-isuseranadmin +func IsUserAnAdmin() (bool, error) { + shell32 := windows.NewLazySystemDLL("Shell32.dll") + defer windows.FreeLibrary(windows.Handle(shell32.Handle())) + + isUserAnAdminProc := shell32.NewProc("IsUserAnAdmin") + ret, _, winError := isUserAnAdminProc.Call() + + if winError != windows.NTE_OP_OK { + return false, fmt.Errorf("IsUserAnAdmin returns error code %d", winError) + } + if ret == 0 { + return false, nil + } + return true, nil +} diff --git a/pkg/workloadmeta/collectors/internal/cloudfoundry/cf_container/cloudfoundry_container.go b/pkg/workloadmeta/collectors/internal/cloudfoundry/cf_container/cloudfoundry_container.go index 10b2b377f6995..506acfd69bb41 100644 --- a/pkg/workloadmeta/collectors/internal/cloudfoundry/cf_container/cloudfoundry_container.go +++ b/pkg/workloadmeta/collectors/internal/cloudfoundry/cf_container/cloudfoundry_container.go @@ -14,6 +14,7 @@ import ( "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/errors" "github.com/DataDog/datadog-agent/pkg/util/cloudproviders/cloudfoundry" + "github.com/DataDog/datadog-agent/pkg/util/common" "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/workloadmeta" ) @@ -70,10 +71,12 @@ func (c *collector) Pull(ctx context.Context) error { Runtime: workloadmeta.ContainerRuntimeGarden, } - containerEntity.CollectorTags = []string{ - fmt.Sprintf("%s:%s", cloudfoundry.ContainerNameTagKey, c.nodeName), - fmt.Sprintf("%s:%s", cloudfoundry.AppInstanceGUIDTagKey, c.nodeName), - } + // init tags collection + containerTags := common.NewStringSet() + + // add basic container tags + containerTags.Add(fmt.Sprintf("%s:%s", cloudfoundry.ContainerNameTagKey, c.nodeName)) + containerTags.Add(fmt.Sprintf("%s:%s", cloudfoundry.AppInstanceGUIDTagKey, c.nodeName)) // read shared node tags file if it exists sharedNodeTagsBytes, err := os.ReadFile(sharedNodeAgentTagsFile) @@ -82,9 +85,14 @@ func (c *collector) Pull(ctx context.Context) error { } else { // TODO: handle json tags sharedNodeTags := strings.Split(string(sharedNodeTagsBytes), ",") - containerEntity.CollectorTags = append(containerEntity.CollectorTags, sharedNodeTags...) + for _, s := range sharedNodeTags { + containerTags.Add(s) + } } + // assign tags + containerEntity.CollectorTags = containerTags.GetAll() + events = append(events, workloadmeta.CollectorEvent{ Type: workloadmeta.EventTypeSet, Source: workloadmeta.SourceClusterOrchestrator, diff --git a/pkg/workloadmeta/collectors/internal/containerd/containerd.go b/pkg/workloadmeta/collectors/internal/containerd/containerd.go index 58a472f1dbda0..9cbb2351cbd97 100644 --- a/pkg/workloadmeta/collectors/internal/containerd/containerd.go +++ b/pkg/workloadmeta/collectors/internal/containerd/containerd.go @@ -14,6 +14,7 @@ import ( "fmt" "time" + "github.com/DataDog/datadog-agent/pkg/util/trivy" "github.com/containerd/containerd" containerdevents "github.com/containerd/containerd/events" @@ -34,6 +35,10 @@ const ( containerUpdateTopic = "/containers/update" containerDeletionTopic = "/containers/delete" + imageCreationTopic = "/images/create" + imageUpdateTopic = "/images/update" + imageDeletionTopic = "/images/delete" + // These are not all the task-related topics, but enough to detect changes // in the state of the container (only need to know if it's running or not). @@ -56,6 +61,9 @@ var containerdTopics = []string{ containerCreationTopic, containerUpdateTopic, containerDeletionTopic, + imageCreationTopic, + imageUpdateTopic, + imageDeletionTopic, TaskStartTopic, TaskOOMTopic, TaskExitTopic, @@ -79,12 +87,28 @@ type collector struct { // Container exit info (mainly exit code and exit timestamp) are attached to the corresponding task events. // contToExitInfo caches the exit info of a task to enrich the container deletion event when it's received later. contToExitInfo map[string]*exitInfo + + knownImages *knownImages + + // Map of image ID => array of repo tags + repoTags map[string][]string + + trivyClient trivy.Collector // nolint: unused + imagesToScan chan namespacedImage +} + +type namespacedImage struct { + namespace string + image containerd.Image + imageID string } func init() { workloadmeta.RegisterCollector(collectorID, func() workloadmeta.Collector { return &collector{ contToExitInfo: make(map[string]*exitInfo), + knownImages: newKnownImages(), + repoTags: make(map[string][]string), } }) } @@ -102,6 +126,10 @@ func (c *collector) Start(ctx context.Context, store workloadmeta.Store) error { return err } + if err = c.startSBOMCollection(); err != nil { + return err + } + c.filterPausedContainers, err = containers.GetPauseContainerFilter() if err != nil { return err @@ -110,7 +138,7 @@ func (c *collector) Start(ctx context.Context, store workloadmeta.Store) error { eventsCtx, cancelEvents := context.WithCancel(ctx) c.eventsChan, c.errorsChan = c.containerdClient.GetEvents().Subscribe(eventsCtx, subscribeFilters()...) - err = c.generateEventsFromContainerList(ctx) + err = c.notifyInitialEvents(ctx) if err != nil { cancelEvents() return err @@ -124,6 +152,10 @@ func (c *collector) Start(ctx context.Context, store workloadmeta.Store) error { }() defer cancelEvents() + if c.imagesToScan != nil { + defer close(c.imagesToScan) + } + c.stream(ctx) }() @@ -165,8 +197,8 @@ func (c *collector) stream(ctx context.Context) { } } -func (c *collector) generateEventsFromContainerList(ctx context.Context) error { - var events []workloadmeta.CollectorEvent +func (c *collector) notifyInitialEvents(ctx context.Context) error { + var containerEvents []workloadmeta.CollectorEvent namespaces, err := cutil.NamespacesToWatch(ctx, c.containerdClient) if err != nil { @@ -174,22 +206,27 @@ func (c *collector) generateEventsFromContainerList(ctx context.Context) error { } for _, namespace := range namespaces { - nsEvents, err := c.generateInitialEvents(namespace) + nsContainerEvents, err := c.generateInitialContainerEvents(namespace) if err != nil { return err } + containerEvents = append(containerEvents, nsContainerEvents...) - events = append(events, nsEvents...) + if imageMetadataCollectionIsEnabled() { + if err := c.notifyInitialImageEvents(ctx, namespace); err != nil { + return err + } + } } - if len(events) > 0 { - c.store.Notify(events) + if len(containerEvents) > 0 { + c.store.Notify(containerEvents) } return nil } -func (c *collector) generateInitialEvents(namespace string) ([]workloadmeta.CollectorEvent, error) { +func (c *collector) generateInitialContainerEvents(namespace string) ([]workloadmeta.CollectorEvent, error) { var events []workloadmeta.CollectorEvent existingContainers, err := c.containerdClient.Containers(namespace) @@ -221,7 +258,30 @@ func (c *collector) generateInitialEvents(namespace string) ([]workloadmeta.Coll return events, nil } +func (c *collector) notifyInitialImageEvents(ctx context.Context, namespace string) error { + existingImages, err := c.containerdClient.ListImages(namespace) + if err != nil { + return err + } + + for _, image := range existingImages { + if err := c.notifyEventForImage(ctx, namespace, image, nil); err != nil { + return err + } + } + + return nil +} + func (c *collector) handleEvent(ctx context.Context, containerdEvent *containerdevents.Envelope) error { + if isImageTopic(containerdEvent.Topic) { + return c.handleImageEvent(ctx, containerdEvent) + } + + return c.handleContainerEvent(ctx, containerdEvent) +} + +func (c *collector) handleContainerEvent(ctx context.Context, containerdEvent *containerdevents.Envelope) error { containerID, container, err := c.extractContainerFromEvent(ctx, containerdEvent) if err != nil { return fmt.Errorf("cannot extract container from event: %w", err) @@ -313,6 +373,10 @@ func subscribeFilters() []string { var filters []string for _, topic := range containerdTopics { + if isImageTopic(topic) && !imageMetadataCollectionIsEnabled() { + continue + } + filters = append(filters, fmt.Sprintf(`topic==%q`, topic)) } @@ -333,3 +397,7 @@ func (c *collector) cacheExitInfo(id string, exitCode *uint32, exitTS time.Time) exitCode: exitCode, } } + +func imageMetadataCollectionIsEnabled() bool { + return config.Datadog.GetBool("container_image_collection.metadata.enabled") +} diff --git a/pkg/workloadmeta/collectors/internal/containerd/event_builder_test.go b/pkg/workloadmeta/collectors/internal/containerd/event_builder_test.go index 0bbc8bacec064..0d6d24c57f20c 100644 --- a/pkg/workloadmeta/collectors/internal/containerd/event_builder_test.go +++ b/pkg/workloadmeta/collectors/internal/containerd/event_builder_test.go @@ -290,7 +290,7 @@ func containerdClient(container containerd.Container) fake.MockedContainerdClien MockLabels: func(namespace string, ctn containerd.Container) (map[string]string, error) { return labels, nil }, - MockImage: func(namespace string, ctn containerd.Container) (containerd.Image, error) { + MockImageOfContainer: func(namespace string, ctn containerd.Container) (containerd.Image, error) { return &mockedImage{ mockName: func() string { return imgName diff --git a/pkg/workloadmeta/collectors/internal/containerd/image.go b/pkg/workloadmeta/collectors/internal/containerd/image.go new file mode 100644 index 0000000000000..7039968e8f4b4 --- /dev/null +++ b/pkg/workloadmeta/collectors/internal/containerd/image.go @@ -0,0 +1,379 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build containerd +// +build containerd + +package containerd + +import ( + "context" + "encoding/json" + "fmt" + "strings" + "sync" + + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" + + "github.com/containerd/containerd" + "github.com/containerd/containerd/api/events" + "github.com/containerd/containerd/content" + containerdevents "github.com/containerd/containerd/events" + "github.com/containerd/containerd/images" + "github.com/containerd/containerd/namespaces" + "github.com/gogo/protobuf/proto" + ocispec "github.com/opencontainers/image-spec/specs-go/v1" +) + +const imageTopicPrefix = "/images/" + +// Events from containerd contain an image name, but not IDs. When a delete +// event arrives it'll contain a name, but we won't be able to access the ID +// because the image is already gone, that's why we need to keep the IDs => +// names relationships. +type knownImages struct { + // Needed because this is accessed by the goroutine handling events and also the one that extracts SBOMs + mut sync.Mutex + + // Store IDs and names in both directions for efficient access + idsByName map[string]string // map name => ID + namesByID map[string]map[string]struct{} // map ID => set of names +} + +func newKnownImages() *knownImages { + return &knownImages{ + idsByName: make(map[string]string), + namesByID: make(map[string]map[string]struct{}), + } +} + +func (images *knownImages) addAssociation(imageName string, imageID string) { + images.mut.Lock() + defer images.mut.Unlock() + + images.idsByName[imageName] = imageID + + if images.namesByID[imageID] == nil { + images.namesByID[imageID] = make(map[string]struct{}) + } + images.namesByID[imageID][imageName] = struct{}{} +} + +func (images *knownImages) deleteAssociation(imageName string, imageID string) { + images.mut.Lock() + defer images.mut.Unlock() + + delete(images.idsByName, imageName) + + if images.namesByID[imageID] == nil { + return + } + + delete(images.namesByID[imageID], imageName) + if len(images.namesByID[imageID]) == 0 { + delete(images.namesByID, imageID) + } +} + +func (images *knownImages) getImageID(imageName string) (string, bool) { + images.mut.Lock() + defer images.mut.Unlock() + + id, found := images.idsByName[imageName] + return id, found +} + +func (images *knownImages) isReferenced(imageID string) bool { + images.mut.Lock() + defer images.mut.Unlock() + + return len(images.namesByID[imageID]) > 0 +} + +func isImageTopic(topic string) bool { + return strings.HasPrefix(topic, imageTopicPrefix) +} + +func (c *collector) handleImageEvent(ctx context.Context, containerdEvent *containerdevents.Envelope) error { + switch containerdEvent.Topic { + case imageCreationTopic: + event := &events.ImageCreate{} + if err := proto.Unmarshal(containerdEvent.Event.Value, event); err != nil { + return fmt.Errorf("error unmarshaling containerd event: %w", err) + } + + return c.handleImageCreateOrUpdate(ctx, containerdEvent.Namespace, event.Name, nil) + + case imageUpdateTopic: + event := &events.ImageUpdate{} + if err := proto.Unmarshal(containerdEvent.Event.Value, event); err != nil { + return fmt.Errorf("error unmarshaling containerd event: %w", err) + } + + return c.handleImageCreateOrUpdate(ctx, containerdEvent.Namespace, event.Name, nil) + + case imageDeletionTopic: + event := &events.ImageDelete{} + if err := proto.Unmarshal(containerdEvent.Event.Value, event); err != nil { + return fmt.Errorf("error unmarshaling containerd event: %w", err) + } + + imageID, found := c.knownImages.getImageID(event.Name) + if !found { + return nil + } + + c.knownImages.deleteAssociation(event.Name, imageID) + + if c.knownImages.isReferenced(imageID) { + // Image is still referenced by a different name. Don't delete the + // image, but update its repo tags. + return c.deleteRepoTagOfImage(ctx, containerdEvent.Namespace, imageID, event.Name) + } + + c.store.Notify([]workloadmeta.CollectorEvent{ + { + Type: workloadmeta.EventTypeUnset, + Source: workloadmeta.SourceRuntime, + Entity: &workloadmeta.ContainerImageMetadata{ + EntityID: workloadmeta.EntityID{ + Kind: workloadmeta.KindContainerImageMetadata, + ID: imageID, + }, + }, + }, + }) + + return nil + default: + return fmt.Errorf("unknown containerd image event topic %s, ignoring", containerdEvent.Topic) + } +} + +func (c *collector) handleImageCreateOrUpdate(ctx context.Context, namespace string, imageName string, bom *workloadmeta.SBOM) error { + img, err := c.containerdClient.Image(namespace, imageName) + if err != nil { + return fmt.Errorf("error getting image: %w", err) + } + + return c.notifyEventForImage(ctx, namespace, img, bom) +} + +func (c *collector) notifyEventForImage(ctx context.Context, namespace string, img containerd.Image, bom *workloadmeta.SBOM) error { + ctxWithNamespace := namespaces.WithNamespace(ctx, namespace) + + manifest, err := images.Manifest(ctxWithNamespace, img.ContentStore(), img.Target(), img.Platform()) + if err != nil { + return fmt.Errorf("error getting image manifest: %w", err) + } + + layers, err := getLayersWithHistory(ctxWithNamespace, img.ContentStore(), manifest) + if err != nil { + log.Warnf("error while getting layers with history: %s", err) + + // Not sure if the layers and history are always available. Instead of + // returning an error, collect the image without this information. + } + + platforms, err := images.Platforms(ctxWithNamespace, img.ContentStore(), manifest.Config) + if err != nil { + return fmt.Errorf("error getting image platforms: %w", err) + } + + imageName := img.Name() + imageID := manifest.Config.Digest.String() + + existingBOM := bom + + // We can get "create" events for images that already exist. That happens + // when the same image is referenced with different names. For example, + // datadog/agent:latest and datadog/agent:7 might refer to the same image. + // Also, in some environments (at least with Kind), pulling an image like + // datadog/agent:latest creates several events: in one of them the image + // name is a digest, in other is something with the same format as + // datadog/agent:7, and sometimes there's a temporary name prefixed with + // "import-". + // When that happens, give precedence to the name with repo and tag instead + // of the name that includes a digest. This is just to show names that are + // more user-friendly (the digests are already present in other attributes + // like ID, and repo digest). + existingImg, err := c.store.GetImage(imageID) + if err == nil { + if strings.Contains(imageName, "sha256:") && !strings.Contains(existingImg.Name, "sha256:") { + imageName = existingImg.Name + } + + if existingBOM == nil && existingImg.SBOM != nil { + existingBOM = existingImg.SBOM + } + } + + var repoDigests []string + if strings.Contains(imageName, "@sha256:") { + repoDigests = append(repoDigests, imageName) + } else { + repoDigests = append(repoDigests, imageName+"@"+img.Target().Digest.String()) + + repoTagAlreadyPresent := false + for _, repoTag := range c.repoTags[imageID] { + if repoTag == imageName { + repoTagAlreadyPresent = true + break + } + } + + if !repoTagAlreadyPresent { + c.repoTags[imageID] = append(c.repoTags[imageID], imageName) + } + } + + var totalSizeBytes int64 = 0 + for _, layer := range manifest.Layers { + totalSizeBytes += layer.Size + } + + var os, osVersion, architecture, variant string + // If there are multiple platforms, return the info about the first one + if len(platforms) >= 1 { + os = platforms[0].OS + osVersion = platforms[0].OSVersion + architecture = platforms[0].Architecture + variant = platforms[0].Variant + } + + workloadmetaImg := workloadmeta.ContainerImageMetadata{ + EntityID: workloadmeta.EntityID{ + Kind: workloadmeta.KindContainerImageMetadata, + ID: imageID, + }, + EntityMeta: workloadmeta.EntityMeta{ + Name: imageName, + Namespace: namespace, + Labels: img.Labels(), + }, + RepoTags: c.repoTags[imageID], + RepoDigests: repoDigests, + MediaType: manifest.MediaType, + SizeBytes: totalSizeBytes, + OS: os, + OSVersion: osVersion, + Architecture: architecture, + Variant: variant, + Layers: layers, + SBOM: existingBOM, + } + + c.store.Notify([]workloadmeta.CollectorEvent{ + { + Type: workloadmeta.EventTypeSet, + Source: workloadmeta.SourceRuntime, + Entity: &workloadmetaImg, + }, + }) + + if existingBOM == nil && sbomCollectionIsEnabled() { + // Notify image scanner + c.imagesToScan <- namespacedImage{ + namespace: namespace, + image: img, + imageID: imageID, + } + } + + return c.updateKnownImages(ctx, namespace, imageName, imageID) +} + +// Updates the map with the image name => image ID relationships and also the repo tags +func (c *collector) updateKnownImages(ctx context.Context, namespace string, imageName string, newImageID string) error { + oldImageID, found := c.knownImages.getImageID(imageName) + c.knownImages.addAssociation(imageName, newImageID) + + // If the image name is already pointing to an ID, we need to delete the name from + // the repo tags of the image with that ID. + if found && newImageID != oldImageID { + c.knownImages.deleteAssociation(imageName, oldImageID) + return c.deleteRepoTagOfImage(ctx, namespace, oldImageID, imageName) + } + + return nil +} + +func (c *collector) deleteRepoTagOfImage(ctx context.Context, namespace string, imageID string, repoTagToDelete string) error { + repoTagDeleted := false + + for i, repoTag := range c.repoTags[imageID] { + if repoTag == repoTagToDelete { + c.repoTags[imageID] = append(c.repoTags[imageID][:i], c.repoTags[imageID][i+1:]...) + repoTagDeleted = true + break + } + } + + if repoTagDeleted && len(c.repoTags[imageID]) > 0 { + // We need to notify to workloadmeta that the image has changed. + // Updating workloadmeta entities directly is not thread-safe, that's + // why we generate an update event here instead. + if err := c.handleImageCreateOrUpdate(ctx, namespace, c.repoTags[imageID][len(c.repoTags[imageID])-1], nil); err != nil { + return err + } + } + + return nil +} + +func getLayersWithHistory(ctx context.Context, store content.Store, manifest ocispec.Manifest) ([]workloadmeta.ContainerImageLayer, error) { + blob, err := content.ReadBlob(ctx, store, manifest.Config) + if err != nil { + return nil, fmt.Errorf("error while getting image contents: %w", err) + } + + var ocispecImage ocispec.Image + if err = json.Unmarshal(blob, &ocispecImage); err != nil { + return nil, fmt.Errorf("error while unmarshaling image: %w", err) + } + + var layers []workloadmeta.ContainerImageLayer + + // The layers in the manifest don't include the history, and the only way to + // match the history with each layer is to rely on the order and take into + // account that some history objects don't have an associated layer + // (emptyLayer = true). + + history := ocispecImage.History + manifestLayersIdx := 0 + + for _, historyPoint := range history { + layer := workloadmeta.ContainerImageLayer{ + History: historyPoint, + } + + if !historyPoint.EmptyLayer { + if manifestLayersIdx >= len(manifest.Layers) { + // This should never happen. len(manifest.Layers) should equal + // len(history) minus the number of history points with + // emptyLayer = false. + return nil, fmt.Errorf("error while extracting image layer history") + } + + manifestLayer := manifest.Layers[manifestLayersIdx] + manifestLayersIdx += 1 + + layer.MediaType = manifestLayer.MediaType + layer.Digest = manifestLayer.Digest.String() + layer.SizeBytes = manifestLayer.Size + layer.URLs = manifestLayer.URLs + } + + layers = append(layers, layer) + } + + if manifestLayersIdx != len(manifest.Layers) { + // This should never happen. Same case as above. + return nil, fmt.Errorf("error while extracting image layer history") + } + + return layers, nil +} diff --git a/cmd/agent/common/system_probe_config_helper_unsupported.go b/pkg/workloadmeta/collectors/internal/containerd/image_sbom_stub.go similarity index 59% rename from cmd/agent/common/system_probe_config_helper_unsupported.go rename to pkg/workloadmeta/collectors/internal/containerd/image_sbom_stub.go index 06a7cb21a66f2..60c093c6934d1 100644 --- a/cmd/agent/common/system_probe_config_helper_unsupported.go +++ b/pkg/workloadmeta/collectors/internal/containerd/image_sbom_stub.go @@ -3,12 +3,15 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). // Copyright 2016-present Datadog, Inc. -//go:build !process -// +build !process +//go:build containerd && !trivy +// +build containerd,!trivy -package common +package containerd -// SetupSystemProbeConfig returns nil on unsupported builds -func SetupSystemProbeConfig(sysProbeConfFilePath string) error { +func sbomCollectionIsEnabled() bool { + return false +} + +func (c *collector) startSBOMCollection() error { return nil } diff --git a/pkg/workloadmeta/collectors/internal/containerd/image_sbom_trivy.go b/pkg/workloadmeta/collectors/internal/containerd/image_sbom_trivy.go new file mode 100644 index 0000000000000..ddddf1fa69b23 --- /dev/null +++ b/pkg/workloadmeta/collectors/internal/containerd/image_sbom_trivy.go @@ -0,0 +1,116 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build containerd && trivy +// +build containerd,trivy + +package containerd + +import ( + "context" + "fmt" + "time" + + "github.com/DataDog/datadog-agent/pkg/config" + cutil "github.com/DataDog/datadog-agent/pkg/util/containerd" + "github.com/DataDog/datadog-agent/pkg/util/log" + "github.com/DataDog/datadog-agent/pkg/util/trivy" + "github.com/DataDog/datadog-agent/pkg/workloadmeta" + "github.com/DataDog/datadog-agent/pkg/workloadmeta/telemetry" +) + +// scan buffer needs to be very large as we cannot block containerd collector +const ( + imagesToScanBufferSize = 5000 +) + +func sbomCollectionIsEnabled() bool { + return imageMetadataCollectionIsEnabled() && config.Datadog.GetBool("container_image_collection.sbom.enabled") +} + +func (c *collector) startSBOMCollection() error { + if !sbomCollectionIsEnabled() { + return nil + } + + var err error + enabledAnalyzers := config.Datadog.GetStringSlice("container_image_collection.sbom.analyzers") + trivyConfiguration, err := trivy.DefaultCollectorConfig(enabledAnalyzers) + if err != nil { + return fmt.Errorf("error initializing trivy client: %w", err) + } + + trivyConfiguration.ContainerdAccessor = func() (cutil.ContainerdItf, error) { + return c.containerdClient, nil + } + c.trivyClient, err = trivy.NewCollector(trivyConfiguration) + if err != nil { + return fmt.Errorf("error initializing trivy client: %w", err) + } + + c.imagesToScan = make(chan namespacedImage, imagesToScanBufferSize) + + go func() { + for imageToScan := range c.imagesToScan { + scanContext, cancel := context.WithTimeout(context.Background(), scanningTimeout()) + if err := c.extractBOMWithTrivy(scanContext, imageToScan); err != nil { + log.Warnf("error extracting SBOM for image: namespace=%s name=%s, err: %s", imageToScan.namespace, imageToScan.image.Name(), err) + } + cancel() + } + }() + + return nil +} + +func (c *collector) extractBOMWithTrivy(ctx context.Context, imageToScan namespacedImage) error { + storedImage, err := c.store.GetImage(imageToScan.imageID) + if err != nil { + log.Infof("Image: %s/%s (id %s) not found in Workloadmeta, skipping scan", imageToScan.namespace, imageToScan.image.Name(), imageToScan.imageID) + return nil + } + + if storedImage.SBOM != nil { + // BOM already stored. Can happen when the same image ID is referenced + // with different names. + log.Debugf("Image: %s/%s (id %s) SBOM already available", imageToScan.namespace, imageToScan.image.Name(), imageToScan.imageID) + return nil + } + + scanFunc := c.trivyClient.ScanContainerdImage + if config.Datadog.GetBool("container_image_collection.sbom.use_mount") { + scanFunc = c.trivyClient.ScanContainerdImageFromFilesystem + } + + tStartScan := time.Now() + cycloneDXBOM, err := scanFunc(ctx, storedImage, imageToScan.image) + if err != nil { + return err + } + + scanDuration := time.Since(tStartScan) + + telemetry.SBOMGenerationDuration.Observe(scanDuration.Seconds()) + + sbom := workloadmeta.SBOM{ + CycloneDXBOM: cycloneDXBOM, + GenerationTime: tStartScan, + GenerationDuration: scanDuration, + } + + time.Sleep(timeBetweenScans()) + + // Updating workloadmeta entities directly is not thread-safe, that's why we + // generate an update event here instead. + return c.handleImageCreateOrUpdate(ctx, imageToScan.namespace, storedImage.Name, &sbom) +} + +func scanningTimeout() time.Duration { + return time.Duration(config.Datadog.GetInt("container_image_collection.sbom.scan_timeout")) * time.Second +} + +func timeBetweenScans() time.Duration { + return time.Duration(config.Datadog.GetInt("container_image_collection.sbom.scan_interval")) * time.Second +} diff --git a/pkg/workloadmeta/collectors/internal/containerd/image_test.go b/pkg/workloadmeta/collectors/internal/containerd/image_test.go new file mode 100644 index 0000000000000..93964538637d9 --- /dev/null +++ b/pkg/workloadmeta/collectors/internal/containerd/image_test.go @@ -0,0 +1,45 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build containerd +// +build containerd + +package containerd + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestKnownImages(t *testing.T) { + images := newKnownImages() + + // Add a first image name that refers to the "123" ID + images.addAssociation("agent:7", "123") + imageID, found := images.getImageID("agent:7") + assert.True(t, found) + assert.Equal(t, "123", imageID) + assert.True(t, images.isReferenced("123")) + + // Add a second image that refers to the "123" ID + images.addAssociation("agent:latest", "123") + imageID, found = images.getImageID("agent:latest") + assert.True(t, found) + assert.Equal(t, "123", imageID) + assert.True(t, images.isReferenced("123")) + + // Delete one of the associations + images.deleteAssociation("agent:latest", "123") + _, found = images.getImageID("agent:latest") + assert.False(t, found) + assert.True(t, images.isReferenced("123")) // Still referenced by the other + + // Delete the other association + images.deleteAssociation("agent:7", "123") + _, found = images.getImageID("agent:7") + assert.False(t, found) + assert.False(t, images.isReferenced("123")) +} diff --git a/pkg/workloadmeta/collectors/internal/containerd/network_linux.go b/pkg/workloadmeta/collectors/internal/containerd/network_linux.go index 76b84a3434312..429701cb048d9 100644 --- a/pkg/workloadmeta/collectors/internal/containerd/network_linux.go +++ b/pkg/workloadmeta/collectors/internal/containerd/network_linux.go @@ -27,8 +27,8 @@ import ( // Limitations: // - Host /proc needs to be mounted. // - If the container exposes multiple IPs, this function just returns one of -// them. That means that if a container is attached to multiple networks this -// might not work as expected. +// them. That means that if a container is attached to multiple networks this +// might not work as expected. func extractIP(namespace string, container containerd.Container, containerdClient cutil.ContainerdItf) (string, error) { if !config.IsHostProcAvailable() { return "", nil diff --git a/pkg/workloadmeta/collectors/internal/docker/docker.go b/pkg/workloadmeta/collectors/internal/docker/docker.go index d2ff5092e6754..696414267c2bd 100644 --- a/pkg/workloadmeta/collectors/internal/docker/docker.go +++ b/pkg/workloadmeta/collectors/internal/docker/docker.go @@ -248,7 +248,7 @@ func (c *collector) buildCollectorEvent(ctx context.Context, ev *docker.Containe if err != nil { log.Debugf("Cannot convert exit code %q: %v", exitCodeString, err) } else { - exitCode = pointer.UInt32Ptr(exitCodeInt) + exitCode = pointer.Ptr(uint32(exitCodeInt)) } } @@ -278,13 +278,14 @@ func extractImage(ctx context.Context, container types.ContainerJSON, resolve re var ( name string + registry string shortName string tag string err error ) if strings.Contains(imageSpec, "@sha256") { - name, shortName, tag, err = containers.SplitImageName(imageSpec) + name, registry, shortName, tag, err = containers.SplitImageName(imageSpec) if err != nil { log.Debugf("cannot split image name %q for container %q: %s", imageSpec, container.ID, err) } @@ -297,13 +298,13 @@ func extractImage(ctx context.Context, container types.ContainerJSON, resolve re return image } - name, shortName, tag, err = containers.SplitImageName(resolvedImageSpec) + name, registry, shortName, tag, err = containers.SplitImageName(resolvedImageSpec) if err != nil { log.Debugf("cannot split image name %q for container %q: %s", resolvedImageSpec, container.ID, err) // fallback and try to parse the original imageSpec anyway if err == containers.ErrImageIsSha256 { - name, shortName, tag, err = containers.SplitImageName(imageSpec) + name, registry, shortName, tag, err = containers.SplitImageName(imageSpec) if err != nil { log.Debugf("cannot split image name %q for container %q: %s", imageSpec, container.ID, err) return image @@ -315,6 +316,7 @@ func extractImage(ctx context.Context, container types.ContainerJSON, resolve re } image.Name = name + image.Registry = registry image.ShortName = shortName image.Tag = tag diff --git a/pkg/workloadmeta/collectors/internal/ecs/ecs.go b/pkg/workloadmeta/collectors/internal/ecs/ecs.go index 34f23f48b3ef5..bce02533d7d46 100644 --- a/pkg/workloadmeta/collectors/internal/ecs/ecs.go +++ b/pkg/workloadmeta/collectors/internal/ecs/ecs.go @@ -51,12 +51,8 @@ func init() { } func (c *collector) Start(ctx context.Context, store workloadmeta.Store) error { - if !config.IsFeaturePresent(config.Docker) { - return errors.NewDisabled(componentName, "Agent is not running on Docker") - } - - if ecsutil.IsFargateInstance(ctx) { - return errors.NewDisabled(componentName, "ECS collector is disabled on Fargate") + if !config.IsFeaturePresent(config.ECSEC2) { + return errors.NewDisabled(componentName, "Agent is not running on ECS EC2") } var err error diff --git a/pkg/workloadmeta/collectors/internal/ecsfargate/ecsfargate.go b/pkg/workloadmeta/collectors/internal/ecsfargate/ecsfargate.go index 1de41245a156f..fadc8850f72ba 100644 --- a/pkg/workloadmeta/collectors/internal/ecsfargate/ecsfargate.go +++ b/pkg/workloadmeta/collectors/internal/ecsfargate/ecsfargate.go @@ -10,13 +10,11 @@ package ecsfargate import ( "context" - "fmt" "strings" "time" "github.com/DataDog/datadog-agent/pkg/config" "github.com/DataDog/datadog-agent/pkg/errors" - ecsutil "github.com/DataDog/datadog-agent/pkg/util/ecs" ecsmeta "github.com/DataDog/datadog-agent/pkg/util/ecs/metadata" v2 "github.com/DataDog/datadog-agent/pkg/util/ecs/metadata/v2" "github.com/DataDog/datadog-agent/pkg/util/log" @@ -47,10 +45,6 @@ func (c *collector) Start(ctx context.Context, store workloadmeta.Store) error { return errors.NewDisabled(componentName, "Agent is not running on Fargate") } - if !ecsutil.IsFargateInstance(ctx) { - return fmt.Errorf("failed to connect to ECS Fargate task metadata API") - } - var err error c.store = store diff --git a/pkg/workloadmeta/collectors/internal/kubeapiserver/reflector_store.go b/pkg/workloadmeta/collectors/internal/kubeapiserver/reflector_store.go index 7c904fc1c2394..dd17d3ceafbea 100644 --- a/pkg/workloadmeta/collectors/internal/kubeapiserver/reflector_store.go +++ b/pkg/workloadmeta/collectors/internal/kubeapiserver/reflector_store.go @@ -9,25 +9,37 @@ package kubeapiserver import ( + "fmt" + "regexp" "sync" corev1 "k8s.io/api/core/v1" + utilserror "k8s.io/apimachinery/pkg/util/errors" "k8s.io/client-go/tools/cache" + "github.com/DataDog/datadog-agent/pkg/config" + "github.com/DataDog/datadog-agent/pkg/util/log" "github.com/DataDog/datadog-agent/pkg/workloadmeta" ) type reflectorStore struct { wlmetaStore workloadmeta.Store - mu sync.Mutex - seen map[string]workloadmeta.EntityID + mu sync.Mutex + seen map[string]workloadmeta.EntityID + options *parseOptions } func newReflectorStore(wlmetaStore workloadmeta.Store) cache.Store { + annotationsExclude := config.Datadog.GetStringSlice("cluster_agent.kubernetes_resources_collection.pod_annotations_exclude") + parseOptions, err := newParseOptions(annotationsExclude) + if err != nil { + _ = log.Errorf("unable to parse all pod_annotations_exclude: %v, err:", err) + } return &reflectorStore{ wlmetaStore: wlmetaStore, seen: make(map[string]workloadmeta.EntityID), + options: parseOptions, } } @@ -38,7 +50,7 @@ func (r *reflectorStore) Add(obj interface{}) error { defer r.mu.Unlock() pod := obj.(*corev1.Pod) - entity := parsePod(pod) + entity := parsePod(pod, r.options) r.seen[string(pod.UID)] = entity.EntityID @@ -99,7 +111,7 @@ func (r *reflectorStore) Replace(list []interface{}, _ string) error { for _, obj := range list { pod := obj.(*corev1.Pod) podUID := string(pod.UID) - entity := parsePod(pod) + entity := parsePod(pod, r.options) events = append(events, workloadmeta.CollectorEvent{ Type: workloadmeta.EventTypeSet, @@ -156,7 +168,26 @@ func (r *reflectorStore) Resync() error { panic("not implemented") } -func parsePod(pod *corev1.Pod) *workloadmeta.KubernetesPod { +type parseOptions struct { + annotationsFilter []*regexp.Regexp +} + +func newParseOptions(annotationsExclude []string) (*parseOptions, error) { + options := parseOptions{} + var errors []error + for _, exclude := range annotationsExclude { + filter, err := filterToRegex(exclude) + if err != nil { + errors = append(errors, err) + continue + } + options.annotationsFilter = append(options.annotationsFilter, filter) + } + + return &options, utilserror.NewAggregate(errors) +} + +func parsePod(pod *corev1.Pod, options *parseOptions) *workloadmeta.KubernetesPod { owners := make([]workloadmeta.KubernetesPodOwner, 0, len(pod.OwnerReferences)) for _, o := range pod.OwnerReferences { owners = append(owners, workloadmeta.KubernetesPodOwner{ @@ -191,7 +222,7 @@ func parsePod(pod *corev1.Pod) *workloadmeta.KubernetesPod { EntityMeta: workloadmeta.EntityMeta{ Name: pod.Name, Namespace: pod.Namespace, - Annotations: pod.Annotations, + Annotations: filterMapStringKey(pod.Annotations, options.annotationsFilter), Labels: pod.Labels, }, Phase: string(pod.Status.Phase), @@ -209,3 +240,27 @@ func parsePod(pod *corev1.Pod) *workloadmeta.KubernetesPod { // Containers: []workloadmeta.OrchestratorContainer{}, } } + +func filterMapStringKey(mapInput map[string]string, keyFilters []*regexp.Regexp) map[string]string { + for key := range mapInput { + for _, filter := range keyFilters { + if filter.MatchString(key) { + delete(mapInput, key) + // we can break now since the key is already excluded. + break + } + } + } + + return mapInput +} + +// filterToRegex checks a filter's regex +func filterToRegex(filter string) (*regexp.Regexp, error) { + r, err := regexp.Compile(filter) + if err != nil { + errormsg := fmt.Errorf("invalid regex '%s': %s", filter, err) + return nil, errormsg + } + return r, nil +} diff --git a/pkg/workloadmeta/collectors/internal/kubeapiserver/reflector_store_test.go b/pkg/workloadmeta/collectors/internal/kubeapiserver/reflector_store_test.go new file mode 100644 index 0000000000000..2334a495904d6 --- /dev/null +++ b/pkg/workloadmeta/collectors/internal/kubeapiserver/reflector_store_test.go @@ -0,0 +1,82 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +//go:build kubeapiserver +// +build kubeapiserver + +package kubeapiserver + +import ( + "reflect" + "testing" + + "github.com/DataDog/datadog-agent/pkg/config" +) + +func Test_filterMapStringKey(t *testing.T) { + annotationstest := map[string]string{ + "foo": "bar", + "ad.datadoghq.com/foo.checks": `{"json":"foo"}`, + "ad.datadoghq.com/checks": `{"json":"foo"}`, + "ad.datadoghq.com/foo.check_names": `{"json":"foo"}`, + "ad.datadoghq.com/instances": `{"json":"foo"}`, + "ad.datadoghq.com/foo.instances": `{"json":"foo"}`, + "ad.datadoghq.com/init_configs": `{"json":"foo"}`, + "ad.datadoghq.com/foo.init_configs": `{"json":"foo"}`, + "ad.datadoghq.com/tags": `["bar","foo"]`, + } + + defaultExclude := config.Datadog.GetStringSlice("cluster_agent.kubernetes_resources_collection.pod_annotations_exclude") + extraExclude := append(defaultExclude, "foo") + + tests := []struct { + name string + excludeString []string + annotations map[string]string + want map[string]string + }{ + { + name: "no filter", + annotations: copyMap(annotationstest), + want: annotationstest, + }, + { + name: "default filters", + excludeString: defaultExclude, + annotations: copyMap(annotationstest), + want: map[string]string{ + "foo": "bar", + "ad.datadoghq.com/tags": `["bar","foo"]`, + }, + }, + { + name: "default filters", + excludeString: extraExclude, + annotations: copyMap(annotationstest), + want: map[string]string{ + "ad.datadoghq.com/tags": `["bar","foo"]`, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + options, err := newParseOptions(tt.excludeString) + if err != nil { + t.Errorf("newParseOptions() return an error %v", err) + } + if got := filterMapStringKey(tt.annotations, options.annotationsFilter); !reflect.DeepEqual(got, tt.want) { + t.Errorf("filterPodAnnotations() = %v, want %v", got, tt.want) + } + }) + } +} + +func copyMap(in map[string]string) map[string]string { + out := make(map[string]string, len(in)) + for key, value := range in { + out[key] = value + } + return out +} diff --git a/pkg/workloadmeta/collectors/internal/kubelet/kubelet.go b/pkg/workloadmeta/collectors/internal/kubelet/kubelet.go index fe973d658da79..9ee7089353c9b 100644 --- a/pkg/workloadmeta/collectors/internal/kubelet/kubelet.go +++ b/pkg/workloadmeta/collectors/internal/kubelet/kubelet.go @@ -176,7 +176,16 @@ func (c *collector) parsePodContainers( image, err := workloadmeta.NewContainerImage(container.Image) if err != nil { - log.Debugf("cannot split image name %q: %s", container.Image, err) + if err == containers.ErrImageIsSha256 { + // try the resolved image ID if the image name in the container + // status is a SHA256. this seems to happen sometimes when + // pinning the image to a SHA256 + image, err = workloadmeta.NewContainerImage(container.ImageID) + } + + if err != nil { + log.Debugf("cannot split image name %q nor %q: %s", container.Image, container.ImageID, err) + } } image.ID = container.ImageID diff --git a/pkg/workloadmeta/collectors/internal/podman/podman_test.go b/pkg/workloadmeta/collectors/internal/podman/podman_test.go index 22b3256485a88..c0253533af0df 100644 --- a/pkg/workloadmeta/collectors/internal/podman/podman_test.go +++ b/pkg/workloadmeta/collectors/internal/podman/podman_test.go @@ -173,6 +173,7 @@ func TestPull(t *testing.T) { Image: workloadmeta.ContainerImage{ RawName: "docker.io/datadog/agent:latest", Name: "docker.io/datadog/agent", + Registry: "docker.io", ShortName: "agent", Tag: "latest", }, @@ -222,6 +223,7 @@ func TestPull(t *testing.T) { Image: workloadmeta.ContainerImage{ RawName: "docker.io/datadog/agent-dev:latest", Name: "docker.io/datadog/agent-dev", + Registry: "docker.io", ShortName: "agent-dev", Tag: "latest", }, diff --git a/pkg/workloadmeta/merge_test.go b/pkg/workloadmeta/merge_test.go index f3b619b3e73b5..a7d332d0a2789 100644 --- a/pkg/workloadmeta/merge_test.go +++ b/pkg/workloadmeta/merge_test.go @@ -79,7 +79,7 @@ func container2(testTime time.Time) Container { CreatedAt: time.Time{}, StartedAt: time.Time{}, FinishedAt: time.Time{}, - ExitCode: pointer.UInt32Ptr(100), + ExitCode: pointer.Ptr(uint32(100)), }, CollectorTags: []string{"tag3"}, } @@ -102,7 +102,7 @@ func TestMerge(t *testing.T) { CreatedAt: testTime, StartedAt: testTime, FinishedAt: time.Time{}, - ExitCode: pointer.UInt32Ptr(100), + ExitCode: pointer.Ptr(uint32(100)), }, } diff --git a/pkg/workloadmeta/store.go b/pkg/workloadmeta/store.go index 813af569706a3..a01b57f7cbc5c 100644 --- a/pkg/workloadmeta/store.go +++ b/pkg/workloadmeta/store.go @@ -323,6 +323,16 @@ func (s *store) ListImages() []*ContainerImageMetadata { return images } +// GetImage implements Store#GetImage +func (s *store) GetImage(id string) (*ContainerImageMetadata, error) { + entity, err := s.getEntityByKind(KindContainerImageMetadata, id) + if err != nil { + return nil, err + } + + return entity.(*ContainerImageMetadata), nil +} + // Notify implements Store#Notify func (s *store) Notify(events []CollectorEvent) { if len(events) > 0 { diff --git a/pkg/workloadmeta/store_test.go b/pkg/workloadmeta/store_test.go index 35b06cd6fcfb5..a1b7ac1f44e5e 100644 --- a/pkg/workloadmeta/store_test.go +++ b/pkg/workloadmeta/store_test.go @@ -724,6 +724,58 @@ func TestListImages(t *testing.T) { } } +func TestGetImage(t *testing.T) { + image := &ContainerImageMetadata{ + EntityID: EntityID{ + Kind: KindContainerImageMetadata, + ID: "abc", + }, + } + + tests := []struct { + name string + imageID string + preEvents []CollectorEvent + expectedImage *ContainerImageMetadata + expectsError bool + }{ + { + name: "image exists", + imageID: image.ID, + preEvents: []CollectorEvent{ + { + Type: EventTypeSet, + Source: fooSource, + Entity: image, + }, + }, + expectedImage: image, + }, + { + name: "image does not exist", + imageID: "non_existing_ID", + preEvents: nil, + expectsError: true, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + testStore := newTestStore() + testStore.handleEvents(test.preEvents) + + actualImage, err := testStore.GetImage(test.imageID) + + if test.expectsError { + assert.Error(t, err, errors.NewNotFound(string(KindContainerImageMetadata)).Error()) + } else { + assert.NilError(t, err) + assert.DeepEqual(t, test.expectedImage, actualImage) + } + }) + } +} + func TestReset(t *testing.T) { fooContainer := &Container{ EntityID: EntityID{ diff --git a/pkg/workloadmeta/telemetry/telemetry.go b/pkg/workloadmeta/telemetry/telemetry.go index aa600b3d682ae..0dd4a2ac90e3e 100644 --- a/pkg/workloadmeta/telemetry/telemetry.go +++ b/pkg/workloadmeta/telemetry/telemetry.go @@ -86,4 +86,15 @@ var ( "Number of errors on the remote workloadmeta server while streaming events", commonOpts, ) + + // SBOMGenerationDuration measures the time that it takes to generate SBOMs + // in seconds. + SBOMGenerationDuration = telemetry.NewHistogramWithOpts( + subsystem, + "sbom_generation_duration", + []string{}, + "SBOM generation duration (in seconds)", + []float64{10, 30, 60, 120, 180, 240, 300, 360, 420, 480, 540, 600}, + commonOpts, + ) ) diff --git a/pkg/workloadmeta/testing/store.go b/pkg/workloadmeta/testing/store.go index f5e63a4505679..da5d734129795 100644 --- a/pkg/workloadmeta/testing/store.go +++ b/pkg/workloadmeta/testing/store.go @@ -117,6 +117,16 @@ func (s *Store) ListImages() []*workloadmeta.ContainerImageMetadata { return images } +// GetImage implements Store#GetImage +func (s *Store) GetImage(id string) (*workloadmeta.ContainerImageMetadata, error) { + entity, err := s.getEntityByKind(workloadmeta.KindContainerImageMetadata, id) + if err != nil { + return nil, err + } + + return entity.(*workloadmeta.ContainerImageMetadata), nil +} + // Set sets an entity in the store. func (s *Store) Set(entity workloadmeta.Entity) { s.mu.Lock() diff --git a/pkg/workloadmeta/types.go b/pkg/workloadmeta/types.go index 060cb99f1b85a..4c428d46f4b22 100644 --- a/pkg/workloadmeta/types.go +++ b/pkg/workloadmeta/types.go @@ -8,11 +8,13 @@ package workloadmeta import ( "context" "fmt" + "io" "strings" "time" + "github.com/CycloneDX/cyclonedx-go" "github.com/mohae/deepcopy" - "github.com/opencontainers/image-spec/specs-go/v1" + v1 "github.com/opencontainers/image-spec/specs-go/v1" "github.com/DataDog/datadog-agent/pkg/util/containers" ) @@ -78,6 +80,10 @@ type Store interface { // entities with kind KindContainerImageMetadata. ListImages() []*ContainerImageMetadata + // GetImage returns metadata about a container image. It fetches the entity + // with kind KindContainerImageMetadata and the given ID. + GetImage(id string) (*ContainerImageMetadata, error) + // Notify notifies the store with a slice of events. It should only be // used by workloadmeta collectors. Notify(events []CollectorEvent) @@ -266,6 +272,7 @@ type ContainerImage struct { ID string RawName string Name string + Registry string ShortName string Tag string } @@ -277,7 +284,7 @@ func NewContainerImage(imageName string) (ContainerImage, error) { Name: imageName, } - name, shortName, tag, err := containers.SplitImageName(imageName) + name, registry, shortName, tag, err := containers.SplitImageName(imageName) if err != nil { return image, err } @@ -287,6 +294,7 @@ func NewContainerImage(imageName string) (ContainerImage, error) { } image.Name = name + image.Registry = registry image.ShortName = shortName image.Tag = tag @@ -629,6 +637,7 @@ type ContainerImageMetadata struct { Architecture string Variant string Layers []ContainerImageLayer + SBOM *SBOM } // ContainerImageLayer represents a layer of a container image @@ -640,6 +649,13 @@ type ContainerImageLayer struct { History v1.History } +// SBOM represents the Software Bill Of Materials (SBOM) of a container +type SBOM struct { + CycloneDXBOM *cyclonedx.BOM + GenerationTime time.Time + GenerationDuration time.Duration +} + // GetID implements Entity#GetID. func (i ContainerImageMetadata) GetID() EntityID { return i.EntityID @@ -671,7 +687,6 @@ func (i ContainerImageMetadata) String(verbose bool) string { _, _ = fmt.Fprintln(&sb, "----------- Entity Meta -----------") _, _ = fmt.Fprint(&sb, i.EntityMeta.String(verbose)) - _, _ = fmt.Fprintln(&sb, "Short name:", i.ShortName) _, _ = fmt.Fprintln(&sb, "Repo tags:", i.RepoTags) _, _ = fmt.Fprintln(&sb, "Repo digests:", i.RepoDigests) @@ -683,11 +698,15 @@ func (i ContainerImageMetadata) String(verbose bool) string { _, _ = fmt.Fprintln(&sb, "Architecture:", i.Architecture) _, _ = fmt.Fprintln(&sb, "Variant:", i.Variant) + if i.SBOM != nil { + _, _ = fmt.Fprintf(&sb, "SBOM: stored. Generated in: %.2f seconds\n", i.SBOM.GenerationDuration.Seconds()) + } else { + _, _ = fmt.Fprintln(&sb, "SBOM: not stored") + } + _, _ = fmt.Fprintln(&sb, "----------- Layers -----------") for _, layer := range i.Layers { - if layer.SizeBytes != 0 { // Skip layers that have a history command associated but are empty - _, _ = fmt.Fprintln(&sb, layer) - } + _, _ = fmt.Fprintln(&sb, layer) } } @@ -703,12 +722,19 @@ func (layer ContainerImageLayer) String() string { _, _ = fmt.Fprintln(&sb, "Size in bytes:", layer.SizeBytes) _, _ = fmt.Fprintln(&sb, "URLs:", layer.URLs) - // layer.History is not included here because it's way too verbose (includes - // the command in the Dockerfile that generated the layer). + printHistory(&sb, layer.History) return sb.String() } +func printHistory(out io.Writer, history v1.History) { + _, _ = fmt.Fprintln(out, "History:") + _, _ = fmt.Fprintln(out, "- createdAt:", history.Created) + _, _ = fmt.Fprintln(out, "- createdBy:", history.CreatedBy) + _, _ = fmt.Fprintln(out, "- comment:", history.Comment) + _, _ = fmt.Fprintln(out, "- emptyLayer:", history.EmptyLayer) +} + var _ Entity = &ContainerImageMetadata{} // CollectorEvent is an event generated by a metadata collector, to be handled diff --git a/release.json b/release.json index c3e79a0a68d4a..87a5838eea512 100644 --- a/release.json +++ b/release.json @@ -1,8 +1,8 @@ { "base_branch": "main", "last_stable": { - "6": "6.40.0", - "7": "7.40.0" + "6": "6.42.0", + "7": "7.42.0" }, "nightly": { "INTEGRATIONS_CORE_VERSION": "master", @@ -12,8 +12,8 @@ "JMXFETCH_HASH": "92f9c744fe00c13c6401829b9eb50f44c5843ae9d1a14f7618531bdf0187e44f", "MACOS_BUILD_VERSION": "master", "WINDOWS_DDNPM_DRIVER": "release-signed", - "WINDOWS_DDNPM_VERSION": "2.1.1", - "WINDOWS_DDNPM_SHASUM": "f52d4db27715e32008c5903393d0bc990ceb134f269fa10e76d08b3659587731", + "WINDOWS_DDNPM_VERSION": "2.3.0", + "WINDOWS_DDNPM_SHASUM": "36f28fabf3c3466d48265920c9c05ac25d04b9a812c1c3cbdf3933e2bec50233", "SECURITY_AGENT_POLICIES_VERSION": "master" }, "nightly-a7": { @@ -24,33 +24,33 @@ "JMXFETCH_HASH": "92f9c744fe00c13c6401829b9eb50f44c5843ae9d1a14f7618531bdf0187e44f", "MACOS_BUILD_VERSION": "master", "WINDOWS_DDNPM_DRIVER": "release-signed", - "WINDOWS_DDNPM_VERSION": "2.1.1", - "WINDOWS_DDNPM_SHASUM": "f52d4db27715e32008c5903393d0bc990ceb134f269fa10e76d08b3659587731", + "WINDOWS_DDNPM_VERSION": "2.3.0", + "WINDOWS_DDNPM_SHASUM": "36f28fabf3c3466d48265920c9c05ac25d04b9a812c1c3cbdf3933e2bec50233", "SECURITY_AGENT_POLICIES_VERSION": "master" }, "release-a6": { - "INTEGRATIONS_CORE_VERSION": "7.42.0-rc.3", - "OMNIBUS_SOFTWARE_VERSION": "7.42.0-rc.1", - "OMNIBUS_RUBY_VERSION": "7.42.0-rc.1", + "INTEGRATIONS_CORE_VERSION": "7.43.0-rc.3", + "OMNIBUS_SOFTWARE_VERSION": "7.43.0-rc.1", + "OMNIBUS_RUBY_VERSION": "7.43.0-rc.1", "JMXFETCH_VERSION": "0.47.2", "JMXFETCH_HASH": "92f9c744fe00c13c6401829b9eb50f44c5843ae9d1a14f7618531bdf0187e44f", - "SECURITY_AGENT_POLICIES_VERSION": "v0.42.0", - "MACOS_BUILD_VERSION": "6.42.0-rc.1", + "SECURITY_AGENT_POLICIES_VERSION": "v0.43.1", + "MACOS_BUILD_VERSION": "6.43.0-rc.1", "WINDOWS_DDNPM_DRIVER": "release-signed", - "WINDOWS_DDNPM_VERSION": "2.1.1", - "WINDOWS_DDNPM_SHASUM": "f52d4db27715e32008c5903393d0bc990ceb134f269fa10e76d08b3659587731" + "WINDOWS_DDNPM_VERSION": "2.3.0", + "WINDOWS_DDNPM_SHASUM": "36f28fabf3c3466d48265920c9c05ac25d04b9a812c1c3cbdf3933e2bec50233" }, "release-a7": { - "INTEGRATIONS_CORE_VERSION": "7.42.0-rc.3", - "OMNIBUS_SOFTWARE_VERSION": "7.42.0-rc.1", - "OMNIBUS_RUBY_VERSION": "7.42.0-rc.1", + "INTEGRATIONS_CORE_VERSION": "7.43.0-rc.3", + "OMNIBUS_SOFTWARE_VERSION": "7.43.0-rc.1", + "OMNIBUS_RUBY_VERSION": "7.43.0-rc.1", "JMXFETCH_VERSION": "0.47.2", "JMXFETCH_HASH": "92f9c744fe00c13c6401829b9eb50f44c5843ae9d1a14f7618531bdf0187e44f", - "SECURITY_AGENT_POLICIES_VERSION": "v0.42.0", - "MACOS_BUILD_VERSION": "7.42.0-rc.1", + "SECURITY_AGENT_POLICIES_VERSION": "v0.43.1", + "MACOS_BUILD_VERSION": "7.43.0-rc.1", "WINDOWS_DDNPM_DRIVER": "release-signed", - "WINDOWS_DDNPM_VERSION": "2.1.1", - "WINDOWS_DDNPM_SHASUM": "f52d4db27715e32008c5903393d0bc990ceb134f269fa10e76d08b3659587731" + "WINDOWS_DDNPM_VERSION": "2.3.0", + "WINDOWS_DDNPM_SHASUM": "36f28fabf3c3466d48265920c9c05ac25d04b9a812c1c3cbdf3933e2bec50233" }, "dca-1.17.0": { "SECURITY_AGENT_POLICIES_VERSION": "v0.18.6" diff --git a/releasenotes-dca/notes/VerticalPodAutoscaler-fb7eec91762e05a4.yaml b/releasenotes-dca/notes/VerticalPodAutoscaler-fb7eec91762e05a4.yaml new file mode 100644 index 0000000000000..ba16ebefb4f3f --- /dev/null +++ b/releasenotes-dca/notes/VerticalPodAutoscaler-fb7eec91762e05a4.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - | + Starts the collecting of Vertical Pod Autoscalers within Kubernetes clusters. diff --git a/releasenotes-dca/notes/admission-multiple-language-382cd4e2d230035f.yaml b/releasenotes-dca/notes/admission-multiple-language-382cd4e2d230035f.yaml new file mode 100644 index 0000000000000..90d694c633c11 --- /dev/null +++ b/releasenotes-dca/notes/admission-multiple-language-382cd4e2d230035f.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG-DCA.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + Make the cluster-agent admission controller able to inject libraries for several languages in a single pod. diff --git a/releasenotes-dca/notes/manifest-collection-ga-41ad6d179ed789b5.yaml b/releasenotes-dca/notes/manifest-collection-ga-41ad6d179ed789b5.yaml new file mode 100644 index 0000000000000..4918cce857d5c --- /dev/null +++ b/releasenotes-dca/notes/manifest-collection-ga-41ad6d179ed789b5.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - | + Enable orchestrator manifest collection by default diff --git a/releasenotes/notes/NDM---Add-snmp.device_up-metric-65a7855a959af675.yaml b/releasenotes/notes/NDM---Add-snmp.device_up-metric-65a7855a959af675.yaml new file mode 100644 index 0000000000000..ec47c24240f6f --- /dev/null +++ b/releasenotes/notes/NDM---Add-snmp.device_up-metric-65a7855a959af675.yaml @@ -0,0 +1,10 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - NDM: Add snmp.device.reachable/unreachable metrics to all monitored devices. diff --git a/releasenotes/notes/NDM---Add-snmp.interface_status-metric-13fb0f54fd11f197.yaml b/releasenotes/notes/NDM---Add-snmp.interface_status-metric-13fb0f54fd11f197.yaml new file mode 100644 index 0000000000000..bf856328fa706 --- /dev/null +++ b/releasenotes/notes/NDM---Add-snmp.interface_status-metric-13fb0f54fd11f197.yaml @@ -0,0 +1,10 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - Adds a new snmp.interface_status metric reflecting the same status as within NDM. diff --git a/releasenotes/notes/add-automatic-time-window-ffed100742f51246.yaml b/releasenotes/notes/add-automatic-time-window-ffed100742f51246.yaml new file mode 100644 index 0000000000000..f5573e20ff069 --- /dev/null +++ b/releasenotes/notes/add-automatic-time-window-ffed100742f51246.yaml @@ -0,0 +1,4 @@ +--- +enhancements: + - | + The external metrics server now automatically adjusts the query time window based on the Datadog metrics `MaxAge` attribute. diff --git a/releasenotes/notes/add-windows-permissions-abfb73d19318641a.yaml b/releasenotes/notes/add-windows-permissions-abfb73d19318641a.yaml new file mode 100644 index 0000000000000..e105bcb8a33b7 --- /dev/null +++ b/releasenotes/notes/add-windows-permissions-abfb73d19318641a.yaml @@ -0,0 +1,14 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + Added parity to Unix-based ``permissions.log`` Flare file on + Windows. ``permissions.log`` file list the original rights/ACL + of the files copied into a Agent flare. This will ease + troubleshooting permissions issues. \ No newline at end of file diff --git a/releasenotes/notes/add_id_and_source_type_to_ndm_topology_data-87db2503e46ab4d2.yaml b/releasenotes/notes/add_id_and_source_type_to_ndm_topology_data-87db2503e46ab4d2.yaml new file mode 100644 index 0000000000000..1df0ea4a55a2c --- /dev/null +++ b/releasenotes/notes/add_id_and_source_type_to_ndm_topology_data-87db2503e46ab4d2.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + [corechecks/snmp] Add `id` and `source_type` to NDM Topology Links diff --git a/releasenotes/notes/add_instance_filter_to_agent_check_command-c166bec4ff8ebf96.yaml b/releasenotes/notes/add_instance_filter_to_agent_check_command-c166bec4ff8ebf96.yaml new file mode 100644 index 0000000000000..7d25f7775d6a5 --- /dev/null +++ b/releasenotes/notes/add_instance_filter_to_agent_check_command-c166bec4ff8ebf96.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + Add an ``--instance-filter`` option to the Agent check command. diff --git a/releasenotes/notes/adding-usm-to-agent-status-check-79112d5ee853b5e5.yaml b/releasenotes/notes/adding-usm-to-agent-status-check-79112d5ee853b5e5.yaml new file mode 100644 index 0000000000000..5f91328c1f5fd --- /dev/null +++ b/releasenotes/notes/adding-usm-to-agent-status-check-79112d5ee853b5e5.yaml @@ -0,0 +1,13 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - | + Adding Universal Service Monitoring to the Agent status check. + Now Datadog has visibility into the status of Universal Service + Monitoring. Startup failures appear in the status check. diff --git a/releasenotes/notes/apm-emit-telemetry-events-on-startup-b72043c4fe08e402.yaml b/releasenotes/notes/apm-emit-telemetry-events-on-startup-b72043c4fe08e402.yaml new file mode 100644 index 0000000000000..9c059113b3cf5 --- /dev/null +++ b/releasenotes/notes/apm-emit-telemetry-events-on-startup-b72043c4fe08e402.yaml @@ -0,0 +1,12 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - | + APM: Collect trace agent startup errors and successes using + instrumentation-telemetry "apm-onboarding-event" messages. diff --git a/releasenotes/notes/apm-fix-info-0ac3d9106e780798.yaml b/releasenotes/notes/apm-fix-info-0ac3d9106e780798.yaml new file mode 100644 index 0000000000000..735c245d5abdd --- /dev/null +++ b/releasenotes/notes/apm-fix-info-0ac3d9106e780798.yaml @@ -0,0 +1,3 @@ +fixes: + - | + APM: Fix the `trace-agent -info` command when remote configuration is enabled. diff --git a/releasenotes/notes/apm-fix-parsing-sqlserver-identifiers-square-brackets-a2ee7a4f029694e1.yaml b/releasenotes/notes/apm-fix-parsing-sqlserver-identifiers-square-brackets-a2ee7a4f029694e1.yaml new file mode 100644 index 0000000000000..b125e9cf6d8d1 --- /dev/null +++ b/releasenotes/notes/apm-fix-parsing-sqlserver-identifiers-square-brackets-a2ee7a4f029694e1.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + APM: Fix parsing of SQL Server identifiers enclosed in square brackets. diff --git a/releasenotes/notes/apm-max-cpu-mem-feb99ac256073f7c.yaml b/releasenotes/notes/apm-max-cpu-mem-feb99ac256073f7c.yaml new file mode 100644 index 0000000000000..6b8e11fb8c445 --- /dev/null +++ b/releasenotes/notes/apm-max-cpu-mem-feb99ac256073f7c.yaml @@ -0,0 +1,6 @@ +--- +enhancements: + - | + APM: Disable ``max_memory`` and ``max_cpu_percent`` by default in containerized environments (Docker-only, ECS and CI). + Users rely on the orchestrator / container runtime to set resource limits. + Note: ``max_memory`` and ``max_cpu_percent`` have been disabled by default in Kubernetes environments since Agent ``7.18.0``. diff --git a/releasenotes/notes/break-ddtray-cmdline-args-compat-05fc525c6f6dea01.yaml b/releasenotes/notes/break-ddtray-cmdline-args-compat-05fc525c6f6dea01.yaml new file mode 100644 index 0000000000000..befe9e7b413f7 --- /dev/null +++ b/releasenotes/notes/break-ddtray-cmdline-args-compat-05fc525c6f6dea01.yaml @@ -0,0 +1,13 @@ +--- +upgrade: + - | + The command line arguments to the Datadog Agent Manager for Windows ``ddtray.exe`` + have changed from single-dash arguments to double-dash arguments. + For example, ``-launch-gui`` must now be provided as ``--launch-gui``. + The start menu shortcut created by the installer will be automatically updated. + Any custom scripts or shortcuts that launch ``ddtray.exe`` with arguments must be updated manually. +deprecations: + - | + The command line arguments to the Datadog Agent Manager for Windows ``ddtray.exe`` + have changed from single-dash arguments to double-dash arguments. + For example, ``-launch-gui`` must now be provided as ``--launch-gui``. diff --git a/releasenotes/notes/bump-golang-1.19.5-8a61d93d111cc229.yaml b/releasenotes/notes/bump-golang-1.19.5-8a61d93d111cc229.yaml new file mode 100644 index 0000000000000..47a6fe5084603 --- /dev/null +++ b/releasenotes/notes/bump-golang-1.19.5-8a61d93d111cc229.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + Agents are now built with Go ``1.19.5``. diff --git a/releasenotes/notes/bump-wheel-218fcf0e14839ed5.yaml b/releasenotes/notes/bump-wheel-218fcf0e14839ed5.yaml new file mode 100644 index 0000000000000..ebf3a1624f6c4 --- /dev/null +++ b/releasenotes/notes/bump-wheel-218fcf0e14839ed5.yaml @@ -0,0 +1,4 @@ +--- +security: + - Upgrade the wheel package to ``0.37.1`` for Python 2. + - Upgrade the wheel package to ``0.38.4`` for Python 3. diff --git a/releasenotes/notes/cgosymbolizer-upgrade-db6ea61e960e7a7f.yaml b/releasenotes/notes/cgosymbolizer-upgrade-db6ea61e960e7a7f.yaml new file mode 100644 index 0000000000000..c390dd91ee3de --- /dev/null +++ b/releasenotes/notes/cgosymbolizer-upgrade-db6ea61e960e7a7f.yaml @@ -0,0 +1,4 @@ +other: + - | + Upgrade of the cgosymbolizer dependency to use + ``github.com/ianlancetaylor/cgosymbolizer``. diff --git a/releasenotes/notes/changing-gotls-configuration-flag-cb003ca4d25472ad.yaml b/releasenotes/notes/changing-gotls-configuration-flag-cb003ca4d25472ad.yaml new file mode 100644 index 0000000000000..2616197f97a14 --- /dev/null +++ b/releasenotes/notes/changing-gotls-configuration-flag-cb003ca4d25472ad.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +deprecations: + - | + system_probe_config.enable_go_tls_support is deprecated and replaced by service_monitoring_config.enable_go_tls_support. diff --git a/releasenotes/notes/clean-sysprobe-files-at-uninstall-c8079bf4ebedd698.yaml b/releasenotes/notes/clean-sysprobe-files-at-uninstall-c8079bf4ebedd698.yaml new file mode 100644 index 0000000000000..68d7c35aaf8a9 --- /dev/null +++ b/releasenotes/notes/clean-sysprobe-files-at-uninstall-c8079bf4ebedd698.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + Remove files created by system-probe at uninstall time. diff --git a/releasenotes/notes/cluster-agent-workload-pod-annotations-exclude-30b151c00df6b5fd.yaml b/releasenotes/notes/cluster-agent-workload-pod-annotations-exclude-30b151c00df6b5fd.yaml new file mode 100644 index 0000000000000..793657c1b0b53 --- /dev/null +++ b/releasenotes/notes/cluster-agent-workload-pod-annotations-exclude-30b151c00df6b5fd.yaml @@ -0,0 +1,6 @@ +--- +enhancements: + - | + To reduce "cluster-agent" memory consomption when `cluster_agent.collect_kubernetes_tags` + option is enabled, we introduce `cluster_agent.kubernetes_resources_collection.pod_annotations_exclude` option + to exclude Pod annotation from the extracted Pod metadata. diff --git a/releasenotes/notes/container_image-22cddfd6c194def9.yaml b/releasenotes/notes/container_image-22cddfd6c194def9.yaml new file mode 100644 index 0000000000000..4eb38aeb49d2c --- /dev/null +++ b/releasenotes/notes/container_image-22cddfd6c194def9.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - | + Add a new ``container_image`` long running check to collect information about container images. diff --git a/releasenotes/notes/fix-cluster-name-tag-normalization-cd0b7cac8a1a761f.yaml b/releasenotes/notes/fix-cluster-name-tag-normalization-cd0b7cac8a1a761f.yaml new file mode 100644 index 0000000000000..41c879406f8a9 --- /dev/null +++ b/releasenotes/notes/fix-cluster-name-tag-normalization-cd0b7cac8a1a761f.yaml @@ -0,0 +1,19 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + Introduce a new option `enabled_rfc1123_compliant_cluster_name_tag` + that enforces the `kube_cluster_name` tag value to be + an RFC1123 compliant cluster name. It can be disabled by setting this + new option to `false`. +fixes: + - | + Fix the `kubernetes_state_core` check so that the host alias name + creation uses a normalized (RFC1123 compliant) cluster name. + diff --git a/releasenotes/notes/fix-clusterchecks-not-unscheduled-e2133ca522bcb160.yaml b/releasenotes/notes/fix-clusterchecks-not-unscheduled-e2133ca522bcb160.yaml new file mode 100644 index 0000000000000..b7d02e2d6a548 --- /dev/null +++ b/releasenotes/notes/fix-clusterchecks-not-unscheduled-e2133ca522bcb160.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + Fix an issue in Autodiscovery that could prevent Cluster Checks containing secrets (ENC[] syntax) to be unscheduled properly. diff --git a/releasenotes/notes/fix-obfuscator-logger-8c6a4debbf3a0bf6.yaml b/releasenotes/notes/fix-obfuscator-logger-8c6a4debbf3a0bf6.yaml new file mode 100644 index 0000000000000..1474d0e7194a6 --- /dev/null +++ b/releasenotes/notes/fix-obfuscator-logger-8c6a4debbf3a0bf6.yaml @@ -0,0 +1,4 @@ +--- +fixes: + - | + Fix panic due to uninitialized Obfuscator logger diff --git a/releasenotes/notes/fixwinhttploopback-cec77f41a8feff7f.yaml b/releasenotes/notes/fixwinhttploopback-cec77f41a8feff7f.yaml new file mode 100644 index 0000000000000..30cd39c6bed7a --- /dev/null +++ b/releasenotes/notes/fixwinhttploopback-cec77f41a8feff7f.yaml @@ -0,0 +1,12 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + On Windows, fixes bug in which HTTP connections were not properly accounted + for when the client and server were the same host (loopback). diff --git a/releasenotes/notes/ignore-prometheus-headless-services-6733bb93198c76f4.yaml b/releasenotes/notes/ignore-prometheus-headless-services-6733bb93198c76f4.yaml new file mode 100644 index 0000000000000..9851bd5f01534 --- /dev/null +++ b/releasenotes/notes/ignore-prometheus-headless-services-6733bb93198c76f4.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + The Openmetrics check is no longer scheduled for Kubernetes headless services. diff --git a/releasenotes/notes/manifest-collection-ga-41ad6d179ed789b5.yaml b/releasenotes/notes/manifest-collection-ga-41ad6d179ed789b5.yaml new file mode 100644 index 0000000000000..4918cce857d5c --- /dev/null +++ b/releasenotes/notes/manifest-collection-ga-41ad6d179ed789b5.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - | + Enable orchestrator manifest collection by default diff --git a/releasenotes/notes/otlp-first-mono-cumul-point-bug-f300edf522.yaml b/releasenotes/notes/otlp-first-mono-cumul-point-bug-f300edf522.yaml new file mode 100644 index 0000000000000..9d6024491d070 --- /dev/null +++ b/releasenotes/notes/otlp-first-mono-cumul-point-bug-f300edf522.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +fixes: + - | + The OTLP ingest endpoint does not report the first cumulative monotonic sum value if the start timestamp of the timeseries matches its timestamp. diff --git a/releasenotes/notes/process-agent-dynamic-profiling-0aece4cec9ca7526.yaml b/releasenotes/notes/process-agent-dynamic-profiling-0aece4cec9ca7526.yaml new file mode 100644 index 0000000000000..3742c7bd5f760 --- /dev/null +++ b/releasenotes/notes/process-agent-dynamic-profiling-0aece4cec9ca7526.yaml @@ -0,0 +1,3 @@ +--- +enhancements: + - Allows profiling for the Process Agent to be dynamically enabled from the CLI with `process-agent config set internal_profiling`. Optionally, once profiling is enabled, block, mutex, and goroutine profiling can also be enabled with `process-agent config set runtime_block_profile_rate`, `process-agent config set runtime_mutex_profile_fraction`, and `process-agent config set internal_profiling_goroutines`. diff --git a/releasenotes/notes/process-discovery-hints-e6d255090fdbe65f.yaml b/releasenotes/notes/process-discovery-hints-e6d255090fdbe65f.yaml new file mode 100644 index 0000000000000..6c0e88183828d --- /dev/null +++ b/releasenotes/notes/process-discovery-hints-e6d255090fdbe65f.yaml @@ -0,0 +1,4 @@ +--- +enhancements: + - | + Adds a new process discovery hint in the process agent when the regular process and container checks run. diff --git a/releasenotes/notes/pymem-telemetry-0f62acb520d80a1f.yaml b/releasenotes/notes/pymem-telemetry-0f62acb520d80a1f.yaml new file mode 100644 index 0000000000000..7f7b1792f24c5 --- /dev/null +++ b/releasenotes/notes/pymem-telemetry-0f62acb520d80a1f.yaml @@ -0,0 +1,2 @@ +enhancements: + - Added new telemetry metrics (``pymem.*``) to track Python heap usage. diff --git a/releasenotes/notes/refactor-chunking-to-use-generics-255b986656d1b76d.yaml b/releasenotes/notes/refactor-chunking-to-use-generics-255b986656d1b76d.yaml new file mode 100644 index 0000000000000..7858aa67dead5 --- /dev/null +++ b/releasenotes/notes/refactor-chunking-to-use-generics-255b986656d1b76d.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + Updated chunking util and use cases to use generics. No behavior change. diff --git a/releasenotes/notes/remove-sending-API-keys-as-params-1cec05cf38b99b71.yaml b/releasenotes/notes/remove-sending-API-keys-as-params-1cec05cf38b99b71.yaml new file mode 100644 index 0000000000000..ebfef971f2293 --- /dev/null +++ b/releasenotes/notes/remove-sending-API-keys-as-params-1cec05cf38b99b71.yaml @@ -0,0 +1,8 @@ +--- +security: + - | + Some HTTP requests sent by the Datadog Agent to Datadog endpoints were including the Datadog API key in the query parameters (in the URL). + This meant that the keys could potentially have been logged in various locations, for example, in a forward or a reverse proxy server logs the Agent connected to. + We have updated all requests to not send the API key as a query parameter. + Anyone who uses a proxy to connect the Agent to Datadog endpoints should make sure their proxy forwards all Datadog headers (patricularly ``DD-Api-Key``). + Failure to not send all Datadog headers could cause payloads to be rejected by our endpoints. diff --git a/releasenotes/notes/require-admin-for-ddtray-5a087c08fc8d2f4c.yaml b/releasenotes/notes/require-admin-for-ddtray-5a087c08fc8d2f4c.yaml new file mode 100644 index 0000000000000..45f7e02f54834 --- /dev/null +++ b/releasenotes/notes/require-admin-for-ddtray-5a087c08fc8d2f4c.yaml @@ -0,0 +1,4 @@ +--- +other: + - | + The Datadog Agent Manager ``ddtray.exe`` now requires admin to launch. diff --git a/releasenotes/notes/runtime-security-config-file-handling-a9508fda817b9b30.yaml b/releasenotes/notes/runtime-security-config-file-handling-a9508fda817b9b30.yaml new file mode 100644 index 0000000000000..da1287f2fe3f9 --- /dev/null +++ b/releasenotes/notes/runtime-security-config-file-handling-a9508fda817b9b30.yaml @@ -0,0 +1,7 @@ +--- +enhancements: + - | + There are two default config files. Optionally, you can provide override config files. + The change in this release is that for both sets, if the first config is inaccessible, the security agent startup process fails. Previously, the security agent would continue to attempt to start up even if the first config file is inaccessible. + To illustrate this, in the default case, the config files are datadog.yaml and security-agent.yaml, and in that order. If datadog.yaml is inaccessible, the security agent fails immediately. If you provide overrides, like foo.yaml and bar.yaml, the security agent fails immediately if foo.yaml is inaccessible. + In both sets, if any additional config files are missing, the security agent continues to attempt to start up, with a log message about an inaccessible config file. This is not a change from previous behavior. diff --git a/releasenotes/notes/sbom-01e923031b7d118b.yaml b/releasenotes/notes/sbom-01e923031b7d118b.yaml new file mode 100644 index 0000000000000..6b5be8a38e637 --- /dev/null +++ b/releasenotes/notes/sbom-01e923031b7d118b.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - | + Add a new ``sbom`` core check to collect the software bill of materials of containers. diff --git a/releasenotes/notes/snmp_add_ip_addresses_to_ndm_metadata_interfaces-ff310a683f997bc1.yaml b/releasenotes/notes/snmp_add_ip_addresses_to_ndm_metadata_interfaces-ff310a683f997bc1.yaml new file mode 100644 index 0000000000000..a3e704b96c39d --- /dev/null +++ b/releasenotes/notes/snmp_add_ip_addresses_to_ndm_metadata_interfaces-ff310a683f997bc1.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + [corechecks/snmp] Add IP Addresses to NDM Metadata interfaces diff --git a/releasenotes/notes/snmp_lldp_remote_device_ip-07aedf702830c8a5.yaml b/releasenotes/notes/snmp_lldp_remote_device_ip-07aedf702830c8a5.yaml new file mode 100644 index 0000000000000..cb633b75473bf --- /dev/null +++ b/releasenotes/notes/snmp_lldp_remote_device_ip-07aedf702830c8a5.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + [corechecks/snmp] Add LLDP remote device IP address. diff --git a/releasenotes/notes/sysprobe-status-8dc80c3b7515f0ec.yaml b/releasenotes/notes/sysprobe-status-8dc80c3b7515f0ec.yaml new file mode 100644 index 0000000000000..4a168a0d24e71 --- /dev/null +++ b/releasenotes/notes/sysprobe-status-8dc80c3b7515f0ec.yaml @@ -0,0 +1,3 @@ +fixes: + - | + Fix an issue where ``agent status`` would show incorrect system-probe status for 15 seconds as the system-probe started up. diff --git a/releasenotes/notes/update-setuptools-pip-1b049dc6f774ac39.yaml b/releasenotes/notes/update-setuptools-pip-1b049dc6f774ac39.yaml new file mode 100644 index 0000000000000..7faca47e49fdc --- /dev/null +++ b/releasenotes/notes/update-setuptools-pip-1b049dc6f774ac39.yaml @@ -0,0 +1,15 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +other: + - | + The ``setuptools`` package bundled in the Agent's Python 3 environment + has been upgraded to 66.1.1. + - | + The ``pip`` package bundled in the Agent's Python 3 environment + has been upgraded to 22.3.1. diff --git a/releasenotes/notes/update-sql-obfuscator-d34b610e911bbc0f.yaml b/releasenotes/notes/update-sql-obfuscator-d34b610e911bbc0f.yaml deleted file mode 100644 index 4f67d611869cd..0000000000000 --- a/releasenotes/notes/update-sql-obfuscator-d34b610e911bbc0f.yaml +++ /dev/null @@ -1,32 +0,0 @@ -# Each section from every release note are combined when the -# CHANGELOG.rst is rendered. So the text needs to be worded so that -# it does not depend on any information only available in another -# section. This may mean repeating some details, but each section -# must be readable independently of the other. -# -# Each section note must be formatted as reStructuredText. ---- -enhancements: - - | - APM: Major update to the SQL obfuscator. SQL queries should now be - much more representative of the original query that they came from. - The two major changes are: - - The SQL obfuscator now preserves certain whitespace around - identifiers. For example, what was previously - 'select [ user ] . [ name ] from [ users ] ;' - is now - 'select [user].[name] from [users];' - - The SQL obfuscator now preserves quotes around identifiers. For - example, - 'select `user` where id = 42;' - used to be obfuscated as - 'select user where id = ?;' - The output is now - 'select `user` where id = ?;'. - - Users may need to update any monitoring or metrics queries based on - specific SQL queries, as they may be affected by this change. - Specifically, monitors or metrics based on the resource name of a SQL - span may need to be updated for the new query. diff --git a/releasenotes/notes/use-dmi-for-ec2-instance-id-47eb7188442b3cf1.yaml b/releasenotes/notes/use-dmi-for-ec2-instance-id-47eb7188442b3cf1.yaml new file mode 100644 index 0000000000000..73781f1ae6032 --- /dev/null +++ b/releasenotes/notes/use-dmi-for-ec2-instance-id-47eb7188442b3cf1.yaml @@ -0,0 +1,5 @@ +features: + - | + The Agent now leverages DMI information on Unix to get the instance ID on AWS EC2 when the metadata endpoint fails or + is not accessible. The instance ID is exposed throught DMI only on AWS Nitro instances. + This will not change the hostname of the Agent upon upgrading, but will add to the list of host aliases. diff --git a/releasenotes/notes/v0.68.0-otel-f1571b993848d654.yaml b/releasenotes/notes/v0.68.0-otel-f1571b993848d654.yaml new file mode 100644 index 0000000000000..17a3c743d2588 --- /dev/null +++ b/releasenotes/notes/v0.68.0-otel-f1571b993848d654.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + The OTLP ingest endpoint now supports the same settings and protocols as the OpenTelemetry Collector OTLP receiver v0.68.0. diff --git a/releasenotes/notes/v0.70.0-otel-c59cf4b8673d9497dc27f4d4f38dea2db79e74ed.yaml b/releasenotes/notes/v0.70.0-otel-c59cf4b8673d9497dc27f4d4f38dea2db79e74ed.yaml new file mode 100644 index 0000000000000..edcfe881757c5 --- /dev/null +++ b/releasenotes/notes/v0.70.0-otel-c59cf4b8673d9497dc27f4d4f38dea2db79e74ed.yaml @@ -0,0 +1,11 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +enhancements: + - | + The OTLP ingestion endpoint now supports the same settings and protocols as the OpenTelemetry Collector OTLP receiver v0.70.0. diff --git a/releasenotes/notes/workloadmeta-containerd-sbom-a1ec4b725d0110f2.yaml b/releasenotes/notes/workloadmeta-containerd-sbom-a1ec4b725d0110f2.yaml new file mode 100644 index 0000000000000..36a90760cf963 --- /dev/null +++ b/releasenotes/notes/workloadmeta-containerd-sbom-a1ec4b725d0110f2.yaml @@ -0,0 +1,15 @@ +# Each section from every release note are combined when the +# CHANGELOG.rst is rendered. So the text needs to be worded so that +# it does not depend on any information only available in another +# section. This may mean repeating some details, but each section +# must be readable independently of the other. +# +# Each section note must be formatted as reStructuredText. +--- +features: + - | + Adds the option to collect and store in workloadmeta the software bill of + materials (SBOM) of containerd images using Trivy. This feature is disabled + by default. It can be enabled by setting + `container_image_collection.sbom.enabled` to true. + Note: This feature is CPU and IO intensive. diff --git a/rtloader/include/datadog_agent_rtloader.h b/rtloader/include/datadog_agent_rtloader.h index 35957ca2801bb..dc3da630e38cb 100644 --- a/rtloader/include/datadog_agent_rtloader.h +++ b/rtloader/include/datadog_agent_rtloader.h @@ -621,6 +621,19 @@ DATADOG_AGENT_RTLOADER_API void set_obfuscate_sql_exec_plan_cb(rtloader_t *, cb_ */ DATADOG_AGENT_RTLOADER_API void set_get_process_start_time_cb(rtloader_t *, cb_get_process_start_time_t); +/*! \fn void init_pymem_stats(rtloader_t *) + \brief Install python allocator hooks. + \param rtloader A pointer to the RtLoader instance. +*/ +DATADOG_AGENT_RTLOADER_API void init_pymem_stats(rtloader_t *); + +/*! \fn void get_pymem_stats(rtloader_t *, pymem_stats_t *) + \brief Retrieve a snapshot of python allocated memory statistics. + \param rtloader A pointer to the RtLoader instance. + \param stats A pointer to pymem_stats_t structure that will be updated with the new values. +*/ +DATADOG_AGENT_RTLOADER_API void get_pymem_stats(rtloader_t *, pymem_stats_t *); + #ifdef __cplusplus } #endif diff --git a/rtloader/include/rtloader.h b/rtloader/include/rtloader.h index d146a3b87b4d3..2e478408ec310 100644 --- a/rtloader/include/rtloader.h +++ b/rtloader/include/rtloader.h @@ -6,7 +6,6 @@ #ifndef DATADOG_AGENT_RTLOADER_RTLOADER_H #define DATADOG_AGENT_RTLOADER_RTLOADER_H -#include "rtloader_mem.h" #include "rtloader_types.h" #include @@ -33,12 +32,7 @@ class RtLoader { public: //! Constructor. - RtLoader(cb_memory_tracker_t memtrack_cb) - : _error() - , _errorFlag(false) - { - _set_memory_tracker_cb(memtrack_cb); - }; + RtLoader(cb_memory_tracker_t memtrack_cb); //! Destructor. virtual ~RtLoader(){}; @@ -450,6 +444,24 @@ class RtLoader */ virtual void setGetProcessStartTimeCb(cb_get_process_start_time_t) = 0; + //! initPymemStats member. + /*! + Install python allocator hooks. + */ + virtual void initPymemStats() + { + } + + //! getPymemStats member. + /*! + \param stats Stats snapshot output. + + Retrieve a snapshot python allocator statistics. + */ + virtual void getPymemStats(pymem_stats_t &stats) + { + } + private: mutable std::string _error; /*!< string containing a RtLoader error */ mutable bool _errorFlag; /*!< boolean indicating whether an error was set on RtLoader */ diff --git a/rtloader/include/rtloader_types.h b/rtloader/include/rtloader_types.h index e2c75679f19f8..681afbba54840 100644 --- a/rtloader/include/rtloader_types.h +++ b/rtloader/include/rtloader_types.h @@ -86,6 +86,10 @@ typedef enum { DATADOG_AGENT_CRITICAL = 50 } log_level_t; +typedef struct pymem_stats_s { + size_t inuse, alloc; +} pymem_stats_t; + /* * custom builtins */ diff --git a/rtloader/rtloader/api.cpp b/rtloader/rtloader/api.cpp index 04de854276030..af5fe74b5972b 100644 --- a/rtloader/rtloader/api.cpp +++ b/rtloader/rtloader/api.cpp @@ -600,3 +600,19 @@ void set_is_excluded_cb(rtloader_t *rtloader, cb_is_excluded_t cb) { AS_TYPE(RtLoader, rtloader)->setIsExcludedCb(cb); } + +/* + * python allocator stats API + */ +void init_pymem_stats(rtloader_t *rtloader) +{ + AS_TYPE(RtLoader, rtloader)->initPymemStats(); +} + +void get_pymem_stats(rtloader_t *rtloader, pymem_stats_t *stats) +{ + if (stats == NULL) { + return; + } + AS_TYPE(RtLoader, rtloader)->getPymemStats(*stats); +} diff --git a/rtloader/rtloader/rtloader.cpp b/rtloader/rtloader/rtloader.cpp index 6b5b5f448ce41..e0d083abb1403 100644 --- a/rtloader/rtloader/rtloader.cpp +++ b/rtloader/rtloader/rtloader.cpp @@ -7,6 +7,13 @@ #include "rtloader.h" #include "rtloader_mem.h" +RtLoader::RtLoader(cb_memory_tracker_t memtrack_cb) + : _error() + , _errorFlag(false) +{ + _set_memory_tracker_cb(memtrack_cb); +}; + void RtLoader::setError(const std::string &msg) const { _errorFlag = true; diff --git a/rtloader/three/CMakeLists.txt b/rtloader/three/CMakeLists.txt index 1a26bd29f5beb..93822e6904b42 100644 --- a/rtloader/three/CMakeLists.txt +++ b/rtloader/three/CMakeLists.txt @@ -36,6 +36,7 @@ configure_file(constants.h.in constants.h) include_directories(${CMAKE_CURRENT_BINARY_DIR}) add_library(datadog-agent-three SHARED three.cpp + three_mem.cpp ../common/cgo_free.c ../common/stringutils.c ../common/log.c diff --git a/rtloader/three/three.cpp b/rtloader/three/three.cpp index 0e98281a5e4c8..463a28e13aa5a 100644 --- a/rtloader/three/three.cpp +++ b/rtloader/three/three.cpp @@ -38,6 +38,9 @@ Three::Three(const char *python_home, const char *python_exe, cb_memory_tracker_ , _pythonExe(NULL) , _baseClass(NULL) , _pythonPaths() + , _pymallocPrev{ 0 } + , _pymemInuse(0) + , _pymemAlloc(0) { initPythonHome(python_home); diff --git a/rtloader/three/three.h b/rtloader/three/three.h index e36648b09a02e..ee30868afa237 100644 --- a/rtloader/three/three.h +++ b/rtloader/three/three.h @@ -13,6 +13,7 @@ # error "DATADOG_AGENT_TWO and DATADOG_AGENT_THREE are mutually exclusive - define only one of the two." #endif +#include #include #include #include @@ -110,6 +111,9 @@ class Three : public RtLoader void setObfuscateSqlExecPlanCb(cb_obfuscate_sql_exec_plan_t); void setGetProcessStartTimeCb(cb_get_process_start_time_t); + void initPymemStats(); + void getPymemStats(pymem_stats_t &); + // _util API virtual void setSubprocessOutputCb(cb_get_subprocess_output_t); @@ -185,6 +189,98 @@ class Three : public RtLoader PyObject *_baseClass; /*!< PyObject * pointer to the base Agent check class */ PyPaths _pythonPaths; /*!< string vector containing paths in the PYTHONPATH */ PyThreadState *_threadState; /*!< PyThreadState * pointer to the saved Python interpreter thread state */ + + //! pymallocAlloc member. + /*! + \return Pointer value returned by _pymallocPrev.alloc. + + This member function calls _pymallocPrev.alloc and updates allocation statistics if the + allocation was successful. + */ + void *pymallocAlloc(size_t size); + + //! pymallocFree member. + /*! + \brief This member function calls _pymallocPrev.free and updates allocation statistics. + */ + void pymallocFree(void *ptr, size_t size); + + //! pymallocAllocCb static member. + /*! + \brief Static trampoline function for pymallocAlloc to comply with the PyObjectArenaAllocator API. + */ + static void *pymallocAllocCb(void *ctx, size_t size); + + //! pymallocFreeCb static member. + /*! + \brief Static trampoline function for pymallocFree to comply with the PyObjectArenaAllocator API. + */ + static void pymallocFreeCb(void *ctx, void *ptr, size_t size); + + //! pyrawTrackAlloc member. + /*! + \brief Update allocation stats after a call to pyraw alloc functions. + \param ptr Pointer to the allocation. May be null. + */ + void pyrawTrackAlloc(void *ptr); + + //! pyrawTrackFree member. + /*! + \brief Update allocation stats after a call to pyrawFree. + \param ptr Pointer to the allocation. May be null. + */ + void pyrawTrackFree(void *ptr); + + //! pyrawMalloc member. + /*! + \brief Implements PyMemAllocatorEx.malloc. + */ + void *pyrawMalloc(size_t size); + + //! pyrawCalloc member. + /*! + \brief Implements PyMemAllocatorEx.calloc. + */ + void *pyrawCalloc(size_t nelem, size_t elsize); + + //! pyrawRealloc member. + /*! + \brief Implements PyMemAllocatorEx.realloc. + */ + void *pyrawRealloc(void *ptr, size_t new_size); + //! pyrawFree member. + /*! + \brief Implements PyMemAllocatorEx.free. + */ + void pyrawFree(void *ptr); + + //! pyrawMallocCb static member. + /*! + \brief Trampoline function for pyrawMalloc to comply with the PyMemAllocatorEx API. + */ + static void *pyrawMallocCb(void *ctx, size_t size); + + //! pyrawCallocCb static member. + /*! + \brief Trampoline function for pyrawCalloc to comply with the PyMemAllocatorEx API. + */ + static void *pyrawCallocCb(void *ctx, size_t nelem, size_t elsize); + + //! pyrawReallocCb static member. + /*! + \brief Trampoline function for pyrawRealloc to comply with the PyMemAllocatorEx API. + */ + static void *pyrawReallocCb(void *ctx, void *ptr, size_t new_size); + + //! pyrawFreeCb static member. + /*! + \brief Trampoline function for pyrawFree to comply with the PyMemAllocatorEx API. + */ + static void pyrawFreeCb(void *ctx, void *ptr); + + PyObjectArenaAllocator _pymallocPrev; //!< Previous value of the global python arena allocator backend. + std::atomic_size_t _pymemInuse; //!< Number of bytes currently allocated. + std::atomic_size_t _pymemAlloc; //!< Total number of bytes allocated since the start of the process. }; #endif diff --git a/rtloader/three/three_mem.cpp b/rtloader/three/three_mem.cpp new file mode 100644 index 0000000000000..53245f5cb24fe --- /dev/null +++ b/rtloader/three/three_mem.cpp @@ -0,0 +1,185 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog +// (https://www.datadoghq.com/). +// Copyright 2019-present Datadog, Inc. + +// Tracking allocations in Python interpreter. +// +// See https://docs.python.org/3/c-api/memory.html#customize-memory-allocators [1] +// +// Python allocates memory using two mechanisms: pymalloc for small, +// short lived allocations, which constitute the bulk of memory usage, +// and RAW allocator for larger chunks of memory. We don't track two +// types of allocations separately, as the distinction exists largely +// inside Python implementation, out of reach for both users and +// module authors. + +#include "three.h" + +#if __linux__ || _WIN32 +# include +#elif __APPLE__ || __FreeBSD__ +# include +#endif + +void Three::initPymemStats() +{ + PyObject_GetArenaAllocator(&_pymallocPrev); + PyObjectArenaAllocator alloc{ + .ctx = static_cast(this), + .alloc = Three::pymallocAllocCb, + .free = Three::pymallocFreeCb, + }; + PyObject_SetArenaAllocator(&alloc); + + PyMemAllocatorEx alloc_raw{ + .ctx = static_cast(this), + .malloc = Three::pyrawMallocCb, + .calloc = Three::pyrawCallocCb, + .realloc = Three::pyrawReallocCb, + .free = Three::pyrawFreeCb, + }; + PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &alloc_raw); +} + +void Three::getPymemStats(pymem_stats_t &s) +{ + s.inuse = _pymemInuse; + s.alloc = _pymemAlloc; +} + +// Tracking allocations by Pymalloc. Pymalloc is the optimized +// allocator used for small-sized allocations in OBJ and MEM +// domains. These functions track the amount of memory requested by the +// allocator from the OS, not how much is actually used by currently +// reachable python objects (IOW, pymalloc keeps some unused memory +// around internally to speed up allocations). +void *Three::pymallocAlloc(size_t size) +{ + void *ptr = _pymallocPrev.alloc(_pymallocPrev.ctx, size); + if (ptr != NULL) { + _pymemInuse += size; + _pymemAlloc += size; + } + return ptr; +} + +void Three::pymallocFree(void *ptr, size_t size) +{ + _pymallocPrev.free(_pymallocPrev.ctx, ptr, size); + _pymemInuse -= size; +} + +void *Three::pymallocAllocCb(void *ctx, size_t size) +{ + return static_cast(ctx)->pymallocAlloc(size); +} + +void Three::pymallocFreeCb(void *ctx, void *ptr, size_t size) +{ + static_cast(ctx)->pymallocFree(ptr, size); +} + +// Tracking allocations in RAW python domain. This avoids the need to +// track individual pointers by using non-standard functions present +// on all supported platforms that return allocation size for a given +// pointer (see pyrawAllocSize). +// +// This explicitly calls the C allocator instead of adding layer on +// top of the built-in python allocator, to be sure that our pointers +// come from malloc and not some other kind of allocator, and are +// compatible with malloc_usable_size. + +static size_t pyrawAllocSize(void *ptr) +{ +#if __linux__ + return ::malloc_usable_size(ptr); +#elif _WIN32 + return ::_msize(ptr); +#elif __APPLE__ || __FreeBSD__ + return ::malloc_size(ptr); +#else + return 0; +#endif +} + +void Three::pyrawTrackAlloc(void *ptr) +{ + if (ptr == NULL) { + return; + } + size_t size = pyrawAllocSize(ptr); + _pymemInuse += size; + _pymemAlloc += size; +} + +void Three::pyrawTrackFree(void *ptr) +{ + if (ptr == NULL) { + return; + } + size_t size = pyrawAllocSize(ptr); + _pymemInuse -= size; +} + +void *Three::pyrawMalloc(size_t size) +{ + // Required by Python, see [1] + if (size == 0) { + size = 1; + } + void *ptr = ::malloc(size); + pyrawTrackAlloc(ptr); + return ptr; +} + +void *Three::pyrawCalloc(size_t nelem, size_t elsize) +{ + // Required by Python, see [1] + if (nelem == 0 || elsize == 0) { + nelem = 1; + elsize = 1; + } + void *ptr = ::calloc(nelem, elsize); + pyrawTrackAlloc(ptr); + return ptr; +} + +void *Three::pyrawRealloc(void *ptr, size_t size) +{ + // Required by Python, see [1] + if (size == 0) { + size = 1; + } + pyrawTrackFree(ptr); + ptr = ::realloc(ptr, size); + pyrawTrackAlloc(ptr); + return ptr; +} + +void Three::pyrawFree(void *ptr) +{ + pyrawTrackFree(ptr); + ::free(ptr); +} + +void *Three::pyrawMallocCb(void *ctx, size_t size) +{ + return static_cast(ctx)->pyrawMalloc(size); +} + +void *Three::pyrawCallocCb(void *ctx, size_t nelem, size_t elsize) +{ + return static_cast(ctx)->pyrawCalloc(nelem, elsize); +} + +void *Three::pyrawReallocCb(void *ctx, void *ptr, size_t new_size) +{ + return static_cast(ctx)->pyrawRealloc(ptr, new_size); +} + +void Three::pyrawFreeCb(void *ctx, void *ptr) +{ + static_cast(ctx)->pyrawFree(ptr); +} diff --git a/tasks/__init__.py b/tasks/__init__.py index ebf7c716fe56d..20eab67383e09 100644 --- a/tasks/__init__.py +++ b/tasks/__init__.py @@ -14,6 +14,7 @@ docker, dogstatsd, github, + msi, package, pipeline, process_agent, @@ -105,6 +106,7 @@ ns.add_collection(trace_agent) ns.add_collection(docker) ns.add_collection(dogstatsd) +ns.add_collection(msi) ns.add_collection(github) ns.add_collection(package) ns.add_collection(pipeline) diff --git a/tasks/build_tags.py b/tasks/build_tags.py index 599f0b19f1c22..5f108580ad583 100644 --- a/tasks/build_tags.py +++ b/tasks/build_tags.py @@ -39,6 +39,7 @@ "python", "secrets", "systemd", + "trivy", "zk", "zlib", "test", # used for unit-tests @@ -68,13 +69,26 @@ "python", "secrets", "systemd", + "trivy", "zk", "zlib", } # AGENT_HEROKU_TAGS lists the tags for Heroku agent build AGENT_HEROKU_TAGS = AGENT_TAGS.difference( - {"containerd", "cri", "docker", "ec2", "jetson", "kubeapiserver", "kubelet", "orchestrator", "podman", "systemd"} + { + "containerd", + "cri", + "docker", + "ec2", + "jetson", + "kubeapiserver", + "kubelet", + "orchestrator", + "podman", + "systemd", + "trivy", + } ) # CLUSTER_AGENT_TAGS lists the tags needed when building the cluster-agent @@ -91,7 +105,7 @@ # PROCESS_AGENT_TAGS lists the tags necessary to build the process-agent PROCESS_AGENT_TAGS = AGENT_TAGS.union({"clusterchecks", "fargateprocess", "orchestrator"}).difference( - {"otlp", "python"} + {"otlp", "python", "trivy"} ) # PROCESS_AGENT_HEROKU_TAGS lists the tags necessary to build the process-agent for Heroku @@ -103,7 +117,7 @@ SECURITY_AGENT_TAGS = {"netcgo", "secrets", "docker", "containerd", "kubeapiserver", "kubelet", "podman", "zlib"} # SYSTEM_PROBE_TAGS lists the tags necessary to build system-probe -SYSTEM_PROBE_TAGS = AGENT_TAGS.union({"clusterchecks", "linux_bpf", "npm"}).difference("python") +SYSTEM_PROBE_TAGS = AGENT_TAGS.union({"clusterchecks", "linux_bpf", "npm"}).difference({"python", "trivy"}) # TRACE_AGENT_TAGS lists the tags that have to be added when the trace-agent TRACE_AGENT_TAGS = {"docker", "containerd", "kubeapiserver", "kubelet", "otlp", "netcgo", "podman", "secrets"} @@ -126,7 +140,7 @@ ### Tag exclusion lists # List of tags to always remove when not building on Linux -LINUX_ONLY_TAGS = {"netcgo", "systemd", "jetson", "linux_bpf", "podman"} +LINUX_ONLY_TAGS = {"netcgo", "systemd", "jetson", "linux_bpf", "podman", "trivy"} # List of tags to always remove when building on Windows WINDOWS_EXCLUDE_TAGS = {"linux_bpf"} diff --git a/tasks/go.py b/tasks/go.py index 9006c800518d1..78b991581093a 100644 --- a/tasks/go.py +++ b/tasks/go.py @@ -40,7 +40,7 @@ def golangci_lint(ctx, targets, rtloader_root=None, build_tags=None, build="test for target in targets: print(f"running golangci on {target}") ctx.run( - f'golangci-lint run --timeout 15m0s --build-tags "{" ".join(tags)}" {target}/...', + f'golangci-lint run --timeout 20m0s --build-tags "{" ".join(tags)}" {target}/...', env=env, ) @@ -268,7 +268,7 @@ def tidy_all(ctx): @task def check_go_version(ctx): go_version_output = ctx.run('go version') - # result is like "go version go1.18.7 linux/amd64" + # result is like "go version go1.19.5 linux/amd64" running_go_version = go_version_output.stdout.split(' ')[2] with open(".go-version") as f: diff --git a/tasks/libs/pipeline_data.py b/tasks/libs/pipeline_data.py index 8e74ae930d9c7..d691d547a46cc 100644 --- a/tasks/libs/pipeline_data.py +++ b/tasks/libs/pipeline_data.py @@ -67,7 +67,7 @@ def get_failed_jobs(project_name, pipeline_id): FailedJobReason.RUNNER, ), ( - re.compile(r'WARNING: Failed to pull image with policy "always":.*:.*\(.*\)'), + re.compile(r'WARNING: Failed to pull image with policy "always":.*\(.*\)'), FailedJobReason.RUNNER, ), # k8s Gitlab runner init failures diff --git a/tasks/libs/pipeline_notifications.py b/tasks/libs/pipeline_notifications.py index 1fe005fc0e022..555ce689063b8 100644 --- a/tasks/libs/pipeline_notifications.py +++ b/tasks/libs/pipeline_notifications.py @@ -11,12 +11,10 @@ "@DataDog/agent-platform": DEFAULT_SLACK_CHANNEL, "@DataDog/container-integrations": "#container-integrations", "@DataDog/platform-integrations": "#platform-integrations", - "@DataDog/agent-network": "#network-agent", "@DataDog/agent-security": "#security-and-compliance-agent-ops", "@DataDog/agent-apm": "#apm-agent", - "@DataDog/infrastructure-integrations": "#infrastructure-integrations", + "@DataDog/network-device-monitoring": "#network-device-monitoring", "@DataDog/processes": "#process-agent-ops", - "@DataDog/agent-core": "#agent-core", "@DataDog/agent-metrics-logs": "#agent-metrics-logs", "@DataDog/agent-shared-components": "#agent-shared-components", "@DataDog/container-app": "#container-app", @@ -27,6 +25,7 @@ "@DataDog/ebpf-platform": "#ebpf-platform", "@DataDog/Networks": "#network-performance-monitoring", "@DataDog/universal-service-monitoring": "#universal-service-monitoring", + "@DataDog/windows-agent": "#windows-agent", "@DataDog/windows-kernel-integrations": "#windows-kernel-integrations", "@DataDog/opentelemetry": "#opentelemetry-ops", } diff --git a/tasks/licenses.py b/tasks/licenses.py index 4c91d1ebab438..9cf1f39053789 100644 --- a/tasks/licenses.py +++ b/tasks/licenses.py @@ -196,7 +196,7 @@ def find_copyright_for(package, overrides, ctx): for filename in COPYRIGHT_LOCATIONS: filename = os.path.join(pkgdir, filename) - if os.path.exists(filename): + if os.path.isfile(filename): for line in open(filename, encoding="utf-8"): mo = COPYRIGHT_RE.search(line) if not mo: diff --git a/tasks/modules.py b/tasks/modules.py index 53b6af962a36d..647d99fe6e6c3 100644 --- a/tasks/modules.py +++ b/tasks/modules.py @@ -134,6 +134,7 @@ def dependency_path(self, agent_version): "pkg/remoteconfig/state": GoModule("pkg/remoteconfig/state", independent=True), "pkg/util/cgroups": GoModule("pkg/util/cgroups", independent=True, condition=lambda: sys.platform == "linux"), "pkg/util/log": GoModule("pkg/util/log", independent=True), + "pkg/util/pointer": GoModule("pkg/util/pointer", independent=True), "pkg/util/scrubber": GoModule("pkg/util/scrubber", independent=True), } diff --git a/tasks/msi.py b/tasks/msi.py new file mode 100644 index 0000000000000..2d54578901a49 --- /dev/null +++ b/tasks/msi.py @@ -0,0 +1,111 @@ +""" +msi namespaced tasks +""" + + +import glob +import os +import shutil +import sys + +from invoke import task +from invoke.exceptions import Exit, UnexpectedExit + +from tasks.ssm import get_pfx_pass, get_signing_cert +from tasks.utils import get_version + +# constants +OUTPUT_PATH = os.path.join(os.getcwd(), "omnibus", "pkg") +AGENT_TAG = "datadog/agent:master" +SOURCE_ROOT_DIR = os.path.join(os.getcwd(), "tools", "windows", "DatadogAgentInstaller") +BUILD_ROOT_DIR = os.path.join('C:\\', "dev", "msi", "DatadogAgentInstaller") +BUILD_SOURCE_DIR = os.path.join(BUILD_ROOT_DIR, "src") +BUILD_OUTPUT_DIR = os.path.join(BUILD_ROOT_DIR, "output") + +NUGET_PACKAGES_DIR = os.path.join(BUILD_ROOT_DIR, 'packages') +NUGET_CONFIG_FILE = os.path.join(BUILD_ROOT_DIR, 'NuGet.config') +NUGET_CONFIG_BASE = ''' + + +''' + + +@task +def build(ctx, vstudio_root=None, arch="x64", major_version='7', python_runtimes='3', debug=False): + """ + Build the MSI installer for the agent + """ + + if sys.platform != 'win32': + print("Building the MSI installer is only for available on Windows") + raise Exit(code=1) + + env = {} + + env['PACKAGE_VERSION'] = get_version( + ctx, include_git=True, url_safe=True, major_version=major_version, include_pipeline_id=True + ) + env['PY_RUNTIMES'] = python_runtimes + if os.environ.get('SIGN_WINDOWS'): + # get certificate and password from ssm + pfxfile = get_signing_cert(ctx) + pfxpass = get_pfx_pass(ctx) + env['SIGN_PFX'] = str(pfxfile) + env['SIGN_PFX_PW'] = str(pfxpass) + + env['AGENT_INSTALLER_OUTPUT_DIR'] = f'{BUILD_OUTPUT_DIR}' + env['NUGET_PACKAGES_DIR'] = f'{NUGET_PACKAGES_DIR}' + print(f"arch is {arch}") + + cmd = "" + configuration = "Release" + if debug: + configuration = "Debug" + + # Copy source to build dir + # Hyper-v has a bug that causes the host's vmwp.exe to hold file locks indefinitely, + # preventing the build from overwriting output files. To work around this copy the + # source into the container, build on the container FS, then copy the output + # back to the mount. + try: + ctx.run(f'robocopy {SOURCE_ROOT_DIR} {BUILD_SOURCE_DIR} /MIR /XF packages embedded3.COMPRESSED', hide=True) + except UnexpectedExit as e: + # robocopy can return non-zero success codes + # Per https://ss64.com/nt/robocopy-exit.html + # An Exit Code of 0-7 is success and any value >= 8 indicates that there was at least one failure during the copy operation. + if e.result.return_code >= 8: + # returned an error code, reraise exception + raise + + # Create NuGet.config to set packages dir + with open(NUGET_CONFIG_FILE, 'w') as f: + f.write(NUGET_CONFIG_BASE) + ctx.run(f'nuget config -set repositoryPath={NUGET_PACKAGES_DIR} -configfile {NUGET_CONFIG_FILE}') + + # Construct build command line + if not os.getenv("VCINSTALLDIR"): + print("VC Not installed in environment; checking other locations") + + vsroot = vstudio_root or os.getenv('VSTUDIO_ROOT') + if not vsroot: + print("Must have visual studio installed") + raise Exit(code=2) + batchfile = "vcvars64.bat" + if arch == "x86": + print("Only 64 bit Windows is supported.") + raise Exit(code=3) + vs_env_bat = f'{vsroot}\\VC\\Auxiliary\\Build\\{batchfile}' + cmd = f'call "{vs_env_bat}" && cd {BUILD_SOURCE_DIR} && nuget restore && msbuild /p:Configuration={configuration} /p:Platform="x64"' + else: + cmd = f'cd {BUILD_SOURCE_DIR} && nuget restore && msbuild {BUILD_SOURCE_DIR} /p:Configuration={configuration} /p:Platform="x64"' + + print(f"Build Command: {cmd}") + + # Try to run the command 3 times to alleviate transient + # network failures + succeeded = ctx.run(cmd, warn=True, env=env) + if not succeeded: + raise Exit("Failed to build the MSI installer.", code=1) + + for artefact in glob.glob(f'{BUILD_SOURCE_DIR}\\WixSetup\\*.msi'): + shutil.copy2(artefact, OUTPUT_PATH) diff --git a/tasks/process_agent.py b/tasks/process_agent.py index d7d3f6eb93c61..ef773980bf7f4 100644 --- a/tasks/process_agent.py +++ b/tasks/process_agent.py @@ -126,6 +126,7 @@ def build_dev_image(ctx, image=None, push=False, base_image="datadog/agent:lates ctx.run(f"chmod 0444 {docker_context}/*.o {docker_context}/*.c") ctx.run(f"cp /opt/datadog-agent/embedded/bin/clang-bpf {docker_context}") ctx.run(f"cp /opt/datadog-agent/embedded/bin/llc-bpf {docker_context}") + ctx.run(f"cp pkg/network/java/agent-usm.jar {docker_context}") with ctx.cd(docker_context): # --pull in the build will force docker to grab the latest base image @@ -154,6 +155,7 @@ def gen_mocks(ctx): """ interfaces = { + "./cmd/process-agent": ["Submitter"], "./pkg/process/checks": ["Check", "CheckWithRealTime"], "./pkg/process/net": ["SysProbeUtil"], "./pkg/process/procutil": ["Probe"], diff --git a/tasks/security_agent.py b/tasks/security_agent.py index a212005564dc3..39f9c04eed544 100644 --- a/tasks/security_agent.py +++ b/tasks/security_agent.py @@ -18,7 +18,6 @@ CURRENT_ARCH, build_cws_object_files, check_for_ninja, - generate_runtime_files, ninja_define_ebpf_compiler, ninja_define_exe_compiler, ) @@ -568,6 +567,31 @@ def cws_go_generate(ctx): ctx.run("go generate ./pkg/security/...") +@task +def generate_syscall_table(ctx): + def single_run(ctx, table_url, output_file, output_string_file, abis=None): + if abis: + abis = f"-abis {abis}" + ctx.run( + f"go run github.com/DataDog/datadog-agent/pkg/security/secl/model/syscall_table_generator -table-url {table_url} -output {output_file} -output-string {output_string_file} {abis}" + ) + + linux_version = "v6.1" + single_run( + ctx, + f"https://raw.githubusercontent.com/torvalds/linux/{linux_version}/arch/x86/entry/syscalls/syscall_64.tbl", + "pkg/security/secl/model/syscalls_linux_amd64.go", + "pkg/security/secl/model/syscalls_string_linux_amd64.go", + abis="common,64", + ) + single_run( + ctx, + f"https://raw.githubusercontent.com/torvalds/linux/{linux_version}/include/uapi/asm-generic/unistd.h", + "pkg/security/secl/model/syscalls_linux_arm64.go", + "pkg/security/secl/model/syscalls_string_linux_arm64.go", + ) + + @task def generate_btfhub_constants(ctx, archive_path, force_refresh=False): output_path = "./pkg/security/probe/constantfetch/btfhub/constants.json" @@ -656,7 +680,6 @@ def go_generate_check(ctx): [cws_go_generate], [generate_cws_documentation], [gen_mocks], - [generate_runtime_files], ] failing_tasks = [] @@ -709,3 +732,24 @@ def kitchen_prepare(ctx): ctx.run(f"mkdir -p {ebpf_runtime_dir}") ctx.run(f"cp {bytecode_build_dir}/runtime-security* {ebpf_bytecode_dir}") ctx.run(f"cp {bytecode_build_dir}/runtime/runtime-security* {ebpf_runtime_dir}") + + +@task +def run_ebpf_unit_tests(ctx, verbose=False, trace=False): + build_cws_object_files( + ctx, + major_version='7', + arch=CURRENT_ARCH, + kernel_release=None, + with_unit_test=True, + ) + + flags = '-tags ebpf_bindata' + if verbose: + flags += " -test.v" + + args = '-args' + if trace: + args += " -trace" + + ctx.run(f"go test {flags} ./pkg/security/ebpf/tests/... {args}") diff --git a/tasks/system_probe.py b/tasks/system_probe.py index b50bed1a62f66..227ce4831ec51 100644 --- a/tasks/system_probe.py +++ b/tasks/system_probe.py @@ -16,6 +16,7 @@ from invoke.exceptions import Exit from .build_tags import get_default_build_tags +from .libs.common.color import color_message from .libs.ninja_syntax import NinjaWriter from .utils import REPO_PATH, bin_name, get_build_flags, get_version_numeric_only @@ -27,8 +28,6 @@ NPM_TAG = "npm" DNF_TAG = "dnf" -CHECK_SOURCE_CMD = "grep -v '^//' {src_file} | if grep -q ' inline ' ; then echo -e '\u001b[7mPlease use __always_inline instead of inline in {src_file}\u001b[0m';exit 1;fi" - KITCHEN_DIR = os.getenv('DD_AGENT_TESTING_DIR') or os.path.normpath(os.path.join(os.getcwd(), "test", "kitchen")) KITCHEN_ARTIFACT_DIR = os.path.join(KITCHEN_DIR, "site-cookbooks", "dd-system-probe-check", "files", "default", "tests") TEST_PACKAGES_LIST = ["./pkg/ebpf/...", "./pkg/network/...", "./pkg/collector/corechecks/ebpf/..."] @@ -66,9 +65,9 @@ def ninja_define_windows_resources(ctx, nw, major_version): ) -def ninja_define_ebpf_compiler(nw, strip_object_files=False, kernel_release=None): +def ninja_define_ebpf_compiler(nw, strip_object_files=False, kernel_release=None, with_unit_test=False): nw.variable("target", "-emit-llvm") - nw.variable("ebpfflags", get_ebpf_build_flags()) + nw.variable("ebpfflags", get_ebpf_build_flags(with_unit_test)) nw.variable("kheaders", get_kernel_headers_flags(kernel_release)) nw.rule( @@ -212,7 +211,7 @@ def ninja_network_ebpf_programs(nw, build_dir, co_re_build_dir): network_flags = "-Ipkg/network/ebpf/c -g" network_co_re_flags = f"-I{network_co_re_dir}" - network_programs = ["dns", "offset-guess", "tracer", "http"] + network_programs = ["dns", "offset-guess", "tracer", "http", "usm_events_test"] network_co_re_programs = [] for prog in network_programs: @@ -229,7 +228,7 @@ def ninja_network_ebpf_programs(nw, build_dir, co_re_build_dir): def ninja_container_integrations_ebpf_programs(nw, co_re_build_dir): container_integrations_co_re_dir = os.path.join("pkg", "collector", "corechecks", "ebpf", "c", "runtime") container_integrations_co_re_flags = f"-I{container_integrations_co_re_dir}" - container_integrations_co_re_programs = ["oom-kill"] + container_integrations_co_re_programs = ["oom-kill", "tcp-queue-length"] for prog in container_integrations_co_re_programs: infile = os.path.join(container_integrations_co_re_dir, f"{prog}-kern.c") @@ -264,7 +263,6 @@ def ninja_runtime_compilation_files(nw): rule="headerincl", ) rc_outputs.extend([c_file, hash_file]) - nw.build(rule="phony", inputs=rc_outputs, outputs=["runtime-compilation"]) def ninja_cgo_type_files(nw, windows): @@ -301,17 +299,20 @@ def ninja_cgo_type_files(nw, windows): "pkg/network/ebpf/c/prebuilt/offset-guess.h", ], "pkg/network/protocols/http/gotls/go_tls_types.go": [ - "pkg/network/ebpf/c/protocols/go-tls-types.h", + "pkg/network/ebpf/c/protocols/tls/go-tls-types.h", ], "pkg/network/protocols/http/http_types.go": [ "pkg/network/ebpf/c/tracer.h", - "pkg/network/ebpf/c/protocols/tags-types.h", - "pkg/network/ebpf/c/protocols/http-types.h", - "pkg/network/ebpf/c/protocols/protocol-classification-defs.h", + "pkg/network/ebpf/c/protocols/tls/tags-types.h", + "pkg/network/ebpf/c/protocols/http/types.h", + "pkg/network/ebpf/c/protocols/classification/defs.h", ], "pkg/network/telemetry/telemetry_types.go": [ "pkg/ebpf/c/telemetry_types.h", ], + "pkg/network/protocols/events/types.go": [ + "pkg/network/ebpf/c/protocols/events-types.h", + ], } nw.rule( name="godefs", @@ -351,6 +352,7 @@ def ninja_generate( debug=False, strip_object_files=False, kernel_release=None, + with_unit_test=False, ): build_dir = os.path.join("pkg", "ebpf", "bytecode", "build") co_re_build_dir = os.path.join(build_dir, "co-re") @@ -369,7 +371,7 @@ def ninja_generate( nw.build(inputs=[in_path], outputs=[rcout], rule="windmc", variables={"rcdir": in_dir}) nw.build(inputs=[rcout], outputs=["cmd/system-probe/rsrc.syso"], rule="windres") else: - ninja_define_ebpf_compiler(nw, strip_object_files, kernel_release) + ninja_define_ebpf_compiler(nw, strip_object_files, kernel_release, with_unit_test) ninja_define_co_re_compiler(nw) ninja_network_ebpf_programs(nw, build_dir, co_re_build_dir) ninja_security_ebpf_programs(nw, build_dir, debug, kernel_release) @@ -395,6 +397,7 @@ def build( debug=False, strip_object_files=False, strip_binary=False, + with_unit_test=False, ): """ Build the system-probe @@ -407,6 +410,7 @@ def build( kernel_release=kernel_release, debug=debug, strip_object_files=strip_object_files, + with_unit_test=with_unit_test, ) build_sysprobe_binary( @@ -570,7 +574,7 @@ def chdir(dirname=None): @task -def kitchen_prepare(ctx, windows=is_windows, kernel_release=None): +def kitchen_prepare(ctx, windows=is_windows, kernel_release=None, ci=False): """ Compile test suite for kitchen """ @@ -645,6 +649,9 @@ def kitchen_prepare(ctx, windows=is_windows, kernel_release=None): if os.path.exists(cf): shutil.copy(cf, files_dir) + if not ci: + kitchen_prepare_btfs(ctx, files_dir) + ctx.run(f"go build -o {files_dir}/test2json -ldflags=\"-s -w\" cmd/test2json", env={"CGO_ENABLED": "0"}) @@ -888,7 +895,7 @@ def get_linux_header_dirs(kernel_release=None, minimal_kernel_release=None): return dirs -def get_ebpf_build_flags(): +def get_ebpf_build_flags(unit_test=False): flags = [] flags.extend( [ @@ -899,6 +906,8 @@ def get_ebpf_build_flags(): '-DCOMPILE_PREBUILT', ] ) + if unit_test: + flags.extend(['-D__BALOUM__']) flags.extend( [ '-Wno-unused-value', @@ -954,16 +963,16 @@ def get_kernel_headers_flags(kernel_release=None, minimal_kernel_release=None): def check_for_inline(ctx): - for f in get_ebpf_targets(): - if os.path.basename(f) == "bpf_helpers.h": - continue - - for p in [ebpf_check_source_file(ctx, parallel_build=True, src_file=f)]: - p.join() - - -def ebpf_check_source_file(ctx, parallel_build, src_file): - return ctx.run(CHECK_SOURCE_CMD.format(src_file=src_file), echo=False, asynchronous=parallel_build) + print("checking for invalid inline usage...") + src_dirs = ["pkg/ebpf/c/", "pkg/network/ebpf/c/", "pkg/security/ebpf/c/"] + grep_filter = "--include='*.c' --include '*.h'" + grep_exclude = "--exclude='bpf_helpers.h'" + pattern = "'^[^/]*\\binline\\b'" + grep_res = ctx.run(f"grep -n {grep_filter} {grep_exclude} -r {pattern} {' '.join(src_dirs)}", warn=True, hide=True) + if grep_res.ok: + print(color_message("Use __always_inline instead of inline:", "red")) + print(grep_res.stdout) + raise Exit(code=1) def run_ninja( @@ -977,10 +986,13 @@ def run_ninja( kernel_release=None, debug=False, strip_object_files=False, + with_unit_test=False, ): check_for_ninja(ctx) nf_path = os.path.join(ctx.cwd, 'system-probe.ninja') - ninja_generate(ctx, nf_path, windows, major_version, arch, debug, strip_object_files, kernel_release) + ninja_generate( + ctx, nf_path, windows, major_version, arch, debug, strip_object_files, kernel_release, with_unit_test + ) explain_opt = "-d explain" if explain else "" if task: ctx.run(f"ninja {explain_opt} -f {nf_path} -t {task}") @@ -1037,6 +1049,7 @@ def build_object_files( kernel_release=None, debug=False, strip_object_files=False, + with_unit_test=False, ): build_dir = os.path.join("pkg", "ebpf", "bytecode", "build") @@ -1044,16 +1057,14 @@ def build_object_files( verify_system_clang_version(ctx) # if clang is missing, subsequent calls to ctx.run("clang ...") will fail silently setup_runtime_clang(ctx) - print("checking for clang executable...") - ctx.run("which clang") if strip_object_files: print("checking for llvm-strip...") ctx.run("which llvm-strip") check_for_inline(ctx) - ctx.run(f"mkdir -p {build_dir}/runtime") - ctx.run(f"mkdir -p {build_dir}/co-re") + ctx.run(f"mkdir -p -m 0755 {build_dir}/runtime") + ctx.run(f"mkdir -p -m 0755 {build_dir}/co-re") run_ninja( ctx, @@ -1064,17 +1075,46 @@ def build_object_files( kernel_release=kernel_release, debug=debug, strip_object_files=strip_object_files, + with_unit_test=with_unit_test, ) if not windows: sudo = "" if is_root() else "sudo" ctx.run(f"{sudo} mkdir -p {EMBEDDED_SHARE_DIR}") - ctx.run(f"{sudo} cp -R {build_dir}/* {EMBEDDED_SHARE_DIR}") - ctx.run(f"{sudo} chown root:root -R {EMBEDDED_SHARE_DIR}") + + if ctx.run("command -v rsync >/dev/null 2>&1", warn=True, hide=True).ok: + rsync_filter = "--filter='+ */' --filter='+ *.o' --filter='+ *.c' --filter='- *'" + ctx.run( + f"{sudo} rsync --chmod=F644 --chown=root:root -rvt {rsync_filter} {build_dir}/ {EMBEDDED_SHARE_DIR}" + ) + else: + with ctx.cd(build_dir): + + def cp_cmd(out_dir): + dest = os.path.join(EMBEDDED_SHARE_DIR, out_dir) + return " ".join( + [ + f"-execdir cp -p {{}} {dest}/ \\;", + f"-execdir chown root:root {dest}/{{}} \\;", + f"-execdir chmod 0644 {dest}/{{}} \\;", + ] + ) + + ctx.run(f"{sudo} find . -maxdepth 1 -type f -name '*.o' {cp_cmd('.')}") + ctx.run(f"{sudo} mkdir -p {EMBEDDED_SHARE_DIR}/co-re") + ctx.run(f"{sudo} find ./co-re -maxdepth 1 -type f -name '*.o' {cp_cmd('co-re')}") + ctx.run(f"{sudo} mkdir -p {EMBEDDED_SHARE_DIR}/runtime") + ctx.run(f"{sudo} find ./runtime -maxdepth 1 -type f -name '*.c' {cp_cmd('runtime')}") def build_cws_object_files( - ctx, major_version='7', arch=CURRENT_ARCH, kernel_release=None, debug=False, strip_object_files=False + ctx, + major_version='7', + arch=CURRENT_ARCH, + kernel_release=None, + debug=False, + strip_object_files=False, + with_unit_test=False, ): run_ninja( ctx, @@ -1084,12 +1124,13 @@ def build_cws_object_files( debug=debug, strip_object_files=strip_object_files, kernel_release=kernel_release, + with_unit_test=with_unit_test, ) @task -def object_files(ctx, kernel_release=None): - build_object_files(ctx, kernel_release=kernel_release) +def object_files(ctx, kernel_release=None, with_unit_test=False): + build_object_files(ctx, kernel_release=kernel_release, with_unit_test=with_unit_test) def clean_object_files( @@ -1107,11 +1148,6 @@ def clean_object_files( ) -# deprecated: this function is only kept to prevent breaking security-agent.go-generate-check -def generate_runtime_files(ctx): - run_ninja(ctx, explain=True, target="runtime-compilation") - - @task def generate_lookup_tables(ctx, windows=is_windows): if windows: @@ -1136,6 +1172,14 @@ def check_for_ninja(ctx): ctx.run("which ninja") +def is_bpftool_compatible(ctx): + try: + ctx.run("bpftool gen min_core_btf 2>&1 | grep -q \"'min_core_btf' needs at least 3 arguments, 0 found\"") + return True + except Exception: + return False + + @contextlib.contextmanager def tempdir(): """ @@ -1148,6 +1192,51 @@ def tempdir(): shutil.rmtree(dirpath) +def kitchen_prepare_btfs(ctx, files_dir, arch=CURRENT_ARCH): + btf_dir = "/opt/datadog-agent/embedded/share/system-probe/ebpf/co-re/btf" + + if arch == "x64": + arch = "x86_64" + elif arch == "arm64": + arch = "aarch64" + + if not os.path.exists(f"{btf_dir}/kitchen-btfs-{arch}.tar.xz"): + exit("BTFs for kitchen test environments not found. Please update & re-provision your dev VM.") + + sudo = "sudo" if not is_root() else "" + ctx.run(f"{sudo} chmod -R 0777 {btf_dir}") + + if not os.path.exists(f"{btf_dir}/kitchen-btfs-{arch}"): + ctx.run( + f"mkdir {btf_dir}/kitchen-btfs-{arch} && " + + f"tar xf {btf_dir}/kitchen-btfs-{arch}.tar.xz -C {btf_dir}/kitchen-btfs-{arch}" + ) + + can_minimize = True + if not is_bpftool_compatible(ctx): + print( + "Cannot minimize BTFs: bpftool version 6 or higher is required: preparing kitchen environment with full sized BTFs instead." + ) + can_minimize = False + + if can_minimize: + co_re_programs = " ".join(glob.glob("/opt/datadog-agent/embedded/share/system-probe/ebpf/co-re/*.o")) + generate_minimized_btfs( + ctx, + source_dir=f"{btf_dir}/kitchen-btfs-{arch}", + output_dir=f"{btf_dir}/minimized-btfs", + input_bpf_programs=co_re_programs, + ) + + ctx.run( + f"cd {btf_dir}/minimized-btfs && " + + "tar -cJf minimized-btfs.tar.xz * && " + + f"mv minimized-btfs.tar.xz {files_dir}" + ) + else: + ctx.run(f"cp {btf_dir}/kitchen-btfs-{arch}.tar.xz {files_dir}/minimized-btfs.tar.xz") + + @task def generate_minimized_btfs( ctx, @@ -1168,28 +1257,60 @@ def generate_minimized_btfs( return ctx.run(f"mkdir -p {output_dir}") - for root, dirs, files in os.walk(source_dir): - path_from_root = os.path.relpath(root, source_dir) - - for dir in dirs: - output_subdir = os.path.join(output_dir, path_from_root, dir) - ctx.run(f"mkdir -p {output_subdir}") - for file in files: - if not file.endswith(".tar.xz"): - continue - - btf_filename = file[: -len(".tar.xz")] - compressed_source_btf_path = os.path.join(root, file) - output_btf_path = os.path.join(output_dir, path_from_root, btf_filename) - compressed_output_btf_path = output_btf_path + ".tar.xz" - - ctx.run(f"tar -xf {compressed_source_btf_path}") - ctx.run(f"bpftool gen min_core_btf {btf_filename} {output_btf_path} {input_bpf_programs}") + check_for_ninja(ctx) - tar_working_directory = os.path.join(output_dir, path_from_root) - ctx.run(f"tar -C {tar_working_directory} -cJf {compressed_output_btf_path} {btf_filename}") - ctx.run(f"rm {output_btf_path}") + ninja_file_path = os.path.join(ctx.cwd, 'generate-minimized-btfs.ninja') + with open(ninja_file_path, 'w') as ninja_file: + nw = NinjaWriter(ninja_file, width=180) + + nw.rule(name="decompress_btf", command="tar -xf $in -C $target_directory") + nw.rule(name="minimize_btf", command="bpftool gen min_core_btf $in $out $input_bpf_programs") + nw.rule(name="compress_minimized_btf", command="tar -cJf $out -C $tar_working_directory $rel_in && rm $in") + + for root, dirs, files in os.walk(source_dir): + path_from_root = os.path.relpath(root, source_dir) + + for d in dirs: + output_subdir = os.path.join(output_dir, path_from_root, d) + ctx.run(f"mkdir -p {output_subdir}") + + for file in files: + if not file.endswith(".tar.xz"): + continue + + btf_filename = file[: -len(".tar.xz")] + minimized_btf_path = os.path.join(output_dir, path_from_root, btf_filename) + + nw.build( + rule="decompress_btf", + inputs=[os.path.join(root, file)], + outputs=[os.path.join(root, btf_filename)], + variables={ + "target_directory": root, + }, + ) + + nw.build( + rule="minimize_btf", + inputs=[os.path.join(root, btf_filename)], + outputs=[minimized_btf_path], + variables={ + "input_bpf_programs": input_bpf_programs, + }, + ) + + nw.build( + rule="compress_minimized_btf", + inputs=[minimized_btf_path], + outputs=[f"{minimized_btf_path}.tar.xz"], + variables={ + "tar_working_directory": os.path.join(output_dir, path_from_root), + "rel_in": btf_filename, + }, + ) + + ctx.run(f"ninja -f {ninja_file_path}") @task diff --git a/tasks/systray.py b/tasks/systray.py index d1bd2bf57a5ee..98c1d898014b7 100644 --- a/tasks/systray.py +++ b/tasks/systray.py @@ -16,7 +16,7 @@ @task -def build(ctx, rebuild=False, race=False, major_version='7', arch="x64", go_mod="mod"): +def build(ctx, debug=False, console=False, rebuild=False, race=False, major_version='7', arch="x64", go_mod="mod"): """ Build the agent. If the bits to include in the build are not specified, the values from `invoke.yaml` will be used. @@ -44,7 +44,14 @@ def build(ctx, rebuild=False, race=False, major_version='7', arch="x64", go_mod= command += "-i cmd/systray/systray.rc -O coff -o cmd/systray/rsrc.syso" ctx.run(command) ldflags = get_version_ldflags(ctx, major_version=major_version) - ldflags += "-s -w -linkmode external -extldflags '-Wl,--subsystem,windows' " + if not debug: + ldflags += "-s -w " + if console: + subsystem = 'console' + else: + subsystem = 'windows' + ldflags += f"-X {REPO_PATH}/cmd/systray/command/command.subsystem={subsystem} " + ldflags += f"-linkmode external -extldflags '-Wl,--subsystem,{subsystem}' " cmd = "go build -mod={go_mod} {race_opt} {build_type} -o {agent_bin} -ldflags=\"{ldflags}\" {REPO_PATH}/cmd/systray" args = { "go_mod": go_mod, @@ -68,7 +75,7 @@ def run(ctx, rebuild=False, race=False, skip_build=False): if not skip_build: build(ctx, rebuild, race) - ctx.run(os.path.join(BIN_PATH, bin_name("ddtray.exe"))) + ctx.run(os.path.join(BIN_PATH, bin_name("ddtray"))) @task @@ -82,4 +89,7 @@ def clean(ctx): # remove the bin/agent folder print("Remove systray executable") - ctx.run("rm -rf ./bin/agent/ddtray.exe") + try: + os.remove(os.path.join(BIN_PATH, bin_name("ddtray"))) + except Exception as e: + print(e) diff --git a/tasks/test.py b/tasks/test.py index d709aa138e549..6ba87ecf72bc2 100644 --- a/tasks/test.py +++ b/tasks/test.py @@ -5,11 +5,13 @@ # Recent versions of Python should be able to use dict and list directly in type hints, # so we only need to check that we don't run this code with old Python versions. +import json import operator import os import platform import re import sys +from collections import defaultdict from contextlib import contextmanager from typing import Dict, List @@ -22,6 +24,7 @@ from .dogstatsd import integration_tests as dsd_integration_tests from .flavor import AgentFlavor from .go import golangci_lint +from .libs.common.color import color_message from .libs.copyright import CopyrightLinter from .libs.junit_upload import add_flavor_to_junitxml, junit_upload_from_tgz, produce_junit_tar, repack_macos_junit_tar from .modules import DEFAULT_MODULES, GoModule @@ -29,7 +32,7 @@ from .utils import DEFAULT_BRANCH, get_build_flags PROFILE_COV = "profile.cov" -GO_TEST_RESULT_TMP_JSON = 'tmp.json' +GO_TEST_RESULT_TMP_JSON = 'module_test_output.json' class TestProfiler: @@ -141,6 +144,18 @@ def lint_flavor( golangci_lint(ctx, targets=module.targets, rtloader_root=rtloader_root, build_tags=build_tags, arch=arch) +class ModuleTestResult: + def __init__(self, path): + # The full path of the module + self.path = path + # Whether the gotestsum command failed for that module + self.failed = False + # Path to the result.json file output by gotestsum (should always be present) + self.result_json_path = None + # Path to the junit file output by gotestsum (only present if specified in inv test) + self.junit_file_path = None + + def test_flavor( ctx, flavor: AgentFlavor, @@ -158,8 +173,7 @@ def test_flavor( """ print(f"--- Flavor {flavor.name}: unit tests") - failed_modules = [] - junit_files = [] + modules_test_results = [] args["go_build_tags"] = " ".join(build_tags) @@ -170,6 +184,8 @@ def test_flavor( args["junit_file_flag"] = junit_file_flag for module in modules: + module_test_result = ModuleTestResult(path=module.full_path()) + print(f"----- Module '{module.full_path()}'") if not module.condition(): print("----- Skipped") @@ -185,21 +201,24 @@ def test_flavor( warn=True, ) + module_test_result.result_json_path = os.path.join(module.full_path(), GO_TEST_RESULT_TMP_JSON) + if res.exited is None or res.exited > 0: - failed_modules.append(module.full_path()) + module_test_result.failed = True if save_result_json: with open(save_result_json, 'ab') as json_file, open( - os.path.join(module.full_path(), GO_TEST_RESULT_TMP_JSON), 'rb' + module_test_result.result_json_path, 'rb' ) as module_file: json_file.write(module_file.read()) if junit_tar: - junit_file_path = os.path.join(module.full_path(), junit_file) - add_flavor_to_junitxml(junit_file_path, flavor) - junit_files.append(junit_file_path) + module_test_result.junit_file_path = os.path.join(module.full_path(), junit_file) + add_flavor_to_junitxml(module_test_result.junit_file_path, flavor) - return junit_files, failed_modules + modules_test_results.append(module_test_result) + + return modules_test_results def coverage_flavor( @@ -420,16 +439,15 @@ def test( "timeout": timeout, "verbose": '-v' if verbose else '', "nocache": nocache, - "json_flag": f'--jsonfile "{GO_TEST_RESULT_TMP_JSON}" ' if save_result_json else "", + # Used to print failed tests at the end of the go test command + "json_flag": f'--jsonfile "{GO_TEST_RESULT_TMP_JSON}" ', "rerun_fails": f"--rerun-fails={rerun_fails}" if rerun_fails else "", } # Test - - failed_modules = {} - junit_files = [] + modules_test_results_per_flavor = {} for flavor, build_tags in unit_tests_tags.items(): - junit_files_for_flavor, failed_modules_for_flavor = test_flavor( + modules_test_results_per_flavor[flavor] = test_flavor( ctx, flavor=flavor, build_tags=build_tags, @@ -442,33 +460,87 @@ def test( test_profiler=test_profiler, ) - if failed_modules_for_flavor: - failed_modules[flavor] = failed_modules_for_flavor - if junit_files_for_flavor: - junit_files.extend(junit_files_for_flavor) - # Output - if junit_tar: + junit_files = [] + for flavor in flavors: + for module_test_result in modules_test_results_per_flavor[flavor]: + if module_test_result.junit_file_path: + junit_files.append(module_test_result.junit_file_path) + produce_junit_tar(junit_files, junit_tar) if coverage and print_coverage: for flavor in flavors: coverage_flavor(ctx, flavor, modules) + # FIXME(AP-1958): this prints nothing in CI. Commenting out the print line + # in the meantime to avoid confusion if profile: - print("\n--- Top 15 packages sorted by run time:") + # print("\n--- Top 15 packages sorted by run time:") test_profiler.print_sorted(15) - if failed_modules: - failure_string = '\n'.join( - [ - f"{', '.join(failed_modules_for_flavor)} ({flavor.name} flavor)" - for flavor, failed_modules_for_flavor in failed_modules.items() - ] - ) + should_fail = False + for flavor in flavors: + for module_test_result in modules_test_results_per_flavor[flavor]: + if module_test_result.failed: + should_fail = True + failure_string = color_message( + f"Module {module_test_result.path} failed ({flavor.name} flavor)\n", "red" + ) + failed_packages = set() + failed_tests = defaultdict(set) + + # TODO(AP-1959): this logic is now repreated, with some variations, in three places: + # here, in system-probe.py, and in libs/pipeline_notifications.py + # We should have some common result.json parsing lib. + with open(module_test_result.result_json_path, encoding="utf-8") as tf: + for line in tf: + json_test = json.loads(line.strip()) + # This logic assumes that the lines in result.json are "in order", i.e. that retries + # are logged after the initial test run. + + # The line is a "Package" line, but not a "Test" line. + # We take these into account, because in some cases (panics, race conditions), + # individual test failures are not reported, only a package-level failure is. + if 'Package' in json_test and 'Test' not in json_test: + package = json_test['Package'] + action = json_test["Action"] + + if action == "fail": + failed_packages.add(package) + elif action == "pass" and package in failed_tests.keys(): + # The package was retried and fully succeeded, removing from the list of packages to report + failed_packages.remove(package) + + # The line is a "Test" line. + elif 'Package' in json_test and 'Test' in json_test: + name = json_test['Test'] + package = json_test['Package'] + action = json_test["Action"] + if action == "fail": + failed_tests[package].add(name) + elif action == "pass" and name in failed_tests.get(package, set()): + # The test was retried and succeeded, removing from the list of tests to report + failed_tests[package].remove(name) + + if failed_packages: + failure_string += "Failed tests:\n" + for package in sorted(failed_packages): + tests = failed_tests.get(package, set()) + if not tests: + failure_string += f"- {package} package failed due to panic / race condition\n" + else: + for name in sorted(tests): + failure_string += f"- {package} {name}\n" + else: + failure_string += "The test command failed, but no test failures detected in the result json." + + print(failure_string) + + if should_fail: # Exit if any of the modules failed - raise Exit(code=1, message=f"Unit tests failed in the following modules:\n{failure_string}") + raise Exit(code=1) @task(iterable=['flavors']) diff --git a/tasks/winbuildscripts/buildwin.bat b/tasks/winbuildscripts/buildwin.bat index 450f11d13fa01..9ff988888d9ad 100644 --- a/tasks/winbuildscripts/buildwin.bat +++ b/tasks/winbuildscripts/buildwin.bat @@ -31,6 +31,9 @@ if exist \omnibus-ruby\pkg\*.wixpdb copy \omnibus-ruby\pkg\*.wixpdb c:\mnt\omnib REM copy customaction pdb file for debugging purposes if exist \omnibus-ruby\pkg\*.pdb copy \omnibus-ruby\pkg\*.pdb c:\mnt\omnibus\pkg\ || exit /b 8 +REM copy Next Gen installer +if exist \dev\go\src\github.com\DataDog\datadog-agent\tools\windows\DatadogAgentInstaller\WixSetup\*.msi copy \dev\go\src\github.com\DataDog\datadog-agent\tools\windows\DatadogAgentInstaller\WixSetup\*.msi c:\mnt\omnibus\pkg\ || exit /b 8 + REM show output binary directories (for debugging) dir C:\opt\datadog-agent\bin\agent\ diff --git a/tasks/winbuildscripts/dobuild.bat b/tasks/winbuildscripts/dobuild.bat index 9252b49f0d85f..c898b9902e1d3 100644 --- a/tasks/winbuildscripts/dobuild.bat +++ b/tasks/winbuildscripts/dobuild.bat @@ -53,3 +53,9 @@ if "%GO_VERSION_CHECK%" == "true" ( @echo "inv -e %OMNIBUS_BUILD% %OMNIBUS_ARGS% --skip-deps --major-version %MAJOR_VERSION% --release-version %RELEASE_VERSION%" inv -e %OMNIBUS_BUILD% %OMNIBUS_ARGS% --skip-deps --major-version %MAJOR_VERSION% --release-version %RELEASE_VERSION% || exit /b 105 + +REM only build MSI for main targets for now. +if "%OMNIBUS_TARGET%" == "main" ( + @echo "inv -e msi.build --major-version %MAJOR_VERSION% --python-runtimes "%PY_RUNTIMES%" + inv -e msi.build --major-version %MAJOR_VERSION% --python-runtimes "%PY_RUNTIMES%" || exit /b 106 +) diff --git a/tasks/winbuildscripts/sysprobe.ps1 b/tasks/winbuildscripts/sysprobe.ps1 index 48859600d3f03..b4cb461b22843 100644 --- a/tasks/winbuildscripts/sysprobe.ps1 +++ b/tasks/winbuildscripts/sysprobe.ps1 @@ -37,7 +37,7 @@ if ($err -ne 0) { [Environment]::Exit($err) } -& inv -e system-probe.kitchen-prepare +& inv -e system-probe.kitchen-prepare --ci $err = $LASTEXITCODE Write-Host Test result is $err diff --git a/test/e2e/argo-workflows/cspm-workflow.yaml b/test/e2e/argo-workflows/cspm-workflow.yaml index c2d2fd9377d22..106dfed6da92f 100644 --- a/test/e2e/argo-workflows/cspm-workflow.yaml +++ b/test/e2e/argo-workflows/cspm-workflow.yaml @@ -76,6 +76,8 @@ spec: value: "{{inputs.parameters.ci_pipeline_id}}" - name: ci_job_id value: "{{inputs.parameters.ci_job_id}}" + - name: remote_configuration_enabled + value: "false" - - name: wait-datadog-agent templateRef: diff --git a/test/e2e/argo-workflows/cws-workflow.yaml b/test/e2e/argo-workflows/cws-workflow.yaml index 7f21b4bee4407..5d15d44afb88f 100644 --- a/test/e2e/argo-workflows/cws-workflow.yaml +++ b/test/e2e/argo-workflows/cws-workflow.yaml @@ -76,6 +76,8 @@ spec: value: "{{inputs.parameters.ci_pipeline_id}}" - name: ci_job_id value: "{{inputs.parameters.ci_job_id}}" + - name: remote_configuration_enabled + value: "true" - - name: wait-datadog-agent templateRef: diff --git a/test/e2e/argo-workflows/default-workflow.yaml b/test/e2e/argo-workflows/default-workflow.yaml index 50bc29a3cc0c3..560e86ad64f90 100644 --- a/test/e2e/argo-workflows/default-workflow.yaml +++ b/test/e2e/argo-workflows/default-workflow.yaml @@ -119,6 +119,8 @@ spec: value: "{{inputs.parameters.ci_pipeline_id}}" - name: ci_job_id value: "{{inputs.parameters.ci_job_id}}" + - name: remote_configuration_enabled + value: "false" - - name: wait-datadog-agent templateRef: diff --git a/test/e2e/argo-workflows/otlp-workflow.yaml b/test/e2e/argo-workflows/otlp-workflow.yaml index 5ea8c665668b3..914eca18a0567 100644 --- a/test/e2e/argo-workflows/otlp-workflow.yaml +++ b/test/e2e/argo-workflows/otlp-workflow.yaml @@ -83,6 +83,8 @@ spec: value: "{{inputs.parameters.ci_pipeline_id}}" - name: ci_job_id value: "{{inputs.parameters.ci_job_id}}" + - name: remote_configuration_enabled + value: "false" - - name: wait-datadog-agent templateRef: diff --git a/test/e2e/argo-workflows/templates/datadog-agent.yaml b/test/e2e/argo-workflows/templates/datadog-agent.yaml index 9928de020b6bf..282edf0f995e1 100644 --- a/test/e2e/argo-workflows/templates/datadog-agent.yaml +++ b/test/e2e/argo-workflows/templates/datadog-agent.yaml @@ -17,6 +17,7 @@ spec: - name: ci_commit_short_sha - name: ci_pipeline_id - name: ci_job_id + - name: remote_configuration_enabled script: image: alpine/k8s:1.25.4 envFrom: @@ -26,6 +27,15 @@ spec: source: | set -euo pipefail + # for CWS tests we need to have a test policy before the container start + mkdir -p /tmp/runtime-security.d + cat > /tmp/runtime-security.d/test.policy < /tmp/values.yaml <&2 + if [[ -z ${DATADOG_AGENT_API_KEY:+x} ]] || [[ -z ${DATADOG_AGENT_APP_KEY:+x} ]] || [[ -z ${DATADOG_AGENT_RC_KEY:+x} ]]; then + echo "DATADOG_AGENT_API_KEY, DATADOG_AGENT_APP_KEY and DATADOG_AGENT_RC_KEY environment variables need to be set" >&2 exit 2 fi - kubectl create secret generic dd-keys --from-literal=DD_API_KEY="${DATADOG_AGENT_API_KEY}" --from-literal=DD_APP_KEY="${DATADOG_AGENT_APP_KEY}" --from-literal=DD_DDDEV_API_KEY="${DD_API_KEY}" + kubectl create secret generic dd-keys \ + --from-literal=DD_API_KEY="${DATADOG_AGENT_API_KEY}" \ + --from-literal=DD_APP_KEY="${DATADOG_AGENT_APP_KEY}" \ + --from-literal=DD_RC_KEY="${DATADOG_AGENT_RC_KEY}" \ + --from-literal=DD_DDDEV_API_KEY="${DD_API_KEY}" eval "$oldstate" @@ -58,7 +62,11 @@ case "$ARGO_WORKFLOW" in argo_submit_cws_cspm cspm-workflow.yaml ;; *) - kubectl create secret generic dd-keys --from-literal=DD_API_KEY=123er --from-literal=DD_APP_KEY=123er1 --from-literal=DD_DDDEV_API_KEY="${DD_API_KEY}" + kubectl create secret generic dd-keys \ + --from-literal=DD_API_KEY=123er \ + --from-literal=DD_APP_KEY=123er1 \ + --from-literal=DD_RC_KEY=123er2 \ + --from-literal=DD_DDDEV_API_KEY="${DD_API_KEY}" ./argo template create ../../argo-workflows/templates/*.yaml ./argo submit "../../argo-workflows/${ARGO_WORKFLOW}-workflow.yaml" --wait \ diff --git a/test/e2e/scripts/setup-instance/03-ssh.sh b/test/e2e/scripts/setup-instance/03-ssh.sh index 6a618d6ee026e..0092977940194 100755 --- a/test/e2e/scripts/setup-instance/03-ssh.sh +++ b/test/e2e/scripts/setup-instance/03-ssh.sh @@ -16,7 +16,7 @@ test "${COMMIT_ID}" || { COMMIT_ID=$(git rev-parse --verify HEAD) } -SSH_OPTS=("-o" "ServerAliveInterval=20" "-o" "ConnectTimeout=6" "-o" "StrictHostKeyChecking=no" "-o" "UserKnownHostsFile=/dev/null" "-i" "${PWD}/id_rsa" "-o" "SendEnv=CI_* DD_API_KEY DOCKER_REGISTRY_* DATADOG_AGENT_IMAGE=${DATADOG_AGENT_IMAGE:-datadog/agent-dev:master} DATADOG_CLUSTER_AGENT_IMAGE=${DATADOG_CLUSTER_AGENT_IMAGE:-datadog/cluster-agent-dev:master} ARGO_WORKFLOW DATADOG_AGENT_SITE DATADOG_AGENT_API_KEY DATADOG_AGENT_APP_KEY") +SSH_OPTS=("-o" "ServerAliveInterval=20" "-o" "ConnectTimeout=6" "-o" "StrictHostKeyChecking=no" "-o" "UserKnownHostsFile=/dev/null" "-i" "${PWD}/id_rsa" "-o" "SendEnv=CI_* DD_API_KEY DOCKER_REGISTRY_* DATADOG_AGENT_IMAGE=${DATADOG_AGENT_IMAGE:-datadog/agent-dev:master} DATADOG_CLUSTER_AGENT_IMAGE=${DATADOG_CLUSTER_AGENT_IMAGE:-datadog/cluster-agent-dev:master} ARGO_WORKFLOW DATADOG_AGENT_SITE DATADOG_AGENT_API_KEY DATADOG_AGENT_APP_KEY DATADOG_AGENT_RC_KEY") function _ssh() { ssh "${SSH_OPTS[@]}" -lcore "${MACHINE}" "$@" diff --git a/test/integration/serverless/log_normalize.py b/test/integration/serverless/log_normalize.py index c018983ad9130..953f5d2a5dde2 100644 --- a/test/integration/serverless/log_normalize.py +++ b/test/integration/serverless/log_normalize.py @@ -4,18 +4,20 @@ def normalize_metrics(stage): + def clear_dogsketches(log): + log["dogsketches"] = [] + + def sort_tags(log): + log["tags"].sort() + + def metric_sort_key(log): + return (log["metric"], "cold_start:true" in log["tags"]) + return [ replace(r'raise Exception', r'\n'), require(r'BEGINMETRIC.*ENDMETRIC'), exclude(r'BEGINMETRIC'), exclude(r'ENDMETRIC'), - replace(r'(ts":)[0-9]{10}', r'\1XXX'), - replace(r'(min":)[0-9\.e\-]{1,30}', r'\1XXX'), - replace(r'(max":)[0-9\.e\-]{1,30}', r'\1XXX'), - replace(r'(cnt":)[0-9\.e\-]{1,30}', r'\1XXX'), - replace(r'(avg":)[0-9\.e\-]{1,30}', r'\1XXX'), - replace(r'(sum":)[0-9\.e\-]{1,30}', r'\1XXX'), - replace(r'(k":\[)[0-9\.e\-]{1,30}', r'\1XXX'), replace(r'(datadog-nodev)[0-9]+\.[0-9]+\.[0-9]+', r'\1X.X.X'), replace(r'(datadog_lambda:v)[0-9]+\.[0-9]+\.[0-9]+', r'\1X.X.X'), replace(r'dd_lambda_layer:datadog-go[0-9.]{1,}', r'dd_lambda_layer:datadog-gox.x.x'), @@ -24,11 +26,32 @@ def normalize_metrics(stage): replace(r'(architecture:)(x86_64|arm64)', r'\1XXX'), replace(stage, 'XXXXXX'), exclude(r'[ ]$'), - sort_by(lambda log: (log["metric"], "cold_start:true" in log["tags"])), + foreach(clear_dogsketches), + foreach(sort_tags), + sort_by(metric_sort_key), ] def normalize_logs(stage): + rmvs = ( + "DATADOG TRACER CONFIGURATION", + # TODO: these messages may be an indication of a real problem and + # should be investigated + "TIMESTAMP UTC | DD_EXTENSION | ERROR | could not forward the request context canceled", + "TIMESTAMP http: proxy error: context canceled", + ) + + def rm_extra_items_key(log): + return any(rmv in log["message"]["message"] for rmv in rmvs) + + def sort_tags(log): + tags = log["ddtags"].split(',') + tags.sort() + log["ddtags"] = ','.join(tags) + + def log_sort_key(log): + return log["message"]["message"] + return [ require(r'BEGINLOG.*ENDLOG'), exclude(r'BEGINLOG'), @@ -39,18 +62,12 @@ def normalize_logs(stage): replace(r'\d{4}\/\d{2}\/\d{2}\s\d{2}:\d{2}:\d{2}', 'TIMESTAMP'), replace(r'\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}', 'TIMESTAMP'), replace(r'([a-zA-Z0-9]{8}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{4}-[a-zA-Z0-9]{12})', r'XXX'), + replace(r'"REPORT RequestId:.*?"', '"REPORT"'), replace(stage, 'XXXXXX'), replace(r'(architecture:)(x86_64|arm64)', r'\1XXX'), - sort_by(lambda log: log["message"]["message"]), - # TODO: these messages may be an indication of a real problem and - # should be investigated - rm_item( - lambda log: log["message"]["message"] - in ( - "TIMESTAMP UTC | DD_EXTENSION | ERROR | could not forward the request context canceled\n", - "TIMESTAMP http: proxy error: context canceled\n", - ) - ), + rm_item(rm_extra_items_key), + foreach(sort_tags), + sort_by(log_sort_key), ] @@ -114,6 +131,20 @@ def _require(log): return _require +def foreach(fn): + """ + Execute fn with each element of the list in order + """ + + def _foreach(log): + logs = json.loads(log, strict=False) + for log_item in logs: + fn(log_item) + return json.dumps(logs) + + return _foreach + + def sort_by(key): """ Sort the json entries using the given key function, requires the log string diff --git a/test/integration/serverless/recorder-extension/main.go b/test/integration/serverless/recorder-extension/main.go index 3a8376230077b..be30f7f9f6ff1 100644 --- a/test/integration/serverless/recorder-extension/main.go +++ b/test/integration/serverless/recorder-extension/main.go @@ -17,7 +17,6 @@ import ( "net/http" "os" "os/signal" - "sort" "strings" "syscall" "time" @@ -207,17 +206,10 @@ func startHTTPServer(port string) { return } - for _, sketch := range pl.Sketches { - sort.Strings(sketch.Tags) - sketch.Dogsketches = make([]gogen.SketchPayload_Sketch_Dogsketch, 0) - outputSketches = append(outputSketches, sketch) - } + outputSketches = append(outputSketches, pl.Sketches...) if nbHitMetrics == 3 { // two calls + shutdown - sort.SliceStable(outputSketches, func(i, j int) bool { - return outputSketches[i].Metric < outputSketches[j].Metric - }) jsonSketch, err := json.Marshal(outputSketches) if err != nil { fmt.Printf("Error while JSON encoding the sketch") @@ -241,19 +233,14 @@ func startHTTPServer(port string) { } for _, log := range messages { - if !strings.Contains(log.Message.Message, "BEGINLOG") && !strings.Contains(log.Message.Message, "BEGINTRACE") { - if strings.HasPrefix(log.Message.Message, "REPORT RequestId:") { - log.Message.Message = "REPORT" // avoid dealing with stripping out init duration, duration, memory used etc. - nbReport++ - } - sortedTags := strings.Split(log.Tags, ",") - sort.Strings(sortedTags) - log.Tags = strings.Join(sortedTags, ",") - if !strings.Contains(log.Message.Message, "DATADOG TRACER CONFIGURATION") { - // skip dd-trace-go tracer configuration output - outputLogs = append(outputLogs, log) - } + msg := log.Message.Message + if strings.Contains(msg, "BEGINMETRIC") || strings.Contains(msg, "BEGINLOG") || strings.Contains(msg, "BEGINTRACE") { + continue + } + if strings.HasPrefix(msg, "REPORT RequestId:") { + nbReport++ } + outputLogs = append(outputLogs, log) } if nbReport == 2 && !hasBeenOutput { diff --git a/test/integration/serverless/run.sh b/test/integration/serverless/run.sh index fe56a88035048..051b0b6c81814 100755 --- a/test/integration/serverless/run.sh +++ b/test/integration/serverless/run.sh @@ -183,6 +183,9 @@ sleep "$LOGS_WAIT_MINUTES"m failed_functions=() +RAWLOGS_DIR=$(mktemp -d) +echo "Raw logs will be written to ${RAWLOGS_DIR}" + for function_name in "${all_functions[@]}"; do echo "Fetching logs for ${function_name}..." retry_counter=1 @@ -200,6 +203,8 @@ for function_name in "${all_functions[@]}"; do done printf "\e[A\e[K" # erase previous log line + echo $raw_logs > $RAWLOGS_DIR/$function_name + # Replace invocation-specific data like timestamps and IDs with XXX to normalize across executions if [[ " ${metric_functions[*]} " =~ " ${function_name} " ]]; then norm_type=metrics diff --git a/test/kitchen/drivers/azure-driver.yml b/test/kitchen/drivers/azure-driver.yml index 95671206cbded..a55a41c1a36c4 100644 --- a/test/kitchen/drivers/azure-driver.yml +++ b/test/kitchen/drivers/azure-driver.yml @@ -75,6 +75,7 @@ platforms: # TEST_PLATFORMS syntax is `short_name1,azure_full_qualified_name1|short_name2,azure_full_qualified_name1` # TEST_PLATFORMS syntax is `short_name1,parent vhd folder,parent_vhd_name|...` azure_test_platforms = ENV['TEST_PLATFORMS'].split('|').map { |p| p.split(',') } + cws_supported_platforms = (ENV['KITCHEN_CWS_SUPPORTED_OSVERS'] || "").split(',') if ENV['TEST_IMAGE_SIZE'] != "" sizes = [ @@ -143,6 +144,8 @@ platforms: - name: <%= platform_name %> attributes: color_idx: <%= idx %> + dd-agent-rspec: + enable_cws: <%= ENV['KITCHEN_CWS'] == "true" && cws_supported_platforms.include?(platform[0]) %> <% if ENV["KITCHEN_CWS_PLATFORM"] %> cws_platform: <%= ENV["KITCHEN_CWS_PLATFORM"] %> <% end %> @@ -175,17 +178,6 @@ platforms: username: <%= vm_username %> password: <%= vm_password %> - lifecycle: - # HACK: this is needed to install rexml for system-probe tests without using bundler, which cannot be used for now - # (see the explanation in tasks/run-test-kitchen.sh). - pre_verify: - - local: echo 'Installing rexml gem for the system-probe-test suite' - <% if windows %> - - remote: C:/opscode/chef/embedded/bin/gem.bat install rexml --install-dir C:/Users/<%= vm_username %>/AppData/Local/Temp/verifier/gems - <% else %> - - remote: /opt/chef/embedded/bin/gem install rexml --install-dir /tmp/verifier/gems - <% end %> - transport: <% if windows %> name: winrm diff --git a/test/kitchen/drivers/ec2-driver.yml b/test/kitchen/drivers/ec2-driver.yml index 8e56b68b0bf11..31e4b21a84a20 100644 --- a/test/kitchen/drivers/ec2-driver.yml +++ b/test/kitchen/drivers/ec2-driver.yml @@ -52,6 +52,7 @@ platforms: <% # TEST_PLATFORMS syntax is `short_name1,ami|...` ec2_test_platforms = ENV['TEST_PLATFORMS'].split('|').map { |p| p.split(',') } + cws_supported_platforms = (ENV['KITCHEN_CWS_SUPPORTED_OSVERS'] || "").split(',') windows_platforms = [] sles15_platforms = [] @@ -88,6 +89,8 @@ platforms: - name: <%= platform_name %> attributes: color_idx: <%= idx %> + dd-agent-rspec: + enable_cws: <%= ENV['KITCHEN_CWS'] == "true" && cws_supported_platforms.include?(platform[0]) %> <% if ENV["KITCHEN_CWS_PLATFORM"] %> cws_platform: <%= ENV["KITCHEN_CWS_PLATFORM"] %> <% end %> @@ -143,15 +146,6 @@ platforms: let i+=${wait}; done; <% end %> - # HACK: this is needed to install rexml for system-probe tests without using bundler, which cannot be used for now - # (see the explanation in tasks/run-test-kitchen.sh). - pre_verify: - - local: echo 'Installing rexml gem for the system-probe-test suite' - <% if windows %> - - remote: C:/opscode/chef/embedded/bin/gem.bat install rexml --install-dir C:/Users/ec2-user/AppData/Local/Temp/verifier/gems - <% else %> - - remote: /opt/chef/embedded/bin/gem install rexml --install-dir /tmp/verifier/gems - <% end %> verifier: downloads: "/tmp/junit.tar.gz": kitchen-junit-<%= platform_name %>.tar.gz diff --git a/test/kitchen/drivers/vagrant-driver.yml b/test/kitchen/drivers/vagrant-driver.yml index 77cd661d85371..6ce7874a394ec 100644 --- a/test/kitchen/drivers/vagrant-driver.yml +++ b/test/kitchen/drivers/vagrant-driver.yml @@ -25,10 +25,14 @@ provisioner: platforms: <% ENV['TEST_PLATFORMS'] ||= "centos7,roboxes/centos7|centos8,roboxes/centos8" + cws_supported_platforms = (ENV['KITCHEN_CWS_SUPPORTED_OSVERS'] || "").split(',') test_platforms = ENV['TEST_PLATFORMS'].split('|').map { |p| p.split(',') } test_platforms.each do |platform| %> - name: <%= platform[0] %> + attributes: + dd-agent-rspec: + enable_cws: <%= ENV['KITCHEN_CWS'] && cws_supported_platforms.include?(platform[0]) %> driver: box: <%= platform[1] %> # Always use linked_clone when possible, it's so much faster diff --git a/test/kitchen/site-cookbooks/dd-agent-install-script/metadata.rb b/test/kitchen/site-cookbooks/dd-agent-install-script/metadata.rb index 86d6066b01ff3..ab310f675d7e4 100644 --- a/test/kitchen/site-cookbooks/dd-agent-install-script/metadata.rb +++ b/test/kitchen/site-cookbooks/dd-agent-install-script/metadata.rb @@ -3,3 +3,6 @@ description "Installs the Agent using the Agent install script" long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) version "0.2.0" +depends "yum-centos", "~> 5.0.0" +depends "docker" + diff --git a/test/kitchen/site-cookbooks/dd-agent-install-script/recipes/default.rb b/test/kitchen/site-cookbooks/dd-agent-install-script/recipes/default.rb index 4b919a77632ae..b608e316f8635 100644 --- a/test/kitchen/site-cookbooks/dd-agent-install-script/recipes/default.rb +++ b/test/kitchen/site-cookbooks/dd-agent-install-script/recipes/default.rb @@ -67,6 +67,15 @@ mode '0755' end +if platform?('centos') && node['dd-agent-rspec'] && node['dd-agent-rspec']['enable_cws'] + # TODO(lebauce): enable repositories to install package + # package 'policycoreutils-python' + + execute 'set SElinux to permissive mode to be able to start system-probe' do + command "setenforce 0" + end +end + execute 'run agent install script' do user 'installuser' cwd wrk_dir diff --git a/test/kitchen/site-cookbooks/dd-agent-install-script/recipes/old_vault.rb b/test/kitchen/site-cookbooks/dd-agent-install-script/recipes/old_vault.rb new file mode 120000 index 0000000000000..d540485ccba99 --- /dev/null +++ b/test/kitchen/site-cookbooks/dd-agent-install-script/recipes/old_vault.rb @@ -0,0 +1 @@ +../../dd-system-probe-check/recipes/old_vault.rb \ No newline at end of file diff --git a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_stop_windows_agent.rb b/test/kitchen/site-cookbooks/dd-agent-install/recipes/_stop_windows_agent.rb index c837b124d44e2..cf2d85c98e93a 100644 --- a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_stop_windows_agent.rb +++ b/test/kitchen/site-cookbooks/dd-agent-install/recipes/_stop_windows_agent.rb @@ -6,6 +6,8 @@ powershell_script 'stop-datadog-agent' do code <<-EOH - Stop-Service -Force -Name "#{node['dd-agent-install']['agent_name']}" + $serviceName = "#{node['dd-agent-install']['agent_name']}" + sc.exe query $serviceName; + Stop-Service -force $serviceName EOH end diff --git a/test/kitchen/site-cookbooks/dd-agent-step-by-step/recipes/default.rb b/test/kitchen/site-cookbooks/dd-agent-step-by-step/recipes/default.rb index 63c39aa05d41c..b5d5f5a0bc49c 100644 --- a/test/kitchen/site-cookbooks/dd-agent-step-by-step/recipes/default.rb +++ b/test/kitchen/site-cookbooks/dd-agent-step-by-step/recipes/default.rb @@ -39,6 +39,15 @@ end when 'rhel' + if platform?('centos') && node['dd-agent-rspec'] && node['dd-agent-rspec']['enable_cws'] + # TODO(lebauce): enable repositories to install package + # package 'policycoreutils-python' + + execute 'set SElinux to permissive mode to be able to start system-probe' do + command "setenforce 0" + end + end + protocol = node['platform_version'].to_i < 6 ? 'http' : 'https' # Because of https://bugzilla.redhat.com/show_bug.cgi?id=1792506, we disable # repo_gpgcheck on RHEL/CentOS < 8.2 diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore b/test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore index 52bab439b7c42..bae3233263f53 100644 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore +++ b/test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore @@ -4,3 +4,4 @@ files/default/clang-bpf files/default/llc-bpf files/default/gotestsum files/default/test2json +files/default/minimized-btfs.tar.xz diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/linux.rb b/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/linux.rb index 9ac45b8ddbb31..8dd05f55916ba 100644 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/linux.rb +++ b/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/linux.rb @@ -28,6 +28,15 @@ end end +package 'java' do + case node[:platform] + when 'redhat', 'centos', 'fedora', 'amazon' + package_name 'java' + when 'ubuntu', 'debian' + package_name 'default-jre' + end +end + package 'python3' case node[:platform] diff --git a/test/kitchen/tasks/run-test-kitchen.sh b/test/kitchen/tasks/run-test-kitchen.sh index 5028eb84e1af2..e41e6d4cb4fe9 100755 --- a/test/kitchen/tasks/run-test-kitchen.sh +++ b/test/kitchen/tasks/run-test-kitchen.sh @@ -149,23 +149,8 @@ set +o pipefail test_suites=".*" # This for loop retries kitchen tests failing because of infrastructure/networking issues for attempt in $(seq 0 "${KITCHEN_INFRASTRUCTURE_FLAKES_RETRY:-2}"); do - bundle exec kitchen converge "$test_suites" -c -d always 2>&1 | tee "/tmp/runlog${attempt}" - converge_result=${PIPESTATUS[0]} - - # HACK: Since December 24, 2022, the first verify attempt always fails, due to a bundler <-> ruby - # version issue at the start of the verifier. - # The kitchen verifier uses the latest version of busser (0.8.0). busser detects that we have rspec tests, - # and therefore installs the latest version of the busser-rspec gem (0.7.6). - # The busser-rspec gem has a postinstall hook that installs the latest versions of the rspec and bundler gems. - # The rspec install goes fine, but the bundler install fails since December 24, 2022, when 2.4.0 of bundler - # was released, which drops support for ruby < 2.6. - # Running kitchen verify another time does work, because the postinstall hook isn't run again, - # and we don't actually need bundler in the test suites (for suites that do have depedencies, we install them - # manually with lifecycle hooks in the platform definitions). - bundle exec kitchen verify "$test_suites" --no-log-overwrite -c -d always 2>&1 || true - - bundle exec kitchen verify "$test_suites" --no-log-overwrite -c -d always 2>&1 | tee -a "/tmp/runlog${attempt}" - verify_result=${PIPESTATUS[0]} + bundle exec kitchen verify "$test_suites" -c -d always 2>&1 | tee "/tmp/runlog${attempt}" + result=${PIPESTATUS[0]} # Before destroying the kitchen machines, get the list of failed suites, # as their status will be reset to non-failing once they're destroyed. @@ -186,7 +171,7 @@ for attempt in $(seq 0 "${KITCHEN_INFRASTRUCTURE_FLAKES_RETRY:-2}"); do break fi - if [ "$converge_result" -eq 0 ] && [ "$verify_result" -eq 0 ]; then + if [ "$result" -eq 0 ]; then # if kitchen test succeeded, exit with 0 exit 0 else diff --git a/test/kitchen/test-definitions/windows-install-test.yml b/test/kitchen/test-definitions/windows-install-test.yml index 932969e83cefa..7b54fe5365b79 100644 --- a/test/kitchen/test-definitions/windows-install-test.yml +++ b/test/kitchen/test-definitions/windows-install-test.yml @@ -23,18 +23,12 @@ suites: - name: win-upgrade-rollback run_list: - - "recipe[dd-agent-install::_install_windows]" + - "recipe[dd-agent-install]" - "recipe[dd-agent-upgrade]" attributes: datadog: - <% dd_agent_config.each do |key, value| %> - <%= key %>: "<%= value %>" - <% end %> - dd-agent-install: - windows_agent_url: https://s3.amazonaws.com/dd-agent-mstesting/builds/stable/ - windows_version: "<%= ENV['LAST_STABLE_VERSION'] %>" - agent_install_options: > - APIKEY=<%= api_key %> + agent_version: <%= ENV['LAST_STABLE_VERSION'] %> + api_key: <%= api_key %> dd-agent-upgrade: <% dd_agent_config.each do |key, value| %> <%= key %>: "<%= value %>" diff --git a/test/kitchen/test-definitions/windows-npmdriver.yml b/test/kitchen/test-definitions/windows-npmdriver.yml index 853e36530af59..5910f15a8f45a 100644 --- a/test/kitchen/test-definitions/windows-npmdriver.yml +++ b/test/kitchen/test-definitions/windows-npmdriver.yml @@ -27,5 +27,3 @@ suites: dd-agent-rspec: agent_flavor: <%= ENV['AGENT_FLAVOR'] || "datadog-agent" %> skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> - - diff --git a/test/kitchen/test/integration/chef/rspec/spec_helper.rb b/test/kitchen/test/integration/chef/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/chef/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/chef/rspec/chef_spec.rb b/test/kitchen/test/integration/chef/rspec_datadog/chef_spec.rb similarity index 100% rename from test/kitchen/test/integration/chef/rspec/chef_spec.rb rename to test/kitchen/test/integration/chef/rspec_datadog/chef_spec.rb diff --git a/test/kitchen/test/integration/chef/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/chef/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/chef/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/common/rspec/dogstatsd_spec_helper.rb b/test/kitchen/test/integration/common/rspec_datadog/dogstatsd_spec_helper.rb similarity index 100% rename from test/kitchen/test/integration/common/rspec/dogstatsd_spec_helper.rb rename to test/kitchen/test/integration/common/rspec_datadog/dogstatsd_spec_helper.rb diff --git a/test/kitchen/test/integration/common/rspec/iot_spec_helper.rb b/test/kitchen/test/integration/common/rspec_datadog/iot_spec_helper.rb similarity index 100% rename from test/kitchen/test/integration/common/rspec/iot_spec_helper.rb rename to test/kitchen/test/integration/common/rspec_datadog/iot_spec_helper.rb diff --git a/test/kitchen/test/integration/common/rspec/kernel_out_spec_helper.rb b/test/kitchen/test/integration/common/rspec_datadog/kernel_out_spec_helper.rb similarity index 100% rename from test/kitchen/test/integration/common/rspec/kernel_out_spec_helper.rb rename to test/kitchen/test/integration/common/rspec_datadog/kernel_out_spec_helper.rb diff --git a/test/kitchen/test/integration/common/rspec/spec_helper.rb b/test/kitchen/test/integration/common/rspec_datadog/spec_helper.rb similarity index 91% rename from test/kitchen/test/integration/common/rspec/spec_helper.rb rename to test/kitchen/test/integration/common/rspec_datadog/spec_helper.rb index becbfc52e698e..8954b198e8eb7 100644 --- a/test/kitchen/test/integration/common/rspec/spec_helper.rb +++ b/test/kitchen/test/integration/common/rspec_datadog/spec_helper.rb @@ -18,13 +18,17 @@ # We retrieve the value defined in kitchen.yml because there is no simple way # to set env variables on the target machine or via parameters in Kitchen/Busser # See https://github.com/test-kitchen/test-kitchen/issues/662 for reference -def get_agent_flavor +def parse_dna if os == :windows dna_json_path = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\dna.json" else dna_json_path = "/tmp/kitchen/dna.json" end - JSON.parse(IO.read(dna_json_path)).fetch('dd-agent-rspec').fetch('agent_flavor') + JSON.parse(IO.read(dna_json_path)) +end + +def get_agent_flavor + parse_dna().fetch('dd-agent-rspec').fetch('agent_flavor') end def get_service_name(flavor) @@ -234,13 +238,16 @@ def integration_freeze end end -def json_info +def json_info(command) tmpfile = Tempfile.new('agent-status') begin - `#{agent_command} status -j -o #{tmpfile.path}` + `#{command} status -j -o #{tmpfile.path}` info_output = File.read(tmpfile.path) JSON.parse(info_output) + rescue Exception => e + puts $! + return {} ensure tmpfile.close tmpfile.unlink @@ -297,6 +304,27 @@ def agent_processes_running? false end +def security_agent_running? + %w(security-agent security-agent.exe).each do |p| + return true if is_process_running?(p) + end + false +end + +def system_probe_running? + %w(system-probe system-probe.exe).each do |p| + return true if is_process_running?(p) + end + false +end + +def process_agent_running? + %w(process-agent process-agent.exe).each do |p| + return true if is_process_running?(p) + end + false +end + def dogstatsd_processes_running? %w(dogstatsd dogstatsd.exe).each do |p| return true if is_process_running?(p) @@ -304,6 +332,12 @@ def dogstatsd_processes_running? false end +def deploy_cws? + os != :windows && + get_agent_flavor == 'datadog-agent' && + parse_dna().fetch('dd-agent-rspec').fetch('enable_cws') == true +end + def read_agent_file(path, commit_hash) open("https://raw.githubusercontent.com/DataDog/datadog-agent/#{commit_hash}/#{path}").read() end @@ -340,13 +374,17 @@ def is_port_bound(port) end end +def get_conf_file(conf_path) + if os == :windows + return "#{ENV['ProgramData']}\\Datadog\\#{conf_path}" + else + return "/etc/datadog-agent/#{conf_path}" + end +end -def read_conf_file - conf_path = "" - if os == :windows - conf_path = "#{ENV['ProgramData']}\\Datadog\\datadog.yaml" - else - conf_path = '/etc/datadog-agent/datadog.yaml' +def read_conf_file(conf_path = "") + if conf_path == "" + conf_path = get_conf_file("datadog.yaml") end puts "cp is #{conf_path}" f = File.read(conf_path) @@ -358,7 +396,7 @@ def fetch_python_version(timeout = 15) # Fetch the python_version from the Agent status # Timeout after the given number of seconds for _ in 1..timeout do - json_info_output = json_info + json_info_output = json_info(agent_command()) if json_info_output.key?('python_version') && ! json_info_output['python_version'].nil? && # nil is considered a correct version by Gem::Version Gem::Version.correct?(json_info_output['python_version']) # Check that we do have a version number @@ -399,6 +437,9 @@ def is_dpkg_package_installed(package) it_behaves_like 'an Agent with integrations' it_behaves_like 'an Agent that stops' it_behaves_like 'an Agent that restarts' + if deploy_cws? + it_behaves_like 'a running Agent with CWS enabled' + end end shared_examples_for 'Agent uninstall' do @@ -424,12 +465,7 @@ def is_dpkg_package_installed(package) # to set env variables on the target machine or via parameters in Kitchen/Busser # See https://github.com/test-kitchen/test-kitchen/issues/662 for reference let(:skip_windows_signing_check) { - if os == :windows - dna_json_path = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\dna.json" - else - dna_json_path = "/tmp/kitchen/dna.json" - end - JSON.parse(IO.read(dna_json_path)).fetch('dd-agent-rspec').fetch('skip_windows_signing_test') + parse_dna().fetch('dd-agent-rspec').fetch('skip_windows_signing_test') } it 'is properly signed' do @@ -501,11 +537,7 @@ def is_dpkg_package_installed(package) end it 'has a config file' do - if os == :windows - conf_path = "#{ENV['ProgramData']}\\Datadog\\datadog.yaml" - else - conf_path = '/etc/datadog-agent/datadog.yaml' - end + conf_path = get_conf_file("datadog.yaml") expect(File).to exist(conf_path) end @@ -514,7 +546,7 @@ def is_dpkg_package_installed(package) # Wait for the collector to do its first run # Timeout after 30 seconds for _ in 1..30 do - json_info_output = json_info + json_info_output = json_info(agent_command()) if json_info_output.key?('runnerStats') && json_info_output['runnerStats'].key?('Checks') && !json_info_output['runnerStats']['Checks'].empty? @@ -550,19 +582,27 @@ def is_dpkg_package_installed(package) end shared_examples_for "a running Agent with APM" do + if os == :windows + it 'has the apm agent running' do + expect(is_process_running?("trace-agent.exe")).to be_truthy + expect(is_service_running?("datadog-trace-agent")).to be_truthy + end + end it 'is bound to the port that receives traces by default' do expect(is_port_bound(8126)).to be_truthy end end +shared_examples_for "a running Agent with process enabled" do + it 'has the process agent running' do + expect(is_process_running?("process-agent.exe")).to be_truthy + expect(is_service_running?("datadog-process-agent")).to be_truthy + end +end + shared_examples_for "a running Agent with APM manually disabled" do it 'is not bound to the port that receives traces when apm_enabled is set to false' do - conf_path = "" - if os != :windows - conf_path = "/etc/datadog-agent/datadog.yaml" - else - conf_path = "#{ENV['ProgramData']}\\Datadog\\datadog.yaml" - end + conf_path = get_conf_file("datadog.yaml") f = File.read(conf_path) confYaml = YAML.load(f) @@ -644,12 +684,7 @@ def is_dpkg_package_installed(package) shared_examples_for 'an Agent with python3 enabled' do it 'restarts after python_version is set to 3' do - conf_path = "" - if os != :windows - conf_path = "/etc/datadog-agent/datadog.yaml" - else - conf_path = "#{ENV['ProgramData']}\\Datadog\\datadog.yaml" - end + conf_path = get_conf_file("datadog.yaml") f = File.read(conf_path) confYaml = YAML.load(f) confYaml["python_version"] = 3 @@ -670,12 +705,7 @@ def is_dpkg_package_installed(package) it 'restarts after python_version is set back to 2' do skip if info.include? "v7." - conf_path = "" - if os != :windows - conf_path = "/etc/datadog-agent/datadog.yaml" - else - conf_path = "#{ENV['ProgramData']}\\Datadog\\datadog.yaml" - end + conf_path = get_conf_file("datadog.yaml") f = File.read(conf_path) confYaml = YAML.load(f) confYaml["python_version"] = 2 @@ -828,6 +858,11 @@ def is_dpkg_package_installed(package) if os == :windows expect(File).not_to exist("C:\\Program Files\\Datadog\\Datadog Agent\\") else + remaining_files = [] + if Dir.exists?("/opt/datadog-agent") + Find.find('/opt/datadog-agent').each { |f| remaining_files.push(f) } + end + expect(remaining_files).to be_empty expect(File).not_to exist("/opt/datadog-agent/") end end @@ -845,11 +880,6 @@ def is_dpkg_package_installed(package) expect(confYaml).to have_key("apm_config") expect(confYaml["apm_config"]).to have_key("enabled") expect(confYaml["apm_config"]["enabled"]).to be_truthy - expect(is_port_bound(8126)).to be_truthy - end - it 'has the apm agent running' do - expect(is_process_running?("trace-agent.exe")).to be_truthy - expect(is_service_running?("datadog-trace-agent")).to be_truthy end end @@ -870,9 +900,39 @@ def is_dpkg_package_installed(package) expect(confYaml["process_config"]["process_collection"]).to have_key("enabled") expect(confYaml["process_config"]["process_collection"]["enabled"]).to be_truthy end - it 'has the process agent running' do - expect(is_process_running?("process-agent.exe")).to be_truthy - expect(is_service_running?("datadog-process-agent")).to be_truthy +end + +shared_examples_for 'a running Agent with CWS enabled' do + it 'has CWS enabled' do + enable_cws(get_conf_file("system-probe.yaml"), true) + enable_cws(get_conf_file("security-agent.yaml"), true) + + output = restart "datadog-agent" + expect(output).to be_truthy + end + + it 'has the security agent running' do + expect(security_agent_running?).to be_truthy + expect(is_service_running?("datadog-agent-security")).to be_truthy + end + + it 'has system-probe running' do + expect(system_probe_running?).to be_truthy + expect(is_service_running?("datadog-agent-sysprobe")).to be_truthy + end + + it 'has security-agent and system-probe communicating' do + for _ in 1..20 do + json_info_output = json_info("sudo /opt/datadog-agent/embedded/bin/security-agent") + if json_info_output.key?('runtimeSecurityStatus') && + json_info_output['runtimeSecurityStatus'].key?('connected') && + json_info_output['runtimeSecurityStatus']['connected'] + result = true + break + end + sleep 3 + end + expect(result).to be_truthy end end @@ -881,12 +941,7 @@ def is_dpkg_package_installed(package) # to set env variables on the target machine or via parameters in Kitchen/Busser # See https://github.com/test-kitchen/test-kitchen/issues/662 for reference let(:agent_expected_version) { - if os == :windows - dna_json_path = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\dna.json" - else - dna_json_path = "/tmp/kitchen/dna.json" - end - JSON.parse(IO.read(dna_json_path)).fetch('dd-agent-upgrade-rspec').fetch('agent_expected_version') + parse_dna().fetch('dd-agent-upgrade-rspec').fetch('agent_expected_version') } it 'runs with the expected version (based on the `info` command output)' do @@ -906,6 +961,21 @@ def is_dpkg_package_installed(package) end end +def enable_cws(conf_path, state) + begin + f = File.read(conf_path) + confYaml = YAML.load(f) + if !confYaml.key("runtime_security_config") + confYaml["runtime_security_config"] = {} + end + confYaml["runtime_security_config"]["enabled"] = state + rescue + confYaml = {'runtime_security_config' => {'enabled' => state}} + ensure + File.write(conf_path, confYaml.to_yaml) + end +end + def get_user_sid(uname) output = `powershell -command "(New-Object System.Security.Principal.NTAccount('#{uname}')).Translate([System.Security.Principal.SecurityIdentifier]).value"`.strip output diff --git a/test/kitchen/test/integration/common/rspec/windows_npm_spec_helper.rb b/test/kitchen/test/integration/common/rspec_datadog/windows_npm_spec_helper.rb similarity index 100% rename from test/kitchen/test/integration/common/rspec/windows_npm_spec_helper.rb rename to test/kitchen/test/integration/common/rspec_datadog/windows_npm_spec_helper.rb diff --git a/test/kitchen/test/integration/container-collection-test/rspec/container-collection-test_spec.rb b/test/kitchen/test/integration/container-collection-test/rspec_datadog/container-collection-test_spec.rb similarity index 81% rename from test/kitchen/test/integration/container-collection-test/rspec/container-collection-test_spec.rb rename to test/kitchen/test/integration/container-collection-test/rspec_datadog/container-collection-test_spec.rb index d17ff436d5c8e..da8ac451494c1 100644 --- a/test/kitchen/test/integration/container-collection-test/rspec/container-collection-test_spec.rb +++ b/test/kitchen/test/integration/container-collection-test/rspec_datadog/container-collection-test_spec.rb @@ -13,7 +13,15 @@ describe 'a Process Agent with Container Collection enabled' do it_behaves_like 'a running Process Agent' it 'has container collection enabled' do - conf = get_runtime_config() + conf = {} + for _ in 1..30 do + begin + conf = get_runtime_config() + rescue Exception => e + puts $! + end + end + expect(conf).to have_key("container_collection") expect(conf["container_collection"]).to have_key("enabled") expect(conf["container_collection"]["enabled"]).to be_truthy diff --git a/test/kitchen/test/integration/container-collection-test/rspec/spec_helper.rb b/test/kitchen/test/integration/container-collection-test/rspec_datadog/spec_helper.rb similarity index 100% rename from test/kitchen/test/integration/container-collection-test/rspec/spec_helper.rb rename to test/kitchen/test/integration/container-collection-test/rspec_datadog/spec_helper.rb diff --git a/test/kitchen/test/integration/install-script/rspec/dogstatsd_spec_helper.rb b/test/kitchen/test/integration/install-script/rspec/dogstatsd_spec_helper.rb deleted file mode 120000 index 58b13ccc972b7..0000000000000 --- a/test/kitchen/test/integration/install-script/rspec/dogstatsd_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/dogstatsd_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/install-script/rspec/iot_spec_helper.rb b/test/kitchen/test/integration/install-script/rspec/iot_spec_helper.rb deleted file mode 120000 index 3be4c54caad91..0000000000000 --- a/test/kitchen/test/integration/install-script/rspec/iot_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/iot_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/install-script/rspec/spec_helper.rb b/test/kitchen/test/integration/install-script/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/install-script/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/install-script/rspec_datadog/dogstatsd_spec_helper.rb b/test/kitchen/test/integration/install-script/rspec_datadog/dogstatsd_spec_helper.rb new file mode 120000 index 0000000000000..42722376ea845 --- /dev/null +++ b/test/kitchen/test/integration/install-script/rspec_datadog/dogstatsd_spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/dogstatsd_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/install-script/rspec/install-script_spec.rb b/test/kitchen/test/integration/install-script/rspec_datadog/install-script_spec.rb similarity index 100% rename from test/kitchen/test/integration/install-script/rspec/install-script_spec.rb rename to test/kitchen/test/integration/install-script/rspec_datadog/install-script_spec.rb diff --git a/test/kitchen/test/integration/install-script/rspec_datadog/iot_spec_helper.rb b/test/kitchen/test/integration/install-script/rspec_datadog/iot_spec_helper.rb new file mode 120000 index 0000000000000..14fa3b3e2b912 --- /dev/null +++ b/test/kitchen/test/integration/install-script/rspec_datadog/iot_spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/iot_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/install-script/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/install-script/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/install-script/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/process-collection-test/rspec/process-collection-test_spec.rb b/test/kitchen/test/integration/process-collection-test/rspec_datadog/process-collection-test_spec.rb similarity index 100% rename from test/kitchen/test/integration/process-collection-test/rspec/process-collection-test_spec.rb rename to test/kitchen/test/integration/process-collection-test/rspec_datadog/process-collection-test_spec.rb diff --git a/test/kitchen/test/integration/process-collection-test/rspec/spec_helper.rb b/test/kitchen/test/integration/process-collection-test/rspec_datadog/spec_helper.rb similarity index 100% rename from test/kitchen/test/integration/process-collection-test/rspec/spec_helper.rb rename to test/kitchen/test/integration/process-collection-test/rspec_datadog/spec_helper.rb diff --git a/test/kitchen/test/integration/security-agent-stress/rspec/security-agent-stress_spec.rb b/test/kitchen/test/integration/security-agent-stress/rspec_datadog/security-agent-stress_spec.rb similarity index 100% rename from test/kitchen/test/integration/security-agent-stress/rspec/security-agent-stress_spec.rb rename to test/kitchen/test/integration/security-agent-stress/rspec_datadog/security-agent-stress_spec.rb diff --git a/test/kitchen/test/integration/security-agent-test/rspec/kernel_out_spec_helper.rb b/test/kitchen/test/integration/security-agent-test/rspec/kernel_out_spec_helper.rb deleted file mode 120000 index 84d9a999217cb..0000000000000 --- a/test/kitchen/test/integration/security-agent-test/rspec/kernel_out_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/kernel_out_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/security-agent-test/rspec_datadog/kernel_out_spec_helper.rb b/test/kitchen/test/integration/security-agent-test/rspec_datadog/kernel_out_spec_helper.rb new file mode 120000 index 0000000000000..08fdb900015b3 --- /dev/null +++ b/test/kitchen/test/integration/security-agent-test/rspec_datadog/kernel_out_spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/kernel_out_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/security-agent-test/rspec/security-agent-test_spec.rb b/test/kitchen/test/integration/security-agent-test/rspec_datadog/security-agent-test_spec.rb similarity index 100% rename from test/kitchen/test/integration/security-agent-test/rspec/security-agent-test_spec.rb rename to test/kitchen/test/integration/security-agent-test/rspec_datadog/security-agent-test_spec.rb diff --git a/test/kitchen/test/integration/step-by-step/rspec/spec_helper.rb b/test/kitchen/test/integration/step-by-step/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/step-by-step/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/step-by-step/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/step-by-step/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/step-by-step/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/step-by-step/rspec/step-by-step_spec.rb b/test/kitchen/test/integration/step-by-step/rspec_datadog/step-by-step_spec.rb similarity index 100% rename from test/kitchen/test/integration/step-by-step/rspec/step-by-step_spec.rb rename to test/kitchen/test/integration/step-by-step/rspec_datadog/step-by-step_spec.rb diff --git a/test/kitchen/test/integration/system-probe-test/rspec/kernel_out_spec_helper.rb b/test/kitchen/test/integration/system-probe-test/rspec/kernel_out_spec_helper.rb deleted file mode 120000 index 84d9a999217cb..0000000000000 --- a/test/kitchen/test/integration/system-probe-test/rspec/kernel_out_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/kernel_out_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/system-probe-test/rspec_datadog/Gemfile b/test/kitchen/test/integration/system-probe-test/rspec_datadog/Gemfile new file mode 100644 index 0000000000000..d3a5ede1c913f --- /dev/null +++ b/test/kitchen/test/integration/system-probe-test/rspec_datadog/Gemfile @@ -0,0 +1,4 @@ +source 'https://rubygems.org' + +gem 'rspec' +gem 'rexml' \ No newline at end of file diff --git a/test/kitchen/test/integration/system-probe-test/rspec_datadog/kernel_out_spec_helper.rb b/test/kitchen/test/integration/system-probe-test/rspec_datadog/kernel_out_spec_helper.rb new file mode 120000 index 0000000000000..08fdb900015b3 --- /dev/null +++ b/test/kitchen/test/integration/system-probe-test/rspec_datadog/kernel_out_spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/kernel_out_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/system-probe-test/rspec/system-probe-test_spec.rb b/test/kitchen/test/integration/system-probe-test/rspec_datadog/system-probe-test_spec.rb similarity index 100% rename from test/kitchen/test/integration/system-probe-test/rspec/system-probe-test_spec.rb rename to test/kitchen/test/integration/system-probe-test/rspec_datadog/system-probe-test_spec.rb diff --git a/test/kitchen/test/integration/upgrade-agent5/rspec/spec_helper.rb b/test/kitchen/test/integration/upgrade-agent5/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent5/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent5/rspec/upgrade-agent5_spec.rb b/test/kitchen/test/integration/upgrade-agent5/rspec/upgrade-agent5_spec.rb deleted file mode 120000 index c26915b406eb6..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent5/rspec/upgrade-agent5_spec.rb +++ /dev/null @@ -1 +0,0 @@ -../../upgrade/rspec/upgrade_spec.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/upgrade-agent5_spec.rb b/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/upgrade-agent5_spec.rb new file mode 120000 index 0000000000000..01c4a8f741b40 --- /dev/null +++ b/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/upgrade-agent5_spec.rb @@ -0,0 +1 @@ +../../upgrade/rspec_datadog/upgrade_spec.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent6/rspec/spec_helper.rb b/test/kitchen/test/integration/upgrade-agent6/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent6/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent6/rspec/upgrade-agent6_spec.rb b/test/kitchen/test/integration/upgrade-agent6/rspec/upgrade-agent6_spec.rb deleted file mode 120000 index c26915b406eb6..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent6/rspec/upgrade-agent6_spec.rb +++ /dev/null @@ -1 +0,0 @@ -../../upgrade/rspec/upgrade_spec.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/upgrade-agent6_spec.rb b/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/upgrade-agent6_spec.rb new file mode 120000 index 0000000000000..01c4a8f741b40 --- /dev/null +++ b/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/upgrade-agent6_spec.rb @@ -0,0 +1 @@ +../../upgrade/rspec_datadog/upgrade_spec.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent7/rspec/spec_helper.rb b/test/kitchen/test/integration/upgrade-agent7/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent7/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent7/rspec/upgrade-agent7_spec.rb b/test/kitchen/test/integration/upgrade-agent7/rspec/upgrade-agent7_spec.rb deleted file mode 120000 index c26915b406eb6..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent7/rspec/upgrade-agent7_spec.rb +++ /dev/null @@ -1 +0,0 @@ -../../upgrade/rspec/upgrade_spec.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/upgrade-agent7_spec.rb b/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/upgrade-agent7_spec.rb new file mode 120000 index 0000000000000..01c4a8f741b40 --- /dev/null +++ b/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/upgrade-agent7_spec.rb @@ -0,0 +1 @@ +../../upgrade/rspec_datadog/upgrade_spec.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade/rspec/spec_helper.rb b/test/kitchen/test/integration/upgrade/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/upgrade/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/upgrade/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/upgrade/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade/rspec/upgrade_spec.rb b/test/kitchen/test/integration/upgrade/rspec_datadog/upgrade_spec.rb similarity index 100% rename from test/kitchen/test/integration/upgrade/rspec/upgrade_spec.rb rename to test/kitchen/test/integration/upgrade/rspec_datadog/upgrade_spec.rb diff --git a/test/kitchen/test/integration/win-all-subservices/rspec/spec_helper.rb b/test/kitchen/test/integration/win-all-subservices/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/win-all-subservices/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-all-subservices/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-all-subservices/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/win-all-subservices/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-all-subservices/rspec/win-all-subservices_spec.rb b/test/kitchen/test/integration/win-all-subservices/rspec_datadog/win-all-subservices_spec.rb similarity index 75% rename from test/kitchen/test/integration/win-all-subservices/rspec/win-all-subservices_spec.rb rename to test/kitchen/test/integration/win-all-subservices/rspec_datadog/win-all-subservices_spec.rb index 0cf8e828f27f8..8ce9dc96f6656 100644 --- a/test/kitchen/test/integration/win-all-subservices/rspec/win-all-subservices_spec.rb +++ b/test/kitchen/test/integration/win-all-subservices/rspec_datadog/win-all-subservices_spec.rb @@ -4,9 +4,11 @@ describe 'win-all-subservices' do it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' it_behaves_like 'an Agent with APM enabled' it_behaves_like 'an Agent with logs enabled' it_behaves_like 'an Agent with process enabled' + it_behaves_like 'a running Agent with no errors' + it_behaves_like 'a running Agent with APM' + it_behaves_like 'a running Agent with process enabled' end \ No newline at end of file diff --git a/test/kitchen/test/integration/win-alt-dir/rspec/spec_helper.rb b/test/kitchen/test/integration/win-alt-dir/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/win-alt-dir/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-alt-dir/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-alt-dir/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/win-alt-dir/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-alt-dir/rspec/win-alt-dir_spec.rb b/test/kitchen/test/integration/win-alt-dir/rspec_datadog/win-alt-dir_spec.rb similarity index 81% rename from test/kitchen/test/integration/win-alt-dir/rspec/win-alt-dir_spec.rb rename to test/kitchen/test/integration/win-alt-dir/rspec_datadog/win-alt-dir_spec.rb index 6536c86c305bb..1cf95b9c45db7 100644 --- a/test/kitchen/test/integration/win-alt-dir/rspec/win-alt-dir_spec.rb +++ b/test/kitchen/test/integration/win-alt-dir/rspec_datadog/win-alt-dir_spec.rb @@ -30,7 +30,7 @@ def check_user_exists(name) JSON.parse(IO.read(dna_json_path)).fetch('dd-agent-rspec').fetch('PROJECTLOCATION') } it 'has the proper binary root' do - expect(File).not_to exist("#{ENV['ProgramFiles']}\\DataDog") + expect(File).not_to exist("#{ENV['ProgramFiles']}\\DataDog\\Datadog Agent") expect(File).to exist("#{binary_path}") end end @@ -101,9 +101,11 @@ def check_user_exists(name) # A;CIID;KA;;;SY = Keyallaccess (local system) # A;CIIOID;KA;;;CO= container inherit, inherit only, inherited ace, keyallAccess, to creator/owner # A;CIID;KR;;;AC = allow container inherit/inherited ace Key Read to AC () - expected_sddl = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;OICIIO;CCDCLCSWRPWPSDRCWDWOGA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)" - expected_sddl_2008 = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;OICIIO;CCDCLCSWRPWPSDRCWDWOGA;;;#{dd_user_sid})(A;ID;KR;;;BU)(A;CIIOID;GR;;;BU)(A;ID;KA;;;BA)(A;CIIOID;GA;;;BA)(A;ID;KA;;;SY)(A;CIIOID;GA;;;SY)(A;CIIOID;GA;;;CO)" - expected_sddl_with_edge = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;OICIIO;CCDCLCSWRPWPSDRCWDWOGA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)(A;CIID;KR;;;S-1-15-3-1024-1065365936-1281604716-3511738428-1654721687-432734479-3232135806-4053264122-3456934681)" + expected_sddl = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;OICIIO;CCDCLCSWRPWPSDRCWDWOGA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)" + expected_sddl_2008 = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;OICIIO;CCDCLCSWRPWPSDRCWDWOGA;;;#{dd_user_sid})(A;ID;KR;;;BU)(A;CIIOID;GR;;;BU)(A;ID;KA;;;BA)(A;CIIOID;GA;;;BA)(A;ID;KA;;;SY)(A;CIIOID;GA;;;SY)(A;CIIOID;GA;;;CO)" + expected_sddl_with_edge = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;OICIIO;CCDCLCSWRPWPSDRCWDWOGA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)(A;CIID;KR;;;S-1-15-3-1024-1065365936-1281604716-3511738428-1654721687-432734479-3232135806-4053264122-3456934681)" + expected_sddl_ng = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)" + expected_sddl_ng_with_edge = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)(A;CIID;KR;;;S-1-15-3-1024-1065365936-1281604716-3511738428-1654721687-432734479-3232135806-4053264122-3456934681)" ## sigh. M$ added a mystery sid some time back, that Edge/IE use for sandboxing, ## and it's an inherited ace. Allow that one, too @@ -113,6 +115,8 @@ def check_user_exists(name) expect(actual_sddl).to have_sddl_equal_to(expected_sddl) .or have_sddl_equal_to(expected_sddl_2008) .or have_sddl_equal_to(expected_sddl_with_edge) + .or have_sddl_equal_to(expected_sddl_ng) + .or have_sddl_equal_to(expected_sddl_ng_with_edge) end it 'has agent.exe running as ddagentuser' do diff --git a/test/kitchen/test/integration/win-install-fail/rspec/win-install-fail_spec.rb b/test/kitchen/test/integration/win-install-fail/rspec_datadog/win-install-fail_spec.rb similarity index 100% rename from test/kitchen/test/integration/win-install-fail/rspec/win-install-fail_spec.rb rename to test/kitchen/test/integration/win-install-fail/rspec_datadog/win-install-fail_spec.rb diff --git a/test/kitchen/test/integration/win-installopts/rspec/spec_helper.rb b/test/kitchen/test/integration/win-installopts/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/win-installopts/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-installopts/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-installopts/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/win-installopts/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-installopts/rspec/win-installopts_spec.rb b/test/kitchen/test/integration/win-installopts/rspec_datadog/win-installopts_spec.rb similarity index 100% rename from test/kitchen/test/integration/win-installopts/rspec/win-installopts_spec.rb rename to test/kitchen/test/integration/win-installopts/rspec_datadog/win-installopts_spec.rb diff --git a/test/kitchen/test/integration/win-no-subservices/rspec/spec_helper.rb b/test/kitchen/test/integration/win-no-subservices/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/win-no-subservices/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-no-subservices/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-no-subservices/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/win-no-subservices/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-no-subservices/rspec/win-no-subservices_spec.rb b/test/kitchen/test/integration/win-no-subservices/rspec_datadog/win-no-subservices_spec.rb similarity index 100% rename from test/kitchen/test/integration/win-no-subservices/rspec/win-no-subservices_spec.rb rename to test/kitchen/test/integration/win-no-subservices/rspec_datadog/win-no-subservices_spec.rb diff --git a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec/spec_helper.rb b/test/kitchen/test/integration/win-npm-beta-upgrade/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-beta-upgrade/rspec/windows_npm_spec_helper.rb deleted file mode 120000 index 625d8858342ef..0000000000000 --- a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec/win-npm-beta-upgrade_spec.rb b/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/win-npm-beta-upgrade_spec.rb similarity index 100% rename from test/kitchen/test/integration/win-npm-beta-upgrade/rspec/win-npm-beta-upgrade_spec.rb rename to test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/win-npm-beta-upgrade_spec.rb diff --git a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/windows_npm_spec_helper.rb new file mode 120000 index 0000000000000..7a89ca8b118c7 --- /dev/null +++ b/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/windows_npm_spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-no-npm-option/rspec/spec_helper.rb b/test/kitchen/test/integration/win-npm-no-npm-option/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/win-npm-no-npm-option/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-no-npm-option/rspec/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-no-npm-option/rspec/windows_npm_spec_helper.rb deleted file mode 120000 index 625d8858342ef..0000000000000 --- a/test/kitchen/test/integration/win-npm-no-npm-option/rspec/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-no-npm-option/rspec/win-npm-no-npm-option_spec.rb b/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/win-npm-no-npm-option_spec.rb similarity index 100% rename from test/kitchen/test/integration/win-npm-no-npm-option/rspec/win-npm-no-npm-option_spec.rb rename to test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/win-npm-no-npm-option_spec.rb diff --git a/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/windows_npm_spec_helper.rb new file mode 120000 index 0000000000000..7a89ca8b118c7 --- /dev/null +++ b/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/windows_npm_spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec/spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec/windows_npm_spec_helper.rb deleted file mode 120000 index 625d8858342ef..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec/win-npm-upgrade-no-npm_spec.rb b/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/win-npm-upgrade-no-npm_spec.rb similarity index 100% rename from test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec/win-npm-upgrade-no-npm_spec.rb rename to test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/win-npm-upgrade-no-npm_spec.rb diff --git a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/windows_npm_spec_helper.rb new file mode 120000 index 0000000000000..7a89ca8b118c7 --- /dev/null +++ b/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/windows_npm_spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec/spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec/windows_npm_spec_helper.rb deleted file mode 120000 index 625d8858342ef..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec/win-npm-upgrade-to-npm_spec.rb b/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/win-npm-upgrade-to-npm_spec.rb similarity index 100% rename from test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec/win-npm-upgrade-to-npm_spec.rb rename to test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/win-npm-upgrade-to-npm_spec.rb diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/windows_npm_spec_helper.rb new file mode 120000 index 0000000000000..7a89ca8b118c7 --- /dev/null +++ b/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/windows_npm_spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-npm-option/rspec/spec_helper.rb b/test/kitchen/test/integration/win-npm-with-npm-option/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-npm-option/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-npm-option/rspec/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-with-npm-option/rspec/windows_npm_spec_helper.rb deleted file mode 120000 index 625d8858342ef..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-npm-option/rspec/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-npm-option/rspec/win-npm-with-npm-option_spec.rb b/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/win-npm-with-npm-option_spec.rb similarity index 100% rename from test/kitchen/test/integration/win-npm-with-npm-option/rspec/win-npm-with-npm-option_spec.rb rename to test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/win-npm-with-npm-option_spec.rb diff --git a/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/windows_npm_spec_helper.rb new file mode 120000 index 0000000000000..7a89ca8b118c7 --- /dev/null +++ b/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/windows_npm_spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-reinstall-option/rspec/spec_helper.rb b/test/kitchen/test/integration/win-reinstall-option/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/win-reinstall-option/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-reinstall-option/rspec/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-reinstall-option/rspec/windows_npm_spec_helper.rb deleted file mode 120000 index 625d8858342ef..0000000000000 --- a/test/kitchen/test/integration/win-reinstall-option/rspec/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-reinstall-option/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-reinstall-option/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/win-reinstall-option/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-reinstall-option/rspec/win-reinstall-option_spec.rb b/test/kitchen/test/integration/win-reinstall-option/rspec_datadog/win-reinstall-option_spec.rb similarity index 100% rename from test/kitchen/test/integration/win-reinstall-option/rspec/win-reinstall-option_spec.rb rename to test/kitchen/test/integration/win-reinstall-option/rspec_datadog/win-reinstall-option_spec.rb diff --git a/test/kitchen/test/integration/win-reinstall-option/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-reinstall-option/rspec_datadog/windows_npm_spec_helper.rb new file mode 120000 index 0000000000000..7a89ca8b118c7 --- /dev/null +++ b/test/kitchen/test/integration/win-reinstall-option/rspec_datadog/windows_npm_spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-repair/rspec/spec_helper.rb b/test/kitchen/test/integration/win-repair/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/win-repair/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-repair/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-repair/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/win-repair/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-repair/rspec/win-repair_spec.rb b/test/kitchen/test/integration/win-repair/rspec_datadog/win-repair_spec.rb similarity index 100% rename from test/kitchen/test/integration/win-repair/rspec/win-repair_spec.rb rename to test/kitchen/test/integration/win-repair/rspec_datadog/win-repair_spec.rb diff --git a/test/kitchen/test/integration/win-sysprobe-test/rspec/spec_helper.rb b/test/kitchen/test/integration/win-sysprobe-test/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/win-sysprobe-test/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-sysprobe-test/rspec/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-sysprobe-test/rspec/windows_npm_spec_helper.rb deleted file mode 120000 index 625d8858342ef..0000000000000 --- a/test/kitchen/test/integration/win-sysprobe-test/rspec/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-sysprobe-test/rspec/sysprobe_spec_helper.rb b/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/sysprobe_spec_helper.rb similarity index 100% rename from test/kitchen/test/integration/win-sysprobe-test/rspec/sysprobe_spec_helper.rb rename to test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/sysprobe_spec_helper.rb diff --git a/test/kitchen/test/integration/win-sysprobe-test/rspec/win-sysprobe-test_spec.rb b/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/win-sysprobe-test_spec.rb similarity index 100% rename from test/kitchen/test/integration/win-sysprobe-test/rspec/win-sysprobe-test_spec.rb rename to test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/win-sysprobe-test_spec.rb diff --git a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/windows_npm_spec_helper.rb new file mode 120000 index 0000000000000..7a89ca8b118c7 --- /dev/null +++ b/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/windows_npm_spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-user/rspec/spec_helper.rb b/test/kitchen/test/integration/win-user/rspec/spec_helper.rb deleted file mode 120000 index 8d8fd7a2f57d1..0000000000000 --- a/test/kitchen/test/integration/win-user/rspec/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-user/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-user/rspec_datadog/spec_helper.rb new file mode 120000 index 0000000000000..257bfb51db84c --- /dev/null +++ b/test/kitchen/test/integration/win-user/rspec_datadog/spec_helper.rb @@ -0,0 +1 @@ +../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-user/rspec/win-user_spec.rb b/test/kitchen/test/integration/win-user/rspec_datadog/win-user_spec.rb similarity index 82% rename from test/kitchen/test/integration/win-user/rspec/win-user_spec.rb rename to test/kitchen/test/integration/win-user/rspec_datadog/win-user_spec.rb index ec3e2a583c61d..c815fe295d150 100644 --- a/test/kitchen/test/integration/win-user/rspec/win-user_spec.rb +++ b/test/kitchen/test/integration/win-user/rspec_datadog/win-user_spec.rb @@ -112,10 +112,12 @@ # A;CIID;KA;;;SY = Keyallaccess (local system) # A;CIIOID;KA;;;CO= container inherit, inherit only, inherited ace, keyallAccess, to creator/owner # A;CIID;KR;;;AC = allow container inherit/inherited ace Key Read to AC () - expected_sddl = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;OICIIO;CCDCLCSWRPWPSDRCWDWOGA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)" - expected_sddl_2008 = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;OICIIO;CCDCLCSWRPWPSDRCWDWOGA;;;#{dd_user_sid})(A;ID;KR;;;BU)(A;CIIOID;GR;;;BU)(A;ID;KA;;;BA)(A;CIIOID;GA;;;BA)(A;ID;KA;;;SY)(A;CIIOID;GA;;;SY)(A;CIIOID;GA;;;CO)" - expected_sddl_with_edge = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;OICIIO;CCDCLCSWRPWPSDRCWDWOGA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)(A;CIID;KR;;;S-1-15-3-1024-1065365936-1281604716-3511738428-1654721687-432734479-3232135806-4053264122-3456934681)" - + expected_sddl = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;OICIIO;CCDCLCSWRPWPSDRCWDWOGA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)" + expected_sddl_2008 = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;OICIIO;CCDCLCSWRPWPSDRCWDWOGA;;;#{dd_user_sid})(A;ID;KR;;;BU)(A;CIIOID;GR;;;BU)(A;ID;KA;;;BA)(A;CIIOID;GA;;;BA)(A;ID;KA;;;SY)(A;CIIOID;GA;;;SY)(A;CIIOID;GA;;;CO)" + expected_sddl_with_edge = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;OICIIO;CCDCLCSWRPWPSDRCWDWOGA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)(A;CIID;KR;;;S-1-15-3-1024-1065365936-1281604716-3511738428-1654721687-432734479-3232135806-4053264122-3456934681)" + expected_sddl_ng = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)" + expected_sddl_ng_with_edge = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)(A;CIID;KR;;;S-1-15-3-1024-1065365936-1281604716-3511738428-1654721687-432734479-3232135806-4053264122-3456934681)" + ## sigh. M$ added a mystery sid some time back, that Edge/IE use for sandboxing, ## and it's an inherited ace. Allow that one, too @@ -124,6 +126,8 @@ expect(actual_sddl).to have_sddl_equal_to(expected_sddl) .or have_sddl_equal_to(expected_sddl_2008) .or have_sddl_equal_to(expected_sddl_with_edge) + .or have_sddl_equal_to(expected_sddl_ng) + .or have_sddl_equal_to(expected_sddl_ng_with_edge) end it 'has agent.exe running as ddagentuser' do @@ -148,9 +152,11 @@ end describe 'dd-agent-win-user' do # it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' it_behaves_like 'an Agent with APM enabled' it_behaves_like 'an Agent with process enabled' it_behaves_like 'an Agent with valid permissions' + it_behaves_like 'a running Agent with no errors' + it_behaves_like 'a running Agent with APM' + it_behaves_like 'a running Agent with process enabled' end \ No newline at end of file diff --git a/test/new-e2e/go.mod b/test/new-e2e/go.mod index ee760f9ef50d3..6155e04bbd60e 100644 --- a/test/new-e2e/go.mod +++ b/test/new-e2e/go.mod @@ -3,95 +3,102 @@ module github.com/DataDog/datadog-agent/test/new-e2e go 1.18 require ( - github.com/DataDog/test-infra-definitions v0.0.0-20220922133124-6a96d15cd562 - github.com/aws/aws-sdk-go-v2 v1.16.14 - github.com/aws/aws-sdk-go-v2/config v1.17.5 - github.com/aws/aws-sdk-go-v2/service/ssm v1.27.13 + github.com/DataDog/test-infra-definitions v0.0.0-20221213160310-a4b5a27ec1dd + github.com/aws/aws-sdk-go-v2 v1.17.2 + github.com/aws/aws-sdk-go-v2/config v1.18.4 + github.com/aws/aws-sdk-go-v2/service/ssm v1.33.2 github.com/cenkalti/backoff v2.2.1+incompatible - github.com/pulumi/pulumi/sdk/v3 v3.39.3 + github.com/pulumi/pulumi/sdk/v3 v3.49.0 github.com/stretchr/testify v1.8.1 - golang.org/x/crypto v0.1.0 + golang.org/x/crypto v0.4.0 gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 ) require ( + github.com/HdrHistogram/hdrhistogram-go v1.1.2 // indirect github.com/Masterminds/semver v1.5.0 // indirect - github.com/Microsoft/go-winio v0.5.2 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7 // indirect + github.com/Microsoft/go-winio v0.6.0 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 // indirect github.com/acomagu/bufpipe v1.0.3 // indirect github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.12.18 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.15 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.21 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.15 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.3.22 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.15 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.11.21 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.3 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.16.17 // indirect - github.com/aws/smithy-go v1.13.2 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.13.4 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.20 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.26 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.20 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.3.27 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.20 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.11.26 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.9 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.17.6 // indirect + github.com/aws/smithy-go v1.13.5 // indirect github.com/blang/semver v3.5.1+incompatible // indirect github.com/cheggaaa/pb v1.0.29 // indirect + github.com/cloudflare/circl v1.3.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/djherbis/times v1.2.0 // indirect - github.com/emirpasic/gods v1.12.0 // indirect + github.com/djherbis/times v1.5.0 // indirect + github.com/emirpasic/gods v1.18.1 // indirect github.com/fatih/color v1.13.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-git/gcfg v1.5.0 // indirect github.com/go-git/go-billy/v5 v5.3.1 // indirect - github.com/go-git/go-git/v5 v5.4.2 // indirect - github.com/gofrs/uuid v4.0.0+incompatible // indirect + github.com/go-git/go-git/v5 v5.5.1 // indirect + github.com/gofrs/uuid v4.3.1+incompatible // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/glog v1.0.0 // indirect github.com/golang/protobuf v1.5.2 // indirect - github.com/google/go-cmp v0.5.9 // indirect github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/imdario/mergo v0.3.12 // indirect - github.com/inconshreveable/mousetrap v1.0.1 // indirect + github.com/imdario/mergo v0.3.13 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 // indirect + github.com/kevinburke/ssh_config v1.2.0 // indirect github.com/mattn/go-colorable v0.1.12 // indirect github.com/mattn/go-isatty v0.0.16 // indirect - github.com/mattn/go-runewidth v0.0.13 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mattn/go-runewidth v0.0.14 // indirect github.com/mitchellh/go-ps v1.0.0 // indirect github.com/nxadm/tail v1.4.8 // indirect - github.com/opentracing/basictracer-go v1.0.0 // indirect + github.com/opentracing/basictracer-go v1.1.0 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/pjbgf/sha1cd v0.2.3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pkg/term v1.1.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/pulumi/pulumi-aws/sdk/v5 v5.7.2 // indirect - github.com/pulumi/pulumi-awsx/sdk v1.0.0-beta.9 // indirect - github.com/pulumi/pulumi-docker/sdk/v3 v3.2.0 // indirect - github.com/rivo/uniseg v0.2.0 // indirect - github.com/rogpeppe/go-internal v1.8.1 // indirect - github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94 // indirect - github.com/sergi/go-diff v1.1.0 // indirect + github.com/pulumi/pulumi-aws/sdk/v5 v5.23.0 // indirect + github.com/pulumi/pulumi-awsx/sdk v1.0.0 // indirect + github.com/pulumi/pulumi-command/sdk v0.7.0 // indirect + github.com/pulumi/pulumi-docker/sdk/v3 v3.6.1 // indirect + github.com/pulumi/pulumi-kubernetes/sdk/v3 v3.22.2 // indirect + github.com/rivo/uniseg v0.4.3 // indirect + github.com/rogpeppe/go-internal v1.9.0 // indirect + github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect + github.com/santhosh-tekuri/jsonschema/v5 v5.1.1 // indirect + github.com/sergi/go-diff v1.2.0 // indirect + github.com/skeema/knownhosts v1.1.0 // indirect github.com/spf13/cast v1.5.0 // indirect github.com/spf13/cobra v1.6.1 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6 // indirect + github.com/texttheater/golang-levenshtein v1.0.1 // indirect github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 // indirect - github.com/uber/jaeger-client-go v2.22.1+incompatible // indirect - github.com/uber/jaeger-lib v2.2.0+incompatible // indirect - github.com/xanzy/ssh-agent v0.3.2 // indirect + github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect + github.com/uber/jaeger-lib v2.4.1+incompatible // indirect + github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zorkian/go-datadog-api v2.30.0+incompatible // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/net v0.2.0 // indirect - golang.org/x/sys v0.2.0 // indirect - golang.org/x/term v0.2.0 // indirect - golang.org/x/text v0.4.0 // indirect - google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c // indirect - google.golang.org/grpc v1.50.1 // indirect + golang.org/x/mod v0.7.0 // indirect + golang.org/x/net v0.4.0 // indirect + golang.org/x/sys v0.3.0 // indirect + golang.org/x/term v0.3.0 // indirect + golang.org/x/text v0.5.0 // indirect + golang.org/x/tools v0.4.0 // indirect + google.golang.org/genproto v0.0.0-20221207170731-23e4bf6bdc37 // indirect + google.golang.org/grpc v1.51.0 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect lukechampine.com/frand v1.4.2 // indirect - sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 // indirect + sourcegraph.com/sourcegraph/appdash v0.0.0-20211028080628-e2786a622600 // indirect ) diff --git a/test/new-e2e/go.sum b/test/new-e2e/go.sum index 05a7442421dd3..ac7f6586fbae0 100644 --- a/test/new-e2e/go.sum +++ b/test/new-e2e/go.sum @@ -1,87 +1,84 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/test-infra-definitions v0.0.0-20220922133124-6a96d15cd562 h1:47ruiRurgsfmcopIqbZb3/+5hlWzl7uygi/7LX2D+6c= -github.com/DataDog/test-infra-definitions v0.0.0-20220922133124-6a96d15cd562/go.mod h1:1mKRGHLs37GkPzE3YaN4M5cU+Z66i4VtMrcjsKsISiE= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DataDog/test-infra-definitions v0.0.0-20221213160310-a4b5a27ec1dd h1:NoPGW4gyLfOMlr10Eya/vv4vfw1nuaSxgqWhv4bNpuQ= +github.com/DataDog/test-infra-definitions v0.0.0-20221213160310-a4b5a27ec1dd/go.mod h1:weTpRyRbOZYDpYk06wIROZysIkYP3o0+QYErkcSJV8U= +github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7 h1:YoJbenK9C67SkzkDfmQuVln04ygHj3vjZfd9FL+GmQQ= +github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= +github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 h1:ra2OtmuW0AE5csawV4YXMNGNQQXvLRps3z2Z59OPO+I= +github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY= github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/aws/aws-sdk-go-v2 v1.16.14 h1:db6GvO4Z2UqHt5gvT0lr6J5x5P+oQ7bdRzczVaRekMU= -github.com/aws/aws-sdk-go-v2 v1.16.14/go.mod h1:s/G+UV29dECbF5rf+RNj1xhlmvoNurGSr+McVSRj59w= -github.com/aws/aws-sdk-go-v2/config v1.17.5 h1:+NS1BWvprx7nHcIk5o32LrZgifs/7Pm1V2nWjQgZ2H0= -github.com/aws/aws-sdk-go-v2/config v1.17.5/go.mod h1:H0cvPNDO3uExWts/9PDhD/0ne2esu1uaIulwn1vkwxM= -github.com/aws/aws-sdk-go-v2/credentials v1.12.18 h1:HF62tbhARhgLfvmfwUbL9qZ+dkbZYzbFdxBb3l5gr7Q= -github.com/aws/aws-sdk-go-v2/credentials v1.12.18/go.mod h1:O7n/CPagQ33rfG6h7vR/W02ammuc5CrsSM22cNZp9so= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.15 h1:nkQ+aI0OCeYfzrBipL6ja/6VEbUnHQoZHBHtoK+Nzxw= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.15/go.mod h1:Oz2/qWINxIgSmoZT9adpxJy2UhpcOAI3TIyWgYMVSz0= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.21 h1:gRIXnmAVNyoRQywdNtpAkgY+f30QNzgF53Q5OobNZZs= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.21/go.mod h1:XsmHMV9c512xgsW01q7H0ut+UQQQpWX8QsFbdLHDwaU= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.15 h1:noAhOo2mMDyYhTx99aYPvQw16T3fQ/DiKAv9fzpIKH8= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.15/go.mod h1:kjJ4CyD9M3Wq88GYg3IPfj67Rs0Uvz8aXK7MJ8BvE4I= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.22 h1:nF+E8HfYpOMw6M5oA9efB602VC00IHNQnB5CmFvZPvA= -github.com/aws/aws-sdk-go-v2/internal/ini v1.3.22/go.mod h1:tltHVGy977LrSOgRR5aV9+miyno/Gul/uJNPKS7FzP4= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.15 h1:xlf0J6DUgAj/ocvKQxCmad8Bu1lJuRbt5Wu+4G1xw1g= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.15/go.mod h1:ZVJ7ejRl4+tkWMuCwjXoy0jd8fF5u3RCyWjSVjUIvQE= -github.com/aws/aws-sdk-go-v2/service/ssm v1.27.13 h1:frTWO9DxuGG9zzV5F3gvc9ondPUd/Ae7x1lXJt+4Fwg= -github.com/aws/aws-sdk-go-v2/service/ssm v1.27.13/go.mod h1:DLGkJX+FzEhluRGOTf9eejrDPu1gZ+1GuNkgLYdnPFM= -github.com/aws/aws-sdk-go-v2/service/sso v1.11.21 h1:7jUFr+7F4MzIjCZzy7ygRtXFQcQ0kAbT0gUvtUeAdyU= -github.com/aws/aws-sdk-go-v2/service/sso v1.11.21/go.mod h1:q8nYq51W3gpZempYsAD83fPRlrOTMCwN+Ahg4BKFTXQ= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.3 h1:UTTPNP3/WzZa7hoHP3Szb/Yl0bM3NoBrf5ABy1OArUM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.3/go.mod h1:+IF75RMJh0+zqTGXGshyEGRsU2ImqWv6UuHGkHl6kEo= -github.com/aws/aws-sdk-go-v2/service/sts v1.16.17 h1:LVM2jzEQ8mhb2dhrFl4PJ3sa5+KcKT01dsMk2Ma9/FU= -github.com/aws/aws-sdk-go-v2/service/sts v1.16.17/go.mod h1:bQujK1n0V1D1Gz5uII1jaB1WDvhj4/T3tElsJnVXCR0= -github.com/aws/smithy-go v1.13.2 h1:TBLKyeJfXTrTXRHmsv4qWt9IQGYyWThLYaJWSahTOGE= -github.com/aws/smithy-go v1.13.2/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/aws/aws-sdk-go-v2 v1.17.2 h1:r0yRZInwiPBNpQ4aDy/Ssh3ROWsGtKDwar2JS8Lm+N8= +github.com/aws/aws-sdk-go-v2 v1.17.2/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= +github.com/aws/aws-sdk-go-v2/config v1.18.4 h1:VZKhr3uAADXHStS/Gf9xSYVmmaluTUfkc0dcbPiDsKE= +github.com/aws/aws-sdk-go-v2/config v1.18.4/go.mod h1:EZxMPLSdGAZ3eAmkqXfYbRppZJTzFTkv8VyEzJhKko4= +github.com/aws/aws-sdk-go-v2/credentials v1.13.4 h1:nEbHIyJy7mCvQ/kzGG7VWHSBpRB4H6sJy3bWierWUtg= +github.com/aws/aws-sdk-go-v2/credentials v1.13.4/go.mod h1:/Cj5w9LRsNTLSwexsohwDME32OzJ6U81Zs33zr2ZWOM= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.20 h1:tpNOglTZ8kg9T38NpcGBxudqfUAwUzyUnLQ4XSd0CHE= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.20/go.mod h1:d9xFpWd3qYwdIXM0fvu7deD08vvdRXyc/ueV+0SqaWE= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.26 h1:5WU31cY7m0tG+AiaXuXGoMzo2GBQ1IixtWa8Yywsgco= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.26/go.mod h1:2E0LdbJW6lbeU4uxjum99GZzI0ZjDpAb0CoSCM0oeEY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.20 h1:WW0qSzDWoiWU2FS5DbKpxGilFVlCEJPwx4YtjdfI0Jw= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.20/go.mod h1:/+6lSiby8TBFpTVXZgKiN/rCfkYXEGvhlM4zCgPpt7w= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.27 h1:N2eKFw2S+JWRCtTt0IhIX7uoGGQciD4p6ba+SJv4WEU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.27/go.mod h1:RdwFVc7PBYWY33fa2+8T1mSqQ7ZEK4ILpM0wfioDC3w= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.20 h1:jlgyHbkZQAgAc7VIxJDmtouH8eNjOk2REVAQfVhdaiQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.20/go.mod h1:Xs52xaLBqDEKRcAfX/hgjmD3YQ7c/W+BEyfamlO/W2E= +github.com/aws/aws-sdk-go-v2/service/ssm v1.33.2 h1:NXq6I98AZ3rrnykgTp93ik4RykmYEInnGDc4I/mYQNk= +github.com/aws/aws-sdk-go-v2/service/ssm v1.33.2/go.mod h1:bUqD3OXwwp4e+IPXVPfp6g/7OyiSesUjqHwOcwtfZBM= +github.com/aws/aws-sdk-go-v2/service/sso v1.11.26 h1:ActQgdTNQej/RuUJjB9uxYVLDOvRGtUreXF8L3c8wyg= +github.com/aws/aws-sdk-go-v2/service/sso v1.11.26/go.mod h1:uB9tV79ULEZUXc6Ob18A46KSQ0JDlrplPni9XW6Ot60= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.9 h1:wihKuqYUlA2T/Rx+yu2s6NDAns8B9DgnRooB1PVhY+Q= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.9/go.mod h1:2E/3D/mB8/r2J7nK42daoKP/ooCwbf0q1PznNc+DZTU= +github.com/aws/aws-sdk-go-v2/service/sts v1.17.6 h1:VQFOLQVL3BrKM/NLO/7FiS4vcp5bqK0mGMyk09xLoAY= +github.com/aws/aws-sdk-go-v2/service/sts v1.17.6/go.mod h1:Az3OXXYGyfNwQNsK/31L4R75qFYnO641RZGAoV3uH1c= +github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= +github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cheggaaa/pb v1.0.18/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo= github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= +github.com/cloudflare/circl v1.3.0 h1:Anq00jxDtoyX3+aCaYUZ0vXC5r4k4epberfWGDXV1zE= +github.com/cloudflare/circl v1.3.0/go.mod h1:+CauBF6R70Jqcyl8N2hC8pAXYbWkGIezuSbuGLtRhnw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/djherbis/times v1.2.0 h1:xANXjsC/iBqbO00vkWlYwPWgBgEVU6m6AFYg0Pic+Mc= github.com/djherbis/times v1.2.0/go.mod h1:CGMZlo255K5r4Yw0b9RRfFQpM2y7uOmxg4jm9HsaVf8= -github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= +github.com/djherbis/times v1.5.0 h1:79myA211VwPhFTqUk8xehWrsEO+zcIZj0zT8mXPVARU= +github.com/djherbis/times v1.5.0/go.mod h1:5q7FDLvbNg1L/KaBmPcWlVR9NmoKo3+ucqUA3ijQhA0= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -90,42 +87,38 @@ github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= +github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= github.com/go-git/go-billy/v5 v5.3.1 h1:CPiOUAzKtMRvolEKw+bG1PLRpT7D3LIs3/3ey4Aiu34= github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-git-fixtures/v4 v4.2.1 h1:n9gGL1Ct/yIw+nfsfr8s4+sbhT+Ncu2SubfXjIWgci8= github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= -github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4= +github.com/go-git/go-git-fixtures/v4 v4.3.1 h1:y5z6dd3qi8Hl+stezc8p3JxDkoTRqMAlKnXHuzrfjTQ= +github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-git/go-git/v5 v5.5.1 h1:5vtv2TB5PM/gPM+EvsHJ16hJh4uAkdGcKilcwY7FYwo= +github.com/go-git/go-git/v5 v5.5.1/go.mod h1:uz5PQ3d0gz7mSgzZhSJToM6ALPaKCdSnl58/Xb5hzr8= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= -github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gofrs/uuid v4.3.1+incompatible h1:0/KbAdpx3UXAx1kEOWHJeOkpbgRFGHVgv+CFIY7dBJI= +github.com/gofrs/uuid v4.3.1+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= @@ -138,21 +131,17 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -162,40 +151,36 @@ github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHh github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= +github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 h1:DowS9hvgyYSX4TO5NpyC606/Z4SxnNYbT+WX27or6Ck= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= +github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= @@ -211,28 +196,23 @@ github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peK github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= -github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= +github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/opentracing/basictracer-go v1.0.0 h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7lZWlQw5UXuoo= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/basictracer-go v1.1.0 h1:Oa1fTSBvAl8pa3U+IJYqrKm0NALwH9OsgwOqDv4xJW0= +github.com/opentracing/basictracer-go v1.1.0/go.mod h1:V2HZueSJEp879yv285Aap1BS69fQMD+MNP1mRs6mBQc= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI= +github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -240,155 +220,157 @@ github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk= github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/pulumi/pulumi-aws/sdk/v5 v5.7.2 h1:NhHvO+pjyy91UjKjna7uZLnupePqYu13JNnOy+U97r0= -github.com/pulumi/pulumi-aws/sdk/v5 v5.7.2/go.mod h1:7B4fC5Nd/aOi0OsUneH+96v2xp7hk1OmQ3rAbDcu0Ww= -github.com/pulumi/pulumi-awsx/sdk v1.0.0-beta.9 h1:6UhHt1Rsciq6qvDMMmo3TZZcR8KTP8DsAVR3emFlZ80= -github.com/pulumi/pulumi-awsx/sdk v1.0.0-beta.9/go.mod h1:sf1iASa+6i6APeHKigYeyoHl6hbNIOOdQL9awmMNWqo= -github.com/pulumi/pulumi-docker/sdk/v3 v3.2.0 h1:7liqzpMLCmk7BIO7w6f6JCh9IdtwCp0a//jA12i6eyo= -github.com/pulumi/pulumi-docker/sdk/v3 v3.2.0/go.mod h1:TACDfD6SWGyaHmWLrtHAuGiZ+pTBD4OYYFb5kTyxdtQ= -github.com/pulumi/pulumi/sdk/v3 v3.27.0/go.mod h1:VsxW+TGv2VBLe/MeqsAr9r0zKzK/gbAhFT9QxYr24cY= -github.com/pulumi/pulumi/sdk/v3 v3.39.3 h1:FQk/fJjwRffehuCyJa/z1ejY7sjdrMji1Z3hq29ODk0= -github.com/pulumi/pulumi/sdk/v3 v3.39.3/go.mod h1:Fw52iyR/4T9xWm7cTcshy4rGEXyPwhXKKEalczKZ8RY= -github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/pulumi/pulumi-aws/sdk/v5 v5.23.0 h1:QTfjGgR0m8EonOJV+RNBG8r2Y1pgjqmxf3n4uYTq60g= +github.com/pulumi/pulumi-aws/sdk/v5 v5.23.0/go.mod h1:Ro2eNbpP/uGWMMvtBDrVph+jdL/G6+IiGB6kj+kDRYM= +github.com/pulumi/pulumi-awsx/sdk v1.0.0 h1:QIoPaK/ZYMduigfSrNHmA57n48lg0mG6cE663TKGXTs= +github.com/pulumi/pulumi-awsx/sdk v1.0.0/go.mod h1:sf1iASa+6i6APeHKigYeyoHl6hbNIOOdQL9awmMNWqo= +github.com/pulumi/pulumi-command/sdk v0.7.0 h1:gBxTtg6lY29wbu/XZHsLo6Syoc2yieDmTrSAuxLBRb4= +github.com/pulumi/pulumi-command/sdk v0.7.0/go.mod h1:YX0Ri1ezMr4mk8j4S/S1gjJpidt63mMG2C+VXDoTlpU= +github.com/pulumi/pulumi-docker/sdk/v3 v3.6.1 h1:plWLn9O6u80Vr37LoCsckyobBfcrdTU9cERor72QjqA= +github.com/pulumi/pulumi-docker/sdk/v3 v3.6.1/go.mod h1:N4Yu4c49QErfucPt9Y/fGmpTryRqc0VfhyKHsGR9/g8= +github.com/pulumi/pulumi-kubernetes/sdk/v3 v3.22.2 h1:MuiXmsQfXzlJosSH5CWqPlGMgxg4xnKMu5UwJBCzn2w= +github.com/pulumi/pulumi-kubernetes/sdk/v3 v3.22.2/go.mod h1:fv2nZ3nS1jNk6+EMOmO2MaS5Oyj2rOXT9ZIP/7q5YGI= +github.com/pulumi/pulumi/sdk/v3 v3.48.0/go.mod h1:n5EPRVFDh+EFwYZ+oaZmEtwgVN1A6NnI82B7ks/bmTU= +github.com/pulumi/pulumi/sdk/v3 v3.49.0 h1:DSIeLJVPj7H+9fWjx/LguqDclzhiz90uhxERbMiHM+A= +github.com/pulumi/pulumi/sdk/v3 v3.49.0/go.mod h1:58NOiU6vEdA0S8KFiFt4/eqH7vKtWhDFsEGCUFRBovw= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= +github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= +github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94 h1:G04eS0JkAIVZfaJLjla9dNxkJCPiKIGZlw9AfOhzOD0= github.com/sabhiram/go-gitignore v0.0.0-20180611051255-d3107576ba94/go.mod h1:b18R55ulyQ/h3RaWyloPyER7fWQVZvimKKhnI5OfrJQ= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= +github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI= +github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs= +github.com/santhosh-tekuri/jsonschema/v5 v5.0.0/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0= +github.com/santhosh-tekuri/jsonschema/v5 v5.1.1 h1:lEOLY2vyGIqKWUI9nzsOJRV3mb3WC9dXYORsLEUcoeY= +github.com/santhosh-tekuri/jsonschema/v5 v5.1.1/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= +github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= +github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6 h1:9VTskZOIRf2vKF3UL8TuWElry5pgUpV1tFSe/e/0m/E= github.com/texttheater/golang-levenshtein v0.0.0-20191208221605-eb6844b05fc6/go.mod h1:XDKHRm5ThF8YJjx001LtgelzsoaEcvnA7lVWz9EeX3g= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= +github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 h1:X9dsIWPuuEJlPX//UmRKophhOKCGXc46RVIGuttks68= github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7/go.mod h1:UxoP3EypF8JfGEjAII8jx1q8rQyDnX8qdTCs/UQBVIE= -github.com/uber/jaeger-client-go v2.22.1+incompatible h1:NHcubEkVbahf9t3p75TOCR83gdUHXjRJvjoBh1yACsM= github.com/uber/jaeger-client-go v2.22.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= -github.com/uber/jaeger-lib v2.2.0+incompatible h1:MxZXOiR2JuoANZ3J6DE/U0kSFv/eJ/GfSYVCjK7dyaw= +github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= +github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= +github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= +github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= -github.com/xanzy/ssh-agent v0.3.2 h1:eKj4SX2Fe7mui28ZgnFW5fmTz1EIr7ugo5s6wDxdHBM= github.com/xanzy/ssh-agent v0.3.2/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zorkian/go-datadog-api v2.30.0+incompatible h1:R4ryGocppDqZZbnNc5EDR8xGWF/z/MxzWnqTUijDQes= github.com/zorkian/go-datadog-api v2.30.0+incompatible/go.mod h1:PkXwHX9CUQa/FpB9ZwAD45N1uhCW4MT/Wj7m36PbKss= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200317142112-1b76d66859c6/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.0.0-20220824171710-5757bc0c5503/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8= +golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -406,57 +388,72 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220823224334-20c2bfdbfe24/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.2.0 h1:z85xZCsEl7bi/KwbNADeBYoOP0++7W1ipu+aGnpwzRM= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200608174601-1b747fd94509/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.4.0 h1:7mTAgkunk3fr4GAloyyCasadO6h9zSsQZbwvcaIciV4= +golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c h1:QgY/XxIAIeccR+Ca/rDdKubLIU9rcJ3xfy1DC/Wd2Oo= -google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221207170731-23e4bf6bdc37 h1:jmIfw8+gSvXcZSgaFAGyInDXeWzUhvYH57G/5GKMn70= +google.golang.org/genproto v0.0.0-20221207170731-23e4bf6bdc37/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY= -google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -470,7 +467,6 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -479,16 +475,10 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98= -gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= -gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= @@ -496,6 +486,7 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 h1:umQdVO0Ytx+kYadhuJNjFtDgIsIEBnKrOTvNuu8ClKI= @@ -506,5 +497,7 @@ lukechampine.com/frand v1.4.2 h1:RzFIpOvkMXuPMBb9maa4ND4wjBn71E1Jpf8BzJHMaVw= lukechampine.com/frand v1.4.2/go.mod h1:4S/TM2ZgrKejMcKMbeLjISpJMO+/eZ1zu3vYX9dtj3s= pgregory.net/rapid v0.4.7 h1:MTNRktPuv5FNqOO151TM9mDTa+XHcX6ypYeISDVD14g= pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= +sourcegraph.com/sourcegraph/appdash v0.0.0-20211028080628-e2786a622600 h1:hfyJ5ku9yFtLVOiSxa3IN+dx5eBQT9mPmKFypAmg8XM= +sourcegraph.com/sourcegraph/appdash v0.0.0-20211028080628-e2786a622600/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/test/new-e2e/ndm/snmp/compose/data/apc_ups.snmprec b/test/new-e2e/ndm/snmp/compose/data/apc_ups.snmprec new file mode 100644 index 0000000000000..51caca45cf3b6 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/apc_ups.snmprec @@ -0,0 +1,613 @@ +1.3.6.1.2.1.1.1.0|4|APC Web/SNMP Management Card (MB:v3.9.2 PF:v3.9.2 PN:apc_hw02_aos_392.bin AF1:v3.7.2 AN1:apc_hw02_sumx_372.bin MN:AP9619 HR:A10 SN: 5A1827E00000 MD:12/04/2007) (Embedded PowerNet SNMP Agent SW v2.2 compatible) +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.318.1.1.1 +1.3.6.1.4.1.318.1.1.1.1.1.1.0|4|APC Smart-UPS 600 +1.3.6.1.4.1.318.1.1.1.1.1.2.0|4|testIdentName +1.3.6.1.4.1.318.1.1.1.1.2.1.0|4|2.0.3-test +1.3.6.1.4.1.318.1.1.1.1.2.2.0|4x|666f7277617264206163746564207468656972204a6164656420717561696e746c79207a6f6d6269657320717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.318.1.1.1.1.2.3.0|4|test_serial +1.3.6.1.4.1.318.1.1.1.1.2.4.0|4x|64726976696e67206b657074207a6f6d62696573204a61646564204a61646564206b657074 +1.3.6.1.4.1.318.1.1.1.1.2.5.0|4x|4a61646564206163746564206b657074 +1.3.6.1.4.1.318.1.1.1.2.1.1.0|2|1 +1.3.6.1.4.1.318.1.1.1.2.1.2.0|67|2281169700 +1.3.6.1.4.1.318.1.1.1.2.1.3.0|4x|666f7277617264206f78656e20627574 +1.3.6.1.4.1.318.1.1.1.2.2.1.0|66|1560689601 +1.3.6.1.4.1.318.1.1.1.2.2.2.0|66|1179156899 +1.3.6.1.4.1.318.1.1.1.2.2.3.0|67|1472879197 +1.3.6.1.4.1.318.1.1.1.2.2.4.0|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.5.0|2|17 +1.3.6.1.4.1.318.1.1.1.2.2.6.0|2|31 +1.3.6.1.4.1.318.1.1.1.2.2.7.0|2|16 +1.3.6.1.4.1.318.1.1.1.2.2.8.0|2|11 +1.3.6.1.4.1.318.1.1.1.2.2.9.0|2|12 +1.3.6.1.4.1.318.1.1.1.2.2.10.0|2|10 +1.3.6.1.4.1.318.1.1.1.2.2.11.0|2|17 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.0|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.1|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.5|2|5 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.7|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.10|2|10 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.14|2|14 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.18|2|18 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.22|2|22 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.1.25|2|25 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.0|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.1|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.5|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.7|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.10|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.14|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.18|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.22|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.2.25|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.0|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.1|2|5 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.5|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.7|2|4 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.10|2|8 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.14|2|22 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.18|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.22|2|26 +1.3.6.1.4.1.318.1.1.1.2.2.12.1.3.25|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.0|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.1|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.3|2|3 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.8|2|8 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.9|2|9 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.12|2|12 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.21|2|21 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.22|2|22 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.23|2|23 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.1.24|2|24 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.0|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.1|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.3|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.8|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.9|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.12|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.21|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.22|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.23|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.2.24|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.0|2|21 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.1|2|10 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.3|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.8|2|4 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.9|2|20 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.12|2|17 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.21|2|23 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.22|2|13 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.23|2|5 +1.3.6.1.4.1.318.1.1.1.2.2.13.1.3.24|2|16 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.2.26|2|2 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.7.29|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.8.0|2|8 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.13.22|2|13 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.17.19|2|17 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.25.29|2|25 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.27.21|2|27 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.29.12|2|29 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.1.30.3|2|30 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.2.26|2|26 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.7.29|2|29 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.8.0|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.13.22|2|22 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.17.19|2|19 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.25.29|2|29 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.27.21|2|21 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.29.12|2|12 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.2.30.3|2|3 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.2.26|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.7.29|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.8.0|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.13.22|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.17.19|2|0 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.25.29|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.27.21|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.29.12|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.3.30.3|2|1 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.2.26|2|5 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.7.29|2|14 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.8.0|2|27 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.13.22|2|21 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.17.19|2|7 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.25.29|2|11 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.27.21|2|8 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.29.12|2|27 +1.3.6.1.4.1.318.1.1.1.2.2.14.1.4.30.3|2|11 +1.3.6.1.4.1.318.1.1.1.2.2.15.0|67|3648468618 +1.3.6.1.4.1.318.1.1.1.2.2.16.0|2|30 +1.3.6.1.4.1.318.1.1.1.2.2.17.0|2|2 +1.3.6.1.4.1.318.1.1.1.2.2.19.0|4x|4a61646564206b657074 +1.3.6.1.4.1.318.1.1.1.2.2.20.0|4x|6b657074206163746564 +1.3.6.1.4.1.318.1.1.1.2.2.21.0|4x|64726976696e67206f78656e207a6f6d6269657320717561696e746c7920717561696e746c79 +1.3.6.1.4.1.318.1.1.1.2.3.1.0|66|38240162 +1.3.6.1.4.1.318.1.1.1.2.3.2.0|66|2948084659 +1.3.6.1.4.1.318.1.1.1.2.3.3.0|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.4.0|2|30 +1.3.6.1.4.1.318.1.1.1.2.3.5.0|2|30 +1.3.6.1.4.1.318.1.1.1.2.3.6.0|2|2 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.2|2|2 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.7|2|7 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.9|2|9 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.15|2|15 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.18|2|18 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.21|2|21 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.23|2|23 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.1.24|2|24 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.2|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.7|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.9|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.15|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.18|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.21|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.23|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.2.24|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.2|2|5 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.7|2|18 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.9|2|29 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.15|2|17 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.18|2|15 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.21|2|14 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.23|2|20 +1.3.6.1.4.1.318.1.1.1.2.3.7.1.3.24|2|2 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.0|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.1|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.5|2|5 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.6|2|6 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.10|2|10 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.11|2|11 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.15|2|15 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.22|2|22 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.23|2|23 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.1.25|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.0|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.1|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.5|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.6|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.10|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.11|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.15|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.22|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.23|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.2.25|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.0|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.1|2|6 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.5|2|28 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.6|2|27 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.10|2|27 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.11|2|9 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.15|2|21 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.22|2|23 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.23|2|9 +1.3.6.1.4.1.318.1.1.1.2.3.8.1.3.25|2|19 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.0.17|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.0.25|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.4.31|2|4 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.6.12|2|6 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.10.7|2|10 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.14.27|2|14 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.18.24|2|18 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.21.17|2|21 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.22.26|2|22 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.1.25.17|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.0.17|2|17 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.0.25|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.4.31|2|31 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.6.12|2|12 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.10.7|2|7 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.14.27|2|27 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.18.24|2|24 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.21.17|2|17 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.22.26|2|26 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.2.25.17|2|17 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.0.17|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.0.25|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.4.31|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.6.12|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.10.7|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.14.27|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.18.24|2|1 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.21.17|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.22.26|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.3.25.17|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.0.17|2|9 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.0.25|2|4 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.4.31|2|2 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.6.12|2|29 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.10.7|2|13 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.14.27|2|22 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.18.24|2|22 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.21.17|2|30 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.22.26|2|4 +1.3.6.1.4.1.318.1.1.1.2.3.9.1.4.25.17|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.10.1.0|2|10 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.2.26|2|2 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.3.27|2|3 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.19.24|2|19 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.22.12|2|22 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.23.7|2|23 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.23.9|2|23 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.26.7|2|26 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.26.22|2|26 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.27.5|2|27 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.1.30.29|2|30 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.2.26|2|26 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.3.27|2|27 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.19.24|2|24 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.22.12|2|12 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.23.7|2|7 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.23.9|2|9 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.26.7|2|7 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.26.22|2|22 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.27.5|2|5 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.2.30.29|2|29 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.2.26|4x|7a6f6d6269657320666f727761726420666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.3.27|4x|64726976696e67207a6f6d62696573207a6f6d6269657320666f727761726420666f7277617264206f78656e206b6570742064726976696e67204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.19.24|4x|6b657074204a61646564207468656972207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.22.12|4x|6f78656e204a6164656420666f7277617264207a6f6d62696573206b657074207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.23.7|4x|64726976696e6720666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.23.9|4x|7468656972206b65707420616374656420627574 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.26.7|4x|7a6f6d6269657320627574206f78656e20627574 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.26.22|4x|616374656420746865697220717561696e746c7920717561696e746c79 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.27.5|4x|62757420666f7277617264204a6164656420666f7277617264207a6f6d62696573206f78656e20627574204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.3.30.29|4x|7a6f6d62696573206f78656e20666f7277617264206b657074207468656972204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.2.26|4x|666f727761726420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.3.27|4x|7a6f6d62696573207a6f6d62696573206f78656e206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.19.24|4x|6f78656e20717561696e746c7920616374656420627574204a61646564207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.22.12|4x|6b6570742064726976696e67204a61646564207a6f6d6269657320666f7277617264206b657074204a6164656420666f7277617264207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.23.7|4x|717561696e746c79206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.23.9|4|kept +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.26.7|4x|64726976696e67206163746564206163746564206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.26.22|4x|4a616465642064726976696e672064726976696e67207a6f6d62696573206f78656e20666f727761726420666f727761726420666f727761726420666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.27.5|4|oxen +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.4.30.29|4x|7a6f6d62696573206f78656e204a61646564204a6164656420717561696e746c79206163746564206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.2.26|2|23 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.3.27|2|28 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.19.24|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.22.12|2|25 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.23.7|2|0 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.23.9|2|14 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.26.7|2|24 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.26.22|2|18 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.27.5|2|31 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.5.30.29|2|4 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.2.26|4|their +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.3.27|4x|6b657074207a6f6d62696573206b657074206163746564206b657074206f78656e206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.19.24|4x|64726976696e6720717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.22.12|4x|717561696e746c79206163746564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.23.7|4|forward +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.23.9|4x|6f78656e2064726976696e6720717561696e746c7920666f7277617264204a61646564206f78656e204a6164656420666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.26.7|4x|7a6f6d6269657320746865697220627574207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.26.22|4x|4a616465642074686569722064726976696e67207468656972204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.27.5|4x|7468656972206163746564206275742064726976696e67204a61646564207a6f6d626965732064726976696e67 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.6.30.29|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.2.26|4x|7a6f6d6269657320746865697220666f7277617264207468656972206163746564207a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.3.27|4|oxen +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.19.24|4x|6b65707420666f7277617264206f78656e207468656972206b657074207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.22.12|4x|6163746564206b657074206f78656e206b65707420666f727761726420666f7277617264206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.23.7|4|Jaded +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.23.9|4x|666f7277617264206f78656e206f78656e207a6f6d6269657320666f7277617264204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.26.7|4x|616374656420717561696e746c79207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.26.22|4x|627574206b657074206b657074206b657074207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.27.5|4x|6163746564207a6f6d62696573204a61646564206b65707420666f727761726420717561696e746c79206163746564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.7.30.29|4x|7a6f6d62696573207468656972204a61646564207468656972204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.2.26|4x|64726976696e67207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.3.27|4x|6163746564207a6f6d6269657320616374656420717561696e746c792062757420717561696e746c7920627574 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.19.24|4x|6163746564207a6f6d62696573204a616465642062757420616374656420616374656420746865697220666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.22.12|4x|6163746564204a61646564204a616465642064726976696e67 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.23.7|4x|64726976696e67204a61646564206163746564207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.23.9|4x|61637465642064726976696e672064726976696e672064726976696e67207a6f6d6269657320666f7277617264206b657074206b657074206163746564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.26.7|4x|6f78656e207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.26.22|4x|717561696e746c792074686569722064726976696e6720666f72776172642062757420666f727761726420627574204a61646564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.27.5|4x|6275742061637465642064726976696e67 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.8.30.29|4|acted +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.2.26|4x|6163746564206b657074207468656972207a6f6d62696573206163746564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.3.27|4x|6b657074206163746564206b657074206f78656e20717561696e746c79 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.19.24|4x|717561696e746c7920717561696e746c79206163746564207a6f6d62696573204a61646564206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.22.12|4|their +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.23.7|4x|6b65707420616374656420627574 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.23.9|4|acted +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.26.7|4x|717561696e746c79204a61646564207a6f6d6269657320746865697220627574206163746564207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.26.22|4x|666f7277617264207a6f6d6269657320627574207468656972204a6164656420746865697220666f727761726420666f7277617264206b657074 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.27.5|4x|7a6f6d6269657320666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.9.30.29|4|their +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.2.26|4x|666f727761726420616374656420627574207a6f6d6269657320717561696e746c7920746865697220666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.3.27|4x|6b657074206b65707420627574207468656972207a6f6d62696573206163746564 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.19.24|4x|6b6570742061637465642064726976696e6720666f7277617264 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.22.12|4x|64726976696e67207468656972207a6f6d6269657320666f72776172642062757420717561696e746c79 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.23.7|4x|627574207468656972207468656972206163746564207a6f6d62696573204a61646564207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.23.9|4x|6163746564206b657074206f78656e207a6f6d62696573206f78656e +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.26.7|4x|7a6f6d626965732064726976696e67204a61646564206f78656e207a6f6d6269657320666f727761726420666f7277617264206f78656e207468656972 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.26.22|4x|6f78656e2064726976696e67 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.27.5|4x|7a6f6d6269657320717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.2.3.10.2.1.10.30.29|4x|616374656420666f727761726420666f727761726420627574206b65707420717561696e746c7920627574 +1.3.6.1.4.1.318.1.1.1.3.1.1.0|2|5 +1.3.6.1.4.1.318.1.1.1.3.2.1.0|66|4072212830 +1.3.6.1.4.1.318.1.1.1.3.2.2.0|66|1535446494 +1.3.6.1.4.1.318.1.1.1.3.2.3.0|66|3248693327 +1.3.6.1.4.1.318.1.1.1.3.2.4.0|66|3401339341 +1.3.6.1.4.1.318.1.1.1.3.2.5.0|2|6 +1.3.6.1.4.1.318.1.1.1.3.2.6.0|2|4 +1.3.6.1.4.1.318.1.1.1.3.2.7.0|2|27 +1.3.6.1.4.1.318.1.1.1.3.2.8.0|2|25 +1.3.6.1.4.1.318.1.1.1.3.2.9.0|2|16 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.2|2|2 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.6|2|6 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.8|2|8 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.10|2|10 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.15|2|15 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.16|2|16 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.17|2|17 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.20|2|20 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.1.26|2|26 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.2|2|30 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.6|2|11 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.8|2|26 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.10|2|7 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.15|2|4 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.16|2|5 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.17|2|15 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.20|2|16 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.2.26|2|28 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.2|2|21 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.6|2|9 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.8|2|19 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.10|2|2 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.15|2|2 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.16|2|4 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.17|2|19 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.20|2|22 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.3.26|2|23 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.2|2|25 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.6|2|1 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.8|2|28 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.10|2|15 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.15|2|11 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.16|2|12 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.17|2|24 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.20|2|9 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.4.26|2|3 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.2|2|13 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.6|2|31 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.8|2|2 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.10|2|7 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.15|2|1 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.16|2|22 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.17|2|11 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.20|2|21 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.5.26|2|13 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.2|2|5 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.6|2|1 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.8|2|29 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.10|2|31 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.15|2|16 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.16|2|20 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.17|2|17 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.20|2|3 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.6.26|2|14 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.2|2|3 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.6|2|28 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.8|2|12 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.10|2|26 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.15|2|27 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.16|2|5 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.17|2|0 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.20|2|30 +1.3.6.1.4.1.318.1.1.1.3.2.10.1.7.26|2|28 +1.3.6.1.4.1.318.1.1.1.3.2.11.0|2|11 +1.3.6.1.4.1.318.1.1.1.3.2.12.0|2|14 +1.3.6.1.4.1.318.1.1.1.3.2.13.0|2|24 +1.3.6.1.4.1.318.1.1.1.3.2.14.0|2|26 +1.3.6.1.4.1.318.1.1.1.3.3.1.0|66|637077047 +1.3.6.1.4.1.318.1.1.1.3.3.2.0|66|3527777113 +1.3.6.1.4.1.318.1.1.1.3.3.3.0|66|3018338698 +1.3.6.1.4.1.318.1.1.1.3.3.4.0|66|1506429297 +1.3.6.1.4.1.318.1.1.1.3.3.5.0|66|50912 +1.3.6.1.4.1.318.1.1.1.3.3.6.0|66|5699 +1.3.6.1.4.1.318.1.1.1.3.3.7.0|66|33661 +1.3.6.1.4.1.318.1.1.1.4.1.1.0|2|10 +1.3.6.1.4.1.318.1.1.1.4.1.2.0|2|5 +1.3.6.1.4.1.318.1.1.1.4.1.3.0|2|3 +1.3.6.1.4.1.318.1.1.1.4.1.4.0|2|6 +1.3.6.1.4.1.318.1.1.1.4.1.5.0|2|3 +1.3.6.1.4.1.318.1.1.1.4.1.6.0|2|2 +1.3.6.1.4.1.318.1.1.1.4.1.7.0|2|3 +1.3.6.1.4.1.318.1.1.1.4.2.1.0|66|4185594960 +1.3.6.1.4.1.318.1.1.1.4.2.2.0|66|1756892535 +1.3.6.1.4.1.318.1.1.1.4.2.3.0|66|3155186359 +1.3.6.1.4.1.318.1.1.1.4.2.4.0|66|913553071 +1.3.6.1.4.1.318.1.1.1.4.2.5.0|66|178941591 +1.3.6.1.4.1.318.1.1.1.4.2.6.0|2|25 +1.3.6.1.4.1.318.1.1.1.4.2.7.0|2|29 +1.3.6.1.4.1.318.1.1.1.4.2.8.0|2|1 +1.3.6.1.4.1.318.1.1.1.4.2.9.0|2|7 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.0|2|0 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.3|2|3 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.10|2|10 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.24|2|24 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.25|2|25 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.27|2|27 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.28|2|28 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.29|2|29 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.1.31|2|31 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.0|2|19 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.3|2|7 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.10|2|0 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.24|2|4 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.25|2|19 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.27|2|17 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.28|2|28 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.29|2|4 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.2.31|2|7 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.0|2|8 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.3|2|10 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.10|2|26 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.24|2|30 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.25|2|26 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.27|2|28 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.28|2|21 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.29|2|5 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.3.31|2|23 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.0|2|5 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.3|2|14 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.10|2|19 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.24|2|13 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.25|2|17 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.27|2|21 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.28|2|7 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.29|2|0 +1.3.6.1.4.1.318.1.1.1.4.2.10.1.4.31|2|19 +1.3.6.1.4.1.318.1.1.1.4.2.11.0|2|19 +1.3.6.1.4.1.318.1.1.1.4.2.12.0|2|20 +1.3.6.1.4.1.318.1.1.1.4.3.1.0|66|3489953300 +1.3.6.1.4.1.318.1.1.1.4.3.2.0|66|3300892168 +1.3.6.1.4.1.318.1.1.1.4.3.3.0|66|1698328203 +1.3.6.1.4.1.318.1.1.1.4.3.4.0|66|4279608909 +1.3.6.1.4.1.318.1.1.1.4.3.5.0|2|31 +1.3.6.1.4.1.318.1.1.1.4.3.6.0|66|51951 +1.3.6.1.4.1.318.1.1.1.5.1.1.0|2|22 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.2|2|2 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.4|2|4 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.9|2|9 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.13|2|13 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.18|2|18 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.19|2|19 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.23|2|23 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.26|2|26 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.1.27|2|27 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.2|4x|717561696e746c79206f78656e +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.4|4x|616374656420666f7277617264206275742062757420717561696e746c79207a6f6d62696573207a6f6d62696573206163746564204a61646564 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.9|4x|4a61646564204a61646564207a6f6d6269657320666f727761726420717561696e746c79207468656972204a61646564207468656972206163746564 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.13|4x|627574204a61646564207468656972204a61646564206163746564 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.18|4x|4a61646564204a61646564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.19|4x|64726976696e6720746865697220717561696e746c79206b657074204a6164656420717561696e746c792064726976696e67207468656972 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.23|4x|6163746564204a61646564207a6f6d62696573207a6f6d62696573204a616465642064726976696e67 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.26|4x|746865697220627574206f78656e206f78656e206b657074204a61646564206f78656e +1.3.6.1.4.1.318.1.1.1.5.1.2.1.2.27|4x|4a616465642062757420717561696e746c79 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.2|2|31 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.4|2|26 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.9|2|9 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.13|2|26 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.18|2|3 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.19|2|7 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.23|2|21 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.26|2|13 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.3.27|2|7 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.2|2|2 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.4|2|2 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.9|2|1 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.13|2|1 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.18|2|1 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.19|2|2 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.23|2|2 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.26|2|2 +1.3.6.1.4.1.318.1.1.1.5.1.2.1.4.27|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.1.0|2|24 +1.3.6.1.4.1.318.1.1.1.5.2.2.0|2|9 +1.3.6.1.4.1.318.1.1.1.5.2.3.0|2|20 +1.3.6.1.4.1.318.1.1.1.5.2.4.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.5.0|67|2150908910 +1.3.6.1.4.1.318.1.1.1.5.2.6.0|2|5 +1.3.6.1.4.1.318.1.1.1.5.2.7.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.8.0|67|385065057 +1.3.6.1.4.1.318.1.1.1.5.2.9.0|67|4287371001 +1.3.6.1.4.1.318.1.1.1.5.2.10.0|67|4128486802 +1.3.6.1.4.1.318.1.1.1.5.2.11.0|67|2140484210 +1.3.6.1.4.1.318.1.1.1.5.2.12.0|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.0|2|0 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.12|2|12 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.14|2|14 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.15|2|15 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.16|2|16 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.17|2|17 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.21|2|21 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.24|2|24 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.1.25|2|25 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.0|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.12|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.14|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.15|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.16|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.17|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.21|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.24|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.13.1.2.25|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.14.0|67|3090446300 +1.3.6.1.4.1.318.1.1.1.5.2.15.0|4x|61637465642064726976696e67206163746564 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.0|2|0 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.4|2|4 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.11|2|11 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.12|2|12 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.13|2|13 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.16|2|16 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.17|2|17 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.20|2|20 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.1.28|2|28 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.0|6|1.3.6.1.3.200.114.30.67.215.95.144.202.103 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.4|6|1.3.6.1.3.32.206.164.137.235.155.190 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.11|6|1.3.6.1.3.65.22.136 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.12|6|1.3.6.1.3.63.95.196.158 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.13|6|1.3.6.1.3.178.61.99.254.79.132.9.151.230 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.16|6|1.3.6.1.3.183.246.117.161.146.61 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.17|6|1.3.6.1.3.147.70.179 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.20|6|1.3.6.1.3 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.2.28|6|1.3.6.1.3.61.19.76.34.168.37 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.0|4x|616374656420616374656420717561696e746c7920717561696e746c79206b6570742074686569722064726976696e67 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.4|4x|666f7277617264207a6f6d6269657320627574204a61646564206f78656e207a6f6d62696573 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.11|4x|6f78656e207468656972206b657074207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.12|4x|64726976696e67206275742062757420666f7277617264 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.13|4x|6f78656e206b6570742064726976696e67206b657074207468656972 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.16|4x|666f7277617264204a6164656420746865697220627574207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.17|4x|64726976696e67204a6164656420666f72776172642062757420746865697220666f727761726420717561696e746c79 +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.20|4x|627574204a61646564206f78656e206f78656e +1.3.6.1.4.1.318.1.1.1.5.2.16.1.3.28|4x|616374656420616374656420666f727761726420666f72776172642064726976696e6720717561696e746c79 +1.3.6.1.4.1.318.1.1.1.5.2.17.0|2|7 +1.3.6.1.4.1.318.1.1.1.5.2.18.0|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.19.0|2|10 +1.3.6.1.4.1.318.1.1.1.5.2.20.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.21.0|2|27 +1.3.6.1.4.1.318.1.1.1.5.2.22.0|2|10 +1.3.6.1.4.1.318.1.1.1.5.2.23.0|2|28 +1.3.6.1.4.1.318.1.1.1.5.2.24.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.25.0|2|29 +1.3.6.1.4.1.318.1.1.1.5.2.26.0|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.27.0|2|0 +1.3.6.1.4.1.318.1.1.1.5.2.28.0|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.29.0|67|4010835390 +1.3.6.1.4.1.318.1.1.1.5.2.30.0|67|1782930428 +1.3.6.1.4.1.318.1.1.1.5.2.31.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.32.0|2|6 +1.3.6.1.4.1.318.1.1.1.5.2.33.0|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.34.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.35.0|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.36.0|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.37.0|2|13 +1.3.6.1.4.1.318.1.1.1.5.2.38.0|2|4 +1.3.6.1.4.1.318.1.1.1.5.2.39.0|2|2 +1.3.6.1.4.1.318.1.1.1.5.2.40.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.41.0|2|6 +1.3.6.1.4.1.318.1.1.1.5.2.43.0|2|6 +1.3.6.1.4.1.318.1.1.1.5.2.44.0|2|11 +1.3.6.1.4.1.318.1.1.1.5.2.45.0|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.46.0|2|3 +1.3.6.1.4.1.318.1.1.1.5.2.47.0|2|1 +1.3.6.1.4.1.318.1.1.1.5.2.48.0|2|25 +1.3.6.1.4.1.318.1.1.1.5.2.49.0|2|1 +1.3.6.1.4.1.318.1.1.1.6.1.1.0|2|1 +1.3.6.1.4.1.318.1.1.1.6.2.1.0|2|5 +1.3.6.1.4.1.318.1.1.1.6.2.2.0|2|3 +1.3.6.1.4.1.318.1.1.1.6.2.3.0|2|4 +1.3.6.1.4.1.318.1.1.1.6.2.4.0|2|1 +1.3.6.1.4.1.318.1.1.1.6.2.5.0|2|3 +1.3.6.1.4.1.318.1.1.1.6.2.6.0|2|2 +1.3.6.1.4.1.318.1.1.1.6.2.7.0|2|2 +1.3.6.1.4.1.318.1.1.1.6.2.8.0|2|2 +1.3.6.1.4.1.318.1.1.1.6.2.9.0|2|4 +1.3.6.1.4.1.318.1.1.1.7.2.1.0|2|7 +1.3.6.1.4.1.318.1.1.1.7.2.2.0|2|1 +1.3.6.1.4.1.318.1.1.1.7.2.3.0|2|4 +1.3.6.1.4.1.318.1.1.1.11.1.1.0|4|0000100100100000001000000000010010000000000000000000000000000000 +1.3.6.1.4.1.318.1.1.1.12.1.2.1.1.15|2|15 +1.3.6.1.4.1.318.1.1.1.12.1.2.1.2.15|4|test_outlet +1.3.6.1.4.1.318.1.1.1.12.1.2.1.3.15|2|3 +1.3.6.1.4.1.318.1.1.25.1.2.1.6.0|2|25 diff --git a/test/new-e2e/ndm/snmp/compose/data/args_list.txt b/test/new-e2e/ndm/snmp/compose/data/args_list.txt new file mode 100644 index 0000000000000..39ba2fea1e52c --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/args_list.txt @@ -0,0 +1,14 @@ +--v3-user=datadogNoAuthNoPriv +--v3-user=datadogMD5NoPriv --v3-auth-key=doggiepass --v3-auth-proto=MD5 +--v3-user=datadogMD5DES --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=MD5 --v3-priv-proto=DES +--v3-user=datadogMD5AES --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=MD5 --v3-priv-proto=AES +--v3-user=datadogSHADES --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=SHA --v3-priv-proto=DES +--v3-user=datadogSHAAES --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=SHA --v3-priv-proto=AES +--v3-user=datadogSHAAES192 --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=SHA --v3-priv-proto=AES192 +--v3-user=datadogSHAAES192BLMT --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=SHA --v3-priv-proto=AES192BLMT +--v3-user=datadogSHAAES256 --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=SHA --v3-priv-proto=AES256 +--v3-user=datadogSHAAES256BLMT --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=SHA --v3-priv-proto=AES256BLMT +--v3-user=datadogMD5AES192 --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=MD5 --v3-priv-proto=AES192 +--v3-user=datadogMD5AES192BLMT --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=MD5 --v3-priv-proto=AES192BLMT +--v3-user=datadogMD5AES256 --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=MD5 --v3-priv-proto=AES256 +--v3-user=datadogMD5AES256BLMT --v3-auth-key=doggiepass --v3-priv-key=doggiePRIVkey --v3-auth-proto=MD5 --v3-priv-proto=AES256BLMT diff --git a/test/new-e2e/ndm/snmp/compose/data/arista.snmprec b/test/new-e2e/ndm/snmp/compose/data/arista.snmprec new file mode 100644 index 0000000000000..6d77a50af40ec --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/arista.snmprec @@ -0,0 +1,75 @@ +1.3.6.1.2.1.1.1.0|4|Arista Networks EOS version 4.20.11.1M running on an Arista Networks DCS-7504 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.30065.1.3011.7504 +1.3.6.1.2.1.1.3.0|67|1972242781 +1.3.6.1.2.1.1.4.0|4| +1.3.6.1.2.1.1.5.0|4|DCS-7504-name +1.3.6.1.2.1.1.6.0|4| +1.3.6.1.2.1.1.7.0|2|14 +1.3.6.1.2.1.47.1.1.1.1.2.1|4|DCS-7504 Chassis +1.3.6.1.2.1.47.1.1.1.1.3.1|6|0.0 +1.3.6.1.2.1.47.1.1.1.1.4.1|2|0 +1.3.6.1.2.1.47.1.1.1.1.5.1|2|3 +1.3.6.1.2.1.47.1.1.1.1.6.1|2|0 +1.3.6.1.2.1.47.1.1.1.1.7.1|4| +1.3.6.1.2.1.47.1.1.1.1.8.1|4|12.00 +1.3.6.1.2.1.47.1.1.1.1.9.1|4| +1.3.6.1.2.1.47.1.1.1.1.10.1|4| +1.3.6.1.2.1.47.1.1.1.1.11.1|4|HSH16195058 +1.3.6.1.2.1.47.1.1.1.1.12.1|4|Arista Networks +1.3.6.1.2.1.47.1.1.1.1.13.1|4|DCS-7504 +1.3.6.1.2.1.47.1.1.1.1.14.1|4| +1.3.6.1.2.1.47.1.1.1.1.15.1|4| +1.3.6.1.2.1.47.1.1.1.1.16.1|2|2 +1.3.6.1.2.1.47.1.1.1.1.17.1|4x|0000000000000000000000 +1.3.6.1.2.1.47.1.1.1.1.18.1|4| +1.3.6.1.2.1.99.1.1.1.1.1|2|11 +1.3.6.1.2.1.99.1.1.1.1.7|2|8 +1.3.6.1.2.1.99.1.1.1.2.1|2|12 +1.3.6.1.2.1.99.1.1.1.2.7|2|6 +1.3.6.1.2.1.99.1.1.1.3.1|2|4 +1.3.6.1.2.1.99.1.1.1.3.7|2|3 +1.3.6.1.2.1.99.1.1.1.4.1|2|18 +1.3.6.1.2.1.99.1.1.1.4.7|2|3 +1.3.6.1.2.1.99.1.1.1.5.1|2|3 +1.3.6.1.2.1.99.1.1.1.5.7|2|2 +1.3.6.1.2.1.99.1.1.1.6.1|4x|6f78656e2062757420666f72776172642062757420746865697220666f7277617264 +1.3.6.1.2.1.99.1.1.1.6.7|4x|666f7277617264207a6f6d626965732062757420666f7277617264204a61646564204a6164656420666f727761726420746865697220627574 +1.3.6.1.2.1.99.1.1.1.7.1|67|2933286610 +1.3.6.1.2.1.99.1.1.1.7.7|67|2903823879 +1.3.6.1.2.1.99.1.1.1.8.1|66|35020 +1.3.6.1.2.1.99.1.1.1.8.7|66|63942 +1.3.6.1.4.1.30065.3.6.1.1.1.1.7.25|2|7 +1.3.6.1.4.1.30065.3.6.1.1.1.1.8.24|2|8 +1.3.6.1.4.1.30065.3.6.1.1.1.2.7.25|2|25 +1.3.6.1.4.1.30065.3.6.1.1.1.2.8.24|2|24 +1.3.6.1.4.1.30065.3.6.1.1.1.3.7.25|70|9199876016787426485 +1.3.6.1.4.1.30065.3.6.1.1.1.3.8.24|70|3479424230406894790 +1.3.6.1.4.1.30065.3.6.1.1.1.4.7.25|70|633664576576632894 +1.3.6.1.4.1.30065.3.6.1.1.1.4.8.24|70|4510009279710477789 +1.3.6.1.4.1.30065.3.6.1.2.1.1.13.10.1|2|13 +1.3.6.1.4.1.30065.3.6.1.2.1.1.28.22.1|2|28 +1.3.6.1.4.1.30065.3.6.1.2.1.2.13.10.1|2|10 +1.3.6.1.4.1.30065.3.6.1.2.1.2.28.22.1|2|22 +1.3.6.1.4.1.30065.3.6.1.2.1.3.13.10.1|2|1 +1.3.6.1.4.1.30065.3.6.1.2.1.3.28.22.1|2|1 +1.3.6.1.4.1.30065.3.6.1.2.1.4.13.10.1|70|6316718526186328558 +1.3.6.1.4.1.30065.3.6.1.2.1.4.28.22.1|70|15636900873813563248 +1.3.6.1.4.1.30065.3.6.1.2.1.5.13.10.1|70|17029503172072197473 +1.3.6.1.4.1.30065.3.6.1.2.1.5.28.22.1|70|1568364382245390281 +1.3.6.1.4.1.30065.3.6.1.2.1.6.13.10.1|70|10749715859223173370 +1.3.6.1.4.1.30065.3.6.1.2.1.6.28.22.1|70|1286713412761199793 +1.3.6.1.4.1.30065.3.6.1.2.1.7.13.10.1|70|9062851505176451588 +1.3.6.1.4.1.30065.3.6.1.2.1.7.28.22.1|70|934740462710221661 +1.3.6.1.4.1.30065.3.6.1.2.1.8.13.10.1|70|7596654376884963276 +1.3.6.1.4.1.30065.3.6.1.2.1.8.28.22.1|70|2792974981000623152 +1.3.6.1.4.1.30065.3.6.1.2.1.9.13.10.1|70|9366008999217936642 +1.3.6.1.4.1.30065.3.6.1.2.1.9.28.22.1|70|8656516912515957367 +1.3.6.1.4.1.30065.3.6.1.2.1.10.13.10.1|2|0 +1.3.6.1.4.1.30065.3.6.1.2.1.10.28.22.1|2|0 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.23 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.67 +1.3.6.1.6.3.1.1.6.1.0|2|17 +1.3.6.1.6.3.10.2.1.1.0|4x|64726976696e6720627574204a61646564207468656972207a6f6d62696573 +1.3.6.1.6.3.10.2.1.2.0|2|19 +1.3.6.1.6.3.10.2.1.3.0|2|18 +1.3.6.1.6.3.10.2.1.4.0|2|485 diff --git a/test/new-e2e/ndm/snmp/compose/data/aruba-access-point.snmprec b/test/new-e2e/ndm/snmp/compose/data/aruba-access-point.snmprec new file mode 100644 index 0000000000000..d033b29cd69d3 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/aruba-access-point.snmprec @@ -0,0 +1,7 @@ +1.3.6.1.2.1.1.1.0|4|ArubaOS (MODEL: 335), Version 6.5.4.3-6.5.4.3 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.14823.1.2.80 +1.3.6.1.2.1.1.3.0|67|1469348797 +1.3.6.1.2.1.1.4.0|4| +1.3.6.1.2.1.1.5.0|4|aruba-335-name +1.3.6.1.2.1.1.6.0|4| +1.3.6.1.2.1.1.7.0|2|72 diff --git a/test/new-e2e/ndm/snmp/compose/data/aruba-switch.snmprec b/test/new-e2e/ndm/snmp/compose/data/aruba-switch.snmprec new file mode 100644 index 0000000000000..fd5da4f30cae0 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/aruba-switch.snmprec @@ -0,0 +1,21 @@ +1.3.6.1.2.1.1.1.0|4|ArubaOS (MODEL: Aruba7210), Version 8.6.0.4 (74969) +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.14823.1.1.32 +1.3.6.1.2.1.1.3.0|67|300689100 +1.3.6.1.2.1.1.4.0|4| +1.3.6.1.2.1.1.5.0|4|aruba-device-name +1.3.6.1.2.1.1.6.0|4| +1.3.6.1.4.1.14823.2.2.1.1.1.1.0|4|aruba-device-name +1.3.6.1.4.1.14823.2.2.1.1.1.2.0|4|A7210 +1.3.6.1.4.1.14823.2.2.1.1.1.3.0|64x|ac174404 +1.3.6.1.4.1.14823.2.2.1.1.1.4.0|2|1 +1.3.6.1.4.1.14823.2.2.1.1.1.5.0|64x|ac174403 +1.3.6.1.4.1.14823.2.2.1.1.1.7.0|2|6 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.1.4|2|4 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.2.4|2|4 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.3.4|66|29 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.1.4|2|4 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.2.4|66|16777216 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.3.4|66|8388608 +1.3.6.1.4.1.14823.2.2.1.2.1.27.0|4|A1.0 +1.3.6.1.4.1.14823.2.2.1.2.1.28.0|4|8.6.0.4 +1.3.6.1.4.1.14823.2.2.1.2.1.29.0|4|CV0009200 diff --git a/test/new-e2e/ndm/snmp/compose/data/aruba.snmprec b/test/new-e2e/ndm/snmp/compose/data/aruba.snmprec new file mode 100644 index 0000000000000..e022e8cbb3602 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/aruba.snmprec @@ -0,0 +1,272 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.14823.1.1.32 +1.3.6.1.2.1.14.7.1.1.18.2.8.29.22|64x|1202081d +1.3.6.1.2.1.14.7.1.1.58.115.169.188.27|64x|3a73a9bc +1.3.6.1.2.1.14.7.1.2.18.2.8.29.22|2|22 +1.3.6.1.2.1.14.7.1.2.58.115.169.188.27|2|27 +1.3.6.1.2.1.14.7.1.3.18.2.8.29.22|64x|359f7a8e +1.3.6.1.2.1.14.7.1.3.58.115.169.188.27|64x|08516ac7 +1.3.6.1.2.1.14.7.1.4.18.2.8.29.22|2|3 +1.3.6.1.2.1.14.7.1.4.58.115.169.188.27|2|1 +1.3.6.1.2.1.14.7.1.5.18.2.8.29.22|2|1 +1.3.6.1.2.1.14.7.1.5.58.115.169.188.27|2|2 +1.3.6.1.2.1.14.7.1.6.18.2.8.29.22|2|0 +1.3.6.1.2.1.14.7.1.6.58.115.169.188.27|2|2 +1.3.6.1.2.1.14.7.1.7.18.2.8.29.22|2|14 +1.3.6.1.2.1.14.7.1.7.58.115.169.188.27|2|28 +1.3.6.1.2.1.14.7.1.8.18.2.8.29.22|2|10 +1.3.6.1.2.1.14.7.1.8.58.115.169.188.27|2|7 +1.3.6.1.2.1.14.7.1.9.18.2.8.29.22|2|17 +1.3.6.1.2.1.14.7.1.9.58.115.169.188.27|2|7 +1.3.6.1.2.1.14.7.1.10.18.2.8.29.22|2|31 +1.3.6.1.2.1.14.7.1.10.58.115.169.188.27|2|8 +1.3.6.1.2.1.14.7.1.11.18.2.8.29.22|2|28 +1.3.6.1.2.1.14.7.1.11.58.115.169.188.27|2|5 +1.3.6.1.2.1.14.7.1.12.18.2.8.29.22|2|4 +1.3.6.1.2.1.14.7.1.12.58.115.169.188.27|2|2 +1.3.6.1.2.1.14.7.1.13.18.2.8.29.22|64x|fe8a6a46 +1.3.6.1.2.1.14.7.1.13.58.115.169.188.27|64x|448b4dc9 +1.3.6.1.2.1.14.7.1.14.18.2.8.29.22|64x|179dc85b +1.3.6.1.2.1.14.7.1.14.58.115.169.188.27|64x|a06c639c +1.3.6.1.2.1.14.7.1.15.18.2.8.29.22|65|337210857 +1.3.6.1.2.1.14.7.1.15.58.115.169.188.27|65|62176372 +1.3.6.1.2.1.14.7.1.16.18.2.8.29.22|4x|6163746564207a6f6d626965732064726976696e672062757420717561696e746c79 +1.3.6.1.2.1.14.7.1.16.58.115.169.188.27|4x|717561696e746c7920627574207a6f6d62696573207a6f6d62696573206f78656e206163746564 +1.3.6.1.2.1.14.7.1.17.18.2.8.29.22|2|0 +1.3.6.1.2.1.14.7.1.17.58.115.169.188.27|2|1 +1.3.6.1.2.1.14.7.1.18.18.2.8.29.22|2|1 +1.3.6.1.2.1.14.7.1.18.58.115.169.188.27|2|3 +1.3.6.1.2.1.14.7.1.19.18.2.8.29.22|2|1 +1.3.6.1.2.1.14.7.1.19.58.115.169.188.27|2|2 +1.3.6.1.2.1.14.7.1.20.18.2.8.29.22|2|0 +1.3.6.1.2.1.14.7.1.20.58.115.169.188.27|2|1 +1.3.6.1.2.1.14.7.1.21.18.2.8.29.22|66|1626568828 +1.3.6.1.2.1.14.7.1.21.58.115.169.188.27|66|4122238079 +1.3.6.1.2.1.14.7.1.22.18.2.8.29.22|66|37664 +1.3.6.1.2.1.14.7.1.22.58.115.169.188.27|66|13819 +1.3.6.1.2.1.14.7.1.23.18.2.8.29.22|64x|57a70c12 +1.3.6.1.2.1.14.7.1.23.58.115.169.188.27|64x|1ca52e0e +1.3.6.1.2.1.14.7.1.24.18.2.8.29.22|64x|4976f89f +1.3.6.1.2.1.14.7.1.24.58.115.169.188.27|64x|df0366aa +1.3.6.1.2.1.14.8.1.1.18.46.198.118.28.25|64x|122ec676 +1.3.6.1.2.1.14.8.1.1.74.178.23.226.10.22|64x|4ab217e2 +1.3.6.1.2.1.14.8.1.1.79.250.196.166.7.21|64x|4ffac4a6 +1.3.6.1.2.1.14.8.1.1.88.90.97.4.9.20|64x|585a6104 +1.3.6.1.2.1.14.8.1.1.130.45.3.9.19.12|64x|822d0309 +1.3.6.1.2.1.14.8.1.1.152.55.172.234.10.10|64x|9837acea +1.3.6.1.2.1.14.8.1.1.217.138.168.52.5.29|64x|d98aa834 +1.3.6.1.2.1.14.8.1.1.218.218.58.35.6.10|64x|dada3a23 +1.3.6.1.2.1.14.8.1.1.223.7.108.14.5.22|64x|df076c0e +1.3.6.1.2.1.14.8.1.1.238.30.92.198.23.10|64x|ee1e5cc6 +1.3.6.1.2.1.14.8.1.2.18.46.198.118.28.25|2|28 +1.3.6.1.2.1.14.8.1.2.74.178.23.226.10.22|2|10 +1.3.6.1.2.1.14.8.1.2.79.250.196.166.7.21|2|7 +1.3.6.1.2.1.14.8.1.2.88.90.97.4.9.20|2|9 +1.3.6.1.2.1.14.8.1.2.130.45.3.9.19.12|2|19 +1.3.6.1.2.1.14.8.1.2.152.55.172.234.10.10|2|10 +1.3.6.1.2.1.14.8.1.2.217.138.168.52.5.29|2|5 +1.3.6.1.2.1.14.8.1.2.218.218.58.35.6.10|2|6 +1.3.6.1.2.1.14.8.1.2.223.7.108.14.5.22|2|5 +1.3.6.1.2.1.14.8.1.2.238.30.92.198.23.10|2|23 +1.3.6.1.2.1.14.8.1.3.18.46.198.118.28.25|2|25 +1.3.6.1.2.1.14.8.1.3.74.178.23.226.10.22|2|22 +1.3.6.1.2.1.14.8.1.3.79.250.196.166.7.21|2|21 +1.3.6.1.2.1.14.8.1.3.88.90.97.4.9.20|2|20 +1.3.6.1.2.1.14.8.1.3.130.45.3.9.19.12|2|12 +1.3.6.1.2.1.14.8.1.3.152.55.172.234.10.10|2|10 +1.3.6.1.2.1.14.8.1.3.217.138.168.52.5.29|2|29 +1.3.6.1.2.1.14.8.1.3.218.218.58.35.6.10|2|10 +1.3.6.1.2.1.14.8.1.3.223.7.108.14.5.22|2|22 +1.3.6.1.2.1.14.8.1.3.238.30.92.198.23.10|2|10 +1.3.6.1.2.1.14.8.1.4.18.46.198.118.28.25|2|29 +1.3.6.1.2.1.14.8.1.4.74.178.23.226.10.22|2|11 +1.3.6.1.2.1.14.8.1.4.79.250.196.166.7.21|2|5 +1.3.6.1.2.1.14.8.1.4.88.90.97.4.9.20|2|10 +1.3.6.1.2.1.14.8.1.4.130.45.3.9.19.12|2|21 +1.3.6.1.2.1.14.8.1.4.152.55.172.234.10.10|2|21 +1.3.6.1.2.1.14.8.1.4.217.138.168.52.5.29|2|18 +1.3.6.1.2.1.14.8.1.4.218.218.58.35.6.10|2|3 +1.3.6.1.2.1.14.8.1.4.223.7.108.14.5.22|2|19 +1.3.6.1.2.1.14.8.1.4.238.30.92.198.23.10|2|8 +1.3.6.1.2.1.14.8.1.5.18.46.198.118.28.25|2|6 +1.3.6.1.2.1.14.8.1.5.74.178.23.226.10.22|2|6 +1.3.6.1.2.1.14.8.1.5.79.250.196.166.7.21|2|0 +1.3.6.1.2.1.14.8.1.5.88.90.97.4.9.20|2|1 +1.3.6.1.2.1.14.8.1.5.130.45.3.9.19.12|2|0 +1.3.6.1.2.1.14.8.1.5.152.55.172.234.10.10|2|4 +1.3.6.1.2.1.14.8.1.5.217.138.168.52.5.29|2|3 +1.3.6.1.2.1.14.8.1.5.218.218.58.35.6.10|2|4 +1.3.6.1.2.1.14.8.1.5.223.7.108.14.5.22|2|2 +1.3.6.1.2.1.14.8.1.5.238.30.92.198.23.10|2|2 +1.3.6.1.2.1.14.9.1.1.14.154.6.3.194.154.66.112|64x|0e9a0603 +1.3.6.1.2.1.14.9.1.1.69.248.159.239.184.201.101.140|64x|45f89fef +1.3.6.1.2.1.14.9.1.2.14.154.6.3.194.154.66.112|64x|c29a4270 +1.3.6.1.2.1.14.9.1.2.69.248.159.239.184.201.101.140|64x|b8c9658c +1.3.6.1.2.1.14.9.1.3.14.154.6.3.194.154.66.112|2|7 +1.3.6.1.2.1.14.9.1.3.69.248.159.239.184.201.101.140|2|2 +1.3.6.1.2.1.14.9.1.4.14.154.6.3.194.154.66.112|2|9 +1.3.6.1.2.1.14.9.1.4.69.248.159.239.184.201.101.140|2|7 +1.3.6.1.2.1.14.9.1.5.14.154.6.3.194.154.66.112|2|4 +1.3.6.1.2.1.14.9.1.5.69.248.159.239.184.201.101.140|2|31 +1.3.6.1.2.1.14.9.1.6.14.154.6.3.194.154.66.112|2|28 +1.3.6.1.2.1.14.9.1.6.69.248.159.239.184.201.101.140|2|6 +1.3.6.1.2.1.14.9.1.7.14.154.6.3.194.154.66.112|2|4 +1.3.6.1.2.1.14.9.1.7.69.248.159.239.184.201.101.140|2|1 +1.3.6.1.2.1.14.9.1.8.14.154.6.3.194.154.66.112|65|3840304252 +1.3.6.1.2.1.14.9.1.8.69.248.159.239.184.201.101.140|65|3388558016 +1.3.6.1.2.1.14.9.1.9.14.154.6.3.194.154.66.112|4x|62757420666f727761726420627574206f78656e20717561696e746c79204a6164656420666f7277617264206f78656e20717561696e746c79 +1.3.6.1.2.1.14.9.1.9.69.248.159.239.184.201.101.140|4x|7a6f6d626965732064726976696e67 +1.3.6.1.2.1.14.9.1.10.14.154.6.3.194.154.66.112|2|0 +1.3.6.1.2.1.14.9.1.10.69.248.159.239.184.201.101.140|2|3 +1.3.6.1.2.1.14.9.1.11.14.154.6.3.194.154.66.112|2|1 +1.3.6.1.2.1.14.9.1.11.69.248.159.239.184.201.101.140|2|0 +1.3.6.1.2.1.14.9.1.12.14.154.6.3.194.154.66.112|66|3883744561 +1.3.6.1.2.1.14.9.1.12.69.248.159.239.184.201.101.140|66|4042815112 +1.3.6.1.2.1.14.9.1.13.14.154.6.3.194.154.66.112|66|57727 +1.3.6.1.2.1.14.9.1.13.69.248.159.239.184.201.101.140|66|37473 +1.3.6.1.2.1.14.10.1.1.18.2.8.29.22|64x|486fb31d +1.3.6.1.2.1.14.10.1.1.58.115.169.188.27|64x|c01d741a +1.3.6.1.2.1.14.10.1.2.18.2.8.29.22|2|9 +1.3.6.1.2.1.14.10.1.2.58.115.169.188.27|2|0 +1.3.6.1.2.1.14.10.1.3.18.2.8.29.22|64x|76f6c1f7 +1.3.6.1.2.1.14.10.1.3.58.115.169.188.27|64x|c01d424f +1.3.6.1.2.1.14.10.1.4.58.115.169.188.27|2|8 +1.3.6.1.2.1.14.10.1.5.58.115.169.188.27|2|1 +1.3.6.1.2.1.14.10.1.6.58.115.169.188.27|2|8 +1.3.6.1.2.1.14.10.1.7.58.115.169.188.27|65|6 +1.3.6.1.2.1.14.10.1.8.58.115.169.188.27|66|0 +1.3.6.1.2.1.14.10.1.9.58.115.169.188.27|2|1 +1.3.6.1.2.1.14.10.1.10.58.115.169.188.27|2|1 +1.3.6.1.2.1.14.10.1.11.58.115.169.188.27|2|2 +1.3.6.1.2.1.14.11.1.1.14.154.6.3.194.154.66.112|64x|0e9a0603 +1.3.6.1.2.1.14.11.1.1.69.248.159.239.184.201.101.140|64x|45f89fef +1.3.6.1.2.1.14.11.1.2.14.154.6.3.194.154.66.112|64x|c29a4270 +1.3.6.1.2.1.14.11.1.2.69.248.159.239.184.201.101.140|64x|b8c9658c +1.3.6.1.2.1.14.11.1.3.14.154.6.3.194.154.66.112|64x|4ad25201 +1.3.6.1.2.1.14.11.1.3.69.248.159.239.184.201.101.140|64x|7ae25601 +1.3.6.1.2.1.14.11.1.4.14.154.6.3.194.154.66.112|2|16 +1.3.6.1.2.1.14.11.1.4.69.248.159.239.184.201.101.140|2|16 +1.3.6.1.2.1.14.11.1.5.14.154.6.3.194.154.66.112|2|6 +1.3.6.1.2.1.14.11.1.5.69.248.159.239.184.201.101.140|2|6 +1.3.6.1.2.1.14.11.1.6.14.154.6.3.194.154.66.112|65|3881559280 +1.3.6.1.2.1.14.11.1.6.69.248.159.239.184.201.101.140|65|3881559280 +1.3.6.1.2.1.14.11.1.7.14.154.6.3.194.154.66.112|66|1152724473 +1.3.6.1.2.1.14.11.1.7.69.248.159.239.184.201.101.140|66|1152724473 +1.3.6.1.4.1.14823.2.2.1.2.1.1.0|64x|a59795d0 +1.3.6.1.4.1.14823.2.2.1.2.1.2.0|4|but +1.3.6.1.4.1.14823.2.2.1.2.1.3.0|4|Jaded +1.3.6.1.4.1.14823.2.2.1.2.1.4.0|2|3 +1.3.6.1.4.1.14823.2.2.1.2.1.5.0|64x|d7fe1618 +1.3.6.1.4.1.14823.2.2.1.2.1.6.0|4x|7468656972204a6164656420616374656420627574206b657074207468656972 +1.3.6.1.4.1.14823.2.2.1.2.1.7.0|4x|00249b3503f6 +1.3.6.1.4.1.14823.2.2.1.2.1.8.0|4x|7a6f6d62696573204a6164656420717561696e746c79206163746564204a6164656420717561696e746c7920627574 +1.3.6.1.4.1.14823.2.2.1.2.1.9.0|4x|627574207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.14823.2.2.1.2.1.10.0|4x|6f78656e207a6f6d6269657320627574 +1.3.6.1.4.1.14823.2.2.1.2.1.11.0|4x|62757420627574 +1.3.6.1.4.1.14823.2.2.1.2.1.12.0|2|22 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.1.11|2|11 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.1.26|2|26 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.2.11|4|zombies +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.2.26|4x|62757420666f7277617264204a6164656420627574207a6f6d62696573 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.3.11|2|2 +1.3.6.1.4.1.14823.2.2.1.2.1.13.1.3.26|2|10 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.1.3|2|3 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.1.15|2|15 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.2.3|2|2 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.2.15|2|2 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.3.3|2|17 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.3.15|2|24 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.4.3|2|12 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.4.15|2|20 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.5.3|4x|61637465642064726976696e67207a6f6d62696573207a6f6d62696573206f78656e206b657074207468656972206f78656e20627574 +1.3.6.1.4.1.14823.2.2.1.2.1.14.1.5.15|4x|4a61646564204a61646564206275742064726976696e6720627574207468656972 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.1.3|2|3 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.1.20|2|20 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.2.3|2|22 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.2.20|2|21 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.3.3|2|27 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.3.20|2|6 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.4.3|2|8 +1.3.6.1.4.1.14823.2.2.1.2.1.15.1.4.20|2|16 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.1.0|2|0 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.1.25|2|25 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.2.0|2|22 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.2.25|2|15 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.3.0|2|27 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.3.25|2|20 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.4.0|2|22 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.4.25|2|8 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.5.0|2|9 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.5.25|2|3 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.6.0|4x|7468656972204a61646564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.6.25|4x|6f78656e20746865697220666f7277617264206163746564206f78656e206b65707420717561696e746c79 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.7.0|4x|7a6f6d62696573204a61646564206b657074 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.7.25|4x|717561696e746c7920616374656420666f72776172642064726976696e6720666f7277617264206f78656e20627574206163746564 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.8.0|4x|4a61646564206163746564204a61646564 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.8.25|4x|6163746564206163746564204a61646564207a6f6d6269657320666f7277617264204a61646564204a6164656420746865697220627574 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.9.0|4x|4a61646564206f78656e2074686569722064726976696e67 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.9.25|4x|7468656972206f78656e206f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.10.0|4x|616374656420627574206f78656e2062757420717561696e746c792062757420717561696e746c79207468656972 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.10.25|4|quaintly +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.11.0|4|zombies +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.11.25|4x|6f78656e2062757420666f7277617264 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.12.0|2|2 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.12.25|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.13.0|2|23 +1.3.6.1.4.1.14823.2.2.1.2.1.16.1.13.25|2|7 +1.3.6.1.4.1.14823.2.2.1.2.1.17.1.1.18|2|18 +1.3.6.1.4.1.14823.2.2.1.2.1.17.1.1.28|2|28 +1.3.6.1.4.1.14823.2.2.1.2.1.17.1.2.18|2|2 +1.3.6.1.4.1.14823.2.2.1.2.1.17.1.2.28|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.18.1.1.1|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.18.1.1.17|2|17 +1.3.6.1.4.1.14823.2.2.1.2.1.18.1.2.1|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.18.1.2.17|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.1.2.122.127.215|64x|027a7fd7 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.1.224.210.187.247|64x|e0d2bbf7 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.2.2.122.127.215|2|2 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.2.224.210.187.247|2|3 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.3.2.122.127.215|4x|7468656972207a6f6d6269657320717561696e746c79206f78656e206275742064726976696e672064726976696e6720717561696e746c79206163746564 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.3.224.210.187.247|4x|6163746564207a6f6d62696573 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.4.2.122.127.215|4x|717561696e746c7920717561696e746c79207a6f6d6269657320616374656420666f72776172642061637465642064726976696e672064726976696e67 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.4.224.210.187.247|4|kept +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.5.2.122.127.215|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.5.224.210.187.247|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.6.2.122.127.215|4|acted +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.6.224.210.187.247|4x|4a6164656420717561696e746c7920627574207a6f6d62696573 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.7.2.122.127.215|4x|717561696e746c7920717561696e746c79 +1.3.6.1.4.1.14823.2.2.1.2.1.19.1.7.224.210.187.247|4|zombies +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.1.8|2|8 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.1.19|2|19 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.2.8|4x|7a6f6d6269657320616374656420616374656420717561696e746c79206b657074207a6f6d62696573206b65707420627574206163746564 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.2.19|4x|6f78656e20666f7277617264204a61646564206163746564204a616465642064726976696e672064726976696e67 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.3.8|4x|62757420627574 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.3.19|4x|74686569722064726976696e672064726976696e67206b65707420627574 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.4.8|4x|717561696e746c79207a6f6d62696573206b65707420627574206b6570742064726976696e672062757420746865697220666f7277617264 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.4.19|4x|7a6f6d62696573204a61646564206b657074206b657074207a6f6d626965732064726976696e67206f78656e204a61646564204a61646564 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.5.8|4x|6f78656e206b657074207468656972204a61646564204a6164656420616374656420627574 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.5.19|4x|717561696e746c79204a616465642064726976696e672064726976696e67206163746564206f78656e204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.6.8|4x|717561696e746c7920627574 +1.3.6.1.4.1.14823.2.2.1.2.1.20.1.6.19|4x|4a616465642064726976696e672064726976696e67207a6f6d626965732064726976696e67 +1.3.6.1.4.1.14823.2.2.1.2.1.21.0|2|30 +1.3.6.1.4.1.14823.2.2.1.2.1.22.0|2|18 +1.3.6.1.4.1.14823.2.2.1.2.1.23.0|2|14 +1.3.6.1.4.1.14823.2.2.1.2.1.24.0|2|1 +1.3.6.1.4.1.14823.2.2.1.2.1.25.0|4x|7468656972206f78656e207a6f6d62696573 +1.3.6.1.4.1.14823.2.2.1.2.1.26.0|67|2557480613 +1.3.6.1.4.1.14823.2.2.1.2.1.27.0|4x|7a6f6d6269657320627574206f78656e204a61646564207468656972206b657074 +1.3.6.1.4.1.14823.2.2.1.2.1.28.0|4|acted +1.3.6.1.4.1.14823.2.2.1.2.1.29.0|4x|6b657074207468656972207468656972 +1.3.6.1.4.1.14823.2.2.1.2.1.30.0|66|28799076 +1.3.6.1.4.1.14823.2.2.1.2.1.31.0|66|2990519834 +1.3.6.1.4.1.14823.2.2.1.2.1.32.0|2|31 +1.3.6.1.4.1.14823.2.2.1.2.2.1.0|2|20 +1.3.6.1.4.1.14823.2.2.1.2.2.2.0|2|3 +1.3.6.1.4.1.14823.2.2.1.2.2.3.0|2|27 +1.3.6.1.4.1.14823.2.2.1.2.2.4.0|2|18 +1.3.6.1.4.1.14823.2.2.1.2.2.5.0|2|13 +1.3.6.1.4.1.14823.2.2.1.2.2.6.0|2|22 +1.3.6.1.4.1.14823.2.2.1.2.2.7.0|2|13 +1.3.6.1.4.1.14823.2.2.1.2.2.8.0|2|3 +1.3.6.1.4.1.14823.2.2.1.2.2.9.0|2|0 +1.3.6.1.4.1.14823.2.2.1.2.2.10.0|2|16 +1.3.6.1.4.1.14823.2.2.1.2.2.11.0|2|30 diff --git a/test/new-e2e/ndm/snmp/compose/data/chatsworth_pdu.snmprec b/test/new-e2e/ndm/snmp/compose/data/chatsworth_pdu.snmprec new file mode 100644 index 0000000000000..b60c737fdb235 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/chatsworth_pdu.snmprec @@ -0,0 +1,1026 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.30932.1.2 +1.3.6.1.4.1.30932.1.1.1.1.0|4|1.2.3 +1.3.6.1.4.1.30932.1.1.1.2.0|4x|5031302d313233342d414243 +1.3.6.1.4.1.30932.1.1.1.3.0|4x|30303a30453a44333a41413a43433a4545 +1.3.6.1.4.1.30932.1.1.2.1.0|2|21 +1.3.6.1.4.1.30932.1.1.2.2.0|2|4 +1.3.6.1.4.1.30932.1.1.2.3.0|2|16 +1.3.6.1.4.1.30932.1.1.2.4.0|64x|0c3155c8 +1.3.6.1.4.1.30932.1.1.2.5.1.0|2|0 +1.3.6.1.4.1.30932.1.1.2.5.2.0|2|1 +1.3.6.1.4.1.30932.1.1.2.5.3.0|2|0 +1.3.6.1.4.1.30932.1.1.2.5.4.0|2|0 +1.3.6.1.4.1.30932.1.1.2.5.5.0|2|0 +1.3.6.1.4.1.30932.1.1.2.5.6.0|2|1 +1.3.6.1.4.1.30932.1.1.2.5.7.0|2|1 +1.3.6.1.4.1.30932.1.1.2.5.8.0|2|1 +1.3.6.1.4.1.30932.1.1.2.6.0|64x|2401ee4a +1.3.6.1.4.1.30932.1.1.2.7.0|64x|70cf48d6 +1.3.6.1.4.1.30932.1.1.2.8.1.0|64x|6e6f304c +1.3.6.1.4.1.30932.1.1.2.8.2.0|64x|1ee3f1c3 +1.3.6.1.4.1.30932.1.1.2.8.3.0|64x|15e17b6d +1.3.6.1.4.1.30932.1.1.2.9.1.0|64x|72d3ac5c +1.3.6.1.4.1.30932.1.1.2.9.2.0|64x|728b5572 +1.3.6.1.4.1.30932.1.1.2.9.3.0|64x|ead5687d +1.3.6.1.4.1.30932.1.1.2.10.0|4x|7a6f6d626965732064726976696e67204a61646564 +1.3.6.1.4.1.30932.1.1.2.11.1.0|2|0 +1.3.6.1.4.1.30932.1.1.2.11.2.0|2|1 +1.3.6.1.4.1.30932.1.1.2.11.3.0|2|1 +1.3.6.1.4.1.30932.1.1.2.11.4.0|2|1 +1.3.6.1.4.1.30932.1.1.2.11.5.0|2|1 +1.3.6.1.4.1.30932.1.1.2.12.0|2|28 +1.3.6.1.4.1.30932.1.1.2.13.0|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.14.1.0|4x|61637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.14.2.0|4x|7a6f6d6269657320666f7277617264204a61646564204a61646564207a6f6d62696573207a6f6d62696573206163746564206163746564206b657074 +1.3.6.1.4.1.30932.1.1.2.14.3.0|4x|7a6f6d62696573206f78656e204a61646564206b657074204a6164656420616374656420717561696e746c79206f78656e +1.3.6.1.4.1.30932.1.1.2.15.1.0|4x|6b657074204a6164656420627574206f78656e207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.15.2.0|4x|717561696e746c79206b657074204a61646564 +1.3.6.1.4.1.30932.1.1.2.15.3.0|4x|6b657074204a61646564206b6570742064726976696e67207a6f6d62696573204a61646564207468656972 +1.3.6.1.4.1.30932.1.1.2.16.1.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.2.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.3.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.4.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.5.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.6.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.7.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.8.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.9.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.10.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.11.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.12.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.13.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.14.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.15.0|2|0 +1.3.6.1.4.1.30932.1.1.2.16.16.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.17.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.18.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.19.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.20.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.21.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.22.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.23.0|2|1 +1.3.6.1.4.1.30932.1.1.2.16.24.0|2|0 +1.3.6.1.4.1.30932.1.1.2.17.1.0|2|26 +1.3.6.1.4.1.30932.1.1.2.17.2.0|2|7 +1.3.6.1.4.1.30932.1.1.2.17.3.0|2|11 +1.3.6.1.4.1.30932.1.1.2.17.4.0|2|2 +1.3.6.1.4.1.30932.1.1.2.17.5.0|2|15 +1.3.6.1.4.1.30932.1.1.2.17.6.0|2|4 +1.3.6.1.4.1.30932.1.1.2.17.7.0|2|9 +1.3.6.1.4.1.30932.1.1.2.17.8.0|2|21 +1.3.6.1.4.1.30932.1.1.2.17.9.0|2|14 +1.3.6.1.4.1.30932.1.1.2.17.10.0|2|8 +1.3.6.1.4.1.30932.1.1.2.17.11.0|2|31 +1.3.6.1.4.1.30932.1.1.2.17.12.0|2|7 +1.3.6.1.4.1.30932.1.1.2.17.13.0|2|1 +1.3.6.1.4.1.30932.1.1.2.17.14.0|2|18 +1.3.6.1.4.1.30932.1.1.2.17.15.0|2|16 +1.3.6.1.4.1.30932.1.1.2.17.16.0|2|1 +1.3.6.1.4.1.30932.1.1.2.17.17.0|2|22 +1.3.6.1.4.1.30932.1.1.2.17.18.0|2|22 +1.3.6.1.4.1.30932.1.1.2.17.19.0|2|7 +1.3.6.1.4.1.30932.1.1.2.17.20.0|2|9 +1.3.6.1.4.1.30932.1.1.2.17.21.0|2|1 +1.3.6.1.4.1.30932.1.1.2.17.22.0|2|7 +1.3.6.1.4.1.30932.1.1.2.17.23.0|2|22 +1.3.6.1.4.1.30932.1.1.2.17.24.0|2|4 +1.3.6.1.4.1.30932.1.1.2.18.1.0|2|28 +1.3.6.1.4.1.30932.1.1.2.18.2.0|2|23 +1.3.6.1.4.1.30932.1.1.2.18.3.0|2|9 +1.3.6.1.4.1.30932.1.1.2.18.4.0|2|26 +1.3.6.1.4.1.30932.1.1.2.18.5.0|2|14 +1.3.6.1.4.1.30932.1.1.2.18.6.0|2|20 +1.3.6.1.4.1.30932.1.1.2.18.7.0|2|23 +1.3.6.1.4.1.30932.1.1.2.18.8.0|2|15 +1.3.6.1.4.1.30932.1.1.2.18.9.0|2|15 +1.3.6.1.4.1.30932.1.1.2.18.10.0|2|28 +1.3.6.1.4.1.30932.1.1.2.18.11.0|2|11 +1.3.6.1.4.1.30932.1.1.2.18.12.0|2|11 +1.3.6.1.4.1.30932.1.1.2.18.13.0|2|4 +1.3.6.1.4.1.30932.1.1.2.18.14.0|2|15 +1.3.6.1.4.1.30932.1.1.2.18.15.0|2|25 +1.3.6.1.4.1.30932.1.1.2.18.16.0|2|31 +1.3.6.1.4.1.30932.1.1.2.18.17.0|2|28 +1.3.6.1.4.1.30932.1.1.2.18.18.0|2|27 +1.3.6.1.4.1.30932.1.1.2.18.19.0|2|16 +1.3.6.1.4.1.30932.1.1.2.18.20.0|2|6 +1.3.6.1.4.1.30932.1.1.2.18.21.0|2|9 +1.3.6.1.4.1.30932.1.1.2.18.22.0|2|16 +1.3.6.1.4.1.30932.1.1.2.18.23.0|2|23 +1.3.6.1.4.1.30932.1.1.2.18.24.0|2|27 +1.3.6.1.4.1.30932.1.1.2.19.1.0|2|8 +1.3.6.1.4.1.30932.1.1.2.19.2.0|2|21 +1.3.6.1.4.1.30932.1.1.2.19.3.0|2|8 +1.3.6.1.4.1.30932.1.1.2.19.4.0|2|8 +1.3.6.1.4.1.30932.1.1.2.19.5.0|2|26 +1.3.6.1.4.1.30932.1.1.2.19.6.0|2|1 +1.3.6.1.4.1.30932.1.1.2.20.1.0|2|5 +1.3.6.1.4.1.30932.1.1.2.20.2.0|2|7 +1.3.6.1.4.1.30932.1.1.2.20.3.0|2|15 +1.3.6.1.4.1.30932.1.1.2.20.4.0|2|12 +1.3.6.1.4.1.30932.1.1.2.20.5.0|2|30 +1.3.6.1.4.1.30932.1.1.2.20.6.0|2|0 +1.3.6.1.4.1.30932.1.1.2.21.1.0|2|19 +1.3.6.1.4.1.30932.1.1.2.21.2.0|2|22 +1.3.6.1.4.1.30932.1.1.2.21.3.0|2|21 +1.3.6.1.4.1.30932.1.1.2.21.4.0|2|0 +1.3.6.1.4.1.30932.1.1.2.21.5.0|2|11 +1.3.6.1.4.1.30932.1.1.2.21.6.0|2|6 +1.3.6.1.4.1.30932.1.1.2.22.1.0|2|6 +1.3.6.1.4.1.30932.1.1.2.22.2.0|2|27 +1.3.6.1.4.1.30932.1.1.2.22.3.0|2|17 +1.3.6.1.4.1.30932.1.1.2.22.4.0|2|21 +1.3.6.1.4.1.30932.1.1.2.22.5.0|2|0 +1.3.6.1.4.1.30932.1.1.2.22.6.0|2|13 +1.3.6.1.4.1.30932.1.1.2.24.1.0|2|17 +1.3.6.1.4.1.30932.1.1.2.24.2.0|2|4 +1.3.6.1.4.1.30932.1.1.2.24.3.0|2|26 +1.3.6.1.4.1.30932.1.1.2.24.4.0|2|29 +1.3.6.1.4.1.30932.1.1.2.24.5.0|2|21 +1.3.6.1.4.1.30932.1.1.2.24.6.0|2|26 +1.3.6.1.4.1.30932.1.1.2.25.1.0|2|13 +1.3.6.1.4.1.30932.1.1.2.25.2.0|2|28 +1.3.6.1.4.1.30932.1.1.2.25.3.0|2|21 +1.3.6.1.4.1.30932.1.1.2.25.4.0|2|24 +1.3.6.1.4.1.30932.1.1.2.25.5.0|2|30 +1.3.6.1.4.1.30932.1.1.2.25.6.0|2|2 +1.3.6.1.4.1.30932.1.1.2.26.1.0|2|26 +1.3.6.1.4.1.30932.1.1.2.26.2.0|2|28 +1.3.6.1.4.1.30932.1.1.2.26.3.0|2|0 +1.3.6.1.4.1.30932.1.1.2.26.4.0|2|17 +1.3.6.1.4.1.30932.1.1.2.26.5.0|2|21 +1.3.6.1.4.1.30932.1.1.2.26.6.0|2|11 +1.3.6.1.4.1.30932.1.1.2.27.1.0|2|27 +1.3.6.1.4.1.30932.1.1.2.27.2.0|2|7 +1.3.6.1.4.1.30932.1.1.2.27.3.0|2|18 +1.3.6.1.4.1.30932.1.1.2.27.4.0|2|15 +1.3.6.1.4.1.30932.1.1.2.27.5.0|2|20 +1.3.6.1.4.1.30932.1.1.2.27.6.0|2|31 +1.3.6.1.4.1.30932.1.1.2.28.1.0|2|25 +1.3.6.1.4.1.30932.1.1.2.28.2.0|2|0 +1.3.6.1.4.1.30932.1.1.2.28.3.0|2|28 +1.3.6.1.4.1.30932.1.1.2.28.4.0|2|14 +1.3.6.1.4.1.30932.1.1.2.28.5.0|2|27 +1.3.6.1.4.1.30932.1.1.2.28.6.0|2|10 +1.3.6.1.4.1.30932.1.1.2.28.7.0|2|0 +1.3.6.1.4.1.30932.1.1.2.28.8.0|2|20 +1.3.6.1.4.1.30932.1.1.2.28.9.0|2|9 +1.3.6.1.4.1.30932.1.1.2.28.10.0|2|4 +1.3.6.1.4.1.30932.1.1.2.28.11.0|2|16 +1.3.6.1.4.1.30932.1.1.2.28.12.0|2|19 +1.3.6.1.4.1.30932.1.1.2.28.13.0|2|29 +1.3.6.1.4.1.30932.1.1.2.28.14.0|2|2 +1.3.6.1.4.1.30932.1.1.2.28.15.0|2|16 +1.3.6.1.4.1.30932.1.1.2.28.16.0|2|3 +1.3.6.1.4.1.30932.1.1.2.28.17.0|2|17 +1.3.6.1.4.1.30932.1.1.2.28.18.0|2|17 +1.3.6.1.4.1.30932.1.1.2.28.19.0|2|23 +1.3.6.1.4.1.30932.1.1.2.28.20.0|2|24 +1.3.6.1.4.1.30932.1.1.2.28.21.0|2|12 +1.3.6.1.4.1.30932.1.1.2.28.22.0|2|24 +1.3.6.1.4.1.30932.1.1.2.28.23.0|2|16 +1.3.6.1.4.1.30932.1.1.2.28.24.0|2|0 +1.3.6.1.4.1.30932.1.1.2.29.1.0|2|13 +1.3.6.1.4.1.30932.1.1.2.29.2.0|2|13 +1.3.6.1.4.1.30932.1.1.2.29.3.0|2|19 +1.3.6.1.4.1.30932.1.1.2.29.4.0|2|17 +1.3.6.1.4.1.30932.1.1.2.29.5.0|2|15 +1.3.6.1.4.1.30932.1.1.2.29.6.0|2|26 +1.3.6.1.4.1.30932.1.1.2.29.7.0|2|24 +1.3.6.1.4.1.30932.1.1.2.29.8.0|2|17 +1.3.6.1.4.1.30932.1.1.2.29.9.0|2|17 +1.3.6.1.4.1.30932.1.1.2.29.10.0|2|3 +1.3.6.1.4.1.30932.1.1.2.29.11.0|2|3 +1.3.6.1.4.1.30932.1.1.2.29.12.0|2|16 +1.3.6.1.4.1.30932.1.1.2.29.13.0|2|18 +1.3.6.1.4.1.30932.1.1.2.29.14.0|2|25 +1.3.6.1.4.1.30932.1.1.2.29.15.0|2|10 +1.3.6.1.4.1.30932.1.1.2.29.16.0|2|22 +1.3.6.1.4.1.30932.1.1.2.29.17.0|2|0 +1.3.6.1.4.1.30932.1.1.2.29.18.0|2|9 +1.3.6.1.4.1.30932.1.1.2.29.19.0|2|27 +1.3.6.1.4.1.30932.1.1.2.29.20.0|2|9 +1.3.6.1.4.1.30932.1.1.2.29.21.0|2|12 +1.3.6.1.4.1.30932.1.1.2.29.22.0|2|6 +1.3.6.1.4.1.30932.1.1.2.29.23.0|2|27 +1.3.6.1.4.1.30932.1.1.2.29.24.0|2|26 +1.3.6.1.4.1.30932.1.1.2.30.1.0|2|18 +1.3.6.1.4.1.30932.1.1.2.30.2.0|2|2 +1.3.6.1.4.1.30932.1.1.2.30.3.0|2|25 +1.3.6.1.4.1.30932.1.1.2.30.4.0|2|11 +1.3.6.1.4.1.30932.1.1.2.30.5.0|2|24 +1.3.6.1.4.1.30932.1.1.2.30.6.0|2|21 +1.3.6.1.4.1.30932.1.1.2.30.7.0|2|25 +1.3.6.1.4.1.30932.1.1.2.30.8.0|2|7 +1.3.6.1.4.1.30932.1.1.2.30.9.0|2|5 +1.3.6.1.4.1.30932.1.1.2.30.10.0|2|30 +1.3.6.1.4.1.30932.1.1.2.30.11.0|2|19 +1.3.6.1.4.1.30932.1.1.2.30.12.0|2|21 +1.3.6.1.4.1.30932.1.1.2.30.13.0|2|13 +1.3.6.1.4.1.30932.1.1.2.30.14.0|2|25 +1.3.6.1.4.1.30932.1.1.2.30.15.0|2|10 +1.3.6.1.4.1.30932.1.1.2.30.16.0|2|17 +1.3.6.1.4.1.30932.1.1.2.30.17.0|2|20 +1.3.6.1.4.1.30932.1.1.2.30.18.0|2|5 +1.3.6.1.4.1.30932.1.1.2.30.19.0|2|9 +1.3.6.1.4.1.30932.1.1.2.30.20.0|2|8 +1.3.6.1.4.1.30932.1.1.2.30.21.0|2|2 +1.3.6.1.4.1.30932.1.1.2.30.22.0|2|28 +1.3.6.1.4.1.30932.1.1.2.30.23.0|2|24 +1.3.6.1.4.1.30932.1.1.2.30.24.0|2|5 +1.3.6.1.4.1.30932.1.1.2.31.1.0|2|11 +1.3.6.1.4.1.30932.1.1.2.31.2.0|2|2 +1.3.6.1.4.1.30932.1.1.2.31.3.0|2|26 +1.3.6.1.4.1.30932.1.1.2.31.4.0|2|4 +1.3.6.1.4.1.30932.1.1.2.31.5.0|2|3 +1.3.6.1.4.1.30932.1.1.2.31.6.0|2|3 +1.3.6.1.4.1.30932.1.1.2.31.7.0|2|10 +1.3.6.1.4.1.30932.1.1.2.31.8.0|2|27 +1.3.6.1.4.1.30932.1.1.2.31.9.0|2|19 +1.3.6.1.4.1.30932.1.1.2.31.10.0|2|7 +1.3.6.1.4.1.30932.1.1.2.31.11.0|2|15 +1.3.6.1.4.1.30932.1.1.2.31.12.0|2|24 +1.3.6.1.4.1.30932.1.1.2.31.13.0|2|9 +1.3.6.1.4.1.30932.1.1.2.31.14.0|2|14 +1.3.6.1.4.1.30932.1.1.2.31.15.0|2|4 +1.3.6.1.4.1.30932.1.1.2.31.16.0|2|1 +1.3.6.1.4.1.30932.1.1.2.31.17.0|2|24 +1.3.6.1.4.1.30932.1.1.2.31.18.0|2|0 +1.3.6.1.4.1.30932.1.1.2.31.19.0|2|21 +1.3.6.1.4.1.30932.1.1.2.31.20.0|2|14 +1.3.6.1.4.1.30932.1.1.2.31.21.0|2|1 +1.3.6.1.4.1.30932.1.1.2.31.22.0|2|31 +1.3.6.1.4.1.30932.1.1.2.31.23.0|2|15 +1.3.6.1.4.1.30932.1.1.2.31.24.0|2|3 +1.3.6.1.4.1.30932.1.1.2.32.1.0|2|10 +1.3.6.1.4.1.30932.1.1.2.32.2.0|2|11 +1.3.6.1.4.1.30932.1.1.2.33.1.0|2|2 +1.3.6.1.4.1.30932.1.1.2.33.2.0|2|22 +1.3.6.1.4.1.30932.1.1.2.34.1.0|2|3 +1.3.6.1.4.1.30932.1.1.2.34.2.0|2|10 +1.3.6.1.4.1.30932.1.1.2.35.1.0|2|3 +1.3.6.1.4.1.30932.1.1.2.35.2.0|2|23 +1.3.6.1.4.1.30932.1.1.2.36.1.0|2|17 +1.3.6.1.4.1.30932.1.1.2.36.2.0|2|7 +1.3.6.1.4.1.30932.1.1.2.37.1.0|2|19 +1.3.6.1.4.1.30932.1.1.2.37.2.0|2|26 +1.3.6.1.4.1.30932.1.1.2.38.1.0|2|7 +1.3.6.1.4.1.30932.1.1.2.38.2.0|2|18 +1.3.6.1.4.1.30932.1.1.2.39.1.0|2|7 +1.3.6.1.4.1.30932.1.1.2.39.2.0|2|21 +1.3.6.1.4.1.30932.1.1.2.40.0|4x|6c65676163792d6e616d6531 +1.3.6.1.4.1.30932.1.1.2.41.0|4x|7a6f6d626965732064726976696e6720746865697220666f7277617264204a61646564 +1.3.6.1.4.1.30932.1.1.2.42.1.0|4x|6b657074207468656972204a61646564206f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.42.2.0|4x|7a6f6d6269657320666f72776172642062757420717561696e746c79206163746564 +1.3.6.1.4.1.30932.1.1.2.42.3.0|4|their +1.3.6.1.4.1.30932.1.1.2.42.4.0|4x|62757420666f7277617264207a6f6d62696573207468656972206b657074204a61646564207468656972206b657074 +1.3.6.1.4.1.30932.1.1.2.42.5.0|4x|64726976696e67207a6f6d62696573206f78656e20627574206f78656e2064726976696e67 +1.3.6.1.4.1.30932.1.1.2.42.6.0|4x|64726976696e672074686569722064726976696e67206b6570742064726976696e6720717561696e746c792064726976696e6720666f7277617264 +1.3.6.1.4.1.30932.1.1.2.42.7.0|4x|7a6f6d6269657320627574206275742064726976696e67206b65707420746865697220627574206b657074206f78656e +1.3.6.1.4.1.30932.1.1.2.42.8.0|4x|4a61646564204a6164656420717561696e746c79206f78656e +1.3.6.1.4.1.30932.1.1.2.42.9.0|4x|64726976696e672064726976696e6720666f727761726420666f7277617264206163746564207a6f6d6269657320627574 +1.3.6.1.4.1.30932.1.1.2.42.10.0|4x|64726976696e67206163746564206163746564204a6164656420717561696e746c7920717561696e746c792074686569722064726976696e67206163746564 +1.3.6.1.4.1.30932.1.1.2.42.11.0|4x|64726976696e6720717561696e746c79207468656972207a6f6d6269657320666f727761726420666f727761726420627574206b657074 +1.3.6.1.4.1.30932.1.1.2.42.12.0|4x|746865697220717561696e746c79207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.42.13.0|4x|6f78656e20627574206f78656e20666f727761726420627574206b65707420666f72776172642064726976696e6720717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.42.14.0|4x|7468656972206f78656e207a6f6d62696573206f78656e +1.3.6.1.4.1.30932.1.1.2.42.15.0|4x|6b657074206b65707420666f72776172642062757420666f7277617264204a6164656420717561696e746c79206f78656e +1.3.6.1.4.1.30932.1.1.2.42.16.0|4x|6b657074206163746564 +1.3.6.1.4.1.30932.1.1.2.42.17.0|4x|7a6f6d626965732064726976696e67 +1.3.6.1.4.1.30932.1.1.2.42.18.0|4x|717561696e746c79204a6164656420746865697220627574204a6164656420627574204a61646564 +1.3.6.1.4.1.30932.1.1.2.42.19.0|4|kept +1.3.6.1.4.1.30932.1.1.2.42.20.0|4x|7a6f6d626965732064726976696e67204a61646564206163746564206b65707420666f727761726420616374656420627574 +1.3.6.1.4.1.30932.1.1.2.42.21.0|4x|717561696e746c79206275742062757420717561696e746c7920666f727761726420666f7277617264 +1.3.6.1.4.1.30932.1.1.2.42.22.0|4x|616374656420666f7277617264204a61646564207468656972 +1.3.6.1.4.1.30932.1.1.2.42.23.0|4x|627574207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.30932.1.1.2.42.24.0|4|driving +1.3.6.1.4.1.30932.1.1.2.43.1.0|4x|6b657074204a616465642062757420616374656420717561696e746c79206f78656e20616374656420666f7277617264 +1.3.6.1.4.1.30932.1.1.2.43.2.0|4x|6b65707420627574 +1.3.6.1.4.1.30932.1.1.2.43.3.0|4|their +1.3.6.1.4.1.30932.1.1.2.43.4.0|4|oxen +1.3.6.1.4.1.30932.1.1.2.43.5.0|4x|7468656972207a6f6d62696573206f78656e207a6f6d62696573207468656972206b657074207468656972 +1.3.6.1.4.1.30932.1.1.2.43.6.0|4x|6275742064726976696e67206163746564204a61646564 +1.3.6.1.4.1.30932.1.1.2.43.7.0|4x|6f78656e2064726976696e67206163746564206f78656e206163746564 +1.3.6.1.4.1.30932.1.1.2.43.8.0|4|but +1.3.6.1.4.1.30932.1.1.2.43.9.0|4x|666f727761726420666f7277617264207468656972207468656972 +1.3.6.1.4.1.30932.1.1.2.43.10.0|4x|6b657074206f78656e +1.3.6.1.4.1.30932.1.1.2.43.11.0|4x|4a6164656420666f727761726420666f7277617264207a6f6d626965732062757420746865697220717561696e746c79207468656972 +1.3.6.1.4.1.30932.1.1.2.43.12.0|4x|4a61646564206b65707420627574206b657074207468656972204a61646564207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.43.13.0|4|oxen +1.3.6.1.4.1.30932.1.1.2.43.14.0|4x|717561696e746c7920627574206163746564207a6f6d62696573206b657074207a6f6d626965732064726976696e67 +1.3.6.1.4.1.30932.1.1.2.43.15.0|4|Jaded +1.3.6.1.4.1.30932.1.1.2.43.16.0|4x|4a616465642064726976696e67207a6f6d62696573204a61646564204a6164656420616374656420717561696e746c79206163746564206b657074 +1.3.6.1.4.1.30932.1.1.2.43.17.0|4x|627574204a61646564207a6f6d6269657320616374656420666f727761726420717561696e746c79207468656972204a61646564 +1.3.6.1.4.1.30932.1.1.2.43.18.0|4x|7468656972207a6f6d6269657320627574204a616465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.43.19.0|4x|616374656420666f7277617264204a61646564206163746564204a6164656420666f727761726420746865697220616374656420717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.43.20.0|4x|7468656972204a61646564206b65707420746865697220627574207468656972206f78656e204a61646564 +1.3.6.1.4.1.30932.1.1.2.43.21.0|4x|61637465642062757420717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.43.22.0|4x|74686569722064726976696e672064726976696e6720717561696e746c792061637465642064726976696e67206f78656e20627574 +1.3.6.1.4.1.30932.1.1.2.43.23.0|4x|717561696e746c79206f78656e206b657074207a6f6d6269657320666f727761726420616374656420666f7277617264206163746564 +1.3.6.1.4.1.30932.1.1.2.43.24.0|4x|627574207468656972207468656972206163746564207468656972206f78656e +1.3.6.1.4.1.30932.1.1.2.50.1.0|4x|64726976696e67204a61646564206163746564 +1.3.6.1.4.1.30932.1.1.2.50.2.0|4x|717561696e746c79206b657074 +1.3.6.1.4.1.30932.1.1.2.50.3.0|4x|4a61646564204a61646564 +1.3.6.1.4.1.30932.1.1.2.50.4.0|4x|6b6570742064726976696e67204a61646564206b657074206163746564206b6570742064726976696e6720717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.50.5.0|4x|7a6f6d62696573206b657074206f78656e206f78656e20666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.50.6.0|4x|7a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.50.7.0|4x|666f727761726420717561696e746c79207a6f6d626965732064726976696e6720666f727761726420717561696e746c79207468656972207468656972 +1.3.6.1.4.1.30932.1.1.2.50.8.0|4x|717561696e746c7920627574 +1.3.6.1.4.1.30932.1.1.2.50.9.0|4x|6b6570742074686569722064726976696e672062757420666f72776172642064726976696e67207468656972207a6f6d626965732064726976696e67 +1.3.6.1.4.1.30932.1.1.2.50.10.0|4x|666f7277617264204a6164656420666f7277617264206b657074207a6f6d62696573206163746564 +1.3.6.1.4.1.30932.1.1.2.50.11.0|4x|4a61646564206f78656e20666f727761726420717561696e746c79206b657074 +1.3.6.1.4.1.30932.1.1.2.50.12.0|4x|62757420627574204a6164656420746865697220717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.50.13.0|4x|62757420666f7277617264206f78656e20746865697220666f727761726420627574207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.50.14.0|4x|7a6f6d62696573206b657074207a6f6d6269657320666f727761726420627574206f78656e20666f727761726420627574207468656972 +1.3.6.1.4.1.30932.1.1.2.50.15.0|4x|64726976696e67206f78656e206b657074206163746564206b6570742064726976696e67 +1.3.6.1.4.1.30932.1.1.2.50.16.0|4|Jaded +1.3.6.1.4.1.30932.1.1.2.51.1.0|4x|64726976696e67207a6f6d6269657320666f7277617264204a6164656420627574207a6f6d62696573207a6f6d626965732064726976696e67207468656972 +1.3.6.1.4.1.30932.1.1.2.51.2.0|4x|746865697220616374656420717561696e746c792064726976696e67206163746564206b657074207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.51.3.0|4x|717561696e746c79204a6164656420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.30932.1.1.2.51.4.0|4|quaintly +1.3.6.1.4.1.30932.1.1.2.51.5.0|4|but +1.3.6.1.4.1.30932.1.1.2.51.6.0|4|kept +1.3.6.1.4.1.30932.1.1.2.51.7.0|4|kept +1.3.6.1.4.1.30932.1.1.2.51.8.0|4x|7468656972207468656972204a61646564206f78656e206163746564 +1.3.6.1.4.1.30932.1.1.2.51.9.0|4x|6b65707420717561696e746c7920627574206f78656e207a6f6d6269657320746865697220717561696e746c79206163746564 +1.3.6.1.4.1.30932.1.1.2.51.10.0|4x|6f78656e204a61646564204a61646564206f78656e206f78656e204a6164656420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.51.11.0|4x|6b65707420627574207a6f6d6269657320627574207a6f6d6269657320616374656420746865697220627574204a61646564 +1.3.6.1.4.1.30932.1.1.2.51.12.0|4|quaintly +1.3.6.1.4.1.30932.1.1.2.51.13.0|4x|4a6164656420746865697220717561696e746c79207468656972207a6f6d626965732064726976696e672062757420666f727761726420666f7277617264 +1.3.6.1.4.1.30932.1.1.2.51.14.0|4x|6f78656e2074686569722064726976696e67206f78656e207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.51.15.0|4x|717561696e746c79204a6164656420627574206163746564 +1.3.6.1.4.1.30932.1.1.2.51.16.0|4x|717561696e746c7920616374656420717561696e746c79206b657074 +1.3.6.1.4.1.30932.1.1.2.55.0|2|24 +1.3.6.1.4.1.30932.1.1.2.56.0|2|5 +1.3.6.1.4.1.30932.1.1.2.57.0|2|5 +1.3.6.1.4.1.30932.1.1.2.58.1.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.2.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.3.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.4.0|2|0 +1.3.6.1.4.1.30932.1.1.2.58.5.0|2|0 +1.3.6.1.4.1.30932.1.1.2.58.6.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.7.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.8.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.9.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.10.0|2|0 +1.3.6.1.4.1.30932.1.1.2.58.11.0|2|0 +1.3.6.1.4.1.30932.1.1.2.58.12.0|2|1 +1.3.6.1.4.1.30932.1.1.2.58.13.0|2|0 +1.3.6.1.4.1.30932.1.1.2.58.14.0|2|0 +1.3.6.1.4.1.30932.1.1.2.58.15.0|2|1 +1.3.6.1.4.1.30932.1.1.2.59.1.0|2|3 +1.3.6.1.4.1.30932.1.1.2.59.2.0|2|25 +1.3.6.1.4.1.30932.1.1.2.60.1.0|2|28 +1.3.6.1.4.1.30932.1.1.2.60.2.0|2|8 +1.3.6.1.4.1.30932.1.1.2.61.1.0|2|26 +1.3.6.1.4.1.30932.1.1.2.61.2.0|2|17 +1.3.6.1.4.1.30932.1.1.2.62.1.0|2|25 +1.3.6.1.4.1.30932.1.1.2.62.2.0|2|12 +1.3.6.1.4.1.30932.1.1.2.63.0|4x|6b657074206f78656e +1.3.6.1.4.1.30932.1.1.2.64.0|4|but +1.3.6.1.4.1.30932.1.1.2.65.0|4x|746865697220717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.66.0|4x|6275742064726976696e6720746865697220666f7277617264207a6f6d6269657320666f7277617264206b65707420717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.67.0|4x|4a61646564206f78656e206b65707420717561696e746c79207a6f6d62696573207468656972 +1.3.6.1.4.1.30932.1.1.2.68.0|4|oxen +1.3.6.1.4.1.30932.1.1.2.69.1.0|2|3 +1.3.6.1.4.1.30932.1.1.2.69.2.0|2|0 +1.3.6.1.4.1.30932.1.1.2.69.3.0|2|1 +1.3.6.1.4.1.30932.1.1.2.70.0|4x|4a61646564206f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.71.0|4x|616374656420666f7277617264207a6f6d62696573206b657074207a6f6d62696573206b6570742061637465642064726976696e67207468656972 +1.3.6.1.4.1.30932.1.1.2.72.0|4x|666f727761726420717561696e746c79206f78656e +1.3.6.1.4.1.30932.1.1.2.73.0|4|acted +1.3.6.1.4.1.30932.1.1.2.74.0|4|forward +1.3.6.1.4.1.30932.1.1.2.75.0|4x|717561696e746c792064726976696e672064726976696e6720616374656420627574204a616465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.76.0|4x|616374656420717561696e746c792064726976696e6720717561696e746c79206b657074206f78656e2064726976696e67206163746564204a61646564 +1.3.6.1.4.1.30932.1.1.2.77.0|4x|627574204a6164656420717561696e746c792064726976696e6720717561696e746c7920717561696e746c7920666f7277617264206163746564 +1.3.6.1.4.1.30932.1.1.2.78.0|4x|4a6164656420717561696e746c79206275742064726976696e67206f78656e20627574206163746564204a61646564 +1.3.6.1.4.1.30932.1.1.2.79.1.0|4x|6b65707420717561696e746c792064726976696e672064726976696e67206f78656e20627574 +1.3.6.1.4.1.30932.1.1.2.79.2.0|4x|7a6f6d62696573206f78656e206f78656e2064726976696e6720746865697220666f7277617264206f78656e207468656972207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.79.3.0|4x|6f78656e207468656972206f78656e207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.30932.1.1.2.80.0|2|2 +1.3.6.1.4.1.30932.1.1.2.81.0|4x|717561696e746c79207a6f6d62696573206b657074207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.2.82.0|4|forward +1.3.6.1.4.1.30932.1.1.2.83.0|4|oxen +1.3.6.1.4.1.30932.1.1.2.84.1.0|2|31 +1.3.6.1.4.1.30932.1.1.2.84.2.0|2|25 +1.3.6.1.4.1.30932.1.1.2.85.0|4x|64726976696e67206f78656e20616374656420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.86.0|4x|6163746564204a61646564207a6f6d6269657320717561696e746c79207468656972204a616465642064726976696e67 +1.3.6.1.4.1.30932.1.1.2.87.1.0|2|22 +1.3.6.1.4.1.30932.1.1.2.87.2.0|2|15 +1.3.6.1.4.1.30932.1.1.2.88.1.0|4|kept +1.3.6.1.4.1.30932.1.1.2.88.2.0|4x|7a6f6d62696573206b657074204a616465642074686569722061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.89.1.0|2|1 +1.3.6.1.4.1.30932.1.1.2.89.2.0|2|1 +1.3.6.1.4.1.30932.1.1.2.89.3.0|2|0 +1.3.6.1.4.1.30932.1.1.2.89.4.0|2|1 +1.3.6.1.4.1.30932.1.1.2.89.5.0|2|0 +1.3.6.1.4.1.30932.1.1.2.89.6.0|2|0 +1.3.6.1.4.1.30932.1.1.2.89.7.0|2|0 +1.3.6.1.4.1.30932.1.1.2.89.8.0|2|1 +1.3.6.1.4.1.30932.1.1.2.89.9.0|2|0 +1.3.6.1.4.1.30932.1.1.2.89.10.0|2|1 +1.3.6.1.4.1.30932.1.1.2.89.11.0|2|0 +1.3.6.1.4.1.30932.1.1.2.89.12.0|2|1 +1.3.6.1.4.1.30932.1.1.2.90.0|2|14 +1.3.6.1.4.1.30932.1.1.2.91.0|2|70 +1.3.6.1.4.1.30932.1.1.2.92.0|4x|616374656420627574 +1.3.6.1.4.1.30932.1.1.2.93.0|2|3 +1.3.6.1.4.1.30932.1.1.2.94.0|4x|627574204a61646564206b65707420746865697220717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.95.0|4x|666f727761726420746865697220666f7277617264206f78656e20717561696e746c79206f78656e +1.3.6.1.4.1.30932.1.1.2.96.0|4x|666f7277617264204a6164656420717561696e746c7920666f727761726420666f727761726420666f7277617264 +1.3.6.1.4.1.30932.1.1.2.97.0|4x|4a6164656420666f7277617264 +1.3.6.1.4.1.30932.1.1.2.98.1.0|64x|c4fac691 +1.3.6.1.4.1.30932.1.1.2.98.2.0|64x|31fde63e +1.3.6.1.4.1.30932.1.1.2.98.3.0|64x|276b1d6f +1.3.6.1.4.1.30932.1.1.2.99.1.0|4|but +1.3.6.1.4.1.30932.1.1.2.99.2.0|4x|6b657074206f78656e206f78656e206163746564206b657074 +1.3.6.1.4.1.30932.1.1.2.99.3.0|4x|7a6f6d62696573206f78656e206163746564206163746564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.30932.1.1.2.100.0|2|17 +1.3.6.1.4.1.30932.1.1.3.1.1.0|2|11 +1.3.6.1.4.1.30932.1.1.3.1.2.0|2|0 +1.3.6.1.4.1.30932.1.1.3.1.3.0|2|7 +1.3.6.1.4.1.30932.1.1.3.1.4.0|2|15 +1.3.6.1.4.1.30932.1.1.3.1.5.0|2|9 +1.3.6.1.4.1.30932.1.1.3.1.6.0|2|24 +1.3.6.1.4.1.30932.1.1.3.2.1.0|2|26 +1.3.6.1.4.1.30932.1.1.3.2.2.0|2|17 +1.3.6.1.4.1.30932.1.1.3.2.3.0|2|22 +1.3.6.1.4.1.30932.1.1.3.2.4.0|2|30 +1.3.6.1.4.1.30932.1.1.3.2.5.0|2|7 +1.3.6.1.4.1.30932.1.1.3.2.6.0|2|26 +1.3.6.1.4.1.30932.1.1.3.3.1.0|2|3 +1.3.6.1.4.1.30932.1.1.3.3.2.0|2|8 +1.3.6.1.4.1.30932.1.1.3.3.3.0|2|10 +1.3.6.1.4.1.30932.1.1.3.3.4.0|2|11 +1.3.6.1.4.1.30932.1.1.3.3.5.0|2|17 +1.3.6.1.4.1.30932.1.1.3.3.6.0|2|31 +1.3.6.1.4.1.30932.1.1.3.4.1.0|2|2 +1.3.6.1.4.1.30932.1.1.3.4.2.0|2|15 +1.3.6.1.4.1.30932.1.1.3.4.3.0|2|21 +1.3.6.1.4.1.30932.1.1.3.4.4.0|2|22 +1.3.6.1.4.1.30932.1.1.3.4.5.0|2|17 +1.3.6.1.4.1.30932.1.1.3.4.6.0|2|18 +1.3.6.1.4.1.30932.1.1.3.5.1.0|2|3 +1.3.6.1.4.1.30932.1.1.3.5.2.0|2|8 +1.3.6.1.4.1.30932.1.1.3.5.3.0|2|23 +1.3.6.1.4.1.30932.1.1.3.5.4.0|2|17 +1.3.6.1.4.1.30932.1.1.3.5.5.0|2|20 +1.3.6.1.4.1.30932.1.1.3.5.6.0|2|30 +1.3.6.1.4.1.30932.1.1.3.5.7.0|2|19 +1.3.6.1.4.1.30932.1.1.3.5.8.0|2|12 +1.3.6.1.4.1.30932.1.1.3.5.9.0|2|5 +1.3.6.1.4.1.30932.1.1.3.5.10.0|2|23 +1.3.6.1.4.1.30932.1.1.3.5.11.0|2|28 +1.3.6.1.4.1.30932.1.1.3.5.12.0|2|14 +1.3.6.1.4.1.30932.1.1.3.5.13.0|2|25 +1.3.6.1.4.1.30932.1.1.3.5.14.0|2|0 +1.3.6.1.4.1.30932.1.1.3.5.15.0|2|24 +1.3.6.1.4.1.30932.1.1.3.5.16.0|2|20 +1.3.6.1.4.1.30932.1.1.3.5.17.0|2|15 +1.3.6.1.4.1.30932.1.1.3.5.18.0|2|3 +1.3.6.1.4.1.30932.1.1.3.5.19.0|2|28 +1.3.6.1.4.1.30932.1.1.3.5.20.0|2|17 +1.3.6.1.4.1.30932.1.1.3.5.21.0|2|29 +1.3.6.1.4.1.30932.1.1.3.5.22.0|2|5 +1.3.6.1.4.1.30932.1.1.3.5.23.0|2|15 +1.3.6.1.4.1.30932.1.1.3.5.24.0|2|9 +1.3.6.1.4.1.30932.1.1.3.6.0|4x|7468656972204a6164656420627574 +1.3.6.1.4.1.30932.1.1.3.7.1.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.2.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.3.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.4.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.5.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.6.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.7.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.8.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.9.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.10.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.11.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.12.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.13.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.14.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.15.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.16.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.17.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.18.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.19.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.20.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.21.0|2|0 +1.3.6.1.4.1.30932.1.1.3.7.22.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.23.0|2|1 +1.3.6.1.4.1.30932.1.1.3.7.24.0|2|0 +1.3.6.1.4.1.30932.1.1.3.8.1.0|2|30 +1.3.6.1.4.1.30932.1.1.3.8.2.0|2|20 +1.3.6.1.4.1.30932.1.1.3.9.1.0|2|16 +1.3.6.1.4.1.30932.1.1.3.9.2.0|2|29 +1.3.6.1.4.1.30932.1.1.3.10.1.0|2|3 +1.3.6.1.4.1.30932.1.1.3.10.2.0|2|14 +1.3.6.1.4.1.30932.1.1.3.10.3.0|2|11 +1.3.6.1.4.1.30932.1.1.3.10.4.0|2|9 +1.3.6.1.4.1.30932.1.1.3.10.5.0|2|7 +1.3.6.1.4.1.30932.1.1.3.10.7.0|2|31 +1.3.6.1.4.1.30932.1.1.3.10.9.0|2|0 +1.3.6.1.4.1.30932.1.1.3.10.11.0|2|14 +1.3.6.1.4.1.30932.1.1.3.11.1.0|70|16264590203672736646 +1.3.6.1.4.1.30932.1.1.3.11.2.0|70|10480497828214594536 +1.3.6.1.4.1.30932.1.1.3.11.3.0|70|15275984435908529563 +1.3.6.1.4.1.30932.1.1.3.11.4.0|70|2649644366939238895 +1.3.6.1.4.1.30932.1.1.3.11.5.0|70|16023443192449606371 +1.3.6.1.4.1.30932.1.1.3.11.6.0|70|4242479706199318859 +1.3.6.1.4.1.30932.1.1.3.12.1.0|70|4092322495551077882 +1.3.6.1.4.1.30932.1.1.3.12.2.0|70|1976339425415722858 +1.3.6.1.4.1.30932.1.1.3.12.3.0|70|17082478301598655917 +1.3.6.1.4.1.30932.1.1.3.12.4.0|70|14900246911539986721 +1.3.6.1.4.1.30932.1.1.3.12.5.0|70|17980681661801324771 +1.3.6.1.4.1.30932.1.1.3.12.6.0|70|4404849861412391969 +1.3.6.1.4.1.30932.1.1.3.12.7.0|70|6614263813499667200 +1.3.6.1.4.1.30932.1.1.3.12.8.0|70|11226575729869874634 +1.3.6.1.4.1.30932.1.1.3.12.9.0|70|18304423676138222618 +1.3.6.1.4.1.30932.1.1.3.12.10.0|70|8567092784356374549 +1.3.6.1.4.1.30932.1.1.3.12.11.0|70|15934476233589254254 +1.3.6.1.4.1.30932.1.1.3.12.12.0|70|10526965409775612347 +1.3.6.1.4.1.30932.1.1.3.12.13.0|70|4992860910233408263 +1.3.6.1.4.1.30932.1.1.3.12.14.0|70|6647558032794683578 +1.3.6.1.4.1.30932.1.1.3.12.15.0|70|11780883078059484674 +1.3.6.1.4.1.30932.1.1.3.12.16.0|70|1843737533351206621 +1.3.6.1.4.1.30932.1.1.3.12.17.0|70|4542252279799957129 +1.3.6.1.4.1.30932.1.1.3.12.18.0|70|14916965746036634478 +1.3.6.1.4.1.30932.1.1.3.12.19.0|70|1735783194298570549 +1.3.6.1.4.1.30932.1.1.3.12.20.0|70|16561897416095631530 +1.3.6.1.4.1.30932.1.1.3.12.21.0|70|10049784299176410470 +1.3.6.1.4.1.30932.1.1.3.12.22.0|70|1221396927160634845 +1.3.6.1.4.1.30932.1.1.3.12.23.0|70|13798134093641246880 +1.3.6.1.4.1.30932.1.1.3.12.24.0|70|6889309830170805650 +1.3.6.1.4.1.30932.1.1.3.13.1.0|2|10 +1.3.6.1.4.1.30932.1.1.3.13.2.0|2|8 +1.3.6.1.4.1.30932.1.1.3.13.3.0|2|16 +1.3.6.1.4.1.30932.1.1.4.1.1.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.2.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.3.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.4.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.5.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.6.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.7.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.8.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.9.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.10.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.11.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.12.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.13.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.14.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.15.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.16.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.17.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.18.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.19.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.20.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.21.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.22.0|2|1 +1.3.6.1.4.1.30932.1.1.4.1.23.0|2|0 +1.3.6.1.4.1.30932.1.1.4.1.24.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.1.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.2.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.3.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.4.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.5.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.6.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.7.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.8.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.9.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.10.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.11.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.12.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.13.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.14.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.15.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.16.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.17.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.18.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.19.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.20.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.21.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.22.0|2|0 +1.3.6.1.4.1.30932.1.1.4.2.23.0|2|1 +1.3.6.1.4.1.30932.1.1.4.2.24.0|2|0 +1.3.6.1.4.1.30932.1.1.4.3.0|4x|6f78656e2064726976696e6720627574 +1.3.6.1.4.1.30932.1.1.5.1.0|2|26 +1.3.6.1.4.1.30932.1.1.5.2.0|4x|6b65707420627574207468656972207468656972206f78656e207a6f6d62696573 +1.3.6.1.4.1.30932.1.1.5.3.0|2|12 +1.3.6.1.4.1.30932.1.1.5.4.0|4x|627574204a616465642064726976696e67206b657074206f78656e206b657074 +1.3.6.1.4.1.30932.1.10.1.1.1.1.1.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.1.1.2.0|64x|cb99c348 +1.3.6.1.4.1.30932.1.10.1.1.1.1.3.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.1.1.4.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.1.1.5.0|64x|2ea03123 +1.3.6.1.4.1.30932.1.10.1.1.1.1.6.0|64x|9fa67a25 +1.3.6.1.4.1.30932.1.10.1.1.1.1.7.0|64x|d4a5d417 +1.3.6.1.4.1.30932.1.10.1.1.1.1.8.0|64x|65ed45d6 +1.3.6.1.4.1.30932.1.10.1.1.1.1.9.0|64x|ebb7605f +1.3.6.1.4.1.30932.1.10.1.1.1.2.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.1.2.2.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.1.2.3.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.1.2.4.0|4x|7a6f6d62696573207a6f6d62696573204a6164656420717561696e746c79 +1.3.6.1.4.1.30932.1.10.1.1.1.2.5.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.1.2.6.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.1.2.7.0|4x|717561696e746c7920627574 +1.3.6.1.4.1.30932.1.10.1.1.1.2.8.0|4|kept +1.3.6.1.4.1.30932.1.10.1.1.1.2.9.0|4x|717561696e746c79204a6164656420616374656420666f7277617264206163746564 +1.3.6.1.4.1.30932.1.10.1.1.1.2.10.0|4x|666f727761726420717561696e746c792064726976696e67206b657074206163746564 +1.3.6.1.4.1.30932.1.10.1.1.1.2.11.0|4x|6f78656e20746865697220717561696e746c792064726976696e672064726976696e67 +1.3.6.1.4.1.30932.1.10.1.1.1.3.1.0|4|kept +1.3.6.1.4.1.30932.1.10.1.1.1.3.2.0|4x|6b6570742064726976696e6720666f7277617264206b657074204a61646564207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.2.1.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.2.0|4x|6b65707420746865697220627574206f78656e207a6f6d6269657320627574206b657074 +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.3.0|4x|6f78656e20746865697220666f7277617264206b657074 +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.4.0|4x|64726976696e67206b65707420666f727761726420666f7277617264207468656972204a616465642064726976696e67207a6f6d62696573206b657074 +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.5.0|4x|627574206f78656e206163746564206b6570742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.6.0|4x|746865697220746865697220717561696e746c79206b657074206b657074204a61646564206b657074207468656972206f78656e +1.3.6.1.4.1.30932.1.10.1.1.2.1.2.7.0|4|but +1.3.6.1.4.1.30932.1.10.1.1.2.1.3.0|2|10 +1.3.6.1.4.1.30932.1.10.1.1.2.1.4.0|2|9 +1.3.6.1.4.1.30932.1.10.1.1.2.1.5.0|4x|627574206163746564206b65707420627574 +1.3.6.1.4.1.30932.1.10.1.1.2.1.6.0|4|Jaded +1.3.6.1.4.1.30932.1.10.1.1.2.1.7.0|4x|717561696e746c79207a6f6d626965732064726976696e672062757420627574207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.30932.1.10.1.1.2.1.8.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.1.9.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.2.1.10.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.1.11.0|4x|717561696e746c79207a6f6d62696573204a61646564206b657074 +1.3.6.1.4.1.30932.1.10.1.1.2.1.12.0|4x|7a6f6d62696573206f78656e2064726976696e67204a6164656420627574204a61646564206f78656e207468656972 +1.3.6.1.4.1.30932.1.10.1.1.2.1.13.0|4x|62757420717561696e746c79 +1.3.6.1.4.1.30932.1.10.1.1.2.1.14.0|4x|666f7277617264206b657074204a61646564206163746564 +1.3.6.1.4.1.30932.1.10.1.1.2.1.15.0|4x|6b657074207468656972206163746564204a6164656420666f7277617264 +1.3.6.1.4.1.30932.1.10.1.1.2.1.16.0|4x|64726976696e672064726976696e67204a61646564206f78656e20616374656420627574 +1.3.6.1.4.1.30932.1.10.1.1.2.1.17.1.0|4|kept +1.3.6.1.4.1.30932.1.10.1.1.2.1.17.2.0|4x|4a6164656420616374656420666f72776172642064726976696e6720627574206163746564 +1.3.6.1.4.1.30932.1.10.1.1.2.1.17.3.0|4x|6f78656e20717561696e746c7920666f72776172642074686569722062757420666f7277617264207a6f6d626965732064726976696e672064726976696e67 +1.3.6.1.4.1.30932.1.10.1.1.2.1.17.4.0|4x|616374656420666f7277617264206f78656e206b657074206f78656e206163746564 +1.3.6.1.4.1.30932.1.10.1.1.2.1.17.5.0|4x|666f72776172642062757420627574206163746564206f78656e207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.2.1.17.6.0|4x|6b657074206f78656e20746865697220666f7277617264207a6f6d6269657320627574206f78656e20627574 +1.3.6.1.4.1.30932.1.10.1.1.2.1.18.5.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.2.2.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.2.2.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.2.2.3.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.2.4.0|2|12 +1.3.6.1.4.1.30932.1.10.1.1.2.2.5.0|2|17 +1.3.6.1.4.1.30932.1.10.1.1.2.3.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.2.3.2.0|2|27 +1.3.6.1.4.1.30932.1.10.1.1.2.3.3.0|2|29 +1.3.6.1.4.1.30932.1.10.1.1.2.3.4.0|4|Jaded +1.3.6.1.4.1.30932.1.10.1.1.2.3.5.0|4x|4a61646564207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.2.3.6.0|4x|7468656972204a6164656420627574206f78656e2064726976696e6720627574206b657074206b657074 +1.3.6.1.4.1.30932.1.10.1.1.2.3.7.0|4x|6b65707420666f7277617264207468656972204a61646564207a6f6d62696573207468656972206b657074206163746564207468656972 +1.3.6.1.4.1.30932.1.10.1.1.2.3.8.0|4x|62757420666f7277617264206f78656e20717561696e746c79206f78656e206b657074 +1.3.6.1.4.1.30932.1.10.1.1.2.3.9.0|4x|746865697220666f7277617264207468656972206f78656e207a6f6d626965732064726976696e67 +1.3.6.1.4.1.30932.1.10.1.1.2.3.10.0|4x|6163746564207a6f6d626965732062757420627574206b657074206163746564 +1.3.6.1.4.1.30932.1.10.1.1.2.3.11.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.3.1.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.3.2.0|2|26 +1.3.6.1.4.1.30932.1.10.1.1.3.3.0|2|14 +1.3.6.1.4.1.30932.1.10.1.1.3.4.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.5.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.3.6.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.3.7.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.8.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.9.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.3.10.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.11.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.12.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.13.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.14.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.3.15.0|2|7 +1.3.6.1.4.1.30932.1.10.1.1.3.16.0|2|51 +1.3.6.1.4.1.30932.1.10.1.1.3.17.0|4x|6f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.3.18.0|2|15 +1.3.6.1.4.1.30932.1.10.1.1.3.19.0|4x|666f7277617264206b65707420627574204a6164656420666f7277617264 +1.3.6.1.4.1.30932.1.10.1.1.3.20.0|4x|717561696e746c7920717561696e746c79 +1.3.6.1.4.1.30932.1.10.1.1.3.21.0|4x|64726976696e67207a6f6d6269657320717561696e746c792064726976696e6720666f7277617264 +1.3.6.1.4.1.30932.1.10.1.1.3.22.0|4x|616374656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.3.23.0|4x|627574204a6164656420666f7277617264206163746564204a61646564207468656972206b6570742061637465642064726976696e67 +1.3.6.1.4.1.30932.1.10.1.1.3.24.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.3.25.0|4|kept +1.3.6.1.4.1.30932.1.10.1.1.3.26.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.4.1.1.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.4.1.2.0|4x|616374656420627574206f78656e206f78656e204a61646564 +1.3.6.1.4.1.30932.1.10.1.1.4.1.3.0|4|oxen +1.3.6.1.4.1.30932.1.10.1.1.4.1.4.0|2|3 +1.3.6.1.4.1.30932.1.10.1.1.4.1.5.0|2|18 +1.3.6.1.4.1.30932.1.10.1.1.4.2.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.4.2.2.0|4x|6275742061637465642064726976696e67207a6f6d62696573206f78656e204a61646564206163746564206f78656e +1.3.6.1.4.1.30932.1.10.1.1.4.2.3.0|4x|6275742064726976696e67 +1.3.6.1.4.1.30932.1.10.1.1.4.2.4.0|4x|6f78656e204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.30932.1.10.1.1.4.2.5.0|2|25 +1.3.6.1.4.1.30932.1.10.1.1.4.2.6.0|2|7 +1.3.6.1.4.1.30932.1.10.1.1.4.2.7.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.4.2.8.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.4.2.9.0|4x|6163746564206b657074206163746564204a616465642064726976696e6720666f7277617264207a6f6d62696573 +1.3.6.1.4.1.30932.1.10.1.1.4.2.10.0|4|Jaded +1.3.6.1.4.1.30932.1.10.1.1.4.2.11.0|2|21 +1.3.6.1.4.1.30932.1.10.1.1.4.2.12.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.4.2.13.0|4x|666f727761726420717561696e746c79206b65707420666f7277617264204a6164656420666f7277617264206f78656e206b65707420627574 +1.3.6.1.4.1.30932.1.10.1.1.4.2.14.0|2|20 +1.3.6.1.4.1.30932.1.10.1.1.4.2.15.0|4x|6f78656e20666f7277617264206b657074207a6f6d626965732062757420627574 +1.3.6.1.4.1.30932.1.10.1.1.4.2.16.0|2|20 +1.3.6.1.4.1.30932.1.10.1.1.4.2.17.0|4x|6b6570742062757420627574206163746564207a6f6d626965732074686569722064726976696e67206163746564206f78656e +1.3.6.1.4.1.30932.1.10.1.1.4.2.18.0|2|30 +1.3.6.1.4.1.30932.1.10.1.1.4.2.19.0|4x|717561696e746c7920666f727761726420717561696e746c79206f78656e206b657074206f78656e204a61646564 +1.3.6.1.4.1.30932.1.10.1.1.4.2.20.0|2|24 +1.3.6.1.4.1.30932.1.10.1.1.6.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.6.2.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.6.3.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.6.4.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.6.5.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.6.6.0|2|13 +1.3.6.1.4.1.30932.1.10.1.1.6.7.0|2|28 +1.3.6.1.4.1.30932.1.10.1.1.6.8.0|2|6 +1.3.6.1.4.1.30932.1.10.1.1.6.9.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.7.1.0|2|29 +1.3.6.1.4.1.30932.1.10.1.1.8.1.1.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.2.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.3.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.4.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.5.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.6.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.7.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.8.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.9.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.10.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.11.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.12.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.13.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.14.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.15.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.16.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.17.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.18.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.19.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.20.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.21.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.22.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.23.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.24.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.25.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.26.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.27.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.28.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.29.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.1.30.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.1.31.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.1.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.2.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.3.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.4.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.5.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.6.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.7.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.8.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.9.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.10.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.11.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.12.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.13.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.14.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.15.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.16.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.17.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.18.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.19.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.20.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.21.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.22.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.23.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.24.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.25.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.26.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.27.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.28.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.29.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.2.30.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.2.31.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.1.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.2.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.3.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.4.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.5.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.6.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.7.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.8.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.9.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.10.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.11.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.12.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.13.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.14.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.15.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.16.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.17.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.18.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.19.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.20.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.21.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.22.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.23.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.24.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.25.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.26.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.27.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.28.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.29.0|2|1 +1.3.6.1.4.1.30932.1.10.1.1.8.3.30.0|2|0 +1.3.6.1.4.1.30932.1.10.1.1.8.3.31.0|2|1 +1.3.6.1.4.1.30932.1.10.1.2.1.0|66|55859 +1.3.6.1.4.1.30932.1.10.1.2.10.1.1.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.2.10.1.2.6.0.36.155.53.3.246|4x|6d6f64656c31 +1.3.6.1.4.1.30932.1.10.1.2.10.1.3.6.0.36.155.53.3.246|4x|6e616d6531 +1.3.6.1.4.1.30932.1.10.1.2.10.1.3.12.48.48.48.69.68.51.48.49.48.54.67.53|4x|6e616d6532 +1.3.6.1.4.1.30932.1.10.1.2.10.1.4.6.0.36.155.53.3.246|4|forward +1.3.6.1.4.1.30932.1.10.1.2.10.1.5.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.2.10.1.6.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.2.10.1.7.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.2.10.1.8.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.2.10.1.9.6.0.36.155.53.3.246|2|19 +1.3.6.1.4.1.30932.1.10.1.2.10.1.10.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.2.10.1.11.6.0.36.155.53.3.246|4x|76312e31 +1.3.6.1.4.1.30932.1.10.1.2.10.1.12.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.2.10.1.13.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.2.10.1.14.6.0.36.155.53.3.246|64x|2a02d2e0 +1.3.6.1.4.1.30932.1.10.1.2.10.1.15.6.0.36.155.53.3.246|4x|7a6f6d62696573204a61646564206163746564206f78656e +1.3.6.1.4.1.30932.1.10.1.2.10.1.16.6.0.36.155.53.3.246|2|31 +1.3.6.1.4.1.30932.1.10.1.2.10.1.17.6.0.36.155.53.3.246|4x|63616231 +1.3.6.1.4.1.30932.1.10.1.2.10.1.18.6.0.36.155.53.3.246|4x|6f78656e20616374656420717561696e746c79 +1.3.6.1.4.1.30932.1.10.1.3.1.0|66|53817 +1.3.6.1.4.1.30932.1.10.1.3.10.1.1.6.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.3.10.1.1.18.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.3.10.1.2.6.6.0.36.155.53.3.246|2|6 +1.3.6.1.4.1.30932.1.10.1.3.10.1.2.18.6.0.36.155.53.3.246|2|18 +1.3.6.1.4.1.30932.1.10.1.3.10.1.3.6.6.0.36.155.53.3.246|2|10 +1.3.6.1.4.1.30932.1.10.1.3.10.1.3.18.6.0.36.155.53.3.246|2|27 +1.3.6.1.4.1.30932.1.10.1.3.100.0|66|13416 +1.3.6.1.4.1.30932.1.10.1.3.110.1.1.1.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.3.110.1.1.17.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.3.110.1.2.1.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.3.110.1.2.1.12.48.48.48.69.68.51.48.49.48.54.67.53|2|1 +1.3.6.1.4.1.30932.1.10.1.3.110.1.2.17.6.0.36.155.53.3.246|2|17 +1.3.6.1.4.1.30932.1.10.1.3.110.1.3.1.6.0.36.155.53.3.246|2|28 +1.3.6.1.4.1.30932.1.10.1.3.110.1.3.17.6.0.36.155.53.3.246|2|9 +1.3.6.1.4.1.30932.1.10.1.3.110.1.4.1.6.0.36.155.53.3.246|2|31 +1.3.6.1.4.1.30932.1.10.1.3.110.1.4.17.6.0.36.155.53.3.246|2|31 +1.3.6.1.4.1.30932.1.10.1.3.110.1.5.1.6.0.36.155.53.3.246|2|14 +1.3.6.1.4.1.30932.1.10.1.3.110.1.5.17.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.3.110.1.6.1.6.0.36.155.53.3.246|2|17 +1.3.6.1.4.1.30932.1.10.1.3.110.1.6.17.6.0.36.155.53.3.246|2|26 +1.3.6.1.4.1.30932.1.10.1.3.110.1.7.1.6.0.36.155.53.3.246|2|25 +1.3.6.1.4.1.30932.1.10.1.3.110.1.7.1.12.48.48.48.69.68.51.48.49.48.54.67.53|2|25 +1.3.6.1.4.1.30932.1.10.1.3.110.1.7.17.6.0.36.155.53.3.246|2|11 +1.3.6.1.4.1.30932.1.10.1.3.110.1.8.1.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.3.110.1.8.17.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.3.110.1.9.1.6.0.36.155.53.3.246|70|5425026526891357035 +1.3.6.1.4.1.30932.1.10.1.3.110.1.9.1.12.48.48.48.69.68.51.48.49.48.54.67.53|70|5425026526891357035 +1.3.6.1.4.1.30932.1.10.1.3.110.1.9.17.6.0.36.155.53.3.246|70|5905007801987739246 +1.3.6.1.4.1.30932.1.10.1.3.210.1.1.30060|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.3.210.1.1.42504|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.3.210.1.2.30060|2|2 +1.3.6.1.4.1.30932.1.10.1.3.210.1.2.42504|2|10 +1.3.6.1.4.1.30932.1.10.1.3.210.1.3.30060|2|9 +1.3.6.1.4.1.30932.1.10.1.3.210.1.3.42504|2|19 +1.3.6.1.4.1.30932.1.10.1.3.210.1.4.30060|2|8 +1.3.6.1.4.1.30932.1.10.1.3.210.1.4.42504|2|13 +1.3.6.1.4.1.30932.1.10.1.3.210.1.5.30060|2|6 +1.3.6.1.4.1.30932.1.10.1.3.210.1.5.42504|2|16 +1.3.6.1.4.1.30932.1.10.1.3.210.1.6.30060|2|8 +1.3.6.1.4.1.30932.1.10.1.3.210.1.6.42504|2|7 +1.3.6.1.4.1.30932.1.10.1.3.210.1.7.30060|2|24 +1.3.6.1.4.1.30932.1.10.1.3.210.1.7.42504|2|15 +1.3.6.1.4.1.30932.1.10.1.3.210.1.8.30060|2|7 +1.3.6.1.4.1.30932.1.10.1.3.210.1.8.42504|2|23 +1.3.6.1.4.1.30932.1.10.1.3.210.1.9.30060|2|20 +1.3.6.1.4.1.30932.1.10.1.3.210.1.9.42504|2|5 +1.3.6.1.4.1.30932.1.10.1.3.210.1.10.30060|2|29 +1.3.6.1.4.1.30932.1.10.1.3.210.1.10.42504|2|5 +1.3.6.1.4.1.30932.1.10.1.3.210.1.11.30060|2|29 +1.3.6.1.4.1.30932.1.10.1.3.210.1.11.42504|2|1 +1.3.6.1.4.1.30932.1.10.1.3.210.1.12.30060|66|30060 +1.3.6.1.4.1.30932.1.10.1.3.210.1.12.42504|66|42504 +1.3.6.1.4.1.30932.1.10.1.4.1.0|66|50677 +1.3.6.1.4.1.30932.1.10.1.4.10.1.1.7.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.4.10.1.1.16.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.4.10.1.2.7.6.0.36.155.53.3.246|2|7 +1.3.6.1.4.1.30932.1.10.1.4.10.1.2.16.6.0.36.155.53.3.246|2|16 +1.3.6.1.4.1.30932.1.10.1.4.10.1.3.7.6.0.36.155.53.3.246|2|29 +1.3.6.1.4.1.30932.1.10.1.4.10.1.3.16.6.0.36.155.53.3.246|2|23 +1.3.6.1.4.1.30932.1.10.1.4.10.1.4.7.6.0.36.155.53.3.246|4x|6f75746c657431 +1.3.6.1.4.1.30932.1.10.1.4.10.1.4.16.6.0.36.155.53.3.246|4x|6f75746c657432 +1.3.6.1.4.1.30932.1.10.1.4.10.1.5.7.6.0.36.155.53.3.246|4x|6f78656e20666f72776172642064726976696e67207a6f6d6269657320616374656420717561696e746c79207468656972207a6f6d62696573207468656972 +1.3.6.1.4.1.30932.1.10.1.4.10.1.5.16.6.0.36.155.53.3.246|4x|7468656972206b6570742064726976696e67207468656972207a6f6d6269657320666f7277617264204a616465642064726976696e67 +1.3.6.1.4.1.30932.1.10.1.4.10.1.6.7.6.0.36.155.53.3.246|2|15 +1.3.6.1.4.1.30932.1.10.1.4.10.1.6.16.6.0.36.155.53.3.246|2|28 +1.3.6.1.4.1.30932.1.10.1.4.10.1.7.7.6.0.36.155.53.3.246|2|3 +1.3.6.1.4.1.30932.1.10.1.4.10.1.7.16.6.0.36.155.53.3.246|2|8 +1.3.6.1.4.1.30932.1.10.1.4.10.1.8.7.6.0.36.155.53.3.246|2|16 +1.3.6.1.4.1.30932.1.10.1.4.10.1.8.16.6.0.36.155.53.3.246|2|16 +1.3.6.1.4.1.30932.1.10.1.4.10.1.9.7.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.4.10.1.9.16.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.4.10.1.10.7.6.0.36.155.53.3.246|70|16933530166855965280 +1.3.6.1.4.1.30932.1.10.1.4.10.1.10.16.6.0.36.155.53.3.246|70|12820398031307264998 +1.3.6.1.4.1.30932.1.10.1.4.10.1.11.7.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.4.10.1.11.16.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.4.10.1.12.7.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.4.10.1.12.16.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.4.210.1.1.19.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.4.210.1.1.20.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.4.210.1.2.19.6.0.36.155.53.3.246|2|19 +1.3.6.1.4.1.30932.1.10.1.4.210.1.2.20.6.0.36.155.53.3.246|2|20 +1.3.6.1.4.1.30932.1.10.1.4.210.1.3.19.6.0.36.155.53.3.246|2|9 +1.3.6.1.4.1.30932.1.10.1.4.210.1.3.20.6.0.36.155.53.3.246|2|6 +1.3.6.1.4.1.30932.1.10.1.4.210.1.4.19.6.0.36.155.53.3.246|2|3 +1.3.6.1.4.1.30932.1.10.1.4.210.1.4.20.6.0.36.155.53.3.246|2|13 +1.3.6.1.4.1.30932.1.10.1.4.310.1.1.4.111.120.101.110.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.4.310.1.1.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.4.310.1.2.4.111.120.101.110.6.0.36.155.53.3.246|4|oxen +1.3.6.1.4.1.30932.1.10.1.4.310.1.2.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|4x|7a6f6d62696573206b657074206b657074 +1.3.6.1.4.1.30932.1.10.1.4.310.1.3.4.111.120.101.110.6.0.36.155.53.3.246|2|19 +1.3.6.1.4.1.30932.1.10.1.4.310.1.3.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|2|29 +1.3.6.1.4.1.30932.1.10.1.4.310.1.4.4.111.120.101.110.6.0.36.155.53.3.246|2|2 +1.3.6.1.4.1.30932.1.10.1.4.310.1.4.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|2|4 +1.3.6.1.4.1.30932.1.10.1.4.310.1.5.4.111.120.101.110.6.0.36.155.53.3.246|2|8 +1.3.6.1.4.1.30932.1.10.1.4.310.1.5.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|2|17 +1.3.6.1.4.1.30932.1.10.1.4.310.1.6.4.111.120.101.110.6.0.36.155.53.3.246|2|26 +1.3.6.1.4.1.30932.1.10.1.4.310.1.6.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|2|14 +1.3.6.1.4.1.30932.1.10.1.4.310.1.7.4.111.120.101.110.6.0.36.155.53.3.246|2|15 +1.3.6.1.4.1.30932.1.10.1.4.310.1.7.17.122.111.109.98.105.101.115.32.107.101.112.116.32.107.101.112.116.6.0.36.155.53.3.246|2|15 +1.3.6.1.4.1.30932.1.10.1.5.1.0|66|47455 +1.3.6.1.4.1.30932.1.10.1.5.5.1.1.5.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.5.5.1.1.10.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.5.5.1.2.5.6.0.36.155.53.3.246|2|5 +1.3.6.1.4.1.30932.1.10.1.5.5.1.2.10.6.0.36.155.53.3.246|2|10 +1.3.6.1.4.1.30932.1.10.1.5.5.1.3.5.6.0.36.155.53.3.246|4x|7a6f6d626965732064726976696e672062757420666f7277617264207a6f6d6269657320666f7277617264207a6f6d6269657320717561696e746c7920717561696e746c79 +1.3.6.1.4.1.30932.1.10.1.5.5.1.3.10.6.0.36.155.53.3.246|4x|627574207468656972206b657074206f78656e206b657074206163746564 +1.3.6.1.4.1.30932.1.10.1.5.10.1.1.4.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.5.10.1.1.6.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.5.10.1.2.4.6.0.36.155.53.3.246|2|4 +1.3.6.1.4.1.30932.1.10.1.5.10.1.2.6.6.0.36.155.53.3.246|2|6 +1.3.6.1.4.1.30932.1.10.1.5.10.1.3.4.6.0.36.155.53.3.246|4x|73656e736f7231 +1.3.6.1.4.1.30932.1.10.1.5.10.1.3.6.6.0.36.155.53.3.246|4x|73656e736f7232 +1.3.6.1.4.1.30932.1.10.1.5.10.1.4.4.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.5.10.1.4.6.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.5.10.1.5.4.6.0.36.155.53.3.246|2|10 +1.3.6.1.4.1.30932.1.10.1.5.10.1.5.6.6.0.36.155.53.3.246|2|13 +1.3.6.1.4.1.30932.1.10.1.5.110.1.1.10.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.5.110.1.1.25.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.5.110.1.2.10.6.0.36.155.53.3.246|2|10 +1.3.6.1.4.1.30932.1.10.1.5.110.1.2.25.6.0.36.155.53.3.246|2|25 +1.3.6.1.4.1.30932.1.10.1.5.110.1.3.10.6.0.36.155.53.3.246|2|31 +1.3.6.1.4.1.30932.1.10.1.5.110.1.3.25.6.0.36.155.53.3.246|2|15 +1.3.6.1.4.1.30932.1.10.1.5.110.1.4.10.6.0.36.155.53.3.246|2|26 +1.3.6.1.4.1.30932.1.10.1.5.110.1.4.25.6.0.36.155.53.3.246|2|22 +1.3.6.1.4.1.30932.1.10.1.5.110.1.5.10.6.0.36.155.53.3.246|2|6 +1.3.6.1.4.1.30932.1.10.1.5.110.1.5.25.6.0.36.155.53.3.246|2|2 +1.3.6.1.4.1.30932.1.10.1.5.110.1.6.10.6.0.36.155.53.3.246|2|4 +1.3.6.1.4.1.30932.1.10.1.5.110.1.6.25.6.0.36.155.53.3.246|2|15 +1.3.6.1.4.1.30932.1.10.1.6.1.0|66|46081 +1.3.6.1.4.1.30932.1.10.1.6.2.0|66|51334 +1.3.6.1.4.1.30932.1.10.1.6.10.1.1.2374|66|2374 +1.3.6.1.4.1.30932.1.10.1.6.10.1.1.59874|66|59874 +1.3.6.1.4.1.30932.1.10.1.6.10.1.2.2374|4x|7468656972206f78656e20717561696e746c7920666f7277617264207468656972 +1.3.6.1.4.1.30932.1.10.1.6.10.1.2.59874|4x|74686569722064726976696e6720666f72776172642064726976696e67207a6f6d62696573206163746564206f78656e20717561696e746c79 +1.3.6.1.4.1.30932.1.10.1.6.20.1.1.49237|66|49237 +1.3.6.1.4.1.30932.1.10.1.6.20.1.1.57037|66|57037 +1.3.6.1.4.1.30932.1.10.1.6.20.1.2.49237|66|3703 +1.3.6.1.4.1.30932.1.10.1.6.20.1.2.57037|66|22638 +1.3.6.1.4.1.30932.1.10.1.6.20.1.3.49237|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.6.20.1.3.57037|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.6.20.1.4.49237|2|15 +1.3.6.1.4.1.30932.1.10.1.6.20.1.4.57037|2|31 +1.3.6.1.4.1.30932.1.10.1.7.1.0|66|1916 +1.3.6.1.4.1.30932.1.10.1.7.90.1.1.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.7.90.1.2.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.7.90.1.3.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.7.90.1.4.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.7.90.1.5.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.7.90.1.6.6.0.36.155.53.3.246|2|8 +1.3.6.1.4.1.30932.1.10.1.7.100.1.1.1.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.7.100.1.1.2.6.0.36.155.53.3.246|4x|00249b3503f6 +1.3.6.1.4.1.30932.1.10.1.7.100.1.2.1.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.7.100.1.2.2.6.0.36.155.53.3.246|2|2 +1.3.6.1.4.1.30932.1.10.1.7.100.1.3.1.6.0.36.155.53.3.246|2|2 +1.3.6.1.4.1.30932.1.10.1.7.100.1.3.2.6.0.36.155.53.3.246|2|2 +1.3.6.1.4.1.30932.1.10.1.7.100.1.4.1.6.0.36.155.53.3.246|2|0 +1.3.6.1.4.1.30932.1.10.1.7.100.1.4.2.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.7.100.1.5.1.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.7.100.1.5.2.6.0.36.155.53.3.246|2|1 +1.3.6.1.4.1.30932.1.10.1.7.100.1.6.0|2|1 +1.3.6.1.4.1.30932.1.10.1.7.100.1.7.0|2|1 +1.3.6.1.4.1.30932.1.10.1.7.100.1.8.0|66|26997 +1.3.6.1.4.1.30932.1.10.1.7.100.1.9.0|4x|7a6f6d62696573206275742064726976696e672064726976696e67 +1.3.6.1.4.1.30932.1.10.1.7.100.1.10.0|4x|6f78656e206f78656e20666f7277617264 +1.3.6.1.4.1.30932.1.10.1.7.100.1.11.0|2|0 +1.3.6.1.4.1.30932.1.10.1.500.0.1.0|4|their +1.3.6.1.4.1.30932.1.10.1.500.0.2.0|4|forward +1.3.6.1.4.1.30932.1.10.1.500.0.3.0|4x|7468656972204a6164656420717561696e746c792064726976696e67204a61646564 +1.3.6.1.4.1.30932.1.10.1.500.0.4.0|2|2 +1.3.6.1.4.1.30932.1.10.1.500.0.5.0|6|1.3.6.1.3.179.103 +1.3.6.1.4.1.30932.1.10.1.500.0.6.0|2|0 +1.3.6.1.4.1.30932.1.10.1.500.0.7.0|2|9 +1.3.6.1.4.1.30932.1.10.1.500.0.8.0|2|0 +1.3.6.1.4.1.30932.1.10.1.500.0.9.0|2|28 +1.3.6.1.4.1.30932.1.10.1.500.0.10.0|4x|627574207a6f6d6269657320717561696e746c792064726976696e67 diff --git a/test/new-e2e/ndm/snmp/compose/data/checkpoint-firewall.snmprec b/test/new-e2e/ndm/snmp/compose/data/checkpoint-firewall.snmprec new file mode 100644 index 0000000000000..2adb7d3cc5ab0 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/checkpoint-firewall.snmprec @@ -0,0 +1,4027 @@ +1.3.6.1.2.1.1.1.0|4|Linux gw-af4bd9 3.10.0-957.21.3cpx86_64 #1 SMP Tue Jan 28 17:26:12 IST 2020 x86_64 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2620.1.1 +1.3.6.1.4.1.2620.1.1.1.0|4x|6f78656e204a61646564206f78656e +1.3.6.1.4.1.2620.1.1.2.0|4x|4a61646564206b6570742064726976696e67204a61646564207a6f6d626965732062757420717561696e746c792064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.1.3.0|4|quaintly +1.3.6.1.4.1.2620.1.1.4.0|2|10 +1.3.6.1.4.1.2620.1.1.5.0|2|25 +1.3.6.1.4.1.2620.1.1.6.0|2|22 +1.3.6.1.4.1.2620.1.1.7.0|2|23 +1.3.6.1.4.1.2620.1.1.8.0|2|3 +1.3.6.1.4.1.2620.1.1.9.0|2|2 +1.3.6.1.4.1.2620.1.1.10.0|4x|746865697220717561696e746c7920627574 +1.3.6.1.4.1.2620.1.1.11.0|4x|74686569722064726976696e672061637465642064726976696e67 +1.3.6.1.4.1.2620.1.1.12.0|4x|6b657074206b657074207468656972207a6f6d62696573207a6f6d62696573206163746564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.1.21.0|4x|64726976696e672062757420666f727761726420666f72776172642062757420746865697220627574206b657074 +1.3.6.1.4.1.2620.1.1.22.0|2|7 +1.3.6.1.4.1.2620.1.1.23.0|2|19 +1.3.6.1.4.1.2620.1.1.24.0|2|31 +1.3.6.1.4.1.2620.1.1.25.1.0|4x|6163746564207a6f6d626965732064726976696e6720717561696e746c7920616374656420746865697220666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.1.25.2.0|4|but +1.3.6.1.4.1.2620.1.1.25.3.0|2|10 +1.3.6.1.4.1.2620.1.1.25.4.0|2|1 +1.3.6.1.4.1.2620.1.1.25.5.1.1.749|66|749 +1.3.6.1.4.1.2620.1.1.25.5.1.1.3015|66|3015 +1.3.6.1.4.1.2620.1.1.25.5.1.1.17885|66|17885 +1.3.6.1.4.1.2620.1.1.25.5.1.1.27174|66|27174 +1.3.6.1.4.1.2620.1.1.25.5.1.1.30854|66|30854 +1.3.6.1.4.1.2620.1.1.25.5.1.1.33502|66|33502 +1.3.6.1.4.1.2620.1.1.25.5.1.1.40202|66|40202 +1.3.6.1.4.1.2620.1.1.25.5.1.1.55865|66|55865 +1.3.6.1.4.1.2620.1.1.25.5.1.1.56693|66|56693 +1.3.6.1.4.1.2620.1.1.25.5.1.1.60198|66|60198 +1.3.6.1.4.1.2620.1.1.25.5.1.2.749|4x|6b65707420666f727761726420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.1.25.5.1.2.3015|4x|6f78656e206b657074206f78656e20627574 +1.3.6.1.4.1.2620.1.1.25.5.1.2.17885|4x|64726976696e67207468656972206b65707420616374656420627574207468656972 +1.3.6.1.4.1.2620.1.1.25.5.1.2.27174|4x|627574206b657074206f78656e207a6f6d6269657320627574206163746564 +1.3.6.1.4.1.2620.1.1.25.5.1.2.30854|4x|6163746564206f78656e206b657074206b657074206b657074204a61646564204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.1.25.5.1.2.33502|4x|666f7277617264204a616465642064726976696e6720666f7277617264206f78656e206b657074 +1.3.6.1.4.1.2620.1.1.25.5.1.2.40202|4x|62757420746865697220666f727761726420717561696e746c792064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.1.25.5.1.2.55865|4x|666f727761726420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.1.25.5.1.2.56693|4x|4a61646564206f78656e206b657074 +1.3.6.1.4.1.2620.1.1.25.5.1.2.60198|4x|7468656972206b657074204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.1.25.5.1.5.749|2|24 +1.3.6.1.4.1.2620.1.1.25.5.1.5.3015|2|7 +1.3.6.1.4.1.2620.1.1.25.5.1.5.17885|2|9 +1.3.6.1.4.1.2620.1.1.25.5.1.5.27174|2|30 +1.3.6.1.4.1.2620.1.1.25.5.1.5.30854|2|29 +1.3.6.1.4.1.2620.1.1.25.5.1.5.33502|2|1 +1.3.6.1.4.1.2620.1.1.25.5.1.5.40202|2|2 +1.3.6.1.4.1.2620.1.1.25.5.1.5.55865|2|0 +1.3.6.1.4.1.2620.1.1.25.5.1.5.56693|2|31 +1.3.6.1.4.1.2620.1.1.25.5.1.5.60198|2|31 +1.3.6.1.4.1.2620.1.1.25.5.1.6.749|2|2 +1.3.6.1.4.1.2620.1.1.25.5.1.6.3015|2|27 +1.3.6.1.4.1.2620.1.1.25.5.1.6.17885|2|24 +1.3.6.1.4.1.2620.1.1.25.5.1.6.27174|2|28 +1.3.6.1.4.1.2620.1.1.25.5.1.6.30854|2|12 +1.3.6.1.4.1.2620.1.1.25.5.1.6.33502|2|15 +1.3.6.1.4.1.2620.1.1.25.5.1.6.40202|2|12 +1.3.6.1.4.1.2620.1.1.25.5.1.6.55865|2|11 +1.3.6.1.4.1.2620.1.1.25.5.1.6.56693|2|4 +1.3.6.1.4.1.2620.1.1.25.5.1.6.60198|2|23 +1.3.6.1.4.1.2620.1.1.25.5.1.7.749|2|10 +1.3.6.1.4.1.2620.1.1.25.5.1.7.3015|2|2 +1.3.6.1.4.1.2620.1.1.25.5.1.7.17885|2|17 +1.3.6.1.4.1.2620.1.1.25.5.1.7.27174|2|16 +1.3.6.1.4.1.2620.1.1.25.5.1.7.30854|2|22 +1.3.6.1.4.1.2620.1.1.25.5.1.7.33502|2|11 +1.3.6.1.4.1.2620.1.1.25.5.1.7.40202|2|28 +1.3.6.1.4.1.2620.1.1.25.5.1.7.55865|2|5 +1.3.6.1.4.1.2620.1.1.25.5.1.7.56693|2|15 +1.3.6.1.4.1.2620.1.1.25.5.1.7.60198|2|22 +1.3.6.1.4.1.2620.1.1.25.5.1.8.749|2|23 +1.3.6.1.4.1.2620.1.1.25.5.1.8.3015|2|23 +1.3.6.1.4.1.2620.1.1.25.5.1.8.17885|2|18 +1.3.6.1.4.1.2620.1.1.25.5.1.8.27174|2|31 +1.3.6.1.4.1.2620.1.1.25.5.1.8.30854|2|13 +1.3.6.1.4.1.2620.1.1.25.5.1.8.33502|2|5 +1.3.6.1.4.1.2620.1.1.25.5.1.8.40202|2|27 +1.3.6.1.4.1.2620.1.1.25.5.1.8.55865|2|24 +1.3.6.1.4.1.2620.1.1.25.5.1.8.56693|2|14 +1.3.6.1.4.1.2620.1.1.25.5.1.8.60198|2|0 +1.3.6.1.4.1.2620.1.1.25.5.1.9.749|2|14 +1.3.6.1.4.1.2620.1.1.25.5.1.9.3015|2|16 +1.3.6.1.4.1.2620.1.1.25.5.1.9.17885|2|18 +1.3.6.1.4.1.2620.1.1.25.5.1.9.27174|2|4 +1.3.6.1.4.1.2620.1.1.25.5.1.9.30854|2|24 +1.3.6.1.4.1.2620.1.1.25.5.1.9.33502|2|26 +1.3.6.1.4.1.2620.1.1.25.5.1.9.40202|2|1 +1.3.6.1.4.1.2620.1.1.25.5.1.9.55865|2|11 +1.3.6.1.4.1.2620.1.1.25.5.1.9.56693|2|31 +1.3.6.1.4.1.2620.1.1.25.5.1.9.60198|2|28 +1.3.6.1.4.1.2620.1.1.25.5.1.10.749|2|2 +1.3.6.1.4.1.2620.1.1.25.5.1.10.3015|2|30 +1.3.6.1.4.1.2620.1.1.25.5.1.10.17885|2|27 +1.3.6.1.4.1.2620.1.1.25.5.1.10.27174|2|0 +1.3.6.1.4.1.2620.1.1.25.5.1.10.30854|2|7 +1.3.6.1.4.1.2620.1.1.25.5.1.10.33502|2|25 +1.3.6.1.4.1.2620.1.1.25.5.1.10.40202|2|22 +1.3.6.1.4.1.2620.1.1.25.5.1.10.55865|2|30 +1.3.6.1.4.1.2620.1.1.25.5.1.10.56693|2|26 +1.3.6.1.4.1.2620.1.1.25.5.1.10.60198|2|26 +1.3.6.1.4.1.2620.1.1.25.5.1.11.749|2|15 +1.3.6.1.4.1.2620.1.1.25.5.1.11.3015|2|16 +1.3.6.1.4.1.2620.1.1.25.5.1.11.17885|2|9 +1.3.6.1.4.1.2620.1.1.25.5.1.11.27174|2|7 +1.3.6.1.4.1.2620.1.1.25.5.1.11.30854|2|22 +1.3.6.1.4.1.2620.1.1.25.5.1.11.33502|2|7 +1.3.6.1.4.1.2620.1.1.25.5.1.11.40202|2|1 +1.3.6.1.4.1.2620.1.1.25.5.1.11.55865|2|30 +1.3.6.1.4.1.2620.1.1.25.5.1.11.56693|2|1 +1.3.6.1.4.1.2620.1.1.25.5.1.11.60198|2|8 +1.3.6.1.4.1.2620.1.1.25.5.1.12.749|2|30 +1.3.6.1.4.1.2620.1.1.25.5.1.12.3015|2|3 +1.3.6.1.4.1.2620.1.1.25.5.1.12.17885|2|6 +1.3.6.1.4.1.2620.1.1.25.5.1.12.27174|2|17 +1.3.6.1.4.1.2620.1.1.25.5.1.12.30854|2|29 +1.3.6.1.4.1.2620.1.1.25.5.1.12.33502|2|24 +1.3.6.1.4.1.2620.1.1.25.5.1.12.40202|2|9 +1.3.6.1.4.1.2620.1.1.25.5.1.12.55865|2|26 +1.3.6.1.4.1.2620.1.1.25.5.1.12.56693|2|16 +1.3.6.1.4.1.2620.1.1.25.5.1.12.60198|2|19 +1.3.6.1.4.1.2620.1.1.25.5.1.13.749|2|12 +1.3.6.1.4.1.2620.1.1.25.5.1.13.3015|2|20 +1.3.6.1.4.1.2620.1.1.25.5.1.13.17885|2|11 +1.3.6.1.4.1.2620.1.1.25.5.1.13.27174|2|7 +1.3.6.1.4.1.2620.1.1.25.5.1.13.30854|2|31 +1.3.6.1.4.1.2620.1.1.25.5.1.13.33502|2|16 +1.3.6.1.4.1.2620.1.1.25.5.1.13.40202|2|13 +1.3.6.1.4.1.2620.1.1.25.5.1.13.55865|2|30 +1.3.6.1.4.1.2620.1.1.25.5.1.13.56693|2|18 +1.3.6.1.4.1.2620.1.1.25.5.1.13.60198|2|23 +1.3.6.1.4.1.2620.1.1.25.5.1.14.749|2|5 +1.3.6.1.4.1.2620.1.1.25.5.1.14.3015|2|27 +1.3.6.1.4.1.2620.1.1.25.5.1.14.17885|2|18 +1.3.6.1.4.1.2620.1.1.25.5.1.14.27174|2|31 +1.3.6.1.4.1.2620.1.1.25.5.1.14.30854|2|25 +1.3.6.1.4.1.2620.1.1.25.5.1.14.33502|2|2 +1.3.6.1.4.1.2620.1.1.25.5.1.14.40202|2|20 +1.3.6.1.4.1.2620.1.1.25.5.1.14.55865|2|14 +1.3.6.1.4.1.2620.1.1.25.5.1.14.56693|2|22 +1.3.6.1.4.1.2620.1.1.25.5.1.14.60198|2|25 +1.3.6.1.4.1.2620.1.1.25.6.0|4x|4a61646564206f78656e207468656972206b657074 +1.3.6.1.4.1.2620.1.1.25.8.0|4x|627574206b657074204a61646564 +1.3.6.1.4.1.2620.1.1.25.9.0|4|acted +1.3.6.1.4.1.2620.1.1.25.10.0|2|13 +1.3.6.1.4.1.2620.1.1.25.16.0|4|their +1.3.6.1.4.1.2620.1.1.26.1.1.0|2|24 +1.3.6.1.4.1.2620.1.1.26.1.2.0|2|24 +1.3.6.1.4.1.2620.1.1.26.1.3.0|2|1 +1.3.6.1.4.1.2620.1.1.26.1.4.0|2|12 +1.3.6.1.4.1.2620.1.1.26.1.5.0|2|25 +1.3.6.1.4.1.2620.1.1.26.1.6.0|2|1 +1.3.6.1.4.1.2620.1.1.26.1.7.0|2|24 +1.3.6.1.4.1.2620.1.1.26.1.8.0|2|23 +1.3.6.1.4.1.2620.1.1.26.1.9.0|2|23 +1.3.6.1.4.1.2620.1.1.26.1.10.0|2|24 +1.3.6.1.4.1.2620.1.1.26.1.11.0|2|9 +1.3.6.1.4.1.2620.1.1.26.1.12.0|2|24 +1.3.6.1.4.1.2620.1.1.26.1.13.0|2|30 +1.3.6.1.4.1.2620.1.1.26.1.14.0|2|17 +1.3.6.1.4.1.2620.1.1.26.1.15.0|2|8 +1.3.6.1.4.1.2620.1.1.26.1.16.0|2|7 +1.3.6.1.4.1.2620.1.1.26.1.17.0|2|5 +1.3.6.1.4.1.2620.1.1.26.1.18.0|2|4 +1.3.6.1.4.1.2620.1.1.26.1.19.0|2|23 +1.3.6.1.4.1.2620.1.1.26.1.20.0|2|28 +1.3.6.1.4.1.2620.1.1.26.1.21.0|2|1 +1.3.6.1.4.1.2620.1.1.26.1.22.0|2|27 +1.3.6.1.4.1.2620.1.1.26.2.1.0|2|12 +1.3.6.1.4.1.2620.1.1.26.2.2.0|2|11 +1.3.6.1.4.1.2620.1.1.26.2.3.0|2|23 +1.3.6.1.4.1.2620.1.1.26.2.4.0|2|6 +1.3.6.1.4.1.2620.1.1.26.2.5.0|2|6 +1.3.6.1.4.1.2620.1.1.26.2.6.0|2|6 +1.3.6.1.4.1.2620.1.1.26.2.7.0|2|4 +1.3.6.1.4.1.2620.1.1.26.2.8.0|2|29 +1.3.6.1.4.1.2620.1.1.26.2.9.0|2|10 +1.3.6.1.4.1.2620.1.1.26.2.10.0|2|19 +1.3.6.1.4.1.2620.1.1.26.2.11.0|2|2 +1.3.6.1.4.1.2620.1.1.26.2.12.0|2|22 +1.3.6.1.4.1.2620.1.1.26.2.13.0|2|6 +1.3.6.1.4.1.2620.1.1.26.2.14.0|2|23 +1.3.6.1.4.1.2620.1.1.26.2.15.0|2|3 +1.3.6.1.4.1.2620.1.1.26.2.16.0|2|0 +1.3.6.1.4.1.2620.1.1.26.3.1.0|2|30 +1.3.6.1.4.1.2620.1.1.26.3.2.0|2|4 +1.3.6.1.4.1.2620.1.1.26.3.3.0|2|28 +1.3.6.1.4.1.2620.1.1.26.3.4.0|2|7 +1.3.6.1.4.1.2620.1.1.26.3.5.0|2|11 +1.3.6.1.4.1.2620.1.1.26.4.1.0|2|22 +1.3.6.1.4.1.2620.1.1.26.4.2.0|2|5 +1.3.6.1.4.1.2620.1.1.26.4.3.0|2|31 +1.3.6.1.4.1.2620.1.1.26.4.4.0|2|21 +1.3.6.1.4.1.2620.1.1.26.4.5.0|2|0 +1.3.6.1.4.1.2620.1.1.26.4.6.0|2|25 +1.3.6.1.4.1.2620.1.1.26.4.7.0|2|10 +1.3.6.1.4.1.2620.1.1.26.5.1.0|2|0 +1.3.6.1.4.1.2620.1.1.26.5.2.0|2|6 +1.3.6.1.4.1.2620.1.1.26.6.1.0|2|18 +1.3.6.1.4.1.2620.1.1.26.6.2.0|2|26 +1.3.6.1.4.1.2620.1.1.26.6.3.0|2|16 +1.3.6.1.4.1.2620.1.1.26.8.1.0|2|21 +1.3.6.1.4.1.2620.1.1.26.8.2.0|2|2 +1.3.6.1.4.1.2620.1.1.26.8.3.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.1.1.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.1.2.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.1.3.0|2|23 +1.3.6.1.4.1.2620.1.1.26.9.1.4.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.1.5.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.1.6.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.1.7.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.1.8.0|2|18 +1.3.6.1.4.1.2620.1.1.26.9.1.9.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.1.10.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.1.11.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.1.12.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.1.13.0|2|23 +1.3.6.1.4.1.2620.1.1.26.9.1.14.0|2|12 +1.3.6.1.4.1.2620.1.1.26.9.1.15.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.1.16.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.1.17.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.1.18.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.1.19.0|2|0 +1.3.6.1.4.1.2620.1.1.26.9.1.20.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.1.21.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.1.22.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.1.23.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.1.24.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.1.25.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.1.26.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.1.27.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.1.28.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.1.29.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.1.30.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.1.31.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.1.32.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.1.33.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.1.34.0|2|25 +1.3.6.1.4.1.2620.1.1.26.9.1.35.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.1.36.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.1.37.0|4x|7a6f6d62696573206163746564207a6f6d62696573207a6f6d62696573207a6f6d626965732061637465642061637465642062757420627574 +1.3.6.1.4.1.2620.1.1.26.9.1.38.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.1.39.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.1.40.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.1.41.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.1.42.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.1.43.0|2|16 +1.3.6.1.4.1.2620.1.1.26.9.1.44.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.1.45.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.1.46.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.1.47.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.1.48.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.1.49.0|2|0 +1.3.6.1.4.1.2620.1.1.26.9.1.50.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.1.51.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.1.52.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.1.53.0|2|16 +1.3.6.1.4.1.2620.1.1.26.9.1.54.0|2|28 +1.3.6.1.4.1.2620.1.1.26.9.1.55.0|2|28 +1.3.6.1.4.1.2620.1.1.26.9.1.56.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.1.57.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.2.1.0|2|16 +1.3.6.1.4.1.2620.1.1.26.9.2.2.0|2|12 +1.3.6.1.4.1.2620.1.1.26.9.2.3.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.2.4.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.2.5.0|2|16 +1.3.6.1.4.1.2620.1.1.26.9.2.6.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.2.7.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.2.8.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.2.9.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.2.10.0|2|18 +1.3.6.1.4.1.2620.1.1.26.9.2.11.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.2.12.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.2.13.0|2|2 +1.3.6.1.4.1.2620.1.1.26.9.2.14.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.2.15.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.2.16.0|2|0 +1.3.6.1.4.1.2620.1.1.26.9.2.17.0|2|10 +1.3.6.1.4.1.2620.1.1.26.9.2.18.0|2|10 +1.3.6.1.4.1.2620.1.1.26.9.2.19.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.2.20.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.2.21.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.2.22.0|4x|746865697220666f7277617264206f78656e2064726976696e67206f78656e +1.3.6.1.4.1.2620.1.1.26.9.2.23.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.2.24.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.2.25.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.2.26.0|2|2 +1.3.6.1.4.1.2620.1.1.26.9.2.27.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.2.28.0|2|21 +1.3.6.1.4.1.2620.1.1.26.9.2.29.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.2.30.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.2.31.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.2.32.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.2.33.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.2.34.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.2.35.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.2.36.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.2.37.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.2.38.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.3.1.0|2|12 +1.3.6.1.4.1.2620.1.1.26.9.3.2.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.3.3.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.3.4.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.3.5.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.3.6.0|2|2 +1.3.6.1.4.1.2620.1.1.26.9.3.7.0|2|10 +1.3.6.1.4.1.2620.1.1.26.9.3.8.0|2|18 +1.3.6.1.4.1.2620.1.1.26.9.3.9.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.3.10.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.3.11.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.3.12.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.3.13.0|2|12 +1.3.6.1.4.1.2620.1.1.26.9.3.14.0|2|0 +1.3.6.1.4.1.2620.1.1.26.9.3.15.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.3.16.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.3.17.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.3.18.0|4x|6b657074204a61646564207468656972207a6f6d62696573207a6f6d62696573204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.1.26.9.3.19.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.4.1.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.4.2.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.4.3.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.4.4.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.4.5.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.4.6.0|2|28 +1.3.6.1.4.1.2620.1.1.26.9.4.7.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.4.8.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.4.9.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.4.10.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.4.11.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.4.12.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.4.13.0|2|12 +1.3.6.1.4.1.2620.1.1.26.9.4.14.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.4.15.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.4.16.0|2|19 +1.3.6.1.4.1.2620.1.1.26.9.4.17.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.4.18.0|4x|6f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.26.9.4.19.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.5.1.0|2|10 +1.3.6.1.4.1.2620.1.1.26.9.5.2.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.5.3.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.5.4.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.5.5.0|4x|666f7277617264206f78656e2064726976696e672064726976696e6720746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.1.26.9.5.6.0|2|21 +1.3.6.1.4.1.2620.1.1.26.9.6.1.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.6.2.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.6.3.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.6.4.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.6.5.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.6.6.0|2|2 +1.3.6.1.4.1.2620.1.1.26.9.6.7.0|2|28 +1.3.6.1.4.1.2620.1.1.26.9.6.8.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.6.9.0|2|18 +1.3.6.1.4.1.2620.1.1.26.9.6.10.0|2|3 +1.3.6.1.4.1.2620.1.1.26.9.6.11.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.6.12.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.6.13.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.6.14.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.6.15.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.6.16.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.6.17.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.6.18.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.6.19.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.6.20.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.6.21.0|2|28 +1.3.6.1.4.1.2620.1.1.26.9.6.22.0|2|19 +1.3.6.1.4.1.2620.1.1.26.9.6.23.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.6.24.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.6.25.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.6.26.0|4x|6b65707420717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.1.26.9.6.27.0|2|0 +1.3.6.1.4.1.2620.1.1.26.9.6.28.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.6.29.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.6.30.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.6.31.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.6.32.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.6.33.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.6.34.0|2|16 +1.3.6.1.4.1.2620.1.1.26.9.6.35.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.6.36.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.6.37.0|2|19 +1.3.6.1.4.1.2620.1.1.26.9.6.38.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.6.39.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.6.40.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.6.41.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.6.42.0|2|31 +1.3.6.1.4.1.2620.1.1.26.9.7.1.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.7.2.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.7.3.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.7.4.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.7.5.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.7.6.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.7.7.0|2|2 +1.3.6.1.4.1.2620.1.1.26.9.7.8.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.7.9.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.7.10.0|2|10 +1.3.6.1.4.1.2620.1.1.26.9.7.11.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.7.12.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.7.13.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.7.14.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.7.15.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.7.16.0|2|18 +1.3.6.1.4.1.2620.1.1.26.9.7.17.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.7.18.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.7.19.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.7.20.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.7.21.0|2|11 +1.3.6.1.4.1.2620.1.1.26.9.7.22.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.7.23.0|2|29 +1.3.6.1.4.1.2620.1.1.26.9.7.24.0|2|22 +1.3.6.1.4.1.2620.1.1.26.9.7.25.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.7.26.0|4x|4a61646564206b657074206163746564 +1.3.6.1.4.1.2620.1.1.26.9.7.27.0|2|15 +1.3.6.1.4.1.2620.1.1.26.9.7.28.0|2|24 +1.3.6.1.4.1.2620.1.1.26.9.7.29.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.7.30.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.7.31.0|2|7 +1.3.6.1.4.1.2620.1.1.26.9.7.32.0|2|18 +1.3.6.1.4.1.2620.1.1.26.9.7.33.0|2|13 +1.3.6.1.4.1.2620.1.1.26.9.7.34.0|2|14 +1.3.6.1.4.1.2620.1.1.26.9.7.35.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.7.36.0|2|23 +1.3.6.1.4.1.2620.1.1.26.9.7.37.0|2|1 +1.3.6.1.4.1.2620.1.1.26.9.7.38.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.7.39.0|2|17 +1.3.6.1.4.1.2620.1.1.26.9.7.40.0|2|30 +1.3.6.1.4.1.2620.1.1.26.9.7.41.0|2|25 +1.3.6.1.4.1.2620.1.1.26.9.7.42.0|2|23 +1.3.6.1.4.1.2620.1.1.26.9.10.1.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.10.2.0|2|5 +1.3.6.1.4.1.2620.1.1.26.9.10.3.0|2|26 +1.3.6.1.4.1.2620.1.1.26.9.10.4.0|2|27 +1.3.6.1.4.1.2620.1.1.26.9.10.5.0|2|19 +1.3.6.1.4.1.2620.1.1.26.9.10.6.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.10.7.0|2|20 +1.3.6.1.4.1.2620.1.1.26.9.10.8.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.10.9.0|2|9 +1.3.6.1.4.1.2620.1.1.26.9.10.10.0|2|21 +1.3.6.1.4.1.2620.1.1.26.9.10.11.0|2|8 +1.3.6.1.4.1.2620.1.1.26.9.10.12.0|2|4 +1.3.6.1.4.1.2620.1.1.26.9.10.13.0|2|19 +1.3.6.1.4.1.2620.1.1.26.9.10.14.0|2|6 +1.3.6.1.4.1.2620.1.1.26.9.10.15.0|2|4 +1.3.6.1.4.1.2620.1.1.26.11.1.0|2|4 +1.3.6.1.4.1.2620.1.1.26.11.2.0|2|20 +1.3.6.1.4.1.2620.1.1.26.11.3.0|2|24 +1.3.6.1.4.1.2620.1.1.26.11.4.0|2|30 +1.3.6.1.4.1.2620.1.1.26.11.5.0|2|10 +1.3.6.1.4.1.2620.1.1.26.11.6.0|2|2 +1.3.6.1.4.1.2620.1.1.26.12.1.0|4x|7468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.26.12.2.0|4x|666f7277617264206163746564206b657074207468656972206f78656e206b657074 +1.3.6.1.4.1.2620.1.1.26.12.3.0|4x|62757420717561696e746c79206f78656e2064726976696e6720666f7277617264206f78656e207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.1.26.12.4.0|2|18 +1.3.6.1.4.1.2620.1.1.26.12.5.0|2|9 +1.3.6.1.4.1.2620.1.1.26.12.6.0|4x|7a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.1.26.12.7.0|2|9 +1.3.6.1.4.1.2620.1.1.26.12.8.0|2|7 +1.3.6.1.4.1.2620.1.1.26.12.9.0|4x|4a61646564206163746564206f78656e2061637465642064726976696e672064726976696e6720627574 +1.3.6.1.4.1.2620.1.1.26.12.10.0|2|5 +1.3.6.1.4.1.2620.1.1.26.12.11.0|4x|6f78656e2064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.1.26.12.12.0|2|20 +1.3.6.1.4.1.2620.1.1.26.12.13.0|4x|7a6f6d626965732062757420627574206b6570742064726976696e67206f78656e204a61646564 +1.3.6.1.4.1.2620.1.1.26.12.14.0|2|12 +1.3.6.1.4.1.2620.1.1.26.12.15.0|4x|64726976696e6720717561696e746c7920717561696e746c79206163746564206f78656e +1.3.6.1.4.1.2620.1.1.26.12.16.0|2|12 +1.3.6.1.4.1.2620.1.1.26.12.17.0|2|1 +1.3.6.1.4.1.2620.1.1.26.12.18.0|4x|616374656420717561696e746c792064726976696e672064726976696e6720746865697220616374656420666f7277617264 +1.3.6.1.4.1.2620.1.1.26.12.19.0|2|28 +1.3.6.1.4.1.2620.1.1.26.12.20.0|2|24 +1.3.6.1.4.1.2620.1.1.26.12.21.0|2|3 +1.3.6.1.4.1.2620.1.1.26.12.22.0|2|0 +1.3.6.1.4.1.2620.1.1.27.1.1.10195|66|10195 +1.3.6.1.4.1.2620.1.1.27.1.1.14420|66|14420 +1.3.6.1.4.1.2620.1.1.27.1.1.19605|66|19605 +1.3.6.1.4.1.2620.1.1.27.1.1.24119|66|24119 +1.3.6.1.4.1.2620.1.1.27.1.1.28877|66|28877 +1.3.6.1.4.1.2620.1.1.27.1.1.32113|66|32113 +1.3.6.1.4.1.2620.1.1.27.1.1.33158|66|33158 +1.3.6.1.4.1.2620.1.1.27.1.1.36483|66|36483 +1.3.6.1.4.1.2620.1.1.27.1.1.46390|66|46390 +1.3.6.1.4.1.2620.1.1.27.1.1.61861|66|61861 +1.3.6.1.4.1.2620.1.1.27.1.2.10195|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.1.27.1.2.14420|4|forward +1.3.6.1.4.1.2620.1.1.27.1.2.19605|4|forward +1.3.6.1.4.1.2620.1.1.27.1.2.24119|4x|717561696e746c7920666f727761726420666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.2.28877|4x|4a6164656420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.2.32113|4x|717561696e746c79206f78656e20746865697220666f72776172642062757420717561696e746c792062757420627574 +1.3.6.1.4.1.2620.1.1.27.1.2.33158|4x|4a6164656420616374656420717561696e746c792064726976696e6720717561696e746c79206163746564207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.1.27.1.2.36483|4x|7468656972207a6f6d6269657320717561696e746c7920616374656420666f72776172642074686569722064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.1.27.1.2.46390|4x|717561696e746c79206163746564206b657074204a6164656420616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.1.27.1.2.61861|4|Jaded +1.3.6.1.4.1.2620.1.1.27.1.3.10195|2|22 +1.3.6.1.4.1.2620.1.1.27.1.3.14420|2|14 +1.3.6.1.4.1.2620.1.1.27.1.3.19605|2|31 +1.3.6.1.4.1.2620.1.1.27.1.3.24119|2|15 +1.3.6.1.4.1.2620.1.1.27.1.3.28877|2|17 +1.3.6.1.4.1.2620.1.1.27.1.3.32113|2|2 +1.3.6.1.4.1.2620.1.1.27.1.3.33158|2|10 +1.3.6.1.4.1.2620.1.1.27.1.3.36483|2|17 +1.3.6.1.4.1.2620.1.1.27.1.3.46390|2|10 +1.3.6.1.4.1.2620.1.1.27.1.3.61861|2|25 +1.3.6.1.4.1.2620.1.1.27.1.4.10195|2|4 +1.3.6.1.4.1.2620.1.1.27.1.4.14420|2|25 +1.3.6.1.4.1.2620.1.1.27.1.4.19605|2|11 +1.3.6.1.4.1.2620.1.1.27.1.4.24119|2|8 +1.3.6.1.4.1.2620.1.1.27.1.4.28877|2|25 +1.3.6.1.4.1.2620.1.1.27.1.4.32113|2|19 +1.3.6.1.4.1.2620.1.1.27.1.4.33158|2|9 +1.3.6.1.4.1.2620.1.1.27.1.4.36483|2|6 +1.3.6.1.4.1.2620.1.1.27.1.4.46390|2|25 +1.3.6.1.4.1.2620.1.1.27.1.4.61861|2|22 +1.3.6.1.4.1.2620.1.1.27.1.5.10195|2|13 +1.3.6.1.4.1.2620.1.1.27.1.5.14420|2|4 +1.3.6.1.4.1.2620.1.1.27.1.5.19605|2|22 +1.3.6.1.4.1.2620.1.1.27.1.5.24119|2|17 +1.3.6.1.4.1.2620.1.1.27.1.5.28877|2|27 +1.3.6.1.4.1.2620.1.1.27.1.5.32113|2|27 +1.3.6.1.4.1.2620.1.1.27.1.5.33158|2|12 +1.3.6.1.4.1.2620.1.1.27.1.5.36483|2|25 +1.3.6.1.4.1.2620.1.1.27.1.5.46390|2|23 +1.3.6.1.4.1.2620.1.1.27.1.5.61861|2|1 +1.3.6.1.4.1.2620.1.1.27.1.6.10195|4x|4a6164656420616374656420717561696e746c7920746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.1.27.1.6.14420|4x|7a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.6.19605|4x|717561696e746c792064726976696e6720717561696e746c79207a6f6d62696573206b657074204a61646564206b657074206f78656e +1.3.6.1.4.1.2620.1.1.27.1.6.24119|4x|6f78656e204a6164656420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.1.27.1.6.28877|4x|6b657074206f78656e20666f72776172642064726976696e672064726976696e6720717561696e746c79204a616465642064726976696e67206163746564 +1.3.6.1.4.1.2620.1.1.27.1.6.32113|4x|4a6164656420666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.1.27.1.6.33158|4|quaintly +1.3.6.1.4.1.2620.1.1.27.1.6.36483|4x|62757420627574206b6570742064726976696e6720627574206163746564 +1.3.6.1.4.1.2620.1.1.27.1.6.46390|4x|627574207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.1.27.1.6.61861|4x|4a6164656420627574 +1.3.6.1.4.1.2620.1.1.27.1.7.10195|2|9 +1.3.6.1.4.1.2620.1.1.27.1.7.14420|2|19 +1.3.6.1.4.1.2620.1.1.27.1.7.19605|2|19 +1.3.6.1.4.1.2620.1.1.27.1.7.24119|2|8 +1.3.6.1.4.1.2620.1.1.27.1.7.28877|2|0 +1.3.6.1.4.1.2620.1.1.27.1.7.32113|2|15 +1.3.6.1.4.1.2620.1.1.27.1.7.33158|2|2 +1.3.6.1.4.1.2620.1.1.27.1.7.36483|2|15 +1.3.6.1.4.1.2620.1.1.27.1.7.46390|2|3 +1.3.6.1.4.1.2620.1.1.27.1.7.61861|2|2 +1.3.6.1.4.1.2620.1.1.27.1.8.10195|2|10 +1.3.6.1.4.1.2620.1.1.27.1.8.14420|2|15 +1.3.6.1.4.1.2620.1.1.27.1.8.19605|2|15 +1.3.6.1.4.1.2620.1.1.27.1.8.24119|2|13 +1.3.6.1.4.1.2620.1.1.27.1.8.28877|2|15 +1.3.6.1.4.1.2620.1.1.27.1.8.32113|2|24 +1.3.6.1.4.1.2620.1.1.27.1.8.33158|2|20 +1.3.6.1.4.1.2620.1.1.27.1.8.36483|2|15 +1.3.6.1.4.1.2620.1.1.27.1.8.46390|2|29 +1.3.6.1.4.1.2620.1.1.27.1.8.61861|2|3 +1.3.6.1.4.1.2620.1.1.27.1.9.10195|4x|666f727761726420627574207a6f6d62696573206f78656e20717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.1.27.1.9.14420|4x|6f78656e207a6f6d62696573207a6f6d6269657320717561696e746c79204a6164656420616374656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.9.19605|4x|717561696e746c7920666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.9.24119|4x|616374656420666f72776172642064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.1.27.1.9.28877|4x|717561696e746c7920746865697220666f7277617264206163746564 +1.3.6.1.4.1.2620.1.1.27.1.9.32113|4|zombies +1.3.6.1.4.1.2620.1.1.27.1.9.33158|4x|6f78656e206b65707420717561696e746c79206f78656e204a61646564207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.1.27.1.9.36483|4x|64726976696e6720717561696e746c79204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.1.27.1.9.46390|4x|6b65707420666f7277617264206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.9.61861|4x|4a61646564206b657074204a61646564206b65707420666f727761726420666f7277617264206163746564 +1.3.6.1.4.1.2620.1.1.27.1.10.10195|4x|7468656972204a61646564 +1.3.6.1.4.1.2620.1.1.27.1.10.14420|4x|6b657074206163746564 +1.3.6.1.4.1.2620.1.1.27.1.10.19605|4|zombies +1.3.6.1.4.1.2620.1.1.27.1.10.24119|4x|6f78656e20616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.1.27.1.10.28877|4x|717561696e746c792061637465642064726976696e67204a6164656420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.1.27.1.10.32113|4|acted +1.3.6.1.4.1.2620.1.1.27.1.10.33158|4x|666f7277617264206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.1.27.1.10.36483|4|their +1.3.6.1.4.1.2620.1.1.27.1.10.46390|4x|6b657074204a61646564 +1.3.6.1.4.1.2620.1.1.27.1.10.61861|4x|717561696e746c79204a616465642064726976696e67206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.11.10195|4x|6b657074206b657074206f78656e +1.3.6.1.4.1.2620.1.1.27.1.11.14420|4x|666f72776172642074686569722061637465642064726976696e6720717561696e746c7920627574 +1.3.6.1.4.1.2620.1.1.27.1.11.19605|4x|64726976696e672064726976696e6720666f727761726420666f727761726420717561696e746c7920666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.27.1.11.24119|4x|616374656420666f7277617264207468656972206f78656e2064726976696e67206b657074206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.1.27.1.11.28877|4x|666f7277617264206163746564 +1.3.6.1.4.1.2620.1.1.27.1.11.32113|4x|666f727761726420616374656420717561696e746c79206b65707420627574206f78656e206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.1.27.1.11.33158|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.2620.1.1.27.1.11.36483|4|their +1.3.6.1.4.1.2620.1.1.27.1.11.46390|4|acted +1.3.6.1.4.1.2620.1.1.27.1.11.61861|4x|717561696e746c792064726976696e6720616374656420666f7277617264204a61646564206b65707420746865697220717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.1.30.1.0|2|25 +1.3.6.1.4.1.2620.1.1.30.2.0|4x|627574204a616465642064726976696e6720717561696e746c7920666f727761726420666f7277617264206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.30.3.1.1.19667|66|19667 +1.3.6.1.4.1.2620.1.1.30.3.1.1.25767|66|25767 +1.3.6.1.4.1.2620.1.1.30.3.1.1.30380|66|30380 +1.3.6.1.4.1.2620.1.1.30.3.1.1.40339|66|40339 +1.3.6.1.4.1.2620.1.1.30.3.1.1.42496|66|42496 +1.3.6.1.4.1.2620.1.1.30.3.1.1.46701|66|46701 +1.3.6.1.4.1.2620.1.1.30.3.1.1.55147|66|55147 +1.3.6.1.4.1.2620.1.1.30.3.1.1.57403|66|57403 +1.3.6.1.4.1.2620.1.1.30.3.1.1.59930|66|59930 +1.3.6.1.4.1.2620.1.1.30.3.1.1.64934|66|64934 +1.3.6.1.4.1.2620.1.1.30.3.1.2.19667|4x|4a61646564206f78656e206f78656e207a6f6d6269657320746865697220616374656420666f7277617264204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.1.30.3.1.2.25767|4x|6b65707420666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.1.30.3.1.2.30380|4x|717561696e746c79206163746564207a6f6d62696573207a6f6d626965732064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.1.30.3.1.2.40339|4x|7468656972207468656972207468656972206f78656e20717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.1.30.3.1.2.42496|4|acted +1.3.6.1.4.1.2620.1.1.30.3.1.2.46701|4x|666f7277617264206163746564207468656972 +1.3.6.1.4.1.2620.1.1.30.3.1.2.55147|4x|4a61646564206163746564206b657074 +1.3.6.1.4.1.2620.1.1.30.3.1.2.57403|4x|6163746564204a61646564204a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.1.30.3.1.2.59930|4x|64726976696e672064726976696e67204a61646564206f78656e20627574204a616465642064726976696e67207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.30.3.1.2.64934|4x|61637465642062757420717561696e746c79 +1.3.6.1.4.1.2620.1.1.30.3.1.3.19667|2|17 +1.3.6.1.4.1.2620.1.1.30.3.1.3.25767|2|20 +1.3.6.1.4.1.2620.1.1.30.3.1.3.30380|2|5 +1.3.6.1.4.1.2620.1.1.30.3.1.3.40339|2|13 +1.3.6.1.4.1.2620.1.1.30.3.1.3.42496|2|18 +1.3.6.1.4.1.2620.1.1.30.3.1.3.46701|2|26 +1.3.6.1.4.1.2620.1.1.30.3.1.3.55147|2|30 +1.3.6.1.4.1.2620.1.1.30.3.1.3.57403|2|6 +1.3.6.1.4.1.2620.1.1.30.3.1.3.59930|2|23 +1.3.6.1.4.1.2620.1.1.30.3.1.3.64934|2|27 +1.3.6.1.4.1.2620.1.1.30.3.1.4.19667|4x|6b65707420717561696e746c7920717561696e746c7920616374656420717561696e746c79206b657074206b657074207a6f6d626965732064726976696e67 +1.3.6.1.4.1.2620.1.1.30.3.1.4.25767|4x|6f78656e206b657074 +1.3.6.1.4.1.2620.1.1.30.3.1.4.30380|4x|6f78656e20627574204a61646564206b65707420717561696e746c7920717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.1.30.3.1.4.40339|4x|64726976696e6720717561696e746c7920627574207a6f6d6269657320666f727761726420666f7277617264204a61646564204a61646564 +1.3.6.1.4.1.2620.1.1.30.3.1.4.42496|4x|717561696e746c79207a6f6d6269657320717561696e746c792064726976696e6720627574 +1.3.6.1.4.1.2620.1.1.30.3.1.4.46701|4x|64726976696e67207468656972204a6164656420616374656420746865697220717561696e746c79204a616465642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.1.30.3.1.4.55147|4|forward +1.3.6.1.4.1.2620.1.1.30.3.1.4.57403|4x|666f727761726420666f7277617264207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.1.30.3.1.4.59930|4x|6b657074204a616465642062757420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.1.30.3.1.4.64934|4x|746865697220616374656420666f727761726420717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.1.30.4.0|4x|7468656972206b657074207468656972206163746564 +1.3.6.1.4.1.2620.1.1.30.5.0|2|17 +1.3.6.1.4.1.2620.1.2.1.0|4x|4a61646564206b657074204a616465642064726976696e6720666f7277617264206b6570742064726976696e67204a61646564206163746564 +1.3.6.1.4.1.2620.1.2.2.0|2|5 +1.3.6.1.4.1.2620.1.2.3.0|2|21 +1.3.6.1.4.1.2620.1.2.4.1.1.0|4x|717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.4.1.2.0|4x|6f78656e20666f72776172642062757420627574204a61646564204a6164656420717561696e746c7920627574 +1.3.6.1.4.1.2620.1.2.4.2.1.0|4x|62757420666f7277617264206163746564207468656972 +1.3.6.1.4.1.2620.1.2.4.2.2.0|4x|4a61646564206f78656e207468656972 +1.3.6.1.4.1.2620.1.2.4.2.3.0|4x|666f72776172642064726976696e6720717561696e746c7920717561696e746c7920627574207a6f6d626965732061637465642064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.2.4.2.4.0|4x|6163746564206b65707420627574206275742062757420717561696e746c7920717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.2.5.2.1.0|4x|7a6f6d62696573207a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.2620.1.2.5.2.2.0|4|kept +1.3.6.1.4.1.2620.1.2.5.2.3.0|4x|7a6f6d6269657320717561696e746c7920627574207468656972204a61646564206b657074 +1.3.6.1.4.1.2620.1.2.5.2.4.0|4x|6f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.2.5.2.5.0|4x|717561696e746c79206275742074686569722064726976696e6720616374656420616374656420666f7277617264 +1.3.6.1.4.1.2620.1.2.5.2.6.0|4x|616374656420627574207468656972204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.2.5.2.7.0|4x|7a6f6d6269657320666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.2.5.2.8.0|4x|6f78656e204a6164656420717561696e746c79206f78656e206f78656e20627574206b657074206f78656e207468656972 +1.3.6.1.4.1.2620.1.2.5.2.9.0|4x|7468656972206f78656e206f78656e204a6164656420616374656420717561696e746c79207a6f6d62696573206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.2.5.2.10.0|4x|64726976696e67206f78656e207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.2.5.2.11.0|4x|6275742064726976696e67 +1.3.6.1.4.1.2620.1.2.5.2.12.0|4x|6163746564206275742064726976696e67206163746564206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.5.3.1.0|4x|746865697220666f7277617264206163746564204a61646564207a6f6d62696573206b657074204a61646564206f78656e +1.3.6.1.4.1.2620.1.2.5.3.2.0|4x|6b657074206f78656e207468656972206b657074207a6f6d62696573204a616465642064726976696e6720746865697220666f7277617264 +1.3.6.1.4.1.2620.1.2.5.3.3.0|4x|666f72776172642064726976696e6720717561696e746c7920717561696e746c79206b657074206f78656e20666f7277617264206f78656e206b657074 +1.3.6.1.4.1.2620.1.2.5.3.4.0|4|but +1.3.6.1.4.1.2620.1.2.5.3.5.0|4x|666f727761726420616374656420717561696e746c7920666f727761726420666f727761726420666f7277617264206163746564206b657074 +1.3.6.1.4.1.2620.1.2.5.3.6.0|4x|7a6f6d62696573206f78656e2074686569722062757420666f7277617264206b657074207468656972 +1.3.6.1.4.1.2620.1.2.5.3.7.0|4x|7468656972206b657074206b657074 +1.3.6.1.4.1.2620.1.2.5.4.1.0|4|but +1.3.6.1.4.1.2620.1.2.5.4.2.0|4x|746865697220627574206163746564206b65707420666f72776172642064726976696e672064726976696e6720717561696e746c7920627574 +1.3.6.1.4.1.2620.1.2.5.4.3.0|4x|666f727761726420616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.2.5.4.4.0|4x|7a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.2.5.4.5.0|4x|746865697220666f7277617264207468656972207468656972204a61646564 +1.3.6.1.4.1.2620.1.2.5.4.6.0|4x|6b65707420627574207468656972204a61646564206163746564206163746564 +1.3.6.1.4.1.2620.1.2.5.4.7.0|4x|627574207a6f6d62696573206b6570742064726976696e6720717561696e746c79207a6f6d6269657320717561696e746c792064726976696e6720627574 +1.3.6.1.4.1.2620.1.2.5.4.8.0|4x|6275742062757420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.5.4.9.0|4|quaintly +1.3.6.1.4.1.2620.1.2.5.4.10.0|4x|6f78656e2064726976696e6720616374656420616374656420666f7277617264204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.2.5.4.11.0|4x|62757420666f7277617264206f78656e20666f727761726420627574204a61646564 +1.3.6.1.4.1.2620.1.2.5.4.12.0|4x|6b65707420666f7277617264 +1.3.6.1.4.1.2620.1.2.5.4.13.0|4x|6f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.2.5.4.14.0|4x|666f727761726420717561696e746c7920627574206f78656e20717561696e746c79206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.5.4.15.0|4x|6f78656e206163746564207a6f6d62696573206f78656e20627574206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.5.4.16.0|4x|6f78656e207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.5.4.17.0|4x|7a6f6d62696573206b657074206b6570742062757420666f7277617264 +1.3.6.1.4.1.2620.1.2.5.4.18.0|4x|7468656972206b65707420627574204a61646564 +1.3.6.1.4.1.2620.1.2.5.4.19.0|4x|4a61646564204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.2.5.4.20.0|4x|6163746564206275742064726976696e67204a61646564207468656972206f78656e207468656972204a61646564 +1.3.6.1.4.1.2620.1.2.6.1.1.0|2|29 +1.3.6.1.4.1.2620.1.2.6.1.2.0|2|2 +1.3.6.1.4.1.2620.1.2.6.1.3.0|2|3 +1.3.6.1.4.1.2620.1.2.6.1.4.0|2|8 +1.3.6.1.4.1.2620.1.2.6.2.1.0|2|31 +1.3.6.1.4.1.2620.1.2.6.2.2.0|2|15 +1.3.6.1.4.1.2620.1.2.6.2.3.0|2|1 +1.3.6.1.4.1.2620.1.2.6.2.4.0|2|18 +1.3.6.1.4.1.2620.1.2.8.1.1.0|4x|616374656420666f727761726420717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.2.8.1.2.0|4x|7a6f6d626965732064726976696e67206b657074 +1.3.6.1.4.1.2620.1.2.8.1.3.0|2|27 +1.3.6.1.4.1.2620.1.2.8.1.4.0|2|10 +1.3.6.1.4.1.2620.1.2.8.2.1.0|4x|746865697220616374656420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.2.8.2.2.0|4x|6163746564207468656972207468656972206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.2.8.2.3.0|4x|666f7277617264204a61646564204a61646564 +1.3.6.1.4.1.2620.1.2.8.2.4.0|4x|64726976696e6720666f72776172642074686569722062757420717561696e746c7920717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.2.8.2.5.0|4x|7a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.2.8.2.6.0|4x|627574206f78656e206b657074 +1.3.6.1.4.1.2620.1.2.8.2.7.0|4x|7468656972207468656972206f78656e20666f7277617264206f78656e20627574206b657074 +1.3.6.1.4.1.2620.1.2.8.2.8.0|4x|7a6f6d62696573206b657074206163746564206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.9.1.1.0|4x|6f78656e206163746564207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.2620.1.2.9.1.2.0|4x|6163746564207a6f6d626965732064726976696e672064726976696e67204a6164656420717561696e746c79206163746564204a61646564 +1.3.6.1.4.1.2620.1.2.9.1.3.0|4|acted +1.3.6.1.4.1.2620.1.2.9.1.4.0|4x|6f78656e206f78656e207a6f6d626965732064726976696e6720717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.2.9.1.5.0|4x|746865697220717561696e746c792064726976696e6720666f727761726420666f7277617264206275742064726976696e6720666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.2.9.1.6.0|4x|616374656420717561696e746c792061637465642064726976696e672064726976696e67206f78656e20717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.2.9.1.7.0|4x|7a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.2.9.1.8.0|4x|616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.2.9.1.9.0|4x|4a6164656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.9.1.10.0|4|forward +1.3.6.1.4.1.2620.1.2.9.1.11.0|4x|6163746564206b657074 +1.3.6.1.4.1.2620.1.2.9.1.12.0|4|forward +1.3.6.1.4.1.2620.1.2.9.2.1.0|4x|4a6164656420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.2.9.2.2.0|4x|6163746564206f78656e20666f7277617264206b65707420616374656420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.2.9.2.3.0|4x|4a61646564207468656972204a61646564206163746564 +1.3.6.1.4.1.2620.1.2.10.1.1.0|2|24 +1.3.6.1.4.1.2620.1.2.10.1.2.0|4x|6163746564204a616465642064726976696e672061637465642064726976696e67206f78656e206163746564 +1.3.6.1.4.1.2620.1.2.10.1.3.0|4x|4a6164656420746865697220627574206b65707420717561696e746c792062757420666f7277617264206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.2.10.1.4.0|4x|4a6164656420717561696e746c7920627574206b657074204a61646564207468656972207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.2.10.1.5.0|4x|74686569722061637465642062757420666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.2.10.1.6.0|4x|627574206b657074204a61646564 +1.3.6.1.4.1.2620.1.2.10.1.7.0|4x|7a6f6d62696573206163746564206f78656e206163746564207a6f6d62696573206f78656e20666f72776172642064726976696e67206f78656e +1.3.6.1.4.1.2620.1.3.1.0|4x|4a6164656420616374656420746865697220666f72776172642074686569722062757420627574 +1.3.6.1.4.1.2620.1.3.2.0|2|29 +1.3.6.1.4.1.2620.1.3.3.0|2|21 +1.3.6.1.4.1.2620.1.3.4.0|4x|666f727761726420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.3.5.0|2|7 +1.3.6.1.4.1.2620.1.3.6.0|4x|4a61646564206b65707420627574204a6164656420717561696e746c79204a61646564206f78656e +1.3.6.1.4.1.2620.1.3.7.0|4|acted +1.3.6.1.4.1.2620.1.3.8.0|4x|6f78656e20666f7277617264206275742062757420666f727761726420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.3.9.1.1.6833|66|6833 +1.3.6.1.4.1.2620.1.3.9.1.1.9617|66|9617 +1.3.6.1.4.1.2620.1.3.9.1.1.12777|66|12777 +1.3.6.1.4.1.2620.1.3.9.1.1.21037|66|21037 +1.3.6.1.4.1.2620.1.3.9.1.1.23145|66|23145 +1.3.6.1.4.1.2620.1.3.9.1.1.27759|66|27759 +1.3.6.1.4.1.2620.1.3.9.1.1.40201|66|40201 +1.3.6.1.4.1.2620.1.3.9.1.1.54989|66|54989 +1.3.6.1.4.1.2620.1.3.9.1.1.55318|66|55318 +1.3.6.1.4.1.2620.1.3.9.1.1.57712|66|57712 +1.3.6.1.4.1.2620.1.3.9.1.2.6833|4x|7a6f6d6269657320627574204a616465642062757420666f7277617264204a61646564206f78656e2064726976696e67206b657074 +1.3.6.1.4.1.2620.1.3.9.1.2.9617|4|acted +1.3.6.1.4.1.2620.1.3.9.1.2.12777|4x|627574204a61646564204a6164656420666f727761726420627574206163746564204a61646564 +1.3.6.1.4.1.2620.1.3.9.1.2.21037|4x|62757420666f72776172642064726976696e67204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.3.9.1.2.23145|4x|616374656420717561696e746c79206163746564204a6164656420717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.3.9.1.2.27759|4x|627574206f78656e206275742064726976696e672064726976696e6720666f72776172642061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.3.9.1.2.40201|4x|666f7277617264207a6f6d62696573206f78656e2074686569722064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.3.9.1.2.54989|4|Jaded +1.3.6.1.4.1.2620.1.3.9.1.2.55318|4x|4a6164656420746865697220666f7277617264204a61646564206163746564204a61646564206163746564 +1.3.6.1.4.1.2620.1.3.9.1.2.57712|4x|627574206b65707420717561696e746c7920717561696e746c7920627574 +1.3.6.1.4.1.2620.1.3.9.1.3.6833|4x|7468656972206f78656e204a6164656420627574207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.3.9.1.3.9617|4x|6b657074206f78656e204a6164656420666f727761726420616374656420627574207468656972204a61646564207468656972 +1.3.6.1.4.1.2620.1.3.9.1.3.12777|4x|64726976696e67206b65707420627574206f78656e206f78656e207468656972207468656972 +1.3.6.1.4.1.2620.1.3.9.1.3.21037|4x|6b6570742074686569722074686569722064726976696e67 +1.3.6.1.4.1.2620.1.3.9.1.3.23145|4x|7a6f6d6269657320717561696e746c7920627574 +1.3.6.1.4.1.2620.1.3.9.1.3.27759|4x|74686569722062757420746865697220666f72776172642062757420616374656420627574 +1.3.6.1.4.1.2620.1.3.9.1.3.40201|4x|6f78656e2062757420717561696e746c792064726976696e67206f78656e206b657074 +1.3.6.1.4.1.2620.1.3.9.1.3.54989|4x|627574206f78656e204a61646564207468656972204a61646564206f78656e20627574 +1.3.6.1.4.1.2620.1.3.9.1.3.55318|4|Jaded +1.3.6.1.4.1.2620.1.3.9.1.3.57712|4x|62757420666f727761726420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.3.9.1.4.6833|2|1 +1.3.6.1.4.1.2620.1.3.9.1.4.9617|2|7 +1.3.6.1.4.1.2620.1.3.9.1.4.12777|2|12 +1.3.6.1.4.1.2620.1.3.9.1.4.21037|2|30 +1.3.6.1.4.1.2620.1.3.9.1.4.23145|2|6 +1.3.6.1.4.1.2620.1.3.9.1.4.27759|2|3 +1.3.6.1.4.1.2620.1.3.9.1.4.40201|2|7 +1.3.6.1.4.1.2620.1.3.9.1.4.54989|2|0 +1.3.6.1.4.1.2620.1.3.9.1.4.55318|2|21 +1.3.6.1.4.1.2620.1.3.9.1.4.57712|2|18 +1.3.6.1.4.1.2620.1.3.9.1.5.6833|2|24 +1.3.6.1.4.1.2620.1.3.9.1.5.9617|2|30 +1.3.6.1.4.1.2620.1.3.9.1.5.12777|2|5 +1.3.6.1.4.1.2620.1.3.9.1.5.21037|2|19 +1.3.6.1.4.1.2620.1.3.9.1.5.23145|2|13 +1.3.6.1.4.1.2620.1.3.9.1.5.27759|2|28 +1.3.6.1.4.1.2620.1.3.9.1.5.40201|2|8 +1.3.6.1.4.1.2620.1.3.9.1.5.54989|2|17 +1.3.6.1.4.1.2620.1.3.9.1.5.55318|2|28 +1.3.6.1.4.1.2620.1.3.9.1.5.57712|2|6 +1.3.6.1.4.1.2620.1.3.9.1.6.6833|2|5 +1.3.6.1.4.1.2620.1.3.9.1.6.9617|2|0 +1.3.6.1.4.1.2620.1.3.9.1.6.12777|2|27 +1.3.6.1.4.1.2620.1.3.9.1.6.21037|2|1 +1.3.6.1.4.1.2620.1.3.9.1.6.23145|2|1 +1.3.6.1.4.1.2620.1.3.9.1.6.27759|2|30 +1.3.6.1.4.1.2620.1.3.9.1.6.40201|2|12 +1.3.6.1.4.1.2620.1.3.9.1.6.54989|2|24 +1.3.6.1.4.1.2620.1.3.9.1.6.55318|2|28 +1.3.6.1.4.1.2620.1.3.9.1.6.57712|2|22 +1.3.6.1.4.1.2620.1.3.9.1.7.6833|2|15 +1.3.6.1.4.1.2620.1.3.9.1.7.9617|2|29 +1.3.6.1.4.1.2620.1.3.9.1.7.12777|2|21 +1.3.6.1.4.1.2620.1.3.9.1.7.21037|2|14 +1.3.6.1.4.1.2620.1.3.9.1.7.23145|2|3 +1.3.6.1.4.1.2620.1.3.9.1.7.27759|2|18 +1.3.6.1.4.1.2620.1.3.9.1.7.40201|2|12 +1.3.6.1.4.1.2620.1.3.9.1.7.54989|2|2 +1.3.6.1.4.1.2620.1.3.9.1.7.55318|2|17 +1.3.6.1.4.1.2620.1.3.9.1.7.57712|2|22 +1.3.6.1.4.1.2620.1.3.9.1.8.6833|2|26 +1.3.6.1.4.1.2620.1.3.9.1.8.9617|2|30 +1.3.6.1.4.1.2620.1.3.9.1.8.12777|2|30 +1.3.6.1.4.1.2620.1.3.9.1.8.21037|2|9 +1.3.6.1.4.1.2620.1.3.9.1.8.23145|2|21 +1.3.6.1.4.1.2620.1.3.9.1.8.27759|2|23 +1.3.6.1.4.1.2620.1.3.9.1.8.40201|2|18 +1.3.6.1.4.1.2620.1.3.9.1.8.54989|2|6 +1.3.6.1.4.1.2620.1.3.9.1.8.55318|2|22 +1.3.6.1.4.1.2620.1.3.9.1.8.57712|2|4 +1.3.6.1.4.1.2620.1.3.9.1.9.6833|2|25 +1.3.6.1.4.1.2620.1.3.9.1.9.9617|2|17 +1.3.6.1.4.1.2620.1.3.9.1.9.12777|2|14 +1.3.6.1.4.1.2620.1.3.9.1.9.21037|2|20 +1.3.6.1.4.1.2620.1.3.9.1.9.23145|2|19 +1.3.6.1.4.1.2620.1.3.9.1.9.27759|2|15 +1.3.6.1.4.1.2620.1.3.9.1.9.40201|2|21 +1.3.6.1.4.1.2620.1.3.9.1.9.54989|2|12 +1.3.6.1.4.1.2620.1.3.9.1.9.55318|2|25 +1.3.6.1.4.1.2620.1.3.9.1.9.57712|2|7 +1.3.6.1.4.1.2620.1.3.9.1.10.6833|2|19 +1.3.6.1.4.1.2620.1.3.9.1.10.9617|2|0 +1.3.6.1.4.1.2620.1.3.9.1.10.12777|2|0 +1.3.6.1.4.1.2620.1.3.9.1.10.21037|2|23 +1.3.6.1.4.1.2620.1.3.9.1.10.23145|2|11 +1.3.6.1.4.1.2620.1.3.9.1.10.27759|2|25 +1.3.6.1.4.1.2620.1.3.9.1.10.40201|2|31 +1.3.6.1.4.1.2620.1.3.9.1.10.54989|2|11 +1.3.6.1.4.1.2620.1.3.9.1.10.55318|2|20 +1.3.6.1.4.1.2620.1.3.9.1.10.57712|2|24 +1.3.6.1.4.1.2620.1.3.9.1.11.6833|2|12 +1.3.6.1.4.1.2620.1.3.9.1.11.9617|2|17 +1.3.6.1.4.1.2620.1.3.9.1.11.12777|2|20 +1.3.6.1.4.1.2620.1.3.9.1.11.21037|2|31 +1.3.6.1.4.1.2620.1.3.9.1.11.23145|2|28 +1.3.6.1.4.1.2620.1.3.9.1.11.27759|2|15 +1.3.6.1.4.1.2620.1.3.9.1.11.40201|2|4 +1.3.6.1.4.1.2620.1.3.9.1.11.54989|2|25 +1.3.6.1.4.1.2620.1.3.9.1.11.55318|2|22 +1.3.6.1.4.1.2620.1.3.9.1.11.57712|2|31 +1.3.6.1.4.1.2620.1.3.9.1.12.6833|2|19 +1.3.6.1.4.1.2620.1.3.9.1.12.9617|2|14 +1.3.6.1.4.1.2620.1.3.9.1.12.12777|2|14 +1.3.6.1.4.1.2620.1.3.9.1.12.21037|2|4 +1.3.6.1.4.1.2620.1.3.9.1.12.23145|2|22 +1.3.6.1.4.1.2620.1.3.9.1.12.27759|2|30 +1.3.6.1.4.1.2620.1.3.9.1.12.40201|2|26 +1.3.6.1.4.1.2620.1.3.9.1.12.54989|2|4 +1.3.6.1.4.1.2620.1.3.9.1.12.55318|2|18 +1.3.6.1.4.1.2620.1.3.9.1.12.57712|2|20 +1.3.6.1.4.1.2620.1.3.9.1.13.6833|2|29 +1.3.6.1.4.1.2620.1.3.9.1.13.9617|2|9 +1.3.6.1.4.1.2620.1.3.9.1.13.12777|2|5 +1.3.6.1.4.1.2620.1.3.9.1.13.21037|2|2 +1.3.6.1.4.1.2620.1.3.9.1.13.23145|2|12 +1.3.6.1.4.1.2620.1.3.9.1.13.27759|2|7 +1.3.6.1.4.1.2620.1.3.9.1.13.40201|2|30 +1.3.6.1.4.1.2620.1.3.9.1.13.54989|2|17 +1.3.6.1.4.1.2620.1.3.9.1.13.55318|2|13 +1.3.6.1.4.1.2620.1.3.9.1.13.57712|2|5 +1.3.6.1.4.1.2620.1.3.9.1.14.6833|2|26 +1.3.6.1.4.1.2620.1.3.9.1.14.9617|2|4 +1.3.6.1.4.1.2620.1.3.9.1.14.12777|2|17 +1.3.6.1.4.1.2620.1.3.9.1.14.21037|2|27 +1.3.6.1.4.1.2620.1.3.9.1.14.23145|2|25 +1.3.6.1.4.1.2620.1.3.9.1.14.27759|2|15 +1.3.6.1.4.1.2620.1.3.9.1.14.40201|2|6 +1.3.6.1.4.1.2620.1.3.9.1.14.54989|2|17 +1.3.6.1.4.1.2620.1.3.9.1.14.55318|2|10 +1.3.6.1.4.1.2620.1.3.9.1.14.57712|2|18 +1.3.6.1.4.1.2620.1.3.9.1.15.6833|2|10 +1.3.6.1.4.1.2620.1.3.9.1.15.9617|2|6 +1.3.6.1.4.1.2620.1.3.9.1.15.12777|2|7 +1.3.6.1.4.1.2620.1.3.9.1.15.21037|2|0 +1.3.6.1.4.1.2620.1.3.9.1.15.23145|2|11 +1.3.6.1.4.1.2620.1.3.9.1.15.27759|2|20 +1.3.6.1.4.1.2620.1.3.9.1.15.40201|2|24 +1.3.6.1.4.1.2620.1.3.9.1.15.54989|2|31 +1.3.6.1.4.1.2620.1.3.9.1.15.55318|2|20 +1.3.6.1.4.1.2620.1.3.9.1.15.57712|2|17 +1.3.6.1.4.1.2620.1.5.1.0|4x|7a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.2.0|2|12 +1.3.6.1.4.1.2620.1.5.3.0|2|21 +1.3.6.1.4.1.2620.1.5.4.0|2|22 +1.3.6.1.4.1.2620.1.5.5.0|4x|6f78656e20666f7277617264206163746564206b657074 +1.3.6.1.4.1.2620.1.5.6.0|4x|4a6164656420616374656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.7.0|4x|4a61646564207468656972206163746564207a6f6d62696573206f78656e206f78656e20717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.5.8.0|2|18 +1.3.6.1.4.1.2620.1.5.10.0|2|3 +1.3.6.1.4.1.2620.1.5.11.0|4|their +1.3.6.1.4.1.2620.1.5.12.1.1.364|66|364 +1.3.6.1.4.1.2620.1.5.12.1.1.7934|66|7934 +1.3.6.1.4.1.2620.1.5.12.1.1.8496|66|8496 +1.3.6.1.4.1.2620.1.5.12.1.1.13428|66|13428 +1.3.6.1.4.1.2620.1.5.12.1.1.15584|66|15584 +1.3.6.1.4.1.2620.1.5.12.1.1.31324|66|31324 +1.3.6.1.4.1.2620.1.5.12.1.1.41779|66|41779 +1.3.6.1.4.1.2620.1.5.12.1.1.42369|66|42369 +1.3.6.1.4.1.2620.1.5.12.1.1.55537|66|55537 +1.3.6.1.4.1.2620.1.5.12.1.1.64077|66|64077 +1.3.6.1.4.1.2620.1.5.12.1.2.364|4|Jaded +1.3.6.1.4.1.2620.1.5.12.1.2.7934|4x|4a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.5.12.1.2.8496|4x|627574204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.12.1.2.13428|4x|7a6f6d62696573206b657074206163746564206b657074206275742062757420666f7277617264 +1.3.6.1.4.1.2620.1.5.12.1.2.15584|4x|6163746564207468656972207a6f6d6269657320627574204a6164656420717561696e746c79204a61646564207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.12.1.2.31324|4x|6275742062757420717561696e746c79207468656972206163746564 +1.3.6.1.4.1.2620.1.5.12.1.2.41779|4x|64726976696e672064726976696e672064726976696e67206163746564206f78656e +1.3.6.1.4.1.2620.1.5.12.1.2.42369|4x|6b65707420717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.5.12.1.2.55537|4x|64726976696e67206b657074206f78656e +1.3.6.1.4.1.2620.1.5.12.1.2.64077|4x|6b657074206b657074207a6f6d62696573207a6f6d62696573204a6164656420666f72776172642064726976696e67207468656972 +1.3.6.1.4.1.2620.1.5.12.1.3.364|64x|31b04422 +1.3.6.1.4.1.2620.1.5.12.1.3.7934|64x|273c1ef3 +1.3.6.1.4.1.2620.1.5.12.1.3.8496|64x|669ee0fd +1.3.6.1.4.1.2620.1.5.12.1.3.13428|64x|9c96c1b9 +1.3.6.1.4.1.2620.1.5.12.1.3.15584|64x|7dc191f9 +1.3.6.1.4.1.2620.1.5.12.1.3.31324|64x|f6bc802c +1.3.6.1.4.1.2620.1.5.12.1.3.41779|64x|11e6bf9b +1.3.6.1.4.1.2620.1.5.12.1.3.42369|64x|e23aba6f +1.3.6.1.4.1.2620.1.5.12.1.3.55537|64x|2cd187c7 +1.3.6.1.4.1.2620.1.5.12.1.3.64077|64x|09dc0da2 +1.3.6.1.4.1.2620.1.5.12.1.4.364|4x|616374656420627574207468656972206b657074204a61646564204a61646564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.5.12.1.4.7934|4x|666f727761726420717561696e746c79204a61646564207a6f6d62696573207468656972207a6f6d626965732064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.12.1.4.8496|4x|64726976696e67206f78656e20666f7277617264207468656972204a61646564206b657074206f78656e +1.3.6.1.4.1.2620.1.5.12.1.4.13428|4x|64726976696e672061637465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.12.1.4.15584|4x|616374656420666f727761726420666f727761726420666f7277617264206f78656e20746865697220717561696e746c7920627574206163746564 +1.3.6.1.4.1.2620.1.5.12.1.4.31324|4x|64726976696e67206163746564204a61646564206b65707420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.12.1.4.41779|4x|666f7277617264206f78656e206f78656e20666f727761726420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.5.12.1.4.42369|4x|6b657074207468656972206b65707420666f72776172642062757420717561696e746c79 +1.3.6.1.4.1.2620.1.5.12.1.4.55537|4|zombies +1.3.6.1.4.1.2620.1.5.12.1.4.64077|4|driving +1.3.6.1.4.1.2620.1.5.12.1.5.364|2|21 +1.3.6.1.4.1.2620.1.5.12.1.5.7934|2|27 +1.3.6.1.4.1.2620.1.5.12.1.5.8496|2|10 +1.3.6.1.4.1.2620.1.5.12.1.5.13428|2|21 +1.3.6.1.4.1.2620.1.5.12.1.5.15584|2|22 +1.3.6.1.4.1.2620.1.5.12.1.5.31324|2|13 +1.3.6.1.4.1.2620.1.5.12.1.5.41779|2|19 +1.3.6.1.4.1.2620.1.5.12.1.5.42369|2|28 +1.3.6.1.4.1.2620.1.5.12.1.5.55537|2|30 +1.3.6.1.4.1.2620.1.5.12.1.5.64077|2|16 +1.3.6.1.4.1.2620.1.5.12.1.6.364|2|16 +1.3.6.1.4.1.2620.1.5.12.1.6.7934|2|24 +1.3.6.1.4.1.2620.1.5.12.1.6.8496|2|23 +1.3.6.1.4.1.2620.1.5.12.1.6.13428|2|10 +1.3.6.1.4.1.2620.1.5.12.1.6.15584|2|6 +1.3.6.1.4.1.2620.1.5.12.1.6.31324|2|17 +1.3.6.1.4.1.2620.1.5.12.1.6.41779|2|16 +1.3.6.1.4.1.2620.1.5.12.1.6.42369|2|28 +1.3.6.1.4.1.2620.1.5.12.1.6.55537|2|18 +1.3.6.1.4.1.2620.1.5.12.1.6.64077|2|28 +1.3.6.1.4.1.2620.1.5.12.1.7.364|2|13 +1.3.6.1.4.1.2620.1.5.12.1.7.7934|2|18 +1.3.6.1.4.1.2620.1.5.12.1.7.8496|2|11 +1.3.6.1.4.1.2620.1.5.12.1.7.13428|2|17 +1.3.6.1.4.1.2620.1.5.12.1.7.15584|2|3 +1.3.6.1.4.1.2620.1.5.12.1.7.31324|2|13 +1.3.6.1.4.1.2620.1.5.12.1.7.41779|2|14 +1.3.6.1.4.1.2620.1.5.12.1.7.42369|2|21 +1.3.6.1.4.1.2620.1.5.12.1.7.55537|2|5 +1.3.6.1.4.1.2620.1.5.12.1.7.64077|2|30 +1.3.6.1.4.1.2620.1.5.13.1.1.2868|2|11 +1.3.6.1.4.1.2620.1.5.13.1.1.5551|2|8 +1.3.6.1.4.1.2620.1.5.13.1.1.16747|2|15 +1.3.6.1.4.1.2620.1.5.13.1.1.20626|2|17 +1.3.6.1.4.1.2620.1.5.13.1.1.24053|2|27 +1.3.6.1.4.1.2620.1.5.13.1.1.24837|2|28 +1.3.6.1.4.1.2620.1.5.13.1.1.31559|2|8 +1.3.6.1.4.1.2620.1.5.13.1.1.32912|2|3 +1.3.6.1.4.1.2620.1.5.13.1.1.32962|2|28 +1.3.6.1.4.1.2620.1.5.13.1.1.34531|2|8 +1.3.6.1.4.1.2620.1.5.13.1.2.2868|4x|666f727761726420717561696e746c7920717561696e746c79206163746564206f78656e20627574206f78656e +1.3.6.1.4.1.2620.1.5.13.1.2.5551|4x|717561696e746c7920717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.5.13.1.2.16747|4x|666f7277617264206f78656e2062757420627574207468656972 +1.3.6.1.4.1.2620.1.5.13.1.2.20626|4x|6f78656e207468656972206163746564 +1.3.6.1.4.1.2620.1.5.13.1.2.24053|4x|4a6164656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.13.1.2.24837|4x|7a6f6d62696573206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.13.1.2.31559|4x|6b657074207a6f6d62696573204a6164656420717561696e746c79204a61646564207a6f6d626965732064726976696e67207468656972 +1.3.6.1.4.1.2620.1.5.13.1.2.32912|4x|7a6f6d62696573207a6f6d626965732064726976696e6720666f7277617264204a616465642064726976696e6720717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.5.13.1.2.32962|4x|4a6164656420666f727761726420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.5.13.1.2.34531|4x|4a616465642064726976696e67206b657074207a6f6d6269657320616374656420627574 +1.3.6.1.4.1.2620.1.5.13.1.3.2868|4x|717561696e746c7920717561696e746c7920746865697220627574204a61646564204a6164656420627574206f78656e204a61646564 +1.3.6.1.4.1.2620.1.5.13.1.3.5551|4|zombies +1.3.6.1.4.1.2620.1.5.13.1.3.16747|4x|6b6570742062757420746865697220616374656420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.5.13.1.3.20626|4x|4a61646564204a616465642064726976696e67207a6f6d6269657320627574204a61646564 +1.3.6.1.4.1.2620.1.5.13.1.3.24053|4x|717561696e746c79207468656972206b657074206b657074 +1.3.6.1.4.1.2620.1.5.13.1.3.24837|4x|7a6f6d62696573207a6f6d62696573206b6570742061637465642062757420627574 +1.3.6.1.4.1.2620.1.5.13.1.3.31559|4x|6f78656e20717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.5.13.1.3.32912|4|quaintly +1.3.6.1.4.1.2620.1.5.13.1.3.32962|4x|6f78656e20627574204a61646564204a616465642062757420627574206163746564 +1.3.6.1.4.1.2620.1.5.13.1.3.34531|4x|6f78656e204a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.5.13.1.4.2868|2|24 +1.3.6.1.4.1.2620.1.5.13.1.4.5551|2|6 +1.3.6.1.4.1.2620.1.5.13.1.4.16747|2|18 +1.3.6.1.4.1.2620.1.5.13.1.4.20626|2|8 +1.3.6.1.4.1.2620.1.5.13.1.4.24053|2|1 +1.3.6.1.4.1.2620.1.5.13.1.4.24837|2|10 +1.3.6.1.4.1.2620.1.5.13.1.4.31559|2|0 +1.3.6.1.4.1.2620.1.5.13.1.4.32912|2|8 +1.3.6.1.4.1.2620.1.5.13.1.4.32962|2|11 +1.3.6.1.4.1.2620.1.5.13.1.4.34531|2|14 +1.3.6.1.4.1.2620.1.5.13.1.5.2868|2|28 +1.3.6.1.4.1.2620.1.5.13.1.5.5551|2|29 +1.3.6.1.4.1.2620.1.5.13.1.5.16747|2|8 +1.3.6.1.4.1.2620.1.5.13.1.5.20626|2|8 +1.3.6.1.4.1.2620.1.5.13.1.5.24053|2|18 +1.3.6.1.4.1.2620.1.5.13.1.5.24837|2|18 +1.3.6.1.4.1.2620.1.5.13.1.5.31559|2|25 +1.3.6.1.4.1.2620.1.5.13.1.5.32912|2|28 +1.3.6.1.4.1.2620.1.5.13.1.5.32962|2|0 +1.3.6.1.4.1.2620.1.5.13.1.5.34531|2|11 +1.3.6.1.4.1.2620.1.5.13.1.6.2868|4x|7a6f6d62696573206b657074206f78656e +1.3.6.1.4.1.2620.1.5.13.1.6.5551|4x|627574206f78656e206163746564204a6164656420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.5.13.1.6.16747|4x|62757420666f7277617264206163746564206163746564206b657074 +1.3.6.1.4.1.2620.1.5.13.1.6.20626|4x|7468656972207468656972204a61646564 +1.3.6.1.4.1.2620.1.5.13.1.6.24053|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.5.13.1.6.24837|4|but +1.3.6.1.4.1.2620.1.5.13.1.6.31559|4|zombies +1.3.6.1.4.1.2620.1.5.13.1.6.32912|4x|7468656972206163746564207a6f6d62696573204a6164656420627574204a61646564 +1.3.6.1.4.1.2620.1.5.13.1.6.32962|4x|666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.5.13.1.6.34531|4x|666f7277617264206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.14.0|4x|6b65707420717561696e746c792061637465642062757420666f7277617264206f78656e +1.3.6.1.4.1.2620.1.5.15.1.1.995|66|995 +1.3.6.1.4.1.2620.1.5.15.1.1.9585|66|9585 +1.3.6.1.4.1.2620.1.5.15.1.1.14294|66|14294 +1.3.6.1.4.1.2620.1.5.15.1.1.14705|66|14705 +1.3.6.1.4.1.2620.1.5.15.1.1.22335|66|22335 +1.3.6.1.4.1.2620.1.5.15.1.1.25009|66|25009 +1.3.6.1.4.1.2620.1.5.15.1.1.56007|66|56007 +1.3.6.1.4.1.2620.1.5.15.1.1.57014|66|57014 +1.3.6.1.4.1.2620.1.5.15.1.1.60935|66|60935 +1.3.6.1.4.1.2620.1.5.15.1.1.64449|66|64449 +1.3.6.1.4.1.2620.1.5.15.1.2.995|4x|7a6f6d626965732062757420627574204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.5.15.1.2.9585|4x|6f78656e20666f7277617264207468656972206f78656e20666f72776172642062757420717561696e746c79 +1.3.6.1.4.1.2620.1.5.15.1.2.14294|4x|6f78656e206b657074 +1.3.6.1.4.1.2620.1.5.15.1.2.14705|4x|666f7277617264206b657074 +1.3.6.1.4.1.2620.1.5.15.1.2.22335|4x|4a61646564206163746564206163746564204a61646564 +1.3.6.1.4.1.2620.1.5.15.1.2.25009|4x|6275742064726976696e67207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.5.15.1.2.56007|4x|6f78656e20627574206b657074206b657074 +1.3.6.1.4.1.2620.1.5.15.1.2.57014|4x|746865697220666f7277617264206163746564207a6f6d62696573207a6f6d62696573207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.5.15.1.2.60935|4x|666f727761726420666f72776172642064726976696e672064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.5.15.1.2.64449|4x|6163746564204a61646564206f78656e20627574 +1.3.6.1.4.1.2620.1.5.15.1.3.995|2|12 +1.3.6.1.4.1.2620.1.5.15.1.3.9585|2|28 +1.3.6.1.4.1.2620.1.5.15.1.3.14294|2|31 +1.3.6.1.4.1.2620.1.5.15.1.3.14705|2|17 +1.3.6.1.4.1.2620.1.5.15.1.3.22335|2|8 +1.3.6.1.4.1.2620.1.5.15.1.3.25009|2|24 +1.3.6.1.4.1.2620.1.5.15.1.3.56007|2|6 +1.3.6.1.4.1.2620.1.5.15.1.3.57014|2|19 +1.3.6.1.4.1.2620.1.5.15.1.3.60935|2|6 +1.3.6.1.4.1.2620.1.5.15.1.3.64449|2|26 +1.3.6.1.4.1.2620.1.5.15.1.4.995|2|19 +1.3.6.1.4.1.2620.1.5.15.1.4.9585|2|16 +1.3.6.1.4.1.2620.1.5.15.1.4.14294|2|27 +1.3.6.1.4.1.2620.1.5.15.1.4.14705|2|7 +1.3.6.1.4.1.2620.1.5.15.1.4.22335|2|14 +1.3.6.1.4.1.2620.1.5.15.1.4.25009|2|6 +1.3.6.1.4.1.2620.1.5.15.1.4.56007|2|15 +1.3.6.1.4.1.2620.1.5.15.1.4.57014|2|4 +1.3.6.1.4.1.2620.1.5.15.1.4.60935|2|27 +1.3.6.1.4.1.2620.1.5.15.1.4.64449|2|0 +1.3.6.1.4.1.2620.1.5.15.1.5.995|2|26 +1.3.6.1.4.1.2620.1.5.15.1.5.9585|2|25 +1.3.6.1.4.1.2620.1.5.15.1.5.14294|2|28 +1.3.6.1.4.1.2620.1.5.15.1.5.14705|2|24 +1.3.6.1.4.1.2620.1.5.15.1.5.22335|2|22 +1.3.6.1.4.1.2620.1.5.15.1.5.25009|2|18 +1.3.6.1.4.1.2620.1.5.15.1.5.56007|2|17 +1.3.6.1.4.1.2620.1.5.15.1.5.57014|2|16 +1.3.6.1.4.1.2620.1.5.15.1.5.60935|2|9 +1.3.6.1.4.1.2620.1.5.15.1.5.64449|2|10 +1.3.6.1.4.1.2620.1.5.15.1.6.995|2|20 +1.3.6.1.4.1.2620.1.5.15.1.6.9585|2|6 +1.3.6.1.4.1.2620.1.5.15.1.6.14294|2|12 +1.3.6.1.4.1.2620.1.5.15.1.6.14705|2|18 +1.3.6.1.4.1.2620.1.5.15.1.6.22335|2|10 +1.3.6.1.4.1.2620.1.5.15.1.6.25009|2|13 +1.3.6.1.4.1.2620.1.5.15.1.6.56007|2|6 +1.3.6.1.4.1.2620.1.5.15.1.6.57014|2|14 +1.3.6.1.4.1.2620.1.5.15.1.6.60935|2|27 +1.3.6.1.4.1.2620.1.5.15.1.6.64449|2|23 +1.3.6.1.4.1.2620.1.5.16.1.1.177|66|177 +1.3.6.1.4.1.2620.1.5.16.1.1.26062|66|26062 +1.3.6.1.4.1.2620.1.5.16.1.1.28566|66|28566 +1.3.6.1.4.1.2620.1.5.16.1.1.31355|66|31355 +1.3.6.1.4.1.2620.1.5.16.1.1.31386|66|31386 +1.3.6.1.4.1.2620.1.5.16.1.1.42207|66|42207 +1.3.6.1.4.1.2620.1.5.16.1.1.51551|66|51551 +1.3.6.1.4.1.2620.1.5.16.1.1.53504|66|53504 +1.3.6.1.4.1.2620.1.5.16.1.1.56015|66|56015 +1.3.6.1.4.1.2620.1.5.16.1.1.58546|66|58546 +1.3.6.1.4.1.2620.1.5.16.1.2.177|4x|6f78656e207a6f6d6269657320666f7277617264206f78656e206163746564207468656972204a6164656420746865697220666f7277617264 +1.3.6.1.4.1.2620.1.5.16.1.2.26062|4x|64726976696e67206b65707420616374656420746865697220666f7277617264206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.5.16.1.2.28566|4x|7a6f6d6269657320666f7277617264206f78656e206275742064726976696e6720666f727761726420717561696e746c79207468656972206b657074 +1.3.6.1.4.1.2620.1.5.16.1.2.31355|4x|717561696e746c79206163746564204a61646564 +1.3.6.1.4.1.2620.1.5.16.1.2.31386|4x|666f7277617264207468656972206f78656e2074686569722064726976696e67207468656972 +1.3.6.1.4.1.2620.1.5.16.1.2.42207|4x|627574204a616465642062757420717561696e746c79206f78656e207468656972206163746564204a61646564 +1.3.6.1.4.1.2620.1.5.16.1.2.51551|4x|7a6f6d62696573207a6f6d62696573206b65707420666f727761726420616374656420666f7277617264207468656972206b657074207468656972 +1.3.6.1.4.1.2620.1.5.16.1.2.53504|4|but +1.3.6.1.4.1.2620.1.5.16.1.2.56015|4x|666f727761726420666f7277617264207468656972204a6164656420616374656420666f7277617264 +1.3.6.1.4.1.2620.1.5.16.1.2.58546|4x|7468656972204a61646564 +1.3.6.1.4.1.2620.1.5.16.1.3.177|2|10 +1.3.6.1.4.1.2620.1.5.16.1.3.26062|2|20 +1.3.6.1.4.1.2620.1.5.16.1.3.28566|2|4 +1.3.6.1.4.1.2620.1.5.16.1.3.31355|2|22 +1.3.6.1.4.1.2620.1.5.16.1.3.31386|2|19 +1.3.6.1.4.1.2620.1.5.16.1.3.42207|2|16 +1.3.6.1.4.1.2620.1.5.16.1.3.51551|2|15 +1.3.6.1.4.1.2620.1.5.16.1.3.53504|2|20 +1.3.6.1.4.1.2620.1.5.16.1.3.56015|2|6 +1.3.6.1.4.1.2620.1.5.16.1.3.58546|2|23 +1.3.6.1.4.1.2620.1.5.16.1.4.177|2|9 +1.3.6.1.4.1.2620.1.5.16.1.4.26062|2|6 +1.3.6.1.4.1.2620.1.5.16.1.4.28566|2|9 +1.3.6.1.4.1.2620.1.5.16.1.4.31355|2|12 +1.3.6.1.4.1.2620.1.5.16.1.4.31386|2|1 +1.3.6.1.4.1.2620.1.5.16.1.4.42207|2|12 +1.3.6.1.4.1.2620.1.5.16.1.4.51551|2|15 +1.3.6.1.4.1.2620.1.5.16.1.4.53504|2|17 +1.3.6.1.4.1.2620.1.5.16.1.4.56015|2|29 +1.3.6.1.4.1.2620.1.5.16.1.4.58546|2|6 +1.3.6.1.4.1.2620.1.5.101.0|2|30 +1.3.6.1.4.1.2620.1.5.102.0|4x|7a6f6d62696573206b6570742064726976696e67206f78656e +1.3.6.1.4.1.2620.1.5.103.0|4x|64726976696e6720616374656420717561696e746c79204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.5.999.0|2|13 +1.3.6.1.4.1.2620.1.6.1.0|4|SVN Foundation +1.3.6.1.4.1.2620.1.6.2.0|2|9 +1.3.6.1.4.1.2620.1.6.3.0|2|9 +1.3.6.1.4.1.2620.1.6.4.1.0|4|R80.10 +1.3.6.1.4.1.2620.1.6.4.2.0|66|991310018 +1.3.6.1.4.1.2620.1.6.5.1.0|4|Gaia +1.3.6.1.4.1.2620.1.6.5.2.0|2|2 +1.3.6.1.4.1.2620.1.6.5.3.0|2|6 +1.3.6.1.4.1.2620.1.6.5.7.0|4| +1.3.6.1.4.1.2620.1.6.6.1.1.4626|66|4626 +1.3.6.1.4.1.2620.1.6.6.1.1.6768|66|6768 +1.3.6.1.4.1.2620.1.6.6.1.1.7799|66|7799 +1.3.6.1.4.1.2620.1.6.6.1.1.32942|66|32942 +1.3.6.1.4.1.2620.1.6.6.1.1.36905|66|36905 +1.3.6.1.4.1.2620.1.6.6.1.1.51226|66|51226 +1.3.6.1.4.1.2620.1.6.6.1.1.52662|66|52662 +1.3.6.1.4.1.2620.1.6.6.1.1.54033|66|54033 +1.3.6.1.4.1.2620.1.6.6.1.1.59395|66|59395 +1.3.6.1.4.1.2620.1.6.6.1.1.59973|66|59973 +1.3.6.1.4.1.2620.1.6.6.1.2.4626|64x|5b33e1aa +1.3.6.1.4.1.2620.1.6.6.1.2.6768|64x|3c2e7622 +1.3.6.1.4.1.2620.1.6.6.1.2.7799|64x|a23cde9f +1.3.6.1.4.1.2620.1.6.6.1.2.32942|64x|af1f3854 +1.3.6.1.4.1.2620.1.6.6.1.2.36905|64x|b4075669 +1.3.6.1.4.1.2620.1.6.6.1.2.51226|64x|2e6e5fa4 +1.3.6.1.4.1.2620.1.6.6.1.2.52662|64x|9e92babc +1.3.6.1.4.1.2620.1.6.6.1.2.54033|64x|8d88ec2a +1.3.6.1.4.1.2620.1.6.6.1.2.59395|64x|39fa362e +1.3.6.1.4.1.2620.1.6.6.1.2.59973|64x|3d7b260c +1.3.6.1.4.1.2620.1.6.6.1.3.4626|64x|8bcf22ce +1.3.6.1.4.1.2620.1.6.6.1.3.6768|64x|e1c51fd5 +1.3.6.1.4.1.2620.1.6.6.1.3.7799|64x|3f9e8289 +1.3.6.1.4.1.2620.1.6.6.1.3.32942|64x|4b7c1467 +1.3.6.1.4.1.2620.1.6.6.1.3.36905|64x|b44f72e2 +1.3.6.1.4.1.2620.1.6.6.1.3.51226|64x|716f517c +1.3.6.1.4.1.2620.1.6.6.1.3.52662|64x|8aa98f40 +1.3.6.1.4.1.2620.1.6.6.1.3.54033|64x|85f8f424 +1.3.6.1.4.1.2620.1.6.6.1.3.59395|64x|0a9d659f +1.3.6.1.4.1.2620.1.6.6.1.3.59973|64x|429e0b93 +1.3.6.1.4.1.2620.1.6.6.1.4.4626|64x|157a4864 +1.3.6.1.4.1.2620.1.6.6.1.4.6768|64x|3ec3dddf +1.3.6.1.4.1.2620.1.6.6.1.4.7799|64x|36b79586 +1.3.6.1.4.1.2620.1.6.6.1.4.32942|64x|58ff7cd0 +1.3.6.1.4.1.2620.1.6.6.1.4.36905|64x|28ed11cf +1.3.6.1.4.1.2620.1.6.6.1.4.51226|64x|57080148 +1.3.6.1.4.1.2620.1.6.6.1.4.52662|64x|a665b16f +1.3.6.1.4.1.2620.1.6.6.1.4.54033|64x|143dd6d0 +1.3.6.1.4.1.2620.1.6.6.1.4.59395|64x|9ec3312e +1.3.6.1.4.1.2620.1.6.6.1.4.59973|64x|132b7e13 +1.3.6.1.4.1.2620.1.6.6.1.5.4626|4x|6b657074207468656972206b6570742064726976696e67206275742064726976696e67 +1.3.6.1.4.1.2620.1.6.6.1.5.6768|4|kept +1.3.6.1.4.1.2620.1.6.6.1.5.7799|4x|666f727761726420717561696e746c792064726976696e67204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.6.6.1.5.32942|4x|6b657074206b657074206f78656e206163746564206b657074206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.6.6.1.5.36905|4x|62757420746865697220746865697220666f727761726420666f7277617264204a61646564206b65707420627574 +1.3.6.1.4.1.2620.1.6.6.1.5.51226|4x|7a6f6d626965732064726976696e6720666f727761726420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.6.6.1.5.52662|4x|666f7277617264206f78656e204a61646564 +1.3.6.1.4.1.2620.1.6.6.1.5.54033|4x|64726976696e6720666f727761726420666f7277617264206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.6.6.1.5.59395|4x|627574204a6164656420666f727761726420666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.6.6.1.5.59973|4x|717561696e746c792064726976696e67206f78656e +1.3.6.1.4.1.2620.1.6.7.1.1.0|2|21 +1.3.6.1.4.1.2620.1.6.7.1.2.0|2|15 +1.3.6.1.4.1.2620.1.6.7.1.3.0|2|9 +1.3.6.1.4.1.2620.1.6.7.1.4.0|2|14 +1.3.6.1.4.1.2620.1.6.7.1.5.0|2|23 +1.3.6.1.4.1.2620.1.6.7.1.6.0|2|26 +1.3.6.1.4.1.2620.1.6.7.1.7.0|2|25 +1.3.6.1.4.1.2620.1.6.7.2.1.0|2|29 +1.3.6.1.4.1.2620.1.6.7.2.2.0|2|5 +1.3.6.1.4.1.2620.1.6.7.2.3.0|2|21 +1.3.6.1.4.1.2620.1.6.7.2.4.0|2|21 +1.3.6.1.4.1.2620.1.6.7.2.5.0|2|21 +1.3.6.1.4.1.2620.1.6.7.2.6.0|2|31 +1.3.6.1.4.1.2620.1.6.7.2.7.0|2|16 +1.3.6.1.4.1.2620.1.6.7.3.1.0|2|27 +1.3.6.1.4.1.2620.1.6.7.3.2.0|2|5 +1.3.6.1.4.1.2620.1.6.7.3.3.0|2|9 +1.3.6.1.4.1.2620.1.6.7.3.4.0|4x|666f7277617264207a6f6d62696573206b65707420666f7277617264204a61646564204a61646564206f78656e204a61646564 +1.3.6.1.4.1.2620.1.6.7.3.5.0|4x|64726976696e6720717561696e746c79206163746564207468656972206163746564206f78656e +1.3.6.1.4.1.2620.1.6.7.3.6.0|4x|627574206163746564206163746564206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.6.7.4.1.0|4x|38303030303030303030 +1.3.6.1.4.1.2620.1.6.7.4.2.0|4x|38303030303030303030 +1.3.6.1.4.1.2620.1.6.7.4.3.0|4x|3136303030303030303030 +1.3.6.1.4.1.2620.1.6.7.4.4.0|4x|38303030303030303030 +1.3.6.1.4.1.2620.1.6.7.4.5.0|4|8000000000 +1.3.6.1.4.1.2620.1.6.7.4.6.0|2|7 +1.3.6.1.4.1.2620.1.6.7.4.7.0|2|20 +1.3.6.1.4.1.2620.1.6.7.5.1.1.7097|66|7097 +1.3.6.1.4.1.2620.1.6.7.5.1.1.13039|66|13039 +1.3.6.1.4.1.2620.1.6.7.5.1.1.13761|66|13761 +1.3.6.1.4.1.2620.1.6.7.5.1.1.28994|66|28994 +1.3.6.1.4.1.2620.1.6.7.5.1.1.29751|66|29751 +1.3.6.1.4.1.2620.1.6.7.5.1.1.33826|66|33826 +1.3.6.1.4.1.2620.1.6.7.5.1.1.40053|66|40053 +1.3.6.1.4.1.2620.1.6.7.5.1.1.48847|66|48847 +1.3.6.1.4.1.2620.1.6.7.5.1.1.61593|66|61593 +1.3.6.1.4.1.2620.1.6.7.5.1.1.65044|66|65044 +1.3.6.1.4.1.2620.1.6.7.5.1.2.7097|2|2 +1.3.6.1.4.1.2620.1.6.7.5.1.2.13039|2|2 +1.3.6.1.4.1.2620.1.6.7.5.1.2.13761|2|16 +1.3.6.1.4.1.2620.1.6.7.5.1.2.28994|2|0 +1.3.6.1.4.1.2620.1.6.7.5.1.2.29751|2|25 +1.3.6.1.4.1.2620.1.6.7.5.1.2.33826|2|19 +1.3.6.1.4.1.2620.1.6.7.5.1.2.40053|2|2 +1.3.6.1.4.1.2620.1.6.7.5.1.2.48847|2|5 +1.3.6.1.4.1.2620.1.6.7.5.1.2.61593|2|1 +1.3.6.1.4.1.2620.1.6.7.5.1.2.65044|2|12 +1.3.6.1.4.1.2620.1.6.7.5.1.3.7097|2|6 +1.3.6.1.4.1.2620.1.6.7.5.1.3.13039|2|0 +1.3.6.1.4.1.2620.1.6.7.5.1.3.13761|2|8 +1.3.6.1.4.1.2620.1.6.7.5.1.3.28994|2|29 +1.3.6.1.4.1.2620.1.6.7.5.1.3.29751|2|24 +1.3.6.1.4.1.2620.1.6.7.5.1.3.33826|2|23 +1.3.6.1.4.1.2620.1.6.7.5.1.3.40053|2|5 +1.3.6.1.4.1.2620.1.6.7.5.1.3.48847|2|29 +1.3.6.1.4.1.2620.1.6.7.5.1.3.61593|2|10 +1.3.6.1.4.1.2620.1.6.7.5.1.3.65044|2|24 +1.3.6.1.4.1.2620.1.6.7.5.1.4.7097|2|8 +1.3.6.1.4.1.2620.1.6.7.5.1.4.13039|2|27 +1.3.6.1.4.1.2620.1.6.7.5.1.4.13761|2|7 +1.3.6.1.4.1.2620.1.6.7.5.1.4.28994|2|25 +1.3.6.1.4.1.2620.1.6.7.5.1.4.29751|2|2 +1.3.6.1.4.1.2620.1.6.7.5.1.4.33826|2|27 +1.3.6.1.4.1.2620.1.6.7.5.1.4.40053|2|16 +1.3.6.1.4.1.2620.1.6.7.5.1.4.48847|2|2 +1.3.6.1.4.1.2620.1.6.7.5.1.4.61593|2|23 +1.3.6.1.4.1.2620.1.6.7.5.1.4.65044|2|17 +1.3.6.1.4.1.2620.1.6.7.5.1.5.7097|2|1 +1.3.6.1.4.1.2620.1.6.7.5.1.5.13039|2|6 +1.3.6.1.4.1.2620.1.6.7.5.1.5.13761|2|21 +1.3.6.1.4.1.2620.1.6.7.5.1.5.28994|2|27 +1.3.6.1.4.1.2620.1.6.7.5.1.5.29751|2|1 +1.3.6.1.4.1.2620.1.6.7.5.1.5.33826|2|0 +1.3.6.1.4.1.2620.1.6.7.5.1.5.40053|2|7 +1.3.6.1.4.1.2620.1.6.7.5.1.5.48847|2|7 +1.3.6.1.4.1.2620.1.6.7.5.1.5.61593|2|8 +1.3.6.1.4.1.2620.1.6.7.5.1.5.65044|2|13 +1.3.6.1.4.1.2620.1.6.7.5.1.6.7097|2|29 +1.3.6.1.4.1.2620.1.6.7.5.1.6.13039|2|20 +1.3.6.1.4.1.2620.1.6.7.5.1.6.13761|2|15 +1.3.6.1.4.1.2620.1.6.7.5.1.6.28994|2|8 +1.3.6.1.4.1.2620.1.6.7.5.1.6.29751|2|18 +1.3.6.1.4.1.2620.1.6.7.5.1.6.33826|2|14 +1.3.6.1.4.1.2620.1.6.7.5.1.6.40053|2|15 +1.3.6.1.4.1.2620.1.6.7.5.1.6.48847|2|26 +1.3.6.1.4.1.2620.1.6.7.5.1.6.61593|2|17 +1.3.6.1.4.1.2620.1.6.7.5.1.6.65044|2|13 +1.3.6.1.4.1.2620.1.6.7.5.1.7.7097|2|19 +1.3.6.1.4.1.2620.1.6.7.5.1.7.13039|2|24 +1.3.6.1.4.1.2620.1.6.7.5.1.7.13761|2|3 +1.3.6.1.4.1.2620.1.6.7.5.1.7.28994|2|22 +1.3.6.1.4.1.2620.1.6.7.5.1.7.29751|2|3 +1.3.6.1.4.1.2620.1.6.7.5.1.7.33826|2|12 +1.3.6.1.4.1.2620.1.6.7.5.1.7.40053|2|4 +1.3.6.1.4.1.2620.1.6.7.5.1.7.48847|2|24 +1.3.6.1.4.1.2620.1.6.7.5.1.7.61593|2|2 +1.3.6.1.4.1.2620.1.6.7.5.1.7.65044|2|3 +1.3.6.1.4.1.2620.1.6.7.6.1.1.0|66|0 +1.3.6.1.4.1.2620.1.6.7.6.1.1.1|66|1 +1.3.6.1.4.1.2620.1.6.7.6.1.1.2|66|2 +1.3.6.1.4.1.2620.1.6.7.6.1.1.3|66|3 +1.3.6.1.4.1.2620.1.6.7.6.1.1.4|66|4 +1.3.6.1.4.1.2620.1.6.7.6.1.1.5|66|5 +1.3.6.1.4.1.2620.1.6.7.6.1.1.6|66|6 +1.3.6.1.4.1.2620.1.6.7.6.1.1.7|66|7 +1.3.6.1.4.1.2620.1.6.7.6.1.1.8|66|8 +1.3.6.1.4.1.2620.1.6.7.6.1.1.9|66|9 +1.3.6.1.4.1.2620.1.6.7.6.1.2.0|4|first +1.3.6.1.4.1.2620.1.6.7.6.1.2.1|4|second +1.3.6.1.4.1.2620.1.6.7.6.1.2.2|4|third +1.3.6.1.4.1.2620.1.6.7.6.1.2.3|4|fourth +1.3.6.1.4.1.2620.1.6.7.6.1.2.4|4|fifth +1.3.6.1.4.1.2620.1.6.7.6.1.2.5|4|sixth +1.3.6.1.4.1.2620.1.6.7.6.1.2.6|4|seventh +1.3.6.1.4.1.2620.1.6.7.6.1.2.7|4|eighth +1.3.6.1.4.1.2620.1.6.7.6.1.2.8|4|ninth +1.3.6.1.4.1.2620.1.6.7.6.1.2.9|4|tenth +1.3.6.1.4.1.2620.1.6.7.6.1.3.0|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.1|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.2|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.3|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.4|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.5|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.6|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.7|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.8|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.3.9|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.0|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.1|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.2|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.3|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.4|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.5|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.6|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.7|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.8|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.4.9|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.0|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.1|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.2|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.3|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.4|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.5|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.6|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.7|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.8|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.5.9|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.6.0|2|31 +1.3.6.1.4.1.2620.1.6.7.6.1.6.1|2|3 +1.3.6.1.4.1.2620.1.6.7.6.1.6.2|2|28 +1.3.6.1.4.1.2620.1.6.7.6.1.6.3|2|3 +1.3.6.1.4.1.2620.1.6.7.6.1.6.4|2|12 +1.3.6.1.4.1.2620.1.6.7.6.1.6.5|2|19 +1.3.6.1.4.1.2620.1.6.7.6.1.6.6|2|16 +1.3.6.1.4.1.2620.1.6.7.6.1.6.7|2|31 +1.3.6.1.4.1.2620.1.6.7.6.1.6.8|2|23 +1.3.6.1.4.1.2620.1.6.7.6.1.6.9|2|1 +1.3.6.1.4.1.2620.1.6.7.6.1.7.0|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.1|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.2|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.3|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.4|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.5|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.6|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.7|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.8|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.7.9|4x|353030303030303030303030 +1.3.6.1.4.1.2620.1.6.7.6.1.8.0|2|18 +1.3.6.1.4.1.2620.1.6.7.6.1.8.1|2|14 +1.3.6.1.4.1.2620.1.6.7.6.1.8.2|2|8 +1.3.6.1.4.1.2620.1.6.7.6.1.8.3|2|6 +1.3.6.1.4.1.2620.1.6.7.6.1.8.4|2|24 +1.3.6.1.4.1.2620.1.6.7.6.1.8.5|2|18 +1.3.6.1.4.1.2620.1.6.7.6.1.8.6|2|23 +1.3.6.1.4.1.2620.1.6.7.6.1.8.7|2|15 +1.3.6.1.4.1.2620.1.6.7.6.1.8.8|2|13 +1.3.6.1.4.1.2620.1.6.7.6.1.8.9|2|5 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.882|66|882 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.8345|66|8345 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.14773|66|14773 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.42475|66|42475 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.42661|66|42661 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.43784|66|43784 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.45792|66|45792 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.56965|66|56965 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.59227|66|59227 +1.3.6.1.4.1.2620.1.6.7.7.1.1.1.62700|66|62700 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.882|2|24 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.8345|2|30 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.14773|2|29 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.42475|2|1 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.42661|2|27 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.43784|2|2 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.45792|2|10 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.56965|2|3 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.59227|2|2 +1.3.6.1.4.1.2620.1.6.7.7.1.1.2.62700|2|8 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.882|2|1 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.8345|2|0 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.14773|2|11 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.42475|2|4 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.42661|2|13 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.43784|2|29 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.45792|2|26 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.56965|2|5 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.59227|2|19 +1.3.6.1.4.1.2620.1.6.7.7.1.1.3.62700|2|22 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.882|2|23 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.8345|2|23 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.14773|2|29 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.42475|2|6 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.42661|2|5 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.43784|2|12 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.45792|2|31 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.56965|2|7 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.59227|2|21 +1.3.6.1.4.1.2620.1.6.7.7.1.1.4.62700|2|2 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.882|2|16 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.8345|2|2 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.14773|2|7 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.42475|2|19 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.42661|2|12 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.43784|2|10 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.45792|2|6 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.56965|2|14 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.59227|2|18 +1.3.6.1.4.1.2620.1.6.7.7.1.1.5.62700|2|10 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.882|2|11 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.8345|2|4 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.14773|2|6 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.42475|2|8 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.42661|2|12 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.43784|2|27 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.45792|2|6 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.56965|2|0 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.59227|2|18 +1.3.6.1.4.1.2620.1.6.7.7.1.1.6.62700|2|30 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.882|2|8 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.8345|2|0 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.14773|2|24 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.42475|2|1 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.42661|2|11 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.43784|2|29 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.45792|2|29 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.56965|2|9 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.59227|2|25 +1.3.6.1.4.1.2620.1.6.7.7.1.1.7.62700|2|3 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.882|2|1 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.8345|2|9 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.14773|2|26 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.42475|2|1 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.42661|2|16 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.43784|2|27 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.45792|2|20 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.56965|2|30 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.59227|2|19 +1.3.6.1.4.1.2620.1.6.7.7.1.1.8.62700|2|28 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.23494|66|23494 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.25142|66|25142 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.30106|66|30106 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.34744|66|34744 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.34861|66|34861 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.45301|66|45301 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.50802|66|50802 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.54447|66|54447 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.54672|66|54672 +1.3.6.1.4.1.2620.1.6.7.7.2.1.1.54751|66|54751 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.23494|2|28 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.25142|2|17 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.30106|2|1 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.34744|2|4 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.34861|2|26 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.45301|2|4 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.50802|2|30 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.54447|2|6 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.54672|2|9 +1.3.6.1.4.1.2620.1.6.7.7.2.1.2.54751|2|2 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.23494|2|17 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.25142|2|26 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.30106|2|31 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.34744|2|29 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.34861|2|16 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.45301|2|30 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.50802|2|25 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.54447|2|23 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.54672|2|19 +1.3.6.1.4.1.2620.1.6.7.7.2.1.3.54751|2|0 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.23494|2|6 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.25142|2|15 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.30106|2|1 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.34744|2|16 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.34861|2|26 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.45301|2|29 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.50802|2|16 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.54447|2|6 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.54672|2|18 +1.3.6.1.4.1.2620.1.6.7.7.2.1.4.54751|2|18 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.23494|4x|64726976696e67207468656972204a6164656420746865697220717561696e746c79206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.25142|4|their +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.30106|4x|4a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.34744|4x|4a61646564207a6f6d6269657320666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.34861|4x|7468656972204a6164656420627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.45301|4x|4a61646564204a6164656420627574206f78656e206f78656e +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.50802|4x|666f7277617264204a61646564206163746564206b65707420717561696e746c7920666f72776172642062757420627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.54447|4x|6163746564206b657074206163746564206275742064726976696e67206b657074206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.54672|4x|6275742064726976696e6720627574207a6f6d6269657320746865697220666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.7.2.1.5.54751|4x|6f78656e20627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.23494|4x|4a6164656420717561696e746c79206275742064726976696e67207a6f6d62696573207a6f6d6269657320746865697220627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.25142|4x|746865697220717561696e746c7920666f72776172642064726976696e67206f78656e206f78656e +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.30106|4x|74686569722074686569722062757420666f7277617264206b657074204a61646564207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.34744|4x|4a6164656420666f7277617264206b657074206f78656e204a6164656420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.34861|4|acted +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.45301|4x|7468656972206b6570742064726976696e6720627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.50802|4x|7a6f6d626965732064726976696e6720627574206b657074 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.54447|4x|7468656972206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.54672|4x|717561696e746c79206b65707420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.6.7.7.2.1.6.54751|4x|74686569722064726976696e6720616374656420627574204a616465642064726976696e6720627574206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.23494|4x|7a6f6d62696573207a6f6d62696573206b657074206b65707420717561696e746c79207468656972207468656972 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.25142|4x|7a6f6d6269657320746865697220627574206f78656e20666f7277617264206b657074206f78656e +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.30106|4x|6b6570742062757420616374656420717561696e746c7920717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.34744|4x|666f727761726420717561696e746c79206f78656e206f78656e20627574206275742064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.34861|4x|6b65707420717561696e746c79206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.45301|4x|7a6f6d6269657320666f7277617264206b657074206b657074 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.50802|4x|627574207a6f6d62696573206b657074207468656972206b65707420627574204a6164656420627574 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.54447|4|oxen +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.54672|4x|717561696e746c79204a6164656420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.6.7.7.2.1.7.54751|4x|7468656972206f78656e +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.23494|2|22 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.25142|2|23 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.30106|2|1 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.34744|2|31 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.34861|2|12 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.45301|2|27 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.50802|2|5 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.54447|2|4 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.54672|2|9 +1.3.6.1.4.1.2620.1.6.7.7.2.1.8.54751|2|26 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.23494|2|16 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.25142|2|11 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.30106|2|2 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.34744|2|26 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.34861|2|3 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.45301|2|9 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.50802|2|4 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.54447|2|0 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.54672|2|9 +1.3.6.1.4.1.2620.1.6.7.7.2.1.9.54751|2|31 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.23494|2|16 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.25142|2|30 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.30106|2|4 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.34744|2|2 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.34861|2|3 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.45301|2|5 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.50802|2|6 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.54447|2|2 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.54672|2|13 +1.3.6.1.4.1.2620.1.6.7.7.2.1.10.54751|2|20 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.23494|2|17 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.25142|2|13 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.30106|2|0 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.34744|2|7 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.34861|2|28 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.45301|2|18 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.50802|2|21 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.54447|2|19 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.54672|2|18 +1.3.6.1.4.1.2620.1.6.7.7.2.1.11.54751|2|21 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.23494|2|2 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.25142|2|21 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.30106|2|0 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.34744|2|26 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.34861|2|10 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.45301|2|21 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.50802|2|31 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.54447|2|9 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.54672|2|28 +1.3.6.1.4.1.2620.1.6.7.7.2.1.12.54751|2|18 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.0|66|0 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.1|66|1 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.2|66|2 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.3|66|3 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.4|66|4 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.5|66|5 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.6|66|6 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.7|66|7 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.8|66|8 +1.3.6.1.4.1.2620.1.6.7.8.1.1.1.9|66|9 +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.0|4|first +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.1|4|second +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.2|4|third +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.3|4|fourth +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.4|4|fifth +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.5|4|sixth +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.6|4|seventh +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.7|4|eighth +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.8|4|ninth +1.3.6.1.4.1.2620.1.6.7.8.1.1.2.9|4|tenth +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.0|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.1|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.2|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.3|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.4|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.5|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.6|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.7|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.8|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.3.9|4|24 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.0|4x|666f7277617264207a6f6d62696573207468656972206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.1|4x|666f727761726420627574206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.2|4x|6b657074207468656972206b657074206f78656e207a6f6d62696573204a6164656420616374656420627574206f78656e +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.3|4x|6163746564206b65707420717561696e746c79206275742064726976696e6720717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.4|4x|7a6f6d6269657320717561696e746c79206b657074204a61646564206f78656e2074686569722064726976696e672064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.5|4|but +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.6|4x|666f7277617264207468656972 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.7|4x|62757420746865697220746865697220717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.8|4x|74686569722061637465642062757420717561696e746c79206f78656e20627574 +1.3.6.1.4.1.2620.1.6.7.8.1.1.4.9|4x|61637465642064726976696e6720717561696e746c792064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.0|4x|4a616465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.1|4x|746865697220666f7277617264206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.2|4x|6f78656e204a61646564207468656972206163746564 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.3|4x|6b65707420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.4|4x|746865697220666f7277617264206b65707420746865697220746865697220627574 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.5|4x|64726976696e672062757420666f7277617264206b657074207a6f6d62696573206b6570742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.6|4x|666f727761726420717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.7|4x|6163746564206f78656e204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.8|4x|6b657074204a61646564207468656972207a6f6d62696573206b657074204a61646564206163746564 +1.3.6.1.4.1.2620.1.6.7.8.1.1.5.9|4x|6b6570742064726976696e67206f78656e206275742062757420627574206b657074204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.0|2|9 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.1|2|31 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.2|2|22 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.3|2|25 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.4|2|20 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.5|2|9 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.6|2|11 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.7|2|18 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.8|2|30 +1.3.6.1.4.1.2620.1.6.7.8.1.1.6.9|2|6 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.0|66|0 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.1|66|1 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.2|66|2 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.3|66|3 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.4|66|4 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.5|66|5 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.6|66|6 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.7|66|7 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.8|66|8 +1.3.6.1.4.1.2620.1.6.7.8.2.1.1.9|66|9 +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.0|4|first +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.1|4|second +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.2|4|third +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.3|4|fourth +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.4|4|fifth +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.5|4|sixth +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.6|4|seventh +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.7|4|eighth +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.8|4|ninth +1.3.6.1.4.1.2620.1.6.7.8.2.1.2.9|4|tenth +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.0|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.1|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.2|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.3|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.4|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.5|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.6|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.7|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.8|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.3.9|4|30 +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.0|4x|6163746564206f78656e20627574206f78656e206b657074207468656972204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.1|4x|616374656420627574 +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.2|4x|666f7277617264206163746564206f78656e +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.3|4|kept +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.4|4|Jaded +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.5|4x|627574206b65707420666f72776172642064726976696e672064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.6|4x|627574206f78656e206163746564 +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.7|4x|64726976696e67206f78656e +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.8|4x|746865697220717561696e746c79206b6570742064726976696e67206163746564207a6f6d62696573206b657074207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.2.1.4.9|4x|7a6f6d626965732064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.0|4x|6163746564207a6f6d62696573206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.1|4|their +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.2|4x|7468656972207a6f6d62696573207a6f6d626965732064726976696e67206163746564206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.3|4x|7468656972207468656972207468656972206b657074 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.4|4x|627574206163746564206163746564 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.5|4x|4a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.6|4x|616374656420627574204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.7|4x|64726976696e67204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.8|4x|6b657074207468656972206163746564207468656972207a6f6d62696573207a6f6d62696573206b6570742061637465642064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.2.1.5.9|4|but +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.0|2|27 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.1|2|17 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.2|2|6 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.3|2|4 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.4|2|29 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.5|2|1 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.6|2|1 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.7|2|7 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.8|2|28 +1.3.6.1.4.1.2620.1.6.7.8.2.1.6.9|2|1 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.6140|66|6140 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.11728|66|11728 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.22397|66|22397 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.22594|66|22594 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.44543|66|44543 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.45508|66|45508 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.47879|66|47879 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.53788|66|53788 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.60442|66|60442 +1.3.6.1.4.1.2620.1.6.7.8.3.1.1.65407|66|65407 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.6140|4x|6f78656e20627574206b657074 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.11728|4|oxen +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.22397|4x|7a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.22594|4x|4a6164656420627574206163746564206b657074206b657074207a6f6d62696573204a61646564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.44543|4x|64726976696e67204a6164656420666f7277617264204a6164656420627574206f78656e206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.45508|4x|4a61646564206b65707420717561696e746c79206163746564206163746564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.47879|4x|6275742064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.53788|4x|7a6f6d6269657320627574207468656972204a61646564207a6f6d62696573204a6164656420616374656420627574 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.60442|4x|7468656972206b657074206b657074204a61646564207a6f6d62696573206b65707420627574206163746564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.2.65407|4x|6275742064726976696e67206163746564206163746564204a61646564206163746564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.6140|4x|627574206b657074206b65707420746865697220746865697220717561696e746c7920717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.11728|4x|6b6570742064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.22397|4x|64726976696e67204a61646564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.22594|4x|717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.44543|4x|6163746564207a6f6d62696573206b657074206b657074207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.45508|4x|74686569722064726976696e672064726976696e67206b657074 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.47879|4x|64726976696e67206163746564207a6f6d6269657320717561696e746c7920717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.53788|4x|666f7277617264204a61646564206163746564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.60442|4x|717561696e746c79206f78656e20717561696e746c79204a61646564206163746564204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.3.65407|4x|64726976696e67206b65707420746865697220627574207a6f6d62696573204a61646564206f78656e20666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.6140|4|acted +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.11728|4x|64726976696e67207a6f6d62696573206b657074206f78656e206163746564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.22397|4x|6f78656e20717561696e746c79206275742064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.22594|4x|666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.44543|4x|666f7277617264204a6164656420627574204a61646564204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.45508|4x|64726976696e67206b657074207a6f6d626965732061637465642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.47879|4x|64726976696e672064726976696e67204a6164656420616374656420717561696e746c7920627574 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.53788|4x|6b6570742064726976696e67206b65707420717561696e746c79204a6164656420627574206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.60442|4x|64726976696e672064726976696e67207a6f6d6269657320746865697220717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.6.7.8.3.1.4.65407|4x|6275742064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.6140|4x|746865697220666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.11728|4x|6f78656e2064726976696e6720666f7277617264206b657074206f78656e204a61646564 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.22397|4|their +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.22594|4x|666f7277617264206f78656e206b6570742064726976696e67206f78656e204a616465642064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.44543|4x|6f78656e20627574206f78656e +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.45508|4x|666f7277617264207a6f6d62696573207a6f6d62696573207468656972206b657074 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.47879|4x|7a6f6d62696573206163746564207a6f6d62696573204a6164656420666f72776172642064726976696e67207a6f6d626965732074686569722064726976696e67 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.53788|4|Jaded +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.60442|4x|717561696e746c79206f78656e20666f72776172642064726976696e67206b657074207a6f6d62696573206163746564206f78656e20627574 +1.3.6.1.4.1.2620.1.6.7.8.3.1.5.65407|4x|6163746564207a6f6d626965732064726976696e672061637465642074686569722062757420627574206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.6140|2|9 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.11728|2|31 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.22397|2|13 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.22594|2|4 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.44543|2|20 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.45508|2|11 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.47879|2|16 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.53788|2|10 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.60442|2|16 +1.3.6.1.4.1.2620.1.6.7.8.3.1.6.65407|2|8 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.10601|66|10601 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.10959|66|10959 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.12120|66|12120 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.17422|66|17422 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.18052|66|18052 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.22579|66|22579 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.42492|66|42492 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.49819|66|49819 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.52641|66|52641 +1.3.6.1.4.1.2620.1.6.7.9.1.1.1.53889|66|53889 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.10601|4|forward +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.10959|4|but +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.12120|4|acted +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.17422|4x|7a6f6d6269657320627574207a6f6d6269657320627574206163746564207468656972 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.18052|4x|4a6164656420666f727761726420666f7277617264206b6570742062757420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.22579|4x|6f78656e206b6570742064726976696e67206f78656e207468656972 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.42492|4x|6f78656e20616374656420627574204a61646564 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.49819|4x|6163746564206f78656e2062757420666f7277617264 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.52641|4x|4a6164656420717561696e746c79206b657074204a61646564206163746564206f78656e20616374656420627574 +1.3.6.1.4.1.2620.1.6.7.9.1.1.2.53889|4x|627574207a6f6d6269657320717561696e746c79206f78656e20717561696e746c7920717561696e746c79207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.6.8.0|2|2 +1.3.6.1.4.1.2620.1.6.9.2.0|64x|eba02a17 +1.3.6.1.4.1.2620.1.6.9.3.0|64x|7507646f +1.3.6.1.4.1.2620.1.6.9.4.0|64x|e6a80b6a +1.3.6.1.4.1.2620.1.6.9.5.0|2|16 +1.3.6.1.4.1.2620.1.6.9.6.0|4x|6f78656e207a6f6d62696573204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.6.9.10.0|2|2 +1.3.6.1.4.1.2620.1.6.10.0|2|2 +1.3.6.1.4.1.2620.1.6.11.1.0|4|quaintly +1.3.6.1.4.1.2620.1.6.12.0|2|5 +1.3.6.1.4.1.2620.1.6.13.0|4x|7a6f6d62696573206f78656e20717561696e746c7920627574204a61646564206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.15.0|2|2 +1.3.6.1.4.1.2620.1.6.16.3.0|4|1711BA4008 +1.3.6.1.4.1.2620.1.6.16.7.0|4|Check Point 3200 +1.3.6.1.4.1.2620.1.6.16.9.0|4|CheckPoint +1.3.6.1.4.1.2620.1.6.16.10.0|4|3000 Appliance +1.3.6.1.4.1.2620.1.6.50.1.1.1.566|66|566 +1.3.6.1.4.1.2620.1.6.50.1.1.1.3111|66|3111 +1.3.6.1.4.1.2620.1.6.50.1.1.1.6288|66|6288 +1.3.6.1.4.1.2620.1.6.50.1.1.1.6428|66|6428 +1.3.6.1.4.1.2620.1.6.50.1.1.1.17910|66|17910 +1.3.6.1.4.1.2620.1.6.50.1.1.1.28229|66|28229 +1.3.6.1.4.1.2620.1.6.50.1.1.1.33908|66|33908 +1.3.6.1.4.1.2620.1.6.50.1.1.1.34796|66|34796 +1.3.6.1.4.1.2620.1.6.50.1.1.1.52824|66|52824 +1.3.6.1.4.1.2620.1.6.50.1.1.1.63804|66|63804 +1.3.6.1.4.1.2620.1.6.50.1.1.2.566|2|13 +1.3.6.1.4.1.2620.1.6.50.1.1.2.3111|2|20 +1.3.6.1.4.1.2620.1.6.50.1.1.2.6288|2|15 +1.3.6.1.4.1.2620.1.6.50.1.1.2.6428|2|28 +1.3.6.1.4.1.2620.1.6.50.1.1.2.17910|2|12 +1.3.6.1.4.1.2620.1.6.50.1.1.2.28229|2|24 +1.3.6.1.4.1.2620.1.6.50.1.1.2.33908|2|12 +1.3.6.1.4.1.2620.1.6.50.1.1.2.34796|2|5 +1.3.6.1.4.1.2620.1.6.50.1.1.2.52824|2|22 +1.3.6.1.4.1.2620.1.6.50.1.1.2.63804|2|6 +1.3.6.1.4.1.2620.1.6.50.1.1.3.566|4x|4a6164656420666f7277617264204a61646564206f78656e20746865697220666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.6.50.1.1.3.3111|4x|6163746564206f78656e20717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.6.50.1.1.3.6288|4x|64726976696e672061637465642061637465642064726976696e67206f78656e20666f7277617264206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.6.50.1.1.3.6428|4x|616374656420717561696e746c792064726976696e67207a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.2620.1.6.50.1.1.3.17910|4x|4a61646564204a61646564206f78656e +1.3.6.1.4.1.2620.1.6.50.1.1.3.28229|4x|7a6f6d62696573206b657074206b657074206275742064726976696e67 +1.3.6.1.4.1.2620.1.6.50.1.1.3.33908|4x|6b657074206f78656e204a61646564 +1.3.6.1.4.1.2620.1.6.50.1.1.3.34796|4x|64726976696e6720627574206f78656e2064726976696e6720666f7277617264206f78656e206f78656e +1.3.6.1.4.1.2620.1.6.50.1.1.3.52824|4x|7a6f6d62696573206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.6.50.1.1.3.63804|4x|616374656420746865697220717561696e746c792064726976696e6720717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.6.50.1.1.4.566|64x|beb85226 +1.3.6.1.4.1.2620.1.6.50.1.1.4.3111|64x|ecea0df3 +1.3.6.1.4.1.2620.1.6.50.1.1.4.6288|64x|1f6a2bf9 +1.3.6.1.4.1.2620.1.6.50.1.1.4.6428|64x|332978a4 +1.3.6.1.4.1.2620.1.6.50.1.1.4.17910|64x|9571b866 +1.3.6.1.4.1.2620.1.6.50.1.1.4.28229|64x|2088a003 +1.3.6.1.4.1.2620.1.6.50.1.1.4.33908|64x|4265a81f +1.3.6.1.4.1.2620.1.6.50.1.1.4.34796|64x|7bfb79b5 +1.3.6.1.4.1.2620.1.6.50.1.1.4.52824|64x|7e06453b +1.3.6.1.4.1.2620.1.6.50.1.1.4.63804|64x|7edf34de +1.3.6.1.4.1.2620.1.6.50.1.1.5.566|64x|505d0e07 +1.3.6.1.4.1.2620.1.6.50.1.1.5.3111|64x|f744d059 +1.3.6.1.4.1.2620.1.6.50.1.1.5.6288|64x|43bb17ad +1.3.6.1.4.1.2620.1.6.50.1.1.5.6428|64x|d78aa43c +1.3.6.1.4.1.2620.1.6.50.1.1.5.17910|64x|0b66bfd8 +1.3.6.1.4.1.2620.1.6.50.1.1.5.28229|64x|4dde8483 +1.3.6.1.4.1.2620.1.6.50.1.1.5.33908|64x|2a3fd155 +1.3.6.1.4.1.2620.1.6.50.1.1.5.34796|64x|6d951b27 +1.3.6.1.4.1.2620.1.6.50.1.1.5.52824|64x|96ea84dc +1.3.6.1.4.1.2620.1.6.50.1.1.5.63804|64x|bffa5e23 +1.3.6.1.4.1.2620.1.6.50.1.1.6.566|2|8 +1.3.6.1.4.1.2620.1.6.50.1.1.6.3111|2|4 +1.3.6.1.4.1.2620.1.6.50.1.1.6.6288|2|4 +1.3.6.1.4.1.2620.1.6.50.1.1.6.6428|2|23 +1.3.6.1.4.1.2620.1.6.50.1.1.6.17910|2|9 +1.3.6.1.4.1.2620.1.6.50.1.1.6.28229|2|31 +1.3.6.1.4.1.2620.1.6.50.1.1.6.33908|2|28 +1.3.6.1.4.1.2620.1.6.50.1.1.6.34796|2|20 +1.3.6.1.4.1.2620.1.6.50.1.1.6.52824|2|18 +1.3.6.1.4.1.2620.1.6.50.1.1.6.63804|2|17 +1.3.6.1.4.1.2620.1.6.50.1.1.7.566|2|10 +1.3.6.1.4.1.2620.1.6.50.1.1.7.3111|2|29 +1.3.6.1.4.1.2620.1.6.50.1.1.7.6288|2|18 +1.3.6.1.4.1.2620.1.6.50.1.1.7.6428|2|14 +1.3.6.1.4.1.2620.1.6.50.1.1.7.17910|2|14 +1.3.6.1.4.1.2620.1.6.50.1.1.7.28229|2|21 +1.3.6.1.4.1.2620.1.6.50.1.1.7.33908|2|5 +1.3.6.1.4.1.2620.1.6.50.1.1.7.34796|2|28 +1.3.6.1.4.1.2620.1.6.50.1.1.7.52824|2|16 +1.3.6.1.4.1.2620.1.6.50.1.1.7.63804|2|19 +1.3.6.1.4.1.2620.1.6.50.1.1.8.566|4x|4a61646564206f78656e20746865697220717561696e746c792064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.50.1.1.8.3111|4x|64726976696e67206f78656e +1.3.6.1.4.1.2620.1.6.50.1.1.8.6288|4x|6b657074204a6164656420717561696e746c79206b65707420746865697220666f7277617264 +1.3.6.1.4.1.2620.1.6.50.1.1.8.6428|4x|666f7277617264207468656972206b657074206b6570742064726976696e67206163746564 +1.3.6.1.4.1.2620.1.6.50.1.1.8.17910|4x|4a61646564204a61646564204a6164656420717561696e746c79206f78656e204a6164656420666f727761726420627574 +1.3.6.1.4.1.2620.1.6.50.1.1.8.28229|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.6.50.1.1.8.33908|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.6.50.1.1.8.34796|4x|666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.6.50.1.1.8.52824|4x|717561696e746c79204a61646564206f78656e206b657074206b657074207468656972 +1.3.6.1.4.1.2620.1.6.50.1.1.8.63804|4x|7a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.6.50.1.1.9.566|4x|717561696e746c792064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.6.50.1.1.9.3111|4x|7a6f6d6269657320666f727761726420616374656420717561696e746c79207a6f6d6269657320717561696e746c792064726976696e67206b657074 +1.3.6.1.4.1.2620.1.6.50.1.1.9.6288|4x|6b657074206b657074204a616465642062757420666f727761726420717561696e746c79204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.50.1.1.9.6428|4x|717561696e746c79206163746564206163746564206f78656e2061637465642074686569722064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.6.50.1.1.9.17910|4x|627574207468656972207468656972206f78656e2064726976696e67206f78656e +1.3.6.1.4.1.2620.1.6.50.1.1.9.28229|4x|61637465642061637465642074686569722064726976696e67204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.6.50.1.1.9.33908|4x|64726976696e672064726976696e6720746865697220616374656420627574207a6f6d62696573207468656972206f78656e206f78656e +1.3.6.1.4.1.2620.1.6.50.1.1.9.34796|4|kept +1.3.6.1.4.1.2620.1.6.50.1.1.9.52824|4x|4a61646564206163746564206b65707420627574206b657074206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.6.50.1.1.9.63804|4x|666f7277617264206f78656e207a6f6d62696573206b657074207468656972207468656972204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.6.50.1.1.10.566|2|17 +1.3.6.1.4.1.2620.1.6.50.1.1.10.3111|2|14 +1.3.6.1.4.1.2620.1.6.50.1.1.10.6288|2|4 +1.3.6.1.4.1.2620.1.6.50.1.1.10.6428|2|8 +1.3.6.1.4.1.2620.1.6.50.1.1.10.17910|2|16 +1.3.6.1.4.1.2620.1.6.50.1.1.10.28229|2|22 +1.3.6.1.4.1.2620.1.6.50.1.1.10.33908|2|15 +1.3.6.1.4.1.2620.1.6.50.1.1.10.34796|2|13 +1.3.6.1.4.1.2620.1.6.50.1.1.10.52824|2|28 +1.3.6.1.4.1.2620.1.6.50.1.1.10.63804|2|12 +1.3.6.1.4.1.2620.1.6.51.1.1.6958|66|6958 +1.3.6.1.4.1.2620.1.6.51.1.1.8421|66|8421 +1.3.6.1.4.1.2620.1.6.51.1.1.18192|66|18192 +1.3.6.1.4.1.2620.1.6.51.1.1.21212|66|21212 +1.3.6.1.4.1.2620.1.6.51.1.1.25554|66|25554 +1.3.6.1.4.1.2620.1.6.51.1.1.56993|66|56993 +1.3.6.1.4.1.2620.1.6.51.1.1.60242|66|60242 +1.3.6.1.4.1.2620.1.6.51.1.1.60407|66|60407 +1.3.6.1.4.1.2620.1.6.51.1.1.64345|66|64345 +1.3.6.1.4.1.2620.1.6.51.1.1.64736|66|64736 +1.3.6.1.4.1.2620.1.6.51.1.2.6958|64x|5c4a33a8 +1.3.6.1.4.1.2620.1.6.51.1.2.8421|64x|af51911b +1.3.6.1.4.1.2620.1.6.51.1.2.18192|64x|4b3a3aa6 +1.3.6.1.4.1.2620.1.6.51.1.2.21212|64x|6715a987 +1.3.6.1.4.1.2620.1.6.51.1.2.25554|64x|ad84330f +1.3.6.1.4.1.2620.1.6.51.1.2.56993|64x|24bbe41b +1.3.6.1.4.1.2620.1.6.51.1.2.60242|64x|e951ef3b +1.3.6.1.4.1.2620.1.6.51.1.2.60407|64x|10067b32 +1.3.6.1.4.1.2620.1.6.51.1.2.64345|64x|73b6c619 +1.3.6.1.4.1.2620.1.6.51.1.2.64736|64x|20f20d94 +1.3.6.1.4.1.2620.1.6.51.1.3.6958|64x|d458ee8c +1.3.6.1.4.1.2620.1.6.51.1.3.8421|64x|535f0254 +1.3.6.1.4.1.2620.1.6.51.1.3.18192|64x|947b6f58 +1.3.6.1.4.1.2620.1.6.51.1.3.21212|64x|6fd60163 +1.3.6.1.4.1.2620.1.6.51.1.3.25554|64x|2c853379 +1.3.6.1.4.1.2620.1.6.51.1.3.56993|64x|506a582b +1.3.6.1.4.1.2620.1.6.51.1.3.60242|64x|658de17e +1.3.6.1.4.1.2620.1.6.51.1.3.60407|64x|b27c7a79 +1.3.6.1.4.1.2620.1.6.51.1.3.64345|64x|9eb81eab +1.3.6.1.4.1.2620.1.6.51.1.3.64736|64x|13e8a7df +1.3.6.1.4.1.2620.1.6.51.1.4.6958|64x|e2e130a0 +1.3.6.1.4.1.2620.1.6.51.1.4.8421|64x|f108d561 +1.3.6.1.4.1.2620.1.6.51.1.4.18192|64x|9527983c +1.3.6.1.4.1.2620.1.6.51.1.4.21212|64x|aa840c0a +1.3.6.1.4.1.2620.1.6.51.1.4.25554|64x|c94e5d9f +1.3.6.1.4.1.2620.1.6.51.1.4.56993|64x|0f2b56bd +1.3.6.1.4.1.2620.1.6.51.1.4.60242|64x|75073968 +1.3.6.1.4.1.2620.1.6.51.1.4.60407|64x|41549f77 +1.3.6.1.4.1.2620.1.6.51.1.4.64345|64x|dcefc97c +1.3.6.1.4.1.2620.1.6.51.1.4.64736|64x|0d6d10ae +1.3.6.1.4.1.2620.1.6.51.1.5.6958|4x|717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.6.51.1.5.8421|4x|6f78656e20627574204a6164656420627574206163746564 +1.3.6.1.4.1.2620.1.6.51.1.5.18192|4x|6b657074206b6570742064726976696e67207468656972204a61646564206b657074 +1.3.6.1.4.1.2620.1.6.51.1.5.21212|4x|6f78656e207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.6.51.1.5.25554|4x|717561696e746c79206f78656e204a616465642062757420627574207468656972206b65707420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.6.51.1.5.56993|4x|666f72776172642062757420616374656420746865697220746865697220666f727761726420666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.6.51.1.5.60242|4x|7468656972206163746564206163746564 +1.3.6.1.4.1.2620.1.6.51.1.5.60407|4x|717561696e746c792074686569722064726976696e67 +1.3.6.1.4.1.2620.1.6.51.1.5.64345|4x|717561696e746c79207468656972204a6164656420627574 +1.3.6.1.4.1.2620.1.6.51.1.5.64736|4|forward +1.3.6.1.4.1.2620.1.6.51.1.6.6958|2|25 +1.3.6.1.4.1.2620.1.6.51.1.6.8421|2|13 +1.3.6.1.4.1.2620.1.6.51.1.6.18192|2|19 +1.3.6.1.4.1.2620.1.6.51.1.6.21212|2|25 +1.3.6.1.4.1.2620.1.6.51.1.6.25554|2|8 +1.3.6.1.4.1.2620.1.6.51.1.6.56993|2|29 +1.3.6.1.4.1.2620.1.6.51.1.6.60242|2|2 +1.3.6.1.4.1.2620.1.6.51.1.6.60407|2|0 +1.3.6.1.4.1.2620.1.6.51.1.6.64345|2|22 +1.3.6.1.4.1.2620.1.6.51.1.6.64736|2|1 +1.3.6.1.4.1.2620.1.6.101.0|2|17 +1.3.6.1.4.1.2620.1.6.102.0|4x|6b657074206b657074206f78656e20717561696e746c792062757420666f7277617264206163746564 +1.3.6.1.4.1.2620.1.6.103.0|4x|6b6570742062757420717561696e746c79 +1.3.6.1.4.1.2620.1.6.999.0|2|20 +1.3.6.1.4.1.2620.1.7.1.0|4x|666f72776172642064726976696e6720666f7277617264206163746564204a616465642064726976696e67207a6f6d6269657320666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.7.2.0|2|13 +1.3.6.1.4.1.2620.1.7.3.0|2|6 +1.3.6.1.4.1.2620.1.7.4.0|2|29 +1.3.6.1.4.1.2620.1.7.5.0|4|kept +1.3.6.1.4.1.2620.1.7.6.0|2|9 +1.3.6.1.4.1.2620.1.7.7.1.1.4793|66|4793 +1.3.6.1.4.1.2620.1.7.7.1.1.16018|66|16018 +1.3.6.1.4.1.2620.1.7.7.1.1.17937|66|17937 +1.3.6.1.4.1.2620.1.7.7.1.1.22118|66|22118 +1.3.6.1.4.1.2620.1.7.7.1.1.29069|66|29069 +1.3.6.1.4.1.2620.1.7.7.1.1.32415|66|32415 +1.3.6.1.4.1.2620.1.7.7.1.1.32468|66|32468 +1.3.6.1.4.1.2620.1.7.7.1.1.40369|66|40369 +1.3.6.1.4.1.2620.1.7.7.1.1.44867|66|44867 +1.3.6.1.4.1.2620.1.7.7.1.1.54964|66|54964 +1.3.6.1.4.1.2620.1.7.7.1.2.4793|4x|746865697220616374656420666f7277617264206163746564206f78656e20666f7277617264206163746564 +1.3.6.1.4.1.2620.1.7.7.1.2.16018|4x|4a616465642064726976696e67206163746564 +1.3.6.1.4.1.2620.1.7.7.1.2.17937|4x|7a6f6d62696573204a61646564207a6f6d626965732074686569722062757420627574207468656972 +1.3.6.1.4.1.2620.1.7.7.1.2.22118|4x|6f78656e20627574206f78656e20746865697220717561696e746c79206f78656e2064726976696e67207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.7.7.1.2.29069|4x|6163746564206163746564204a61646564204a6164656420666f7277617264207a6f6d62696573207468656972206163746564 +1.3.6.1.4.1.2620.1.7.7.1.2.32415|4x|6b65707420717561696e746c7920627574 +1.3.6.1.4.1.2620.1.7.7.1.2.32468|4x|61637465642064726976696e672064726976696e6720717561696e746c79207468656972204a616465642061637465642064726976696e67206b657074 +1.3.6.1.4.1.2620.1.7.7.1.2.40369|4x|717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.7.7.1.2.44867|4x|717561696e746c792074686569722064726976696e67206163746564206163746564204a61646564 +1.3.6.1.4.1.2620.1.7.7.1.2.54964|4x|666f727761726420666f7277617264207a6f6d6269657320666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.7.7.1.3.4793|4x|746865697220717561696e746c79206b657074206163746564206b65707420616374656420616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.7.7.1.3.16018|4x|7468656972206f78656e204a616465642064726976696e67206f78656e204a6164656420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.7.7.1.3.17937|4x|717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.1.7.7.1.3.22118|4x|666f727761726420627574206b65707420717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.7.7.1.3.29069|4x|746865697220666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.7.7.1.3.32415|4x|4a616465642062757420627574206f78656e2061637465642061637465642061637465642064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.7.7.1.3.32468|4x|7468656972204a6164656420627574206b65707420616374656420627574 +1.3.6.1.4.1.2620.1.7.7.1.3.40369|4|zombies +1.3.6.1.4.1.2620.1.7.7.1.3.44867|4x|6f78656e204a61646564206f78656e207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.2620.1.7.7.1.3.54964|4x|4a61646564206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.7.7.1.4.4793|4|oxen +1.3.6.1.4.1.2620.1.7.7.1.4.16018|4x|7a6f6d62696573206b6570742064726976696e6720627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.7.7.1.4.17937|4x|717561696e746c7920627574206163746564204a61646564207468656972206163746564207a6f6d626965732062757420666f7277617264 +1.3.6.1.4.1.2620.1.7.7.1.4.22118|4x|6b65707420666f72776172642064726976696e6720717561696e746c79207a6f6d62696573206b65707420666f72776172642062757420627574 +1.3.6.1.4.1.2620.1.7.7.1.4.29069|4x|4a6164656420627574206b657074206f78656e206b657074204a61646564206163746564204a61646564204a61646564 +1.3.6.1.4.1.2620.1.7.7.1.4.32415|4|driving +1.3.6.1.4.1.2620.1.7.7.1.4.32468|4x|64726976696e67206b657074204a616465642064726976696e6720717561696e746c7920717561696e746c79207a6f6d626965732074686569722064726976696e67 +1.3.6.1.4.1.2620.1.7.7.1.4.40369|4x|717561696e746c79207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.7.7.1.4.44867|4x|4a61646564207468656972 +1.3.6.1.4.1.2620.1.7.7.1.4.54964|4x|6b657074206275742064726976696e67 +1.3.6.1.4.1.2620.1.7.7.1.5.4793|4x|627574207a6f6d6269657320717561696e746c7920627574206b65707420717561696e746c7920666f727761726420666f7277617264206f78656e +1.3.6.1.4.1.2620.1.7.7.1.5.16018|4x|6163746564207468656972 +1.3.6.1.4.1.2620.1.7.7.1.5.17937|4x|6f78656e20717561696e746c79206163746564206163746564207468656972204a61646564206163746564206f78656e +1.3.6.1.4.1.2620.1.7.7.1.5.22118|4x|64726976696e672064726976696e67206163746564 +1.3.6.1.4.1.2620.1.7.7.1.5.29069|4x|666f72776172642064726976696e6720616374656420616374656420717561696e746c79206b657074206b657074206b657074 +1.3.6.1.4.1.2620.1.7.7.1.5.32415|4x|717561696e746c79207468656972206b657074207468656972 +1.3.6.1.4.1.2620.1.7.7.1.5.32468|4x|4a6164656420746865697220627574 +1.3.6.1.4.1.2620.1.7.7.1.5.40369|4x|7a6f6d62696573206b657074206b6570742064726976696e67206b657074 +1.3.6.1.4.1.2620.1.7.7.1.5.44867|4x|4a6164656420666f727761726420627574 +1.3.6.1.4.1.2620.1.7.7.1.5.54964|4x|666f727761726420746865697220666f7277617264 +1.3.6.1.4.1.2620.1.7.101.0|2|21 +1.3.6.1.4.1.2620.1.7.102.0|4x|4a6164656420616374656420616374656420746865697220746865697220627574 +1.3.6.1.4.1.2620.1.7.103.0|4|Jaded +1.3.6.1.4.1.2620.1.8.1.0|4x|717561696e746c79204a616465642064726976696e67206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.8.2.0|2|3 +1.3.6.1.4.1.2620.1.8.3.0|2|29 +1.3.6.1.4.1.2620.1.8.4.0|4x|6163746564207a6f6d6269657320746865697220717561696e746c7920717561696e746c79206b657074207a6f6d626965732064726976696e67206b657074 +1.3.6.1.4.1.2620.1.8.5.0|4x|4a61646564207468656972206f78656e206f78656e2064726976696e6720616374656420627574204a61646564 +1.3.6.1.4.1.2620.1.8.6.1.0|2|30 +1.3.6.1.4.1.2620.1.8.6.2.0|2|12 +1.3.6.1.4.1.2620.1.8.7.1.0|4x|64726976696e67206163746564 +1.3.6.1.4.1.2620.1.8.7.2.0|4x|7a6f6d6269657320666f7277617264206f78656e206f78656e206b65707420717561696e746c7920627574207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.8.8.1.0|4x|64726976696e67207a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.8.8.2.0|2|18 +1.3.6.1.4.1.2620.1.8.8.3.0|2|22 +1.3.6.1.4.1.2620.1.8.8.4.0|2|11 +1.3.6.1.4.1.2620.1.8.8.5.0|4|Jaded +1.3.6.1.4.1.2620.1.8.9.1.0|2|2 +1.3.6.1.4.1.2620.1.8.9.2.0|4x|4a61646564206b6570742064726976696e672064726976696e67204a6164656420666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.8.101.0|2|6 +1.3.6.1.4.1.2620.1.8.102.0|4x|4a616465642064726976696e67206275742061637465642062757420746865697220717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.8.103.0|4|quaintly +1.3.6.1.4.1.2620.1.9.1.0|4x|64726976696e67204a6164656420616374656420717561696e746c7920717561696e746c792062757420627574207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.9.2.0|2|8 +1.3.6.1.4.1.2620.1.9.3.0|2|20 +1.3.6.1.4.1.2620.1.9.4.0|2|19 +1.3.6.1.4.1.2620.1.9.5.0|2|2 +1.3.6.1.4.1.2620.1.9.101.0|2|27 +1.3.6.1.4.1.2620.1.9.102.0|4x|64726976696e67207a6f6d6269657320666f72776172642062757420616374656420666f72776172642061637465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.9.103.0|4x|6f78656e20666f7277617264206f78656e207468656972206163746564 +1.3.6.1.4.1.2620.1.11.1.0|4x|6f78656e206f78656e207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.11.2.0|2|12 +1.3.6.1.4.1.2620.1.11.3.0|2|25 +1.3.6.1.4.1.2620.1.11.4.0|2|15 +1.3.6.1.4.1.2620.1.11.5.0|2|28 +1.3.6.1.4.1.2620.1.11.7.1.1.741|66|741 +1.3.6.1.4.1.2620.1.11.7.1.1.7546|66|7546 +1.3.6.1.4.1.2620.1.11.7.1.1.26226|66|26226 +1.3.6.1.4.1.2620.1.11.7.1.1.27222|66|27222 +1.3.6.1.4.1.2620.1.11.7.1.1.28924|66|28924 +1.3.6.1.4.1.2620.1.11.7.1.1.35044|66|35044 +1.3.6.1.4.1.2620.1.11.7.1.1.42557|66|42557 +1.3.6.1.4.1.2620.1.11.7.1.1.46132|66|46132 +1.3.6.1.4.1.2620.1.11.7.1.1.48689|66|48689 +1.3.6.1.4.1.2620.1.11.7.1.1.50734|66|50734 +1.3.6.1.4.1.2620.1.11.7.1.2.741|4x|666f72776172642064726976696e67207468656972206b657074206b6570742074686569722064726976696e67207468656972 +1.3.6.1.4.1.2620.1.11.7.1.2.7546|4x|746865697220717561696e746c792061637465642064726976696e67206b657074206f78656e204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.2.26226|4x|7a6f6d6269657320717561696e746c79206b657074204a6164656420717561696e746c7920627574207468656972 +1.3.6.1.4.1.2620.1.11.7.1.2.27222|4|but +1.3.6.1.4.1.2620.1.11.7.1.2.28924|4x|4a61646564206f78656e20627574206163746564207468656972207a6f6d6269657320717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.11.7.1.2.35044|4x|666f727761726420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.11.7.1.2.42557|4x|666f727761726420666f7277617264206b6570742062757420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.11.7.1.2.46132|4x|666f72776172642064726976696e67206b6570742064726976696e67206f78656e +1.3.6.1.4.1.2620.1.11.7.1.2.48689|4x|62757420627574206b657074206f78656e204a616465642062757420717561696e746c7920717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.11.7.1.2.50734|4|acted +1.3.6.1.4.1.2620.1.11.7.1.3.741|4x|6b657074206f78656e206f78656e207a6f6d62696573206163746564204a61646564207a6f6d6269657320717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.11.7.1.3.7546|4x|6f78656e207a6f6d6269657320717561696e746c7920627574 +1.3.6.1.4.1.2620.1.11.7.1.3.26226|4x|64726976696e67206163746564204a6164656420627574207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.11.7.1.3.27222|4|forward +1.3.6.1.4.1.2620.1.11.7.1.3.28924|4x|7a6f6d626965732061637465642074686569722064726976696e6720717561696e746c792064726976696e6720666f7277617264206f78656e206f78656e +1.3.6.1.4.1.2620.1.11.7.1.3.35044|4x|62757420627574206f78656e207468656972206275742064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.3.42557|4x|4a61646564207468656972207a6f6d6269657320627574206275742064726976696e6720666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.11.7.1.3.46132|4x|4a61646564207468656972206163746564 +1.3.6.1.4.1.2620.1.11.7.1.3.48689|4|Jaded +1.3.6.1.4.1.2620.1.11.7.1.3.50734|4x|64726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.4.741|4x|7468656972207a6f6d6269657320666f7277617264206b65707420627574204a616465642062757420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.11.7.1.4.7546|4|Jaded +1.3.6.1.4.1.2620.1.11.7.1.4.26226|4x|6f78656e206f78656e207468656972204a61646564206163746564 +1.3.6.1.4.1.2620.1.11.7.1.4.27222|4x|4a61646564206b65707420627574207468656972204a61646564207a6f6d6269657320666f72776172642064726976696e67206f78656e +1.3.6.1.4.1.2620.1.11.7.1.4.28924|4x|6275742064726976696e672062757420746865697220717561696e746c7920717561696e746c79206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.4.35044|4x|4a61646564206f78656e207468656972206f78656e2062757420717561696e746c7920717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.11.7.1.4.42557|4x|4a616465642074686569722064726976696e672062757420666f7277617264 +1.3.6.1.4.1.2620.1.11.7.1.4.46132|4x|666f7277617264204a61646564206163746564206b657074 +1.3.6.1.4.1.2620.1.11.7.1.4.48689|4x|64726976696e672062757420717561696e746c7920717561696e746c7920627574206b657074206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.4.50734|4x|6f78656e20616374656420616374656420627574207a6f6d6269657320666f72776172642064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.5.741|4x|6f78656e20627574 +1.3.6.1.4.1.2620.1.11.7.1.5.7546|4x|6275742064726976696e6720717561696e746c79206f78656e207a6f6d62696573206f78656e206f78656e2064726976696e67206b657074 +1.3.6.1.4.1.2620.1.11.7.1.5.26226|4x|4a61646564206f78656e2061637465642064726976696e67206163746564206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.11.7.1.5.27222|4x|74686569722062757420666f7277617264207a6f6d6269657320717561696e746c79204a6164656420627574 +1.3.6.1.4.1.2620.1.11.7.1.5.28924|4x|6b65707420746865697220717561696e746c7920717561696e746c79206f78656e207a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.11.7.1.5.35044|4|forward +1.3.6.1.4.1.2620.1.11.7.1.5.42557|4x|6f78656e20717561696e746c79206163746564204a61646564206f78656e +1.3.6.1.4.1.2620.1.11.7.1.5.46132|4x|64726976696e67206163746564 +1.3.6.1.4.1.2620.1.11.7.1.5.48689|4|Jaded +1.3.6.1.4.1.2620.1.11.7.1.5.50734|4x|6f78656e20627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.11.101.0|2|16 +1.3.6.1.4.1.2620.1.11.102.0|4x|7a6f6d626965732064726976696e67204a61646564206f78656e204a61646564 +1.3.6.1.4.1.2620.1.11.103.0|4x|4a61646564206f78656e20666f7277617264207a6f6d62696573207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.16.11.0|2|21 +1.3.6.1.4.1.2620.1.16.12.0|2|6 +1.3.6.1.4.1.2620.1.16.13.0|2|0 +1.3.6.1.4.1.2620.1.16.22.1.1.1.2342|66|2342 +1.3.6.1.4.1.2620.1.16.22.1.1.1.3908|66|3908 +1.3.6.1.4.1.2620.1.16.22.1.1.1.6949|66|6949 +1.3.6.1.4.1.2620.1.16.22.1.1.1.23425|66|23425 +1.3.6.1.4.1.2620.1.16.22.1.1.1.23778|66|23778 +1.3.6.1.4.1.2620.1.16.22.1.1.1.25546|66|25546 +1.3.6.1.4.1.2620.1.16.22.1.1.1.47306|66|47306 +1.3.6.1.4.1.2620.1.16.22.1.1.1.50073|66|50073 +1.3.6.1.4.1.2620.1.16.22.1.1.1.60638|66|60638 +1.3.6.1.4.1.2620.1.16.22.1.1.1.63250|66|63250 +1.3.6.1.4.1.2620.1.16.22.1.1.2.2342|66|35672 +1.3.6.1.4.1.2620.1.16.22.1.1.2.3908|66|44797 +1.3.6.1.4.1.2620.1.16.22.1.1.2.6949|66|31692 +1.3.6.1.4.1.2620.1.16.22.1.1.2.23425|66|6567 +1.3.6.1.4.1.2620.1.16.22.1.1.2.23778|66|39079 +1.3.6.1.4.1.2620.1.16.22.1.1.2.25546|66|43639 +1.3.6.1.4.1.2620.1.16.22.1.1.2.47306|66|63723 +1.3.6.1.4.1.2620.1.16.22.1.1.2.50073|66|20112 +1.3.6.1.4.1.2620.1.16.22.1.1.2.60638|66|50359 +1.3.6.1.4.1.2620.1.16.22.1.1.2.63250|66|42642 +1.3.6.1.4.1.2620.1.16.22.1.1.3.2342|4|driving +1.3.6.1.4.1.2620.1.16.22.1.1.3.3908|4x|627574206b657074206f78656e206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.3.6949|4|forward +1.3.6.1.4.1.2620.1.16.22.1.1.3.23425|4x|666f727761726420616374656420627574207a6f6d62696573206b657074207468656972204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.16.22.1.1.3.23778|4x|7a6f6d6269657320717561696e746c79207a6f6d6269657320627574206b65707420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.3.25546|4x|7468656972206163746564204a61646564 +1.3.6.1.4.1.2620.1.16.22.1.1.3.47306|4x|666f7277617264206b657074206f78656e +1.3.6.1.4.1.2620.1.16.22.1.1.3.50073|4x|64726976696e67206f78656e20717561696e746c79206f78656e206b657074206f78656e204a61646564206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.3.60638|4x|4a61646564204a61646564 +1.3.6.1.4.1.2620.1.16.22.1.1.3.63250|4x|6163746564204a616465642064726976696e6720666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.22.1.1.4.2342|4x|64726976696e672064726976696e67206f78656e204a61646564207a6f6d62696573207a6f6d62696573206f78656e204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.4.3908|4x|6163746564206b65707420627574206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.4.6949|4x|6163746564204a61646564204a61646564206f78656e206f78656e +1.3.6.1.4.1.2620.1.16.22.1.1.4.23425|4x|7a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.16.22.1.1.4.23778|4x|6275742064726976696e672064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.4.25546|4x|62757420666f7277617264206b657074206163746564206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.16.22.1.1.4.47306|4|kept +1.3.6.1.4.1.2620.1.16.22.1.1.4.50073|4x|64726976696e672064726976696e67206b65707420627574 +1.3.6.1.4.1.2620.1.16.22.1.1.4.60638|4x|627574206b657074207468656972 +1.3.6.1.4.1.2620.1.16.22.1.1.4.63250|4x|627574206f78656e20616374656420666f7277617264206f78656e204a61646564206163746564206f78656e206163746564 +1.3.6.1.4.1.2620.1.16.22.1.1.5.2342|4x|717561696e746c7920717561696e746c7920616374656420627574 +1.3.6.1.4.1.2620.1.16.22.1.1.5.3908|4|Jaded +1.3.6.1.4.1.2620.1.16.22.1.1.5.6949|4x|6f78656e206163746564206163746564207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.5.23425|4x|746865697220746865697220666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.22.1.1.5.23778|4x|627574207468656972206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.5.25546|4x|6b65707420666f72776172642062757420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.16.22.1.1.5.47306|4x|7a6f6d626965732074686569722064726976696e67207a6f6d62696573204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.16.22.1.1.5.50073|4x|627574204a6164656420627574 +1.3.6.1.4.1.2620.1.16.22.1.1.5.60638|4x|717561696e746c79206f78656e204a61646564206f78656e206b657074206f78656e206f78656e206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.5.63250|4x|6b657074204a61646564 +1.3.6.1.4.1.2620.1.16.22.1.1.6.2342|4x|64726976696e67204a61646564206b657074204a61646564206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.6.3908|4|forward +1.3.6.1.4.1.2620.1.16.22.1.1.6.6949|4x|64726976696e67204a6164656420666f7277617264206163746564206f78656e20717561696e746c79206163746564204a61646564204a61646564 +1.3.6.1.4.1.2620.1.16.22.1.1.6.23425|4x|627574204a6164656420666f7277617264207468656972206b657074206163746564 +1.3.6.1.4.1.2620.1.16.22.1.1.6.23778|4x|7a6f6d62696573207468656972207a6f6d6269657320717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.1.16.22.1.1.6.25546|4x|4a61646564206b657074204a6164656420717561696e746c7920666f7277617264207468656972206163746564206f78656e +1.3.6.1.4.1.2620.1.16.22.1.1.6.47306|4x|666f727761726420666f727761726420666f727761726420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.16.22.1.1.6.50073|4x|666f7277617264206b657074204a61646564206b65707420717561696e746c7920666f7277617264204a6164656420616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.16.22.1.1.6.60638|4x|6b6570742064726976696e67206f78656e207a6f6d62696573206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.16.22.1.1.6.63250|4x|746865697220616374656420717561696e746c7920717561696e746c79204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.22.1.1.7.2342|4x|6b65707420627574 +1.3.6.1.4.1.2620.1.16.22.1.1.7.3908|4x|666f7277617264204a6164656420717561696e746c7920717561696e746c7920666f72776172642064726976696e67206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.7.6949|4x|64726976696e672062757420666f727761726420616374656420666f7277617264 +1.3.6.1.4.1.2620.1.16.22.1.1.7.23425|4x|62757420717561696e746c79204a616465642064726976696e6720717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.16.22.1.1.7.23778|4|quaintly +1.3.6.1.4.1.2620.1.16.22.1.1.7.25546|4x|4a6164656420666f72776172642064726976696e67206f78656e20717561696e746c7920666f7277617264207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.16.22.1.1.7.47306|4x|6f78656e20666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.7.50073|4x|4a61646564206b657074206163746564204a61646564204a61646564206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.7.60638|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.7.63250|4x|717561696e746c7920717561696e746c7920666f7277617264206b657074204a61646564206b657074207468656972 +1.3.6.1.4.1.2620.1.16.22.1.1.8.2342|4|oxen +1.3.6.1.4.1.2620.1.16.22.1.1.8.3908|4x|7a6f6d62696573207a6f6d62696573206b65707420616374656420746865697220717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.16.22.1.1.8.6949|4x|7a6f6d626965732064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.8.23425|4x|4a61646564207468656972 +1.3.6.1.4.1.2620.1.16.22.1.1.8.23778|4x|4a61646564206b657074206f78656e20746865697220627574206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.8.25546|4x|717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.22.1.1.8.47306|4x|666f7277617264206b657074206b6570742064726976696e672064726976696e67207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.16.22.1.1.8.50073|4x|6f78656e206f78656e +1.3.6.1.4.1.2620.1.16.22.1.1.8.60638|4x|7468656972207468656972204a61646564 +1.3.6.1.4.1.2620.1.16.22.1.1.8.63250|4x|4a61646564206f78656e20666f7277617264206f78656e20717561696e746c792064726976696e67206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.9.2342|4x|61637465642064726976696e672064726976696e6720666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.16.22.1.1.9.3908|4x|4a61646564206f78656e20717561696e746c7920666f727761726420746865697220746865697220666f72776172642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.22.1.1.9.6949|4x|627574206275742064726976696e67207a6f6d626965732061637465642064726976696e67207a6f6d62696573207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.16.22.1.1.9.23425|4|oxen +1.3.6.1.4.1.2620.1.16.22.1.1.9.23778|4x|6b65707420717561696e746c79206163746564207468656972206b657074206b6570742064726976696e672061637465642064726976696e67 +1.3.6.1.4.1.2620.1.16.22.1.1.9.25546|4x|6f78656e2074686569722064726976696e67204a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.16.22.1.1.9.47306|4x|61637465642074686569722064726976696e67206f78656e +1.3.6.1.4.1.2620.1.16.22.1.1.9.50073|4x|7a6f6d6269657320627574207468656972 +1.3.6.1.4.1.2620.1.16.22.1.1.9.60638|4x|717561696e746c7920746865697220666f7277617264207a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.2620.1.16.22.1.1.9.63250|4x|717561696e746c79206b65707420627574206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.22.1.1.10.2342|2|14 +1.3.6.1.4.1.2620.1.16.22.1.1.10.3908|2|28 +1.3.6.1.4.1.2620.1.16.22.1.1.10.6949|2|25 +1.3.6.1.4.1.2620.1.16.22.1.1.10.23425|2|9 +1.3.6.1.4.1.2620.1.16.22.1.1.10.23778|2|8 +1.3.6.1.4.1.2620.1.16.22.1.1.10.25546|2|4 +1.3.6.1.4.1.2620.1.16.22.1.1.10.47306|2|20 +1.3.6.1.4.1.2620.1.16.22.1.1.10.50073|2|28 +1.3.6.1.4.1.2620.1.16.22.1.1.10.60638|2|13 +1.3.6.1.4.1.2620.1.16.22.1.1.10.63250|2|10 +1.3.6.1.4.1.2620.1.16.22.2.1.1.531|2|12 +1.3.6.1.4.1.2620.1.16.22.2.1.1.2789|2|28 +1.3.6.1.4.1.2620.1.16.22.2.1.1.8268|2|13 +1.3.6.1.4.1.2620.1.16.22.2.1.1.9293|2|17 +1.3.6.1.4.1.2620.1.16.22.2.1.1.13850|2|21 +1.3.6.1.4.1.2620.1.16.22.2.1.1.18224|2|21 +1.3.6.1.4.1.2620.1.16.22.2.1.1.28872|2|8 +1.3.6.1.4.1.2620.1.16.22.2.1.1.36187|2|12 +1.3.6.1.4.1.2620.1.16.22.2.1.1.45779|2|27 +1.3.6.1.4.1.2620.1.16.22.2.1.1.56540|2|2 +1.3.6.1.4.1.2620.1.16.22.2.1.2.531|2|19 +1.3.6.1.4.1.2620.1.16.22.2.1.2.2789|2|13 +1.3.6.1.4.1.2620.1.16.22.2.1.2.8268|2|21 +1.3.6.1.4.1.2620.1.16.22.2.1.2.9293|2|21 +1.3.6.1.4.1.2620.1.16.22.2.1.2.13850|2|22 +1.3.6.1.4.1.2620.1.16.22.2.1.2.18224|2|26 +1.3.6.1.4.1.2620.1.16.22.2.1.2.28872|2|13 +1.3.6.1.4.1.2620.1.16.22.2.1.2.36187|2|18 +1.3.6.1.4.1.2620.1.16.22.2.1.2.45779|2|14 +1.3.6.1.4.1.2620.1.16.22.2.1.2.56540|2|19 +1.3.6.1.4.1.2620.1.16.22.2.1.3.531|2|13 +1.3.6.1.4.1.2620.1.16.22.2.1.3.2789|2|22 +1.3.6.1.4.1.2620.1.16.22.2.1.3.8268|2|13 +1.3.6.1.4.1.2620.1.16.22.2.1.3.9293|2|29 +1.3.6.1.4.1.2620.1.16.22.2.1.3.13850|2|7 +1.3.6.1.4.1.2620.1.16.22.2.1.3.18224|2|18 +1.3.6.1.4.1.2620.1.16.22.2.1.3.28872|2|24 +1.3.6.1.4.1.2620.1.16.22.2.1.3.36187|2|18 +1.3.6.1.4.1.2620.1.16.22.2.1.3.45779|2|22 +1.3.6.1.4.1.2620.1.16.22.2.1.3.56540|2|28 +1.3.6.1.4.1.2620.1.16.22.2.1.4.531|2|3 +1.3.6.1.4.1.2620.1.16.22.2.1.4.2789|2|10 +1.3.6.1.4.1.2620.1.16.22.2.1.4.8268|2|26 +1.3.6.1.4.1.2620.1.16.22.2.1.4.9293|2|5 +1.3.6.1.4.1.2620.1.16.22.2.1.4.13850|2|29 +1.3.6.1.4.1.2620.1.16.22.2.1.4.18224|2|9 +1.3.6.1.4.1.2620.1.16.22.2.1.4.28872|2|29 +1.3.6.1.4.1.2620.1.16.22.2.1.4.36187|2|15 +1.3.6.1.4.1.2620.1.16.22.2.1.4.45779|2|12 +1.3.6.1.4.1.2620.1.16.22.2.1.4.56540|2|2 +1.3.6.1.4.1.2620.1.16.22.2.1.5.531|2|3 +1.3.6.1.4.1.2620.1.16.22.2.1.5.2789|2|7 +1.3.6.1.4.1.2620.1.16.22.2.1.5.8268|2|23 +1.3.6.1.4.1.2620.1.16.22.2.1.5.9293|2|22 +1.3.6.1.4.1.2620.1.16.22.2.1.5.13850|2|17 +1.3.6.1.4.1.2620.1.16.22.2.1.5.18224|2|11 +1.3.6.1.4.1.2620.1.16.22.2.1.5.28872|2|22 +1.3.6.1.4.1.2620.1.16.22.2.1.5.36187|2|3 +1.3.6.1.4.1.2620.1.16.22.2.1.5.45779|2|5 +1.3.6.1.4.1.2620.1.16.22.2.1.5.56540|2|0 +1.3.6.1.4.1.2620.1.16.22.2.1.6.531|2|13 +1.3.6.1.4.1.2620.1.16.22.2.1.6.2789|2|28 +1.3.6.1.4.1.2620.1.16.22.2.1.6.8268|2|19 +1.3.6.1.4.1.2620.1.16.22.2.1.6.9293|2|29 +1.3.6.1.4.1.2620.1.16.22.2.1.6.13850|2|3 +1.3.6.1.4.1.2620.1.16.22.2.1.6.18224|2|17 +1.3.6.1.4.1.2620.1.16.22.2.1.6.28872|2|23 +1.3.6.1.4.1.2620.1.16.22.2.1.6.36187|2|17 +1.3.6.1.4.1.2620.1.16.22.2.1.6.45779|2|11 +1.3.6.1.4.1.2620.1.16.22.2.1.6.56540|2|9 +1.3.6.1.4.1.2620.1.16.23.1.1.1.923|2|14 +1.3.6.1.4.1.2620.1.16.23.1.1.1.1098|2|7 +1.3.6.1.4.1.2620.1.16.23.1.1.1.5611|2|21 +1.3.6.1.4.1.2620.1.16.23.1.1.1.5967|2|7 +1.3.6.1.4.1.2620.1.16.23.1.1.1.9349|2|25 +1.3.6.1.4.1.2620.1.16.23.1.1.1.15167|2|1 +1.3.6.1.4.1.2620.1.16.23.1.1.1.28555|2|13 +1.3.6.1.4.1.2620.1.16.23.1.1.1.37907|2|15 +1.3.6.1.4.1.2620.1.16.23.1.1.1.40571|2|27 +1.3.6.1.4.1.2620.1.16.23.1.1.1.65094|2|22 +1.3.6.1.4.1.2620.1.16.23.1.1.2.923|2|17 +1.3.6.1.4.1.2620.1.16.23.1.1.2.1098|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.2.5611|2|29 +1.3.6.1.4.1.2620.1.16.23.1.1.2.5967|2|22 +1.3.6.1.4.1.2620.1.16.23.1.1.2.9349|2|4 +1.3.6.1.4.1.2620.1.16.23.1.1.2.15167|2|26 +1.3.6.1.4.1.2620.1.16.23.1.1.2.28555|2|13 +1.3.6.1.4.1.2620.1.16.23.1.1.2.37907|2|11 +1.3.6.1.4.1.2620.1.16.23.1.1.2.40571|2|6 +1.3.6.1.4.1.2620.1.16.23.1.1.2.65094|2|30 +1.3.6.1.4.1.2620.1.16.23.1.1.3.923|2|22 +1.3.6.1.4.1.2620.1.16.23.1.1.3.1098|2|30 +1.3.6.1.4.1.2620.1.16.23.1.1.3.5611|2|19 +1.3.6.1.4.1.2620.1.16.23.1.1.3.5967|2|20 +1.3.6.1.4.1.2620.1.16.23.1.1.3.9349|2|23 +1.3.6.1.4.1.2620.1.16.23.1.1.3.15167|2|21 +1.3.6.1.4.1.2620.1.16.23.1.1.3.28555|2|5 +1.3.6.1.4.1.2620.1.16.23.1.1.3.37907|2|15 +1.3.6.1.4.1.2620.1.16.23.1.1.3.40571|2|14 +1.3.6.1.4.1.2620.1.16.23.1.1.3.65094|2|5 +1.3.6.1.4.1.2620.1.16.23.1.1.4.923|2|21 +1.3.6.1.4.1.2620.1.16.23.1.1.4.1098|2|18 +1.3.6.1.4.1.2620.1.16.23.1.1.4.5611|2|6 +1.3.6.1.4.1.2620.1.16.23.1.1.4.5967|2|6 +1.3.6.1.4.1.2620.1.16.23.1.1.4.9349|2|26 +1.3.6.1.4.1.2620.1.16.23.1.1.4.15167|2|19 +1.3.6.1.4.1.2620.1.16.23.1.1.4.28555|2|18 +1.3.6.1.4.1.2620.1.16.23.1.1.4.37907|2|20 +1.3.6.1.4.1.2620.1.16.23.1.1.4.40571|2|6 +1.3.6.1.4.1.2620.1.16.23.1.1.4.65094|2|16 +1.3.6.1.4.1.2620.1.16.23.1.1.5.923|4x|7a6f6d6269657320666f72776172642064726976696e67206b657074206b657074207468656972204a61646564206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.5.1098|4x|4a61646564207a6f6d62696573204a616465642064726976696e67207a6f6d6269657320627574206b65707420717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.5.5611|4x|6b65707420627574206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.5.5967|4x|6b657074207a6f6d626965732064726976696e67207a6f6d62696573204a61646564206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.5.9349|4x|6b65707420666f7277617264206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.5.15167|4x|7468656972206f78656e2064726976696e6720627574206275742074686569722064726976696e67207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.5.28555|4x|746865697220717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.5.37907|4x|666f7277617264207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.2620.1.16.23.1.1.5.40571|4|kept +1.3.6.1.4.1.2620.1.16.23.1.1.5.65094|4|Jaded +1.3.6.1.4.1.2620.1.16.23.1.1.6.923|4x|4a6164656420717561696e746c79206f78656e2062757420717561696e746c79207a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.6.1098|4x|7468656972207468656972204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.16.23.1.1.6.5611|4x|4a61646564204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.6.5967|4x|4a6164656420717561696e746c79207a6f6d62696573206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.6.9349|4x|6f78656e207a6f6d62696573206163746564207468656972206b657074206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.6.15167|4x|4a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.6.28555|4x|64726976696e67206f78656e206f78656e20666f7277617264206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.6.37907|4x|6b657074204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.6.40571|4x|6f78656e207468656972206b657074206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.6.65094|4x|6b65707420627574206f78656e207a6f6d62696573204a61646564207a6f6d626965732064726976696e67206f78656e207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.7.923|4|zombies +1.3.6.1.4.1.2620.1.16.23.1.1.7.1098|4x|717561696e746c7920746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.7.5611|4x|616374656420627574206b657074206163746564204a6164656420717561696e746c79206f78656e20627574 +1.3.6.1.4.1.2620.1.16.23.1.1.7.5967|4x|6f78656e207468656972206b657074204a61646564206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.7.9349|4|quaintly +1.3.6.1.4.1.2620.1.16.23.1.1.7.15167|4x|4a61646564204a61646564206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.7.28555|4x|7a6f6d6269657320616374656420666f727761726420627574206f78656e206275742062757420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.7.37907|4x|6f78656e20666f727761726420717561696e746c792064726976696e6720627574 +1.3.6.1.4.1.2620.1.16.23.1.1.7.40571|4x|717561696e746c792064726976696e67206b657074206b65707420666f727761726420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.7.65094|4x|62757420666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.8.923|4x|6f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.8.1098|4x|717561696e746c7920616374656420616374656420717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.8.5611|4x|627574204a61646564204a6164656420627574206163746564204a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.8.5967|4x|627574206b657074204a61646564206163746564 +1.3.6.1.4.1.2620.1.16.23.1.1.8.9349|4x|717561696e746c79204a6164656420627574 +1.3.6.1.4.1.2620.1.16.23.1.1.8.15167|4x|717561696e746c7920666f7277617264204a61646564207468656972204a61646564207a6f6d62696573207468656972204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.8.28555|4x|4a616465642064726976696e67 +1.3.6.1.4.1.2620.1.16.23.1.1.8.37907|4x|627574204a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.8.40571|4x|64726976696e6720717561696e746c7920746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.8.65094|4x|64726976696e6720666f7277617264204a61646564206b65707420666f727761726420616374656420666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.9.923|4x|6b657074204a6164656420666f7277617264204a61646564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.9.1098|4x|74686569722064726976696e6720717561696e746c7920666f7277617264204a616465642064726976696e67206f78656e2064726976696e67206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.9.5611|4|forward +1.3.6.1.4.1.2620.1.16.23.1.1.9.5967|4x|6163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.9.9349|4x|616374656420666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.9.15167|4x|7a6f6d626965732064726976696e672062757420666f7277617264206163746564207468656972206163746564 +1.3.6.1.4.1.2620.1.16.23.1.1.9.28555|4x|74686569722074686569722074686569722064726976696e672062757420666f727761726420717561696e746c7920746865697220627574 +1.3.6.1.4.1.2620.1.16.23.1.1.9.37907|4x|627574206163746564206163746564206f78656e2064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.9.40571|4x|6f78656e206f78656e2064726976696e67206b657074206f78656e204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.9.65094|4x|627574207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.16.23.1.1.10.923|4x|616374656420666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.10.1098|4x|7a6f6d6269657320717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.16.23.1.1.10.5611|4x|64726976696e6720627574207a6f6d6269657320666f727761726420666f72776172642064726976696e67206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.10.5967|4x|7a6f6d62696573206163746564207a6f6d62696573207468656972207468656972206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.10.9349|4x|666f72776172642064726976696e67206f78656e20746865697220666f7277617264204a61646564206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.10.15167|4x|7468656972207468656972204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.10.28555|4|their +1.3.6.1.4.1.2620.1.16.23.1.1.10.37907|4x|61637465642064726976696e6720627574 +1.3.6.1.4.1.2620.1.16.23.1.1.10.40571|4x|7a6f6d62696573207a6f6d626965732064726976696e672074686569722062757420627574204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.10.65094|4x|7a6f6d6269657320717561696e746c7920717561696e746c79206f78656e206163746564206b657074206163746564207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.11.923|4x|666f7277617264206163746564204a61646564204a61646564206f78656e20666f7277617264204a61646564207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.11.1098|4x|6163746564207a6f6d62696573206b657074204a61646564206f78656e206b657074206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.11.5611|4x|6b657074206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.11.5967|4x|746865697220666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.11.9349|4x|7a6f6d62696573207468656972204a61646564206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.11.15167|4x|6b65707420627574207468656972206b657074206b657074 +1.3.6.1.4.1.2620.1.16.23.1.1.11.28555|4|kept +1.3.6.1.4.1.2620.1.16.23.1.1.11.37907|4x|627574206b657074206b65707420616374656420717561696e746c79207a6f6d62696573206b65707420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.11.40571|4x|6b6570742064726976696e67 +1.3.6.1.4.1.2620.1.16.23.1.1.11.65094|4x|6f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.16.23.1.1.12.923|4x|6163746564207468656972206b657074206163746564206f78656e204a61646564 +1.3.6.1.4.1.2620.1.16.23.1.1.12.1098|4x|666f7277617264207a6f6d62696573204a6164656420666f7277617264207a6f6d62696573207a6f6d6269657320717561696e746c7920616374656420666f7277617264 +1.3.6.1.4.1.2620.1.16.23.1.1.12.5611|4x|666f727761726420627574206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.12.5967|4x|666f727761726420627574207468656972 +1.3.6.1.4.1.2620.1.16.23.1.1.12.9349|4x|717561696e746c7920717561696e746c79206f78656e20666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.12.15167|4x|7a6f6d62696573206f78656e20717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.16.23.1.1.12.28555|4x|6b65707420666f727761726420666f7277617264207a6f6d62696573206f78656e207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.16.23.1.1.12.37907|4|driving +1.3.6.1.4.1.2620.1.16.23.1.1.12.40571|4x|717561696e746c7920666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.16.23.1.1.12.65094|4x|7a6f6d626965732064726976696e6720717561696e746c7920627574 +1.3.6.1.4.1.2620.1.16.23.1.1.13.923|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.13.1098|2|1 +1.3.6.1.4.1.2620.1.16.23.1.1.13.5611|2|1 +1.3.6.1.4.1.2620.1.16.23.1.1.13.5967|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.13.9349|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.13.15167|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.13.28555|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.13.37907|2|0 +1.3.6.1.4.1.2620.1.16.23.1.1.13.40571|2|1 +1.3.6.1.4.1.2620.1.16.23.1.1.13.65094|2|1 +1.3.6.1.4.1.2620.1.17.1.2.1.1.1.0|2|5 +1.3.6.1.4.1.2620.1.17.1.2.1.1.2.0|2|6 +1.3.6.1.4.1.2620.1.17.1.2.1.1.3.0|2|26 +1.3.6.1.4.1.2620.1.17.1.2.1.1.4.0|2|27 +1.3.6.1.4.1.2620.1.17.1.2.1.1.5.0|2|26 +1.3.6.1.4.1.2620.1.17.1.2.1.2.1.0|2|14 +1.3.6.1.4.1.2620.1.17.1.2.1.2.2.0|2|29 +1.3.6.1.4.1.2620.1.17.1.2.1.3.1.0|2|5 +1.3.6.1.4.1.2620.1.17.1.2.1.3.2.0|2|29 +1.3.6.1.4.1.2620.1.17.1.2.1.3.3.0|2|6 +1.3.6.1.4.1.2620.1.17.1.2.3.1.1.0|2|16 +1.3.6.1.4.1.2620.1.17.1.2.3.2.1.0|2|23 +1.3.6.1.4.1.2620.1.17.1.3.1.1.1.0|2|20 +1.3.6.1.4.1.2620.1.17.1.3.1.2.1.0|2|24 +1.3.6.1.4.1.2620.1.17.1.3.1.2.2.0|2|5 +1.3.6.1.4.1.2620.1.17.1.3.1.2.3.0|2|17 +1.3.6.1.4.1.2620.1.17.1.3.1.3.1.0|2|6 +1.3.6.1.4.1.2620.1.17.1.3.1.4.1.0|2|8 +1.3.6.1.4.1.2620.1.17.1.3.2.1.1.0|2|6 +1.3.6.1.4.1.2620.1.17.1.3.2.2.1.0|2|6 +1.3.6.1.4.1.2620.1.17.1.3.2.3.1.0|2|25 +1.3.6.1.4.1.2620.1.17.1.3.2.4.1.0|2|17 +1.3.6.1.4.1.2620.1.17.1.3.2.5.1.0|2|26 +1.3.6.1.4.1.2620.1.17.1.3.3.1.1.0|2|2 +1.3.6.1.4.1.2620.1.17.1.3.3.2.1.0|2|14 +1.3.6.1.4.1.2620.1.17.1.3.3.3.1.0|2|20 +1.3.6.1.4.1.2620.1.17.1.3.3.4.1.0|2|2 +1.3.6.1.4.1.2620.1.17.1.3.3.5.1.0|2|7 +1.3.6.1.4.1.2620.1.17.1.3.3.6.1.0|2|3 +1.3.6.1.4.1.2620.1.24.1.1.1.1.269|66|269 +1.3.6.1.4.1.2620.1.24.1.1.1.1.1948|66|1948 +1.3.6.1.4.1.2620.1.24.1.1.1.1.3210|66|3210 +1.3.6.1.4.1.2620.1.24.1.1.1.1.5868|66|5868 +1.3.6.1.4.1.2620.1.24.1.1.1.1.6256|66|6256 +1.3.6.1.4.1.2620.1.24.1.1.1.1.14231|66|14231 +1.3.6.1.4.1.2620.1.24.1.1.1.1.26340|66|26340 +1.3.6.1.4.1.2620.1.24.1.1.1.1.28900|66|28900 +1.3.6.1.4.1.2620.1.24.1.1.1.1.34904|66|34904 +1.3.6.1.4.1.2620.1.24.1.1.1.1.62621|66|62621 +1.3.6.1.4.1.2620.1.24.1.1.1.2.269|4x|7a6f6d6269657320666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.24.1.1.1.2.1948|4x|7a6f6d6269657320717561696e746c79206b65707420666f7277617264206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.2.3210|4x|7468656972204a61646564206b65707420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.2.5868|4x|666f727761726420627574 +1.3.6.1.4.1.2620.1.24.1.1.1.2.6256|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.2.14231|4x|7468656972206b657074207468656972206163746564206b657074207468656972206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.2.26340|4x|6b657074206b657074207468656972204a61646564 +1.3.6.1.4.1.2620.1.24.1.1.1.2.28900|4x|7a6f6d6269657320627574206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.24.1.1.1.2.34904|4x|627574206b657074204a61646564206f78656e206f78656e +1.3.6.1.4.1.2620.1.24.1.1.1.2.62621|4x|62757420666f727761726420666f7277617264206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.1.1.1.3.269|4x|6f78656e20627574206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.3.1948|4x|717561696e746c7920717561696e746c7920717561696e746c7920666f7277617264207468656972206b65707420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.3.3210|4x|6b6570742061637465642064726976696e6720746865697220746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.3.5868|4x|6b65707420616374656420627574207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.24.1.1.1.3.6256|4x|627574206163746564206f78656e20627574206b657074206f78656e20717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.24.1.1.1.3.14231|4|their +1.3.6.1.4.1.2620.1.24.1.1.1.3.26340|4x|616374656420666f7277617264204a61646564206275742064726976696e67206f78656e2074686569722064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.24.1.1.1.3.28900|4x|6b657074206b6570742064726976696e6720666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.24.1.1.1.3.34904|4x|6b6570742074686569722062757420746865697220746865697220666f7277617264 +1.3.6.1.4.1.2620.1.24.1.1.1.3.62621|4x|666f727761726420666f72776172642074686569722064726976696e6720616374656420627574 +1.3.6.1.4.1.2620.1.24.1.1.1.4.269|2|21 +1.3.6.1.4.1.2620.1.24.1.1.1.4.1948|2|14 +1.3.6.1.4.1.2620.1.24.1.1.1.4.3210|2|11 +1.3.6.1.4.1.2620.1.24.1.1.1.4.5868|2|25 +1.3.6.1.4.1.2620.1.24.1.1.1.4.6256|2|4 +1.3.6.1.4.1.2620.1.24.1.1.1.4.14231|2|13 +1.3.6.1.4.1.2620.1.24.1.1.1.4.26340|2|16 +1.3.6.1.4.1.2620.1.24.1.1.1.4.28900|2|5 +1.3.6.1.4.1.2620.1.24.1.1.1.4.34904|2|24 +1.3.6.1.4.1.2620.1.24.1.1.1.4.62621|2|20 +1.3.6.1.4.1.2620.1.24.1.1.1.5.269|4x|6b6570742064726976696e6720746865697220627574 +1.3.6.1.4.1.2620.1.24.1.1.1.5.1948|4x|666f7277617264206b65707420616374656420666f7277617264206f78656e204a61646564 +1.3.6.1.4.1.2620.1.24.1.1.1.5.3210|4x|6163746564206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.5.5868|4x|717561696e746c792064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.5.6256|4x|4a6164656420666f727761726420666f727761726420627574206163746564206f78656e206f78656e2064726976696e67206b657074 +1.3.6.1.4.1.2620.1.24.1.1.1.5.14231|4x|64726976696e6720717561696e746c792064726976696e6720627574207468656972206b6570742074686569722064726976696e67 +1.3.6.1.4.1.2620.1.24.1.1.1.5.26340|4x|627574206f78656e206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.5.28900|4x|6f78656e206275742064726976696e67 +1.3.6.1.4.1.2620.1.24.1.1.1.5.34904|4x|717561696e746c79207468656972206b6570742064726976696e67206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.5.62621|4x|6163746564207a6f6d6269657320666f7277617264206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.6.269|4x|7a6f6d6269657320717561696e746c792061637465642064726976696e67207a6f6d626965732064726976696e67 +1.3.6.1.4.1.2620.1.24.1.1.1.6.1948|4x|7a6f6d626965732062757420627574 +1.3.6.1.4.1.2620.1.24.1.1.1.6.3210|4x|62757420627574204a61646564206163746564206163746564206b6570742064726976696e6720627574204a61646564 +1.3.6.1.4.1.2620.1.24.1.1.1.6.5868|4x|666f7277617264207a6f6d62696573207a6f6d62696573206163746564206b657074206f78656e20666f7277617264206163746564206b657074 +1.3.6.1.4.1.2620.1.24.1.1.1.6.6256|4x|7a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.1.1.1.6.14231|4x|7a6f6d62696573206163746564207a6f6d6269657320666f7277617264206f78656e206163746564206f78656e +1.3.6.1.4.1.2620.1.24.1.1.1.6.26340|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.6.28900|4x|6163746564206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.6.34904|4x|6163746564206163746564206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.6.62621|4x|6b65707420717561696e746c7920717561696e746c7920717561696e746c79206163746564206163746564204a61646564207468656972 +1.3.6.1.4.1.2620.1.24.1.1.1.7.269|2|2 +1.3.6.1.4.1.2620.1.24.1.1.1.7.1948|2|31 +1.3.6.1.4.1.2620.1.24.1.1.1.7.3210|2|3 +1.3.6.1.4.1.2620.1.24.1.1.1.7.5868|2|24 +1.3.6.1.4.1.2620.1.24.1.1.1.7.6256|2|2 +1.3.6.1.4.1.2620.1.24.1.1.1.7.14231|2|1 +1.3.6.1.4.1.2620.1.24.1.1.1.7.26340|2|9 +1.3.6.1.4.1.2620.1.24.1.1.1.7.28900|2|20 +1.3.6.1.4.1.2620.1.24.1.1.1.7.34904|2|28 +1.3.6.1.4.1.2620.1.24.1.1.1.7.62621|2|1 +1.3.6.1.4.1.2620.1.24.1.1.1.8.269|2|26 +1.3.6.1.4.1.2620.1.24.1.1.1.8.1948|2|29 +1.3.6.1.4.1.2620.1.24.1.1.1.8.3210|2|17 +1.3.6.1.4.1.2620.1.24.1.1.1.8.5868|2|3 +1.3.6.1.4.1.2620.1.24.1.1.1.8.6256|2|31 +1.3.6.1.4.1.2620.1.24.1.1.1.8.14231|2|2 +1.3.6.1.4.1.2620.1.24.1.1.1.8.26340|2|30 +1.3.6.1.4.1.2620.1.24.1.1.1.8.28900|2|29 +1.3.6.1.4.1.2620.1.24.1.1.1.8.34904|2|2 +1.3.6.1.4.1.2620.1.24.1.1.1.8.62621|2|21 +1.3.6.1.4.1.2620.1.24.1.1.1.9.269|4x|627574207468656972204a61646564207a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.2620.1.24.1.1.1.9.1948|4x|717561696e746c792064726976696e67207468656972204a6164656420666f72776172642064726976696e67206b65707420746865697220627574 +1.3.6.1.4.1.2620.1.24.1.1.1.9.3210|4x|7a6f6d62696573206f78656e2064726976696e67206163746564206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.9.5868|4x|64726976696e67206275742064726976696e6720717561696e746c7920666f7277617264207a6f6d62696573206f78656e206f78656e206b657074 +1.3.6.1.4.1.2620.1.24.1.1.1.9.6256|4|acted +1.3.6.1.4.1.2620.1.24.1.1.1.9.14231|4x|666f7277617264206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.9.26340|4x|717561696e746c7920666f7277617264206b657074204a6164656420627574204a61646564207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.1.1.1.9.28900|4x|627574206f78656e +1.3.6.1.4.1.2620.1.24.1.1.1.9.34904|4x|746865697220666f727761726420717561696e746c79206f78656e204a61646564 +1.3.6.1.4.1.2620.1.24.1.1.1.9.62621|4x|717561696e746c79207a6f6d62696573206f78656e2064726976696e67207468656972207468656972 +1.3.6.1.4.1.2620.1.24.1.1.1.10.269|4x|6275742064726976696e67207468656972206163746564 +1.3.6.1.4.1.2620.1.24.1.1.1.10.1948|4x|64726976696e672062757420746865697220666f727761726420627574 +1.3.6.1.4.1.2620.1.24.1.1.1.10.3210|4x|6163746564207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.24.1.1.1.10.5868|4x|64726976696e672064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.10.6256|4x|4a616465642064726976696e6720627574 +1.3.6.1.4.1.2620.1.24.1.1.1.10.14231|4x|6b657074204a61646564206f78656e2064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.24.1.1.1.10.26340|4x|64726976696e67206275742064726976696e67207a6f6d6269657320717561696e746c79206163746564206f78656e +1.3.6.1.4.1.2620.1.24.1.1.1.10.28900|4x|6b65707420717561696e746c7920666f727761726420627574206f78656e2064726976696e672062757420717561696e746c79 +1.3.6.1.4.1.2620.1.24.1.1.1.10.34904|4x|7a6f6d62696573206b657074204a61646564207468656972206b657074 +1.3.6.1.4.1.2620.1.24.1.1.1.10.62621|4x|7a6f6d62696573204a6164656420666f7277617264207468656972204a61646564 +1.3.6.1.4.1.2620.1.24.2.1.1.1.11582|66|11582 +1.3.6.1.4.1.2620.1.24.2.1.1.1.17656|66|17656 +1.3.6.1.4.1.2620.1.24.2.1.1.1.17770|66|17770 +1.3.6.1.4.1.2620.1.24.2.1.1.1.20110|66|20110 +1.3.6.1.4.1.2620.1.24.2.1.1.1.24937|66|24937 +1.3.6.1.4.1.2620.1.24.2.1.1.1.27263|66|27263 +1.3.6.1.4.1.2620.1.24.2.1.1.1.27879|66|27879 +1.3.6.1.4.1.2620.1.24.2.1.1.1.34522|66|34522 +1.3.6.1.4.1.2620.1.24.2.1.1.1.39350|66|39350 +1.3.6.1.4.1.2620.1.24.2.1.1.1.56551|66|56551 +1.3.6.1.4.1.2620.1.24.2.1.1.2.11582|4x|62757420627574 +1.3.6.1.4.1.2620.1.24.2.1.1.2.17656|4x|6f78656e20666f7277617264206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.24.2.1.1.2.17770|4x|7a6f6d62696573206f78656e206163746564204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.24.2.1.1.2.20110|4x|627574207a6f6d62696573207468656972206163746564206b65707420717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.24.2.1.1.2.24937|4x|666f7277617264206b657074204a6164656420666f727761726420616374656420616374656420616374656420717561696e746c7920627574 +1.3.6.1.4.1.2620.1.24.2.1.1.2.27263|4x|7468656972206b65707420746865697220666f7277617264204a6164656420746865697220746865697220627574 +1.3.6.1.4.1.2620.1.24.2.1.1.2.27879|4x|717561696e746c792062757420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.2.1.1.2.34522|4x|4a61646564207468656972206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.24.2.1.1.2.39350|4x|7a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.24.2.1.1.2.56551|4x|7468656972206f78656e207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.2.1.1.3.11582|2|25 +1.3.6.1.4.1.2620.1.24.2.1.1.3.17656|2|25 +1.3.6.1.4.1.2620.1.24.2.1.1.3.17770|2|7 +1.3.6.1.4.1.2620.1.24.2.1.1.3.20110|2|1 +1.3.6.1.4.1.2620.1.24.2.1.1.3.24937|2|20 +1.3.6.1.4.1.2620.1.24.2.1.1.3.27263|2|27 +1.3.6.1.4.1.2620.1.24.2.1.1.3.27879|2|3 +1.3.6.1.4.1.2620.1.24.2.1.1.3.34522|2|25 +1.3.6.1.4.1.2620.1.24.2.1.1.3.39350|2|6 +1.3.6.1.4.1.2620.1.24.2.1.1.3.56551|2|10 +1.3.6.1.4.1.2620.1.24.3.1.1.1.16028|66|16028 +1.3.6.1.4.1.2620.1.24.3.1.1.1.16615|66|16615 +1.3.6.1.4.1.2620.1.24.3.1.1.1.17531|66|17531 +1.3.6.1.4.1.2620.1.24.3.1.1.1.27810|66|27810 +1.3.6.1.4.1.2620.1.24.3.1.1.1.29253|66|29253 +1.3.6.1.4.1.2620.1.24.3.1.1.1.31826|66|31826 +1.3.6.1.4.1.2620.1.24.3.1.1.1.46978|66|46978 +1.3.6.1.4.1.2620.1.24.3.1.1.1.53043|66|53043 +1.3.6.1.4.1.2620.1.24.3.1.1.1.53046|66|53046 +1.3.6.1.4.1.2620.1.24.3.1.1.1.54627|66|54627 +1.3.6.1.4.1.2620.1.24.3.1.1.2.16028|4x|627574206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.3.1.1.2.16615|4x|666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.24.3.1.1.2.17531|4x|7a6f6d62696573206b657074206163746564206f78656e20627574204a61646564206163746564 +1.3.6.1.4.1.2620.1.24.3.1.1.2.27810|4x|6b657074206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.24.3.1.1.2.29253|4x|666f727761726420666f727761726420616374656420627574206b657074204a61646564207a6f6d62696573207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.24.3.1.1.2.31826|4x|6163746564204a6164656420627574206b657074206b657074206163746564204a61646564204a61646564 +1.3.6.1.4.1.2620.1.24.3.1.1.2.46978|4x|7468656972207a6f6d62696573206b6570742064726976696e672064726976696e67206f78656e +1.3.6.1.4.1.2620.1.24.3.1.1.2.53043|4x|62757420666f7277617264206f78656e207468656972204a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.24.3.1.1.2.53046|4x|7a6f6d6269657320666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.24.3.1.1.2.54627|4x|6f78656e20717561696e746c79206f78656e206163746564207a6f6d62696573206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.24.3.1.1.3.16028|2|23 +1.3.6.1.4.1.2620.1.24.3.1.1.3.16615|2|0 +1.3.6.1.4.1.2620.1.24.3.1.1.3.17531|2|22 +1.3.6.1.4.1.2620.1.24.3.1.1.3.27810|2|6 +1.3.6.1.4.1.2620.1.24.3.1.1.3.29253|2|30 +1.3.6.1.4.1.2620.1.24.3.1.1.3.31826|2|18 +1.3.6.1.4.1.2620.1.24.3.1.1.3.46978|2|4 +1.3.6.1.4.1.2620.1.24.3.1.1.3.53043|2|20 +1.3.6.1.4.1.2620.1.24.3.1.1.3.53046|2|2 +1.3.6.1.4.1.2620.1.24.3.1.1.3.54627|2|7 +1.3.6.1.4.1.2620.1.24.4.1.1.0|2|30 +1.3.6.1.4.1.2620.1.24.4.1.2.0|4x|6f78656e2064726976696e67207a6f6d6269657320717561696e746c79207468656972206163746564 +1.3.6.1.4.1.2620.1.24.4.1.3.0|2|3 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.546|66|546 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.7578|66|7578 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.9598|66|9598 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.14834|66|14834 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.17795|66|17795 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.18694|66|18694 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.45179|66|45179 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.51066|66|51066 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.54735|66|54735 +1.3.6.1.4.1.2620.1.24.4.1.4.1.1.57938|66|57938 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.546|4x|746865697220627574207468656972206163746564207468656972204a61646564 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.7578|4x|6163746564206b657074204a61646564207a6f6d6269657320717561696e746c7920627574206163746564 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.9598|4x|62757420666f727761726420717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.14834|4x|7a6f6d626965732062757420746865697220666f7277617264 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.17795|4x|74686569722064726976696e672064726976696e6720627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.18694|4x|6b657074204a6164656420717561696e746c79206b657074207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.45179|4x|717561696e746c79206163746564204a61646564204a61646564 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.51066|4x|616374656420616374656420616374656420666f7277617264207468656972206f78656e206f78656e206163746564206163746564 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.54735|4x|6f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.24.4.1.4.1.2.57938|4x|4a61646564206f78656e20717561696e746c79206163746564206b65707420616374656420717561696e746c7920627574206f78656e +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.546|2|3 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.7578|2|0 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.9598|2|4 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.14834|2|24 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.17795|2|26 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.18694|2|21 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.45179|2|21 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.51066|2|9 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.54735|2|10 +1.3.6.1.4.1.2620.1.24.4.1.4.1.3.57938|2|20 +1.3.6.1.4.1.2620.1.24.4.2.1.0|2|29 +1.3.6.1.4.1.2620.1.24.4.2.2.0|4|oxen +1.3.6.1.4.1.2620.1.24.4.2.3.0|2|9 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.283|66|283 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.6462|66|6462 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.8564|66|8564 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.18811|66|18811 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.28827|66|28827 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.33621|66|33621 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.42149|66|42149 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.45968|66|45968 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.55142|66|55142 +1.3.6.1.4.1.2620.1.24.4.2.4.1.1.55860|66|55860 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.283|4|quaintly +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.6462|4|acted +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.8564|4x|6f78656e20717561696e746c79206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.18811|4x|61637465642062757420627574206f78656e207468656972207468656972206163746564206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.28827|4x|64726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.33621|4x|64726976696e6720717561696e746c79204a616465642064726976696e67206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.42149|4x|64726976696e672064726976696e67206f78656e207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.45968|4x|7468656972206f78656e20746865697220666f7277617264206f78656e206b65707420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.55142|4x|6f78656e207468656972206275742064726976696e672064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.24.4.2.4.1.2.55860|4x|616374656420717561696e746c7920717561696e746c79206f78656e2064726976696e6720717561696e746c79206f78656e206163746564 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.283|2|26 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.6462|2|29 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.8564|2|17 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.18811|2|12 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.28827|2|31 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.33621|2|5 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.42149|2|20 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.45968|2|31 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.55142|2|13 +1.3.6.1.4.1.2620.1.24.4.2.4.1.3.55860|2|31 +1.3.6.1.4.1.2620.1.24.4.3.1.0|2|13 +1.3.6.1.4.1.2620.1.24.4.3.2.0|4x|746865697220717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.24.4.3.3.0|2|18 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.2572|66|2572 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.2835|66|2835 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.7698|66|7698 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.24801|66|24801 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.25948|66|25948 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.25997|66|25997 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.52762|66|52762 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.55152|66|55152 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.56667|66|56667 +1.3.6.1.4.1.2620.1.24.4.3.4.1.1.61890|66|61890 +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.2572|4x|6b657074206f78656e206b65707420666f7277617264206275742064726976696e6720627574 +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.2835|4|acted +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.7698|4x|7468656972204a616465642062757420616374656420627574204a61646564207a6f6d62696573204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.24801|4|acted +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.25948|4|quaintly +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.25997|4x|4a6164656420666f727761726420666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.52762|4|forward +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.55152|4x|6f78656e206b65707420627574206f78656e206f78656e2064726976696e67206163746564 +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.56667|4x|6f78656e207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.24.4.3.4.1.2.61890|4x|616374656420717561696e746c79206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.2572|2|19 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.2835|2|27 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.7698|2|11 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.24801|2|5 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.25948|2|3 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.25997|2|10 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.52762|2|26 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.55152|2|23 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.56667|2|7 +1.3.6.1.4.1.2620.1.24.4.3.4.1.3.61890|2|27 +1.3.6.1.4.1.2620.1.24.4.4.1.0|2|10 +1.3.6.1.4.1.2620.1.24.4.4.2.0|4x|6b65707420717561696e746c792064726976696e6720717561696e746c7920717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.24.4.4.3.0|2|26 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.2664|66|2664 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.5962|66|5962 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.8559|66|8559 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.14790|66|14790 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.31680|66|31680 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.41368|66|41368 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.42943|66|42943 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.55415|66|55415 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.57778|66|57778 +1.3.6.1.4.1.2620.1.24.4.4.4.1.1.61103|66|61103 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.2664|4x|616374656420717561696e746c79206f78656e207468656972 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.5962|4x|717561696e746c79204a61646564204a61646564207468656972 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.8559|4x|7a6f6d626965732074686569722064726976696e67207468656972204a61646564 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.14790|4x|7a6f6d6269657320666f7277617264206b657074206163746564206f78656e +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.31680|4x|666f727761726420666f727761726420717561696e746c7920717561696e746c79204a6164656420627574207a6f6d62696573207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.41368|4x|666f7277617264206f78656e20717561696e746c792064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.42943|4x|6163746564207a6f6d62696573206b65707420627574206f78656e20666f727761726420627574206163746564 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.55415|4x|6275742064726976696e67207a6f6d62696573204a61646564204a6164656420717561696e746c79207a6f6d62696573206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.57778|4x|616374656420717561696e746c79206b657074206275742064726976696e67 +1.3.6.1.4.1.2620.1.24.4.4.4.1.2.61103|4x|6163746564206163746564 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.2664|2|9 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.5962|2|18 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.8559|2|26 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.14790|2|16 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.31680|2|10 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.41368|2|1 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.42943|2|28 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.55415|2|8 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.57778|2|22 +1.3.6.1.4.1.2620.1.24.4.4.4.1.3.61103|2|20 +1.3.6.1.4.1.2620.1.24.101.0|2|28 +1.3.6.1.4.1.2620.1.24.102.0|4x|4a6164656420746865697220717561696e746c7920666f727761726420627574206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.24.103.0|4x|666f72776172642064726976696e6720666f727761726420616374656420627574206163746564 +1.3.6.1.4.1.2620.1.25.1.1.0|2|6 +1.3.6.1.4.1.2620.1.25.1.2.0|2|18 +1.3.6.1.4.1.2620.1.25.1.3.0|2|31 +1.3.6.1.4.1.2620.1.25.1.4.0|4x|7468656972206f78656e206275742062757420717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.25.1.5.0|4|acted +1.3.6.1.4.1.2620.1.25.1.6.0|4x|717561696e746c79206163746564206f78656e20717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.25.1.7.0|2|14 +1.3.6.1.4.1.2620.1.25.1.8.0|4x|6b65707420627574204a6164656420717561696e746c792064726976696e6720717561696e746c7920666f727761726420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.9.1.1.7705|66|7705 +1.3.6.1.4.1.2620.1.25.1.9.1.1.11293|66|11293 +1.3.6.1.4.1.2620.1.25.1.9.1.1.16671|66|16671 +1.3.6.1.4.1.2620.1.25.1.9.1.1.18079|66|18079 +1.3.6.1.4.1.2620.1.25.1.9.1.1.25138|66|25138 +1.3.6.1.4.1.2620.1.25.1.9.1.1.27306|66|27306 +1.3.6.1.4.1.2620.1.25.1.9.1.1.30860|66|30860 +1.3.6.1.4.1.2620.1.25.1.9.1.1.33843|66|33843 +1.3.6.1.4.1.2620.1.25.1.9.1.1.48121|66|48121 +1.3.6.1.4.1.2620.1.25.1.9.1.1.62988|66|62988 +1.3.6.1.4.1.2620.1.25.1.9.1.2.7705|4x|7468656972206163746564204a616465642062757420666f72776172642064726976696e672064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.1.9.1.2.11293|4x|6b65707420666f7277617264207a6f6d6269657320627574207a6f6d62696573207468656972204a61646564 +1.3.6.1.4.1.2620.1.25.1.9.1.2.16671|4x|6f78656e2064726976696e67204a6164656420717561696e746c792061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.9.1.2.18079|4x|64726976696e67207468656972204a616465642064726976696e67207a6f6d62696573207468656972206163746564 +1.3.6.1.4.1.2620.1.25.1.9.1.2.25138|4|forward +1.3.6.1.4.1.2620.1.25.1.9.1.2.27306|4x|746865697220627574204a616465642064726976696e67204a61646564207a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.1.9.1.2.30860|4x|627574206f78656e206f78656e206f78656e2061637465642061637465642064726976696e67206163746564 +1.3.6.1.4.1.2620.1.25.1.9.1.2.33843|4x|717561696e746c7920746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.9.1.2.48121|4x|717561696e746c79206f78656e207468656972206f78656e206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.1.9.1.2.62988|4x|627574206f78656e +1.3.6.1.4.1.2620.1.25.1.9.1.3.7705|4x|4a61646564206163746564206275742064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.25.1.9.1.3.11293|4x|717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.25.1.9.1.3.16671|4|forward +1.3.6.1.4.1.2620.1.25.1.9.1.3.18079|4x|7a6f6d62696573206b65707420746865697220616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.9.1.3.25138|4x|666f72776172642064726976696e6720717561696e746c7920627574 +1.3.6.1.4.1.2620.1.25.1.9.1.3.27306|4x|4a616465642062757420717561696e746c7920627574207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.9.1.3.30860|4x|7468656972207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.2620.1.25.1.9.1.3.33843|4x|6f78656e207a6f6d626965732062757420666f7277617264206f78656e207468656972206b65707420627574 +1.3.6.1.4.1.2620.1.25.1.9.1.3.48121|4x|6b657074204a61646564207a6f6d6269657320746865697220666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.9.1.3.62988|4x|6275742064726976696e67206163746564204a61646564206b65707420627574 +1.3.6.1.4.1.2620.1.25.1.9.1.4.7705|2|2 +1.3.6.1.4.1.2620.1.25.1.9.1.4.11293|2|26 +1.3.6.1.4.1.2620.1.25.1.9.1.4.16671|2|22 +1.3.6.1.4.1.2620.1.25.1.9.1.4.18079|2|11 +1.3.6.1.4.1.2620.1.25.1.9.1.4.25138|2|8 +1.3.6.1.4.1.2620.1.25.1.9.1.4.27306|2|2 +1.3.6.1.4.1.2620.1.25.1.9.1.4.30860|2|13 +1.3.6.1.4.1.2620.1.25.1.9.1.4.33843|2|2 +1.3.6.1.4.1.2620.1.25.1.9.1.4.48121|2|19 +1.3.6.1.4.1.2620.1.25.1.9.1.4.62988|2|27 +1.3.6.1.4.1.2620.1.25.1.9.1.5.7705|2|9 +1.3.6.1.4.1.2620.1.25.1.9.1.5.11293|2|23 +1.3.6.1.4.1.2620.1.25.1.9.1.5.16671|2|5 +1.3.6.1.4.1.2620.1.25.1.9.1.5.18079|2|4 +1.3.6.1.4.1.2620.1.25.1.9.1.5.25138|2|13 +1.3.6.1.4.1.2620.1.25.1.9.1.5.27306|2|4 +1.3.6.1.4.1.2620.1.25.1.9.1.5.30860|2|6 +1.3.6.1.4.1.2620.1.25.1.9.1.5.33843|2|7 +1.3.6.1.4.1.2620.1.25.1.9.1.5.48121|2|0 +1.3.6.1.4.1.2620.1.25.1.9.1.5.62988|2|1 +1.3.6.1.4.1.2620.1.25.1.10.0|2|24 +1.3.6.1.4.1.2620.1.25.1.101.0|2|27 +1.3.6.1.4.1.2620.1.25.1.102.0|4x|717561696e746c79206f78656e206b65707420717561696e746c79204a616465642061637465642062757420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.25.1.103.0|4x|4a6164656420627574206f78656e207468656972 +1.3.6.1.4.1.2620.1.25.2.1.0|2|18 +1.3.6.1.4.1.2620.1.25.2.2.0|2|8 +1.3.6.1.4.1.2620.1.25.2.3.0|4x|6f78656e2064726976696e6720746865697220666f7277617264204a616465642062757420616374656420627574206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.1.448|66|448 +1.3.6.1.4.1.2620.1.25.2.4.1.1.6521|66|6521 +1.3.6.1.4.1.2620.1.25.2.4.1.1.6638|66|6638 +1.3.6.1.4.1.2620.1.25.2.4.1.1.11103|66|11103 +1.3.6.1.4.1.2620.1.25.2.4.1.1.13775|66|13775 +1.3.6.1.4.1.2620.1.25.2.4.1.1.28356|66|28356 +1.3.6.1.4.1.2620.1.25.2.4.1.1.36624|66|36624 +1.3.6.1.4.1.2620.1.25.2.4.1.1.49289|66|49289 +1.3.6.1.4.1.2620.1.25.2.4.1.1.52103|66|52103 +1.3.6.1.4.1.2620.1.25.2.4.1.1.54649|66|54649 +1.3.6.1.4.1.2620.1.25.2.4.1.2.448|4x|61637465642062757420666f7277617264206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.2.6521|4|oxen +1.3.6.1.4.1.2620.1.25.2.4.1.2.6638|4x|717561696e746c79207a6f6d62696573204a61646564206f78656e20666f7277617264206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.2.11103|4x|666f727761726420666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.2.13775|4|kept +1.3.6.1.4.1.2620.1.25.2.4.1.2.28356|4x|7a6f6d6269657320717561696e746c792064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.2.36624|4x|6b657074206f78656e2064726976696e67206b65707420717561696e746c79206163746564207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.2.49289|4x|717561696e746c79207468656972204a61646564206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.2.52103|4x|6b657074206f78656e20666f7277617264206f78656e206f78656e2064726976696e672062757420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.2.54649|4x|7468656972204a61646564206f78656e20717561696e746c79204a61646564207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.3.448|4x|4a616465642074686569722064726976696e6720666f7277617264206f78656e20666f7277617264207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.3.6521|4x|627574206275742064726976696e6720746865697220666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.3.6638|4x|6163746564207468656972204a61646564206b657074 +1.3.6.1.4.1.2620.1.25.2.4.1.3.11103|4x|746865697220616374656420717561696e746c79204a61646564206275742062757420666f7277617264206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.3.13775|4x|717561696e746c79204a6164656420717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.3.28356|4x|666f7277617264207a6f6d62696573204a61646564207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.3.36624|4x|7a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.3.49289|4x|627574206f78656e20627574206f78656e2062757420666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.3.52103|4|oxen +1.3.6.1.4.1.2620.1.25.2.4.1.3.54649|4|driving +1.3.6.1.4.1.2620.1.25.2.4.1.4.448|4x|666f727761726420717561696e746c79206163746564206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.4.6521|4x|7a6f6d62696573207a6f6d62696573206b657074206b6570742064726976696e6720616374656420666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.4.6638|4x|64726976696e672064726976696e672061637465642064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.4.11103|4x|62757420627574204a6164656420666f727761726420666f72776172642062757420717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.25.2.4.1.4.13775|4x|64726976696e672064726976696e67207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.4.28356|4x|6163746564206f78656e20717561696e746c792064726976696e67207a6f6d626965732074686569722064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.4.36624|4x|717561696e746c7920717561696e746c79207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.4.49289|4x|627574207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.4.52103|4x|62757420666f727761726420616374656420666f7277617264206f78656e20717561696e746c7920616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.4.54649|4x|6275742064726976696e6720627574 +1.3.6.1.4.1.2620.1.25.2.4.1.5.448|2|13 +1.3.6.1.4.1.2620.1.25.2.4.1.5.6521|2|25 +1.3.6.1.4.1.2620.1.25.2.4.1.5.6638|2|6 +1.3.6.1.4.1.2620.1.25.2.4.1.5.11103|2|27 +1.3.6.1.4.1.2620.1.25.2.4.1.5.13775|2|20 +1.3.6.1.4.1.2620.1.25.2.4.1.5.28356|2|31 +1.3.6.1.4.1.2620.1.25.2.4.1.5.36624|2|1 +1.3.6.1.4.1.2620.1.25.2.4.1.5.49289|2|25 +1.3.6.1.4.1.2620.1.25.2.4.1.5.52103|2|0 +1.3.6.1.4.1.2620.1.25.2.4.1.5.54649|2|26 +1.3.6.1.4.1.2620.1.25.2.4.1.6.448|4|oxen +1.3.6.1.4.1.2620.1.25.2.4.1.6.6521|4x|4a6164656420746865697220627574206f78656e204a61646564206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.6.6638|4x|6163746564207a6f6d626965732074686569722064726976696e67206b6570742064726976696e67206f78656e20616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.6.11103|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.6.13775|4x|6b657074206b657074206b65707420746865697220627574206b657074207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.6.28356|4x|6f78656e206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.6.36624|4x|627574206b65707420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.6.49289|4|kept +1.3.6.1.4.1.2620.1.25.2.4.1.6.52103|4x|717561696e746c7920717561696e746c79207a6f6d6269657320717561696e746c792062757420746865697220717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.6.54649|4x|4a61646564204a6164656420666f727761726420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.7.448|4|oxen +1.3.6.1.4.1.2620.1.25.2.4.1.7.6521|4x|6f78656e20717561696e746c7920717561696e746c792064726976696e67206b657074204a61646564 +1.3.6.1.4.1.2620.1.25.2.4.1.7.6638|4x|4a6164656420717561696e746c792074686569722064726976696e67207a6f6d626965732064726976696e672064726976696e6720746865697220666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.7.11103|4x|746865697220717561696e746c792064726976696e6720616374656420717561696e746c792062757420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.7.13775|4x|6f78656e20616374656420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.25.2.4.1.7.28356|4x|64726976696e67207a6f6d62696573207468656972206b6570742061637465642062757420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.25.2.4.1.7.36624|4x|7a6f6d626965732064726976696e672062757420717561696e746c79204a616465642064726976696e67207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.7.49289|4x|64726976696e672064726976696e6720666f7277617264207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.7.52103|4x|666f7277617264204a61646564206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.7.54649|4x|6f78656e2064726976696e672064726976696e67206f78656e20616374656420746865697220616374656420666f7277617264 +1.3.6.1.4.1.2620.1.25.2.4.1.8.448|2|26 +1.3.6.1.4.1.2620.1.25.2.4.1.8.6521|2|8 +1.3.6.1.4.1.2620.1.25.2.4.1.8.6638|2|25 +1.3.6.1.4.1.2620.1.25.2.4.1.8.11103|2|4 +1.3.6.1.4.1.2620.1.25.2.4.1.8.13775|2|31 +1.3.6.1.4.1.2620.1.25.2.4.1.8.28356|2|31 +1.3.6.1.4.1.2620.1.25.2.4.1.8.36624|2|26 +1.3.6.1.4.1.2620.1.25.2.4.1.8.49289|2|22 +1.3.6.1.4.1.2620.1.25.2.4.1.8.52103|2|31 +1.3.6.1.4.1.2620.1.25.2.4.1.8.54649|2|14 +1.3.6.1.4.1.2620.1.25.2.4.1.9.448|4x|7468656972204a61646564206b65707420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.9.6521|4x|7a6f6d626965732062757420666f727761726420627574204a61646564204a61646564207468656972204a61646564207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.9.6638|4x|74686569722064726976696e67206f78656e204a61646564206f78656e206f78656e204a61646564206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.9.11103|4x|666f7277617264206b657074206f78656e20666f7277617264206b6570742061637465642064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.9.13775|4|driving +1.3.6.1.4.1.2620.1.25.2.4.1.9.28356|4x|6f78656e20616374656420666f727761726420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.9.36624|4x|7a6f6d62696573206163746564207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.9.49289|4x|6b6570742064726976696e67206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.9.52103|4x|61637465642064726976696e6720717561696e746c7920627574206b657074204a61646564204a61646564204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.9.54649|4|but +1.3.6.1.4.1.2620.1.25.2.4.1.10.448|4x|4a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.10.6521|4x|62757420666f72776172642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.10.6638|4x|666f727761726420717561696e746c79206163746564204a616465642062757420717561696e746c79204a61646564207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.25.2.4.1.10.11103|4x|746865697220666f7277617264206163746564207468656972207468656972206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.10.13775|4x|6b657074206f78656e20627574204a61646564206b657074204a6164656420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.10.28356|4x|717561696e746c7920746865697220666f727761726420717561696e746c79207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.10.36624|4x|74686569722064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.10.49289|4x|7468656972206f78656e207a6f6d62696573206b657074204a61646564207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.10.52103|4x|627574206b65707420666f7277617264206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.10.54649|4x|717561696e746c7920616374656420746865697220666f7277617264204a616465642064726976696e672074686569722064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.11.448|4x|6f78656e20666f727761726420717561696e746c79206f78656e206b65707420717561696e746c792062757420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.11.6521|4x|666f72776172642064726976696e67207468656972207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.11.6638|4x|64726976696e67206b65707420717561696e746c7920717561696e746c7920666f72776172642064726976696e67206b65707420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.11.11103|4x|61637465642061637465642062757420717561696e746c79204a61646564206b657074206163746564204a61646564206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.11.13775|4x|4a616465642064726976696e67206f78656e206f78656e206b65707420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.11.28356|4x|6b657074206163746564204a61646564204a6164656420666f727761726420717561696e746c792064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.11.36624|4|but +1.3.6.1.4.1.2620.1.25.2.4.1.11.49289|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.25.2.4.1.11.52103|4x|4a61646564204a616465642064726976696e67207468656972204a61646564 +1.3.6.1.4.1.2620.1.25.2.4.1.11.54649|4x|4a61646564204a61646564 +1.3.6.1.4.1.2620.1.25.2.4.1.12.448|4x|717561696e746c79207a6f6d626965732064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.12.6521|4x|6f78656e206163746564206b657074 +1.3.6.1.4.1.2620.1.25.2.4.1.12.6638|4x|6163746564206163746564206b65707420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.12.11103|4x|64726976696e6720746865697220717561696e746c7920627574204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.25.2.4.1.12.13775|4|but +1.3.6.1.4.1.2620.1.25.2.4.1.12.28356|4x|62757420717561696e746c7920627574206f78656e206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.12.36624|4x|627574206f78656e207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.25.2.4.1.12.49289|4x|6f78656e204a61646564206b657074206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.12.52103|4x|6f78656e204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.12.54649|4x|4a616465642064726976696e672064726976696e672064726976696e67206b657074206f78656e206b65707420627574 +1.3.6.1.4.1.2620.1.25.2.4.1.13.448|4x|6f78656e20666f7277617264206b65707420717561696e746c792074686569722061637465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.25.2.4.1.13.6521|4x|6275742064726976696e672062757420717561696e746c7920627574 +1.3.6.1.4.1.2620.1.25.2.4.1.13.6638|4x|6b657074206f78656e206275742064726976696e67 +1.3.6.1.4.1.2620.1.25.2.4.1.13.11103|4|but +1.3.6.1.4.1.2620.1.25.2.4.1.13.13775|4x|717561696e746c7920717561696e746c79206163746564207a6f6d6269657320717561696e746c7920616374656420666f7277617264206f78656e +1.3.6.1.4.1.2620.1.25.2.4.1.13.28356|4x|7a6f6d62696573206f78656e20627574206163746564206f78656e2064726976696e67206b657074204a61646564206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.13.36624|4|Jaded +1.3.6.1.4.1.2620.1.25.2.4.1.13.49289|4x|61637465642064726976696e67206b65707420717561696e746c792064726976696e67204a61646564206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.13.52103|4x|64726976696e6720627574206b657074206b657074206b657074206b65707420746865697220627574206163746564 +1.3.6.1.4.1.2620.1.25.2.4.1.13.54649|4x|4a6164656420717561696e746c79206f78656e20717561696e746c792064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.25.2.5.0|2|0 +1.3.6.1.4.1.2620.1.25.2.101.0|2|2 +1.3.6.1.4.1.2620.1.25.2.102.0|4x|6f78656e2062757420627574206163746564207a6f6d62696573206f78656e206b6570742064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.25.2.103.0|4x|6f78656e206b657074206f78656e20627574207468656972206163746564206f78656e206f78656e +1.3.6.1.4.1.2620.1.29.1.1.0|4x|6f78656e206f78656e20666f7277617264207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.2620.1.29.1.2.0|4x|6b657074206275742064726976696e67206f78656e20717561696e746c79207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.29.1.3.0|2|21 +1.3.6.1.4.1.2620.1.29.1.4.0|2|22 +1.3.6.1.4.1.2620.1.29.1.5.0|4x|666f727761726420717561696e746c79207468656972206b65707420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.29.1.6.0|2|8 +1.3.6.1.4.1.2620.1.29.1.7.0|4x|6f78656e207a6f6d62696573207468656972206163746564 +1.3.6.1.4.1.2620.1.29.1.8.0|4|kept +1.3.6.1.4.1.2620.1.29.2.1.0|4x|6f78656e207a6f6d6269657320666f727761726420666f7277617264204a61646564206163746564206163746564206163746564207468656972 +1.3.6.1.4.1.2620.1.29.2.2.0|2|29 +1.3.6.1.4.1.2620.1.29.2.3.0|2|30 +1.3.6.1.4.1.2620.1.29.2.4.1.1.5075|66|5075 +1.3.6.1.4.1.2620.1.29.2.4.1.1.5335|66|5335 +1.3.6.1.4.1.2620.1.29.2.4.1.1.14249|66|14249 +1.3.6.1.4.1.2620.1.29.2.4.1.1.15114|66|15114 +1.3.6.1.4.1.2620.1.29.2.4.1.1.34138|66|34138 +1.3.6.1.4.1.2620.1.29.2.4.1.1.35579|66|35579 +1.3.6.1.4.1.2620.1.29.2.4.1.1.40308|66|40308 +1.3.6.1.4.1.2620.1.29.2.4.1.1.56464|66|56464 +1.3.6.1.4.1.2620.1.29.2.4.1.1.58518|66|58518 +1.3.6.1.4.1.2620.1.29.2.4.1.1.63005|66|63005 +1.3.6.1.4.1.2620.1.29.2.4.1.2.5075|4x|64726976696e67206f78656e +1.3.6.1.4.1.2620.1.29.2.4.1.2.5335|4x|64726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.29.2.4.1.2.14249|4x|717561696e746c79206b65707420627574204a61646564206f78656e20616374656420666f7277617264206f78656e204a61646564 +1.3.6.1.4.1.2620.1.29.2.4.1.2.15114|4x|6163746564204a6164656420746865697220746865697220616374656420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.29.2.4.1.2.34138|4x|6163746564207468656972206163746564206b657074204a616465642074686569722064726976696e67206163746564206b657074 +1.3.6.1.4.1.2620.1.29.2.4.1.2.35579|4x|627574206f78656e207468656972206b657074204a6164656420616374656420627574206f78656e +1.3.6.1.4.1.2620.1.29.2.4.1.2.40308|4x|4a61646564204a6164656420717561696e746c7920666f7277617264206f78656e204a61646564 +1.3.6.1.4.1.2620.1.29.2.4.1.2.56464|4x|666f7277617264206163746564206f78656e20627574206f78656e +1.3.6.1.4.1.2620.1.29.2.4.1.2.58518|4x|4a61646564207a6f6d626965732064726976696e67207468656972207468656972207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.29.2.4.1.2.63005|4x|6163746564204a61646564207a6f6d62696573206163746564206f78656e +1.3.6.1.4.1.2620.1.29.2.4.1.3.5075|2|6 +1.3.6.1.4.1.2620.1.29.2.4.1.3.5335|2|2 +1.3.6.1.4.1.2620.1.29.2.4.1.3.14249|2|26 +1.3.6.1.4.1.2620.1.29.2.4.1.3.15114|2|8 +1.3.6.1.4.1.2620.1.29.2.4.1.3.34138|2|4 +1.3.6.1.4.1.2620.1.29.2.4.1.3.35579|2|3 +1.3.6.1.4.1.2620.1.29.2.4.1.3.40308|2|17 +1.3.6.1.4.1.2620.1.29.2.4.1.3.56464|2|12 +1.3.6.1.4.1.2620.1.29.2.4.1.3.58518|2|3 +1.3.6.1.4.1.2620.1.29.2.4.1.3.63005|2|23 +1.3.6.1.4.1.2620.1.29.2.5.1.1.3081|66|3081 +1.3.6.1.4.1.2620.1.29.2.5.1.1.10884|66|10884 +1.3.6.1.4.1.2620.1.29.2.5.1.1.25000|66|25000 +1.3.6.1.4.1.2620.1.29.2.5.1.1.32193|66|32193 +1.3.6.1.4.1.2620.1.29.2.5.1.1.35623|66|35623 +1.3.6.1.4.1.2620.1.29.2.5.1.1.35896|66|35896 +1.3.6.1.4.1.2620.1.29.2.5.1.1.37267|66|37267 +1.3.6.1.4.1.2620.1.29.2.5.1.1.43307|66|43307 +1.3.6.1.4.1.2620.1.29.2.5.1.1.57336|66|57336 +1.3.6.1.4.1.2620.1.29.2.5.1.1.65128|66|65128 +1.3.6.1.4.1.2620.1.29.2.5.1.2.3081|4x|64726976696e67207468656972 +1.3.6.1.4.1.2620.1.29.2.5.1.2.10884|4x|616374656420616374656420627574206f78656e20666f72776172642064726976696e672064726976696e67206b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.29.2.5.1.2.25000|4x|666f7277617264204a6164656420666f7277617264207468656972 +1.3.6.1.4.1.2620.1.29.2.5.1.2.32193|4x|627574204a6164656420627574206f78656e20666f7277617264206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.29.2.5.1.2.35623|4x|717561696e746c792064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.29.2.5.1.2.35896|4x|6b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.29.2.5.1.2.37267|4x|61637465642064726976696e67 +1.3.6.1.4.1.2620.1.29.2.5.1.2.43307|4x|616374656420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.29.2.5.1.2.57336|4x|666f7277617264206f78656e207468656972204a61646564 +1.3.6.1.4.1.2620.1.29.2.5.1.2.65128|4x|6f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.29.2.5.1.3.3081|2|19 +1.3.6.1.4.1.2620.1.29.2.5.1.3.10884|2|15 +1.3.6.1.4.1.2620.1.29.2.5.1.3.25000|2|17 +1.3.6.1.4.1.2620.1.29.2.5.1.3.32193|2|30 +1.3.6.1.4.1.2620.1.29.2.5.1.3.35623|2|10 +1.3.6.1.4.1.2620.1.29.2.5.1.3.35896|2|23 +1.3.6.1.4.1.2620.1.29.2.5.1.3.37267|2|15 +1.3.6.1.4.1.2620.1.29.2.5.1.3.43307|2|2 +1.3.6.1.4.1.2620.1.29.2.5.1.3.57336|2|6 +1.3.6.1.4.1.2620.1.29.2.5.1.3.65128|2|7 +1.3.6.1.4.1.2620.1.29.2.6.1.1.5410|66|5410 +1.3.6.1.4.1.2620.1.29.2.6.1.1.16133|66|16133 +1.3.6.1.4.1.2620.1.29.2.6.1.1.16492|66|16492 +1.3.6.1.4.1.2620.1.29.2.6.1.1.23752|66|23752 +1.3.6.1.4.1.2620.1.29.2.6.1.1.29115|66|29115 +1.3.6.1.4.1.2620.1.29.2.6.1.1.33833|66|33833 +1.3.6.1.4.1.2620.1.29.2.6.1.1.42488|66|42488 +1.3.6.1.4.1.2620.1.29.2.6.1.1.46703|66|46703 +1.3.6.1.4.1.2620.1.29.2.6.1.1.52016|66|52016 +1.3.6.1.4.1.2620.1.29.2.6.1.1.52622|66|52622 +1.3.6.1.4.1.2620.1.29.2.6.1.2.5410|4|quaintly +1.3.6.1.4.1.2620.1.29.2.6.1.2.16133|4x|62757420746865697220616374656420717561696e746c792064726976696e67207a6f6d62696573204a6164656420627574 +1.3.6.1.4.1.2620.1.29.2.6.1.2.16492|4x|746865697220717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.29.2.6.1.2.23752|4x|6b657074204a61646564207a6f6d62696573207a6f6d6269657320616374656420666f7277617264207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.29.2.6.1.2.29115|4x|666f727761726420717561696e746c79206b65707420666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.29.2.6.1.2.33833|4x|7a6f6d62696573206163746564206b65707420666f7277617264206f78656e204a616465642064726976696e67207468656972206163746564 +1.3.6.1.4.1.2620.1.29.2.6.1.2.42488|4x|4a61646564204a6164656420717561696e746c79207a6f6d62696573204a6164656420627574 +1.3.6.1.4.1.2620.1.29.2.6.1.2.46703|4x|746865697220627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.29.2.6.1.2.52016|4x|4a61646564206163746564206f78656e204a6164656420717561696e746c79204a61646564204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.29.2.6.1.2.52622|4x|717561696e746c79206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.29.2.6.1.3.5410|2|12 +1.3.6.1.4.1.2620.1.29.2.6.1.3.16133|2|27 +1.3.6.1.4.1.2620.1.29.2.6.1.3.16492|2|11 +1.3.6.1.4.1.2620.1.29.2.6.1.3.23752|2|26 +1.3.6.1.4.1.2620.1.29.2.6.1.3.29115|2|29 +1.3.6.1.4.1.2620.1.29.2.6.1.3.33833|2|19 +1.3.6.1.4.1.2620.1.29.2.6.1.3.42488|2|27 +1.3.6.1.4.1.2620.1.29.2.6.1.3.46703|2|16 +1.3.6.1.4.1.2620.1.29.2.6.1.3.52016|2|23 +1.3.6.1.4.1.2620.1.29.2.6.1.3.52622|2|6 +1.3.6.1.4.1.2620.1.29.101.0|2|24 +1.3.6.1.4.1.2620.1.29.102.0|4x|6163746564207a6f6d6269657320666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.29.103.0|4x|64726976696e6720616374656420717561696e746c7920616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.30.1.0|4x|4a61646564206b657074207468656972206b657074 +1.3.6.1.4.1.2620.1.30.2.0|2|21 +1.3.6.1.4.1.2620.1.30.3.0|2|6 +1.3.6.1.4.1.2620.1.30.4.0|2|22 +1.3.6.1.4.1.2620.1.30.5.0|4x|6b65707420616374656420616374656420627574204a61646564206b65707420627574204a61646564 +1.3.6.1.4.1.2620.1.30.6.1.0|2|30 +1.3.6.1.4.1.2620.1.30.6.2.0|2|18 +1.3.6.1.4.1.2620.1.30.6.3.0|2|8 +1.3.6.1.4.1.2620.1.30.6.4.1.0|2|21 +1.3.6.1.4.1.2620.1.30.6.4.2.0|2|12 +1.3.6.1.4.1.2620.1.30.6.4.3.0|2|12 +1.3.6.1.4.1.2620.1.30.6.4.4.0|2|20 +1.3.6.1.4.1.2620.1.30.6.4.5.0|2|12 +1.3.6.1.4.1.2620.1.30.6.4.6.0|2|6 +1.3.6.1.4.1.2620.1.30.7.0|4|but +1.3.6.1.4.1.2620.1.30.8.0|4x|64726976696e672064726976696e6720666f7277617264206f78656e +1.3.6.1.4.1.2620.1.30.9.0|2|19 +1.3.6.1.4.1.2620.1.30.101.0|2|21 +1.3.6.1.4.1.2620.1.30.102.0|4x|6b6570742064726976696e67206b65707420666f7277617264206b657074206f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.30.103.0|4x|717561696e746c79204a61646564206f78656e204a6164656420717561696e746c79207a6f6d6269657320717561696e746c7920666f7277617264207468656972 +1.3.6.1.4.1.2620.1.30.999.0|4x|61637465642064726976696e67207a6f6d6269657320627574204a61646564206f78656e20627574 +1.3.6.1.4.1.2620.1.31.1.0|4|forward +1.3.6.1.4.1.2620.1.31.2.0|2|14 +1.3.6.1.4.1.2620.1.31.3.0|2|12 +1.3.6.1.4.1.2620.1.31.4.0|2|23 +1.3.6.1.4.1.2620.1.31.5.0|4x|62757420717561696e746c792064726976696e67207468656972206163746564207a6f6d6269657320666f7277617264204a61646564206163746564 +1.3.6.1.4.1.2620.1.31.6.1.1.1.0|2|29 +1.3.6.1.4.1.2620.1.31.6.1.1.2.0|2|3 +1.3.6.1.4.1.2620.1.31.6.1.1.3.0|2|22 +1.3.6.1.4.1.2620.1.31.6.1.1.4.0|2|30 +1.3.6.1.4.1.2620.1.31.6.1.1.5.0|2|7 +1.3.6.1.4.1.2620.1.31.6.1.1.6.0|2|22 +1.3.6.1.4.1.2620.1.31.6.1.1.7.0|2|3 +1.3.6.1.4.1.2620.1.31.6.1.1.8.0|2|30 +1.3.6.1.4.1.2620.1.31.6.1.1.9.0|2|30 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.18771|66|18771 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.23703|66|23703 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.26748|66|26748 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.28073|66|28073 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.41070|66|41070 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.41715|66|41715 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.45587|66|45587 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.52887|66|52887 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.57867|66|57867 +1.3.6.1.4.1.2620.1.31.6.1.2.1.1.60573|66|60573 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.18771|2|19 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.23703|2|28 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.26748|2|4 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.28073|2|29 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.41070|2|18 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.41715|2|23 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.45587|2|0 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.52887|2|15 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.57867|2|8 +1.3.6.1.4.1.2620.1.31.6.1.2.1.2.60573|2|8 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.18771|2|22 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.23703|2|29 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.26748|2|0 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.28073|2|15 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.41070|2|1 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.41715|2|15 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.45587|2|1 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.52887|2|13 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.57867|2|16 +1.3.6.1.4.1.2620.1.31.6.1.2.1.3.60573|2|12 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.18771|2|9 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.23703|2|26 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.26748|2|29 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.28073|2|5 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.41070|2|22 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.41715|2|20 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.45587|2|8 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.52887|2|21 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.57867|2|30 +1.3.6.1.4.1.2620.1.31.6.1.2.1.4.60573|2|15 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.18771|2|16 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.23703|2|29 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.26748|2|13 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.28073|2|4 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.41070|2|10 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.41715|2|5 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.45587|2|23 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.52887|2|12 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.57867|2|21 +1.3.6.1.4.1.2620.1.31.6.1.2.1.5.60573|2|7 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.18771|2|22 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.23703|2|27 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.26748|2|18 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.28073|2|13 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.41070|2|24 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.41715|2|27 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.45587|2|16 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.52887|2|27 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.57867|2|4 +1.3.6.1.4.1.2620.1.31.6.1.2.1.6.60573|2|11 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.18771|2|28 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.23703|2|26 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.26748|2|5 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.28073|2|4 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.41070|2|10 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.41715|2|0 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.45587|2|17 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.52887|2|23 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.57867|2|8 +1.3.6.1.4.1.2620.1.31.6.1.2.1.7.60573|2|16 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.18771|2|20 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.23703|2|21 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.26748|2|28 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.28073|2|3 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.41070|2|21 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.41715|2|23 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.45587|2|20 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.52887|2|21 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.57867|2|9 +1.3.6.1.4.1.2620.1.31.6.1.2.1.8.60573|2|3 +1.3.6.1.4.1.2620.1.31.7.1.1.0|2|29 +1.3.6.1.4.1.2620.1.31.7.1.2.0|2|23 +1.3.6.1.4.1.2620.1.31.101.0|2|24 +1.3.6.1.4.1.2620.1.31.102.0|4x|6b657074204a6164656420666f7277617264207a6f6d626965732064726976696e67 +1.3.6.1.4.1.2620.1.31.103.0|4x|616374656420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.31.999.0|4|kept +1.3.6.1.4.1.2620.1.36.1.1.0|2|0 +1.3.6.1.4.1.2620.1.36.1.2.0|2|7 +1.3.6.1.4.1.2620.1.36.1.3.0|2|26 +1.3.6.1.4.1.2620.1.36.1.4.0|2|19 +1.3.6.1.4.1.2620.1.38.1.0|4x|7a6f6d6269657320717561696e746c7920717561696e746c792061637465642062757420746865697220616374656420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.38.2.0|2|8 +1.3.6.1.4.1.2620.1.38.3.0|2|26 +1.3.6.1.4.1.2620.1.38.4.0|2|16 +1.3.6.1.4.1.2620.1.38.5.0|2|8 +1.3.6.1.4.1.2620.1.38.6.0|2|4 +1.3.6.1.4.1.2620.1.38.7.0|2|5 +1.3.6.1.4.1.2620.1.38.8.0|2|9 +1.3.6.1.4.1.2620.1.38.9.0|2|7 +1.3.6.1.4.1.2620.1.38.10.0|2|9 +1.3.6.1.4.1.2620.1.38.11.0|2|31 +1.3.6.1.4.1.2620.1.38.12.0|2|11 +1.3.6.1.4.1.2620.1.38.13.0|2|4 +1.3.6.1.4.1.2620.1.38.14.0|2|19 +1.3.6.1.4.1.2620.1.38.15.0|2|26 +1.3.6.1.4.1.2620.1.38.16.0|2|3 +1.3.6.1.4.1.2620.1.38.17.0|2|18 +1.3.6.1.4.1.2620.1.38.18.0|2|13 +1.3.6.1.4.1.2620.1.38.19.0|2|29 +1.3.6.1.4.1.2620.1.38.20.0|2|25 +1.3.6.1.4.1.2620.1.38.21.0|2|9 +1.3.6.1.4.1.2620.1.38.22.0|2|25 +1.3.6.1.4.1.2620.1.38.23.0|2|12 +1.3.6.1.4.1.2620.1.38.24.1.1.3528|66|3528 +1.3.6.1.4.1.2620.1.38.24.1.1.11783|66|11783 +1.3.6.1.4.1.2620.1.38.24.1.1.11814|66|11814 +1.3.6.1.4.1.2620.1.38.24.1.1.16655|66|16655 +1.3.6.1.4.1.2620.1.38.24.1.1.27954|66|27954 +1.3.6.1.4.1.2620.1.38.24.1.1.30506|66|30506 +1.3.6.1.4.1.2620.1.38.24.1.1.32554|66|32554 +1.3.6.1.4.1.2620.1.38.24.1.1.38664|66|38664 +1.3.6.1.4.1.2620.1.38.24.1.1.48679|66|48679 +1.3.6.1.4.1.2620.1.38.24.1.1.61929|66|61929 +1.3.6.1.4.1.2620.1.38.24.1.2.3528|4x|6275742061637465642064726976696e672074686569722064726976696e6720627574206b657074206163746564 +1.3.6.1.4.1.2620.1.38.24.1.2.11783|4x|7a6f6d62696573204a61646564206f78656e +1.3.6.1.4.1.2620.1.38.24.1.2.11814|4x|666f727761726420616374656420746865697220717561696e746c7920746865697220616374656420666f7277617264 +1.3.6.1.4.1.2620.1.38.24.1.2.16655|4|kept +1.3.6.1.4.1.2620.1.38.24.1.2.27954|4x|6b657074206f78656e2064726976696e6720666f7277617264206f78656e204a61646564204a616465642064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.38.24.1.2.30506|4x|7a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.2620.1.38.24.1.2.32554|4x|7a6f6d6269657320627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.38.24.1.2.38664|4x|6163746564206b657074206275742064726976696e67207a6f6d6269657320717561696e746c79206163746564206163746564206163746564 +1.3.6.1.4.1.2620.1.38.24.1.2.48679|4x|616374656420627574206163746564206163746564206f78656e20666f72776172642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.38.24.1.2.61929|4x|4a61646564207468656972206f78656e2064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.1.38.24.1.3.3528|2|30 +1.3.6.1.4.1.2620.1.38.24.1.3.11783|2|3 +1.3.6.1.4.1.2620.1.38.24.1.3.11814|2|6 +1.3.6.1.4.1.2620.1.38.24.1.3.16655|2|22 +1.3.6.1.4.1.2620.1.38.24.1.3.27954|2|21 +1.3.6.1.4.1.2620.1.38.24.1.3.30506|2|7 +1.3.6.1.4.1.2620.1.38.24.1.3.32554|2|5 +1.3.6.1.4.1.2620.1.38.24.1.3.38664|2|15 +1.3.6.1.4.1.2620.1.38.24.1.3.48679|2|29 +1.3.6.1.4.1.2620.1.38.24.1.3.61929|2|11 +1.3.6.1.4.1.2620.1.38.24.1.4.3528|2|22 +1.3.6.1.4.1.2620.1.38.24.1.4.11783|2|10 +1.3.6.1.4.1.2620.1.38.24.1.4.11814|2|27 +1.3.6.1.4.1.2620.1.38.24.1.4.16655|2|13 +1.3.6.1.4.1.2620.1.38.24.1.4.27954|2|0 +1.3.6.1.4.1.2620.1.38.24.1.4.30506|2|16 +1.3.6.1.4.1.2620.1.38.24.1.4.32554|2|28 +1.3.6.1.4.1.2620.1.38.24.1.4.38664|2|6 +1.3.6.1.4.1.2620.1.38.24.1.4.48679|2|28 +1.3.6.1.4.1.2620.1.38.24.1.4.61929|2|8 +1.3.6.1.4.1.2620.1.38.24.1.5.3528|2|1 +1.3.6.1.4.1.2620.1.38.24.1.5.11783|2|10 +1.3.6.1.4.1.2620.1.38.24.1.5.11814|2|29 +1.3.6.1.4.1.2620.1.38.24.1.5.16655|2|25 +1.3.6.1.4.1.2620.1.38.24.1.5.27954|2|18 +1.3.6.1.4.1.2620.1.38.24.1.5.30506|2|13 +1.3.6.1.4.1.2620.1.38.24.1.5.32554|2|13 +1.3.6.1.4.1.2620.1.38.24.1.5.38664|2|11 +1.3.6.1.4.1.2620.1.38.24.1.5.48679|2|22 +1.3.6.1.4.1.2620.1.38.24.1.5.61929|2|28 +1.3.6.1.4.1.2620.1.38.24.1.6.3528|2|10 +1.3.6.1.4.1.2620.1.38.24.1.6.11783|2|7 +1.3.6.1.4.1.2620.1.38.24.1.6.11814|2|30 +1.3.6.1.4.1.2620.1.38.24.1.6.16655|2|26 +1.3.6.1.4.1.2620.1.38.24.1.6.27954|2|28 +1.3.6.1.4.1.2620.1.38.24.1.6.30506|2|28 +1.3.6.1.4.1.2620.1.38.24.1.6.32554|2|20 +1.3.6.1.4.1.2620.1.38.24.1.6.38664|2|3 +1.3.6.1.4.1.2620.1.38.24.1.6.48679|2|11 +1.3.6.1.4.1.2620.1.38.24.1.6.61929|2|28 +1.3.6.1.4.1.2620.1.38.25.1.1.1484|66|1484 +1.3.6.1.4.1.2620.1.38.25.1.1.4399|66|4399 +1.3.6.1.4.1.2620.1.38.25.1.1.17141|66|17141 +1.3.6.1.4.1.2620.1.38.25.1.1.25207|66|25207 +1.3.6.1.4.1.2620.1.38.25.1.1.30563|66|30563 +1.3.6.1.4.1.2620.1.38.25.1.1.31488|66|31488 +1.3.6.1.4.1.2620.1.38.25.1.1.51584|66|51584 +1.3.6.1.4.1.2620.1.38.25.1.1.57051|66|57051 +1.3.6.1.4.1.2620.1.38.25.1.1.58915|66|58915 +1.3.6.1.4.1.2620.1.38.25.1.1.64779|66|64779 +1.3.6.1.4.1.2620.1.38.25.1.2.1484|2|23 +1.3.6.1.4.1.2620.1.38.25.1.2.4399|2|1 +1.3.6.1.4.1.2620.1.38.25.1.2.17141|2|20 +1.3.6.1.4.1.2620.1.38.25.1.2.25207|2|18 +1.3.6.1.4.1.2620.1.38.25.1.2.30563|2|27 +1.3.6.1.4.1.2620.1.38.25.1.2.31488|2|14 +1.3.6.1.4.1.2620.1.38.25.1.2.51584|2|25 +1.3.6.1.4.1.2620.1.38.25.1.2.57051|2|30 +1.3.6.1.4.1.2620.1.38.25.1.2.58915|2|2 +1.3.6.1.4.1.2620.1.38.25.1.2.64779|2|18 +1.3.6.1.4.1.2620.1.38.25.1.3.1484|4x|6163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.38.25.1.3.4399|4x|6f78656e207468656972206f78656e204a61646564206b65707420666f72776172642064726976696e67206b657074206f78656e +1.3.6.1.4.1.2620.1.38.25.1.3.17141|4x|64726976696e67204a61646564206f78656e20616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.38.25.1.3.25207|4x|7468656972204a61646564 +1.3.6.1.4.1.2620.1.38.25.1.3.30563|4x|7a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.38.25.1.3.31488|4x|4a6164656420616374656420616374656420666f7277617264 +1.3.6.1.4.1.2620.1.38.25.1.3.51584|4x|6f78656e207a6f6d62696573207468656972204a61646564 +1.3.6.1.4.1.2620.1.38.25.1.3.57051|4x|7a6f6d626965732061637465642064726976696e672062757420666f7277617264 +1.3.6.1.4.1.2620.1.38.25.1.3.58915|4x|717561696e746c79206f78656e20666f727761726420666f727761726420666f727761726420746865697220627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.38.25.1.3.64779|4x|7a6f6d62696573206f78656e204a61646564207a6f6d626965732064726976696e6720717561696e746c7920627574 +1.3.6.1.4.1.2620.1.38.25.1.4.1484|64x|8902d6ed +1.3.6.1.4.1.2620.1.38.25.1.4.4399|64x|adb5424a +1.3.6.1.4.1.2620.1.38.25.1.4.17141|64x|024dfb05 +1.3.6.1.4.1.2620.1.38.25.1.4.25207|64x|bde38fdd +1.3.6.1.4.1.2620.1.38.25.1.4.30563|64x|d63520f8 +1.3.6.1.4.1.2620.1.38.25.1.4.31488|64x|3e4f537b +1.3.6.1.4.1.2620.1.38.25.1.4.51584|64x|26b6ee49 +1.3.6.1.4.1.2620.1.38.25.1.4.57051|64x|8b7db7b4 +1.3.6.1.4.1.2620.1.38.25.1.4.58915|64x|615518e3 +1.3.6.1.4.1.2620.1.38.25.1.4.64779|64x|6599a7ac +1.3.6.1.4.1.2620.1.38.25.1.5.1484|2|20 +1.3.6.1.4.1.2620.1.38.25.1.5.4399|2|1 +1.3.6.1.4.1.2620.1.38.25.1.5.17141|2|20 +1.3.6.1.4.1.2620.1.38.25.1.5.25207|2|4 +1.3.6.1.4.1.2620.1.38.25.1.5.30563|2|23 +1.3.6.1.4.1.2620.1.38.25.1.5.31488|2|7 +1.3.6.1.4.1.2620.1.38.25.1.5.51584|2|9 +1.3.6.1.4.1.2620.1.38.25.1.5.57051|2|20 +1.3.6.1.4.1.2620.1.38.25.1.5.58915|2|29 +1.3.6.1.4.1.2620.1.38.25.1.5.64779|2|4 +1.3.6.1.4.1.2620.1.38.101.0|2|27 +1.3.6.1.4.1.2620.1.38.102.0|4x|746865697220666f7277617264206163746564 +1.3.6.1.4.1.2620.1.38.103.0|4x|64726976696e6720666f72776172642064726976696e67206163746564206163746564 +1.3.6.1.4.1.2620.1.39.1.1.0|4x|64726976696e67206f78656e2064726976696e672062757420627574206163746564207468656972 +1.3.6.1.4.1.2620.1.39.1.2.0|4x|616374656420627574204a61646564 +1.3.6.1.4.1.2620.1.39.1.3.0|4x|64726976696e672062757420717561696e746c79207a6f6d6269657320627574206b65707420666f727761726420666f7277617264207468656972 +1.3.6.1.4.1.2620.1.39.2.1.0|4x|666f7277617264204a61646564204a61646564 +1.3.6.1.4.1.2620.1.39.2.2.0|4x|717561696e746c7920627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.39.2.3.0|4x|6275742064726976696e67 +1.3.6.1.4.1.2620.1.39.2.4.0|4x|666f7277617264206b657074 +1.3.6.1.4.1.2620.1.39.101.0|2|28 +1.3.6.1.4.1.2620.1.39.102.0|4x|6f78656e20666f7277617264206b6570742064726976696e67206b657074206f78656e +1.3.6.1.4.1.2620.1.39.103.0|4x|6b657074206b65707420627574204a61646564207a6f6d62696573204a61646564206b657074206f78656e +1.3.6.1.4.1.2620.1.42.1.0|4x|616374656420666f7277617264207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.42.2.0|2|10 +1.3.6.1.4.1.2620.1.42.3.0|4x|666f7277617264206f78656e20627574206163746564204a6164656420627574206f78656e206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.42.4.0|2|19 +1.3.6.1.4.1.2620.1.42.5.0|2|26 +1.3.6.1.4.1.2620.1.42.6.0|2|21 +1.3.6.1.4.1.2620.1.42.7.1.1.8496|66|8496 +1.3.6.1.4.1.2620.1.42.7.1.1.19506|66|19506 +1.3.6.1.4.1.2620.1.42.7.1.1.21368|66|21368 +1.3.6.1.4.1.2620.1.42.7.1.1.23320|66|23320 +1.3.6.1.4.1.2620.1.42.7.1.1.23813|66|23813 +1.3.6.1.4.1.2620.1.42.7.1.1.27519|66|27519 +1.3.6.1.4.1.2620.1.42.7.1.1.30558|66|30558 +1.3.6.1.4.1.2620.1.42.7.1.1.35854|66|35854 +1.3.6.1.4.1.2620.1.42.7.1.1.38212|66|38212 +1.3.6.1.4.1.2620.1.42.7.1.1.60129|66|60129 +1.3.6.1.4.1.2620.1.42.7.1.2.8496|4x|746865697220746865697220717561696e746c79206163746564206f78656e +1.3.6.1.4.1.2620.1.42.7.1.2.19506|4x|7468656972206b657074206b657074207a6f6d626965732064726976696e67206b657074206b657074 +1.3.6.1.4.1.2620.1.42.7.1.2.21368|4|zombies +1.3.6.1.4.1.2620.1.42.7.1.2.23320|4x|666f7277617264206b657074206f78656e206163746564204a61646564207a6f6d62696573206f78656e20746865697220627574 +1.3.6.1.4.1.2620.1.42.7.1.2.23813|4x|666f72776172642064726976696e6720666f7277617264206b6570742064726976696e6720627574207468656972206f78656e206163746564 +1.3.6.1.4.1.2620.1.42.7.1.2.27519|4x|616374656420616374656420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.42.7.1.2.30558|4|acted +1.3.6.1.4.1.2620.1.42.7.1.2.35854|4|oxen +1.3.6.1.4.1.2620.1.42.7.1.2.38212|4x|7468656972204a61646564207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.42.7.1.2.60129|4x|6b65707420616374656420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.1.42.7.1.3.8496|4x|627574206f78656e204a616465642064726976696e672062757420627574 +1.3.6.1.4.1.2620.1.42.7.1.3.19506|4x|666f72776172642064726976696e67206275742064726976696e67204a6164656420666f727761726420717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.42.7.1.3.21368|4x|666f727761726420616374656420666f727761726420666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.42.7.1.3.23320|4x|64726976696e6720627574 +1.3.6.1.4.1.2620.1.42.7.1.3.23813|4x|6f78656e206b657074206f78656e +1.3.6.1.4.1.2620.1.42.7.1.3.27519|4x|6b657074207a6f6d62696573207a6f6d62696573207468656972206f78656e +1.3.6.1.4.1.2620.1.42.7.1.3.30558|4|oxen +1.3.6.1.4.1.2620.1.42.7.1.3.35854|4x|61637465642064726976696e67 +1.3.6.1.4.1.2620.1.42.7.1.3.38212|4x|7a6f6d6269657320616374656420666f72776172642064726976696e67207a6f6d62696573207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.42.7.1.3.60129|4|but +1.3.6.1.4.1.2620.1.42.7.1.4.8496|2|14 +1.3.6.1.4.1.2620.1.42.7.1.4.19506|2|17 +1.3.6.1.4.1.2620.1.42.7.1.4.21368|2|16 +1.3.6.1.4.1.2620.1.42.7.1.4.23320|2|13 +1.3.6.1.4.1.2620.1.42.7.1.4.23813|2|19 +1.3.6.1.4.1.2620.1.42.7.1.4.27519|2|0 +1.3.6.1.4.1.2620.1.42.7.1.4.30558|2|0 +1.3.6.1.4.1.2620.1.42.7.1.4.35854|2|25 +1.3.6.1.4.1.2620.1.42.7.1.4.38212|2|4 +1.3.6.1.4.1.2620.1.42.7.1.4.60129|2|29 +1.3.6.1.4.1.2620.1.42.7.1.5.8496|4x|4a61646564204a6164656420746865697220616374656420717561696e746c79206f78656e206b657074206f78656e20627574 +1.3.6.1.4.1.2620.1.42.7.1.5.19506|4x|6b657074206f78656e +1.3.6.1.4.1.2620.1.42.7.1.5.21368|4x|64726976696e67206f78656e20717561696e746c79206f78656e20666f7277617264206b6570742064726976696e67206b657074 +1.3.6.1.4.1.2620.1.42.7.1.5.23320|4x|64726976696e67206f78656e207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.42.7.1.5.23813|4x|627574206f78656e20717561696e746c79207a6f6d6269657320616374656420616374656420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.42.7.1.5.27519|4x|666f727761726420746865697220717561696e746c7920616374656420666f72776172642062757420627574204a61646564 +1.3.6.1.4.1.2620.1.42.7.1.5.30558|4x|7a6f6d6269657320666f72776172642064726976696e672064726976696e6720616374656420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.1.42.7.1.5.35854|4x|666f727761726420666f7277617264206163746564206b6570742064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.42.7.1.5.38212|4x|61637465642064726976696e6720666f7277617264206b657074206163746564206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.42.7.1.5.60129|4x|627574206b65707420717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.42.7.1.6.8496|4x|717561696e746c79204a61646564206b657074207a6f6d62696573207468656972206163746564206f78656e207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.42.7.1.6.19506|4x|6f78656e20616374656420717561696e746c7920717561696e746c792064726976696e67206b65707420746865697220666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.42.7.1.6.21368|4x|717561696e746c7920666f727761726420627574206b657074204a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.42.7.1.6.23320|4x|4a61646564207a6f6d6269657320627574204a616465642062757420666f7277617264207a6f6d626965732064726976696e6720627574 +1.3.6.1.4.1.2620.1.42.7.1.6.23813|4x|666f7277617264206163746564206b657074206163746564206f78656e20627574206f78656e204a61646564 +1.3.6.1.4.1.2620.1.42.7.1.6.27519|4x|7468656972206f78656e2074686569722064726976696e67207a6f6d62696573206f78656e20746865697220717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.42.7.1.6.30558|4x|7468656972206f78656e2062757420717561696e746c79204a6164656420717561696e746c79 +1.3.6.1.4.1.2620.1.42.7.1.6.35854|4x|6f78656e204a6164656420666f7277617264204a61646564206b657074 +1.3.6.1.4.1.2620.1.42.7.1.6.38212|4x|4a6164656420666f7277617264206163746564 +1.3.6.1.4.1.2620.1.42.7.1.6.60129|4x|666f7277617264206f78656e +1.3.6.1.4.1.2620.1.42.7.1.7.8496|4x|7a6f6d626965732064726976696e67206b65707420746865697220666f727761726420666f7277617264 +1.3.6.1.4.1.2620.1.42.7.1.7.19506|4x|64726976696e6720746865697220627574206163746564204a61646564206b65707420616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.42.7.1.7.21368|4x|7a6f6d62696573206b65707420717561696e746c7920717561696e746c792064726976696e67206b657074207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.42.7.1.7.23320|4x|74686569722062757420666f727761726420666f72776172642064726976696e6720666f727761726420717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.42.7.1.7.23813|4|quaintly +1.3.6.1.4.1.2620.1.42.7.1.7.27519|4x|6f78656e206163746564207468656972 +1.3.6.1.4.1.2620.1.42.7.1.7.30558|4x|666f7277617264206b657074206f78656e +1.3.6.1.4.1.2620.1.42.7.1.7.35854|4|driving +1.3.6.1.4.1.2620.1.42.7.1.7.38212|4x|7a6f6d62696573204a61646564204a61646564207a6f6d6269657320616374656420746865697220717561696e746c79206b657074206163746564 +1.3.6.1.4.1.2620.1.42.7.1.7.60129|4|zombies +1.3.6.1.4.1.2620.1.42.7.1.8.8496|4|quaintly +1.3.6.1.4.1.2620.1.42.7.1.8.19506|4x|6b6570742064726976696e672062757420746865697220746865697220627574206f78656e +1.3.6.1.4.1.2620.1.42.7.1.8.21368|4x|7468656972206f78656e20717561696e746c792074686569722074686569722064726976696e67204a6164656420627574 +1.3.6.1.4.1.2620.1.42.7.1.8.23320|4x|64726976696e67206163746564206b657074207468656972206b65707420666f7277617264206f78656e206b657074207468656972 +1.3.6.1.4.1.2620.1.42.7.1.8.23813|4x|4a61646564204a6164656420717561696e746c7920666f727761726420616374656420717561696e746c792064726976696e6720616374656420666f7277617264 +1.3.6.1.4.1.2620.1.42.7.1.8.27519|4x|6163746564206f78656e20666f72776172642064726976696e672064726976696e67207468656972207468656972207468656972 +1.3.6.1.4.1.2620.1.42.7.1.8.30558|4x|616374656420717561696e746c7920666f7277617264204a61646564204a61646564 +1.3.6.1.4.1.2620.1.42.7.1.8.35854|4x|746865697220627574207468656972204a61646564204a61646564207a6f6d62696573 +1.3.6.1.4.1.2620.1.42.7.1.8.38212|4x|717561696e746c792064726976696e672064726976696e672074686569722064726976696e67 +1.3.6.1.4.1.2620.1.42.7.1.8.60129|4x|6f78656e20616374656420666f7277617264204a61646564206163746564 +1.3.6.1.4.1.2620.1.42.8.1.1.20313|66|20313 +1.3.6.1.4.1.2620.1.42.8.1.1.29903|66|29903 +1.3.6.1.4.1.2620.1.42.8.1.1.30761|66|30761 +1.3.6.1.4.1.2620.1.42.8.1.1.32365|66|32365 +1.3.6.1.4.1.2620.1.42.8.1.1.47436|66|47436 +1.3.6.1.4.1.2620.1.42.8.1.1.49361|66|49361 +1.3.6.1.4.1.2620.1.42.8.1.1.52713|66|52713 +1.3.6.1.4.1.2620.1.42.8.1.1.57160|66|57160 +1.3.6.1.4.1.2620.1.42.8.1.1.59523|66|59523 +1.3.6.1.4.1.2620.1.42.8.1.1.60699|66|60699 +1.3.6.1.4.1.2620.1.42.8.1.2.20313|4x|6b657074206b6570742061637465642064726976696e67207468656972206b657074207468656972207468656972206b657074 +1.3.6.1.4.1.2620.1.42.8.1.2.29903|4x|7468656972206163746564206f78656e206163746564206163746564207468656972 +1.3.6.1.4.1.2620.1.42.8.1.2.30761|4x|6275742062757420666f7277617264204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.42.8.1.2.32365|4x|6f78656e204a6164656420717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.42.8.1.2.47436|4|forward +1.3.6.1.4.1.2620.1.42.8.1.2.49361|4x|666f72776172642064726976696e67 +1.3.6.1.4.1.2620.1.42.8.1.2.52713|4x|7a6f6d626965732062757420717561696e746c79206b657074206f78656e20627574 +1.3.6.1.4.1.2620.1.42.8.1.2.57160|4x|7468656972206f78656e20717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.42.8.1.2.59523|4x|666f72776172642064726976696e6720717561696e746c792062757420717561696e746c79207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.2620.1.42.8.1.2.60699|4x|6275742074686569722064726976696e672061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.42.8.1.3.20313|4|forward +1.3.6.1.4.1.2620.1.42.8.1.3.29903|4|but +1.3.6.1.4.1.2620.1.42.8.1.3.30761|4x|666f727761726420717561696e746c7920627574207468656972206275742064726976696e672064726976696e67206f78656e +1.3.6.1.4.1.2620.1.42.8.1.3.32365|4x|616374656420616374656420717561696e746c7920746865697220627574 +1.3.6.1.4.1.2620.1.42.8.1.3.47436|4|acted +1.3.6.1.4.1.2620.1.42.8.1.3.49361|4x|6b6570742064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.42.8.1.3.52713|4x|746865697220666f7277617264206b657074206f78656e206b657074 +1.3.6.1.4.1.2620.1.42.8.1.3.57160|4x|6b657074206b657074207a6f6d626965732064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.42.8.1.3.59523|4x|717561696e746c79206b657074206f78656e20627574206b65707420666f727761726420616374656420666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.42.8.1.3.60699|4x|4a61646564204a61646564206f78656e +1.3.6.1.4.1.2620.1.42.8.1.4.20313|2|14 +1.3.6.1.4.1.2620.1.42.8.1.4.29903|2|23 +1.3.6.1.4.1.2620.1.42.8.1.4.30761|2|2 +1.3.6.1.4.1.2620.1.42.8.1.4.32365|2|25 +1.3.6.1.4.1.2620.1.42.8.1.4.47436|2|31 +1.3.6.1.4.1.2620.1.42.8.1.4.49361|2|12 +1.3.6.1.4.1.2620.1.42.8.1.4.52713|2|27 +1.3.6.1.4.1.2620.1.42.8.1.4.57160|2|1 +1.3.6.1.4.1.2620.1.42.8.1.4.59523|2|16 +1.3.6.1.4.1.2620.1.42.8.1.4.60699|2|23 +1.3.6.1.4.1.2620.1.42.8.1.5.20313|4x|6b657074204a61646564 +1.3.6.1.4.1.2620.1.42.8.1.5.29903|4x|7a6f6d626965732062757420717561696e746c79 +1.3.6.1.4.1.2620.1.42.8.1.5.30761|4x|6f78656e20666f727761726420746865697220627574206b657074204a6164656420717561696e746c79206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.42.8.1.5.32365|4x|64726976696e6720666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.2620.1.42.8.1.5.47436|4x|6b657074206f78656e2062757420717561696e746c79204a61646564206f78656e206b65707420746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.42.8.1.5.49361|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.42.8.1.5.52713|4x|666f7277617264206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.42.8.1.5.57160|4x|666f7277617264204a6164656420717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.42.8.1.5.59523|4x|6163746564204a61646564206163746564207468656972 +1.3.6.1.4.1.2620.1.42.8.1.5.60699|4x|6b657074204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.42.8.1.6.20313|2|15 +1.3.6.1.4.1.2620.1.42.8.1.6.29903|2|28 +1.3.6.1.4.1.2620.1.42.8.1.6.30761|2|8 +1.3.6.1.4.1.2620.1.42.8.1.6.32365|2|31 +1.3.6.1.4.1.2620.1.42.8.1.6.47436|2|21 +1.3.6.1.4.1.2620.1.42.8.1.6.49361|2|19 +1.3.6.1.4.1.2620.1.42.8.1.6.52713|2|21 +1.3.6.1.4.1.2620.1.42.8.1.6.57160|2|13 +1.3.6.1.4.1.2620.1.42.8.1.6.59523|2|17 +1.3.6.1.4.1.2620.1.42.8.1.6.60699|2|27 +1.3.6.1.4.1.2620.1.42.9.1.1.3560|66|3560 +1.3.6.1.4.1.2620.1.42.9.1.1.3851|66|3851 +1.3.6.1.4.1.2620.1.42.9.1.1.5012|66|5012 +1.3.6.1.4.1.2620.1.42.9.1.1.21820|66|21820 +1.3.6.1.4.1.2620.1.42.9.1.1.24307|66|24307 +1.3.6.1.4.1.2620.1.42.9.1.1.40285|66|40285 +1.3.6.1.4.1.2620.1.42.9.1.1.52436|66|52436 +1.3.6.1.4.1.2620.1.42.9.1.1.57839|66|57839 +1.3.6.1.4.1.2620.1.42.9.1.1.58995|66|58995 +1.3.6.1.4.1.2620.1.42.9.1.1.63227|66|63227 +1.3.6.1.4.1.2620.1.42.9.1.2.3560|4x|6f78656e2062757420717561696e746c79207468656972204a61646564207468656972 +1.3.6.1.4.1.2620.1.42.9.1.2.3851|4x|6b657074207468656972206b657074206b657074207a6f6d6269657320627574206f78656e207468656972 +1.3.6.1.4.1.2620.1.42.9.1.2.5012|4x|6f78656e20746865697220746865697220666f7277617264 +1.3.6.1.4.1.2620.1.42.9.1.2.21820|4x|4a61646564206f78656e2062757420666f7277617264206f78656e +1.3.6.1.4.1.2620.1.42.9.1.2.24307|4x|4a61646564204a6164656420627574206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2620.1.42.9.1.2.40285|4x|7a6f6d62696573206b65707420616374656420627574204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.2.52436|4x|666f7277617264204a61646564206b657074206f78656e206163746564207a6f6d6269657320666f72776172642064726976696e6720627574 +1.3.6.1.4.1.2620.1.42.9.1.2.57839|4x|6f78656e207a6f6d62696573207a6f6d62696573207468656972206f78656e207a6f6d62696573206163746564204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.2.58995|4x|6f78656e204a6164656420717561696e746c79204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.2.63227|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.42.9.1.3.3560|4|but +1.3.6.1.4.1.2620.1.42.9.1.3.3851|4x|616374656420666f727761726420627574204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.42.9.1.3.5012|4|zombies +1.3.6.1.4.1.2620.1.42.9.1.3.21820|4x|717561696e746c7920746865697220666f7277617264207468656972204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.3.24307|4x|666f7277617264206b657074204a61646564207468656972 +1.3.6.1.4.1.2620.1.42.9.1.3.40285|4x|7468656972206275742064726976696e6720627574 +1.3.6.1.4.1.2620.1.42.9.1.3.52436|4x|4a61646564207468656972207a6f6d62696573204a61646564206f78656e20616374656420717561696e746c79 +1.3.6.1.4.1.2620.1.42.9.1.3.57839|4x|627574206275742074686569722062757420666f72776172642064726976696e67204a61646564207468656972204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.3.58995|4x|717561696e746c7920717561696e746c79206b657074207468656972206f78656e204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.42.9.1.3.63227|4x|6b657074206b6570742064726976696e67206f78656e206163746564 +1.3.6.1.4.1.2620.1.42.9.1.4.3560|4x|616374656420746865697220627574207a6f6d62696573207a6f6d6269657320746865697220717561696e746c792064726976696e67206b657074 +1.3.6.1.4.1.2620.1.42.9.1.4.3851|4|forward +1.3.6.1.4.1.2620.1.42.9.1.4.5012|4x|666f7277617264206f78656e20717561696e746c79207a6f6d6269657320746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.42.9.1.4.21820|4x|6f78656e2074686569722064726976696e6720627574206b657074206f78656e206163746564 +1.3.6.1.4.1.2620.1.42.9.1.4.24307|4x|666f7277617264207468656972206b657074207a6f6d62696573206275742074686569722064726976696e672064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.42.9.1.4.40285|4x|7468656972206f78656e20666f7277617264 +1.3.6.1.4.1.2620.1.42.9.1.4.52436|4x|717561696e746c7920627574207a6f6d6269657320627574204a616465642064726976696e67 +1.3.6.1.4.1.2620.1.42.9.1.4.57839|4x|6b657074206f78656e207468656972206163746564206163746564 +1.3.6.1.4.1.2620.1.42.9.1.4.58995|4x|717561696e746c792064726976696e67206f78656e20666f727761726420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.1.42.9.1.4.63227|4x|7a6f6d626965732062757420717561696e746c79206163746564206163746564 +1.3.6.1.4.1.2620.1.42.9.1.5.3560|4x|7a6f6d626965732064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.5.3851|4x|6b657074206163746564206f78656e20717561696e746c7920717561696e746c79206f78656e20627574207468656972 +1.3.6.1.4.1.2620.1.42.9.1.5.5012|4x|666f727761726420666f72776172642064726976696e67206f78656e206b657074 +1.3.6.1.4.1.2620.1.42.9.1.5.21820|4|their +1.3.6.1.4.1.2620.1.42.9.1.5.24307|4x|6b6570742062757420616374656420666f7277617264206f78656e +1.3.6.1.4.1.2620.1.42.9.1.5.40285|4|zombies +1.3.6.1.4.1.2620.1.42.9.1.5.52436|4x|4a61646564206f78656e20666f7277617264206b65707420627574206b657074 +1.3.6.1.4.1.2620.1.42.9.1.5.57839|4x|666f7277617264207a6f6d626965732064726976696e67206b65707420717561696e746c7920666f7277617264206f78656e206b657074204a61646564 +1.3.6.1.4.1.2620.1.42.9.1.5.58995|4x|4a6164656420717561696e746c792064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.42.9.1.5.63227|4|their +1.3.6.1.4.1.2620.1.43.1.1.0|4x|61637465642074686569722074686569722061637465642064726976696e6720627574 +1.3.6.1.4.1.2620.1.43.1.2.0|4x|6163746564207a6f6d62696573 +1.3.6.1.4.1.2620.1.43.1.3.0|4x|64726976696e6720717561696e746c79204a6164656420746865697220717561696e746c7920746865697220666f7277617264207468656972206b657074 +1.3.6.1.4.1.2620.1.43.2.1.0|4x|717561696e746c7920666f7277617264206b657074206f78656e204a616465642064726976696e67204a61646564204a61646564207468656972 +1.3.6.1.4.1.2620.1.43.2.2.0|4x|717561696e746c79206b6570742064726976696e6720666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.43.2.3.0|4x|64726976696e6720666f7277617264207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.43.2.4.0|4x|666f7277617264206f78656e2062757420717561696e746c79207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.4.1.2620.1.43.3.1.0|2|1 +1.3.6.1.4.1.2620.1.43.3.2.0|4x|6f78656e20717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.43.101.0|2|3 +1.3.6.1.4.1.2620.1.43.102.0|4x|62757420666f7277617264 +1.3.6.1.4.1.2620.1.43.103.0|4x|717561696e746c79206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.1.2213|66|2213 +1.3.6.1.4.1.2620.1.44.1.1.1.1.9576|66|9576 +1.3.6.1.4.1.2620.1.44.1.1.1.1.9685|66|9685 +1.3.6.1.4.1.2620.1.44.1.1.1.1.30366|66|30366 +1.3.6.1.4.1.2620.1.44.1.1.1.1.30757|66|30757 +1.3.6.1.4.1.2620.1.44.1.1.1.1.40292|66|40292 +1.3.6.1.4.1.2620.1.44.1.1.1.1.45039|66|45039 +1.3.6.1.4.1.2620.1.44.1.1.1.1.51637|66|51637 +1.3.6.1.4.1.2620.1.44.1.1.1.1.62524|66|62524 +1.3.6.1.4.1.2620.1.44.1.1.1.1.62847|66|62847 +1.3.6.1.4.1.2620.1.44.1.1.1.2.2213|4x|6163746564204a61646564204a616465642064726976696e67207468656972206f78656e206b65707420746865697220627574 +1.3.6.1.4.1.2620.1.44.1.1.1.2.9576|4x|6f78656e20717561696e746c79206b657074206163746564 +1.3.6.1.4.1.2620.1.44.1.1.1.2.9685|4x|64726976696e67206f78656e2064726976696e6720746865697220627574204a6164656420627574207468656972206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.2.30366|4x|746865697220666f7277617264206163746564 +1.3.6.1.4.1.2620.1.44.1.1.1.2.30757|4x|6b657074206b657074206f78656e20616374656420717561696e746c7920717561696e746c79207a6f6d6269657320746865697220627574 +1.3.6.1.4.1.2620.1.44.1.1.1.2.40292|4x|7468656972207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.1.44.1.1.1.2.45039|4x|64726976696e67206f78656e204a61646564204a616465642062757420627574206275742064726976696e672064726976696e67 +1.3.6.1.4.1.2620.1.44.1.1.1.2.51637|4|driving +1.3.6.1.4.1.2620.1.44.1.1.1.2.62524|4x|627574206f78656e20627574206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.2.62847|4x|7468656972206b65707420627574 +1.3.6.1.4.1.2620.1.44.1.1.1.3.2213|4x|7468656972206f78656e204a616465642074686569722062757420666f7277617264207468656972206163746564 +1.3.6.1.4.1.2620.1.44.1.1.1.3.9576|4x|7a6f6d62696573207468656972206275742064726976696e67204a61646564206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.3.9685|4x|64726976696e6720746865697220746865697220627574207468656972207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.3.30366|4x|64726976696e672061637465642061637465642064726976696e6720746865697220717561696e746c792064726976696e67 +1.3.6.1.4.1.2620.1.44.1.1.1.3.30757|4|zombies +1.3.6.1.4.1.2620.1.44.1.1.1.3.40292|4x|6f78656e20746865697220717561696e746c79 +1.3.6.1.4.1.2620.1.44.1.1.1.3.45039|4|oxen +1.3.6.1.4.1.2620.1.44.1.1.1.3.51637|4x|64726976696e67207a6f6d62696573207a6f6d62696573204a6164656420666f727761726420627574206b657074207468656972 +1.3.6.1.4.1.2620.1.44.1.1.1.3.62524|4x|4a6164656420616374656420627574204a61646564 +1.3.6.1.4.1.2620.1.44.1.1.1.3.62847|4x|717561696e746c79206b657074206163746564204a61646564206163746564207a6f6d62696573207468656972204a61646564206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.4.2213|2|12 +1.3.6.1.4.1.2620.1.44.1.1.1.4.9576|2|20 +1.3.6.1.4.1.2620.1.44.1.1.1.4.9685|2|17 +1.3.6.1.4.1.2620.1.44.1.1.1.4.30366|2|13 +1.3.6.1.4.1.2620.1.44.1.1.1.4.30757|2|23 +1.3.6.1.4.1.2620.1.44.1.1.1.4.40292|2|10 +1.3.6.1.4.1.2620.1.44.1.1.1.4.45039|2|4 +1.3.6.1.4.1.2620.1.44.1.1.1.4.51637|2|13 +1.3.6.1.4.1.2620.1.44.1.1.1.4.62524|2|0 +1.3.6.1.4.1.2620.1.44.1.1.1.4.62847|2|24 +1.3.6.1.4.1.2620.1.44.1.1.1.5.2213|2|0 +1.3.6.1.4.1.2620.1.44.1.1.1.5.9576|2|14 +1.3.6.1.4.1.2620.1.44.1.1.1.5.9685|2|27 +1.3.6.1.4.1.2620.1.44.1.1.1.5.30366|2|22 +1.3.6.1.4.1.2620.1.44.1.1.1.5.30757|2|31 +1.3.6.1.4.1.2620.1.44.1.1.1.5.40292|2|22 +1.3.6.1.4.1.2620.1.44.1.1.1.5.45039|2|23 +1.3.6.1.4.1.2620.1.44.1.1.1.5.51637|2|1 +1.3.6.1.4.1.2620.1.44.1.1.1.5.62524|2|25 +1.3.6.1.4.1.2620.1.44.1.1.1.5.62847|2|30 +1.3.6.1.4.1.2620.1.44.1.1.1.6.2213|2|24 +1.3.6.1.4.1.2620.1.44.1.1.1.6.9576|2|17 +1.3.6.1.4.1.2620.1.44.1.1.1.6.9685|2|22 +1.3.6.1.4.1.2620.1.44.1.1.1.6.30366|2|28 +1.3.6.1.4.1.2620.1.44.1.1.1.6.30757|2|22 +1.3.6.1.4.1.2620.1.44.1.1.1.6.40292|2|7 +1.3.6.1.4.1.2620.1.44.1.1.1.6.45039|2|15 +1.3.6.1.4.1.2620.1.44.1.1.1.6.51637|2|22 +1.3.6.1.4.1.2620.1.44.1.1.1.6.62524|2|1 +1.3.6.1.4.1.2620.1.44.1.1.1.6.62847|2|15 +1.3.6.1.4.1.2620.1.44.1.1.1.7.2213|2|15 +1.3.6.1.4.1.2620.1.44.1.1.1.7.9576|2|30 +1.3.6.1.4.1.2620.1.44.1.1.1.7.9685|2|6 +1.3.6.1.4.1.2620.1.44.1.1.1.7.30366|2|5 +1.3.6.1.4.1.2620.1.44.1.1.1.7.30757|2|25 +1.3.6.1.4.1.2620.1.44.1.1.1.7.40292|2|7 +1.3.6.1.4.1.2620.1.44.1.1.1.7.45039|2|9 +1.3.6.1.4.1.2620.1.44.1.1.1.7.51637|2|3 +1.3.6.1.4.1.2620.1.44.1.1.1.7.62524|2|11 +1.3.6.1.4.1.2620.1.44.1.1.1.7.62847|2|24 +1.3.6.1.4.1.2620.1.44.1.1.1.8.2213|2|27 +1.3.6.1.4.1.2620.1.44.1.1.1.8.9576|2|9 +1.3.6.1.4.1.2620.1.44.1.1.1.8.9685|2|6 +1.3.6.1.4.1.2620.1.44.1.1.1.8.30366|2|30 +1.3.6.1.4.1.2620.1.44.1.1.1.8.30757|2|4 +1.3.6.1.4.1.2620.1.44.1.1.1.8.40292|2|29 +1.3.6.1.4.1.2620.1.44.1.1.1.8.45039|2|4 +1.3.6.1.4.1.2620.1.44.1.1.1.8.51637|2|20 +1.3.6.1.4.1.2620.1.44.1.1.1.8.62524|2|11 +1.3.6.1.4.1.2620.1.44.1.1.1.8.62847|2|2 +1.3.6.1.4.1.2620.1.44.1.1.1.9.2213|2|16 +1.3.6.1.4.1.2620.1.44.1.1.1.9.9576|2|18 +1.3.6.1.4.1.2620.1.44.1.1.1.9.9685|2|21 +1.3.6.1.4.1.2620.1.44.1.1.1.9.30366|2|13 +1.3.6.1.4.1.2620.1.44.1.1.1.9.30757|2|5 +1.3.6.1.4.1.2620.1.44.1.1.1.9.40292|2|31 +1.3.6.1.4.1.2620.1.44.1.1.1.9.45039|2|1 +1.3.6.1.4.1.2620.1.44.1.1.1.9.51637|2|3 +1.3.6.1.4.1.2620.1.44.1.1.1.9.62524|2|10 +1.3.6.1.4.1.2620.1.44.1.1.1.9.62847|2|12 +1.3.6.1.4.1.2620.1.44.1.1.1.10.2213|2|1 +1.3.6.1.4.1.2620.1.44.1.1.1.10.9576|2|10 +1.3.6.1.4.1.2620.1.44.1.1.1.10.9685|2|1 +1.3.6.1.4.1.2620.1.44.1.1.1.10.30366|2|11 +1.3.6.1.4.1.2620.1.44.1.1.1.10.30757|2|29 +1.3.6.1.4.1.2620.1.44.1.1.1.10.40292|2|13 +1.3.6.1.4.1.2620.1.44.1.1.1.10.45039|2|4 +1.3.6.1.4.1.2620.1.44.1.1.1.10.51637|2|15 +1.3.6.1.4.1.2620.1.44.1.1.1.10.62524|2|27 +1.3.6.1.4.1.2620.1.44.1.1.1.10.62847|2|8 +1.3.6.1.4.1.2620.1.44.1.1.1.11.2213|4x|616374656420616374656420746865697220746865697220616374656420666f7277617264 +1.3.6.1.4.1.2620.1.44.1.1.1.11.9576|4x|666f727761726420627574207a6f6d62696573206f78656e206163746564206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.11.9685|4|kept +1.3.6.1.4.1.2620.1.44.1.1.1.11.30366|4x|4a616465642061637465642064726976696e672062757420746865697220666f7277617264204a61646564 +1.3.6.1.4.1.2620.1.44.1.1.1.11.30757|4x|6b657074207468656972206f78656e206f78656e2064726976696e67206163746564204a61646564207468656972204a61646564 +1.3.6.1.4.1.2620.1.44.1.1.1.11.40292|4x|627574204a61646564206f78656e206b65707420627574206163746564206163746564 +1.3.6.1.4.1.2620.1.44.1.1.1.11.45039|4x|6b657074207a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.2620.1.44.1.1.1.11.51637|4x|6163746564206163746564207a6f6d62696573204a61646564204a61646564204a61646564206163746564 +1.3.6.1.4.1.2620.1.44.1.1.1.11.62524|4x|61637465642064726976696e67204a6164656420627574206163746564206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.11.62847|4x|717561696e746c7920717561696e746c79207468656972206163746564206b6570742064726976696e67206163746564204a61646564 +1.3.6.1.4.1.2620.1.44.1.1.1.12.2213|4x|6b657074206f78656e2064726976696e67206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.12.9576|4x|74686569722062757420666f727761726420627574 +1.3.6.1.4.1.2620.1.44.1.1.1.12.9685|4x|7a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.44.1.1.1.12.30366|4x|666f72776172642064726976696e6720666f7277617264204a6164656420717561696e746c7920717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.12.30757|4x|6b657074207468656972206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.12.40292|4x|7468656972206163746564206f78656e20666f72776172642064726976696e6720666f7277617264206b65707420666f727761726420627574 +1.3.6.1.4.1.2620.1.44.1.1.1.12.45039|4x|627574207468656972206163746564207a6f6d62696573206163746564207468656972 +1.3.6.1.4.1.2620.1.44.1.1.1.12.51637|4x|717561696e746c7920746865697220666f727761726420717561696e746c79206f78656e206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.12.62524|4|quaintly +1.3.6.1.4.1.2620.1.44.1.1.1.12.62847|4|oxen +1.3.6.1.4.1.2620.1.44.1.1.1.13.2213|4x|717561696e746c79206f78656e207a6f6d62696573206163746564206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.44.1.1.1.13.9576|4|Jaded +1.3.6.1.4.1.2620.1.44.1.1.1.13.9685|4x|6b65707420717561696e746c792074686569722064726976696e67204a6164656420627574206f78656e207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.13.30366|4x|6f78656e2062757420717561696e746c7920717561696e746c79206f78656e20746865697220717561696e746c79206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.13.30757|4x|64726976696e672064726976696e6720666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.44.1.1.1.13.40292|4x|7a6f6d62696573207a6f6d62696573206f78656e207a6f6d62696573206f78656e20627574206f78656e2064726976696e67 +1.3.6.1.4.1.2620.1.44.1.1.1.13.45039|4x|7a6f6d6269657320666f7277617264207a6f6d62696573204a61646564206f78656e20666f7277617264207468656972206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.13.51637|4x|627574204a616465642064726976696e6720717561696e746c79204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.44.1.1.1.13.62524|4x|666f7277617264204a616465642064726976696e67206f78656e206f78656e206163746564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.1.44.1.1.1.13.62847|4|but +1.3.6.1.4.1.2620.1.44.1.1.1.14.2213|4x|7468656972204a61646564207468656972206163746564204a6164656420627574 +1.3.6.1.4.1.2620.1.44.1.1.1.14.9576|4x|6b65707420717561696e746c79 +1.3.6.1.4.1.2620.1.44.1.1.1.14.9685|4x|746865697220666f7277617264 +1.3.6.1.4.1.2620.1.44.1.1.1.14.30366|4x|7a6f6d6269657320666f727761726420666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.44.1.1.1.14.30757|4x|7a6f6d62696573206f78656e207468656972206b657074204a61646564206f78656e20717561696e746c7920666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.14.40292|4x|717561696e746c79207468656972207a6f6d6269657320666f727761726420666f7277617264206f78656e20666f727761726420627574206163746564 +1.3.6.1.4.1.2620.1.44.1.1.1.14.45039|4x|62757420666f7277617264204a6164656420616374656420666f7277617264 +1.3.6.1.4.1.2620.1.44.1.1.1.14.51637|4x|4a61646564206b6570742064726976696e672064726976696e67207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.14.62524|4x|4a61646564206f78656e2064726976696e6720717561696e746c79207a6f6d62696573206b657074206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.14.62847|4x|717561696e746c7920627574 +1.3.6.1.4.1.2620.1.44.1.1.1.15.2213|4x|64726976696e67204a61646564207468656972207a6f6d626965732064726976696e67206163746564206b657074207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.44.1.1.1.15.9576|4x|666f7277617264204a61646564206f78656e20616374656420666f7277617264204a616465642064726976696e6720627574 +1.3.6.1.4.1.2620.1.44.1.1.1.15.9685|4x|64726976696e67207a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.1.44.1.1.1.15.30366|4x|717561696e746c7920746865697220717561696e746c79206f78656e20666f72776172642064726976696e67206b657074206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.15.30757|4|driving +1.3.6.1.4.1.2620.1.44.1.1.1.15.40292|4x|7a6f6d62696573206b6570742064726976696e67 +1.3.6.1.4.1.2620.1.44.1.1.1.15.45039|4x|64726976696e67206163746564206163746564204a6164656420627574206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.44.1.1.1.15.51637|4x|627574206163746564207a6f6d62696573207a6f6d62696573206163746564207a6f6d62696573207468656972206f78656e +1.3.6.1.4.1.2620.1.44.1.1.1.15.62524|4x|6f78656e20627574206f78656e20717561696e746c7920717561696e746c7920666f7277617264207468656972 +1.3.6.1.4.1.2620.1.44.1.1.1.15.62847|4x|6f78656e20717561696e746c79206b657074206b657074 +1.3.6.1.4.1.2620.1.44.1.1.1.16.2213|2|9 +1.3.6.1.4.1.2620.1.44.1.1.1.16.9576|2|27 +1.3.6.1.4.1.2620.1.44.1.1.1.16.9685|2|7 +1.3.6.1.4.1.2620.1.44.1.1.1.16.30366|2|20 +1.3.6.1.4.1.2620.1.44.1.1.1.16.30757|2|29 +1.3.6.1.4.1.2620.1.44.1.1.1.16.40292|2|13 +1.3.6.1.4.1.2620.1.44.1.1.1.16.45039|2|13 +1.3.6.1.4.1.2620.1.44.1.1.1.16.51637|2|11 +1.3.6.1.4.1.2620.1.44.1.1.1.16.62524|2|25 +1.3.6.1.4.1.2620.1.44.1.1.1.16.62847|2|7 +1.3.6.1.4.1.2620.1.44.11.0|4x|717561696e746c79204a6164656420627574206b657074 +1.3.6.1.4.1.2620.1.44.12.0|4x|6f78656e206163746564207468656972207468656972 +1.3.6.1.4.1.2620.1.44.13.0|4x|717561696e746c792064726976696e6720746865697220627574206f78656e2064726976696e672064726976696e67204a61646564204a61646564 +1.3.6.1.4.1.2620.1.44.14.0|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.2620.1.44.15.0|4x|4a61646564207468656972206f78656e207a6f6d626965732064726976696e67207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.2620.1.44.16.0|4x|62757420717561696e746c7920666f7277617264206f78656e2074686569722062757420746865697220666f727761726420627574 +1.3.6.1.4.1.2620.1.44.17.0|4x|7a6f6d6269657320627574206f78656e +1.3.6.1.4.1.2620.1.44.18.0|2|16 +1.3.6.1.4.1.2620.1.44.19.0|2|8 +1.3.6.1.4.1.2620.1.44.20.0|4x|666f7277617264206163746564207468656972206275742064726976696e67 +1.3.6.1.4.1.2620.1.44.21.0|4x|61637465642064726976696e67206163746564 +1.3.6.1.4.1.2620.1.44.22.0|4x|62757420616374656420666f727761726420666f727761726420746865697220666f7277617264206163746564 +1.3.6.1.4.1.2620.1.44.23.0|2|28 +1.3.6.1.4.1.2620.1.44.24.0|2|22 +1.3.6.1.4.1.2620.1.44.25.0|2|3 +1.3.6.1.4.1.2620.1.44.26.0|2|0 +1.3.6.1.4.1.2620.1.44.27.0|2|15 +1.3.6.1.4.1.2620.1.44.28.0|4x|4a6164656420717561696e746c7920627574207a6f6d62696573207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.44.29.0|4x|64726976696e6720666f727761726420666f7277617264207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.2620.1.44.30.0|4x|64726976696e67207a6f6d626965732064726976696e672064726976696e6720666f727761726420666f72776172642064726976696e67206163746564 +1.3.6.1.4.1.2620.1.44.31.0|4x|7a6f6d626965732064726976696e6720627574 +1.3.6.1.4.1.2620.1.44.32.0|4x|64726976696e67207a6f6d62696573206f78656e206b657074206b6570742064726976696e672064726976696e67204a61646564 +1.3.6.1.4.1.2620.1.44.33.0|4x|64726976696e672064726976696e67204a6164656420717561696e746c79204a61646564207a6f6d626965732062757420717561696e746c79206163746564 +1.3.6.1.4.1.2620.1.44.34.0|4x|6163746564206f78656e206b657074 +1.3.6.1.4.1.2620.1.44.35.0|4x|6f78656e206b6570742064726976696e6720746865697220746865697220627574207468656972 +1.3.6.1.4.1.2620.1.44.36.0|4x|64726976696e67206163746564206f78656e +1.3.6.1.4.1.2620.1.44.37.0|2|22 +1.3.6.1.4.1.2620.1.44.38.0|4|acted +1.3.6.1.4.1.2620.1.44.101.0|2|31 +1.3.6.1.4.1.2620.1.44.102.0|4x|4a61646564207468656972206f78656e204a61646564206b65707420666f7277617264206b657074 +1.3.6.1.4.1.2620.1.44.103.0|4x|717561696e746c7920717561696e746c7920627574206b657074206f78656e +1.3.6.1.4.1.2620.1.46.1.1.0|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.2620.1.46.1.2.0|4|forward +1.3.6.1.4.1.2620.1.46.1.3.0|4x|62757420627574206163746564207a6f6d6269657320627574 +1.3.6.1.4.1.2620.1.46.1.4.0|4x|6f78656e206f78656e207a6f6d62696573207468656972206f78656e +1.3.6.1.4.1.2620.1.46.2.1.0|4x|6163746564206f78656e2062757420627574206f78656e204a61646564204a61646564207468656972 +1.3.6.1.4.1.2620.1.46.2.2.0|4x|7a6f6d6269657320666f727761726420666f727761726420627574207a6f6d62696573 +1.3.6.1.4.1.2620.1.46.2.3.0|4x|7a6f6d62696573207a6f6d62696573207a6f6d62696573207a6f6d62696573206163746564206f78656e206b657074 +1.3.6.1.4.1.2620.1.46.3.1.0|4x|666f727761726420666f7277617264206b65707420717561696e746c79206f78656e206f78656e206f78656e206f78656e20717561696e746c79 +1.3.6.1.4.1.2620.1.46.3.2.0|4x|6b657074207a6f6d62696573207a6f6d6269657320666f7277617264207468656972 +1.3.6.1.4.1.2620.1.46.3.3.0|4x|6b65707420616374656420627574206b657074 +1.3.6.1.4.1.2620.1.46.4.1.0|4x|627574206b65707420717561696e746c7920666f727761726420717561696e746c7920627574 +1.3.6.1.4.1.2620.1.46.4.2.0|4x|74686569722064726976696e6720666f7277617264204a61646564204a61646564 +1.3.6.1.4.1.2620.1.46.4.3.0|4x|7a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.46.5.1.0|4|Jaded +1.3.6.1.4.1.2620.1.46.5.2.0|4x|6f78656e2062757420627574207468656972207468656972 +1.3.6.1.4.1.2620.1.46.5.3.0|4x|666f7277617264204a61646564206163746564 +1.3.6.1.4.1.2620.1.46.5.4.0|4x|4a61646564204a61646564 +1.3.6.1.4.1.2620.1.46.101.0|2|23 +1.3.6.1.4.1.2620.1.46.102.0|4x|6b657074206f78656e20616374656420666f727761726420717561696e746c79206163746564207a6f6d62696573207a6f6d62696573204a61646564 +1.3.6.1.4.1.2620.1.46.103.0|4x|6b65707420627574207a6f6d6269657320717561696e746c79207a6f6d62696573206b657074 +1.3.6.1.4.1.2620.1.49.16.0|4x|64726976696e67207a6f6d62696573204a6164656420717561696e746c792061637465642062757420666f7277617264206f78656e207468656972 +1.3.6.1.4.1.2620.1.49.17.0|4x|6b65707420627574 +1.3.6.1.4.1.2620.1.49.20.0|4x|717561696e746c79206b65707420616374656420627574206163746564207a6f6d62696573206163746564 +1.3.6.1.4.1.2620.1.49.25.0|4x|6f78656e20627574204a61646564206b657074 +1.3.6.1.4.1.2620.1.49.26.0|4x|4a61646564206b657074207a6f6d62696573 +1.3.6.1.4.1.2620.1.49.27.0|4x|666f72776172642064726976696e67206f78656e204a6164656420666f7277617264 +1.3.6.1.4.1.2620.1.49.101.0|2|14 +1.3.6.1.4.1.2620.1.49.102.0|4x|6f78656e204a61646564206f78656e207a6f6d6269657320717561696e746c79207468656972 +1.3.6.1.4.1.2620.1.49.103.0|4x|717561696e746c79206275742064726976696e6720666f7277617264206f78656e206b65707420666f7277617264206163746564 +1.3.6.1.4.1.2620.500.9000.1.1.33.199.227.196|64x|21c7e3c4 +1.3.6.1.4.1.2620.500.9000.1.1.46.126.175.232|64x|2e7eafe8 +1.3.6.1.4.1.2620.500.9000.1.1.66.212.142.154|64x|42d48e9a +1.3.6.1.4.1.2620.500.9000.1.1.108.69.23.40|64x|6c451728 +1.3.6.1.4.1.2620.500.9000.1.1.118.248.172.83|64x|76f8ac53 +1.3.6.1.4.1.2620.500.9000.1.1.120.227.215.77|64x|78e3d74d +1.3.6.1.4.1.2620.500.9000.1.1.129.43.253.78|64x|812bfd4e +1.3.6.1.4.1.2620.500.9000.1.1.167.222.155.98|64x|a7de9b62 +1.3.6.1.4.1.2620.500.9000.1.1.210.189.204.118|64x|d2bdcc76 +1.3.6.1.4.1.2620.500.9000.1.1.249.167.247.111|64x|f9a7f76f +1.3.6.1.4.1.2620.500.9000.1.19.33.199.227.196|64x|f0a40c77 +1.3.6.1.4.1.2620.500.9000.1.19.46.126.175.232|64x|01cb5596 +1.3.6.1.4.1.2620.500.9000.1.19.66.212.142.154|64x|0f88f65b +1.3.6.1.4.1.2620.500.9000.1.19.108.69.23.40|64x|c47c0707 +1.3.6.1.4.1.2620.500.9000.1.19.118.248.172.83|64x|93959791 +1.3.6.1.4.1.2620.500.9000.1.19.120.227.215.77|64x|799f1b66 +1.3.6.1.4.1.2620.500.9000.1.19.129.43.253.78|64x|ff1c4886 +1.3.6.1.4.1.2620.500.9000.1.19.167.222.155.98|64x|929de240 +1.3.6.1.4.1.2620.500.9000.1.19.210.189.204.118|64x|53ca368f +1.3.6.1.4.1.2620.500.9000.1.19.249.167.247.111|64x|ca4be6d9 +1.3.6.1.4.1.2620.500.9000.1.20.33.199.227.196|2|3 +1.3.6.1.4.1.2620.500.9000.1.20.46.126.175.232|2|3 +1.3.6.1.4.1.2620.500.9000.1.20.66.212.142.154|2|4 +1.3.6.1.4.1.2620.500.9000.1.20.108.69.23.40|2|4 +1.3.6.1.4.1.2620.500.9000.1.20.118.248.172.83|2|4 +1.3.6.1.4.1.2620.500.9000.1.20.120.227.215.77|2|3 +1.3.6.1.4.1.2620.500.9000.1.20.129.43.253.78|2|4 +1.3.6.1.4.1.2620.500.9000.1.20.167.222.155.98|2|3 +1.3.6.1.4.1.2620.500.9000.1.20.210.189.204.118|2|4 +1.3.6.1.4.1.2620.500.9000.1.20.249.167.247.111|2|3 +1.3.6.1.4.1.2620.500.9000.1.21.33.199.227.196|2|25 +1.3.6.1.4.1.2620.500.9000.1.21.46.126.175.232|2|5 +1.3.6.1.4.1.2620.500.9000.1.21.66.212.142.154|2|31 +1.3.6.1.4.1.2620.500.9000.1.21.108.69.23.40|2|0 +1.3.6.1.4.1.2620.500.9000.1.21.118.248.172.83|2|10 +1.3.6.1.4.1.2620.500.9000.1.21.120.227.215.77|2|4 +1.3.6.1.4.1.2620.500.9000.1.21.129.43.253.78|2|2 +1.3.6.1.4.1.2620.500.9000.1.21.167.222.155.98|2|3 +1.3.6.1.4.1.2620.500.9000.1.21.210.189.204.118|2|23 +1.3.6.1.4.1.2620.500.9000.1.21.249.167.247.111|2|2 +1.3.6.1.4.1.2620.500.9000.1.22.33.199.227.196|2|25 +1.3.6.1.4.1.2620.500.9000.1.22.46.126.175.232|2|15 +1.3.6.1.4.1.2620.500.9000.1.22.66.212.142.154|2|13 +1.3.6.1.4.1.2620.500.9000.1.22.108.69.23.40|2|26 +1.3.6.1.4.1.2620.500.9000.1.22.118.248.172.83|2|8 +1.3.6.1.4.1.2620.500.9000.1.22.120.227.215.77|2|26 +1.3.6.1.4.1.2620.500.9000.1.22.129.43.253.78|2|20 +1.3.6.1.4.1.2620.500.9000.1.22.167.222.155.98|2|7 +1.3.6.1.4.1.2620.500.9000.1.22.210.189.204.118|2|10 +1.3.6.1.4.1.2620.500.9000.1.22.249.167.247.111|2|19 +1.3.6.1.4.1.2620.500.9000.1.23.33.199.227.196|2|22 +1.3.6.1.4.1.2620.500.9000.1.23.46.126.175.232|2|17 +1.3.6.1.4.1.2620.500.9000.1.23.66.212.142.154|2|20 +1.3.6.1.4.1.2620.500.9000.1.23.108.69.23.40|2|22 +1.3.6.1.4.1.2620.500.9000.1.23.118.248.172.83|2|28 +1.3.6.1.4.1.2620.500.9000.1.23.120.227.215.77|2|15 +1.3.6.1.4.1.2620.500.9000.1.23.129.43.253.78|2|3 +1.3.6.1.4.1.2620.500.9000.1.23.167.222.155.98|2|8 +1.3.6.1.4.1.2620.500.9000.1.23.210.189.204.118|2|10 +1.3.6.1.4.1.2620.500.9000.1.23.249.167.247.111|2|0 +1.3.6.1.4.1.2620.500.9000.1.24.33.199.227.196|2|4 +1.3.6.1.4.1.2620.500.9000.1.24.46.126.175.232|2|13 +1.3.6.1.4.1.2620.500.9000.1.24.66.212.142.154|2|27 +1.3.6.1.4.1.2620.500.9000.1.24.108.69.23.40|2|29 +1.3.6.1.4.1.2620.500.9000.1.24.118.248.172.83|2|15 +1.3.6.1.4.1.2620.500.9000.1.24.120.227.215.77|2|2 +1.3.6.1.4.1.2620.500.9000.1.24.129.43.253.78|2|0 +1.3.6.1.4.1.2620.500.9000.1.24.167.222.155.98|2|13 +1.3.6.1.4.1.2620.500.9000.1.24.210.189.204.118|2|25 +1.3.6.1.4.1.2620.500.9000.1.24.249.167.247.111|2|18 +1.3.6.1.4.1.2620.500.9000.1.25.33.199.227.196|2|19 +1.3.6.1.4.1.2620.500.9000.1.25.46.126.175.232|2|19 +1.3.6.1.4.1.2620.500.9000.1.25.66.212.142.154|2|17 +1.3.6.1.4.1.2620.500.9000.1.25.108.69.23.40|2|26 +1.3.6.1.4.1.2620.500.9000.1.25.118.248.172.83|2|19 +1.3.6.1.4.1.2620.500.9000.1.25.120.227.215.77|2|20 +1.3.6.1.4.1.2620.500.9000.1.25.129.43.253.78|2|30 +1.3.6.1.4.1.2620.500.9000.1.25.167.222.155.98|2|26 +1.3.6.1.4.1.2620.500.9000.1.25.210.189.204.118|2|10 +1.3.6.1.4.1.2620.500.9000.1.25.249.167.247.111|2|31 +1.3.6.1.4.1.2620.500.9000.1.26.33.199.227.196|4x|4a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.2620.500.9000.1.26.46.126.175.232|4x|627574207468656972204a61646564 +1.3.6.1.4.1.2620.500.9000.1.26.66.212.142.154|4x|61637465642064726976696e6720666f72776172642064726976696e67207a6f6d62696573206163746564206163746564206f78656e +1.3.6.1.4.1.2620.500.9000.1.26.108.69.23.40|4x|7a6f6d62696573204a6164656420746865697220717561696e746c79207468656972 +1.3.6.1.4.1.2620.500.9000.1.26.118.248.172.83|4x|64726976696e67207a6f6d626965732064726976696e6720666f72776172642062757420746865697220627574207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.500.9000.1.26.120.227.215.77|4x|6b6570742061637465642064726976696e6720666f727761726420717561696e746c79206b65707420666f7277617264 +1.3.6.1.4.1.2620.500.9000.1.26.129.43.253.78|4x|627574207468656972206f78656e20666f7277617264206b657074 +1.3.6.1.4.1.2620.500.9000.1.26.167.222.155.98|4x|6b657074206b657074 +1.3.6.1.4.1.2620.500.9000.1.26.210.189.204.118|4x|6163746564207a6f6d626965732062757420627574206f78656e +1.3.6.1.4.1.2620.500.9000.1.26.249.167.247.111|4x|7468656972204a61646564 +1.3.6.1.4.1.2620.500.9000.1.27.33.199.227.196|2|9 +1.3.6.1.4.1.2620.500.9000.1.27.46.126.175.232|2|2 +1.3.6.1.4.1.2620.500.9000.1.27.66.212.142.154|2|5 +1.3.6.1.4.1.2620.500.9000.1.27.108.69.23.40|2|7 +1.3.6.1.4.1.2620.500.9000.1.27.118.248.172.83|2|5 +1.3.6.1.4.1.2620.500.9000.1.27.120.227.215.77|2|9 +1.3.6.1.4.1.2620.500.9000.1.27.129.43.253.78|2|9 +1.3.6.1.4.1.2620.500.9000.1.27.167.222.155.98|2|9 +1.3.6.1.4.1.2620.500.9000.1.27.210.189.204.118|2|2 +1.3.6.1.4.1.2620.500.9000.1.27.249.167.247.111|2|2 +1.3.6.1.4.1.2620.500.9000.1.28.33.199.227.196|2|4 +1.3.6.1.4.1.2620.500.9000.1.28.46.126.175.232|2|4 +1.3.6.1.4.1.2620.500.9000.1.28.66.212.142.154|2|3 +1.3.6.1.4.1.2620.500.9000.1.28.108.69.23.40|2|2 +1.3.6.1.4.1.2620.500.9000.1.28.118.248.172.83|2|3 +1.3.6.1.4.1.2620.500.9000.1.28.120.227.215.77|2|4 +1.3.6.1.4.1.2620.500.9000.1.28.129.43.253.78|2|3 +1.3.6.1.4.1.2620.500.9000.1.28.167.222.155.98|2|1 +1.3.6.1.4.1.2620.500.9000.1.28.210.189.204.118|2|2 +1.3.6.1.4.1.2620.500.9000.1.28.249.167.247.111|2|5 +1.3.6.1.4.1.2620.500.9000.1.29.33.199.227.196|2|9 +1.3.6.1.4.1.2620.500.9000.1.29.46.126.175.232|2|26 +1.3.6.1.4.1.2620.500.9000.1.29.66.212.142.154|2|22 +1.3.6.1.4.1.2620.500.9000.1.29.108.69.23.40|2|17 +1.3.6.1.4.1.2620.500.9000.1.29.118.248.172.83|2|0 +1.3.6.1.4.1.2620.500.9000.1.29.120.227.215.77|2|17 +1.3.6.1.4.1.2620.500.9000.1.29.129.43.253.78|2|8 +1.3.6.1.4.1.2620.500.9000.1.29.167.222.155.98|2|6 +1.3.6.1.4.1.2620.500.9000.1.29.210.189.204.118|2|14 +1.3.6.1.4.1.2620.500.9000.1.29.249.167.247.111|2|17 +1.3.6.1.4.1.2620.500.9002.1.1.3.29.123.204|64x|031d7bcc +1.3.6.1.4.1.2620.500.9002.1.1.9.35.229.234|64x|0923e5ea +1.3.6.1.4.1.2620.500.9002.1.1.40.82.179.97|64x|2852b361 +1.3.6.1.4.1.2620.500.9002.1.1.43.214.97.166|64x|2bd661a6 +1.3.6.1.4.1.2620.500.9002.1.1.76.230.249.240|64x|4ce6f9f0 +1.3.6.1.4.1.2620.500.9002.1.1.79.28.104.141|64x|4f1c688d +1.3.6.1.4.1.2620.500.9002.1.1.87.46.179.8|64x|572eb308 +1.3.6.1.4.1.2620.500.9002.1.1.129.155.25.70|64x|819b1946 +1.3.6.1.4.1.2620.500.9002.1.1.135.75.254.24|64x|874bfe18 +1.3.6.1.4.1.2620.500.9002.1.1.162.208.10.5|64x|a2d00a05 +1.3.6.1.4.1.2620.500.9002.1.2.3.29.123.204|4x|717561696e746c79206b657074207a6f6d6269657320666f7277617264204a61646564206b657074 +1.3.6.1.4.1.2620.500.9002.1.2.9.35.229.234|4x|616374656420666f7277617264 +1.3.6.1.4.1.2620.500.9002.1.2.40.82.179.97|4x|746865697220627574207a6f6d62696573207468656972206f78656e +1.3.6.1.4.1.2620.500.9002.1.2.43.214.97.166|4x|62757420616374656420717561696e746c7920627574206163746564207468656972204a61646564 +1.3.6.1.4.1.2620.500.9002.1.2.76.230.249.240|4x|6f78656e204a61646564206b6570742062757420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.2620.500.9002.1.2.79.28.104.141|4x|6f78656e207468656972 +1.3.6.1.4.1.2620.500.9002.1.2.87.46.179.8|4x|7a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2620.500.9002.1.2.129.155.25.70|4x|7a6f6d62696573206b65707420717561696e746c79207468656972 +1.3.6.1.4.1.2620.500.9002.1.2.135.75.254.24|4x|62757420717561696e746c79 +1.3.6.1.4.1.2620.500.9002.1.2.162.208.10.5|4x|666f7277617264206b657074206163746564206275742062757420627574206b657074206f78656e20666f7277617264 +1.3.6.1.4.1.2620.500.9002.1.3.3.29.123.204|2|4 +1.3.6.1.4.1.2620.500.9002.1.3.9.35.229.234|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.40.82.179.97|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.43.214.97.166|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.76.230.249.240|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.79.28.104.141|2|4 +1.3.6.1.4.1.2620.500.9002.1.3.87.46.179.8|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.129.155.25.70|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.135.75.254.24|2|3 +1.3.6.1.4.1.2620.500.9002.1.3.162.208.10.5|2|3 +1.3.6.1.4.1.2620.500.9002.1.4.3.29.123.204|4x|4a61646564206b6570742074686569722064726976696e67 +1.3.6.1.4.1.2620.500.9002.1.4.9.35.229.234|4x|6163746564206b657074207468656972206f78656e206f78656e206b657074207468656972 +1.3.6.1.4.1.2620.500.9002.1.4.40.82.179.97|4x|74686569722064726976696e67204a61646564207a6f6d62696573206b657074204a61646564206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.2620.500.9002.1.4.43.214.97.166|4x|717561696e746c7920666f727761726420616374656420627574206b657074204a61646564206163746564207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.2620.500.9002.1.4.76.230.249.240|4x|7468656972207468656972204a61646564 +1.3.6.1.4.1.2620.500.9002.1.4.79.28.104.141|4|driving +1.3.6.1.4.1.2620.500.9002.1.4.87.46.179.8|4x|62757420717561696e746c79207a6f6d6269657320666f727761726420666f7277617264207a6f6d62696573207468656972 +1.3.6.1.4.1.2620.500.9002.1.4.129.155.25.70|4x|717561696e746c79207468656972 +1.3.6.1.4.1.2620.500.9002.1.4.135.75.254.24|4x|666f727761726420627574 +1.3.6.1.4.1.2620.500.9002.1.4.162.208.10.5|4x|64726976696e672064726976696e67 +1.3.6.1.4.1.2620.500.9002.1.5.3.29.123.204|64x|bcb0ee9f +1.3.6.1.4.1.2620.500.9002.1.5.9.35.229.234|64x|461ddd83 +1.3.6.1.4.1.2620.500.9002.1.5.40.82.179.97|64x|d4a23bd8 +1.3.6.1.4.1.2620.500.9002.1.5.43.214.97.166|64x|f512c661 +1.3.6.1.4.1.2620.500.9002.1.5.76.230.249.240|64x|0e7f11ba +1.3.6.1.4.1.2620.500.9002.1.5.79.28.104.141|64x|35bd9d4a +1.3.6.1.4.1.2620.500.9002.1.5.87.46.179.8|64x|0da67bf2 +1.3.6.1.4.1.2620.500.9002.1.5.129.155.25.70|64x|1241299b +1.3.6.1.4.1.2620.500.9002.1.5.135.75.254.24|64x|bdef3db0 +1.3.6.1.4.1.2620.500.9002.1.5.162.208.10.5|64x|fd93a4ac +1.3.6.1.4.1.2620.500.9002.1.6.3.29.123.204|4x|616374656420717561696e746c79207468656972206f78656e20627574 +1.3.6.1.4.1.2620.500.9002.1.6.9.35.229.234|4x|717561696e746c792064726976696e6720666f72776172642062757420666f7277617264206163746564207a6f6d62696573 +1.3.6.1.4.1.2620.500.9002.1.6.40.82.179.97|4|driving +1.3.6.1.4.1.2620.500.9002.1.6.43.214.97.166|4|zombies +1.3.6.1.4.1.2620.500.9002.1.6.76.230.249.240|4x|4a61646564206b65707420666f7277617264204a61646564206f78656e206f78656e20717561696e746c7920666f7277617264207468656972 +1.3.6.1.4.1.2620.500.9002.1.6.79.28.104.141|4x|4a61646564207468656972206f78656e207468656972206163746564206f78656e207468656972 +1.3.6.1.4.1.2620.500.9002.1.6.87.46.179.8|4x|6b657074206163746564 +1.3.6.1.4.1.2620.500.9002.1.6.129.155.25.70|4x|717561696e746c79206f78656e204a6164656420666f7277617264 +1.3.6.1.4.1.2620.500.9002.1.6.135.75.254.24|4x|6f78656e207a6f6d62696573207468656972206b657074207468656972 +1.3.6.1.4.1.2620.500.9002.1.6.162.208.10.5|4x|6b65707420666f7277617264207468656972 +1.3.6.1.4.1.2620.500.9002.1.7.3.29.123.204|64x|8c5c3e90 +1.3.6.1.4.1.2620.500.9002.1.7.9.35.229.234|64x|419c0d50 +1.3.6.1.4.1.2620.500.9002.1.7.40.82.179.97|64x|616d486b +1.3.6.1.4.1.2620.500.9002.1.7.43.214.97.166|64x|3e4888f1 +1.3.6.1.4.1.2620.500.9002.1.7.76.230.249.240|64x|eafc19b1 +1.3.6.1.4.1.2620.500.9002.1.7.79.28.104.141|64x|0627affd +1.3.6.1.4.1.2620.500.9002.1.7.87.46.179.8|64x|2e3692d5 +1.3.6.1.4.1.2620.500.9002.1.7.129.155.25.70|64x|97f97807 +1.3.6.1.4.1.2620.500.9002.1.7.135.75.254.24|64x|576f580f +1.3.6.1.4.1.2620.500.9002.1.7.162.208.10.5|64x|3d1dcf86 +1.3.6.1.4.1.2620.500.9002.1.8.3.29.123.204|2|0 +1.3.6.1.4.1.2620.500.9002.1.8.9.35.229.234|2|0 +1.3.6.1.4.1.2620.500.9002.1.8.40.82.179.97|2|1 +1.3.6.1.4.1.2620.500.9002.1.8.43.214.97.166|2|0 +1.3.6.1.4.1.2620.500.9002.1.8.76.230.249.240|2|2 +1.3.6.1.4.1.2620.500.9002.1.8.79.28.104.141|2|0 +1.3.6.1.4.1.2620.500.9002.1.8.87.46.179.8|2|2 +1.3.6.1.4.1.2620.500.9002.1.8.129.155.25.70|2|2 +1.3.6.1.4.1.2620.500.9002.1.8.135.75.254.24|2|2 +1.3.6.1.4.1.2620.500.9002.1.8.162.208.10.5|2|2 +1.3.6.1.4.1.2620.500.9002.1.9.3.29.123.204|2|2 +1.3.6.1.4.1.2620.500.9002.1.9.9.35.229.234|2|0 +1.3.6.1.4.1.2620.500.9002.1.9.40.82.179.97|2|0 +1.3.6.1.4.1.2620.500.9002.1.9.43.214.97.166|2|2 +1.3.6.1.4.1.2620.500.9002.1.9.76.230.249.240|2|2 +1.3.6.1.4.1.2620.500.9002.1.9.79.28.104.141|2|1 +1.3.6.1.4.1.2620.500.9002.1.9.87.46.179.8|2|0 +1.3.6.1.4.1.2620.500.9002.1.9.129.155.25.70|2|0 +1.3.6.1.4.1.2620.500.9002.1.9.135.75.254.24|2|0 +1.3.6.1.4.1.2620.500.9002.1.9.162.208.10.5|2|0 +1.3.6.1.4.1.2620.500.9002.1.10.3.29.123.204|2|3 +1.3.6.1.4.1.2620.500.9002.1.10.9.35.229.234|2|1 +1.3.6.1.4.1.2620.500.9002.1.10.40.82.179.97|2|2 +1.3.6.1.4.1.2620.500.9002.1.10.43.214.97.166|2|3 +1.3.6.1.4.1.2620.500.9002.1.10.76.230.249.240|2|3 +1.3.6.1.4.1.2620.500.9002.1.10.79.28.104.141|2|1 +1.3.6.1.4.1.2620.500.9002.1.10.87.46.179.8|2|3 +1.3.6.1.4.1.2620.500.9002.1.10.129.155.25.70|2|1 +1.3.6.1.4.1.2620.500.9002.1.10.135.75.254.24|2|2 +1.3.6.1.4.1.2620.500.9002.1.10.162.208.10.5|2|1 +1.3.6.1.4.1.2620.500.9002.1.11.3.29.123.204|2|1 +1.3.6.1.4.1.2620.500.9002.1.11.9.35.229.234|2|2 +1.3.6.1.4.1.2620.500.9002.1.11.40.82.179.97|2|1 +1.3.6.1.4.1.2620.500.9002.1.11.43.214.97.166|2|2 +1.3.6.1.4.1.2620.500.9002.1.11.76.230.249.240|2|2 +1.3.6.1.4.1.2620.500.9002.1.11.79.28.104.141|2|1 +1.3.6.1.4.1.2620.500.9002.1.11.87.46.179.8|2|1 +1.3.6.1.4.1.2620.500.9002.1.11.129.155.25.70|2|2 +1.3.6.1.4.1.2620.500.9002.1.11.135.75.254.24|2|1 +1.3.6.1.4.1.2620.500.9002.1.11.162.208.10.5|2|1 +1.3.6.1.4.1.2620.500.9003.1.1.38.64.229.219|64x|2640e5db +1.3.6.1.4.1.2620.500.9003.1.1.41.203.72.238|64x|29cb48ee +1.3.6.1.4.1.2620.500.9003.1.1.54.78.86.56|64x|364e5638 +1.3.6.1.4.1.2620.500.9003.1.1.55.152.115.196|64x|379873c4 +1.3.6.1.4.1.2620.500.9003.1.1.60.242.137.213|64x|3cf289d5 +1.3.6.1.4.1.2620.500.9003.1.1.98.19.200.197|64x|6213c8c5 +1.3.6.1.4.1.2620.500.9003.1.1.139.251.136.61|64x|8bfb883d +1.3.6.1.4.1.2620.500.9003.1.1.147.118.185.135|64x|9376b987 +1.3.6.1.4.1.2620.500.9003.1.1.199.246.13.174|64x|c7f60dae +1.3.6.1.4.1.2620.500.9003.1.1.241.64.12.155|64x|f1400c9b +1.3.6.1.4.1.2620.500.9003.1.2.38.64.229.219|4x|717561696e746c7920616374656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.2620.500.9003.1.2.41.203.72.238|4x|7468656972206f78656e206f78656e20666f7277617264204a6164656420666f7277617264 +1.3.6.1.4.1.2620.500.9003.1.2.54.78.86.56|4x|64726976696e672064726976696e67 +1.3.6.1.4.1.2620.500.9003.1.2.55.152.115.196|4x|7468656972207a6f6d62696573206f78656e20746865697220717561696e746c7920717561696e746c79204a6164656420666f7277617264 +1.3.6.1.4.1.2620.500.9003.1.2.60.242.137.213|4|but +1.3.6.1.4.1.2620.500.9003.1.2.98.19.200.197|4x|6f78656e206f78656e2064726976696e6720717561696e746c79206b657074 +1.3.6.1.4.1.2620.500.9003.1.2.139.251.136.61|4x|7a6f6d6269657320666f727761726420746865697220717561696e746c79207468656972 +1.3.6.1.4.1.2620.500.9003.1.2.147.118.185.135|4|zombies +1.3.6.1.4.1.2620.500.9003.1.2.199.246.13.174|4x|666f7277617264207a6f6d62696573206f78656e2064726976696e6720666f72776172642074686569722064726976696e67207468656972206163746564 +1.3.6.1.4.1.2620.500.9003.1.2.241.64.12.155|4|Jaded +1.3.6.1.4.1.2620.500.9003.1.3.38.64.229.219|2|3 +1.3.6.1.4.1.2620.500.9003.1.3.41.203.72.238|2|4 +1.3.6.1.4.1.2620.500.9003.1.3.54.78.86.56|2|4 +1.3.6.1.4.1.2620.500.9003.1.3.55.152.115.196|2|4 +1.3.6.1.4.1.2620.500.9003.1.3.60.242.137.213|2|3 +1.3.6.1.4.1.2620.500.9003.1.3.98.19.200.197|2|4 +1.3.6.1.4.1.2620.500.9003.1.3.139.251.136.61|2|4 +1.3.6.1.4.1.2620.500.9003.1.3.147.118.185.135|2|3 +1.3.6.1.4.1.2620.500.9003.1.3.199.246.13.174|2|4 +1.3.6.1.4.1.2620.500.9003.1.3.241.64.12.155|2|3 +1.3.6.1.4.1.2620.500.9003.1.4.38.64.229.219|4x|6275742064726976696e67 +1.3.6.1.4.1.2620.500.9003.1.4.41.203.72.238|4x|666f7277617264204a6164656420666f727761726420666f727761726420666f727761726420746865697220627574207468656972 +1.3.6.1.4.1.2620.500.9003.1.4.54.78.86.56|4x|4a616465642064726976696e67 +1.3.6.1.4.1.2620.500.9003.1.4.55.152.115.196|4x|6f78656e20717561696e746c79204a61646564204a61646564 +1.3.6.1.4.1.2620.500.9003.1.4.60.242.137.213|4x|7468656972207a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.2620.500.9003.1.4.98.19.200.197|4x|61637465642064726976696e672064726976696e6720717561696e746c79206f78656e +1.3.6.1.4.1.2620.500.9003.1.4.139.251.136.61|4|oxen +1.3.6.1.4.1.2620.500.9003.1.4.147.118.185.135|4x|64726976696e67206f78656e204a6164656420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.2620.500.9003.1.4.199.246.13.174|4x|6b6570742064726976696e67207468656972206275742074686569722064726976696e67206163746564207a6f6d62696573206f78656e +1.3.6.1.4.1.2620.500.9003.1.4.241.64.12.155|4x|746865697220666f7277617264207a6f6d62696573206f78656e2064726976696e6720666f7277617264 +1.3.6.1.4.1.2620.500.9003.1.5.38.64.229.219|64x|93de6caa +1.3.6.1.4.1.2620.500.9003.1.5.41.203.72.238|64x|e3b44887 +1.3.6.1.4.1.2620.500.9003.1.5.54.78.86.56|64x|27783acb +1.3.6.1.4.1.2620.500.9003.1.5.55.152.115.196|64x|a34d81f8 +1.3.6.1.4.1.2620.500.9003.1.5.60.242.137.213|64x|d3a249a7 +1.3.6.1.4.1.2620.500.9003.1.5.98.19.200.197|64x|90c677a2 +1.3.6.1.4.1.2620.500.9003.1.5.139.251.136.61|64x|6bf0648c +1.3.6.1.4.1.2620.500.9003.1.5.147.118.185.135|64x|f9e143b5 +1.3.6.1.4.1.2620.500.9003.1.5.199.246.13.174|64x|1c647dc8 +1.3.6.1.4.1.2620.500.9003.1.5.241.64.12.155|64x|3399b278 +1.3.6.1.4.1.2620.500.9003.1.6.38.64.229.219|64x|927b89e9 +1.3.6.1.4.1.2620.500.9003.1.6.41.203.72.238|64x|06f4c3cf +1.3.6.1.4.1.2620.500.9003.1.6.54.78.86.56|64x|e3a4ea53 +1.3.6.1.4.1.2620.500.9003.1.6.55.152.115.196|64x|7acc51ea +1.3.6.1.4.1.2620.500.9003.1.6.60.242.137.213|64x|db022351 +1.3.6.1.4.1.2620.500.9003.1.6.98.19.200.197|64x|5525f43a +1.3.6.1.4.1.2620.500.9003.1.6.139.251.136.61|64x|3a2b1365 +1.3.6.1.4.1.2620.500.9003.1.6.147.118.185.135|64x|c773a393 +1.3.6.1.4.1.2620.500.9003.1.6.199.246.13.174|64x|ea50f047 +1.3.6.1.4.1.2620.500.9003.1.6.241.64.12.155|64x|7e70e950 +1.3.6.1.4.1.2620.500.9003.1.7.38.64.229.219|64x|3ae9f0cb +1.3.6.1.4.1.2620.500.9003.1.7.41.203.72.238|64x|9ea57746 +1.3.6.1.4.1.2620.500.9003.1.7.54.78.86.56|64x|dc35e3f7 +1.3.6.1.4.1.2620.500.9003.1.7.55.152.115.196|64x|56112b40 +1.3.6.1.4.1.2620.500.9003.1.7.60.242.137.213|64x|65a8cd28 +1.3.6.1.4.1.2620.500.9003.1.7.98.19.200.197|64x|4c9cda64 +1.3.6.1.4.1.2620.500.9003.1.7.139.251.136.61|64x|01667af4 +1.3.6.1.4.1.2620.500.9003.1.7.147.118.185.135|64x|597d8c0b +1.3.6.1.4.1.2620.500.9003.1.7.199.246.13.174|64x|cf609e29 +1.3.6.1.4.1.2620.500.9003.1.7.241.64.12.155|64x|cbd61c34 +1.3.6.1.4.1.2620.500.9003.1.8.38.64.229.219|2|2 +1.3.6.1.4.1.2620.500.9003.1.8.41.203.72.238|2|0 +1.3.6.1.4.1.2620.500.9003.1.8.54.78.86.56|2|1 +1.3.6.1.4.1.2620.500.9003.1.8.55.152.115.196|2|1 +1.3.6.1.4.1.2620.500.9003.1.8.60.242.137.213|2|1 +1.3.6.1.4.1.2620.500.9003.1.8.98.19.200.197|2|2 +1.3.6.1.4.1.2620.500.9003.1.8.139.251.136.61|2|1 +1.3.6.1.4.1.2620.500.9003.1.8.147.118.185.135|2|1 +1.3.6.1.4.1.2620.500.9003.1.8.199.246.13.174|2|1 +1.3.6.1.4.1.2620.500.9003.1.8.241.64.12.155|2|2 +1.3.6.1.4.1.2620.500.9003.1.9.38.64.229.219|2|0 +1.3.6.1.4.1.2620.500.9003.1.9.41.203.72.238|2|2 +1.3.6.1.4.1.2620.500.9003.1.9.54.78.86.56|2|1 +1.3.6.1.4.1.2620.500.9003.1.9.55.152.115.196|2|1 +1.3.6.1.4.1.2620.500.9003.1.9.60.242.137.213|2|1 +1.3.6.1.4.1.2620.500.9003.1.9.98.19.200.197|2|1 +1.3.6.1.4.1.2620.500.9003.1.9.139.251.136.61|2|0 +1.3.6.1.4.1.2620.500.9003.1.9.147.118.185.135|2|1 +1.3.6.1.4.1.2620.500.9003.1.9.199.246.13.174|2|1 +1.3.6.1.4.1.2620.500.9003.1.9.241.64.12.155|2|2 +1.3.6.1.4.1.2620.500.9003.1.10.38.64.229.219|2|2 +1.3.6.1.4.1.2620.500.9003.1.10.41.203.72.238|2|2 +1.3.6.1.4.1.2620.500.9003.1.10.54.78.86.56|2|3 +1.3.6.1.4.1.2620.500.9003.1.10.55.152.115.196|2|3 +1.3.6.1.4.1.2620.500.9003.1.10.60.242.137.213|2|3 +1.3.6.1.4.1.2620.500.9003.1.10.98.19.200.197|2|3 +1.3.6.1.4.1.2620.500.9003.1.10.139.251.136.61|2|1 +1.3.6.1.4.1.2620.500.9003.1.10.147.118.185.135|2|2 +1.3.6.1.4.1.2620.500.9003.1.10.199.246.13.174|2|1 +1.3.6.1.4.1.2620.500.9003.1.10.241.64.12.155|2|2 diff --git a/test/new-e2e/ndm/snmp/compose/data/cisco-asa-5525.snmprec b/test/new-e2e/ndm/snmp/compose/data/cisco-asa-5525.snmprec new file mode 100644 index 0000000000000..8184c651523c9 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/cisco-asa-5525.snmprec @@ -0,0 +1,1478 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.1.1408 +1.3.6.1.2.1.1.3.0|67|1727368662 +1.3.6.1.2.1.1.5.0|4|kept +1.3.6.1.2.1.2.2.1.1.11|2|11 +1.3.6.1.2.1.2.2.1.2.11|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.3.11|2|29 +1.3.6.1.2.1.2.2.1.4.11|2|10 +1.3.6.1.2.1.2.2.1.5.11|66|842689539 +1.3.6.1.2.1.2.2.1.6.11|4x|00 +1.3.6.1.2.1.2.2.1.7.11|2|2 +1.3.6.1.2.1.2.2.1.8.11|2|7 +1.3.6.1.2.1.2.2.1.9.11|67|4043941980 +1.3.6.1.2.1.2.2.1.10.11|65|2268799121 +1.3.6.1.2.1.2.2.1.11.11|65|1358081555 +1.3.6.1.2.1.2.2.1.12.11|65|2804916297 +1.3.6.1.2.1.2.2.1.13.11|65|1953269825 +1.3.6.1.2.1.2.2.1.14.11|65|3659465164 +1.3.6.1.2.1.2.2.1.15.11|65|3028473442 +1.3.6.1.2.1.2.2.1.16.11|65|2204618213 +1.3.6.1.2.1.2.2.1.17.11|65|3659357157 +1.3.6.1.2.1.2.2.1.18.11|65|1946069301 +1.3.6.1.2.1.2.2.1.19.11|65|1976763204 +1.3.6.1.2.1.2.2.1.20.11|65|1287028500 +1.3.6.1.2.1.2.2.1.21.11|66|3693484051 +1.3.6.1.2.1.6.5.0|65|2858992486 +1.3.6.1.2.1.6.6.0|65|4156312381 +1.3.6.1.2.1.6.7.0|65|2022233107 +1.3.6.1.2.1.6.8.0|65|2434846008 +1.3.6.1.2.1.6.9.0|66|3859114747 +1.3.6.1.2.1.6.10.0|65|443704958 +1.3.6.1.2.1.6.11.0|65|761536386 +1.3.6.1.2.1.6.12.0|65|3742055603 +1.3.6.1.2.1.6.13.1.1.23.177.97.199.10.151.211.52.249.28|2|12 +1.3.6.1.2.1.6.13.1.1.113.156.27.12.6.103.49.217.167.25|2|8 +1.3.6.1.2.1.6.13.1.1.122.61.54.190.29.172.169.37.170.22|2|5 +1.3.6.1.2.1.6.13.1.1.148.215.184.93.3.18.135.204.247.11|2|9 +1.3.6.1.2.1.6.13.1.1.192.71.88.207.22.184.150.214.61.14|2|12 +1.3.6.1.2.1.6.13.1.1.215.10.127.204.23.126.210.252.1.27|2|7 +1.3.6.1.2.1.6.13.1.1.223.16.55.201.31.104.212.252.181.5|2|9 +1.3.6.1.2.1.6.13.1.1.223.54.125.172.16.159.226.236.17.1|2|5 +1.3.6.1.2.1.6.13.1.1.227.50.96.2.2.215.88.85.244.22|2|3 +1.3.6.1.2.1.6.13.1.1.254.4.140.40.29.214.201.146.122.0|2|1 +1.3.6.1.2.1.6.13.1.2.23.177.97.199.10.151.211.52.249.28|64x|17b161c7 +1.3.6.1.2.1.6.13.1.2.113.156.27.12.6.103.49.217.167.25|64x|719c1b0c +1.3.6.1.2.1.6.13.1.2.122.61.54.190.29.172.169.37.170.22|64x|7a3d36be +1.3.6.1.2.1.6.13.1.2.148.215.184.93.3.18.135.204.247.11|64x|94d7b85d +1.3.6.1.2.1.6.13.1.2.192.71.88.207.22.184.150.214.61.14|64x|c04758cf +1.3.6.1.2.1.6.13.1.2.215.10.127.204.23.126.210.252.1.27|64x|d70a7fcc +1.3.6.1.2.1.6.13.1.2.223.16.55.201.31.104.212.252.181.5|64x|df1037c9 +1.3.6.1.2.1.6.13.1.2.223.54.125.172.16.159.226.236.17.1|64x|df367dac +1.3.6.1.2.1.6.13.1.2.227.50.96.2.2.215.88.85.244.22|64x|e3326002 +1.3.6.1.2.1.6.13.1.2.254.4.140.40.29.214.201.146.122.0|64x|fe048c28 +1.3.6.1.2.1.6.13.1.3.23.177.97.199.10.151.211.52.249.28|2|10 +1.3.6.1.2.1.6.13.1.3.113.156.27.12.6.103.49.217.167.25|2|6 +1.3.6.1.2.1.6.13.1.3.122.61.54.190.29.172.169.37.170.22|2|29 +1.3.6.1.2.1.6.13.1.3.148.215.184.93.3.18.135.204.247.11|2|3 +1.3.6.1.2.1.6.13.1.3.192.71.88.207.22.184.150.214.61.14|2|22 +1.3.6.1.2.1.6.13.1.3.215.10.127.204.23.126.210.252.1.27|2|23 +1.3.6.1.2.1.6.13.1.3.223.16.55.201.31.104.212.252.181.5|2|31 +1.3.6.1.2.1.6.13.1.3.223.54.125.172.16.159.226.236.17.1|2|16 +1.3.6.1.2.1.6.13.1.3.227.50.96.2.2.215.88.85.244.22|2|2 +1.3.6.1.2.1.6.13.1.3.254.4.140.40.29.214.201.146.122.0|2|29 +1.3.6.1.2.1.6.13.1.4.23.177.97.199.10.151.211.52.249.28|64x|97d334f9 +1.3.6.1.2.1.6.13.1.4.113.156.27.12.6.103.49.217.167.25|64x|6731d9a7 +1.3.6.1.2.1.6.13.1.4.122.61.54.190.29.172.169.37.170.22|64x|aca925aa +1.3.6.1.2.1.6.13.1.4.148.215.184.93.3.18.135.204.247.11|64x|1287ccf7 +1.3.6.1.2.1.6.13.1.4.192.71.88.207.22.184.150.214.61.14|64x|b896d63d +1.3.6.1.2.1.6.13.1.4.215.10.127.204.23.126.210.252.1.27|64x|7ed2fc01 +1.3.6.1.2.1.6.13.1.4.223.16.55.201.31.104.212.252.181.5|64x|68d4fcb5 +1.3.6.1.2.1.6.13.1.4.223.54.125.172.16.159.226.236.17.1|64x|9fe2ec11 +1.3.6.1.2.1.6.13.1.4.227.50.96.2.2.215.88.85.244.22|64x|d75855f4 +1.3.6.1.2.1.6.13.1.4.254.4.140.40.29.214.201.146.122.0|64x|d6c9927a +1.3.6.1.2.1.6.13.1.5.23.177.97.199.10.151.211.52.249.28|2|28 +1.3.6.1.2.1.6.13.1.5.113.156.27.12.6.103.49.217.167.25|2|25 +1.3.6.1.2.1.6.13.1.5.122.61.54.190.29.172.169.37.170.22|2|22 +1.3.6.1.2.1.6.13.1.5.148.215.184.93.3.18.135.204.247.11|2|11 +1.3.6.1.2.1.6.13.1.5.192.71.88.207.22.184.150.214.61.14|2|14 +1.3.6.1.2.1.6.13.1.5.215.10.127.204.23.126.210.252.1.27|2|27 +1.3.6.1.2.1.6.13.1.5.223.16.55.201.31.104.212.252.181.5|2|5 +1.3.6.1.2.1.6.13.1.5.223.54.125.172.16.159.226.236.17.1|2|1 +1.3.6.1.2.1.6.13.1.5.227.50.96.2.2.215.88.85.244.22|2|22 +1.3.6.1.2.1.6.13.1.5.254.4.140.40.29.214.201.146.122.0|2|0 +1.3.6.1.2.1.6.14.0|65|2935824574 +1.3.6.1.2.1.6.15.0|65|1544900307 +1.3.6.1.2.1.6.17.0|70|16581522528925471079 +1.3.6.1.2.1.6.18.0|70|3369991573516953990 +1.3.6.1.2.1.7.2.0|65|3998586035 +1.3.6.1.2.1.7.3.0|65|3549343151 +1.3.6.1.2.1.7.4.0|65|2404484755 +1.3.6.1.2.1.7.5.1.1.2.141.239.85.23|64x|028def55 +1.3.6.1.2.1.7.5.1.1.20.60.66.67.23|64x|143c4243 +1.3.6.1.2.1.7.5.1.1.42.145.113.188.16|64x|2a9171bc +1.3.6.1.2.1.7.5.1.1.78.118.31.86.2|64x|4e761f56 +1.3.6.1.2.1.7.5.1.1.85.153.183.119.31|64x|5599b777 +1.3.6.1.2.1.7.5.1.1.87.237.140.144.26|64x|57ed8c90 +1.3.6.1.2.1.7.5.1.1.145.214.51.243.3|64x|91d633f3 +1.3.6.1.2.1.7.5.1.1.169.8.79.103.26|64x|a9084f67 +1.3.6.1.2.1.7.5.1.1.172.6.61.73.19|64x|ac063d49 +1.3.6.1.2.1.7.5.1.1.209.91.67.71.4|64x|d15b4347 +1.3.6.1.2.1.7.5.1.2.2.141.239.85.23|2|23 +1.3.6.1.2.1.7.5.1.2.20.60.66.67.23|2|23 +1.3.6.1.2.1.7.5.1.2.42.145.113.188.16|2|16 +1.3.6.1.2.1.7.5.1.2.78.118.31.86.2|2|2 +1.3.6.1.2.1.7.5.1.2.85.153.183.119.31|2|31 +1.3.6.1.2.1.7.5.1.2.87.237.140.144.26|2|26 +1.3.6.1.2.1.7.5.1.2.145.214.51.243.3|2|3 +1.3.6.1.2.1.7.5.1.2.169.8.79.103.26|2|26 +1.3.6.1.2.1.7.5.1.2.172.6.61.73.19|2|19 +1.3.6.1.2.1.7.5.1.2.209.91.67.71.4|2|4 +1.3.6.1.2.1.7.7.1.1.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|2|0 +1.3.6.1.2.1.7.7.1.1.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|2|0 +1.3.6.1.2.1.7.7.1.1.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|2|1 +1.3.6.1.2.1.7.7.1.1.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|2|2 +1.3.6.1.2.1.7.7.1.1.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|2|2 +1.3.6.1.2.1.7.7.1.1.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|2|2 +1.3.6.1.2.1.7.7.1.1.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|2|2 +1.3.6.1.2.1.7.7.1.1.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|2|3 +1.3.6.1.2.1.7.7.1.1.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|2|4 +1.3.6.1.2.1.7.7.1.1.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|2|4 +1.3.6.1.2.1.7.7.1.2.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|4|their +1.3.6.1.2.1.7.7.1.2.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|4x|4a61646564206b65707420627574206b657074 +1.3.6.1.2.1.7.7.1.2.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|4x|717561696e746c79206b6570742064726976696e67206b6570742074686569722062757420717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|4x|746865697220666f7277617264204a61646564 +1.3.6.1.2.1.7.7.1.2.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|4x|627574206163746564206b65707420627574206f78656e207468656972 +1.3.6.1.2.1.7.7.1.2.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|4x|666f727761726420666f727761726420717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|4x|64726976696e67207468656972206b657074206163746564204a61646564207a6f6d62696573206163746564206b657074 +1.3.6.1.2.1.7.7.1.2.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|4x|717561696e746c79207a6f6d626965732062757420627574206b657074 +1.3.6.1.2.1.7.7.1.2.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|4x|4a61646564204a6164656420717561696e746c79206f78656e206f78656e204a6164656420627574206163746564 +1.3.6.1.2.1.7.7.1.2.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|4x|717561696e746c7920666f727761726420627574207a6f6d626965732064726976696e67204a61646564207a6f6d62696573 +1.3.6.1.2.1.7.7.1.3.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|59995 +1.3.6.1.2.1.7.7.1.3.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|13615 +1.3.6.1.2.1.7.7.1.3.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|17513 +1.3.6.1.2.1.7.7.1.3.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|2480 +1.3.6.1.2.1.7.7.1.3.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|37036 +1.3.6.1.2.1.7.7.1.3.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|20490 +1.3.6.1.2.1.7.7.1.3.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|30354 +1.3.6.1.2.1.7.7.1.3.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|6240 +1.3.6.1.2.1.7.7.1.3.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|29265 +1.3.6.1.2.1.7.7.1.3.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|27397 +1.3.6.1.2.1.7.7.1.4.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|2|0 +1.3.6.1.2.1.7.7.1.4.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|2|2 +1.3.6.1.2.1.7.7.1.4.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|2|16 +1.3.6.1.2.1.7.7.1.4.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|2|0 +1.3.6.1.2.1.7.7.1.4.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|2|3 +1.3.6.1.2.1.7.7.1.4.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|2|16 +1.3.6.1.2.1.7.7.1.4.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|2|3 +1.3.6.1.2.1.7.7.1.4.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|2|4 +1.3.6.1.2.1.7.7.1.4.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|2|1 +1.3.6.1.2.1.7.7.1.4.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|2|3 +1.3.6.1.2.1.7.7.1.5.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|4x|6163746564207a6f6d62696573207468656972204a61646564206b657074 +1.3.6.1.2.1.7.7.1.5.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|4x|7a6f6d62696573207a6f6d62696573206b65707420666f7277617264206b657074206b657074204a6164656420627574207468656972 +1.3.6.1.2.1.7.7.1.5.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|4x|666f7277617264206f78656e204a61646564 +1.3.6.1.2.1.7.7.1.5.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|4x|4a616465642064726976696e6720616374656420616374656420627574204a61646564207a6f6d62696573 +1.3.6.1.2.1.7.7.1.5.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|4x|64726976696e67206f78656e206b65707420717561696e746c79207468656972207a6f6d62696573207a6f6d62696573 +1.3.6.1.2.1.7.7.1.5.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|4x|717561696e746c79206163746564 +1.3.6.1.2.1.7.7.1.5.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|4x|6275742074686569722062757420717561696e746c79206b657074 +1.3.6.1.2.1.7.7.1.5.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|4|their +1.3.6.1.2.1.7.7.1.5.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|4x|7a6f6d626965732074686569722064726976696e672062757420717561696e746c79207a6f6d626965732074686569722064726976696e67207468656972 +1.3.6.1.2.1.7.7.1.5.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|4x|62757420666f7277617264 +1.3.6.1.2.1.7.7.1.6.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|55726 +1.3.6.1.2.1.7.7.1.6.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|28531 +1.3.6.1.2.1.7.7.1.6.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|11079 +1.3.6.1.2.1.7.7.1.6.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|36798 +1.3.6.1.2.1.7.7.1.6.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|16811 +1.3.6.1.2.1.7.7.1.6.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|48634 +1.3.6.1.2.1.7.7.1.6.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|47173 +1.3.6.1.2.1.7.7.1.6.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|64624 +1.3.6.1.2.1.7.7.1.6.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|50219 +1.3.6.1.2.1.7.7.1.6.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|29145 +1.3.6.1.2.1.7.7.1.7.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|774 +1.3.6.1.2.1.7.7.1.7.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|32766 +1.3.6.1.2.1.7.7.1.7.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|42521 +1.3.6.1.2.1.7.7.1.7.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|62779 +1.3.6.1.2.1.7.7.1.7.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|47504 +1.3.6.1.2.1.7.7.1.7.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|55881 +1.3.6.1.2.1.7.7.1.7.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|30456 +1.3.6.1.2.1.7.7.1.7.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|29068 +1.3.6.1.2.1.7.7.1.7.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|30734 +1.3.6.1.2.1.7.7.1.7.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|33093 +1.3.6.1.2.1.7.7.1.8.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|22659 +1.3.6.1.2.1.7.7.1.8.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|19353 +1.3.6.1.2.1.7.7.1.8.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|61976 +1.3.6.1.2.1.7.7.1.8.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|61206 +1.3.6.1.2.1.7.7.1.8.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|14129 +1.3.6.1.2.1.7.7.1.8.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|59181 +1.3.6.1.2.1.7.7.1.8.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|15936 +1.3.6.1.2.1.7.7.1.8.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|5023 +1.3.6.1.2.1.7.7.1.8.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|22219 +1.3.6.1.2.1.7.7.1.8.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|45286 +1.3.6.1.2.1.7.8.0|70|6116206687099577350 +1.3.6.1.2.1.7.9.0|70|60548728080473664 +1.3.6.1.2.1.31.1.1.1.1.11|4x|65746830 +1.3.6.1.2.1.31.1.1.1.2.11|65|3971642957 +1.3.6.1.2.1.31.1.1.1.3.11|65|3271801795 +1.3.6.1.2.1.31.1.1.1.4.11|65|3342364789 +1.3.6.1.2.1.31.1.1.1.5.11|65|3388467146 +1.3.6.1.2.1.31.1.1.1.6.11|70|14670660891743438939 +1.3.6.1.2.1.31.1.1.1.7.11|70|10886984631120028416 +1.3.6.1.2.1.31.1.1.1.8.11|70|17994136813414766052 +1.3.6.1.2.1.31.1.1.1.9.11|70|10439183159610289289 +1.3.6.1.2.1.31.1.1.1.10.11|70|2583386891169315520 +1.3.6.1.2.1.31.1.1.1.11.11|70|8885889412380302445 +1.3.6.1.2.1.31.1.1.1.12.11|70|10885548970511406028 +1.3.6.1.2.1.31.1.1.1.13.11|70|10028224865574503284 +1.3.6.1.2.1.31.1.1.1.15.11|66|31298329 +1.3.6.1.2.1.99.1.1.1.1.31|2|9 +1.3.6.1.2.1.99.1.1.1.2.31|2|3 +1.3.6.1.2.1.99.1.1.1.3.31|2|6 +1.3.6.1.2.1.99.1.1.1.4.31|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.1.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.1.6|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.1.8|2|8 +1.3.6.1.4.1.9.9.13.1.3.1.1.11|2|11 +1.3.6.1.4.1.9.9.13.1.3.1.1.13|2|13 +1.3.6.1.4.1.9.9.13.1.3.1.1.14|2|14 +1.3.6.1.4.1.9.9.13.1.3.1.1.20|2|20 +1.3.6.1.4.1.9.9.13.1.3.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.3.1.1.31|2|31 +1.3.6.1.4.1.9.9.13.1.3.1.2.3|4x|7468656972207a6f6d62696573207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.9.9.13.1.3.1.2.6|4x|64726976696e672064726976696e67206b657074206163746564 +1.3.6.1.4.1.9.9.13.1.3.1.2.8|4x|7a6f6d626965732062757420717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.2.11|4x|61637465642064726976696e67204a61646564206163746564 +1.3.6.1.4.1.9.9.13.1.3.1.2.13|4x|7a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.2.14|4|oxen +1.3.6.1.4.1.9.9.13.1.3.1.2.20|4x|6b657074206f78656e +1.3.6.1.4.1.9.9.13.1.3.1.2.21|4x|627574204a61646564207468656972 +1.3.6.1.4.1.9.9.13.1.3.1.2.31|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.3.3|66|3930379735 +1.3.6.1.4.1.9.9.13.1.3.1.3.6|66|2258658671 +1.3.6.1.4.1.9.9.13.1.3.1.3.8|66|3213289584 +1.3.6.1.4.1.9.9.13.1.3.1.3.11|66|978410705 +1.3.6.1.4.1.9.9.13.1.3.1.3.13|66|2328456073 +1.3.6.1.4.1.9.9.13.1.3.1.3.14|66|952183581 +1.3.6.1.4.1.9.9.13.1.3.1.3.20|66|2877883263 +1.3.6.1.4.1.9.9.13.1.3.1.3.21|66|3953080519 +1.3.6.1.4.1.9.9.13.1.3.1.3.31|66|414726588 +1.3.6.1.4.1.9.9.13.1.3.1.4.3|2|9 +1.3.6.1.4.1.9.9.13.1.3.1.4.6|2|17 +1.3.6.1.4.1.9.9.13.1.3.1.4.8|2|1 +1.3.6.1.4.1.9.9.13.1.3.1.4.11|2|29 +1.3.6.1.4.1.9.9.13.1.3.1.4.13|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.4.14|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.4.20|2|23 +1.3.6.1.4.1.9.9.13.1.3.1.4.21|2|13 +1.3.6.1.4.1.9.9.13.1.3.1.4.31|2|5 +1.3.6.1.4.1.9.9.13.1.3.1.5.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.5.6|2|7 +1.3.6.1.4.1.9.9.13.1.3.1.5.8|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.5.11|2|26 +1.3.6.1.4.1.9.9.13.1.3.1.5.13|2|30 +1.3.6.1.4.1.9.9.13.1.3.1.5.14|2|9 +1.3.6.1.4.1.9.9.13.1.3.1.5.20|2|17 +1.3.6.1.4.1.9.9.13.1.3.1.5.21|2|21 +1.3.6.1.4.1.9.9.13.1.3.1.5.31|2|28 +1.3.6.1.4.1.9.9.13.1.3.1.6.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.6.6|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.8|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.11|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.13|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.6.14|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.20|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.21|2|4 +1.3.6.1.4.1.9.9.13.1.3.1.6.31|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.1.4|2|4 +1.3.6.1.4.1.9.9.13.1.4.1.1.6|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.1.7|2|7 +1.3.6.1.4.1.9.9.13.1.4.1.1.16|2|16 +1.3.6.1.4.1.9.9.13.1.4.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.4.1.1.22|2|22 +1.3.6.1.4.1.9.9.13.1.4.1.1.25|2|25 +1.3.6.1.4.1.9.9.13.1.4.1.1.27|2|27 +1.3.6.1.4.1.9.9.13.1.4.1.1.30|2|30 +1.3.6.1.4.1.9.9.13.1.4.1.2.4|4|fan_1 +1.3.6.1.4.1.9.9.13.1.4.1.2.6|4|fan_2 +1.3.6.1.4.1.9.9.13.1.4.1.2.7|4|fan_3 +1.3.6.1.4.1.9.9.13.1.4.1.2.16|4|fan_4 +1.3.6.1.4.1.9.9.13.1.4.1.2.22|4|fan_5 +1.3.6.1.4.1.9.9.13.1.4.1.2.25|4|fan_6 +1.3.6.1.4.1.9.9.13.1.4.1.2.27|4|fan_7 +1.3.6.1.4.1.9.9.13.1.4.1.2.30|4|fan_8 +1.3.6.1.4.1.9.9.13.1.4.1.3.4|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.6|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.3.7|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.16|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.21|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.22|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.3.25|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.27|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.30|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.1.0|2|0 +1.3.6.1.4.1.9.9.13.1.5.1.1.5|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.1.16|2|16 +1.3.6.1.4.1.9.9.13.1.5.1.1.20|2|20 +1.3.6.1.4.1.9.9.13.1.5.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.5.1.1.22|2|22 +1.3.6.1.4.1.9.9.13.1.5.1.1.25|2|25 +1.3.6.1.4.1.9.9.13.1.5.1.1.26|2|26 +1.3.6.1.4.1.9.9.13.1.5.1.1.29|2|29 +1.3.6.1.4.1.9.9.13.1.5.1.1.31|2|31 +1.3.6.1.4.1.9.9.13.1.5.1.2.0|4x|666f7277617264206f78656e206163746564 +1.3.6.1.4.1.9.9.13.1.5.1.2.5|4|Jaded +1.3.6.1.4.1.9.9.13.1.5.1.2.16|4x|62757420717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.9.9.13.1.5.1.2.20|4|quaintly +1.3.6.1.4.1.9.9.13.1.5.1.2.21|4x|64726976696e6720717561696e746c7920616374656420627574207468656972 +1.3.6.1.4.1.9.9.13.1.5.1.2.22|4x|62757420627574 +1.3.6.1.4.1.9.9.13.1.5.1.2.25|4x|6163746564206b6570742064726976696e67206163746564 +1.3.6.1.4.1.9.9.13.1.5.1.2.26|4x|6f78656e207468656972204a61646564 +1.3.6.1.4.1.9.9.13.1.5.1.2.29|4x|746865697220746865697220616374656420666f7277617264 +1.3.6.1.4.1.9.9.13.1.5.1.2.31|4x|4a616465642064726976696e67207468656972207468656972207468656972 +1.3.6.1.4.1.9.9.13.1.5.1.3.0|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.3.5|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.3.16|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.3.20|2|6 +1.3.6.1.4.1.9.9.13.1.5.1.3.21|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.3.22|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.3.25|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.3.26|2|6 +1.3.6.1.4.1.9.9.13.1.5.1.3.29|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.3.31|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.4.0|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.4.5|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.4.16|2|4 +1.3.6.1.4.1.9.9.13.1.5.1.4.20|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.21|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.22|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.25|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.26|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.29|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.4.31|2|1 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.1|2|22 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.7|2|21 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.10|2|17 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.13|2|6 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.15|2|20 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.18|2|8 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.20|2|16 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.1|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.7|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.10|2|2 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.13|2|2 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.15|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.18|2|2 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.20|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.1|2|3 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.7|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.10|2|6 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.13|2|4 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.15|2|6 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.18|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.20|2|6 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.1|66|2223021701 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.7|66|917475738 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.10|66|631313195 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.13|66|2637486476 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.15|66|30159574 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.18|66|3370367591 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.20|66|1617271034 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.1|2|13 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.7|2|30 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.10|2|2 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.13|2|21 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.15|2|19 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.18|2|20 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.20|2|27 +1.3.6.1.4.1.9.9.48.1.1.1.1.18|2|18 +1.3.6.1.4.1.9.9.48.1.1.1.2.18|4|test_pool +1.3.6.1.4.1.9.9.48.1.1.1.3.18|2|23 +1.3.6.1.4.1.9.9.48.1.1.1.4.18|2|1 +1.3.6.1.4.1.9.9.48.1.1.1.5.18|66|4078680985 +1.3.6.1.4.1.9.9.48.1.1.1.6.18|66|3648996318 +1.3.6.1.4.1.9.9.48.1.1.1.7.18|66|3283078931 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.712|66|712 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.7746|66|7746 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.712|2|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.7746|2|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.712|66|90 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.7746|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.712|66|40 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.7746|66|4 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.712|66|50 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.7746|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.712|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.7746|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.712|66|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.7746|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.712|66|40 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.7746|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.712|66|15518 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.7746|66|38028 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.712|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.7746|66|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.712|66|70 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.7746|66|7 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.712|66|353 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.7746|66|727588670 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.712|66|248 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.7746|66|1683542536 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.3|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.4|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.5|2|5 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.7|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.11|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.16|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.17|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.24|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.25|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.3|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.4|2|5 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.5|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.7|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.11|2|6 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.16|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.17|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.24|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.25|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.3|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.4|2|14 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.5|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.7|2|30 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.11|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.16|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.17|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.24|2|8 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.25|2|29 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.3|4x|6f78656e207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.4|4x|4a6164656420717561696e746c79204a6164656420627574207a6f6d6269657320717561696e746c79207a6f6d6269657320666f7277617264206b657074 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.5|4x|74686569722064726976696e67206b657074206f78656e2064726976696e6720666f7277617264207468656972 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.7|4x|6b65707420666f727761726420627574207468656972206275742064726976696e67207a6f6d6269657320746865697220717561696e746c79 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.11|4|quaintly +1.3.6.1.4.1.9.9.117.1.1.2.1.4.16|4x|6b657074207a6f6d62696573 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.17|4x|6f78656e206b65707420627574207a6f6d6269657320717561696e746c7920627574206f78656e +1.3.6.1.4.1.9.9.117.1.1.2.1.4.24|4x|4a61646564207a6f6d626965732061637465642064726976696e67207468656972207a6f6d6269657320666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.25|4x|6275742064726976696e67204a61646564206275742062757420627574 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.3|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.4|2|24 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.5|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.7|2|23 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.11|2|20 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.16|2|30 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.17|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.24|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.25|2|0 +1.3.6.1.4.1.9.9.117.1.1.3.0|2|10 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.2|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.7|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.8|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.11|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.21|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.26|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.27|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.30|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.31|2|1 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.1.3|2|3 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.2.3|4|Secondary unit +1.3.6.1.4.1.9.9.147.1.2.1.1.1.2.5|4|Primary unit +1.3.6.1.4.1.9.9.147.1.2.1.1.1.2.6|4|Failover LAN Interface +1.3.6.1.4.1.9.9.147.1.2.1.1.1.3.3|2|2 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.3.5|2|8 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.3.6|2|9 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.1.47596.5|66|47596 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.1.50035.2|66|50035 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.2.47596.5|2|5 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.2.50035.2|2|2 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.3.47596.5|4x|64726976696e67206b6570742064726976696e67207468656972204a61646564204a61646564206b65707420627574206b657074 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.3.50035.2|4x|717561696e746c7920627574207468656972206275742064726976696e67 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.4.47596.5|66|759866853 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.4.50035.2|66|3000607411 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.1.5.5|2|5 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.1.8.1|2|8 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.1.20.2|2|20 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.2.5.5|2|5 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.2.8.1|2|1 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.2.20.2|2|2 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.3.5.5|4x|627574206b657074207468656972206f78656e20666f72776172642064726976696e672064726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.3.8.1|4|test_conn +1.3.6.1.4.1.9.9.147.1.2.2.2.1.3.20.2|4x|4a6164656420746865697220627574204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.4.5.5|65|2025029234 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.4.8.1|65|2690303639 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.4.20.2|65|2586750173 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.5.5.5|66|20378309 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.5.20.2|66|4087850099 +1.3.6.1.4.1.9.9.171.1.1.1.0|2|20 +1.3.6.1.4.1.9.9.171.1.2.1.1.0|66|2517445787 +1.3.6.1.4.1.9.9.171.1.2.1.2.0|65|2082435314 +1.3.6.1.4.1.9.9.171.1.2.1.3.0|65|3586485799 +1.3.6.1.4.1.9.9.171.1.2.1.4.0|65|55415745 +1.3.6.1.4.1.9.9.171.1.2.1.5.0|65|2585066045 +1.3.6.1.4.1.9.9.171.1.2.1.6.0|65|2512419052 +1.3.6.1.4.1.9.9.171.1.2.1.7.0|65|787033253 +1.3.6.1.4.1.9.9.171.1.2.1.8.0|65|3554335867 +1.3.6.1.4.1.9.9.171.1.2.1.9.0|65|3427054745 +1.3.6.1.4.1.9.9.171.1.2.1.10.0|65|915529830 +1.3.6.1.4.1.9.9.171.1.2.1.11.0|65|1771994502 +1.3.6.1.4.1.9.9.171.1.2.1.12.0|65|2076367213 +1.3.6.1.4.1.9.9.171.1.2.1.13.0|65|123173035 +1.3.6.1.4.1.9.9.171.1.2.1.14.0|65|3653722608 +1.3.6.1.4.1.9.9.171.1.2.1.15.0|65|67753505 +1.3.6.1.4.1.9.9.171.1.2.1.16.0|65|2844371229 +1.3.6.1.4.1.9.9.171.1.2.1.17.0|65|654198838 +1.3.6.1.4.1.9.9.171.1.2.1.18.0|65|1314173894 +1.3.6.1.4.1.9.9.171.1.2.1.19.0|65|2721519379 +1.3.6.1.4.1.9.9.171.1.2.1.20.0|65|2355318485 +1.3.6.1.4.1.9.9.171.1.2.1.21.0|65|2650257281 +1.3.6.1.4.1.9.9.171.1.2.1.22.0|65|1030937622 +1.3.6.1.4.1.9.9.171.1.2.1.23.0|65|2780652506 +1.3.6.1.4.1.9.9.171.1.2.1.24.0|65|1045063375 +1.3.6.1.4.1.9.9.171.1.2.1.25.0|65|3776486351 +1.3.6.1.4.1.9.9.171.1.2.1.26.0|65|1216922190 +1.3.6.1.4.1.9.9.171.1.2.2.1.1.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|1 +1.3.6.1.4.1.9.9.171.1.2.2.1.1.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|2 +1.3.6.1.4.1.9.9.171.1.2.2.1.2.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|6b6570742064726976696e67206275742064726976696e67206f78656e20666f7277617264204a6164656420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.9.9.171.1.2.2.1.2.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4x|627574207a6f6d62696573206f78656e207468656972206b657074 +1.3.6.1.4.1.9.9.171.1.2.2.1.3.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|1 +1.3.6.1.4.1.9.9.171.1.2.2.1.3.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|1 +1.3.6.1.4.1.9.9.171.1.2.2.1.4.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|6b65707420666f7277617264207468656972 +1.3.6.1.4.1.9.9.171.1.2.2.1.4.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4x|717561696e746c792064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.171.1.2.2.1.5.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|30 +1.3.6.1.4.1.9.9.171.1.2.2.1.5.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|12 +1.3.6.1.4.1.9.9.171.1.2.2.1.6.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|4a61646564206b657074207468656972 +1.3.6.1.4.1.9.9.171.1.2.2.1.6.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4|kept +1.3.6.1.4.1.9.9.171.1.2.2.1.7.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.2.2.1.7.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4|kept +1.3.6.1.4.1.9.9.171.1.2.2.1.8.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|23 +1.3.6.1.4.1.9.9.171.1.2.2.1.8.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|31 +1.3.6.1.4.1.9.9.171.1.2.2.1.9.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|22 +1.3.6.1.4.1.9.9.171.1.2.2.1.9.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.1.3|2|3 +1.3.6.1.4.1.9.9.171.1.2.3.1.1.5|2|5 +1.3.6.1.4.1.9.9.171.1.2.3.1.2.3|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.2.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.3.3|4x|7468656972207a6f6d62696573207468656972207a6f6d62696573206b657074206f78656e +1.3.6.1.4.1.9.9.171.1.2.3.1.3.5|4x|7a6f6d62696573204a6164656420746865697220616374656420627574 +1.3.6.1.4.1.9.9.171.1.2.3.1.4.3|4|oxen +1.3.6.1.4.1.9.9.171.1.2.3.1.4.5|4x|6163746564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.2.3.1.5.3|4|oxen +1.3.6.1.4.1.9.9.171.1.2.3.1.5.5|4|but +1.3.6.1.4.1.9.9.171.1.2.3.1.6.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.6.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.7.3|4x|6163746564206b657074204a61646564206163746564 +1.3.6.1.4.1.9.9.171.1.2.3.1.7.5|4x|64726976696e67206f78656e206b65707420627574204a61646564207a6f6d62696573204a61646564 +1.3.6.1.4.1.9.9.171.1.2.3.1.8.3|4|kept +1.3.6.1.4.1.9.9.171.1.2.3.1.8.5|4x|6b657074207468656972204a61646564 +1.3.6.1.4.1.9.9.171.1.2.3.1.9.3|4x|6163746564206b657074207468656972207468656972 +1.3.6.1.4.1.9.9.171.1.2.3.1.9.5|4x|666f727761726420666f7277617264206b65707420717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.2.3.1.10.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.10.5|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.11.3|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.11.5|2|3 +1.3.6.1.4.1.9.9.171.1.2.3.1.12.3|2|3 +1.3.6.1.4.1.9.9.171.1.2.3.1.12.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.13.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.13.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.14.3|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.14.5|2|5 +1.3.6.1.4.1.9.9.171.1.2.3.1.15.3|2|13 +1.3.6.1.4.1.9.9.171.1.2.3.1.15.5|2|28 +1.3.6.1.4.1.9.9.171.1.2.3.1.16.3|2|16 +1.3.6.1.4.1.9.9.171.1.2.3.1.16.5|2|0 +1.3.6.1.4.1.9.9.171.1.2.3.1.17.3|2|9 +1.3.6.1.4.1.9.9.171.1.2.3.1.17.5|2|23 +1.3.6.1.4.1.9.9.171.1.2.3.1.18.3|65|873863217 +1.3.6.1.4.1.9.9.171.1.2.3.1.18.5|65|4041389162 +1.3.6.1.4.1.9.9.171.1.2.3.1.19.3|65|444696945 +1.3.6.1.4.1.9.9.171.1.2.3.1.19.5|65|1429413108 +1.3.6.1.4.1.9.9.171.1.2.3.1.20.3|65|2526233032 +1.3.6.1.4.1.9.9.171.1.2.3.1.20.5|65|3931574972 +1.3.6.1.4.1.9.9.171.1.2.3.1.21.3|65|2479090364 +1.3.6.1.4.1.9.9.171.1.2.3.1.21.5|65|874183465 +1.3.6.1.4.1.9.9.171.1.2.3.1.22.3|65|888202948 +1.3.6.1.4.1.9.9.171.1.2.3.1.22.5|65|1610429217 +1.3.6.1.4.1.9.9.171.1.2.3.1.23.3|65|3462920250 +1.3.6.1.4.1.9.9.171.1.2.3.1.23.5|65|2151705546 +1.3.6.1.4.1.9.9.171.1.2.3.1.24.3|65|2565719801 +1.3.6.1.4.1.9.9.171.1.2.3.1.24.5|65|3395553994 +1.3.6.1.4.1.9.9.171.1.2.3.1.25.3|65|2228405074 +1.3.6.1.4.1.9.9.171.1.2.3.1.25.5|65|2624335244 +1.3.6.1.4.1.9.9.171.1.2.3.1.26.3|65|3006967537 +1.3.6.1.4.1.9.9.171.1.2.3.1.26.5|65|410051353 +1.3.6.1.4.1.9.9.171.1.2.3.1.27.3|65|1337714779 +1.3.6.1.4.1.9.9.171.1.2.3.1.27.5|65|1425712802 +1.3.6.1.4.1.9.9.171.1.2.3.1.28.3|65|2116873007 +1.3.6.1.4.1.9.9.171.1.2.3.1.28.5|65|1353332653 +1.3.6.1.4.1.9.9.171.1.2.3.1.29.3|65|3580869615 +1.3.6.1.4.1.9.9.171.1.2.3.1.29.5|65|715475082 +1.3.6.1.4.1.9.9.171.1.2.3.1.30.3|65|2249094174 +1.3.6.1.4.1.9.9.171.1.2.3.1.30.5|65|685279905 +1.3.6.1.4.1.9.9.171.1.2.3.1.31.3|65|2318835995 +1.3.6.1.4.1.9.9.171.1.2.3.1.31.5|65|3313898297 +1.3.6.1.4.1.9.9.171.1.2.3.1.32.3|65|990926535 +1.3.6.1.4.1.9.9.171.1.2.3.1.32.5|65|4004637148 +1.3.6.1.4.1.9.9.171.1.2.3.1.33.3|65|1674719135 +1.3.6.1.4.1.9.9.171.1.2.3.1.33.5|65|3116893031 +1.3.6.1.4.1.9.9.171.1.2.3.1.34.3|65|2142489467 +1.3.6.1.4.1.9.9.171.1.2.3.1.34.5|65|567516830 +1.3.6.1.4.1.9.9.171.1.2.3.1.35.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.35.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.4.1.1.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|2 +1.3.6.1.4.1.9.9.171.1.2.4.1.1.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|2 +1.3.6.1.4.1.9.9.171.1.2.4.1.2.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|4x|666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.171.1.2.4.1.2.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|4x|7468656972207a6f6d62696573206f78656e204a616465642064726976696e67 +1.3.6.1.4.1.9.9.171.1.2.4.1.3.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.4.1.3.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|2 +1.3.6.1.4.1.9.9.171.1.2.4.1.4.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|4x|627574206f78656e2064726976696e67207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.2.4.1.4.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|4x|7468656972204a61646564206b657074207a6f6d62696573207468656972206b65707420627574 +1.3.6.1.4.1.9.9.171.1.2.4.1.5.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|13 +1.3.6.1.4.1.9.9.171.1.2.4.1.5.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|24 +1.3.6.1.4.1.9.9.171.1.2.4.1.6.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|5 +1.3.6.1.4.1.9.9.171.1.2.4.1.6.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|26 +1.3.6.1.4.1.9.9.171.1.2.4.1.7.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|23 +1.3.6.1.4.1.9.9.171.1.2.4.1.7.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|24 +1.3.6.1.4.1.9.9.171.1.2.5.1.1.2|66|3405348844 +1.3.6.1.4.1.9.9.171.1.2.5.1.1.17|66|1379037661 +1.3.6.1.4.1.9.9.171.1.2.5.1.2.2|65|88229005 +1.3.6.1.4.1.9.9.171.1.2.5.1.2.17|65|3030198713 +1.3.6.1.4.1.9.9.171.1.2.5.1.3.2|65|344910659 +1.3.6.1.4.1.9.9.171.1.2.5.1.3.17|65|33036840 +1.3.6.1.4.1.9.9.171.1.2.5.1.4.2|65|447299365 +1.3.6.1.4.1.9.9.171.1.2.5.1.4.17|65|538727845 +1.3.6.1.4.1.9.9.171.1.2.5.1.5.2|65|472834505 +1.3.6.1.4.1.9.9.171.1.2.5.1.5.17|65|3054034 +1.3.6.1.4.1.9.9.171.1.2.5.1.6.2|65|3593802072 +1.3.6.1.4.1.9.9.171.1.2.5.1.6.17|65|3549366247 +1.3.6.1.4.1.9.9.171.1.2.5.1.7.2|65|2944563745 +1.3.6.1.4.1.9.9.171.1.2.5.1.7.17|65|3766841702 +1.3.6.1.4.1.9.9.171.1.2.5.1.8.2|65|2827110916 +1.3.6.1.4.1.9.9.171.1.2.5.1.8.17|65|541497651 +1.3.6.1.4.1.9.9.171.1.2.5.1.9.2|65|234506077 +1.3.6.1.4.1.9.9.171.1.2.5.1.9.17|65|2731827217 +1.3.6.1.4.1.9.9.171.1.2.5.1.10.2|65|35823350 +1.3.6.1.4.1.9.9.171.1.2.5.1.10.17|65|2055408274 +1.3.6.1.4.1.9.9.171.1.2.5.1.11.2|65|613379743 +1.3.6.1.4.1.9.9.171.1.2.5.1.11.17|65|749737562 +1.3.6.1.4.1.9.9.171.1.2.5.1.12.2|65|3136782594 +1.3.6.1.4.1.9.9.171.1.2.5.1.12.17|65|3867599558 +1.3.6.1.4.1.9.9.171.1.2.5.1.13.2|65|2518038894 +1.3.6.1.4.1.9.9.171.1.2.5.1.13.17|65|3789209889 +1.3.6.1.4.1.9.9.171.1.2.5.1.14.2|65|485135820 +1.3.6.1.4.1.9.9.171.1.2.5.1.14.17|65|2804351110 +1.3.6.1.4.1.9.9.171.1.2.5.1.15.2|65|3816944451 +1.3.6.1.4.1.9.9.171.1.2.5.1.15.17|65|3061990294 +1.3.6.1.4.1.9.9.171.1.2.5.1.16.2|65|3293750728 +1.3.6.1.4.1.9.9.171.1.2.5.1.16.17|65|3502377103 +1.3.6.1.4.1.9.9.171.1.2.5.1.17.2|65|4236310901 +1.3.6.1.4.1.9.9.171.1.2.5.1.17.17|65|2360434961 +1.3.6.1.4.1.9.9.171.1.2.5.1.18.2|65|3798162230 +1.3.6.1.4.1.9.9.171.1.2.5.1.18.17|65|3954421682 +1.3.6.1.4.1.9.9.171.1.2.5.1.19.2|65|1365609163 +1.3.6.1.4.1.9.9.171.1.2.5.1.19.17|65|191894913 +1.3.6.1.4.1.9.9.171.1.2.5.1.20.2|65|1405339921 +1.3.6.1.4.1.9.9.171.1.2.5.1.20.17|65|2429774821 +1.3.6.1.4.1.9.9.171.1.2.5.1.21.2|65|2995566101 +1.3.6.1.4.1.9.9.171.1.2.5.1.21.17|65|1832565962 +1.3.6.1.4.1.9.9.171.1.2.5.1.22.2|65|4132429477 +1.3.6.1.4.1.9.9.171.1.2.5.1.22.17|65|418366803 +1.3.6.1.4.1.9.9.171.1.2.5.1.23.2|65|2015402172 +1.3.6.1.4.1.9.9.171.1.2.5.1.23.17|65|1316534295 +1.3.6.1.4.1.9.9.171.1.2.5.1.24.2|65|3247282160 +1.3.6.1.4.1.9.9.171.1.2.5.1.24.17|65|2833736517 +1.3.6.1.4.1.9.9.171.1.2.5.1.25.2|65|2823444229 +1.3.6.1.4.1.9.9.171.1.2.5.1.25.17|65|1615516389 +1.3.6.1.4.1.9.9.171.1.2.5.1.26.2|65|73347298 +1.3.6.1.4.1.9.9.171.1.2.5.1.26.17|65|2896149360 +1.3.6.1.4.1.9.9.171.1.3.1.1.0|66|555520100 +1.3.6.1.4.1.9.9.171.1.3.1.2.0|65|3433850807 +1.3.6.1.4.1.9.9.171.1.3.1.3.0|65|3765451978 +1.3.6.1.4.1.9.9.171.1.3.1.4.0|70|8076380598964912751 +1.3.6.1.4.1.9.9.171.1.3.1.5.0|65|605242469 +1.3.6.1.4.1.9.9.171.1.3.1.6.0|65|2117938836 +1.3.6.1.4.1.9.9.171.1.3.1.7.0|70|1244382013554652095 +1.3.6.1.4.1.9.9.171.1.3.1.8.0|65|2069097191 +1.3.6.1.4.1.9.9.171.1.3.1.9.0|65|1103506722 +1.3.6.1.4.1.9.9.171.1.3.1.10.0|65|3278141363 +1.3.6.1.4.1.9.9.171.1.3.1.11.0|65|2348631446 +1.3.6.1.4.1.9.9.171.1.3.1.12.0|65|788758787 +1.3.6.1.4.1.9.9.171.1.3.1.13.0|65|1299954247 +1.3.6.1.4.1.9.9.171.1.3.1.14.0|65|2563637642 +1.3.6.1.4.1.9.9.171.1.3.1.15.0|65|34726275 +1.3.6.1.4.1.9.9.171.1.3.1.16.0|65|3892208230 +1.3.6.1.4.1.9.9.171.1.3.1.17.0|70|11061656018312361232 +1.3.6.1.4.1.9.9.171.1.3.1.18.0|65|3239360685 +1.3.6.1.4.1.9.9.171.1.3.1.19.0|65|2198334559 +1.3.6.1.4.1.9.9.171.1.3.1.20.0|70|3371199286386608944 +1.3.6.1.4.1.9.9.171.1.3.1.21.0|65|2444861007 +1.3.6.1.4.1.9.9.171.1.3.1.22.0|65|1881053125 +1.3.6.1.4.1.9.9.171.1.3.1.23.0|65|3540985166 +1.3.6.1.4.1.9.9.171.1.3.1.24.0|65|3081489769 +1.3.6.1.4.1.9.9.171.1.3.1.25.0|65|257883106 +1.3.6.1.4.1.9.9.171.1.3.1.26.0|65|1836586560 +1.3.6.1.4.1.9.9.171.1.3.1.27.0|65|980485057 +1.3.6.1.4.1.9.9.171.1.3.1.28.0|65|644393269 +1.3.6.1.4.1.9.9.171.1.3.1.29.0|65|3550809455 +1.3.6.1.4.1.9.9.171.1.3.1.30.0|65|1537259604 +1.3.6.1.4.1.9.9.171.1.3.2.1.1.23|2|23 +1.3.6.1.4.1.9.9.171.1.3.2.1.1.28|2|28 +1.3.6.1.4.1.9.9.171.1.3.2.1.2.23|2|7 +1.3.6.1.4.1.9.9.171.1.3.2.1.2.28|2|7 +1.3.6.1.4.1.9.9.171.1.3.2.1.3.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.3.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.4.23|4x|64726976696e67206b65707420627574 +1.3.6.1.4.1.9.9.171.1.3.2.1.4.28|4x|6b6570742062757420666f7277617264 +1.3.6.1.4.1.9.9.171.1.3.2.1.5.23|4|kept +1.3.6.1.4.1.9.9.171.1.3.2.1.5.28|4|kept +1.3.6.1.4.1.9.9.171.1.3.2.1.6.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.6.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.7.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.7.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.8.23|2|4 +1.3.6.1.4.1.9.9.171.1.3.2.1.8.28|2|6 +1.3.6.1.4.1.9.9.171.1.3.2.1.9.23|2|25 +1.3.6.1.4.1.9.9.171.1.3.2.1.9.28|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.10.23|2|30 +1.3.6.1.4.1.9.9.171.1.3.2.1.10.28|2|7 +1.3.6.1.4.1.9.9.171.1.3.2.1.11.23|2|25 +1.3.6.1.4.1.9.9.171.1.3.2.1.11.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.12.23|2|29 +1.3.6.1.4.1.9.9.171.1.3.2.1.12.28|2|12 +1.3.6.1.4.1.9.9.171.1.3.2.1.13.23|65|736404368 +1.3.6.1.4.1.9.9.171.1.3.2.1.13.28|65|3035617434 +1.3.6.1.4.1.9.9.171.1.3.2.1.14.23|65|2717096145 +1.3.6.1.4.1.9.9.171.1.3.2.1.14.28|65|3979661869 +1.3.6.1.4.1.9.9.171.1.3.2.1.15.23|66|1401352929 +1.3.6.1.4.1.9.9.171.1.3.2.1.15.28|66|1557942135 +1.3.6.1.4.1.9.9.171.1.3.2.1.16.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.16.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.17.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.17.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.18.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.18.28|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.19.23|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.19.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.20.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.20.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.21.23|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.21.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.22.23|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.22.28|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.23.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.23.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.24.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.24.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.25.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.25.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.26.23|65|165896064 +1.3.6.1.4.1.9.9.171.1.3.2.1.26.28|65|3618088990 +1.3.6.1.4.1.9.9.171.1.3.2.1.27.23|70|16893382919849205152 +1.3.6.1.4.1.9.9.171.1.3.2.1.27.28|70|11976318338642029242 +1.3.6.1.4.1.9.9.171.1.3.2.1.28.23|65|373706179 +1.3.6.1.4.1.9.9.171.1.3.2.1.28.28|65|42463689 +1.3.6.1.4.1.9.9.171.1.3.2.1.29.23|65|1106272656 +1.3.6.1.4.1.9.9.171.1.3.2.1.29.28|65|1002521669 +1.3.6.1.4.1.9.9.171.1.3.2.1.30.23|70|11922900353577803661 +1.3.6.1.4.1.9.9.171.1.3.2.1.30.28|70|15599379710949051351 +1.3.6.1.4.1.9.9.171.1.3.2.1.31.23|65|1074980189 +1.3.6.1.4.1.9.9.171.1.3.2.1.31.28|65|1263307338 +1.3.6.1.4.1.9.9.171.1.3.2.1.32.23|65|19491227 +1.3.6.1.4.1.9.9.171.1.3.2.1.32.28|65|3040420568 +1.3.6.1.4.1.9.9.171.1.3.2.1.33.23|65|185606313 +1.3.6.1.4.1.9.9.171.1.3.2.1.33.28|65|4077668277 +1.3.6.1.4.1.9.9.171.1.3.2.1.34.23|65|3856931801 +1.3.6.1.4.1.9.9.171.1.3.2.1.34.28|65|1043684270 +1.3.6.1.4.1.9.9.171.1.3.2.1.35.23|65|1768453926 +1.3.6.1.4.1.9.9.171.1.3.2.1.35.28|65|2468669416 +1.3.6.1.4.1.9.9.171.1.3.2.1.36.23|65|3103192375 +1.3.6.1.4.1.9.9.171.1.3.2.1.36.28|65|3896235917 +1.3.6.1.4.1.9.9.171.1.3.2.1.37.23|65|2610571653 +1.3.6.1.4.1.9.9.171.1.3.2.1.37.28|65|2004039361 +1.3.6.1.4.1.9.9.171.1.3.2.1.38.23|65|668234317 +1.3.6.1.4.1.9.9.171.1.3.2.1.38.28|65|229562644 +1.3.6.1.4.1.9.9.171.1.3.2.1.39.23|65|451351388 +1.3.6.1.4.1.9.9.171.1.3.2.1.39.28|65|358890378 +1.3.6.1.4.1.9.9.171.1.3.2.1.40.23|70|15907561446294960767 +1.3.6.1.4.1.9.9.171.1.3.2.1.40.28|70|14524952430283157279 +1.3.6.1.4.1.9.9.171.1.3.2.1.41.23|65|2966419854 +1.3.6.1.4.1.9.9.171.1.3.2.1.41.28|65|2075836476 +1.3.6.1.4.1.9.9.171.1.3.2.1.42.23|65|2137519503 +1.3.6.1.4.1.9.9.171.1.3.2.1.42.28|65|723885852 +1.3.6.1.4.1.9.9.171.1.3.2.1.43.23|70|13733445844003001241 +1.3.6.1.4.1.9.9.171.1.3.2.1.43.28|70|13579132757302593240 +1.3.6.1.4.1.9.9.171.1.3.2.1.44.23|65|2771155894 +1.3.6.1.4.1.9.9.171.1.3.2.1.44.28|65|1824515850 +1.3.6.1.4.1.9.9.171.1.3.2.1.45.23|65|1889625612 +1.3.6.1.4.1.9.9.171.1.3.2.1.45.28|65|4054252226 +1.3.6.1.4.1.9.9.171.1.3.2.1.46.23|65|2849925259 +1.3.6.1.4.1.9.9.171.1.3.2.1.46.28|65|3010306271 +1.3.6.1.4.1.9.9.171.1.3.2.1.47.23|65|2110348798 +1.3.6.1.4.1.9.9.171.1.3.2.1.47.28|65|3986765758 +1.3.6.1.4.1.9.9.171.1.3.2.1.48.23|65|2958887014 +1.3.6.1.4.1.9.9.171.1.3.2.1.48.28|65|121428427 +1.3.6.1.4.1.9.9.171.1.3.2.1.49.23|65|4235674459 +1.3.6.1.4.1.9.9.171.1.3.2.1.49.28|65|3087398701 +1.3.6.1.4.1.9.9.171.1.3.2.1.50.23|65|2987809814 +1.3.6.1.4.1.9.9.171.1.3.2.1.50.28|65|1084010267 +1.3.6.1.4.1.9.9.171.1.3.2.1.51.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.51.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.3.1.1.3.15|2|15 +1.3.6.1.4.1.9.9.171.1.3.3.1.1.19.26|2|26 +1.3.6.1.4.1.9.9.171.1.3.3.1.2.3.15|4x|717561696e746c79207a6f6d62696573206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.3.3.1.2.19.26|4x|6b657074206163746564206b65707420666f7277617264206b657074 +1.3.6.1.4.1.9.9.171.1.3.3.1.3.3.15|2|1 +1.3.6.1.4.1.9.9.171.1.3.3.1.3.19.26|2|2 +1.3.6.1.4.1.9.9.171.1.3.3.1.4.3.15|4|oxen +1.3.6.1.4.1.9.9.171.1.3.3.1.4.19.26|4|oxen +1.3.6.1.4.1.9.9.171.1.3.3.1.5.3.15|4x|64726976696e67206f78656e20627574 +1.3.6.1.4.1.9.9.171.1.3.3.1.5.19.26|4|kept +1.3.6.1.4.1.9.9.171.1.3.3.1.6.3.15|2|6 +1.3.6.1.4.1.9.9.171.1.3.3.1.6.19.26|2|20 +1.3.6.1.4.1.9.9.171.1.3.3.1.7.3.15|2|22 +1.3.6.1.4.1.9.9.171.1.3.3.1.7.19.26|2|25 +1.3.6.1.4.1.9.9.171.1.3.3.1.8.3.15|4x|6f78656e204a6164656420746865697220627574 +1.3.6.1.4.1.9.9.171.1.3.3.1.8.19.26|4x|746865697220717561696e746c79206163746564207a6f6d62696573206163746564206f78656e2064726976696e67 +1.3.6.1.4.1.9.9.171.1.3.3.1.9.3.15|2|3 +1.3.6.1.4.1.9.9.171.1.3.3.1.9.19.26|2|3 +1.3.6.1.4.1.9.9.171.1.3.3.1.10.3.15|4|oxen +1.3.6.1.4.1.9.9.171.1.3.3.1.10.19.26|4|kept +1.3.6.1.4.1.9.9.171.1.3.3.1.11.3.15|4|kept +1.3.6.1.4.1.9.9.171.1.3.3.1.11.19.26|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.171.1.3.3.1.12.3.15|2|11 +1.3.6.1.4.1.9.9.171.1.3.3.1.12.19.26|2|3 +1.3.6.1.4.1.9.9.171.1.3.3.1.13.3.15|2|17 +1.3.6.1.4.1.9.9.171.1.3.3.1.13.19.26|2|31 +1.3.6.1.4.1.9.9.171.1.3.4.1.1.9.2|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.1.31.28|2|28 +1.3.6.1.4.1.9.9.171.1.3.4.1.2.9.2|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.2.31.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.3.9.2|66|45981 +1.3.6.1.4.1.9.9.171.1.3.4.1.3.31.28|66|2825 +1.3.6.1.4.1.9.9.171.1.3.4.1.4.9.2|2|3 +1.3.6.1.4.1.9.9.171.1.3.4.1.4.31.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.4.1.5.9.2|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.5.31.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.5.1.1.11|66|1539004452 +1.3.6.1.4.1.9.9.171.1.3.5.1.1.21|66|986476198 +1.3.6.1.4.1.9.9.171.1.3.5.1.2.11|65|3634989455 +1.3.6.1.4.1.9.9.171.1.3.5.1.2.21|65|774642436 +1.3.6.1.4.1.9.9.171.1.3.5.1.3.11|65|971728629 +1.3.6.1.4.1.9.9.171.1.3.5.1.3.21|65|3145266041 +1.3.6.1.4.1.9.9.171.1.3.5.1.4.11|65|2110814352 +1.3.6.1.4.1.9.9.171.1.3.5.1.4.21|65|155761707 +1.3.6.1.4.1.9.9.171.1.3.5.1.5.11|65|2248268558 +1.3.6.1.4.1.9.9.171.1.3.5.1.5.21|65|561905585 +1.3.6.1.4.1.9.9.171.1.3.5.1.6.11|65|974515501 +1.3.6.1.4.1.9.9.171.1.3.5.1.6.21|65|913516496 +1.3.6.1.4.1.9.9.171.1.3.5.1.7.11|65|3221449308 +1.3.6.1.4.1.9.9.171.1.3.5.1.7.21|65|2989278436 +1.3.6.1.4.1.9.9.171.1.3.5.1.8.11|65|2541691427 +1.3.6.1.4.1.9.9.171.1.3.5.1.8.21|65|3367590847 +1.3.6.1.4.1.9.9.171.1.3.5.1.9.11|65|2075568959 +1.3.6.1.4.1.9.9.171.1.3.5.1.9.21|65|505678552 +1.3.6.1.4.1.9.9.171.1.3.5.1.10.11|65|1601794867 +1.3.6.1.4.1.9.9.171.1.3.5.1.10.21|65|4108299796 +1.3.6.1.4.1.9.9.171.1.3.5.1.11.11|65|3796494388 +1.3.6.1.4.1.9.9.171.1.3.5.1.11.21|65|1442135763 +1.3.6.1.4.1.9.9.171.1.3.5.1.12.11|65|2850926956 +1.3.6.1.4.1.9.9.171.1.3.5.1.12.21|65|989514632 +1.3.6.1.4.1.9.9.171.1.3.5.1.13.11|65|1864025156 +1.3.6.1.4.1.9.9.171.1.3.5.1.13.21|65|115684894 +1.3.6.1.4.1.9.9.171.1.3.5.1.14.11|65|1486924693 +1.3.6.1.4.1.9.9.171.1.3.5.1.14.21|65|3614381712 +1.3.6.1.4.1.9.9.171.1.3.5.1.15.11|65|2886166675 +1.3.6.1.4.1.9.9.171.1.3.5.1.15.21|65|2418878004 +1.3.6.1.4.1.9.9.171.1.3.5.1.16.11|65|4041081525 +1.3.6.1.4.1.9.9.171.1.3.5.1.16.21|65|3202353128 +1.3.6.1.4.1.9.9.171.1.3.5.1.17.11|65|3359563692 +1.3.6.1.4.1.9.9.171.1.3.5.1.17.21|65|3939308341 +1.3.6.1.4.1.9.9.171.1.3.5.1.18.11|65|3421730058 +1.3.6.1.4.1.9.9.171.1.3.5.1.18.21|65|2537482589 +1.3.6.1.4.1.9.9.171.1.3.5.1.19.11|65|2662393759 +1.3.6.1.4.1.9.9.171.1.3.5.1.19.21|65|2933597356 +1.3.6.1.4.1.9.9.171.1.3.5.1.20.11|65|4135163112 +1.3.6.1.4.1.9.9.171.1.3.5.1.20.21|65|3283135834 +1.3.6.1.4.1.9.9.171.1.3.5.1.21.11|65|562097720 +1.3.6.1.4.1.9.9.171.1.3.5.1.21.21|65|168036034 +1.3.6.1.4.1.9.9.171.1.3.5.1.22.11|65|2444828842 +1.3.6.1.4.1.9.9.171.1.3.5.1.22.21|65|78028517 +1.3.6.1.4.1.9.9.171.1.3.5.1.23.11|65|1627747682 +1.3.6.1.4.1.9.9.171.1.3.5.1.23.21|65|871345082 +1.3.6.1.4.1.9.9.171.1.3.5.1.24.11|65|3118031750 +1.3.6.1.4.1.9.9.171.1.3.5.1.24.21|65|3275451558 +1.3.6.1.4.1.9.9.171.1.3.5.1.25.11|65|142449220 +1.3.6.1.4.1.9.9.171.1.3.5.1.25.21|65|3664919325 +1.3.6.1.4.1.9.9.171.1.3.5.1.26.11|65|2401996341 +1.3.6.1.4.1.9.9.171.1.3.5.1.26.21|65|3251587706 +1.3.6.1.4.1.9.9.171.1.4.1.1.1.0|2|13 +1.3.6.1.4.1.9.9.171.1.4.1.1.2.0|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.1.10|2|10 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.1.22|2|22 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.2.10|2|4 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.2.22|2|7 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.3.10|2|30 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.3.22|2|19 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.4.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.4.22|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.5.10|4x|6163746564207a6f6d62696573206f78656e2061637465642064726976696e6720627574 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.5.22|4x|627574204a61646564207468656972 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.6.10|2|6 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.6.22|2|19 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.7.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.7.22|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.8.10|4x|627574207a6f6d62696573207a6f6d62696573207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.8.22|4x|6275742064726976696e67206b657074 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.9.10|4|kept +1.3.6.1.4.1.9.9.171.1.4.2.1.1.9.22|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.4.2.1.1.10.10|4x|64726976696e67206275742064726976696e6720666f7277617264207468656972 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.10.22|4x|6b657074207468656972204a61646564206b657074206b6570742064726976696e672062757420627574206f78656e +1.3.6.1.4.1.9.9.171.1.4.2.1.1.11.10|4|oxen +1.3.6.1.4.1.9.9.171.1.4.2.1.1.11.22|4x|717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.12.10|4x|64726976696e67207468656972206f78656e2064726976696e67207a6f6d6269657320666f727761726420717561696e746c7920666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.12.22|4x|7468656972206163746564 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.13.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.13.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.14.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.14.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.15.10|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.15.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.16.10|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.16.22|2|3 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.17.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.17.22|2|3 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.18.10|2|17 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.18.22|2|15 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.19.10|67|4188924691 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.19.22|67|2937118870 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.20.10|2|11 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.20.22|2|6 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.21.10|65|3904979266 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.21.22|65|3560928040 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.22.10|65|3895453958 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.22.22|65|930877155 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.23.10|65|4155384128 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.23.22|65|1945794694 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.24.10|65|2440644215 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.24.22|65|2179560049 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.25.10|65|3951748314 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.25.22|65|127664431 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.26.10|65|240677500 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.26.22|65|4237031121 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.27.10|65|2919250870 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.27.22|65|4208516442 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.28.10|65|2427553207 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.28.22|65|948705652 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.29.10|65|82976265 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.29.22|65|3934746364 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.30.10|65|3861895215 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.30.22|65|217536823 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.31.10|65|3151994492 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.31.22|65|241794704 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.32.10|65|1506839476 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.32.22|65|2068566446 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.33.10|65|2343908199 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.33.22|65|3426161501 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.34.10|65|648407740 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.34.22|65|1146473588 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.35.10|65|1680408828 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.35.22|65|799707233 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.36.10|65|3312014872 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.36.22|65|1227147473 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.37.10|65|1202145057 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.37.22|65|1608376026 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.38.10|65|3883766622 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.38.22|65|2243100818 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.1.17|2|17 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.1.18|2|18 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.2.17|2|4 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.2.18|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.3.17|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.3.18|2|13 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.4.17|2|11 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.4.18|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.5.17|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.5.18|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.6.17|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.6.18|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.7.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.7.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.8.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.8.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.9.17|2|10 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.9.18|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.10.17|2|21 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.10.18|2|22 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.11.17|67|2140606133 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.11.18|67|947877786 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.12.17|2|24 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.12.18|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.13.17|65|804171075 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.13.18|65|3013529205 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.14.17|65|2306734177 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.14.18|65|59730603 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.15.17|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.15.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.16.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.16.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.17.17|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.17.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.18.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.18.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.19.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.19.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.20.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.20.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.21.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.21.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.22.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.22.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.23.17|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.23.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.24.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.24.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.25.17|65|1350520686 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.25.18|65|460378122 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.26.17|70|10257421324758334396 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.26.18|70|15955968530926075190 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.27.17|65|2626476172 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.27.18|65|866683012 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.28.17|65|729325687 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.28.18|65|2042095897 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.29.17|70|3908873172283764405 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.29.18|70|9692543863636570033 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.30.17|65|797291069 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.30.18|65|3831339083 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.31.17|65|365694518 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.31.18|65|659908830 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.32.17|65|3175828355 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.32.18|65|3194917681 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.33.17|65|3486343761 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.33.18|65|647213477 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.34.17|65|620133147 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.34.18|65|3900465494 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.35.17|65|2135862472 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.35.18|65|2286879901 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.36.17|65|4212299981 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.36.18|65|2957562648 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.37.17|65|3498974530 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.37.18|65|4110881771 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.38.17|65|3426811607 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.38.18|65|3841788286 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.39.17|70|4204788537335394816 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.39.18|70|12043116387776586811 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.40.17|65|3519864046 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.40.18|65|1622184210 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.41.17|65|3039522194 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.41.18|65|1867658882 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.42.17|70|17502062167311159970 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.42.18|70|10996239327049192810 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.43.17|65|3935338485 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.43.18|65|4137439811 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.44.17|65|2920482346 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.44.18|65|166949467 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.45.17|65|3600484353 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.45.18|65|542927767 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.46.17|65|250089742 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.46.18|65|3039150373 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.47.17|65|1876324894 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.47.18|65|3523115734 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.48.17|65|396919596 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.48.18|65|3635284240 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.49.17|65|1871392869 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.49.18|65|1071823832 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.1.22|2|22 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.1.24|2|24 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.2.22|2|23 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.2.24|2|8 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.3.22|2|11 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.3.24|2|28 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.4.22|4x|616374656420666f7277617264206163746564206b657074206163746564206163746564 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.4.24|4x|717561696e746c79204a6164656420746865697220616374656420627574 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.5.22|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.5.24|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.6.22|4|oxen +1.3.6.1.4.1.9.9.171.1.4.3.2.1.6.24|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.2.1.7.22|4x|6163746564206f78656e204a61646564 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.7.24|4|oxen +1.3.6.1.4.1.9.9.171.1.4.3.2.1.8.22|2|24 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.8.24|2|10 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.9.22|2|31 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.9.24|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.10.22|4x|6f78656e20627574206b65707420717561696e746c79 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.10.24|4x|616374656420627574 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.11.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.11.24|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.12.22|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.2.1.12.24|4x|6f78656e206163746564207468656972 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.13.22|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.2.1.13.24|4|oxen +1.3.6.1.4.1.9.9.171.1.4.3.2.1.14.22|2|14 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.14.24|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.15.22|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.15.24|2|15 +1.3.6.1.4.1.9.9.171.1.5.1.1.1.0|2|15 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.1.8|2|8 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.1.15|2|15 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.2.8|2|11 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.2.15|2|14 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.3.8|67|2511746407 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.3.15|67|919534560 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.4.8|2|2 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.4.15|2|2 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.5.8|4x|717561696e746c7920627574206b6570742061637465642064726976696e6720627574 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.5.15|4x|4a61646564204a61646564204a61646564 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.6.8|2|1 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.6.15|2|2 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.7.8|4x|4a6164656420717561696e746c7920627574 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.7.15|4x|64726976696e6720666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.8.8|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.8.15|4|kept +1.3.6.1.4.1.9.9.171.1.5.2.1.1.9.8|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.9.15|4|oxen +1.3.6.1.4.1.9.9.171.1.5.3.1.1.1.22|2|22 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.1.29|2|29 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.2.22|2|16 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.2.29|2|10 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.3.22|67|4157396408 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.3.29|67|96476129 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.4.22|2|28 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.4.29|2|12 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.5.22|2|25 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.5.29|2|2 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.6.22|4|kept +1.3.6.1.4.1.9.9.171.1.5.3.1.1.6.29|4|kept +1.3.6.1.4.1.9.9.171.1.5.3.1.1.7.22|4|oxen +1.3.6.1.4.1.9.9.171.1.5.3.1.1.7.29|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.6.1.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.2.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.3.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.4.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.5.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.6.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.7.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.8.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.9.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.10.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.11.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.12.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.13.0|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.27|65|1629044510 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.27|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.1.2|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.1.6|2|6 +1.3.6.1.4.1.9.9.324.1.1.1.1.2.2|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.324.1.1.1.1.2.6|4x|6163746564207468656972 +1.3.6.1.4.1.9.9.324.1.1.1.1.3.2|2|5 +1.3.6.1.4.1.9.9.324.1.1.1.1.3.6|2|19 +1.3.6.1.4.1.9.9.324.1.1.1.1.4.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.4.6|2|3 +1.3.6.1.4.1.9.9.324.1.1.1.1.5.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.5.6|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.6.2|2|9 +1.3.6.1.4.1.9.9.324.1.1.1.1.6.6|2|24 +1.3.6.1.4.1.9.9.324.1.1.1.1.7.2|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.7.6|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.8.2|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.8.6|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.9.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.9.6|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.10.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.10.6|2|2 +1.3.6.1.4.1.9.9.324.1.1.2.1.1.7.9|2|9 +1.3.6.1.4.1.9.9.324.1.1.2.1.1.16.29|2|29 +1.3.6.1.4.1.9.9.324.1.1.2.1.2.7.9|2|2 +1.3.6.1.4.1.9.9.324.1.1.2.1.2.16.29|2|1 +1.3.6.1.4.1.9.9.324.1.1.2.1.3.7.9|4|acted +1.3.6.1.4.1.9.9.324.1.1.2.1.3.16.29|4x|7468656972204a61646564 +1.3.6.1.4.1.9.9.324.1.1.2.1.4.7.9|2|20 +1.3.6.1.4.1.9.9.324.1.1.2.1.4.16.29|2|30 +1.3.6.1.4.1.9.9.324.1.1.2.1.5.7.9|66|28786 +1.3.6.1.4.1.9.9.324.1.1.2.1.5.16.29|66|14266 +1.3.6.1.4.1.9.9.324.1.1.2.1.6.7.9|2|20 +1.3.6.1.4.1.9.9.324.1.1.2.1.6.16.29|2|24 +1.3.6.1.4.1.9.9.324.1.1.2.1.7.7.9|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.9.9.324.1.1.2.1.7.16.29|4x|627574206b657074 +1.3.6.1.4.1.9.9.324.1.1.3.1.1.8.25|2|25 +1.3.6.1.4.1.9.9.324.1.1.3.1.1.16.7|2|7 +1.3.6.1.4.1.9.9.324.1.1.3.1.2.8.25|2|12 +1.3.6.1.4.1.9.9.324.1.1.3.1.2.16.7|2|29 +1.3.6.1.4.1.9.9.324.1.1.3.1.3.8.25|2|29 +1.3.6.1.4.1.9.9.324.1.1.3.1.3.16.7|2|30 +1.3.6.1.4.1.9.9.324.1.1.3.1.4.8.25|2|27 +1.3.6.1.4.1.9.9.324.1.1.3.1.4.16.7|2|15 +1.3.6.1.4.1.9.9.324.1.1.3.1.5.8.25|2|2 +1.3.6.1.4.1.9.9.324.1.1.3.1.5.16.7|2|3 +1.3.6.1.4.1.9.9.324.1.1.3.1.6.8.25|4x|616374656420666f727761726420666f72776172642062757420627574206f78656e206f78656e +1.3.6.1.4.1.9.9.324.1.1.3.1.6.16.7|4x|7468656972206163746564 +1.3.6.1.4.1.9.9.324.1.1.3.1.7.8.25|66|196 +1.3.6.1.4.1.9.9.324.1.1.3.1.7.16.7|66|1734 +1.3.6.1.4.1.9.9.324.1.1.3.1.8.8.25|2|2 +1.3.6.1.4.1.9.9.324.1.1.3.1.8.16.7|2|1 +1.3.6.1.4.1.9.9.324.1.1.3.1.9.8.25|2|1 +1.3.6.1.4.1.9.9.324.1.1.3.1.9.16.7|2|2 +1.3.6.1.4.1.9.9.324.1.1.3.1.10.8.25|2|6 +1.3.6.1.4.1.9.9.324.1.1.3.1.10.16.7|2|1 +1.3.6.1.4.1.9.9.324.1.1.4.1.1.9.20|2|20 +1.3.6.1.4.1.9.9.324.1.1.4.1.1.14.6|2|6 +1.3.6.1.4.1.9.9.324.1.1.4.1.2.9.20|2|3 +1.3.6.1.4.1.9.9.324.1.1.4.1.2.14.6|2|1 +1.3.6.1.4.1.9.9.324.1.1.4.1.3.9.20|4x|62757420746865697220717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.9.9.324.1.1.4.1.3.14.6|4x|6f78656e206163746564204a616465642064726976696e67204a61646564207a6f6d6269657320717561696e746c79206f78656e +1.3.6.1.4.1.9.9.324.1.1.4.1.4.9.20|2|1 +1.3.6.1.4.1.9.9.324.1.1.4.1.4.14.6|2|5 +1.3.6.1.4.1.9.9.324.1.1.5.1.1.3.4|2|4 +1.3.6.1.4.1.9.9.324.1.1.5.1.1.3.5|2|5 +1.3.6.1.4.1.9.9.324.1.1.5.1.2.3.4|4x|61637465642064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.324.1.1.5.1.2.3.5|4x|7468656972206f78656e20717561696e746c7920616374656420616374656420666f727761726420717561696e746c79207468656972206b657074 +1.3.6.1.4.1.9.9.324.1.1.5.1.3.3.4|2|3 +1.3.6.1.4.1.9.9.324.1.1.5.1.3.3.5|2|2 +1.3.6.1.4.1.9.9.324.1.1.5.1.4.3.4|4x|64726976696e67204a6164656420627574 +1.3.6.1.4.1.9.9.324.1.1.5.1.4.3.5|4x|717561696e746c79204a6164656420717561696e746c79206f78656e +1.3.6.1.4.1.9.9.324.1.1.5.1.5.3.4|2|4 +1.3.6.1.4.1.9.9.324.1.1.5.1.5.3.5|2|2 +1.3.6.1.4.1.9.9.324.1.1.6.1.1.10.32|66|32 +1.3.6.1.4.1.9.9.324.1.1.6.1.1.19.255|66|255 +1.3.6.1.4.1.9.9.324.1.1.6.1.2.10.32|66|434 +1.3.6.1.4.1.9.9.324.1.1.6.1.2.19.255|66|645 +1.3.6.1.4.1.9.9.324.1.1.6.1.3.10.32|66|324 +1.3.6.1.4.1.9.9.324.1.1.6.1.3.19.255|66|732 +1.3.6.1.4.1.9.9.324.1.1.7.1.1.3|66|32 +1.3.6.1.4.1.9.9.324.1.1.7.1.1.10|66|227 +1.3.6.1.4.1.9.9.324.1.1.7.1.2.3|66|122 +1.3.6.1.4.1.9.9.324.1.1.7.1.2.10|66|232 +1.3.6.1.4.1.9.9.324.1.1.7.1.3.3|66|97 +1.3.6.1.4.1.9.9.324.1.1.7.1.3.10|66|115 +1.3.6.1.4.1.9.9.324.1.1.7.1.4.3|66|110 +1.3.6.1.4.1.9.9.324.1.1.7.1.4.10|66|113 +1.3.6.1.4.1.9.9.324.1.1.7.1.5.3|66|4513 +1.3.6.1.4.1.9.9.324.1.1.7.1.5.10|66|4412 +1.3.6.1.4.1.9.9.324.1.1.7.1.6.3|2|2 +1.3.6.1.4.1.9.9.324.1.1.7.1.6.10|2|1 +1.3.6.1.4.1.9.9.324.1.1.7.1.7.3|66|61 +1.3.6.1.4.1.9.9.324.1.1.7.1.7.10|66|133 +1.3.6.1.4.1.9.9.324.1.1.7.1.8.3|66|102 +1.3.6.1.4.1.9.9.324.1.1.7.1.8.10|66|67 +1.3.6.1.4.1.9.9.324.1.1.7.1.9.3|66|55 +1.3.6.1.4.1.9.9.324.1.1.7.1.9.10|66|35 +1.3.6.1.4.1.9.9.324.1.1.7.1.10.3|66|53760 +1.3.6.1.4.1.9.9.324.1.1.7.1.10.10|66|62525 +1.3.6.1.4.1.9.9.324.1.1.7.1.11.3|2|2 +1.3.6.1.4.1.9.9.324.1.1.7.1.11.10|2|1 +1.3.6.1.4.1.9.9.324.1.1.7.1.12.3|4x|666f727761726420627574207468656972 +1.3.6.1.4.1.9.9.324.1.1.7.1.12.10|4x|627574207a6f6d62696573207a6f6d626965732064726976696e6720666f7277617264207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.324.1.1.7.1.13.3|4x|6f78656e20666f7277617264206163746564206f78656e207468656972206f78656e +1.3.6.1.4.1.9.9.324.1.1.7.1.13.10|4x|6f78656e20666f7277617264 +1.3.6.1.4.1.9.9.324.1.1.7.1.14.3|4x|62757420666f7277617264206163746564207468656972207a6f6d6269657320717561696e746c79206163746564206b657074206b657074 +1.3.6.1.4.1.9.9.324.1.1.7.1.14.10|4x|7a6f6d6269657320616374656420616374656420717561696e746c792062757420616374656420627574206163746564 +1.3.6.1.4.1.9.9.324.1.1.7.1.15.3|4x|666f7277617264206f78656e +1.3.6.1.4.1.9.9.324.1.1.7.1.15.10|4x|4a6164656420666f7277617264206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.324.1.1.7.1.16.3|2|3 +1.3.6.1.4.1.9.9.324.1.1.7.1.16.10|2|1 +1.3.6.1.4.1.9.9.324.1.1.7.1.17.3|2|4 +1.3.6.1.4.1.9.9.324.1.1.7.1.17.10|2|2 +1.3.6.1.4.1.9.9.324.1.1.7.1.18.3|4x|666f727761726420746865697220666f72776172642064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.324.1.1.7.1.18.10|4|Jaded +1.3.6.1.4.1.9.9.324.1.2.1.1.1.18.14|2|14 +1.3.6.1.4.1.9.9.324.1.2.1.1.1.26.14|2|14 +1.3.6.1.4.1.9.9.324.1.2.1.1.2.18.14|66|968784078 +1.3.6.1.4.1.9.9.324.1.2.1.1.2.26.14|66|1598367577 +1.3.6.1.4.1.9.9.324.1.2.1.1.3.18.14|66|2893057786 +1.3.6.1.4.1.9.9.324.1.2.1.1.3.26.14|66|4031602965 +1.3.6.1.4.1.9.9.324.1.2.1.1.4.18.14|66|1154560899 +1.3.6.1.4.1.9.9.324.1.2.1.1.4.26.14|66|2087239256 +1.3.6.1.4.1.9.9.324.1.2.1.1.5.18.14|66|42982 +1.3.6.1.4.1.9.9.324.1.2.1.1.5.26.14|66|52885 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.7|66|9997 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.8|66|15228 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.9|66|4850 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.12|66|8851 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.16|66|30813 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.25|66|24389 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.26|66|36264 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.27|66|4684 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.28|66|16580 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.7|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.8|2|1 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.9|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.12|2|1 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.16|2|3 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.25|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.26|2|3 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.27|2|3 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.28|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.7|67|2938099246 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.8|67|1742326644 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.9|67|222898566 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.12|67|41659817 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.16|67|1663224446 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.25|67|3973111650 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.26|67|736091720 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.27|67|3693310177 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.28|67|1614278838 +1.3.6.1.4.1.9.9.392.1.1.1.0|2|24 +1.3.6.1.4.1.9.9.392.1.1.2.0|2|29 +1.3.6.1.4.1.9.9.392.1.1.3.0|2|5 +1.3.6.1.4.1.9.9.392.1.1.4.0|2|4 +1.3.6.1.4.1.9.9.392.1.2.1.0|66|220179290 +1.3.6.1.4.1.9.9.392.1.3.1.0|66|3080751325 +1.3.6.1.4.1.9.9.392.1.3.2.0|65|1540201027 +1.3.6.1.4.1.9.9.392.1.3.3.0|66|1805302581 +1.3.6.1.4.1.9.9.392.1.3.4.0|66|161784324 +1.3.6.1.4.1.9.9.392.1.3.5.0|70|4672136608535977512 +1.3.6.1.4.1.9.9.392.1.3.6.0|70|2893804194127754033 +1.3.6.1.4.1.9.9.392.1.3.7.0|70|6239211035010594908 +1.3.6.1.4.1.9.9.392.1.3.8.0|70|7265876306749545408 +1.3.6.1.4.1.9.9.392.1.3.9.0|70|192850609352945696 +1.3.6.1.4.1.9.9.392.1.3.10.0|70|17127455384536618658 +1.3.6.1.4.1.9.9.392.1.3.11.0|70|14460697319949409206 +1.3.6.1.4.1.9.9.392.1.3.12.0|70|6617289242687491214 +1.3.6.1.4.1.9.9.392.1.3.21.1.1.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f7277617264204a61646564206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.1.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b6570742074686569722064726976696e67207468656972204a61646564207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.21.1.2.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|7a6f6d62696573207a6f6d62696573204a61646564204a61646564207468656972206f78656e20616374656420746865697220627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.2.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|64726976696e67204a61646564204a61646564207a6f6d62696573207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.3.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|18 +1.3.6.1.4.1.9.9.392.1.3.21.1.3.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|11 +1.3.6.1.4.1.9.9.392.1.3.21.1.4.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|8 +1.3.6.1.4.1.9.9.392.1.3.21.1.4.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|7 +1.3.6.1.4.1.9.9.392.1.3.21.1.5.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.5.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|5 +1.3.6.1.4.1.9.9.392.1.3.21.1.6.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|65|1067898008 +1.3.6.1.4.1.9.9.392.1.3.21.1.6.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|65|2164050177 +1.3.6.1.4.1.9.9.392.1.3.21.1.7.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.7.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.8.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|64726976696e6720717561696e746c79206b657074207468656972204a61646564204a61646564206f78656e207468656972206f78656e +1.3.6.1.4.1.9.9.392.1.3.21.1.8.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4|Jaded +1.3.6.1.4.1.9.9.392.1.3.21.1.9.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.9.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.10.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|717561696e746c79207a6f6d62696573204a61646564204a6164656420746865697220627574206b657074 +1.3.6.1.4.1.9.9.392.1.3.21.1.10.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b657074206f78656e20717561696e746c792064726976696e6720717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.21.1.11.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|7 +1.3.6.1.4.1.9.9.392.1.3.21.1.11.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.12.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|6|1.3.6.1.3.208.49 +1.3.6.1.4.1.9.9.392.1.3.21.1.12.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|6|1.3.6.1.3.0.25.27 +1.3.6.1.4.1.9.9.392.1.3.21.1.13.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|8 +1.3.6.1.4.1.9.9.392.1.3.21.1.13.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.14.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.14.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.15.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.15.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.16.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|66|24991 +1.3.6.1.4.1.9.9.392.1.3.21.1.16.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|66|19923 +1.3.6.1.4.1.9.9.392.1.3.21.1.17.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|746865697220717561696e746c7920616374656420717561696e746c79206b65707420616374656420717561696e746c792064726976696e67206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.17.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|62757420627574206f78656e206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.18.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|717561696e746c79206163746564207468656972 +1.3.6.1.4.1.9.9.392.1.3.21.1.18.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b6570742061637465642064726976696e67206275742064726976696e67206b65707420666f7277617264 +1.3.6.1.4.1.9.9.392.1.3.21.1.19.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f727761726420746865697220666f7277617264206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.19.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6f78656e20666f727761726420717561696e746c79206163746564206b657074206f78656e +1.3.6.1.4.1.9.9.392.1.3.21.1.20.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|7a6f6d62696573206163746564206f78656e +1.3.6.1.4.1.9.9.392.1.3.21.1.20.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|666f72776172642061637465642064726976696e6720627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.21.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|16 +1.3.6.1.4.1.9.9.392.1.3.21.1.21.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|4 +1.3.6.1.4.1.9.9.392.1.3.21.1.22.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f727761726420666f7277617264207a6f6d62696573207a6f6d62696573207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.22.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b6570742064726976696e67207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.392.1.3.21.1.23.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|0 +1.3.6.1.4.1.9.9.392.1.3.21.1.23.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.24.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|4a6164656420717561696e746c79 +1.3.6.1.4.1.9.9.392.1.3.21.1.24.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|4a61646564207468656972206f78656e20616374656420616374656420666f727761726420746865697220666f7277617264 +1.3.6.1.4.1.9.9.392.1.3.21.1.25.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.25.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|16 +1.3.6.1.4.1.9.9.392.1.3.21.1.26.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f7277617264206b657074206f78656e206f78656e206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.26.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|616374656420717561696e746c7920627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.27.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|16 +1.3.6.1.4.1.9.9.392.1.3.21.1.27.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|4 +1.3.6.1.4.1.9.9.392.1.3.21.1.28.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|64726976696e67207468656972207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.21.1.28.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|62757420627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.29.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|0 +1.3.6.1.4.1.9.9.392.1.3.21.1.29.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.30.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|717561696e746c79206b657074 +1.3.6.1.4.1.9.9.392.1.3.21.1.30.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|746865697220717561696e746c7920717561696e746c7920616374656420717561696e746c7920717561696e746c79206163746564207a6f6d6269657320627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.31.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|4442691408326093793 +1.3.6.1.4.1.9.9.392.1.3.21.1.31.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|1873321696187597909 +1.3.6.1.4.1.9.9.392.1.3.21.1.32.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|6469637372671445412 +1.3.6.1.4.1.9.9.392.1.3.21.1.32.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|6712781232926100858 +1.3.6.1.4.1.9.9.392.1.3.21.1.33.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|13490210027652370573 +1.3.6.1.4.1.9.9.392.1.3.21.1.33.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|15555989303984511978 +1.3.6.1.4.1.9.9.392.1.3.21.1.34.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|12279646205639820727 +1.3.6.1.4.1.9.9.392.1.3.21.1.34.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|11056409441366507351 +1.3.6.1.4.1.9.9.392.1.3.21.1.35.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|13180762840652524543 +1.3.6.1.4.1.9.9.392.1.3.21.1.35.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|13958065058835407351 +1.3.6.1.4.1.9.9.392.1.3.21.1.36.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|3745449795705425282 +1.3.6.1.4.1.9.9.392.1.3.21.1.36.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|15681610043458202824 +1.3.6.1.4.1.9.9.392.1.3.21.1.37.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.37.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|1 +1.3.6.1.4.1.9.9.392.1.3.22.1.1.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|4x|616374656420666f7277617264207a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.4.1.9.9.392.1.3.22.1.1.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|4x|7468656972207468656972206b6570742062757420616374656420627574206275742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.22.1.2.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|2 +1.3.6.1.4.1.9.9.392.1.3.22.1.2.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|2|21 +1.3.6.1.4.1.9.9.392.1.3.22.1.3.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|338143677832082857 +1.3.6.1.4.1.9.9.392.1.3.22.1.3.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|2540809463851896468 +1.3.6.1.4.1.9.9.392.1.3.22.1.4.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|9211169575499894801 +1.3.6.1.4.1.9.9.392.1.3.22.1.4.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|5889125074864305265 +1.3.6.1.4.1.9.9.392.1.3.22.1.5.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|15329032065323570335 +1.3.6.1.4.1.9.9.392.1.3.22.1.5.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|11848822181082996062 +1.3.6.1.4.1.9.9.392.1.3.22.1.6.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|9393682061551994449 +1.3.6.1.4.1.9.9.392.1.3.22.1.6.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|14553503058612069516 +1.3.6.1.4.1.9.9.392.1.3.22.1.7.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|5657946358853111387 +1.3.6.1.4.1.9.9.392.1.3.22.1.7.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|132504407579425476 +1.3.6.1.4.1.9.9.392.1.3.22.1.8.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|14359838585433121302 +1.3.6.1.4.1.9.9.392.1.3.22.1.8.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|16427745788021119202 +1.3.6.1.4.1.9.9.392.1.3.23.0|66|3912948724 +1.3.6.1.4.1.9.9.392.1.3.24.0|65|3793567672 +1.3.6.1.4.1.9.9.392.1.3.25.0|66|24567 +1.3.6.1.4.1.9.9.392.1.3.26.0|66|4157346489 +1.3.6.1.4.1.9.9.392.1.3.27.0|65|566439668 +1.3.6.1.4.1.9.9.392.1.3.28.0|66|2035 +1.3.6.1.4.1.9.9.392.1.3.29.0|66|899294235 +1.3.6.1.4.1.9.9.392.1.3.30.0|65|2870170921 +1.3.6.1.4.1.9.9.392.1.3.31.0|66|47972 +1.3.6.1.4.1.9.9.392.1.3.32.0|66|1402819470 +1.3.6.1.4.1.9.9.392.1.3.33.0|65|552584163 +1.3.6.1.4.1.9.9.392.1.3.34.0|66|54192 +1.3.6.1.4.1.9.9.392.1.3.35.0|66|4109252783 +1.3.6.1.4.1.9.9.392.1.3.36.0|65|3375288981 +1.3.6.1.4.1.9.9.392.1.3.37.0|66|60584 +1.3.6.1.4.1.9.9.392.1.3.38.0|66|2342846144 +1.3.6.1.4.1.9.9.392.1.3.39.0|65|2612706951 +1.3.6.1.4.1.9.9.392.1.3.40.0|66|27723 +1.3.6.1.4.1.9.9.392.1.4.1.1.0|70|18308256571427912229 +1.3.6.1.4.1.9.9.392.1.4.1.2.0|66|12797 +1.3.6.1.4.1.9.9.392.1.4.1.3.0|70|18072880834846251558 +1.3.6.1.4.1.9.9.392.1.4.1.4.0|70|8998085897560354675 +1.3.6.1.4.1.9.9.392.1.4.2.1.0|66|19062 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.1.26|66|26 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.1.6794|66|6794 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.2.26|4x|717561696e746c7920666f7277617264206b657074207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.2.6794|4x|7a6f6d62696573206f78656e204a61646564204a616465642074686569722062757420666f7277617264206b657074204a61646564 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.3.26|4x|62757420666f7277617264204a61646564206275742064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.3.6794|4|Jaded +1.3.6.1.4.1.9.9.392.1.4.3.1.1.4.26|2|2 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.4.6794|2|1 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.5.26|2|3 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.5.6794|2|5 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.6.26|67|2717938161 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.6.6794|67|1576292881 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.7.26|2|20 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.7.6794|2|7 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.8.26|2|0 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.8.6794|2|1 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.9.26|4x|6b6570742064726976696e672064726976696e67207a6f6d62696573206b657074206b657074204a61646564 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.9.6794|4x|7a6f6d62696573207a6f6d6269657320627574207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.10.26|2|0 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.10.6794|2|0 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.11.26|4x|64726976696e67206163746564 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.11.6794|4x|64726976696e67206b65707420746865697220746865697220666f7277617264 +1.3.6.1.4.1.9.9.392.1.4.3.2.0|66|19587 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.1.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|4x|7a6f6d62696573207a6f6d62696573207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.1.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|4x|62757420717561696e746c7920746865697220666f727761726420717561696e746c7920666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.2.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|7705169462584045514 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.2.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|4782105877718188020 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.3.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|1208657904808146249 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.3.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|6135263682934130631 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.4.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|3212491034507665689 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.4.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|4669944071782599429 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.5.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|15487989910931679686 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.5.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|16491208374579900638 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.6.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|14990721728316737493 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.6.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|17568880258347646976 +1.3.6.1.4.1.9.9.392.1.5.1.1.0|70|16763036102461238324 +1.3.6.1.4.1.9.9.392.1.6.1.0|2|30 +1.3.6.1.4.1.9.9.392.1.6.2.0|66|10901 +1.3.6.1.4.1.9.9.392.1.6.3.0|2|3 +1.3.6.1.4.1.9.9.392.1.7.1.0|2|1 +1.3.6.1.4.1.9.9.392.1.7.2.0|2|1 +1.3.6.1.4.1.9.9.392.1.7.3.0|2|1 +1.3.6.1.4.1.9.9.500.1.2.1.1.1.21|66|23989 +1.3.6.1.4.1.9.9.500.1.2.1.1.2.21|66|64612 +1.3.6.1.4.1.9.9.500.1.2.1.1.3.21|2|4 +1.3.6.1.4.1.9.9.500.1.2.1.1.4.21|66|33053 +1.3.6.1.4.1.9.9.500.1.2.1.1.5.21|66|55695 +1.3.6.1.4.1.9.9.500.1.2.1.1.6.21|2|8 +1.3.6.1.4.1.9.9.500.1.2.1.1.7.21|4x|ffffffffffff +1.3.6.1.4.1.9.9.500.1.2.2.1.1.7|2|3 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.213.175.39.60.38.62.82.247.189 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.166.109.172.24.90.149 +1.3.6.1.6.3.1.1.6.1.0|2|3 +1.3.6.1.6.3.10.2.1.1.0|4x|6f78656e20717561696e746c79 +1.3.6.1.6.3.10.2.1.1.0|4x|64726976696e67206f78656e204a6164656420717561696e746c79 +1.3.6.1.6.3.10.2.1.2.0|2|12 +1.3.6.1.6.3.10.2.1.2.0|2|24 +1.3.6.1.6.3.10.2.1.3.0|2|4 +1.3.6.1.6.3.10.2.1.3.0|2|28 +1.3.6.1.6.3.10.2.1.4.0|2|567 +1.3.6.1.6.3.10.2.1.4.0|2|763 \ No newline at end of file diff --git a/test/new-e2e/ndm/snmp/compose/data/cisco-asa.snmprec b/test/new-e2e/ndm/snmp/compose/data/cisco-asa.snmprec new file mode 100644 index 0000000000000..f052f153933a7 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/cisco-asa.snmprec @@ -0,0 +1,1478 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.1.669 +1.3.6.1.2.1.1.3.0|67|1727368662 +1.3.6.1.2.1.1.5.0|4|kept +1.3.6.1.2.1.2.2.1.1.11|2|11 +1.3.6.1.2.1.2.2.1.2.11|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.3.11|2|29 +1.3.6.1.2.1.2.2.1.4.11|2|10 +1.3.6.1.2.1.2.2.1.5.11|66|842689539 +1.3.6.1.2.1.2.2.1.6.11|4x|00 +1.3.6.1.2.1.2.2.1.7.11|2|2 +1.3.6.1.2.1.2.2.1.8.11|2|7 +1.3.6.1.2.1.2.2.1.9.11|67|4043941980 +1.3.6.1.2.1.2.2.1.10.11|65|2268799121 +1.3.6.1.2.1.2.2.1.11.11|65|1358081555 +1.3.6.1.2.1.2.2.1.12.11|65|2804916297 +1.3.6.1.2.1.2.2.1.13.11|65|1953269825 +1.3.6.1.2.1.2.2.1.14.11|65|3659465164 +1.3.6.1.2.1.2.2.1.15.11|65|3028473442 +1.3.6.1.2.1.2.2.1.16.11|65|2204618213 +1.3.6.1.2.1.2.2.1.17.11|65|3659357157 +1.3.6.1.2.1.2.2.1.18.11|65|1946069301 +1.3.6.1.2.1.2.2.1.19.11|65|1976763204 +1.3.6.1.2.1.2.2.1.20.11|65|1287028500 +1.3.6.1.2.1.2.2.1.21.11|66|3693484051 +1.3.6.1.2.1.6.5.0|65|2858992486 +1.3.6.1.2.1.6.6.0|65|4156312381 +1.3.6.1.2.1.6.7.0|65|2022233107 +1.3.6.1.2.1.6.8.0|65|2434846008 +1.3.6.1.2.1.6.9.0|66|3859114747 +1.3.6.1.2.1.6.10.0|65|443704958 +1.3.6.1.2.1.6.11.0|65|761536386 +1.3.6.1.2.1.6.12.0|65|3742055603 +1.3.6.1.2.1.6.13.1.1.23.177.97.199.10.151.211.52.249.28|2|12 +1.3.6.1.2.1.6.13.1.1.113.156.27.12.6.103.49.217.167.25|2|8 +1.3.6.1.2.1.6.13.1.1.122.61.54.190.29.172.169.37.170.22|2|5 +1.3.6.1.2.1.6.13.1.1.148.215.184.93.3.18.135.204.247.11|2|9 +1.3.6.1.2.1.6.13.1.1.192.71.88.207.22.184.150.214.61.14|2|12 +1.3.6.1.2.1.6.13.1.1.215.10.127.204.23.126.210.252.1.27|2|7 +1.3.6.1.2.1.6.13.1.1.223.16.55.201.31.104.212.252.181.5|2|9 +1.3.6.1.2.1.6.13.1.1.223.54.125.172.16.159.226.236.17.1|2|5 +1.3.6.1.2.1.6.13.1.1.227.50.96.2.2.215.88.85.244.22|2|3 +1.3.6.1.2.1.6.13.1.1.254.4.140.40.29.214.201.146.122.0|2|1 +1.3.6.1.2.1.6.13.1.2.23.177.97.199.10.151.211.52.249.28|64x|17b161c7 +1.3.6.1.2.1.6.13.1.2.113.156.27.12.6.103.49.217.167.25|64x|719c1b0c +1.3.6.1.2.1.6.13.1.2.122.61.54.190.29.172.169.37.170.22|64x|7a3d36be +1.3.6.1.2.1.6.13.1.2.148.215.184.93.3.18.135.204.247.11|64x|94d7b85d +1.3.6.1.2.1.6.13.1.2.192.71.88.207.22.184.150.214.61.14|64x|c04758cf +1.3.6.1.2.1.6.13.1.2.215.10.127.204.23.126.210.252.1.27|64x|d70a7fcc +1.3.6.1.2.1.6.13.1.2.223.16.55.201.31.104.212.252.181.5|64x|df1037c9 +1.3.6.1.2.1.6.13.1.2.223.54.125.172.16.159.226.236.17.1|64x|df367dac +1.3.6.1.2.1.6.13.1.2.227.50.96.2.2.215.88.85.244.22|64x|e3326002 +1.3.6.1.2.1.6.13.1.2.254.4.140.40.29.214.201.146.122.0|64x|fe048c28 +1.3.6.1.2.1.6.13.1.3.23.177.97.199.10.151.211.52.249.28|2|10 +1.3.6.1.2.1.6.13.1.3.113.156.27.12.6.103.49.217.167.25|2|6 +1.3.6.1.2.1.6.13.1.3.122.61.54.190.29.172.169.37.170.22|2|29 +1.3.6.1.2.1.6.13.1.3.148.215.184.93.3.18.135.204.247.11|2|3 +1.3.6.1.2.1.6.13.1.3.192.71.88.207.22.184.150.214.61.14|2|22 +1.3.6.1.2.1.6.13.1.3.215.10.127.204.23.126.210.252.1.27|2|23 +1.3.6.1.2.1.6.13.1.3.223.16.55.201.31.104.212.252.181.5|2|31 +1.3.6.1.2.1.6.13.1.3.223.54.125.172.16.159.226.236.17.1|2|16 +1.3.6.1.2.1.6.13.1.3.227.50.96.2.2.215.88.85.244.22|2|2 +1.3.6.1.2.1.6.13.1.3.254.4.140.40.29.214.201.146.122.0|2|29 +1.3.6.1.2.1.6.13.1.4.23.177.97.199.10.151.211.52.249.28|64x|97d334f9 +1.3.6.1.2.1.6.13.1.4.113.156.27.12.6.103.49.217.167.25|64x|6731d9a7 +1.3.6.1.2.1.6.13.1.4.122.61.54.190.29.172.169.37.170.22|64x|aca925aa +1.3.6.1.2.1.6.13.1.4.148.215.184.93.3.18.135.204.247.11|64x|1287ccf7 +1.3.6.1.2.1.6.13.1.4.192.71.88.207.22.184.150.214.61.14|64x|b896d63d +1.3.6.1.2.1.6.13.1.4.215.10.127.204.23.126.210.252.1.27|64x|7ed2fc01 +1.3.6.1.2.1.6.13.1.4.223.16.55.201.31.104.212.252.181.5|64x|68d4fcb5 +1.3.6.1.2.1.6.13.1.4.223.54.125.172.16.159.226.236.17.1|64x|9fe2ec11 +1.3.6.1.2.1.6.13.1.4.227.50.96.2.2.215.88.85.244.22|64x|d75855f4 +1.3.6.1.2.1.6.13.1.4.254.4.140.40.29.214.201.146.122.0|64x|d6c9927a +1.3.6.1.2.1.6.13.1.5.23.177.97.199.10.151.211.52.249.28|2|28 +1.3.6.1.2.1.6.13.1.5.113.156.27.12.6.103.49.217.167.25|2|25 +1.3.6.1.2.1.6.13.1.5.122.61.54.190.29.172.169.37.170.22|2|22 +1.3.6.1.2.1.6.13.1.5.148.215.184.93.3.18.135.204.247.11|2|11 +1.3.6.1.2.1.6.13.1.5.192.71.88.207.22.184.150.214.61.14|2|14 +1.3.6.1.2.1.6.13.1.5.215.10.127.204.23.126.210.252.1.27|2|27 +1.3.6.1.2.1.6.13.1.5.223.16.55.201.31.104.212.252.181.5|2|5 +1.3.6.1.2.1.6.13.1.5.223.54.125.172.16.159.226.236.17.1|2|1 +1.3.6.1.2.1.6.13.1.5.227.50.96.2.2.215.88.85.244.22|2|22 +1.3.6.1.2.1.6.13.1.5.254.4.140.40.29.214.201.146.122.0|2|0 +1.3.6.1.2.1.6.14.0|65|2935824574 +1.3.6.1.2.1.6.15.0|65|1544900307 +1.3.6.1.2.1.6.17.0|70|16581522528925471079 +1.3.6.1.2.1.6.18.0|70|3369991573516953990 +1.3.6.1.2.1.7.2.0|65|3998586035 +1.3.6.1.2.1.7.3.0|65|3549343151 +1.3.6.1.2.1.7.4.0|65|2404484755 +1.3.6.1.2.1.7.5.1.1.2.141.239.85.23|64x|028def55 +1.3.6.1.2.1.7.5.1.1.20.60.66.67.23|64x|143c4243 +1.3.6.1.2.1.7.5.1.1.42.145.113.188.16|64x|2a9171bc +1.3.6.1.2.1.7.5.1.1.78.118.31.86.2|64x|4e761f56 +1.3.6.1.2.1.7.5.1.1.85.153.183.119.31|64x|5599b777 +1.3.6.1.2.1.7.5.1.1.87.237.140.144.26|64x|57ed8c90 +1.3.6.1.2.1.7.5.1.1.145.214.51.243.3|64x|91d633f3 +1.3.6.1.2.1.7.5.1.1.169.8.79.103.26|64x|a9084f67 +1.3.6.1.2.1.7.5.1.1.172.6.61.73.19|64x|ac063d49 +1.3.6.1.2.1.7.5.1.1.209.91.67.71.4|64x|d15b4347 +1.3.6.1.2.1.7.5.1.2.2.141.239.85.23|2|23 +1.3.6.1.2.1.7.5.1.2.20.60.66.67.23|2|23 +1.3.6.1.2.1.7.5.1.2.42.145.113.188.16|2|16 +1.3.6.1.2.1.7.5.1.2.78.118.31.86.2|2|2 +1.3.6.1.2.1.7.5.1.2.85.153.183.119.31|2|31 +1.3.6.1.2.1.7.5.1.2.87.237.140.144.26|2|26 +1.3.6.1.2.1.7.5.1.2.145.214.51.243.3|2|3 +1.3.6.1.2.1.7.5.1.2.169.8.79.103.26|2|26 +1.3.6.1.2.1.7.5.1.2.172.6.61.73.19|2|19 +1.3.6.1.2.1.7.5.1.2.209.91.67.71.4|2|4 +1.3.6.1.2.1.7.7.1.1.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|2|0 +1.3.6.1.2.1.7.7.1.1.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|2|0 +1.3.6.1.2.1.7.7.1.1.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|2|1 +1.3.6.1.2.1.7.7.1.1.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|2|2 +1.3.6.1.2.1.7.7.1.1.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|2|2 +1.3.6.1.2.1.7.7.1.1.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|2|2 +1.3.6.1.2.1.7.7.1.1.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|2|2 +1.3.6.1.2.1.7.7.1.1.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|2|3 +1.3.6.1.2.1.7.7.1.1.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|2|4 +1.3.6.1.2.1.7.7.1.1.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|2|4 +1.3.6.1.2.1.7.7.1.2.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|4|their +1.3.6.1.2.1.7.7.1.2.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|4x|4a61646564206b65707420627574206b657074 +1.3.6.1.2.1.7.7.1.2.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|4x|717561696e746c79206b6570742064726976696e67206b6570742074686569722062757420717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|4x|746865697220666f7277617264204a61646564 +1.3.6.1.2.1.7.7.1.2.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|4x|627574206163746564206b65707420627574206f78656e207468656972 +1.3.6.1.2.1.7.7.1.2.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|4x|666f727761726420666f727761726420717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|4x|64726976696e67207468656972206b657074206163746564204a61646564207a6f6d62696573206163746564206b657074 +1.3.6.1.2.1.7.7.1.2.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|4x|717561696e746c79207a6f6d626965732062757420627574206b657074 +1.3.6.1.2.1.7.7.1.2.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|4x|4a61646564204a6164656420717561696e746c79206f78656e206f78656e204a6164656420627574206163746564 +1.3.6.1.2.1.7.7.1.2.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|4x|717561696e746c7920666f727761726420627574207a6f6d626965732064726976696e67204a61646564207a6f6d62696573 +1.3.6.1.2.1.7.7.1.3.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|59995 +1.3.6.1.2.1.7.7.1.3.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|13615 +1.3.6.1.2.1.7.7.1.3.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|17513 +1.3.6.1.2.1.7.7.1.3.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|2480 +1.3.6.1.2.1.7.7.1.3.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|37036 +1.3.6.1.2.1.7.7.1.3.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|20490 +1.3.6.1.2.1.7.7.1.3.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|30354 +1.3.6.1.2.1.7.7.1.3.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|6240 +1.3.6.1.2.1.7.7.1.3.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|29265 +1.3.6.1.2.1.7.7.1.3.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|27397 +1.3.6.1.2.1.7.7.1.4.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|2|0 +1.3.6.1.2.1.7.7.1.4.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|2|2 +1.3.6.1.2.1.7.7.1.4.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|2|16 +1.3.6.1.2.1.7.7.1.4.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|2|0 +1.3.6.1.2.1.7.7.1.4.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|2|3 +1.3.6.1.2.1.7.7.1.4.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|2|16 +1.3.6.1.2.1.7.7.1.4.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|2|3 +1.3.6.1.2.1.7.7.1.4.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|2|4 +1.3.6.1.2.1.7.7.1.4.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|2|1 +1.3.6.1.2.1.7.7.1.4.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|2|3 +1.3.6.1.2.1.7.7.1.5.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|4x|6163746564207a6f6d62696573207468656972204a61646564206b657074 +1.3.6.1.2.1.7.7.1.5.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|4x|7a6f6d62696573207a6f6d62696573206b65707420666f7277617264206b657074206b657074204a6164656420627574207468656972 +1.3.6.1.2.1.7.7.1.5.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|4x|666f7277617264206f78656e204a61646564 +1.3.6.1.2.1.7.7.1.5.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|4x|4a616465642064726976696e6720616374656420616374656420627574204a61646564207a6f6d62696573 +1.3.6.1.2.1.7.7.1.5.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|4x|64726976696e67206f78656e206b65707420717561696e746c79207468656972207a6f6d62696573207a6f6d62696573 +1.3.6.1.2.1.7.7.1.5.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|4x|717561696e746c79206163746564 +1.3.6.1.2.1.7.7.1.5.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|4x|6275742074686569722062757420717561696e746c79206b657074 +1.3.6.1.2.1.7.7.1.5.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|4|their +1.3.6.1.2.1.7.7.1.5.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|4x|7a6f6d626965732074686569722064726976696e672062757420717561696e746c79207a6f6d626965732074686569722064726976696e67207468656972 +1.3.6.1.2.1.7.7.1.5.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|4x|62757420666f7277617264 +1.3.6.1.2.1.7.7.1.6.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|55726 +1.3.6.1.2.1.7.7.1.6.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|28531 +1.3.6.1.2.1.7.7.1.6.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|11079 +1.3.6.1.2.1.7.7.1.6.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|36798 +1.3.6.1.2.1.7.7.1.6.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|16811 +1.3.6.1.2.1.7.7.1.6.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|48634 +1.3.6.1.2.1.7.7.1.6.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|47173 +1.3.6.1.2.1.7.7.1.6.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|64624 +1.3.6.1.2.1.7.7.1.6.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|50219 +1.3.6.1.2.1.7.7.1.6.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|29145 +1.3.6.1.2.1.7.7.1.7.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|774 +1.3.6.1.2.1.7.7.1.7.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|32766 +1.3.6.1.2.1.7.7.1.7.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|42521 +1.3.6.1.2.1.7.7.1.7.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|62779 +1.3.6.1.2.1.7.7.1.7.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|47504 +1.3.6.1.2.1.7.7.1.7.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|55881 +1.3.6.1.2.1.7.7.1.7.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|30456 +1.3.6.1.2.1.7.7.1.7.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|29068 +1.3.6.1.2.1.7.7.1.7.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|30734 +1.3.6.1.2.1.7.7.1.7.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|33093 +1.3.6.1.2.1.7.7.1.8.0.5.116.104.101.105.114.59995.0.30.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.55726.774|66|22659 +1.3.6.1.2.1.7.7.1.8.0.19.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.13615.2.54.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.107.101.112.116.32.102.111.114.119.97.114.100.32.107.101.112.116.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.116.104.101.105.114.28531.32766|66|19353 +1.3.6.1.2.1.7.7.1.8.1.53.113.117.97.105.110.116.108.121.32.107.101.112.116.32.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.17513.16.18.102.111.114.119.97.114.100.32.111.120.101.110.32.74.97.100.101.100.11079.42521|66|61976 +1.3.6.1.2.1.7.7.1.8.2.19.116.104.101.105.114.32.102.111.114.119.97.114.100.32.74.97.100.101.100.2480.0.43.74.97.100.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.97.99.116.101.100.32.98.117.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.36798.62779|66|61206 +1.3.6.1.2.1.7.7.1.8.2.29.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.37036.3.48.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.16811.47504|66|14129 +1.3.6.1.2.1.7.7.1.8.2.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.20490.16.14.113.117.97.105.110.116.108.121.32.97.99.116.101.100.48634.55881|66|59181 +1.3.6.1.2.1.7.7.1.8.2.49.100.114.105.118.105.110.103.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.30354.3.27.98.117.116.32.116.104.101.105.114.32.98.117.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.47173.30456|66|15936 +1.3.6.1.2.1.7.7.1.8.3.29.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.32.107.101.112.116.6240.4.5.116.104.101.105.114.64624.29068|66|5023 +1.3.6.1.2.1.7.7.1.8.4.46.74.97.100.101.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.97.99.116.101.100.29265.1.62.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.50219.30734|66|22219 +1.3.6.1.2.1.7.7.1.8.4.50.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.98.117.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.27397.3.11.98.117.116.32.102.111.114.119.97.114.100.29145.33093|66|45286 +1.3.6.1.2.1.7.8.0|70|6116206687099577350 +1.3.6.1.2.1.7.9.0|70|60548728080473664 +1.3.6.1.2.1.31.1.1.1.1.11|4x|65746830 +1.3.6.1.2.1.31.1.1.1.2.11|65|3971642957 +1.3.6.1.2.1.31.1.1.1.3.11|65|3271801795 +1.3.6.1.2.1.31.1.1.1.4.11|65|3342364789 +1.3.6.1.2.1.31.1.1.1.5.11|65|3388467146 +1.3.6.1.2.1.31.1.1.1.6.11|70|14670660891743438939 +1.3.6.1.2.1.31.1.1.1.7.11|70|10886984631120028416 +1.3.6.1.2.1.31.1.1.1.8.11|70|17994136813414766052 +1.3.6.1.2.1.31.1.1.1.9.11|70|10439183159610289289 +1.3.6.1.2.1.31.1.1.1.10.11|70|2583386891169315520 +1.3.6.1.2.1.31.1.1.1.11.11|70|8885889412380302445 +1.3.6.1.2.1.31.1.1.1.12.11|70|10885548970511406028 +1.3.6.1.2.1.31.1.1.1.13.11|70|10028224865574503284 +1.3.6.1.2.1.31.1.1.1.15.11|66|31298329 +1.3.6.1.2.1.99.1.1.1.1.31|2|9 +1.3.6.1.2.1.99.1.1.1.2.31|2|3 +1.3.6.1.2.1.99.1.1.1.3.31|2|6 +1.3.6.1.2.1.99.1.1.1.4.31|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.1.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.1.6|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.1.8|2|8 +1.3.6.1.4.1.9.9.13.1.3.1.1.11|2|11 +1.3.6.1.4.1.9.9.13.1.3.1.1.13|2|13 +1.3.6.1.4.1.9.9.13.1.3.1.1.14|2|14 +1.3.6.1.4.1.9.9.13.1.3.1.1.20|2|20 +1.3.6.1.4.1.9.9.13.1.3.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.3.1.1.31|2|31 +1.3.6.1.4.1.9.9.13.1.3.1.2.3|4x|7468656972207a6f6d62696573207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.9.9.13.1.3.1.2.6|4x|64726976696e672064726976696e67206b657074206163746564 +1.3.6.1.4.1.9.9.13.1.3.1.2.8|4x|7a6f6d626965732062757420717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.2.11|4x|61637465642064726976696e67204a61646564206163746564 +1.3.6.1.4.1.9.9.13.1.3.1.2.13|4x|7a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.2.14|4|oxen +1.3.6.1.4.1.9.9.13.1.3.1.2.20|4x|6b657074206f78656e +1.3.6.1.4.1.9.9.13.1.3.1.2.21|4x|627574204a61646564207468656972 +1.3.6.1.4.1.9.9.13.1.3.1.2.31|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.3.3|66|3930379735 +1.3.6.1.4.1.9.9.13.1.3.1.3.6|66|2258658671 +1.3.6.1.4.1.9.9.13.1.3.1.3.8|66|3213289584 +1.3.6.1.4.1.9.9.13.1.3.1.3.11|66|978410705 +1.3.6.1.4.1.9.9.13.1.3.1.3.13|66|2328456073 +1.3.6.1.4.1.9.9.13.1.3.1.3.14|66|952183581 +1.3.6.1.4.1.9.9.13.1.3.1.3.20|66|2877883263 +1.3.6.1.4.1.9.9.13.1.3.1.3.21|66|3953080519 +1.3.6.1.4.1.9.9.13.1.3.1.3.31|66|414726588 +1.3.6.1.4.1.9.9.13.1.3.1.4.3|2|9 +1.3.6.1.4.1.9.9.13.1.3.1.4.6|2|17 +1.3.6.1.4.1.9.9.13.1.3.1.4.8|2|1 +1.3.6.1.4.1.9.9.13.1.3.1.4.11|2|29 +1.3.6.1.4.1.9.9.13.1.3.1.4.13|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.4.14|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.4.20|2|23 +1.3.6.1.4.1.9.9.13.1.3.1.4.21|2|13 +1.3.6.1.4.1.9.9.13.1.3.1.4.31|2|5 +1.3.6.1.4.1.9.9.13.1.3.1.5.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.5.6|2|7 +1.3.6.1.4.1.9.9.13.1.3.1.5.8|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.5.11|2|26 +1.3.6.1.4.1.9.9.13.1.3.1.5.13|2|30 +1.3.6.1.4.1.9.9.13.1.3.1.5.14|2|9 +1.3.6.1.4.1.9.9.13.1.3.1.5.20|2|17 +1.3.6.1.4.1.9.9.13.1.3.1.5.21|2|21 +1.3.6.1.4.1.9.9.13.1.3.1.5.31|2|28 +1.3.6.1.4.1.9.9.13.1.3.1.6.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.6.6|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.8|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.11|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.13|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.6.14|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.20|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.21|2|4 +1.3.6.1.4.1.9.9.13.1.3.1.6.31|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.1.4|2|4 +1.3.6.1.4.1.9.9.13.1.4.1.1.6|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.1.7|2|7 +1.3.6.1.4.1.9.9.13.1.4.1.1.16|2|16 +1.3.6.1.4.1.9.9.13.1.4.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.4.1.1.22|2|22 +1.3.6.1.4.1.9.9.13.1.4.1.1.25|2|25 +1.3.6.1.4.1.9.9.13.1.4.1.1.27|2|27 +1.3.6.1.4.1.9.9.13.1.4.1.1.30|2|30 +1.3.6.1.4.1.9.9.13.1.4.1.2.4|4|fan_1 +1.3.6.1.4.1.9.9.13.1.4.1.2.6|4|fan_2 +1.3.6.1.4.1.9.9.13.1.4.1.2.7|4|fan_3 +1.3.6.1.4.1.9.9.13.1.4.1.2.16|4|fan_4 +1.3.6.1.4.1.9.9.13.1.4.1.2.22|4|fan_5 +1.3.6.1.4.1.9.9.13.1.4.1.2.25|4|fan_6 +1.3.6.1.4.1.9.9.13.1.4.1.2.27|4|fan_7 +1.3.6.1.4.1.9.9.13.1.4.1.2.30|4|fan_8 +1.3.6.1.4.1.9.9.13.1.4.1.3.4|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.6|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.3.7|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.16|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.21|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.22|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.3.25|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.27|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.30|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.1.0|2|0 +1.3.6.1.4.1.9.9.13.1.5.1.1.5|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.1.16|2|16 +1.3.6.1.4.1.9.9.13.1.5.1.1.20|2|20 +1.3.6.1.4.1.9.9.13.1.5.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.5.1.1.22|2|22 +1.3.6.1.4.1.9.9.13.1.5.1.1.25|2|25 +1.3.6.1.4.1.9.9.13.1.5.1.1.26|2|26 +1.3.6.1.4.1.9.9.13.1.5.1.1.29|2|29 +1.3.6.1.4.1.9.9.13.1.5.1.1.31|2|31 +1.3.6.1.4.1.9.9.13.1.5.1.2.0|4x|666f7277617264206f78656e206163746564 +1.3.6.1.4.1.9.9.13.1.5.1.2.5|4|Jaded +1.3.6.1.4.1.9.9.13.1.5.1.2.16|4x|62757420717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.9.9.13.1.5.1.2.20|4|quaintly +1.3.6.1.4.1.9.9.13.1.5.1.2.21|4x|64726976696e6720717561696e746c7920616374656420627574207468656972 +1.3.6.1.4.1.9.9.13.1.5.1.2.22|4x|62757420627574 +1.3.6.1.4.1.9.9.13.1.5.1.2.25|4x|6163746564206b6570742064726976696e67206163746564 +1.3.6.1.4.1.9.9.13.1.5.1.2.26|4x|6f78656e207468656972204a61646564 +1.3.6.1.4.1.9.9.13.1.5.1.2.29|4x|746865697220746865697220616374656420666f7277617264 +1.3.6.1.4.1.9.9.13.1.5.1.2.31|4x|4a616465642064726976696e67207468656972207468656972207468656972 +1.3.6.1.4.1.9.9.13.1.5.1.3.0|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.3.5|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.3.16|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.3.20|2|6 +1.3.6.1.4.1.9.9.13.1.5.1.3.21|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.3.22|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.3.25|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.3.26|2|6 +1.3.6.1.4.1.9.9.13.1.5.1.3.29|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.3.31|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.4.0|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.4.5|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.4.16|2|4 +1.3.6.1.4.1.9.9.13.1.5.1.4.20|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.21|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.22|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.25|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.26|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.29|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.4.31|2|1 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.1|2|22 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.7|2|21 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.10|2|17 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.13|2|6 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.15|2|20 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.18|2|8 +1.3.6.1.4.1.9.9.42.1.2.1.1.4.20|2|16 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.1|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.7|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.10|2|2 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.13|2|2 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.15|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.18|2|2 +1.3.6.1.4.1.9.9.42.1.2.9.1.6.20|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.1|2|3 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.7|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.10|2|6 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.13|2|4 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.15|2|6 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.18|2|1 +1.3.6.1.4.1.9.9.42.1.2.9.1.10.20|2|6 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.1|66|2223021701 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.7|66|917475738 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.10|66|631313195 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.13|66|2637486476 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.15|66|30159574 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.18|66|3370367591 +1.3.6.1.4.1.9.9.42.1.2.10.1.1.20|66|1617271034 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.1|2|13 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.7|2|30 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.10|2|2 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.13|2|21 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.15|2|19 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.18|2|20 +1.3.6.1.4.1.9.9.42.1.2.10.1.2.20|2|27 +1.3.6.1.4.1.9.9.48.1.1.1.1.18|2|18 +1.3.6.1.4.1.9.9.48.1.1.1.2.18|4|test_pool +1.3.6.1.4.1.9.9.48.1.1.1.3.18|2|23 +1.3.6.1.4.1.9.9.48.1.1.1.4.18|2|1 +1.3.6.1.4.1.9.9.48.1.1.1.5.18|66|4078680985 +1.3.6.1.4.1.9.9.48.1.1.1.6.18|66|3648996318 +1.3.6.1.4.1.9.9.48.1.1.1.7.18|66|3283078931 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.712|66|712 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.7746|66|7746 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.712|2|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.7746|2|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.712|66|90 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.7746|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.712|66|40 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.7746|66|4 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.712|66|50 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.7746|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.712|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.7746|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.712|66|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.7746|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.712|66|40 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.7746|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.712|66|15518 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.7746|66|38028 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.712|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.7746|66|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.712|66|70 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.7746|66|7 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.712|66|353 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.7746|66|727588670 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.712|66|248 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.7746|66|1683542536 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.3|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.4|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.5|2|5 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.7|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.11|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.16|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.17|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.24|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.25|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.3|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.4|2|5 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.5|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.7|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.11|2|6 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.16|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.17|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.24|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.25|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.3|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.4|2|14 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.5|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.7|2|30 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.11|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.16|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.17|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.24|2|8 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.25|2|29 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.3|4x|6f78656e207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.4|4x|4a6164656420717561696e746c79204a6164656420627574207a6f6d6269657320717561696e746c79207a6f6d6269657320666f7277617264206b657074 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.5|4x|74686569722064726976696e67206b657074206f78656e2064726976696e6720666f7277617264207468656972 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.7|4x|6b65707420666f727761726420627574207468656972206275742064726976696e67207a6f6d6269657320746865697220717561696e746c79 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.11|4|quaintly +1.3.6.1.4.1.9.9.117.1.1.2.1.4.16|4x|6b657074207a6f6d62696573 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.17|4x|6f78656e206b65707420627574207a6f6d6269657320717561696e746c7920627574206f78656e +1.3.6.1.4.1.9.9.117.1.1.2.1.4.24|4x|4a61646564207a6f6d626965732061637465642064726976696e67207468656972207a6f6d6269657320666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.25|4x|6275742064726976696e67204a61646564206275742062757420627574 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.3|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.4|2|24 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.5|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.7|2|23 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.11|2|20 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.16|2|30 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.17|2|11 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.24|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.25|2|0 +1.3.6.1.4.1.9.9.117.1.1.3.0|2|10 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.2|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.7|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.8|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.11|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.21|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.26|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.27|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.30|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.31|2|1 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.1.3|2|3 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.2.3|4|Secondary unit +1.3.6.1.4.1.9.9.147.1.2.1.1.1.2.5|4|Primary unit +1.3.6.1.4.1.9.9.147.1.2.1.1.1.2.6|4|Failover LAN Interface +1.3.6.1.4.1.9.9.147.1.2.1.1.1.3.3|2|2 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.3.5|2|8 +1.3.6.1.4.1.9.9.147.1.2.1.1.1.3.6|2|9 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.1.47596.5|66|47596 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.1.50035.2|66|50035 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.2.47596.5|2|5 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.2.50035.2|2|2 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.3.47596.5|4x|64726976696e67206b6570742064726976696e67207468656972204a61646564204a61646564206b65707420627574206b657074 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.3.50035.2|4x|717561696e746c7920627574207468656972206275742064726976696e67 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.4.47596.5|66|759866853 +1.3.6.1.4.1.9.9.147.1.2.2.1.1.4.50035.2|66|3000607411 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.1.5.5|2|5 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.1.8.1|2|8 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.1.20.2|2|20 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.2.5.5|2|5 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.2.8.1|2|1 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.2.20.2|2|2 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.3.5.5|4x|627574206b657074207468656972206f78656e20666f72776172642064726976696e672064726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.3.8.1|4|test_conn +1.3.6.1.4.1.9.9.147.1.2.2.2.1.3.20.2|4x|4a6164656420746865697220627574204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.4.5.5|65|2025029234 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.4.8.1|65|2690303639 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.4.20.2|65|2586750173 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.5.5.5|66|20378309 +1.3.6.1.4.1.9.9.147.1.2.2.2.1.5.20.2|66|4087850099 +1.3.6.1.4.1.9.9.171.1.1.1.0|2|20 +1.3.6.1.4.1.9.9.171.1.2.1.1.0|66|2517445787 +1.3.6.1.4.1.9.9.171.1.2.1.2.0|65|2082435314 +1.3.6.1.4.1.9.9.171.1.2.1.3.0|65|3586485799 +1.3.6.1.4.1.9.9.171.1.2.1.4.0|65|55415745 +1.3.6.1.4.1.9.9.171.1.2.1.5.0|65|2585066045 +1.3.6.1.4.1.9.9.171.1.2.1.6.0|65|2512419052 +1.3.6.1.4.1.9.9.171.1.2.1.7.0|65|787033253 +1.3.6.1.4.1.9.9.171.1.2.1.8.0|65|3554335867 +1.3.6.1.4.1.9.9.171.1.2.1.9.0|65|3427054745 +1.3.6.1.4.1.9.9.171.1.2.1.10.0|65|915529830 +1.3.6.1.4.1.9.9.171.1.2.1.11.0|65|1771994502 +1.3.6.1.4.1.9.9.171.1.2.1.12.0|65|2076367213 +1.3.6.1.4.1.9.9.171.1.2.1.13.0|65|123173035 +1.3.6.1.4.1.9.9.171.1.2.1.14.0|65|3653722608 +1.3.6.1.4.1.9.9.171.1.2.1.15.0|65|67753505 +1.3.6.1.4.1.9.9.171.1.2.1.16.0|65|2844371229 +1.3.6.1.4.1.9.9.171.1.2.1.17.0|65|654198838 +1.3.6.1.4.1.9.9.171.1.2.1.18.0|65|1314173894 +1.3.6.1.4.1.9.9.171.1.2.1.19.0|65|2721519379 +1.3.6.1.4.1.9.9.171.1.2.1.20.0|65|2355318485 +1.3.6.1.4.1.9.9.171.1.2.1.21.0|65|2650257281 +1.3.6.1.4.1.9.9.171.1.2.1.22.0|65|1030937622 +1.3.6.1.4.1.9.9.171.1.2.1.23.0|65|2780652506 +1.3.6.1.4.1.9.9.171.1.2.1.24.0|65|1045063375 +1.3.6.1.4.1.9.9.171.1.2.1.25.0|65|3776486351 +1.3.6.1.4.1.9.9.171.1.2.1.26.0|65|1216922190 +1.3.6.1.4.1.9.9.171.1.2.2.1.1.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|1 +1.3.6.1.4.1.9.9.171.1.2.2.1.1.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|2 +1.3.6.1.4.1.9.9.171.1.2.2.1.2.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|6b6570742064726976696e67206275742064726976696e67206f78656e20666f7277617264204a6164656420717561696e746c7920717561696e746c79 +1.3.6.1.4.1.9.9.171.1.2.2.1.2.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4x|627574207a6f6d62696573206f78656e207468656972206b657074 +1.3.6.1.4.1.9.9.171.1.2.2.1.3.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|1 +1.3.6.1.4.1.9.9.171.1.2.2.1.3.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|1 +1.3.6.1.4.1.9.9.171.1.2.2.1.4.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|6b65707420666f7277617264207468656972 +1.3.6.1.4.1.9.9.171.1.2.2.1.4.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4x|717561696e746c792064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.171.1.2.2.1.5.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|30 +1.3.6.1.4.1.9.9.171.1.2.2.1.5.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|12 +1.3.6.1.4.1.9.9.171.1.2.2.1.6.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|4a61646564206b657074207468656972 +1.3.6.1.4.1.9.9.171.1.2.2.1.6.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4|kept +1.3.6.1.4.1.9.9.171.1.2.2.1.7.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.2.2.1.7.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|4|kept +1.3.6.1.4.1.9.9.171.1.2.2.1.8.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|23 +1.3.6.1.4.1.9.9.171.1.2.2.1.8.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|31 +1.3.6.1.4.1.9.9.171.1.2.2.1.9.1.61.107.101.112.116.32.100.114.105.118.105.110.103.32.98.117.116.32.100.114.105.118.105.110.103.32.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.1.18.107.101.112.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.30|2|22 +1.3.6.1.4.1.9.9.171.1.2.2.1.9.2.27.98.117.116.32.122.111.109.98.105.101.115.32.111.120.101.110.32.116.104.101.105.114.32.107.101.112.116.1.30.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.12|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.1.3|2|3 +1.3.6.1.4.1.9.9.171.1.2.3.1.1.5|2|5 +1.3.6.1.4.1.9.9.171.1.2.3.1.2.3|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.2.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.3.3|4x|7468656972207a6f6d62696573207468656972207a6f6d62696573206b657074206f78656e +1.3.6.1.4.1.9.9.171.1.2.3.1.3.5|4x|7a6f6d62696573204a6164656420746865697220616374656420627574 +1.3.6.1.4.1.9.9.171.1.2.3.1.4.3|4|oxen +1.3.6.1.4.1.9.9.171.1.2.3.1.4.5|4x|6163746564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.2.3.1.5.3|4|oxen +1.3.6.1.4.1.9.9.171.1.2.3.1.5.5|4|but +1.3.6.1.4.1.9.9.171.1.2.3.1.6.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.6.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.7.3|4x|6163746564206b657074204a61646564206163746564 +1.3.6.1.4.1.9.9.171.1.2.3.1.7.5|4x|64726976696e67206f78656e206b65707420627574204a61646564207a6f6d62696573204a61646564 +1.3.6.1.4.1.9.9.171.1.2.3.1.8.3|4|kept +1.3.6.1.4.1.9.9.171.1.2.3.1.8.5|4x|6b657074207468656972204a61646564 +1.3.6.1.4.1.9.9.171.1.2.3.1.9.3|4x|6163746564206b657074207468656972207468656972 +1.3.6.1.4.1.9.9.171.1.2.3.1.9.5|4x|666f727761726420666f7277617264206b65707420717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.2.3.1.10.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.10.5|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.11.3|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.11.5|2|3 +1.3.6.1.4.1.9.9.171.1.2.3.1.12.3|2|3 +1.3.6.1.4.1.9.9.171.1.2.3.1.12.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.13.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.13.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.14.3|2|1 +1.3.6.1.4.1.9.9.171.1.2.3.1.14.5|2|5 +1.3.6.1.4.1.9.9.171.1.2.3.1.15.3|2|13 +1.3.6.1.4.1.9.9.171.1.2.3.1.15.5|2|28 +1.3.6.1.4.1.9.9.171.1.2.3.1.16.3|2|16 +1.3.6.1.4.1.9.9.171.1.2.3.1.16.5|2|0 +1.3.6.1.4.1.9.9.171.1.2.3.1.17.3|2|9 +1.3.6.1.4.1.9.9.171.1.2.3.1.17.5|2|23 +1.3.6.1.4.1.9.9.171.1.2.3.1.18.3|65|873863217 +1.3.6.1.4.1.9.9.171.1.2.3.1.18.5|65|4041389162 +1.3.6.1.4.1.9.9.171.1.2.3.1.19.3|65|444696945 +1.3.6.1.4.1.9.9.171.1.2.3.1.19.5|65|1429413108 +1.3.6.1.4.1.9.9.171.1.2.3.1.20.3|65|2526233032 +1.3.6.1.4.1.9.9.171.1.2.3.1.20.5|65|3931574972 +1.3.6.1.4.1.9.9.171.1.2.3.1.21.3|65|2479090364 +1.3.6.1.4.1.9.9.171.1.2.3.1.21.5|65|874183465 +1.3.6.1.4.1.9.9.171.1.2.3.1.22.3|65|888202948 +1.3.6.1.4.1.9.9.171.1.2.3.1.22.5|65|1610429217 +1.3.6.1.4.1.9.9.171.1.2.3.1.23.3|65|3462920250 +1.3.6.1.4.1.9.9.171.1.2.3.1.23.5|65|2151705546 +1.3.6.1.4.1.9.9.171.1.2.3.1.24.3|65|2565719801 +1.3.6.1.4.1.9.9.171.1.2.3.1.24.5|65|3395553994 +1.3.6.1.4.1.9.9.171.1.2.3.1.25.3|65|2228405074 +1.3.6.1.4.1.9.9.171.1.2.3.1.25.5|65|2624335244 +1.3.6.1.4.1.9.9.171.1.2.3.1.26.3|65|3006967537 +1.3.6.1.4.1.9.9.171.1.2.3.1.26.5|65|410051353 +1.3.6.1.4.1.9.9.171.1.2.3.1.27.3|65|1337714779 +1.3.6.1.4.1.9.9.171.1.2.3.1.27.5|65|1425712802 +1.3.6.1.4.1.9.9.171.1.2.3.1.28.3|65|2116873007 +1.3.6.1.4.1.9.9.171.1.2.3.1.28.5|65|1353332653 +1.3.6.1.4.1.9.9.171.1.2.3.1.29.3|65|3580869615 +1.3.6.1.4.1.9.9.171.1.2.3.1.29.5|65|715475082 +1.3.6.1.4.1.9.9.171.1.2.3.1.30.3|65|2249094174 +1.3.6.1.4.1.9.9.171.1.2.3.1.30.5|65|685279905 +1.3.6.1.4.1.9.9.171.1.2.3.1.31.3|65|2318835995 +1.3.6.1.4.1.9.9.171.1.2.3.1.31.5|65|3313898297 +1.3.6.1.4.1.9.9.171.1.2.3.1.32.3|65|990926535 +1.3.6.1.4.1.9.9.171.1.2.3.1.32.5|65|4004637148 +1.3.6.1.4.1.9.9.171.1.2.3.1.33.3|65|1674719135 +1.3.6.1.4.1.9.9.171.1.2.3.1.33.5|65|3116893031 +1.3.6.1.4.1.9.9.171.1.2.3.1.34.3|65|2142489467 +1.3.6.1.4.1.9.9.171.1.2.3.1.34.5|65|567516830 +1.3.6.1.4.1.9.9.171.1.2.3.1.35.3|2|2 +1.3.6.1.4.1.9.9.171.1.2.3.1.35.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.4.1.1.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|2 +1.3.6.1.4.1.9.9.171.1.2.4.1.1.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|2 +1.3.6.1.4.1.9.9.171.1.2.4.1.2.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|4x|666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.171.1.2.4.1.2.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|4x|7468656972207a6f6d62696573206f78656e204a616465642064726976696e67 +1.3.6.1.4.1.9.9.171.1.2.4.1.3.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|1 +1.3.6.1.4.1.9.9.171.1.2.4.1.3.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|2 +1.3.6.1.4.1.9.9.171.1.2.4.1.4.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|4x|627574206f78656e2064726976696e67207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.2.4.1.4.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|4x|7468656972204a61646564206b657074207a6f6d62696573207468656972206b65707420627574 +1.3.6.1.4.1.9.9.171.1.2.4.1.5.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|13 +1.3.6.1.4.1.9.9.171.1.2.4.1.5.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|24 +1.3.6.1.4.1.9.9.171.1.2.4.1.6.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|5 +1.3.6.1.4.1.9.9.171.1.2.4.1.6.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|26 +1.3.6.1.4.1.9.9.171.1.2.4.1.7.2.15.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.1.32.98.117.116.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.13.5|2|23 +1.3.6.1.4.1.9.9.171.1.2.4.1.7.2.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.100.114.105.118.105.110.103.2.39.116.104.101.105.114.32.74.97.100.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.24.26|2|24 +1.3.6.1.4.1.9.9.171.1.2.5.1.1.2|66|3405348844 +1.3.6.1.4.1.9.9.171.1.2.5.1.1.17|66|1379037661 +1.3.6.1.4.1.9.9.171.1.2.5.1.2.2|65|88229005 +1.3.6.1.4.1.9.9.171.1.2.5.1.2.17|65|3030198713 +1.3.6.1.4.1.9.9.171.1.2.5.1.3.2|65|344910659 +1.3.6.1.4.1.9.9.171.1.2.5.1.3.17|65|33036840 +1.3.6.1.4.1.9.9.171.1.2.5.1.4.2|65|447299365 +1.3.6.1.4.1.9.9.171.1.2.5.1.4.17|65|538727845 +1.3.6.1.4.1.9.9.171.1.2.5.1.5.2|65|472834505 +1.3.6.1.4.1.9.9.171.1.2.5.1.5.17|65|3054034 +1.3.6.1.4.1.9.9.171.1.2.5.1.6.2|65|3593802072 +1.3.6.1.4.1.9.9.171.1.2.5.1.6.17|65|3549366247 +1.3.6.1.4.1.9.9.171.1.2.5.1.7.2|65|2944563745 +1.3.6.1.4.1.9.9.171.1.2.5.1.7.17|65|3766841702 +1.3.6.1.4.1.9.9.171.1.2.5.1.8.2|65|2827110916 +1.3.6.1.4.1.9.9.171.1.2.5.1.8.17|65|541497651 +1.3.6.1.4.1.9.9.171.1.2.5.1.9.2|65|234506077 +1.3.6.1.4.1.9.9.171.1.2.5.1.9.17|65|2731827217 +1.3.6.1.4.1.9.9.171.1.2.5.1.10.2|65|35823350 +1.3.6.1.4.1.9.9.171.1.2.5.1.10.17|65|2055408274 +1.3.6.1.4.1.9.9.171.1.2.5.1.11.2|65|613379743 +1.3.6.1.4.1.9.9.171.1.2.5.1.11.17|65|749737562 +1.3.6.1.4.1.9.9.171.1.2.5.1.12.2|65|3136782594 +1.3.6.1.4.1.9.9.171.1.2.5.1.12.17|65|3867599558 +1.3.6.1.4.1.9.9.171.1.2.5.1.13.2|65|2518038894 +1.3.6.1.4.1.9.9.171.1.2.5.1.13.17|65|3789209889 +1.3.6.1.4.1.9.9.171.1.2.5.1.14.2|65|485135820 +1.3.6.1.4.1.9.9.171.1.2.5.1.14.17|65|2804351110 +1.3.6.1.4.1.9.9.171.1.2.5.1.15.2|65|3816944451 +1.3.6.1.4.1.9.9.171.1.2.5.1.15.17|65|3061990294 +1.3.6.1.4.1.9.9.171.1.2.5.1.16.2|65|3293750728 +1.3.6.1.4.1.9.9.171.1.2.5.1.16.17|65|3502377103 +1.3.6.1.4.1.9.9.171.1.2.5.1.17.2|65|4236310901 +1.3.6.1.4.1.9.9.171.1.2.5.1.17.17|65|2360434961 +1.3.6.1.4.1.9.9.171.1.2.5.1.18.2|65|3798162230 +1.3.6.1.4.1.9.9.171.1.2.5.1.18.17|65|3954421682 +1.3.6.1.4.1.9.9.171.1.2.5.1.19.2|65|1365609163 +1.3.6.1.4.1.9.9.171.1.2.5.1.19.17|65|191894913 +1.3.6.1.4.1.9.9.171.1.2.5.1.20.2|65|1405339921 +1.3.6.1.4.1.9.9.171.1.2.5.1.20.17|65|2429774821 +1.3.6.1.4.1.9.9.171.1.2.5.1.21.2|65|2995566101 +1.3.6.1.4.1.9.9.171.1.2.5.1.21.17|65|1832565962 +1.3.6.1.4.1.9.9.171.1.2.5.1.22.2|65|4132429477 +1.3.6.1.4.1.9.9.171.1.2.5.1.22.17|65|418366803 +1.3.6.1.4.1.9.9.171.1.2.5.1.23.2|65|2015402172 +1.3.6.1.4.1.9.9.171.1.2.5.1.23.17|65|1316534295 +1.3.6.1.4.1.9.9.171.1.2.5.1.24.2|65|3247282160 +1.3.6.1.4.1.9.9.171.1.2.5.1.24.17|65|2833736517 +1.3.6.1.4.1.9.9.171.1.2.5.1.25.2|65|2823444229 +1.3.6.1.4.1.9.9.171.1.2.5.1.25.17|65|1615516389 +1.3.6.1.4.1.9.9.171.1.2.5.1.26.2|65|73347298 +1.3.6.1.4.1.9.9.171.1.2.5.1.26.17|65|2896149360 +1.3.6.1.4.1.9.9.171.1.3.1.1.0|66|555520100 +1.3.6.1.4.1.9.9.171.1.3.1.2.0|65|3433850807 +1.3.6.1.4.1.9.9.171.1.3.1.3.0|65|3765451978 +1.3.6.1.4.1.9.9.171.1.3.1.4.0|70|8076380598964912751 +1.3.6.1.4.1.9.9.171.1.3.1.5.0|65|605242469 +1.3.6.1.4.1.9.9.171.1.3.1.6.0|65|2117938836 +1.3.6.1.4.1.9.9.171.1.3.1.7.0|70|1244382013554652095 +1.3.6.1.4.1.9.9.171.1.3.1.8.0|65|2069097191 +1.3.6.1.4.1.9.9.171.1.3.1.9.0|65|1103506722 +1.3.6.1.4.1.9.9.171.1.3.1.10.0|65|3278141363 +1.3.6.1.4.1.9.9.171.1.3.1.11.0|65|2348631446 +1.3.6.1.4.1.9.9.171.1.3.1.12.0|65|788758787 +1.3.6.1.4.1.9.9.171.1.3.1.13.0|65|1299954247 +1.3.6.1.4.1.9.9.171.1.3.1.14.0|65|2563637642 +1.3.6.1.4.1.9.9.171.1.3.1.15.0|65|34726275 +1.3.6.1.4.1.9.9.171.1.3.1.16.0|65|3892208230 +1.3.6.1.4.1.9.9.171.1.3.1.17.0|70|11061656018312361232 +1.3.6.1.4.1.9.9.171.1.3.1.18.0|65|3239360685 +1.3.6.1.4.1.9.9.171.1.3.1.19.0|65|2198334559 +1.3.6.1.4.1.9.9.171.1.3.1.20.0|70|3371199286386608944 +1.3.6.1.4.1.9.9.171.1.3.1.21.0|65|2444861007 +1.3.6.1.4.1.9.9.171.1.3.1.22.0|65|1881053125 +1.3.6.1.4.1.9.9.171.1.3.1.23.0|65|3540985166 +1.3.6.1.4.1.9.9.171.1.3.1.24.0|65|3081489769 +1.3.6.1.4.1.9.9.171.1.3.1.25.0|65|257883106 +1.3.6.1.4.1.9.9.171.1.3.1.26.0|65|1836586560 +1.3.6.1.4.1.9.9.171.1.3.1.27.0|65|980485057 +1.3.6.1.4.1.9.9.171.1.3.1.28.0|65|644393269 +1.3.6.1.4.1.9.9.171.1.3.1.29.0|65|3550809455 +1.3.6.1.4.1.9.9.171.1.3.1.30.0|65|1537259604 +1.3.6.1.4.1.9.9.171.1.3.2.1.1.23|2|23 +1.3.6.1.4.1.9.9.171.1.3.2.1.1.28|2|28 +1.3.6.1.4.1.9.9.171.1.3.2.1.2.23|2|7 +1.3.6.1.4.1.9.9.171.1.3.2.1.2.28|2|7 +1.3.6.1.4.1.9.9.171.1.3.2.1.3.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.3.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.4.23|4x|64726976696e67206b65707420627574 +1.3.6.1.4.1.9.9.171.1.3.2.1.4.28|4x|6b6570742062757420666f7277617264 +1.3.6.1.4.1.9.9.171.1.3.2.1.5.23|4|kept +1.3.6.1.4.1.9.9.171.1.3.2.1.5.28|4|kept +1.3.6.1.4.1.9.9.171.1.3.2.1.6.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.6.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.7.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.7.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.8.23|2|4 +1.3.6.1.4.1.9.9.171.1.3.2.1.8.28|2|6 +1.3.6.1.4.1.9.9.171.1.3.2.1.9.23|2|25 +1.3.6.1.4.1.9.9.171.1.3.2.1.9.28|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.10.23|2|30 +1.3.6.1.4.1.9.9.171.1.3.2.1.10.28|2|7 +1.3.6.1.4.1.9.9.171.1.3.2.1.11.23|2|25 +1.3.6.1.4.1.9.9.171.1.3.2.1.11.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.12.23|2|29 +1.3.6.1.4.1.9.9.171.1.3.2.1.12.28|2|12 +1.3.6.1.4.1.9.9.171.1.3.2.1.13.23|65|736404368 +1.3.6.1.4.1.9.9.171.1.3.2.1.13.28|65|3035617434 +1.3.6.1.4.1.9.9.171.1.3.2.1.14.23|65|2717096145 +1.3.6.1.4.1.9.9.171.1.3.2.1.14.28|65|3979661869 +1.3.6.1.4.1.9.9.171.1.3.2.1.15.23|66|1401352929 +1.3.6.1.4.1.9.9.171.1.3.2.1.15.28|66|1557942135 +1.3.6.1.4.1.9.9.171.1.3.2.1.16.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.16.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.17.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.17.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.18.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.18.28|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.19.23|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.19.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.20.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.20.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.21.23|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.21.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.22.23|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.22.28|2|3 +1.3.6.1.4.1.9.9.171.1.3.2.1.23.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.23.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.24.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.24.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.25.23|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.25.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.2.1.26.23|65|165896064 +1.3.6.1.4.1.9.9.171.1.3.2.1.26.28|65|3618088990 +1.3.6.1.4.1.9.9.171.1.3.2.1.27.23|70|16893382919849205152 +1.3.6.1.4.1.9.9.171.1.3.2.1.27.28|70|11976318338642029242 +1.3.6.1.4.1.9.9.171.1.3.2.1.28.23|65|373706179 +1.3.6.1.4.1.9.9.171.1.3.2.1.28.28|65|42463689 +1.3.6.1.4.1.9.9.171.1.3.2.1.29.23|65|1106272656 +1.3.6.1.4.1.9.9.171.1.3.2.1.29.28|65|1002521669 +1.3.6.1.4.1.9.9.171.1.3.2.1.30.23|70|11922900353577803661 +1.3.6.1.4.1.9.9.171.1.3.2.1.30.28|70|15599379710949051351 +1.3.6.1.4.1.9.9.171.1.3.2.1.31.23|65|1074980189 +1.3.6.1.4.1.9.9.171.1.3.2.1.31.28|65|1263307338 +1.3.6.1.4.1.9.9.171.1.3.2.1.32.23|65|19491227 +1.3.6.1.4.1.9.9.171.1.3.2.1.32.28|65|3040420568 +1.3.6.1.4.1.9.9.171.1.3.2.1.33.23|65|185606313 +1.3.6.1.4.1.9.9.171.1.3.2.1.33.28|65|4077668277 +1.3.6.1.4.1.9.9.171.1.3.2.1.34.23|65|3856931801 +1.3.6.1.4.1.9.9.171.1.3.2.1.34.28|65|1043684270 +1.3.6.1.4.1.9.9.171.1.3.2.1.35.23|65|1768453926 +1.3.6.1.4.1.9.9.171.1.3.2.1.35.28|65|2468669416 +1.3.6.1.4.1.9.9.171.1.3.2.1.36.23|65|3103192375 +1.3.6.1.4.1.9.9.171.1.3.2.1.36.28|65|3896235917 +1.3.6.1.4.1.9.9.171.1.3.2.1.37.23|65|2610571653 +1.3.6.1.4.1.9.9.171.1.3.2.1.37.28|65|2004039361 +1.3.6.1.4.1.9.9.171.1.3.2.1.38.23|65|668234317 +1.3.6.1.4.1.9.9.171.1.3.2.1.38.28|65|229562644 +1.3.6.1.4.1.9.9.171.1.3.2.1.39.23|65|451351388 +1.3.6.1.4.1.9.9.171.1.3.2.1.39.28|65|358890378 +1.3.6.1.4.1.9.9.171.1.3.2.1.40.23|70|15907561446294960767 +1.3.6.1.4.1.9.9.171.1.3.2.1.40.28|70|14524952430283157279 +1.3.6.1.4.1.9.9.171.1.3.2.1.41.23|65|2966419854 +1.3.6.1.4.1.9.9.171.1.3.2.1.41.28|65|2075836476 +1.3.6.1.4.1.9.9.171.1.3.2.1.42.23|65|2137519503 +1.3.6.1.4.1.9.9.171.1.3.2.1.42.28|65|723885852 +1.3.6.1.4.1.9.9.171.1.3.2.1.43.23|70|13733445844003001241 +1.3.6.1.4.1.9.9.171.1.3.2.1.43.28|70|13579132757302593240 +1.3.6.1.4.1.9.9.171.1.3.2.1.44.23|65|2771155894 +1.3.6.1.4.1.9.9.171.1.3.2.1.44.28|65|1824515850 +1.3.6.1.4.1.9.9.171.1.3.2.1.45.23|65|1889625612 +1.3.6.1.4.1.9.9.171.1.3.2.1.45.28|65|4054252226 +1.3.6.1.4.1.9.9.171.1.3.2.1.46.23|65|2849925259 +1.3.6.1.4.1.9.9.171.1.3.2.1.46.28|65|3010306271 +1.3.6.1.4.1.9.9.171.1.3.2.1.47.23|65|2110348798 +1.3.6.1.4.1.9.9.171.1.3.2.1.47.28|65|3986765758 +1.3.6.1.4.1.9.9.171.1.3.2.1.48.23|65|2958887014 +1.3.6.1.4.1.9.9.171.1.3.2.1.48.28|65|121428427 +1.3.6.1.4.1.9.9.171.1.3.2.1.49.23|65|4235674459 +1.3.6.1.4.1.9.9.171.1.3.2.1.49.28|65|3087398701 +1.3.6.1.4.1.9.9.171.1.3.2.1.50.23|65|2987809814 +1.3.6.1.4.1.9.9.171.1.3.2.1.50.28|65|1084010267 +1.3.6.1.4.1.9.9.171.1.3.2.1.51.23|2|2 +1.3.6.1.4.1.9.9.171.1.3.2.1.51.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.3.1.1.3.15|2|15 +1.3.6.1.4.1.9.9.171.1.3.3.1.1.19.26|2|26 +1.3.6.1.4.1.9.9.171.1.3.3.1.2.3.15|4x|717561696e746c79207a6f6d62696573206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.3.3.1.2.19.26|4x|6b657074206163746564206b65707420666f7277617264206b657074 +1.3.6.1.4.1.9.9.171.1.3.3.1.3.3.15|2|1 +1.3.6.1.4.1.9.9.171.1.3.3.1.3.19.26|2|2 +1.3.6.1.4.1.9.9.171.1.3.3.1.4.3.15|4|oxen +1.3.6.1.4.1.9.9.171.1.3.3.1.4.19.26|4|oxen +1.3.6.1.4.1.9.9.171.1.3.3.1.5.3.15|4x|64726976696e67206f78656e20627574 +1.3.6.1.4.1.9.9.171.1.3.3.1.5.19.26|4|kept +1.3.6.1.4.1.9.9.171.1.3.3.1.6.3.15|2|6 +1.3.6.1.4.1.9.9.171.1.3.3.1.6.19.26|2|20 +1.3.6.1.4.1.9.9.171.1.3.3.1.7.3.15|2|22 +1.3.6.1.4.1.9.9.171.1.3.3.1.7.19.26|2|25 +1.3.6.1.4.1.9.9.171.1.3.3.1.8.3.15|4x|6f78656e204a6164656420746865697220627574 +1.3.6.1.4.1.9.9.171.1.3.3.1.8.19.26|4x|746865697220717561696e746c79206163746564207a6f6d62696573206163746564206f78656e2064726976696e67 +1.3.6.1.4.1.9.9.171.1.3.3.1.9.3.15|2|3 +1.3.6.1.4.1.9.9.171.1.3.3.1.9.19.26|2|3 +1.3.6.1.4.1.9.9.171.1.3.3.1.10.3.15|4|oxen +1.3.6.1.4.1.9.9.171.1.3.3.1.10.19.26|4|kept +1.3.6.1.4.1.9.9.171.1.3.3.1.11.3.15|4|kept +1.3.6.1.4.1.9.9.171.1.3.3.1.11.19.26|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.171.1.3.3.1.12.3.15|2|11 +1.3.6.1.4.1.9.9.171.1.3.3.1.12.19.26|2|3 +1.3.6.1.4.1.9.9.171.1.3.3.1.13.3.15|2|17 +1.3.6.1.4.1.9.9.171.1.3.3.1.13.19.26|2|31 +1.3.6.1.4.1.9.9.171.1.3.4.1.1.9.2|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.1.31.28|2|28 +1.3.6.1.4.1.9.9.171.1.3.4.1.2.9.2|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.2.31.28|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.3.9.2|66|45981 +1.3.6.1.4.1.9.9.171.1.3.4.1.3.31.28|66|2825 +1.3.6.1.4.1.9.9.171.1.3.4.1.4.9.2|2|3 +1.3.6.1.4.1.9.9.171.1.3.4.1.4.31.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.4.1.5.9.2|2|2 +1.3.6.1.4.1.9.9.171.1.3.4.1.5.31.28|2|1 +1.3.6.1.4.1.9.9.171.1.3.5.1.1.11|66|1539004452 +1.3.6.1.4.1.9.9.171.1.3.5.1.1.21|66|986476198 +1.3.6.1.4.1.9.9.171.1.3.5.1.2.11|65|3634989455 +1.3.6.1.4.1.9.9.171.1.3.5.1.2.21|65|774642436 +1.3.6.1.4.1.9.9.171.1.3.5.1.3.11|65|971728629 +1.3.6.1.4.1.9.9.171.1.3.5.1.3.21|65|3145266041 +1.3.6.1.4.1.9.9.171.1.3.5.1.4.11|65|2110814352 +1.3.6.1.4.1.9.9.171.1.3.5.1.4.21|65|155761707 +1.3.6.1.4.1.9.9.171.1.3.5.1.5.11|65|2248268558 +1.3.6.1.4.1.9.9.171.1.3.5.1.5.21|65|561905585 +1.3.6.1.4.1.9.9.171.1.3.5.1.6.11|65|974515501 +1.3.6.1.4.1.9.9.171.1.3.5.1.6.21|65|913516496 +1.3.6.1.4.1.9.9.171.1.3.5.1.7.11|65|3221449308 +1.3.6.1.4.1.9.9.171.1.3.5.1.7.21|65|2989278436 +1.3.6.1.4.1.9.9.171.1.3.5.1.8.11|65|2541691427 +1.3.6.1.4.1.9.9.171.1.3.5.1.8.21|65|3367590847 +1.3.6.1.4.1.9.9.171.1.3.5.1.9.11|65|2075568959 +1.3.6.1.4.1.9.9.171.1.3.5.1.9.21|65|505678552 +1.3.6.1.4.1.9.9.171.1.3.5.1.10.11|65|1601794867 +1.3.6.1.4.1.9.9.171.1.3.5.1.10.21|65|4108299796 +1.3.6.1.4.1.9.9.171.1.3.5.1.11.11|65|3796494388 +1.3.6.1.4.1.9.9.171.1.3.5.1.11.21|65|1442135763 +1.3.6.1.4.1.9.9.171.1.3.5.1.12.11|65|2850926956 +1.3.6.1.4.1.9.9.171.1.3.5.1.12.21|65|989514632 +1.3.6.1.4.1.9.9.171.1.3.5.1.13.11|65|1864025156 +1.3.6.1.4.1.9.9.171.1.3.5.1.13.21|65|115684894 +1.3.6.1.4.1.9.9.171.1.3.5.1.14.11|65|1486924693 +1.3.6.1.4.1.9.9.171.1.3.5.1.14.21|65|3614381712 +1.3.6.1.4.1.9.9.171.1.3.5.1.15.11|65|2886166675 +1.3.6.1.4.1.9.9.171.1.3.5.1.15.21|65|2418878004 +1.3.6.1.4.1.9.9.171.1.3.5.1.16.11|65|4041081525 +1.3.6.1.4.1.9.9.171.1.3.5.1.16.21|65|3202353128 +1.3.6.1.4.1.9.9.171.1.3.5.1.17.11|65|3359563692 +1.3.6.1.4.1.9.9.171.1.3.5.1.17.21|65|3939308341 +1.3.6.1.4.1.9.9.171.1.3.5.1.18.11|65|3421730058 +1.3.6.1.4.1.9.9.171.1.3.5.1.18.21|65|2537482589 +1.3.6.1.4.1.9.9.171.1.3.5.1.19.11|65|2662393759 +1.3.6.1.4.1.9.9.171.1.3.5.1.19.21|65|2933597356 +1.3.6.1.4.1.9.9.171.1.3.5.1.20.11|65|4135163112 +1.3.6.1.4.1.9.9.171.1.3.5.1.20.21|65|3283135834 +1.3.6.1.4.1.9.9.171.1.3.5.1.21.11|65|562097720 +1.3.6.1.4.1.9.9.171.1.3.5.1.21.21|65|168036034 +1.3.6.1.4.1.9.9.171.1.3.5.1.22.11|65|2444828842 +1.3.6.1.4.1.9.9.171.1.3.5.1.22.21|65|78028517 +1.3.6.1.4.1.9.9.171.1.3.5.1.23.11|65|1627747682 +1.3.6.1.4.1.9.9.171.1.3.5.1.23.21|65|871345082 +1.3.6.1.4.1.9.9.171.1.3.5.1.24.11|65|3118031750 +1.3.6.1.4.1.9.9.171.1.3.5.1.24.21|65|3275451558 +1.3.6.1.4.1.9.9.171.1.3.5.1.25.11|65|142449220 +1.3.6.1.4.1.9.9.171.1.3.5.1.25.21|65|3664919325 +1.3.6.1.4.1.9.9.171.1.3.5.1.26.11|65|2401996341 +1.3.6.1.4.1.9.9.171.1.3.5.1.26.21|65|3251587706 +1.3.6.1.4.1.9.9.171.1.4.1.1.1.0|2|13 +1.3.6.1.4.1.9.9.171.1.4.1.1.2.0|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.1.10|2|10 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.1.22|2|22 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.2.10|2|4 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.2.22|2|7 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.3.10|2|30 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.3.22|2|19 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.4.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.4.22|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.5.10|4x|6163746564207a6f6d62696573206f78656e2061637465642064726976696e6720627574 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.5.22|4x|627574204a61646564207468656972 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.6.10|2|6 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.6.22|2|19 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.7.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.7.22|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.8.10|4x|627574207a6f6d62696573207a6f6d62696573207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.8.22|4x|6275742064726976696e67206b657074 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.9.10|4|kept +1.3.6.1.4.1.9.9.171.1.4.2.1.1.9.22|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.4.2.1.1.10.10|4x|64726976696e67206275742064726976696e6720666f7277617264207468656972 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.10.22|4x|6b657074207468656972204a61646564206b657074206b6570742064726976696e672062757420627574206f78656e +1.3.6.1.4.1.9.9.171.1.4.2.1.1.11.10|4|oxen +1.3.6.1.4.1.9.9.171.1.4.2.1.1.11.22|4x|717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.12.10|4x|64726976696e67207468656972206f78656e2064726976696e67207a6f6d6269657320666f727761726420717561696e746c7920666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.12.22|4x|7468656972206163746564 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.13.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.13.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.14.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.14.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.15.10|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.15.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.16.10|2|1 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.16.22|2|3 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.17.10|2|2 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.17.22|2|3 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.18.10|2|17 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.18.22|2|15 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.19.10|67|4188924691 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.19.22|67|2937118870 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.20.10|2|11 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.20.22|2|6 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.21.10|65|3904979266 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.21.22|65|3560928040 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.22.10|65|3895453958 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.22.22|65|930877155 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.23.10|65|4155384128 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.23.22|65|1945794694 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.24.10|65|2440644215 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.24.22|65|2179560049 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.25.10|65|3951748314 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.25.22|65|127664431 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.26.10|65|240677500 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.26.22|65|4237031121 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.27.10|65|2919250870 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.27.22|65|4208516442 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.28.10|65|2427553207 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.28.22|65|948705652 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.29.10|65|82976265 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.29.22|65|3934746364 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.30.10|65|3861895215 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.30.22|65|217536823 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.31.10|65|3151994492 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.31.22|65|241794704 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.32.10|65|1506839476 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.32.22|65|2068566446 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.33.10|65|2343908199 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.33.22|65|3426161501 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.34.10|65|648407740 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.34.22|65|1146473588 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.35.10|65|1680408828 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.35.22|65|799707233 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.36.10|65|3312014872 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.36.22|65|1227147473 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.37.10|65|1202145057 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.37.22|65|1608376026 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.38.10|65|3883766622 +1.3.6.1.4.1.9.9.171.1.4.2.1.1.38.22|65|2243100818 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.1.17|2|17 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.1.18|2|18 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.2.17|2|4 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.2.18|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.3.17|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.3.18|2|13 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.4.17|2|11 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.4.18|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.5.17|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.5.18|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.6.17|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.6.18|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.1.1.7.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.7.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.8.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.8.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.9.17|2|10 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.9.18|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.10.17|2|21 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.10.18|2|22 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.11.17|67|2140606133 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.11.18|67|947877786 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.12.17|2|24 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.12.18|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.13.17|65|804171075 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.13.18|65|3013529205 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.14.17|65|2306734177 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.14.18|65|59730603 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.15.17|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.15.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.16.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.16.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.17.17|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.17.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.18.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.18.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.19.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.19.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.20.17|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.20.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.21.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.21.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.22.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.22.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.23.17|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.23.18|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.24.17|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.24.18|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.25.17|65|1350520686 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.25.18|65|460378122 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.26.17|70|10257421324758334396 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.26.18|70|15955968530926075190 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.27.17|65|2626476172 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.27.18|65|866683012 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.28.17|65|729325687 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.28.18|65|2042095897 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.29.17|70|3908873172283764405 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.29.18|70|9692543863636570033 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.30.17|65|797291069 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.30.18|65|3831339083 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.31.17|65|365694518 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.31.18|65|659908830 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.32.17|65|3175828355 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.32.18|65|3194917681 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.33.17|65|3486343761 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.33.18|65|647213477 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.34.17|65|620133147 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.34.18|65|3900465494 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.35.17|65|2135862472 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.35.18|65|2286879901 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.36.17|65|4212299981 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.36.18|65|2957562648 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.37.17|65|3498974530 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.37.18|65|4110881771 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.38.17|65|3426811607 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.38.18|65|3841788286 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.39.17|70|4204788537335394816 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.39.18|70|12043116387776586811 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.40.17|65|3519864046 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.40.18|65|1622184210 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.41.17|65|3039522194 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.41.18|65|1867658882 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.42.17|70|17502062167311159970 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.42.18|70|10996239327049192810 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.43.17|65|3935338485 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.43.18|65|4137439811 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.44.17|65|2920482346 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.44.18|65|166949467 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.45.17|65|3600484353 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.45.18|65|542927767 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.46.17|65|250089742 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.46.18|65|3039150373 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.47.17|65|1876324894 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.47.18|65|3523115734 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.48.17|65|396919596 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.48.18|65|3635284240 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.49.17|65|1871392869 +1.3.6.1.4.1.9.9.171.1.4.3.1.1.49.18|65|1071823832 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.1.22|2|22 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.1.24|2|24 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.2.22|2|23 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.2.24|2|8 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.3.22|2|11 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.3.24|2|28 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.4.22|4x|616374656420666f7277617264206163746564206b657074206163746564206163746564 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.4.24|4x|717561696e746c79204a6164656420746865697220616374656420627574 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.5.22|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.5.24|2|3 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.6.22|4|oxen +1.3.6.1.4.1.9.9.171.1.4.3.2.1.6.24|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.2.1.7.22|4x|6163746564206f78656e204a61646564 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.7.24|4|oxen +1.3.6.1.4.1.9.9.171.1.4.3.2.1.8.22|2|24 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.8.24|2|10 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.9.22|2|31 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.9.24|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.10.22|4x|6f78656e20627574206b65707420717561696e746c79 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.10.24|4x|616374656420627574 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.11.22|2|1 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.11.24|2|2 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.12.22|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.2.1.12.24|4x|6f78656e206163746564207468656972 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.13.22|4|kept +1.3.6.1.4.1.9.9.171.1.4.3.2.1.13.24|4|oxen +1.3.6.1.4.1.9.9.171.1.4.3.2.1.14.22|2|14 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.14.24|2|6 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.15.22|2|5 +1.3.6.1.4.1.9.9.171.1.4.3.2.1.15.24|2|15 +1.3.6.1.4.1.9.9.171.1.5.1.1.1.0|2|15 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.1.8|2|8 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.1.15|2|15 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.2.8|2|11 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.2.15|2|14 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.3.8|67|2511746407 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.3.15|67|919534560 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.4.8|2|2 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.4.15|2|2 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.5.8|4x|717561696e746c7920627574206b6570742061637465642064726976696e6720627574 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.5.15|4x|4a61646564204a61646564204a61646564 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.6.8|2|1 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.6.15|2|2 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.7.8|4x|4a6164656420717561696e746c7920627574 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.7.15|4x|64726976696e6720666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.8.8|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.8.15|4|kept +1.3.6.1.4.1.9.9.171.1.5.2.1.1.9.8|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.9.9.171.1.5.2.1.1.9.15|4|oxen +1.3.6.1.4.1.9.9.171.1.5.3.1.1.1.22|2|22 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.1.29|2|29 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.2.22|2|16 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.2.29|2|10 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.3.22|67|4157396408 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.3.29|67|96476129 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.4.22|2|28 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.4.29|2|12 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.5.22|2|25 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.5.29|2|2 +1.3.6.1.4.1.9.9.171.1.5.3.1.1.6.22|4|kept +1.3.6.1.4.1.9.9.171.1.5.3.1.1.6.29|4|kept +1.3.6.1.4.1.9.9.171.1.5.3.1.1.7.22|4|oxen +1.3.6.1.4.1.9.9.171.1.5.3.1.1.7.29|4x|4a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.171.1.6.1.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.2.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.3.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.4.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.5.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.6.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.7.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.8.0|2|2 +1.3.6.1.4.1.9.9.171.1.6.9.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.10.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.11.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.12.0|2|1 +1.3.6.1.4.1.9.9.171.1.6.13.0|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.27|65|1629044510 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.27|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.1.2|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.1.6|2|6 +1.3.6.1.4.1.9.9.324.1.1.1.1.2.2|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.324.1.1.1.1.2.6|4x|6163746564207468656972 +1.3.6.1.4.1.9.9.324.1.1.1.1.3.2|2|5 +1.3.6.1.4.1.9.9.324.1.1.1.1.3.6|2|19 +1.3.6.1.4.1.9.9.324.1.1.1.1.4.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.4.6|2|3 +1.3.6.1.4.1.9.9.324.1.1.1.1.5.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.5.6|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.6.2|2|9 +1.3.6.1.4.1.9.9.324.1.1.1.1.6.6|2|24 +1.3.6.1.4.1.9.9.324.1.1.1.1.7.2|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.7.6|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.8.2|2|2 +1.3.6.1.4.1.9.9.324.1.1.1.1.8.6|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.9.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.9.6|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.10.2|2|1 +1.3.6.1.4.1.9.9.324.1.1.1.1.10.6|2|2 +1.3.6.1.4.1.9.9.324.1.1.2.1.1.7.9|2|9 +1.3.6.1.4.1.9.9.324.1.1.2.1.1.16.29|2|29 +1.3.6.1.4.1.9.9.324.1.1.2.1.2.7.9|2|2 +1.3.6.1.4.1.9.9.324.1.1.2.1.2.16.29|2|1 +1.3.6.1.4.1.9.9.324.1.1.2.1.3.7.9|4|acted +1.3.6.1.4.1.9.9.324.1.1.2.1.3.16.29|4x|7468656972204a61646564 +1.3.6.1.4.1.9.9.324.1.1.2.1.4.7.9|2|20 +1.3.6.1.4.1.9.9.324.1.1.2.1.4.16.29|2|30 +1.3.6.1.4.1.9.9.324.1.1.2.1.5.7.9|66|28786 +1.3.6.1.4.1.9.9.324.1.1.2.1.5.16.29|66|14266 +1.3.6.1.4.1.9.9.324.1.1.2.1.6.7.9|2|20 +1.3.6.1.4.1.9.9.324.1.1.2.1.6.16.29|2|24 +1.3.6.1.4.1.9.9.324.1.1.2.1.7.7.9|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.9.9.324.1.1.2.1.7.16.29|4x|627574206b657074 +1.3.6.1.4.1.9.9.324.1.1.3.1.1.8.25|2|25 +1.3.6.1.4.1.9.9.324.1.1.3.1.1.16.7|2|7 +1.3.6.1.4.1.9.9.324.1.1.3.1.2.8.25|2|12 +1.3.6.1.4.1.9.9.324.1.1.3.1.2.16.7|2|29 +1.3.6.1.4.1.9.9.324.1.1.3.1.3.8.25|2|29 +1.3.6.1.4.1.9.9.324.1.1.3.1.3.16.7|2|30 +1.3.6.1.4.1.9.9.324.1.1.3.1.4.8.25|2|27 +1.3.6.1.4.1.9.9.324.1.1.3.1.4.16.7|2|15 +1.3.6.1.4.1.9.9.324.1.1.3.1.5.8.25|2|2 +1.3.6.1.4.1.9.9.324.1.1.3.1.5.16.7|2|3 +1.3.6.1.4.1.9.9.324.1.1.3.1.6.8.25|4x|616374656420666f727761726420666f72776172642062757420627574206f78656e206f78656e +1.3.6.1.4.1.9.9.324.1.1.3.1.6.16.7|4x|7468656972206163746564 +1.3.6.1.4.1.9.9.324.1.1.3.1.7.8.25|66|196 +1.3.6.1.4.1.9.9.324.1.1.3.1.7.16.7|66|1734 +1.3.6.1.4.1.9.9.324.1.1.3.1.8.8.25|2|2 +1.3.6.1.4.1.9.9.324.1.1.3.1.8.16.7|2|1 +1.3.6.1.4.1.9.9.324.1.1.3.1.9.8.25|2|1 +1.3.6.1.4.1.9.9.324.1.1.3.1.9.16.7|2|2 +1.3.6.1.4.1.9.9.324.1.1.3.1.10.8.25|2|6 +1.3.6.1.4.1.9.9.324.1.1.3.1.10.16.7|2|1 +1.3.6.1.4.1.9.9.324.1.1.4.1.1.9.20|2|20 +1.3.6.1.4.1.9.9.324.1.1.4.1.1.14.6|2|6 +1.3.6.1.4.1.9.9.324.1.1.4.1.2.9.20|2|3 +1.3.6.1.4.1.9.9.324.1.1.4.1.2.14.6|2|1 +1.3.6.1.4.1.9.9.324.1.1.4.1.3.9.20|4x|62757420746865697220717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.9.9.324.1.1.4.1.3.14.6|4x|6f78656e206163746564204a616465642064726976696e67204a61646564207a6f6d6269657320717561696e746c79206f78656e +1.3.6.1.4.1.9.9.324.1.1.4.1.4.9.20|2|1 +1.3.6.1.4.1.9.9.324.1.1.4.1.4.14.6|2|5 +1.3.6.1.4.1.9.9.324.1.1.5.1.1.3.4|2|4 +1.3.6.1.4.1.9.9.324.1.1.5.1.1.3.5|2|5 +1.3.6.1.4.1.9.9.324.1.1.5.1.2.3.4|4x|61637465642064726976696e67207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.324.1.1.5.1.2.3.5|4x|7468656972206f78656e20717561696e746c7920616374656420616374656420666f727761726420717561696e746c79207468656972206b657074 +1.3.6.1.4.1.9.9.324.1.1.5.1.3.3.4|2|3 +1.3.6.1.4.1.9.9.324.1.1.5.1.3.3.5|2|2 +1.3.6.1.4.1.9.9.324.1.1.5.1.4.3.4|4x|64726976696e67204a6164656420627574 +1.3.6.1.4.1.9.9.324.1.1.5.1.4.3.5|4x|717561696e746c79204a6164656420717561696e746c79206f78656e +1.3.6.1.4.1.9.9.324.1.1.5.1.5.3.4|2|4 +1.3.6.1.4.1.9.9.324.1.1.5.1.5.3.5|2|2 +1.3.6.1.4.1.9.9.324.1.1.6.1.1.10.32|66|32 +1.3.6.1.4.1.9.9.324.1.1.6.1.1.19.255|66|255 +1.3.6.1.4.1.9.9.324.1.1.6.1.2.10.32|66|434 +1.3.6.1.4.1.9.9.324.1.1.6.1.2.19.255|66|645 +1.3.6.1.4.1.9.9.324.1.1.6.1.3.10.32|66|324 +1.3.6.1.4.1.9.9.324.1.1.6.1.3.19.255|66|732 +1.3.6.1.4.1.9.9.324.1.1.7.1.1.3|66|32 +1.3.6.1.4.1.9.9.324.1.1.7.1.1.10|66|227 +1.3.6.1.4.1.9.9.324.1.1.7.1.2.3|66|122 +1.3.6.1.4.1.9.9.324.1.1.7.1.2.10|66|232 +1.3.6.1.4.1.9.9.324.1.1.7.1.3.3|66|97 +1.3.6.1.4.1.9.9.324.1.1.7.1.3.10|66|115 +1.3.6.1.4.1.9.9.324.1.1.7.1.4.3|66|110 +1.3.6.1.4.1.9.9.324.1.1.7.1.4.10|66|113 +1.3.6.1.4.1.9.9.324.1.1.7.1.5.3|66|4513 +1.3.6.1.4.1.9.9.324.1.1.7.1.5.10|66|4412 +1.3.6.1.4.1.9.9.324.1.1.7.1.6.3|2|2 +1.3.6.1.4.1.9.9.324.1.1.7.1.6.10|2|1 +1.3.6.1.4.1.9.9.324.1.1.7.1.7.3|66|61 +1.3.6.1.4.1.9.9.324.1.1.7.1.7.10|66|133 +1.3.6.1.4.1.9.9.324.1.1.7.1.8.3|66|102 +1.3.6.1.4.1.9.9.324.1.1.7.1.8.10|66|67 +1.3.6.1.4.1.9.9.324.1.1.7.1.9.3|66|55 +1.3.6.1.4.1.9.9.324.1.1.7.1.9.10|66|35 +1.3.6.1.4.1.9.9.324.1.1.7.1.10.3|66|53760 +1.3.6.1.4.1.9.9.324.1.1.7.1.10.10|66|62525 +1.3.6.1.4.1.9.9.324.1.1.7.1.11.3|2|2 +1.3.6.1.4.1.9.9.324.1.1.7.1.11.10|2|1 +1.3.6.1.4.1.9.9.324.1.1.7.1.12.3|4x|666f727761726420627574207468656972 +1.3.6.1.4.1.9.9.324.1.1.7.1.12.10|4x|627574207a6f6d62696573207a6f6d626965732064726976696e6720666f7277617264207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.324.1.1.7.1.13.3|4x|6f78656e20666f7277617264206163746564206f78656e207468656972206f78656e +1.3.6.1.4.1.9.9.324.1.1.7.1.13.10|4x|6f78656e20666f7277617264 +1.3.6.1.4.1.9.9.324.1.1.7.1.14.3|4x|62757420666f7277617264206163746564207468656972207a6f6d6269657320717561696e746c79206163746564206b657074206b657074 +1.3.6.1.4.1.9.9.324.1.1.7.1.14.10|4x|7a6f6d6269657320616374656420616374656420717561696e746c792062757420616374656420627574206163746564 +1.3.6.1.4.1.9.9.324.1.1.7.1.15.3|4x|666f7277617264206f78656e +1.3.6.1.4.1.9.9.324.1.1.7.1.15.10|4x|4a6164656420666f7277617264206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.324.1.1.7.1.16.3|2|3 +1.3.6.1.4.1.9.9.324.1.1.7.1.16.10|2|1 +1.3.6.1.4.1.9.9.324.1.1.7.1.17.3|2|4 +1.3.6.1.4.1.9.9.324.1.1.7.1.17.10|2|2 +1.3.6.1.4.1.9.9.324.1.1.7.1.18.3|4x|666f727761726420746865697220666f72776172642064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.324.1.1.7.1.18.10|4|Jaded +1.3.6.1.4.1.9.9.324.1.2.1.1.1.18.14|2|14 +1.3.6.1.4.1.9.9.324.1.2.1.1.1.26.14|2|14 +1.3.6.1.4.1.9.9.324.1.2.1.1.2.18.14|66|968784078 +1.3.6.1.4.1.9.9.324.1.2.1.1.2.26.14|66|1598367577 +1.3.6.1.4.1.9.9.324.1.2.1.1.3.18.14|66|2893057786 +1.3.6.1.4.1.9.9.324.1.2.1.1.3.26.14|66|4031602965 +1.3.6.1.4.1.9.9.324.1.2.1.1.4.18.14|66|1154560899 +1.3.6.1.4.1.9.9.324.1.2.1.1.4.26.14|66|2087239256 +1.3.6.1.4.1.9.9.324.1.2.1.1.5.18.14|66|42982 +1.3.6.1.4.1.9.9.324.1.2.1.1.5.26.14|66|52885 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.7|66|9997 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.8|66|15228 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.9|66|4850 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.12|66|8851 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.16|66|30813 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.25|66|24389 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.26|66|36264 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.27|66|4684 +1.3.6.1.4.1.9.9.388.1.2.2.1.1.28|66|16580 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.7|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.8|2|1 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.9|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.12|2|1 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.16|2|3 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.25|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.26|2|3 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.27|2|3 +1.3.6.1.4.1.9.9.388.1.2.2.1.2.28|2|2 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.7|67|2938099246 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.8|67|1742326644 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.9|67|222898566 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.12|67|41659817 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.16|67|1663224446 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.25|67|3973111650 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.26|67|736091720 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.27|67|3693310177 +1.3.6.1.4.1.9.9.388.1.2.2.1.3.28|67|1614278838 +1.3.6.1.4.1.9.9.392.1.1.1.0|2|24 +1.3.6.1.4.1.9.9.392.1.1.2.0|2|29 +1.3.6.1.4.1.9.9.392.1.1.3.0|2|5 +1.3.6.1.4.1.9.9.392.1.1.4.0|2|4 +1.3.6.1.4.1.9.9.392.1.2.1.0|66|220179290 +1.3.6.1.4.1.9.9.392.1.3.1.0|66|3080751325 +1.3.6.1.4.1.9.9.392.1.3.2.0|65|1540201027 +1.3.6.1.4.1.9.9.392.1.3.3.0|66|1805302581 +1.3.6.1.4.1.9.9.392.1.3.4.0|66|161784324 +1.3.6.1.4.1.9.9.392.1.3.5.0|70|4672136608535977512 +1.3.6.1.4.1.9.9.392.1.3.6.0|70|2893804194127754033 +1.3.6.1.4.1.9.9.392.1.3.7.0|70|6239211035010594908 +1.3.6.1.4.1.9.9.392.1.3.8.0|70|7265876306749545408 +1.3.6.1.4.1.9.9.392.1.3.9.0|70|192850609352945696 +1.3.6.1.4.1.9.9.392.1.3.10.0|70|17127455384536618658 +1.3.6.1.4.1.9.9.392.1.3.11.0|70|14460697319949409206 +1.3.6.1.4.1.9.9.392.1.3.12.0|70|6617289242687491214 +1.3.6.1.4.1.9.9.392.1.3.21.1.1.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f7277617264204a61646564206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.1.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b6570742074686569722064726976696e67207468656972204a61646564207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.21.1.2.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|7a6f6d62696573207a6f6d62696573204a61646564204a61646564207468656972206f78656e20616374656420746865697220627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.2.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|64726976696e67204a61646564204a61646564207a6f6d62696573207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.3.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|18 +1.3.6.1.4.1.9.9.392.1.3.21.1.3.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|11 +1.3.6.1.4.1.9.9.392.1.3.21.1.4.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|8 +1.3.6.1.4.1.9.9.392.1.3.21.1.4.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|7 +1.3.6.1.4.1.9.9.392.1.3.21.1.5.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.5.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|5 +1.3.6.1.4.1.9.9.392.1.3.21.1.6.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|65|1067898008 +1.3.6.1.4.1.9.9.392.1.3.21.1.6.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|65|2164050177 +1.3.6.1.4.1.9.9.392.1.3.21.1.7.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.7.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.8.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|64726976696e6720717561696e746c79206b657074207468656972204a61646564204a61646564206f78656e207468656972206f78656e +1.3.6.1.4.1.9.9.392.1.3.21.1.8.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4|Jaded +1.3.6.1.4.1.9.9.392.1.3.21.1.9.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.9.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.10.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|717561696e746c79207a6f6d62696573204a61646564204a6164656420746865697220627574206b657074 +1.3.6.1.4.1.9.9.392.1.3.21.1.10.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b657074206f78656e20717561696e746c792064726976696e6720717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.21.1.11.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|7 +1.3.6.1.4.1.9.9.392.1.3.21.1.11.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.12.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|6|1.3.6.1.3.208.49 +1.3.6.1.4.1.9.9.392.1.3.21.1.12.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|6|1.3.6.1.3.0.25.27 +1.3.6.1.4.1.9.9.392.1.3.21.1.13.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|8 +1.3.6.1.4.1.9.9.392.1.3.21.1.13.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.14.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.14.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.15.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.15.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.16.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|66|24991 +1.3.6.1.4.1.9.9.392.1.3.21.1.16.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|66|19923 +1.3.6.1.4.1.9.9.392.1.3.21.1.17.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|746865697220717561696e746c7920616374656420717561696e746c79206b65707420616374656420717561696e746c792064726976696e67206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.17.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|62757420627574206f78656e206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.18.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|717561696e746c79206163746564207468656972 +1.3.6.1.4.1.9.9.392.1.3.21.1.18.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b6570742061637465642064726976696e67206275742064726976696e67206b65707420666f7277617264 +1.3.6.1.4.1.9.9.392.1.3.21.1.19.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f727761726420746865697220666f7277617264206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.19.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6f78656e20666f727761726420717561696e746c79206163746564206b657074206f78656e +1.3.6.1.4.1.9.9.392.1.3.21.1.20.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|7a6f6d62696573206163746564206f78656e +1.3.6.1.4.1.9.9.392.1.3.21.1.20.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|666f72776172642061637465642064726976696e6720627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.21.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|16 +1.3.6.1.4.1.9.9.392.1.3.21.1.21.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|4 +1.3.6.1.4.1.9.9.392.1.3.21.1.22.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f727761726420666f7277617264207a6f6d62696573207a6f6d62696573207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.22.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|6b6570742064726976696e67207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.392.1.3.21.1.23.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|0 +1.3.6.1.4.1.9.9.392.1.3.21.1.23.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|2 +1.3.6.1.4.1.9.9.392.1.3.21.1.24.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|4a6164656420717561696e746c79 +1.3.6.1.4.1.9.9.392.1.3.21.1.24.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|4a61646564207468656972206f78656e20616374656420616374656420666f727761726420746865697220666f7277617264 +1.3.6.1.4.1.9.9.392.1.3.21.1.25.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|1 +1.3.6.1.4.1.9.9.392.1.3.21.1.25.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|16 +1.3.6.1.4.1.9.9.392.1.3.21.1.26.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|666f7277617264206b657074206f78656e206f78656e206163746564 +1.3.6.1.4.1.9.9.392.1.3.21.1.26.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|616374656420717561696e746c7920627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.27.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|16 +1.3.6.1.4.1.9.9.392.1.3.21.1.27.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|4 +1.3.6.1.4.1.9.9.392.1.3.21.1.28.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|64726976696e67207468656972207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.21.1.28.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|62757420627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.29.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|0 +1.3.6.1.4.1.9.9.392.1.3.21.1.29.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.30.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|4x|717561696e746c79206b657074 +1.3.6.1.4.1.9.9.392.1.3.21.1.30.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|4x|746865697220717561696e746c7920717561696e746c7920616374656420717561696e746c7920717561696e746c79206163746564207a6f6d6269657320627574 +1.3.6.1.4.1.9.9.392.1.3.21.1.31.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|4442691408326093793 +1.3.6.1.4.1.9.9.392.1.3.21.1.31.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|1873321696187597909 +1.3.6.1.4.1.9.9.392.1.3.21.1.32.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|6469637372671445412 +1.3.6.1.4.1.9.9.392.1.3.21.1.32.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|6712781232926100858 +1.3.6.1.4.1.9.9.392.1.3.21.1.33.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|13490210027652370573 +1.3.6.1.4.1.9.9.392.1.3.21.1.33.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|15555989303984511978 +1.3.6.1.4.1.9.9.392.1.3.21.1.34.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|12279646205639820727 +1.3.6.1.4.1.9.9.392.1.3.21.1.34.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|11056409441366507351 +1.3.6.1.4.1.9.9.392.1.3.21.1.35.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|13180762840652524543 +1.3.6.1.4.1.9.9.392.1.3.21.1.35.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|13958065058835407351 +1.3.6.1.4.1.9.9.392.1.3.21.1.36.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|70|3745449795705425282 +1.3.6.1.4.1.9.9.392.1.3.21.1.36.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|70|15681610043458202824 +1.3.6.1.4.1.9.9.392.1.3.21.1.37.19.102.111.114.119.97.114.100.32.74.97.100.101.100.32.97.99.116.101.100.18|2|3 +1.3.6.1.4.1.9.9.392.1.3.21.1.37.38.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.32.122.111.109.98.105.101.115.11|2|1 +1.3.6.1.4.1.9.9.392.1.3.22.1.1.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|4x|616374656420666f7277617264207a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.4.1.9.9.392.1.3.22.1.1.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|4x|7468656972207468656972206b6570742062757420616374656420627574206275742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.3.22.1.2.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|2 +1.3.6.1.4.1.9.9.392.1.3.22.1.2.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|2|21 +1.3.6.1.4.1.9.9.392.1.3.22.1.3.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|338143677832082857 +1.3.6.1.4.1.9.9.392.1.3.22.1.3.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|2540809463851896468 +1.3.6.1.4.1.9.9.392.1.3.22.1.4.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|9211169575499894801 +1.3.6.1.4.1.9.9.392.1.3.22.1.4.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|5889125074864305265 +1.3.6.1.4.1.9.9.392.1.3.22.1.5.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|15329032065323570335 +1.3.6.1.4.1.9.9.392.1.3.22.1.5.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|11848822181082996062 +1.3.6.1.4.1.9.9.392.1.3.22.1.6.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|9393682061551994449 +1.3.6.1.4.1.9.9.392.1.3.22.1.6.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|14553503058612069516 +1.3.6.1.4.1.9.9.392.1.3.22.1.7.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|5657946358853111387 +1.3.6.1.4.1.9.9.392.1.3.22.1.7.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|132504407579425476 +1.3.6.1.4.1.9.9.392.1.3.22.1.8.35.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|70|14359838585433121302 +1.3.6.1.4.1.9.9.392.1.3.22.1.8.50.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115|70|16427745788021119202 +1.3.6.1.4.1.9.9.392.1.3.23.0|66|3912948724 +1.3.6.1.4.1.9.9.392.1.3.24.0|65|3793567672 +1.3.6.1.4.1.9.9.392.1.3.25.0|66|24567 +1.3.6.1.4.1.9.9.392.1.3.26.0|66|4157346489 +1.3.6.1.4.1.9.9.392.1.3.27.0|65|566439668 +1.3.6.1.4.1.9.9.392.1.3.28.0|66|2035 +1.3.6.1.4.1.9.9.392.1.3.29.0|66|899294235 +1.3.6.1.4.1.9.9.392.1.3.30.0|65|2870170921 +1.3.6.1.4.1.9.9.392.1.3.31.0|66|47972 +1.3.6.1.4.1.9.9.392.1.3.32.0|66|1402819470 +1.3.6.1.4.1.9.9.392.1.3.33.0|65|552584163 +1.3.6.1.4.1.9.9.392.1.3.34.0|66|54192 +1.3.6.1.4.1.9.9.392.1.3.35.0|66|4109252783 +1.3.6.1.4.1.9.9.392.1.3.36.0|65|3375288981 +1.3.6.1.4.1.9.9.392.1.3.37.0|66|60584 +1.3.6.1.4.1.9.9.392.1.3.38.0|66|2342846144 +1.3.6.1.4.1.9.9.392.1.3.39.0|65|2612706951 +1.3.6.1.4.1.9.9.392.1.3.40.0|66|27723 +1.3.6.1.4.1.9.9.392.1.4.1.1.0|70|18308256571427912229 +1.3.6.1.4.1.9.9.392.1.4.1.2.0|66|12797 +1.3.6.1.4.1.9.9.392.1.4.1.3.0|70|18072880834846251558 +1.3.6.1.4.1.9.9.392.1.4.1.4.0|70|8998085897560354675 +1.3.6.1.4.1.9.9.392.1.4.2.1.0|66|19062 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.1.26|66|26 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.1.6794|66|6794 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.2.26|4x|717561696e746c7920666f7277617264206b657074207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.2.6794|4x|7a6f6d62696573206f78656e204a61646564204a616465642074686569722062757420666f7277617264206b657074204a61646564 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.3.26|4x|62757420666f7277617264204a61646564206275742064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.3.6794|4|Jaded +1.3.6.1.4.1.9.9.392.1.4.3.1.1.4.26|2|2 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.4.6794|2|1 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.5.26|2|3 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.5.6794|2|5 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.6.26|67|2717938161 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.6.6794|67|1576292881 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.7.26|2|20 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.7.6794|2|7 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.8.26|2|0 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.8.6794|2|1 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.9.26|4x|6b6570742064726976696e672064726976696e67207a6f6d62696573206b657074206b657074204a61646564 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.9.6794|4x|7a6f6d62696573207a6f6d6269657320627574207a6f6d62696573 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.10.26|2|0 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.10.6794|2|0 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.11.26|4x|64726976696e67206163746564 +1.3.6.1.4.1.9.9.392.1.4.3.1.1.11.6794|4x|64726976696e67206b65707420746865697220746865697220666f7277617264 +1.3.6.1.4.1.9.9.392.1.4.3.2.0|66|19587 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.1.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|4x|7a6f6d62696573207a6f6d62696573207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.1.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|4x|62757420717561696e746c7920746865697220666f727761726420717561696e746c7920666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.2.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|7705169462584045514 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.2.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|4782105877718188020 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.3.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|1208657904808146249 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.3.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|6135263682934130631 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.4.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|3212491034507665689 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.4.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|4669944071782599429 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.5.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|15487989910931679686 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.5.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|16491208374579900638 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.6.31.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103|70|14990721728316737493 +1.3.6.1.4.1.9.9.392.1.4.4.1.1.6.51.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|70|17568880258347646976 +1.3.6.1.4.1.9.9.392.1.5.1.1.0|70|16763036102461238324 +1.3.6.1.4.1.9.9.392.1.6.1.0|2|30 +1.3.6.1.4.1.9.9.392.1.6.2.0|66|10901 +1.3.6.1.4.1.9.9.392.1.6.3.0|2|3 +1.3.6.1.4.1.9.9.392.1.7.1.0|2|1 +1.3.6.1.4.1.9.9.392.1.7.2.0|2|1 +1.3.6.1.4.1.9.9.392.1.7.3.0|2|1 +1.3.6.1.4.1.9.9.500.1.2.1.1.1.21|66|23989 +1.3.6.1.4.1.9.9.500.1.2.1.1.2.21|66|64612 +1.3.6.1.4.1.9.9.500.1.2.1.1.3.21|2|4 +1.3.6.1.4.1.9.9.500.1.2.1.1.4.21|66|33053 +1.3.6.1.4.1.9.9.500.1.2.1.1.5.21|66|55695 +1.3.6.1.4.1.9.9.500.1.2.1.1.6.21|2|8 +1.3.6.1.4.1.9.9.500.1.2.1.1.7.21|4x|ffffffffffff +1.3.6.1.4.1.9.9.500.1.2.2.1.1.7|2|3 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.213.175.39.60.38.62.82.247.189 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.166.109.172.24.90.149 +1.3.6.1.6.3.1.1.6.1.0|2|3 +1.3.6.1.6.3.10.2.1.1.0|4x|6f78656e20717561696e746c79 +1.3.6.1.6.3.10.2.1.1.0|4x|64726976696e67206f78656e204a6164656420717561696e746c79 +1.3.6.1.6.3.10.2.1.2.0|2|12 +1.3.6.1.6.3.10.2.1.2.0|2|24 +1.3.6.1.6.3.10.2.1.3.0|2|4 +1.3.6.1.6.3.10.2.1.3.0|2|28 +1.3.6.1.6.3.10.2.1.4.0|2|567 +1.3.6.1.6.3.10.2.1.4.0|2|763 diff --git a/test/new-e2e/ndm/snmp/compose/data/cisco-catalyst.snmprec b/test/new-e2e/ndm/snmp/compose/data/cisco-catalyst.snmprec new file mode 100644 index 0000000000000..884066b6c7103 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/cisco-catalyst.snmprec @@ -0,0 +1,136 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.1.241 +1.3.6.1.2.1.1.3.0|67|1727368662 +1.3.6.1.2.1.1.5.0|4|catalyst-6000.example +1.3.6.1.2.1.31.1.1.1.1.2|4|Nu0 +1.3.6.1.2.1.31.1.1.1.1.8|4x|4769312f302f36 +1.3.6.1.2.1.31.1.1.1.1.12|4x|4769312f302f3130 +1.3.6.1.2.1.31.1.1.1.1.13|4x|4769312f302f3132 +1.3.6.1.2.1.31.1.1.1.1.20|4x|4769312f302f3138 +1.3.6.1.2.1.31.1.1.1.1.24|4x|4769312f302f3232 +1.3.6.1.2.1.31.1.1.1.1.27|4x|4769312f302f3235 +1.3.6.1.2.1.31.1.1.1.1.29|4x|4769312f302f3237 +1.3.6.1.4.1.9.5.1.2.19.0|4|SCA044001J9 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.5|2|10 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.9|2|10 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.5|2|13 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.9|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.5|2|5 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.9|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.5|2|23 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.9|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.5|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.9|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.5|67|1049691128 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.9|67|1263170302 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.5|2|14 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.9|2|9 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.5|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.9|2|13 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.1001|2|0 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.1010|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.2001|2|0 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.2010|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.1001|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.1010|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.2001|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.2010|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.1001|2|0 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.1010|2|0 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.2001|2|0 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.2010|2|0 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.2|66|3212285088 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.8|66|2549745875 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.12|66|1593634447 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.13|66|808029871 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.20|66|2834780680 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.24|66|143097770 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.27|66|1054270666 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.29|66|2115594198 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.2|66|3654206285 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.8|66|3471768262 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.12|66|4114631259 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.13|66|2572660324 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.20|66|881502462 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.24|66|3928182588 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.27|66|864463746 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.29|66|2794940018 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.2|66|2070214205 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.8|66|3056100498 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.12|66|2504461818 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.13|66|3933035197 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.20|66|452554532 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.24|66|1461380713 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.27|66|175693990 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.29|66|3240655547 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.2|65|228010741 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.8|65|206579581 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.12|65|3921291878 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.13|65|1783596833 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.20|65|1665500425 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.24|65|1143836242 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.27|65|1922821796 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.29|65|2001716681 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.2|65|1142461627 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.8|65|3059551836 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.12|65|2180426153 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.13|65|4168917597 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.20|65|2348485051 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.24|65|3885252847 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.27|65|430313909 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.29|65|1040929562 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.2|65|820404054 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.8|65|2842996488 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.12|65|516627181 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.13|65|3834958484 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.20|65|4008809623 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.24|65|1591458481 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.27|65|987592255 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.29|65|4091757079 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.2|65|2654913472 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.8|65|3445531903 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.12|65|2714831435 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.13|65|1451987827 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.20|65|2047943866 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.24|65|2557121706 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.27|65|3780408747 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.29|65|2637888044 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.2|65|1180282382 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.8|65|2061646443 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.12|65|3785685086 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.13|65|25718795 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.20|65|3804634205 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.24|65|3264052307 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.27|65|172763145 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.29|65|427550293 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.2|65|729797820 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.8|65|1936660647 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.12|65|3798824095 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.13|65|2468750642 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.20|65|3659844688 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.24|65|1351841532 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.27|65|1979532859 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.29|65|1661918307 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.2|65|4142247954 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.8|65|3001638507 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.12|65|3472759966 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.13|65|2231231366 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.20|65|1172731832 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.24|65|799128435 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.27|65|2659811954 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.29|65|3387896804 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.2|65|4250585048 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.8|65|3784229221 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.12|65|3972327928 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.13|65|3829663665 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.20|65|3862025380 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.24|65|3173505921 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.27|65|4149481903 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.29|65|2691284812 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.2|67|3232838669 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.8|67|3707696379 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.12|67|2247655666 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.13|67|1190980479 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.20|67|1427024890 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.24|67|2179332826 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.27|67|1567995511 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.29|67|1679558187 diff --git a/test/new-e2e/ndm/snmp/compose/data/cisco-csr1000v.snmprec b/test/new-e2e/ndm/snmp/compose/data/cisco-csr1000v.snmprec new file mode 100644 index 0000000000000..72ab8517133a7 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/cisco-csr1000v.snmprec @@ -0,0 +1,24 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.1.1537 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 diff --git a/test/new-e2e/ndm/snmp/compose/data/cisco-nexus.snmprec b/test/new-e2e/ndm/snmp/compose/data/cisco-nexus.snmprec new file mode 100644 index 0000000000000..e54bcb1130768 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/cisco-nexus.snmprec @@ -0,0 +1,3275 @@ +1.3.6.1.2.1.1.1.0|4x|6f78656e20616374656420627574206163746564206b657074 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.12.3.1.3.1.2 +1.3.6.1.2.1.1.3.0|67|1727368662 +1.3.6.1.2.1.1.4.0|4|acted +1.3.6.1.2.1.1.5.0|4x|4e657875732d6575312e636f6d70616e796e616d652e6d616e61676564 +1.3.6.1.2.1.1.6.0|4x|627574206b657074204a6164656420746865697220627574206b65707420717561696e746c792064726976696e67207468656972 +1.3.6.1.2.1.1.7.0|2|9 +1.3.6.1.2.1.1.8.0|67|3680163691 +1.3.6.1.2.1.1.9.1.1.1|2|1 +1.3.6.1.2.1.1.9.1.1.3|2|3 +1.3.6.1.2.1.1.9.1.1.9|2|9 +1.3.6.1.2.1.1.9.1.1.11|2|11 +1.3.6.1.2.1.1.9.1.1.15|2|15 +1.3.6.1.2.1.1.9.1.1.16|2|16 +1.3.6.1.2.1.1.9.1.1.18|2|18 +1.3.6.1.2.1.1.9.1.1.20|2|20 +1.3.6.1.2.1.1.9.1.1.21|2|21 +1.3.6.1.2.1.1.9.1.1.24|2|24 +1.3.6.1.2.1.1.9.1.2.1|6|1.3.6.1.3.164.198.69.240.83.26.70 +1.3.6.1.2.1.1.9.1.2.3|6|1.3.6.1.3 +1.3.6.1.2.1.1.9.1.2.9|6|1.3.6.1.3.129.98.33.156 +1.3.6.1.2.1.1.9.1.2.11|6|1.3.6.1.3.45.170.49.172 +1.3.6.1.2.1.1.9.1.2.15|6|1.3.6.1.3.218.227.133.165.158.83 +1.3.6.1.2.1.1.9.1.2.16|6|1.3.6.1.3.38.4.57.45.113.219.22 +1.3.6.1.2.1.1.9.1.2.18|6|1.3.6.1.3.212.88.17.14.129 +1.3.6.1.2.1.1.9.1.2.20|6|1.3.6.1.3.221 +1.3.6.1.2.1.1.9.1.2.21|6|1.3.6.1.3.144.52 +1.3.6.1.2.1.1.9.1.2.24|6|1.3.6.1.3.159.1 +1.3.6.1.2.1.1.9.1.3.1|4x|6f78656e204a6164656420616374656420666f72776172642064726976696e6720717561696e746c7920717561696e746c79 +1.3.6.1.2.1.1.9.1.3.3|4x|627574204a6164656420666f72776172642064726976696e6720616374656420616374656420717561696e746c79206f78656e +1.3.6.1.2.1.1.9.1.3.9|4x|4a61646564207468656972207a6f6d6269657320627574206b657074207a6f6d62696573207468656972 +1.3.6.1.2.1.1.9.1.3.11|4x|64726976696e67206b657074206163746564204a616465642064726976696e6720717561696e746c792074686569722064726976696e67 +1.3.6.1.2.1.1.9.1.3.15|4|but +1.3.6.1.2.1.1.9.1.3.16|4x|7a6f6d626965732074686569722064726976696e672062757420666f7277617264204a61646564206b6570742064726976696e67204a61646564 +1.3.6.1.2.1.1.9.1.3.18|4|their +1.3.6.1.2.1.1.9.1.3.20|4x|62757420627574204a6164656420666f7277617264206163746564204a61646564207a6f6d6269657320627574204a61646564 +1.3.6.1.2.1.1.9.1.3.21|4x|4a61646564204a61646564206f78656e206163746564 +1.3.6.1.2.1.1.9.1.3.24|4|driving +1.3.6.1.2.1.1.9.1.4.1|67|1695851488 +1.3.6.1.2.1.1.9.1.4.3|67|3741814296 +1.3.6.1.2.1.1.9.1.4.9|67|780686098 +1.3.6.1.2.1.1.9.1.4.11|67|4058878359 +1.3.6.1.2.1.1.9.1.4.15|67|2547376430 +1.3.6.1.2.1.1.9.1.4.16|67|2644545445 +1.3.6.1.2.1.1.9.1.4.18|67|2083688378 +1.3.6.1.2.1.1.9.1.4.20|67|663477043 +1.3.6.1.2.1.1.9.1.4.21|67|3245404876 +1.3.6.1.2.1.1.9.1.4.24|67|278147560 +1.3.6.1.2.1.2.1.0|2|0 +1.3.6.1.2.1.2.2.1.1.1|2|1 +1.3.6.1.2.1.2.2.1.1.5|2|5 +1.3.6.1.2.1.2.2.1.1.6|2|6 +1.3.6.1.2.1.2.2.1.1.7|2|7 +1.3.6.1.2.1.2.2.1.1.14|2|14 +1.3.6.1.2.1.2.2.1.1.19|2|19 +1.3.6.1.2.1.2.2.1.1.23|2|23 +1.3.6.1.2.1.2.2.1.1.28|2|28 +1.3.6.1.2.1.2.2.1.1.30|2|30 +1.3.6.1.2.1.2.2.1.1.31|2|31 +1.3.6.1.2.1.2.2.1.2.2|4x|4769676162697445746865726e6574312f302f31 +1.3.6.1.2.1.2.2.1.2.13|4x|4769676162697445746865726e6574312f302f32 +1.3.6.1.2.1.2.2.1.2.20|4x|4769676162697445746865726e6574312f302f33 +1.3.6.1.2.1.2.2.1.2.22|4x|4769676162697445746865726e6574312f302f34 +1.3.6.1.2.1.2.2.1.2.23|4x|4769676162697445746865726e6574312f302f35 +1.3.6.1.2.1.2.2.1.2.25|4x|4769676162697445746865726e6574312f302f36 +1.3.6.1.2.1.2.2.1.2.29|4x|4769676162697445746865726e6574312f302f37 +1.3.6.1.2.1.2.2.1.2.30|4x|4769676162697445746865726e6574312f302f38 +1.3.6.1.2.1.2.2.1.3.1|2|9 +1.3.6.1.2.1.2.2.1.3.5|2|1 +1.3.6.1.2.1.2.2.1.3.6|2|2 +1.3.6.1.2.1.2.2.1.3.7|2|23 +1.3.6.1.2.1.2.2.1.3.14|2|3 +1.3.6.1.2.1.2.2.1.3.19|2|30 +1.3.6.1.2.1.2.2.1.3.23|2|8 +1.3.6.1.2.1.2.2.1.3.28|2|15 +1.3.6.1.2.1.2.2.1.3.30|2|13 +1.3.6.1.2.1.2.2.1.3.31|2|28 +1.3.6.1.2.1.2.2.1.4.1|2|25 +1.3.6.1.2.1.2.2.1.4.5|2|7 +1.3.6.1.2.1.2.2.1.4.6|2|10 +1.3.6.1.2.1.2.2.1.4.7|2|17 +1.3.6.1.2.1.2.2.1.4.14|2|23 +1.3.6.1.2.1.2.2.1.4.19|2|27 +1.3.6.1.2.1.2.2.1.4.23|2|17 +1.3.6.1.2.1.2.2.1.4.28|2|21 +1.3.6.1.2.1.2.2.1.4.30|2|21 +1.3.6.1.2.1.2.2.1.4.31|2|25 +1.3.6.1.2.1.2.2.1.5.2|66|22 +1.3.6.1.2.1.2.2.1.5.13|66|31 +1.3.6.1.2.1.2.2.1.5.20|66|92 +1.3.6.1.2.1.2.2.1.5.22|66|34 +1.3.6.1.2.1.2.2.1.5.23|66|78 +1.3.6.1.2.1.2.2.1.5.25|66|28 +1.3.6.1.2.1.2.2.1.5.29|66|85 +1.3.6.1.2.1.2.2.1.5.30|66|41 +1.3.6.1.2.1.2.2.1.6.1|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.5|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.6|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.7|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.14|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.19|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.23|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.28|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.30|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.31|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.7.2|2|1 +1.3.6.1.2.1.2.2.1.7.13|2|2 +1.3.6.1.2.1.2.2.1.7.20|2|2 +1.3.6.1.2.1.2.2.1.7.22|2|1 +1.3.6.1.2.1.2.2.1.7.23|2|1 +1.3.6.1.2.1.2.2.1.7.25|2|1 +1.3.6.1.2.1.2.2.1.7.29|2|3 +1.3.6.1.2.1.2.2.1.7.30|2|2 +1.3.6.1.2.1.2.2.1.8.2|2|3 +1.3.6.1.2.1.2.2.1.8.13|2|2 +1.3.6.1.2.1.2.2.1.8.20|2|3 +1.3.6.1.2.1.2.2.1.8.22|2|5 +1.3.6.1.2.1.2.2.1.8.23|2|6 +1.3.6.1.2.1.2.2.1.8.25|2|1 +1.3.6.1.2.1.2.2.1.8.29|2|1 +1.3.6.1.2.1.2.2.1.8.30|2|6 +1.3.6.1.2.1.2.2.1.9.1|67|46974653 +1.3.6.1.2.1.2.2.1.9.5|67|3524906906 +1.3.6.1.2.1.2.2.1.9.6|67|1854085230 +1.3.6.1.2.1.2.2.1.9.7|67|2589243966 +1.3.6.1.2.1.2.2.1.9.14|67|1415836515 +1.3.6.1.2.1.2.2.1.9.19|67|3494681791 +1.3.6.1.2.1.2.2.1.9.23|67|73477284 +1.3.6.1.2.1.2.2.1.9.28|67|1193030203 +1.3.6.1.2.1.2.2.1.9.30|67|2010077956 +1.3.6.1.2.1.2.2.1.9.31|67|1672264105 +1.3.6.1.2.1.2.2.1.10.1|65|1882003004 +1.3.6.1.2.1.2.2.1.10.5|65|3385985368 +1.3.6.1.2.1.2.2.1.10.6|65|1115476981 +1.3.6.1.2.1.2.2.1.10.7|65|1168361537 +1.3.6.1.2.1.2.2.1.10.14|65|190722488 +1.3.6.1.2.1.2.2.1.10.19|65|3080937116 +1.3.6.1.2.1.2.2.1.10.23|65|2718244281 +1.3.6.1.2.1.2.2.1.10.28|65|1148208774 +1.3.6.1.2.1.2.2.1.10.30|65|618533489 +1.3.6.1.2.1.2.2.1.10.31|65|2503484251 +1.3.6.1.2.1.2.2.1.11.1|65|3496478306 +1.3.6.1.2.1.2.2.1.11.5|65|3410705023 +1.3.6.1.2.1.2.2.1.11.6|65|1796554451 +1.3.6.1.2.1.2.2.1.11.7|65|159541309 +1.3.6.1.2.1.2.2.1.11.14|65|1411862423 +1.3.6.1.2.1.2.2.1.11.19|65|4038679469 +1.3.6.1.2.1.2.2.1.11.23|65|3764171114 +1.3.6.1.2.1.2.2.1.11.28|65|4134622941 +1.3.6.1.2.1.2.2.1.11.30|65|3073594124 +1.3.6.1.2.1.2.2.1.11.31|65|1098762737 +1.3.6.1.2.1.2.2.1.12.1|65|3333721855 +1.3.6.1.2.1.2.2.1.12.5|65|4260137392 +1.3.6.1.2.1.2.2.1.12.6|65|4223847667 +1.3.6.1.2.1.2.2.1.12.7|65|1649342798 +1.3.6.1.2.1.2.2.1.12.14|65|1747369486 +1.3.6.1.2.1.2.2.1.12.19|65|1451002237 +1.3.6.1.2.1.2.2.1.12.23|65|1750393128 +1.3.6.1.2.1.2.2.1.12.28|65|2086509258 +1.3.6.1.2.1.2.2.1.12.30|65|196517694 +1.3.6.1.2.1.2.2.1.12.31|65|2969815192 +1.3.6.1.2.1.2.2.1.13.2|65|2241689204 +1.3.6.1.2.1.2.2.1.13.13|65|4175033535 +1.3.6.1.2.1.2.2.1.13.20|65|1078726538 +1.3.6.1.2.1.2.2.1.13.22|65|1338010120 +1.3.6.1.2.1.2.2.1.13.23|65|3184652116 +1.3.6.1.2.1.2.2.1.13.25|65|537113987 +1.3.6.1.2.1.2.2.1.13.29|65|1725293067 +1.3.6.1.2.1.2.2.1.13.30|65|3185732570 +1.3.6.1.2.1.2.2.1.14.2|65|2672375192 +1.3.6.1.2.1.2.2.1.14.13|65|663057221 +1.3.6.1.2.1.2.2.1.14.20|65|3514419006 +1.3.6.1.2.1.2.2.1.14.22|65|4122938877 +1.3.6.1.2.1.2.2.1.14.23|65|2634101757 +1.3.6.1.2.1.2.2.1.14.25|65|3854692160 +1.3.6.1.2.1.2.2.1.14.29|65|1620889538 +1.3.6.1.2.1.2.2.1.14.30|65|165871928 +1.3.6.1.2.1.2.2.1.15.1|65|4195285301 +1.3.6.1.2.1.2.2.1.15.5|65|1431612784 +1.3.6.1.2.1.2.2.1.15.6|65|543505378 +1.3.6.1.2.1.2.2.1.15.7|65|1976142234 +1.3.6.1.2.1.2.2.1.15.14|65|3674813791 +1.3.6.1.2.1.2.2.1.15.19|65|3004007008 +1.3.6.1.2.1.2.2.1.15.23|65|3326039872 +1.3.6.1.2.1.2.2.1.15.28|65|725344437 +1.3.6.1.2.1.2.2.1.15.30|65|1593318352 +1.3.6.1.2.1.2.2.1.15.31|65|2012521445 +1.3.6.1.2.1.2.2.1.16.1|65|2185729508 +1.3.6.1.2.1.2.2.1.16.5|65|1981888745 +1.3.6.1.2.1.2.2.1.16.6|65|1069282708 +1.3.6.1.2.1.2.2.1.16.7|65|1089537527 +1.3.6.1.2.1.2.2.1.16.14|65|1592695357 +1.3.6.1.2.1.2.2.1.16.19|65|1048940037 +1.3.6.1.2.1.2.2.1.16.23|65|1467394219 +1.3.6.1.2.1.2.2.1.16.28|65|691822583 +1.3.6.1.2.1.2.2.1.16.30|65|1511086565 +1.3.6.1.2.1.2.2.1.16.31|65|1796032263 +1.3.6.1.2.1.2.2.1.17.1|65|3702458710 +1.3.6.1.2.1.2.2.1.17.5|65|1144326488 +1.3.6.1.2.1.2.2.1.17.6|65|755364319 +1.3.6.1.2.1.2.2.1.17.7|65|2989385220 +1.3.6.1.2.1.2.2.1.17.14|65|3953952011 +1.3.6.1.2.1.2.2.1.17.19|65|3083592819 +1.3.6.1.2.1.2.2.1.17.23|65|322682189 +1.3.6.1.2.1.2.2.1.17.28|65|751481754 +1.3.6.1.2.1.2.2.1.17.30|65|1572646496 +1.3.6.1.2.1.2.2.1.17.31|65|1001871605 +1.3.6.1.2.1.2.2.1.18.1|65|3805912207 +1.3.6.1.2.1.2.2.1.18.5|65|3052655381 +1.3.6.1.2.1.2.2.1.18.6|65|1060694077 +1.3.6.1.2.1.2.2.1.18.7|65|1178885167 +1.3.6.1.2.1.2.2.1.18.14|65|146095067 +1.3.6.1.2.1.2.2.1.18.19|65|3416577638 +1.3.6.1.2.1.2.2.1.18.23|65|154936189 +1.3.6.1.2.1.2.2.1.18.28|65|1338060249 +1.3.6.1.2.1.2.2.1.18.30|65|3812251620 +1.3.6.1.2.1.2.2.1.18.31|65|1846042920 +1.3.6.1.2.1.2.2.1.19.2|65|642166389 +1.3.6.1.2.1.2.2.1.19.13|65|3466819068 +1.3.6.1.2.1.2.2.1.19.20|65|646965121 +1.3.6.1.2.1.2.2.1.19.22|65|2275903126 +1.3.6.1.2.1.2.2.1.19.23|65|3412605861 +1.3.6.1.2.1.2.2.1.19.25|65|2646666505 +1.3.6.1.2.1.2.2.1.19.29|65|1387261523 +1.3.6.1.2.1.2.2.1.19.30|65|2609115879 +1.3.6.1.2.1.2.2.1.20.2|65|4148611609 +1.3.6.1.2.1.2.2.1.20.13|65|3724140174 +1.3.6.1.2.1.2.2.1.20.20|65|3028781023 +1.3.6.1.2.1.2.2.1.20.22|65|2087642655 +1.3.6.1.2.1.2.2.1.20.23|65|3915779502 +1.3.6.1.2.1.2.2.1.20.25|65|3902137000 +1.3.6.1.2.1.2.2.1.20.29|65|3262403811 +1.3.6.1.2.1.2.2.1.20.30|65|4238703132 +1.3.6.1.2.1.2.2.1.21.1|66|82 +1.3.6.1.2.1.2.2.1.21.5|66|57 +1.3.6.1.2.1.2.2.1.21.6|66|93 +1.3.6.1.2.1.2.2.1.21.7|66|63 +1.3.6.1.2.1.2.2.1.21.14|66|24 +1.3.6.1.2.1.2.2.1.21.19|66|26 +1.3.6.1.2.1.2.2.1.21.23|66|80 +1.3.6.1.2.1.2.2.1.21.28|66|80 +1.3.6.1.2.1.2.2.1.21.30|66|19 +1.3.6.1.2.1.2.2.1.21.31|66|50 +1.3.6.1.2.1.2.2.1.22.1|6|1.3.6.1.3.45.147.101.228.214 +1.3.6.1.2.1.2.2.1.22.5|6|1.3.6.1.3.45 +1.3.6.1.2.1.2.2.1.22.6|6|1.3.6.1.3.48 +1.3.6.1.2.1.2.2.1.22.7|6|1.3.6.1.3 +1.3.6.1.2.1.2.2.1.22.14|6|1.3.6.1.3.156.196.167.160.176.17.112.48.166 +1.3.6.1.2.1.2.2.1.22.19|6|1.3.6.1.3.133.100.137.5 +1.3.6.1.2.1.2.2.1.22.23|6|1.3.6.1.3.196.82 +1.3.6.1.2.1.2.2.1.22.28|6|1.3.6.1.3.77.239.236 +1.3.6.1.2.1.2.2.1.22.30|6|1.3.6.1.3.47.232.249.83 +1.3.6.1.2.1.2.2.1.22.31|6|1.3.6.1.3.68.173.9.55.66.221.65.82 +1.3.6.1.2.1.6.1.0|2|4 +1.3.6.1.2.1.6.2.0|2|19 +1.3.6.1.2.1.6.3.0|2|13 +1.3.6.1.2.1.6.4.0|2|14 +1.3.6.1.2.1.6.5.0|65|3495703086 +1.3.6.1.2.1.6.6.0|65|372085797 +1.3.6.1.2.1.6.7.0|65|341719439 +1.3.6.1.2.1.6.8.0|65|3777519670 +1.3.6.1.2.1.6.9.0|66|72 +1.3.6.1.2.1.6.10.0|65|3212468096 +1.3.6.1.2.1.6.11.0|65|1506985444 +1.3.6.1.2.1.6.12.0|65|1004422298 +1.3.6.1.2.1.6.13.1.1.19.192.194.138.30.197.116.181.203.19|2|5 +1.3.6.1.2.1.6.13.1.1.49.212.70.37.27.99.156.38.80.20|2|6 +1.3.6.1.2.1.6.13.1.1.63.202.33.95.3.150.24.202.206.14|2|1 +1.3.6.1.2.1.6.13.1.1.75.220.11.81.3.75.157.192.44.26|2|11 +1.3.6.1.2.1.6.13.1.1.78.176.81.126.21.98.39.62.222.12|2|11 +1.3.6.1.2.1.6.13.1.1.162.10.255.161.23.83.77.198.1.22|2|10 +1.3.6.1.2.1.6.13.1.1.194.43.197.151.15.102.149.131.169.1|2|9 +1.3.6.1.2.1.6.13.1.1.201.4.229.174.6.121.8.120.60.9|2|1 +1.3.6.1.2.1.6.13.1.1.232.232.12.248.30.180.112.159.204.23|2|6 +1.3.6.1.2.1.6.13.1.1.241.83.234.94.1.27.228.22.177.14|2|11 +1.3.6.1.2.1.6.13.1.2.19.192.194.138.30.197.116.181.203.19|64x|13c0c28a +1.3.6.1.2.1.6.13.1.2.49.212.70.37.27.99.156.38.80.20|64x|31d44625 +1.3.6.1.2.1.6.13.1.2.63.202.33.95.3.150.24.202.206.14|64x|3fca215f +1.3.6.1.2.1.6.13.1.2.75.220.11.81.3.75.157.192.44.26|64x|4bdc0b51 +1.3.6.1.2.1.6.13.1.2.78.176.81.126.21.98.39.62.222.12|64x|4eb0517e +1.3.6.1.2.1.6.13.1.2.162.10.255.161.23.83.77.198.1.22|64x|a20affa1 +1.3.6.1.2.1.6.13.1.2.194.43.197.151.15.102.149.131.169.1|64x|c22bc597 +1.3.6.1.2.1.6.13.1.2.201.4.229.174.6.121.8.120.60.9|64x|c904e5ae +1.3.6.1.2.1.6.13.1.2.232.232.12.248.30.180.112.159.204.23|64x|e8e80cf8 +1.3.6.1.2.1.6.13.1.2.241.83.234.94.1.27.228.22.177.14|64x|f153ea5e +1.3.6.1.2.1.6.13.1.3.19.192.194.138.30.197.116.181.203.19|2|30 +1.3.6.1.2.1.6.13.1.3.49.212.70.37.27.99.156.38.80.20|2|27 +1.3.6.1.2.1.6.13.1.3.63.202.33.95.3.150.24.202.206.14|2|3 +1.3.6.1.2.1.6.13.1.3.75.220.11.81.3.75.157.192.44.26|2|3 +1.3.6.1.2.1.6.13.1.3.78.176.81.126.21.98.39.62.222.12|2|21 +1.3.6.1.2.1.6.13.1.3.162.10.255.161.23.83.77.198.1.22|2|23 +1.3.6.1.2.1.6.13.1.3.194.43.197.151.15.102.149.131.169.1|2|15 +1.3.6.1.2.1.6.13.1.3.201.4.229.174.6.121.8.120.60.9|2|6 +1.3.6.1.2.1.6.13.1.3.232.232.12.248.30.180.112.159.204.23|2|30 +1.3.6.1.2.1.6.13.1.3.241.83.234.94.1.27.228.22.177.14|2|1 +1.3.6.1.2.1.6.13.1.4.19.192.194.138.30.197.116.181.203.19|64x|c574b5cb +1.3.6.1.2.1.6.13.1.4.49.212.70.37.27.99.156.38.80.20|64x|639c2650 +1.3.6.1.2.1.6.13.1.4.63.202.33.95.3.150.24.202.206.14|64x|9618cace +1.3.6.1.2.1.6.13.1.4.75.220.11.81.3.75.157.192.44.26|64x|4b9dc02c +1.3.6.1.2.1.6.13.1.4.78.176.81.126.21.98.39.62.222.12|64x|62273ede +1.3.6.1.2.1.6.13.1.4.162.10.255.161.23.83.77.198.1.22|64x|534dc601 +1.3.6.1.2.1.6.13.1.4.194.43.197.151.15.102.149.131.169.1|64x|669583a9 +1.3.6.1.2.1.6.13.1.4.201.4.229.174.6.121.8.120.60.9|64x|7908783c +1.3.6.1.2.1.6.13.1.4.232.232.12.248.30.180.112.159.204.23|64x|b4709fcc +1.3.6.1.2.1.6.13.1.4.241.83.234.94.1.27.228.22.177.14|64x|1be416b1 +1.3.6.1.2.1.6.13.1.5.19.192.194.138.30.197.116.181.203.19|2|19 +1.3.6.1.2.1.6.13.1.5.49.212.70.37.27.99.156.38.80.20|2|20 +1.3.6.1.2.1.6.13.1.5.63.202.33.95.3.150.24.202.206.14|2|14 +1.3.6.1.2.1.6.13.1.5.75.220.11.81.3.75.157.192.44.26|2|26 +1.3.6.1.2.1.6.13.1.5.78.176.81.126.21.98.39.62.222.12|2|12 +1.3.6.1.2.1.6.13.1.5.162.10.255.161.23.83.77.198.1.22|2|22 +1.3.6.1.2.1.6.13.1.5.194.43.197.151.15.102.149.131.169.1|2|1 +1.3.6.1.2.1.6.13.1.5.201.4.229.174.6.121.8.120.60.9|2|9 +1.3.6.1.2.1.6.13.1.5.232.232.12.248.30.180.112.159.204.23|2|23 +1.3.6.1.2.1.6.13.1.5.241.83.234.94.1.27.228.22.177.14|2|14 +1.3.6.1.2.1.6.14.0|65|1656807085 +1.3.6.1.2.1.6.15.0|65|209366602 +1.3.6.1.2.1.6.17.0|70|10836309735518636992 +1.3.6.1.2.1.6.18.0|70|6643493366038592398 +1.3.6.1.2.1.6.19.1.1.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|2|0 +1.3.6.1.2.1.6.19.1.1.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|2|0 +1.3.6.1.2.1.6.19.1.1.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|2|0 +1.3.6.1.2.1.6.19.1.1.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|2|1 +1.3.6.1.2.1.6.19.1.1.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|2|1 +1.3.6.1.2.1.6.19.1.1.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|2|2 +1.3.6.1.2.1.6.19.1.1.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|2|3 +1.3.6.1.2.1.6.19.1.1.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|2|3 +1.3.6.1.2.1.6.19.1.1.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|2|16 +1.3.6.1.2.1.6.19.1.1.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|2|16 +1.3.6.1.2.1.6.19.1.2.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|4x|62757420666f72776172642064726976696e672064726976696e67 +1.3.6.1.2.1.6.19.1.2.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|4x|6163746564207a6f6d6269657320717561696e746c79206275742064726976696e6720717561696e746c79 +1.3.6.1.2.1.6.19.1.2.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|4x|746865697220666f72776172642074686569722074686569722064726976696e672074686569722064726976696e67206f78656e206f78656e +1.3.6.1.2.1.6.19.1.2.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|4x|64726976696e67206b657074207a6f6d6269657320666f7277617264204a61646564206b65707420746865697220627574 +1.3.6.1.2.1.6.19.1.2.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|4x|666f7277617264207a6f6d626965732062757420666f727761726420666f727761726420666f727761726420666f7277617264 +1.3.6.1.2.1.6.19.1.2.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|4|driving +1.3.6.1.2.1.6.19.1.2.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|4|oxen +1.3.6.1.2.1.6.19.1.2.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|4x|64726976696e672064726976696e6720717561696e746c79206f78656e207468656972204a61646564 +1.3.6.1.2.1.6.19.1.2.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|4x|4a61646564207a6f6d62696573207a6f6d62696573 +1.3.6.1.2.1.6.19.1.2.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|4x|6163746564207a6f6d62696573207468656972207468656972 +1.3.6.1.2.1.6.19.1.3.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|66|98 +1.3.6.1.2.1.6.19.1.3.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|66|19488 +1.3.6.1.2.1.6.19.1.3.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|66|13300 +1.3.6.1.2.1.6.19.1.3.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|66|61978 +1.3.6.1.2.1.6.19.1.3.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|66|65208 +1.3.6.1.2.1.6.19.1.3.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|66|34220 +1.3.6.1.2.1.6.19.1.3.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|66|62943 +1.3.6.1.2.1.6.19.1.3.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|66|58514 +1.3.6.1.2.1.6.19.1.3.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|66|50515 +1.3.6.1.2.1.6.19.1.3.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|66|60547 +1.3.6.1.2.1.6.19.1.4.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|2|0 +1.3.6.1.2.1.6.19.1.4.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|2|2 +1.3.6.1.2.1.6.19.1.4.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|2|0 +1.3.6.1.2.1.6.19.1.4.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|2|3 +1.3.6.1.2.1.6.19.1.4.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|2|16 +1.3.6.1.2.1.6.19.1.4.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|2|3 +1.3.6.1.2.1.6.19.1.4.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|2|2 +1.3.6.1.2.1.6.19.1.4.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|2|16 +1.3.6.1.2.1.6.19.1.4.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|2|2 +1.3.6.1.2.1.6.19.1.4.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|2|16 +1.3.6.1.2.1.6.19.1.5.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|4x|6b6570742064726976696e672064726976696e672064726976696e67206b657074206f78656e20666f7277617264206b657074 +1.3.6.1.2.1.6.19.1.5.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|4x|616374656420666f72776172642064726976696e67204a61646564207a6f6d626965732062757420627574 +1.3.6.1.2.1.6.19.1.5.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|4x|64726976696e6720746865697220666f72776172642064726976696e67 +1.3.6.1.2.1.6.19.1.5.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|4x|6163746564206163746564204a61646564206f78656e207a6f6d62696573207468656972206b657074206b657074 +1.3.6.1.2.1.6.19.1.5.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|4x|717561696e746c79207468656972 +1.3.6.1.2.1.6.19.1.5.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|4|forward +1.3.6.1.2.1.6.19.1.5.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|4x|4a616465642062757420717561696e746c79206163746564 +1.3.6.1.2.1.6.19.1.5.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|4x|666f7277617264206b65707420627574206b657074 +1.3.6.1.2.1.6.19.1.5.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|4x|4a61646564206163746564206b65707420627574206163746564207468656972 +1.3.6.1.2.1.6.19.1.5.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|4x|64726976696e6720666f7277617264207a6f6d62696573206163746564 +1.3.6.1.2.1.6.19.1.6.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|66|30876 +1.3.6.1.2.1.6.19.1.6.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|66|62320 +1.3.6.1.2.1.6.19.1.6.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|66|54623 +1.3.6.1.2.1.6.19.1.6.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|66|48165 +1.3.6.1.2.1.6.19.1.6.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|66|41084 +1.3.6.1.2.1.6.19.1.6.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|66|45017 +1.3.6.1.2.1.6.19.1.6.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|66|57404 +1.3.6.1.2.1.6.19.1.6.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|66|54370 +1.3.6.1.2.1.6.19.1.6.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|66|28244 +1.3.6.1.2.1.6.19.1.6.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|66|56793 +1.3.6.1.2.1.6.19.1.7.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|2|9 +1.3.6.1.2.1.6.19.1.7.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|2|4 +1.3.6.1.2.1.6.19.1.7.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|2|1 +1.3.6.1.2.1.6.19.1.7.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|2|7 +1.3.6.1.2.1.6.19.1.7.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|2|9 +1.3.6.1.2.1.6.19.1.7.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|2|9 +1.3.6.1.2.1.6.19.1.7.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|2|1 +1.3.6.1.2.1.6.19.1.7.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|2|8 +1.3.6.1.2.1.6.19.1.7.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|2|3 +1.3.6.1.2.1.6.19.1.7.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|2|5 +1.3.6.1.2.1.6.19.1.8.0.27.98.117.116.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.98.0.51.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.32.107.101.112.116.30876|66|11494 +1.3.6.1.2.1.6.19.1.8.0.43.97.99.116.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.98.117.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.19488.2.43.97.99.116.101.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.98.117.116.62320|66|19833 +1.3.6.1.2.1.6.19.1.8.0.57.116.104.101.105.114.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.13300.0.29.100.114.105.118.105.110.103.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.54623|66|20375 +1.3.6.1.2.1.6.19.1.8.1.49.100.114.105.118.105.110.103.32.107.101.112.116.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.116.104.101.105.114.32.98.117.116.61978.3.46.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.48165|66|36316 +1.3.6.1.2.1.6.19.1.8.1.51.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.65208.16.14.113.117.97.105.110.116.108.121.32.116.104.101.105.114.41084|66|14994 +1.3.6.1.2.1.6.19.1.8.2.7.100.114.105.118.105.110.103.34220.3.7.102.111.114.119.97.114.100.45017|66|61477 +1.3.6.1.2.1.6.19.1.8.3.4.111.120.101.110.62943.2.24.74.97.100.101.100.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.57404|66|20102 +1.3.6.1.2.1.6.19.1.8.3.41.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.74.97.100.101.100.58514.16.21.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.107.101.112.116.54370|66|5148 +1.3.6.1.2.1.6.19.1.8.16.21.74.97.100.101.100.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.50515.2.32.74.97.100.101.100.32.97.99.116.101.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.116.104.101.105.114.28244|66|23335 +1.3.6.1.2.1.6.19.1.8.16.25.97.99.116.101.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.116.104.101.105.114.60547.16.29.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.56793|66|3408 +1.3.6.1.2.1.6.20.1.1.2.57.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.74.97.100.101.100.43630|2|2 +1.3.6.1.2.1.6.20.1.1.3.7.122.111.109.98.105.101.115.62225|2|3 +1.3.6.1.2.1.6.20.1.1.4.5.116.104.101.105.114.63131|2|4 +1.3.6.1.2.1.6.20.1.1.4.7.100.114.105.118.105.110.103.26679|2|4 +1.3.6.1.2.1.6.20.1.1.4.17.97.99.116.101.100.32.98.117.116.32.122.111.109.98.105.101.115.29283|2|4 +1.3.6.1.2.1.6.20.1.1.4.29.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.2131|2|4 +1.3.6.1.2.1.6.20.1.1.4.41.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.98.117.116.32.111.120.101.110.65455|2|4 +1.3.6.1.2.1.6.20.1.1.16.38.97.99.116.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.98.117.116.32.122.111.109.98.105.101.115.7290|2|16 +1.3.6.1.2.1.6.20.1.1.16.57.122.111.109.98.105.101.115.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.12767|2|16 +1.3.6.1.2.1.6.20.1.1.16.58.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.113.117.97.105.110.116.108.121.33797|2|16 +1.3.6.1.2.1.6.20.1.2.2.57.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.74.97.100.101.100.43630|4x|666f72776172642064726976696e672061637465642074686569722061637465642064726976696e67206b657074206f78656e204a61646564 +1.3.6.1.2.1.6.20.1.2.3.7.122.111.109.98.105.101.115.62225|4|zombies +1.3.6.1.2.1.6.20.1.2.4.5.116.104.101.105.114.63131|4|their +1.3.6.1.2.1.6.20.1.2.4.7.100.114.105.118.105.110.103.26679|4|driving +1.3.6.1.2.1.6.20.1.2.4.17.97.99.116.101.100.32.98.117.116.32.122.111.109.98.105.101.115.29283|4x|616374656420627574207a6f6d62696573 +1.3.6.1.2.1.6.20.1.2.4.29.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.2131|4x|7468656972207a6f6d62696573206f78656e204a61646564206f78656e +1.3.6.1.2.1.6.20.1.2.4.41.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.98.117.116.32.111.120.101.110.65455|4x|666f7277617264206163746564204a61646564206f78656e207a6f6d6269657320627574206f78656e +1.3.6.1.2.1.6.20.1.2.16.38.97.99.116.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.98.117.116.32.122.111.109.98.105.101.115.7290|4x|6163746564206b657074207a6f6d626965732064726976696e6720627574207a6f6d62696573 +1.3.6.1.2.1.6.20.1.2.16.57.122.111.109.98.105.101.115.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.12767|4x|7a6f6d62696573204a61646564206f78656e207a6f6d62696573206163746564206b65707420717561696e746c79206b657074206163746564 +1.3.6.1.2.1.6.20.1.2.16.58.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.113.117.97.105.110.116.108.121.33797|4x|666f7277617264207a6f6d62696573204a61646564207468656972207a6f6d6269657320717561696e746c79206b65707420717561696e746c79 +1.3.6.1.2.1.6.20.1.3.2.57.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.74.97.100.101.100.43630|66|43630 +1.3.6.1.2.1.6.20.1.3.3.7.122.111.109.98.105.101.115.62225|66|62225 +1.3.6.1.2.1.6.20.1.3.4.5.116.104.101.105.114.63131|66|63131 +1.3.6.1.2.1.6.20.1.3.4.7.100.114.105.118.105.110.103.26679|66|26679 +1.3.6.1.2.1.6.20.1.3.4.17.97.99.116.101.100.32.98.117.116.32.122.111.109.98.105.101.115.29283|66|29283 +1.3.6.1.2.1.6.20.1.3.4.29.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.2131|66|2131 +1.3.6.1.2.1.6.20.1.3.4.41.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.98.117.116.32.111.120.101.110.65455|66|65455 +1.3.6.1.2.1.6.20.1.3.16.38.97.99.116.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.98.117.116.32.122.111.109.98.105.101.115.7290|66|7290 +1.3.6.1.2.1.6.20.1.3.16.57.122.111.109.98.105.101.115.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.12767|66|12767 +1.3.6.1.2.1.6.20.1.3.16.58.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.113.117.97.105.110.116.108.121.33797|66|33797 +1.3.6.1.2.1.6.20.1.4.2.57.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.111.120.101.110.32.74.97.100.101.100.43630|66|11043 +1.3.6.1.2.1.6.20.1.4.3.7.122.111.109.98.105.101.115.62225|66|46645 +1.3.6.1.2.1.6.20.1.4.4.5.116.104.101.105.114.63131|66|21183 +1.3.6.1.2.1.6.20.1.4.4.7.100.114.105.118.105.110.103.26679|66|22659 +1.3.6.1.2.1.6.20.1.4.4.17.97.99.116.101.100.32.98.117.116.32.122.111.109.98.105.101.115.29283|66|29878 +1.3.6.1.2.1.6.20.1.4.4.29.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.2131|66|30450 +1.3.6.1.2.1.6.20.1.4.4.41.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.98.117.116.32.111.120.101.110.65455|66|6110 +1.3.6.1.2.1.6.20.1.4.16.38.97.99.116.101.100.32.107.101.112.116.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.98.117.116.32.122.111.109.98.105.101.115.7290|66|6544 +1.3.6.1.2.1.6.20.1.4.16.57.122.111.109.98.105.101.115.32.74.97.100.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.12767|66|51412 +1.3.6.1.2.1.6.20.1.4.16.58.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.113.117.97.105.110.116.108.121.33797|66|23539 +1.3.6.1.2.1.7.1.0|65|4270141773 +1.3.6.1.2.1.7.2.0|65|199753378 +1.3.6.1.2.1.7.3.0|65|3005352238 +1.3.6.1.2.1.7.4.0|65|4259461437 +1.3.6.1.2.1.7.5.1.1.13.209.77.90.1|64x|0dd14d5a +1.3.6.1.2.1.7.5.1.1.36.47.137.236.30|64x|242f89ec +1.3.6.1.2.1.7.5.1.1.49.119.163.14.29|64x|3177a30e +1.3.6.1.2.1.7.5.1.1.61.157.139.16.2|64x|3d9d8b10 +1.3.6.1.2.1.7.5.1.1.62.156.117.114.10|64x|3e9c7572 +1.3.6.1.2.1.7.5.1.1.77.165.52.164.25|64x|4da534a4 +1.3.6.1.2.1.7.5.1.1.105.30.91.133.18|64x|691e5b85 +1.3.6.1.2.1.7.5.1.1.195.150.79.206.0|64x|c3964fce +1.3.6.1.2.1.7.5.1.1.239.86.52.156.20|64x|ef56349c +1.3.6.1.2.1.7.5.1.1.240.81.67.244.2|64x|f05143f4 +1.3.6.1.2.1.7.5.1.2.13.209.77.90.1|2|1 +1.3.6.1.2.1.7.5.1.2.36.47.137.236.30|2|30 +1.3.6.1.2.1.7.5.1.2.49.119.163.14.29|2|29 +1.3.6.1.2.1.7.5.1.2.61.157.139.16.2|2|2 +1.3.6.1.2.1.7.5.1.2.62.156.117.114.10|2|10 +1.3.6.1.2.1.7.5.1.2.77.165.52.164.25|2|25 +1.3.6.1.2.1.7.5.1.2.105.30.91.133.18|2|18 +1.3.6.1.2.1.7.5.1.2.195.150.79.206.0|2|0 +1.3.6.1.2.1.7.5.1.2.239.86.52.156.20|2|20 +1.3.6.1.2.1.7.5.1.2.240.81.67.244.2|2|2 +1.3.6.1.2.1.7.7.1.1.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|2|0 +1.3.6.1.2.1.7.7.1.1.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|2|0 +1.3.6.1.2.1.7.7.1.1.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|2|1 +1.3.6.1.2.1.7.7.1.1.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|2|2 +1.3.6.1.2.1.7.7.1.1.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|2|2 +1.3.6.1.2.1.7.7.1.1.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|2|3 +1.3.6.1.2.1.7.7.1.1.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|2|3 +1.3.6.1.2.1.7.7.1.1.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|2|4 +1.3.6.1.2.1.7.7.1.1.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|2|4 +1.3.6.1.2.1.7.7.1.1.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|2|4 +1.3.6.1.2.1.7.7.1.2.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|4x|746865697220666f7277617264 +1.3.6.1.2.1.7.7.1.2.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|4x|4a61646564207a6f6d626965732062757420717561696e746c7920717561696e746c79206163746564207a6f6d6269657320627574 +1.3.6.1.2.1.7.7.1.2.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|4x|6b6570742062757420666f7277617264206f78656e2064726976696e6720666f727761726420717561696e746c79206b65707420666f7277617264 +1.3.6.1.2.1.7.7.1.2.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|4x|6163746564206b657074 +1.3.6.1.2.1.7.7.1.2.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|4x|6275742064726976696e672061637465642064726976696e67204a61646564206b657074206b65707420666f7277617264 +1.3.6.1.2.1.7.7.1.2.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|4x|6b657074207468656972206f78656e20627574207a6f6d6269657320616374656420746865697220666f7277617264 +1.3.6.1.2.1.7.7.1.2.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|4x|6b657074207468656972207a6f6d62696573206f78656e2061637465642064726976696e67206163746564206b657074207468656972 +1.3.6.1.2.1.7.7.1.2.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|4|driving +1.3.6.1.2.1.7.7.1.2.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|4x|62757420627574206b65707420627574 +1.3.6.1.2.1.7.7.1.2.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|4x|74686569722064726976696e67207468656972204a61646564 +1.3.6.1.2.1.7.7.1.3.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|66|4256 +1.3.6.1.2.1.7.7.1.3.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|66|64125 +1.3.6.1.2.1.7.7.1.3.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|66|41987 +1.3.6.1.2.1.7.7.1.3.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|66|29033 +1.3.6.1.2.1.7.7.1.3.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|66|4650 +1.3.6.1.2.1.7.7.1.3.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|66|13211 +1.3.6.1.2.1.7.7.1.3.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|66|12634 +1.3.6.1.2.1.7.7.1.3.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|66|49271 +1.3.6.1.2.1.7.7.1.3.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|66|13862 +1.3.6.1.2.1.7.7.1.3.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|66|63517 +1.3.6.1.2.1.7.7.1.4.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|2|4 +1.3.6.1.2.1.7.7.1.4.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|2|2 +1.3.6.1.2.1.7.7.1.4.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|2|16 +1.3.6.1.2.1.7.7.1.4.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|2|16 +1.3.6.1.2.1.7.7.1.4.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|2|3 +1.3.6.1.2.1.7.7.1.4.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|2|3 +1.3.6.1.2.1.7.7.1.4.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|2|2 +1.3.6.1.2.1.7.7.1.4.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|2|0 +1.3.6.1.2.1.7.7.1.4.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|2|16 +1.3.6.1.2.1.7.7.1.4.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|2|4 +1.3.6.1.2.1.7.7.1.5.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|4x|746865697220666f727761726420717561696e746c792064726976696e67206163746564204a61646564206163746564 +1.3.6.1.2.1.7.7.1.5.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|4|zombies +1.3.6.1.2.1.7.7.1.5.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|4x|717561696e746c79206f78656e207a6f6d62696573 +1.3.6.1.2.1.7.7.1.5.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|4|quaintly +1.3.6.1.2.1.7.7.1.5.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|4x|6163746564207468656972 +1.3.6.1.2.1.7.7.1.5.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|4x|62757420666f7277617264207468656972207468656972 +1.3.6.1.2.1.7.7.1.5.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|4x|64726976696e672064726976696e672064726976696e67206163746564 +1.3.6.1.2.1.7.7.1.5.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|4x|6b657074206f78656e206163746564 +1.3.6.1.2.1.7.7.1.5.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|4x|6f78656e20666f72776172642064726976696e6720616374656420717561696e746c792064726976696e672064726976696e6720666f7277617264206163746564 +1.3.6.1.2.1.7.7.1.5.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|4|driving +1.3.6.1.2.1.7.7.1.6.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|66|44544 +1.3.6.1.2.1.7.7.1.6.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|66|15820 +1.3.6.1.2.1.7.7.1.6.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|66|27196 +1.3.6.1.2.1.7.7.1.6.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|66|52479 +1.3.6.1.2.1.7.7.1.6.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|66|41218 +1.3.6.1.2.1.7.7.1.6.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|66|33858 +1.3.6.1.2.1.7.7.1.6.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|66|34581 +1.3.6.1.2.1.7.7.1.6.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|66|54166 +1.3.6.1.2.1.7.7.1.6.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|66|39814 +1.3.6.1.2.1.7.7.1.6.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|66|54011 +1.3.6.1.2.1.7.7.1.7.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|66|52531 +1.3.6.1.2.1.7.7.1.7.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|66|11592 +1.3.6.1.2.1.7.7.1.7.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|66|10000 +1.3.6.1.2.1.7.7.1.7.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|66|34579 +1.3.6.1.2.1.7.7.1.7.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|66|23033 +1.3.6.1.2.1.7.7.1.7.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|66|37887 +1.3.6.1.2.1.7.7.1.7.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|66|61882 +1.3.6.1.2.1.7.7.1.7.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|66|51020 +1.3.6.1.2.1.7.7.1.7.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|66|14440 +1.3.6.1.2.1.7.7.1.7.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|66|8069 +1.3.6.1.2.1.7.7.1.8.0.13.116.104.101.105.114.32.102.111.114.119.97.114.100.4256.4.48.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.74.97.100.101.100.32.97.99.116.101.100.44544.52531|66|56769 +1.3.6.1.2.1.7.7.1.8.0.53.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.98.117.116.64125.2.7.122.111.109.98.105.101.115.15820.11592|66|4918 +1.3.6.1.2.1.7.7.1.8.1.59.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.111.120.101.110.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.41987.16.21.113.117.97.105.110.116.108.121.32.111.120.101.110.32.122.111.109.98.105.101.115.27196.10000|66|29584 +1.3.6.1.2.1.7.7.1.8.2.10.97.99.116.101.100.32.107.101.112.116.29033.16.8.113.117.97.105.110.116.108.121.52479.34579|66|5023 +1.3.6.1.2.1.7.7.1.8.2.49.98.117.116.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4650.3.11.97.99.116.101.100.32.116.104.101.105.114.41218.23033|66|59393 +1.3.6.1.2.1.7.7.1.8.3.47.107.101.112.116.32.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.13211.3.23.98.117.116.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.116.104.101.105.114.33858.37887|66|48568 +1.3.6.1.2.1.7.7.1.8.3.54.107.101.112.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.111.120.101.110.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114.12634.2.29.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.97.99.116.101.100.34581.61882|66|46491 +1.3.6.1.2.1.7.7.1.8.4.7.100.114.105.118.105.110.103.49271.0.15.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.54166.51020|66|24853 +1.3.6.1.2.1.7.7.1.8.4.16.98.117.116.32.98.117.116.32.107.101.112.116.32.98.117.116.13862.16.65.111.120.101.110.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.97.99.116.101.100.39814.14440|66|43653 +1.3.6.1.2.1.7.7.1.8.4.25.116.104.101.105.114.32.100.114.105.118.105.110.103.32.116.104.101.105.114.32.74.97.100.101.100.63517.4.7.100.114.105.118.105.110.103.54011.8069|66|21028 +1.3.6.1.2.1.7.8.0|70|7642781740819387010 +1.3.6.1.2.1.7.9.0|70|7684584856575881521 +1.3.6.1.2.1.11.1.0|65|954851721 +1.3.6.1.2.1.11.1.0|65|1454218606 +1.3.6.1.2.1.11.2.0|65|409608966 +1.3.6.1.2.1.11.2.0|65|1880301803 +1.3.6.1.2.1.11.3.0|65|1289819496 +1.3.6.1.2.1.11.3.0|65|3124603570 +1.3.6.1.2.1.11.4.0|65|992806328 +1.3.6.1.2.1.11.4.0|65|2163750677 +1.3.6.1.2.1.11.5.0|65|63400765 +1.3.6.1.2.1.11.5.0|65|1652706228 +1.3.6.1.2.1.11.6.0|65|2152341393 +1.3.6.1.2.1.11.6.0|65|3271598735 +1.3.6.1.2.1.11.8.0|65|4111852310 +1.3.6.1.2.1.11.8.0|65|4201055591 +1.3.6.1.2.1.11.9.0|65|1160138484 +1.3.6.1.2.1.11.9.0|65|4256205423 +1.3.6.1.2.1.11.10.0|65|1221013779 +1.3.6.1.2.1.11.10.0|65|2302657642 +1.3.6.1.2.1.11.11.0|65|1540407169 +1.3.6.1.2.1.11.11.0|65|2350117438 +1.3.6.1.2.1.11.12.0|65|2614239671 +1.3.6.1.2.1.11.12.0|65|4111230750 +1.3.6.1.2.1.11.13.0|65|2852397657 +1.3.6.1.2.1.11.13.0|65|3121375553 +1.3.6.1.2.1.11.14.0|65|755604849 +1.3.6.1.2.1.11.14.0|65|3542294623 +1.3.6.1.2.1.11.15.0|65|741638534 +1.3.6.1.2.1.11.15.0|65|2794090705 +1.3.6.1.2.1.11.16.0|65|3877638626 +1.3.6.1.2.1.11.16.0|65|4180316518 +1.3.6.1.2.1.11.17.0|65|253685917 +1.3.6.1.2.1.11.17.0|65|2693168960 +1.3.6.1.2.1.11.18.0|65|1808524638 +1.3.6.1.2.1.11.18.0|65|2140737931 +1.3.6.1.2.1.11.19.0|65|676443377 +1.3.6.1.2.1.11.19.0|65|1117806078 +1.3.6.1.2.1.11.20.0|65|354628088 +1.3.6.1.2.1.11.20.0|65|3965434335 +1.3.6.1.2.1.11.21.0|65|1634954399 +1.3.6.1.2.1.11.21.0|65|1964459181 +1.3.6.1.2.1.11.22.0|65|1192433191 +1.3.6.1.2.1.11.22.0|65|1853429365 +1.3.6.1.2.1.11.24.0|65|380779089 +1.3.6.1.2.1.11.24.0|65|1472413992 +1.3.6.1.2.1.11.25.0|65|1794503904 +1.3.6.1.2.1.11.25.0|65|2149515263 +1.3.6.1.2.1.11.26.0|65|1232486629 +1.3.6.1.2.1.11.26.0|65|1651496593 +1.3.6.1.2.1.11.27.0|65|916838675 +1.3.6.1.2.1.11.27.0|65|2699929583 +1.3.6.1.2.1.11.28.0|65|70260818 +1.3.6.1.2.1.11.28.0|65|641662408 +1.3.6.1.2.1.11.29.0|65|998857108 +1.3.6.1.2.1.11.29.0|65|3136471498 +1.3.6.1.2.1.11.30.0|2|1 +1.3.6.1.2.1.11.30.0|2|2 +1.3.6.1.2.1.11.31.0|65|2369006345 +1.3.6.1.2.1.11.31.0|65|2819398811 +1.3.6.1.2.1.11.32.0|65|1430690600 +1.3.6.1.2.1.11.32.0|65|1725520591 +1.3.6.1.2.1.31.1.1.1.1.2|4x|4769676162697445746865726e6574312f302f31 +1.3.6.1.2.1.31.1.1.1.1.13|4x|4769676162697445746865726e6574312f302f32 +1.3.6.1.2.1.31.1.1.1.1.20|4x|4769676162697445746865726e6574312f302f33 +1.3.6.1.2.1.31.1.1.1.1.22|4x|4769676162697445746865726e6574312f302f34 +1.3.6.1.2.1.31.1.1.1.1.23|4x|4769676162697445746865726e6574312f302f35 +1.3.6.1.2.1.31.1.1.1.1.25|4x|4769676162697445746865726e6574312f302f36 +1.3.6.1.2.1.31.1.1.1.1.29|4x|4769676162697445746865726e6574312f302f37 +1.3.6.1.2.1.31.1.1.1.1.30|4x|4769676162697445746865726e6574312f302f38 +1.3.6.1.2.1.31.1.1.1.2.2|65|2733450495 +1.3.6.1.2.1.31.1.1.1.2.13|65|699266092 +1.3.6.1.2.1.31.1.1.1.2.20|65|4053490784 +1.3.6.1.2.1.31.1.1.1.2.22|65|1710795156 +1.3.6.1.2.1.31.1.1.1.2.23|65|3843858446 +1.3.6.1.2.1.31.1.1.1.2.25|65|947448120 +1.3.6.1.2.1.31.1.1.1.2.29|65|715533867 +1.3.6.1.2.1.31.1.1.1.2.30|65|3328396082 +1.3.6.1.2.1.31.1.1.1.3.2|65|3325970083 +1.3.6.1.2.1.31.1.1.1.3.13|65|1528033277 +1.3.6.1.2.1.31.1.1.1.3.20|65|3045056125 +1.3.6.1.2.1.31.1.1.1.3.22|65|204045711 +1.3.6.1.2.1.31.1.1.1.3.23|65|2573064606 +1.3.6.1.2.1.31.1.1.1.3.25|65|734698077 +1.3.6.1.2.1.31.1.1.1.3.29|65|2595770740 +1.3.6.1.2.1.31.1.1.1.3.30|65|1524629487 +1.3.6.1.2.1.31.1.1.1.4.2|65|3540226820 +1.3.6.1.2.1.31.1.1.1.4.13|65|2682280325 +1.3.6.1.2.1.31.1.1.1.4.20|65|3957518508 +1.3.6.1.2.1.31.1.1.1.4.22|65|1906225887 +1.3.6.1.2.1.31.1.1.1.4.23|65|1741403028 +1.3.6.1.2.1.31.1.1.1.4.25|65|1255363249 +1.3.6.1.2.1.31.1.1.1.4.29|65|399502146 +1.3.6.1.2.1.31.1.1.1.4.30|65|1144089387 +1.3.6.1.2.1.31.1.1.1.5.2|65|1452176956 +1.3.6.1.2.1.31.1.1.1.5.13|65|3409164710 +1.3.6.1.2.1.31.1.1.1.5.20|65|2463070203 +1.3.6.1.2.1.31.1.1.1.5.22|65|848059051 +1.3.6.1.2.1.31.1.1.1.5.23|65|2914405363 +1.3.6.1.2.1.31.1.1.1.5.25|65|3108752973 +1.3.6.1.2.1.31.1.1.1.5.29|65|1232734959 +1.3.6.1.2.1.31.1.1.1.5.30|65|1764074382 +1.3.6.1.2.1.31.1.1.1.6.2|70|13448303172714697305 +1.3.6.1.2.1.31.1.1.1.6.13|70|4318719075804689635 +1.3.6.1.2.1.31.1.1.1.6.20|70|17201856891642082546 +1.3.6.1.2.1.31.1.1.1.6.22|70|13246658495780705980 +1.3.6.1.2.1.31.1.1.1.6.23|70|9332172312136476036 +1.3.6.1.2.1.31.1.1.1.6.25|70|15314956972903536651 +1.3.6.1.2.1.31.1.1.1.6.29|70|9318379647000499270 +1.3.6.1.2.1.31.1.1.1.6.30|70|9765358329565439355 +1.3.6.1.2.1.31.1.1.1.7.2|70|10179706897128774466 +1.3.6.1.2.1.31.1.1.1.7.13|70|4454859230604991099 +1.3.6.1.2.1.31.1.1.1.7.20|70|3359284887771123963 +1.3.6.1.2.1.31.1.1.1.7.22|70|11446923366838822379 +1.3.6.1.2.1.31.1.1.1.7.23|70|10465411426025060425 +1.3.6.1.2.1.31.1.1.1.7.25|70|3080911980461264564 +1.3.6.1.2.1.31.1.1.1.7.29|70|2435720068607480212 +1.3.6.1.2.1.31.1.1.1.7.30|70|6421342371519975141 +1.3.6.1.2.1.31.1.1.1.8.2|70|456111944996040225 +1.3.6.1.2.1.31.1.1.1.8.13|70|18195635595774592670 +1.3.6.1.2.1.31.1.1.1.8.20|70|10306916805428074276 +1.3.6.1.2.1.31.1.1.1.8.22|70|10817541190455104384 +1.3.6.1.2.1.31.1.1.1.8.23|70|16699596081972900079 +1.3.6.1.2.1.31.1.1.1.8.25|70|12660222749186865742 +1.3.6.1.2.1.31.1.1.1.8.29|70|7608584762010362398 +1.3.6.1.2.1.31.1.1.1.8.30|70|14936114632924624840 +1.3.6.1.2.1.31.1.1.1.9.2|70|4893042909336225003 +1.3.6.1.2.1.31.1.1.1.9.13|70|11758107631008367663 +1.3.6.1.2.1.31.1.1.1.9.20|70|2724215101882812388 +1.3.6.1.2.1.31.1.1.1.9.22|70|5136657074956142950 +1.3.6.1.2.1.31.1.1.1.9.23|70|9530476596662027452 +1.3.6.1.2.1.31.1.1.1.9.25|70|14086768769392060956 +1.3.6.1.2.1.31.1.1.1.9.29|70|11317604788457258935 +1.3.6.1.2.1.31.1.1.1.9.30|70|6797537392375707490 +1.3.6.1.2.1.31.1.1.1.10.2|70|12274849589607689984 +1.3.6.1.2.1.31.1.1.1.10.13|70|940792159273415684 +1.3.6.1.2.1.31.1.1.1.10.20|70|11139680439752029358 +1.3.6.1.2.1.31.1.1.1.10.22|70|1594900387358540750 +1.3.6.1.2.1.31.1.1.1.10.23|70|11192496846189559441 +1.3.6.1.2.1.31.1.1.1.10.25|70|16344897290942655305 +1.3.6.1.2.1.31.1.1.1.10.29|70|677815612738172887 +1.3.6.1.2.1.31.1.1.1.10.30|70|16368354720075476219 +1.3.6.1.2.1.31.1.1.1.11.2|70|15970914692347547432 +1.3.6.1.2.1.31.1.1.1.11.13|70|13601449749320466487 +1.3.6.1.2.1.31.1.1.1.11.20|70|2293591718704981678 +1.3.6.1.2.1.31.1.1.1.11.22|70|12372852009231832301 +1.3.6.1.2.1.31.1.1.1.11.23|70|11206420299303144484 +1.3.6.1.2.1.31.1.1.1.11.25|70|18096173012673022526 +1.3.6.1.2.1.31.1.1.1.11.29|70|16246528730037708164 +1.3.6.1.2.1.31.1.1.1.11.30|70|11360917974542476187 +1.3.6.1.2.1.31.1.1.1.12.2|70|4902902070248533915 +1.3.6.1.2.1.31.1.1.1.12.13|70|17202254967886391507 +1.3.6.1.2.1.31.1.1.1.12.20|70|4717428222020898053 +1.3.6.1.2.1.31.1.1.1.12.22|70|15078557458701602035 +1.3.6.1.2.1.31.1.1.1.12.23|70|8614726914866626135 +1.3.6.1.2.1.31.1.1.1.12.25|70|6002335830185811704 +1.3.6.1.2.1.31.1.1.1.12.29|70|8462951256947496252 +1.3.6.1.2.1.31.1.1.1.12.30|70|11436030414039510640 +1.3.6.1.2.1.31.1.1.1.13.2|70|11008162885060916668 +1.3.6.1.2.1.31.1.1.1.13.13|70|444503635646358599 +1.3.6.1.2.1.31.1.1.1.13.20|70|12142342600175513906 +1.3.6.1.2.1.31.1.1.1.13.22|70|3805092011446384798 +1.3.6.1.2.1.31.1.1.1.13.23|70|10616684150150900851 +1.3.6.1.2.1.31.1.1.1.13.25|70|7473343076948502502 +1.3.6.1.2.1.31.1.1.1.13.29|70|6829434071846665165 +1.3.6.1.2.1.31.1.1.1.13.30|70|7327198865724432175 +1.3.6.1.2.1.31.1.1.1.14.2|2|2 +1.3.6.1.2.1.31.1.1.1.14.13|2|1 +1.3.6.1.2.1.31.1.1.1.14.20|2|2 +1.3.6.1.2.1.31.1.1.1.14.22|2|1 +1.3.6.1.2.1.31.1.1.1.14.23|2|2 +1.3.6.1.2.1.31.1.1.1.14.25|2|1 +1.3.6.1.2.1.31.1.1.1.14.29|2|1 +1.3.6.1.2.1.31.1.1.1.14.30|2|1 +1.3.6.1.2.1.31.1.1.1.15.2|66|29 +1.3.6.1.2.1.31.1.1.1.15.13|66|43 +1.3.6.1.2.1.31.1.1.1.15.20|66|49 +1.3.6.1.2.1.31.1.1.1.15.22|66|68 +1.3.6.1.2.1.31.1.1.1.15.23|66|91 +1.3.6.1.2.1.31.1.1.1.15.25|66|87 +1.3.6.1.2.1.31.1.1.1.15.29|66|81 +1.3.6.1.2.1.31.1.1.1.15.30|66|77 +1.3.6.1.2.1.31.1.1.1.16.2|2|1 +1.3.6.1.2.1.31.1.1.1.16.13|2|1 +1.3.6.1.2.1.31.1.1.1.16.20|2|1 +1.3.6.1.2.1.31.1.1.1.16.22|2|2 +1.3.6.1.2.1.31.1.1.1.16.23|2|2 +1.3.6.1.2.1.31.1.1.1.16.25|2|2 +1.3.6.1.2.1.31.1.1.1.16.29|2|1 +1.3.6.1.2.1.31.1.1.1.16.30|2|2 +1.3.6.1.2.1.31.1.1.1.17.2|2|1 +1.3.6.1.2.1.31.1.1.1.17.13|2|1 +1.3.6.1.2.1.31.1.1.1.17.20|2|2 +1.3.6.1.2.1.31.1.1.1.17.22|2|2 +1.3.6.1.2.1.31.1.1.1.17.23|2|1 +1.3.6.1.2.1.31.1.1.1.17.25|2|2 +1.3.6.1.2.1.31.1.1.1.17.29|2|1 +1.3.6.1.2.1.31.1.1.1.17.30|2|1 +1.3.6.1.2.1.31.1.1.1.18.2|4| +1.3.6.1.2.1.31.1.1.1.18.13|4| +1.3.6.1.2.1.31.1.1.1.18.20|4| +1.3.6.1.2.1.31.1.1.1.18.22|4| +1.3.6.1.2.1.31.1.1.1.18.23|4| +1.3.6.1.2.1.31.1.1.1.18.25|4| +1.3.6.1.2.1.31.1.1.1.18.29|4| +1.3.6.1.2.1.31.1.1.1.18.30|4| +1.3.6.1.2.1.31.1.1.1.19.2|67|3348202847 +1.3.6.1.2.1.31.1.1.1.19.13|67|735588022 +1.3.6.1.2.1.31.1.1.1.19.20|67|3243024311 +1.3.6.1.2.1.31.1.1.1.19.22|67|3697070021 +1.3.6.1.2.1.31.1.1.1.19.23|67|3302138292 +1.3.6.1.2.1.31.1.1.1.19.25|67|3917221164 +1.3.6.1.2.1.31.1.1.1.19.29|67|2442724574 +1.3.6.1.2.1.31.1.1.1.19.30|67|3866962771 +1.3.6.1.2.1.31.1.2.1.1.4.6|2|4 +1.3.6.1.2.1.31.1.2.1.1.5.28|2|5 +1.3.6.1.2.1.31.1.2.1.1.12.14|2|12 +1.3.6.1.2.1.31.1.2.1.1.13.6|2|13 +1.3.6.1.2.1.31.1.2.1.1.14.16|2|14 +1.3.6.1.2.1.31.1.2.1.1.19.2|2|19 +1.3.6.1.2.1.31.1.2.1.1.21.31|2|21 +1.3.6.1.2.1.31.1.2.1.1.26.21|2|26 +1.3.6.1.2.1.31.1.2.1.1.27.5|2|27 +1.3.6.1.2.1.31.1.2.1.1.31.21|2|31 +1.3.6.1.2.1.31.1.2.1.2.4.6|2|6 +1.3.6.1.2.1.31.1.2.1.2.5.28|2|28 +1.3.6.1.2.1.31.1.2.1.2.12.14|2|14 +1.3.6.1.2.1.31.1.2.1.2.13.6|2|6 +1.3.6.1.2.1.31.1.2.1.2.14.16|2|16 +1.3.6.1.2.1.31.1.2.1.2.19.2|2|2 +1.3.6.1.2.1.31.1.2.1.2.21.31|2|31 +1.3.6.1.2.1.31.1.2.1.2.26.21|2|21 +1.3.6.1.2.1.31.1.2.1.2.27.5|2|5 +1.3.6.1.2.1.31.1.2.1.2.31.21|2|21 +1.3.6.1.2.1.31.1.2.1.3.4.6|2|6 +1.3.6.1.2.1.31.1.2.1.3.5.28|2|6 +1.3.6.1.2.1.31.1.2.1.3.12.14|2|3 +1.3.6.1.2.1.31.1.2.1.3.13.6|2|2 +1.3.6.1.2.1.31.1.2.1.3.14.16|2|0 +1.3.6.1.2.1.31.1.2.1.3.19.2|2|4 +1.3.6.1.2.1.31.1.2.1.3.21.31|2|4 +1.3.6.1.2.1.31.1.2.1.3.26.21|2|6 +1.3.6.1.2.1.31.1.2.1.3.27.5|2|0 +1.3.6.1.2.1.31.1.2.1.3.31.21|2|6 +1.3.6.1.2.1.31.1.3.1.1.3|2|19 +1.3.6.1.2.1.31.1.3.1.1.9|2|21 +1.3.6.1.2.1.31.1.3.1.1.15|2|30 +1.3.6.1.2.1.31.1.3.1.1.16|2|18 +1.3.6.1.2.1.31.1.3.1.1.17|2|11 +1.3.6.1.2.1.31.1.3.1.1.18|2|8 +1.3.6.1.2.1.31.1.3.1.1.20|2|7 +1.3.6.1.2.1.31.1.3.1.1.24|2|10 +1.3.6.1.2.1.31.1.3.1.1.27|2|9 +1.3.6.1.2.1.31.1.3.1.1.31|2|2 +1.3.6.1.2.1.31.1.3.1.2.3|2|1 +1.3.6.1.2.1.31.1.3.1.2.9|2|1 +1.3.6.1.2.1.31.1.3.1.2.15|2|2 +1.3.6.1.2.1.31.1.3.1.2.16|2|1 +1.3.6.1.2.1.31.1.3.1.2.17|2|1 +1.3.6.1.2.1.31.1.3.1.2.18|2|2 +1.3.6.1.2.1.31.1.3.1.2.20|2|2 +1.3.6.1.2.1.31.1.3.1.2.24|2|2 +1.3.6.1.2.1.31.1.3.1.2.27|2|2 +1.3.6.1.2.1.31.1.3.1.2.31|2|2 +1.3.6.1.2.1.31.1.3.1.3.3|6|1.3.6.1.3.109 +1.3.6.1.2.1.31.1.3.1.3.9|6|1.3.6.1.3.165.239.212.146.132 +1.3.6.1.2.1.31.1.3.1.3.15|6|1.3.6.1.3.26.60 +1.3.6.1.2.1.31.1.3.1.3.16|6|1.3.6.1.3.49.134.239.38 +1.3.6.1.2.1.31.1.3.1.3.17|6|1.3.6.1.3.42.80.246.41.97.208.178 +1.3.6.1.2.1.31.1.3.1.3.18|6|1.3.6.1.3 +1.3.6.1.2.1.31.1.3.1.3.20|6|1.3.6.1.3.217.68.166.138.250.141 +1.3.6.1.2.1.31.1.3.1.3.24|6|1.3.6.1.3.15.5.120.167 +1.3.6.1.2.1.31.1.3.1.3.27|6|1.3.6.1.3.82.210.10.160.216.59 +1.3.6.1.2.1.31.1.3.1.3.31|6|1.3.6.1.3.97.128.195 +1.3.6.1.2.1.31.1.3.1.4.3|2|2 +1.3.6.1.2.1.31.1.3.1.4.9|2|5 +1.3.6.1.2.1.31.1.3.1.4.15|2|6 +1.3.6.1.2.1.31.1.3.1.4.16|2|3 +1.3.6.1.2.1.31.1.3.1.4.17|2|7 +1.3.6.1.2.1.31.1.3.1.4.18|2|7 +1.3.6.1.2.1.31.1.3.1.4.20|2|7 +1.3.6.1.2.1.31.1.3.1.4.24|2|6 +1.3.6.1.2.1.31.1.3.1.4.27|2|6 +1.3.6.1.2.1.31.1.3.1.4.31|2|3 +1.3.6.1.2.1.31.1.3.1.5.3|6|1.3.6.1.3.41.63.85.46.30 +1.3.6.1.2.1.31.1.3.1.5.9|6|1.3.6.1.3.240.1.39.78.90.70 +1.3.6.1.2.1.31.1.3.1.5.15|6|1.3.6.1.3.194.105 +1.3.6.1.2.1.31.1.3.1.5.16|6|1.3.6.1.3.223.205.243.27.145.236.111.164 +1.3.6.1.2.1.31.1.3.1.5.17|6|1.3.6.1.3.199.37.240.94.50.52.90 +1.3.6.1.2.1.31.1.3.1.5.18|6|1.3.6.1.3.102.51.116.18.224.148.90.3.51 +1.3.6.1.2.1.31.1.3.1.5.20|6|1.3.6.1.3.245.162.128.232.129.33.38 +1.3.6.1.2.1.31.1.3.1.5.24|6|1.3.6.1.3.154.74.95.29.176.206.122.130.33 +1.3.6.1.2.1.31.1.3.1.5.27|6|1.3.6.1.3.193.203.61.185.202.110 +1.3.6.1.2.1.31.1.3.1.5.31|6|1.3.6.1.3.113 +1.3.6.1.2.1.31.1.3.1.6.3|4|kept +1.3.6.1.2.1.31.1.3.1.6.9|4x|7a6f6d62696573204a61646564207468656972204a6164656420717561696e746c792064726976696e67206163746564 +1.3.6.1.2.1.31.1.3.1.6.15|4x|64726976696e6720666f72776172642064726976696e6720717561696e746c79 +1.3.6.1.2.1.31.1.3.1.6.16|4x|616374656420666f727761726420746865697220717561696e746c79206f78656e +1.3.6.1.2.1.31.1.3.1.6.17|4|quaintly +1.3.6.1.2.1.31.1.3.1.6.18|4x|62757420627574204a61646564206b657074 +1.3.6.1.2.1.31.1.3.1.6.20|4x|64726976696e672064726976696e67207468656972206b657074207a6f6d62696573207468656972206f78656e206b657074204a61646564 +1.3.6.1.2.1.31.1.3.1.6.24|4x|717561696e746c79207a6f6d6269657320746865697220746865697220746865697220627574 +1.3.6.1.2.1.31.1.3.1.6.27|4x|7a6f6d62696573206f78656e2064726976696e6720717561696e746c79206b6570742064726976696e67206f78656e206163746564 +1.3.6.1.2.1.31.1.3.1.6.31|4x|717561696e746c79207468656972206b65707420627574207468656972 +1.3.6.1.2.1.31.1.4.1.1.3.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.6.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.7.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.12.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.14.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.20.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.21.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.22.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.26.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.31.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.2.3.6.66.1.10.164.0.51|2|4 +1.3.6.1.2.1.31.1.4.1.2.6.6.66.1.10.164.0.51|2|5 +1.3.6.1.2.1.31.1.4.1.2.7.6.66.1.10.164.0.51|2|6 +1.3.6.1.2.1.31.1.4.1.2.12.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.4.1.2.14.6.66.1.10.164.0.51|2|6 +1.3.6.1.2.1.31.1.4.1.2.20.6.66.1.10.164.0.51|2|2 +1.3.6.1.2.1.31.1.4.1.2.21.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.2.22.6.66.1.10.164.0.51|2|5 +1.3.6.1.2.1.31.1.4.1.2.26.6.66.1.10.164.0.51|2|2 +1.3.6.1.2.1.31.1.4.1.2.31.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.3.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.6.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.7.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.12.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.14.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.20.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.4.1.3.21.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.4.1.3.22.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.4.1.3.26.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.4.1.3.31.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.5.0|67|769573055 +1.3.6.1.2.1.31.1.6.0|67|2568717285 +1.3.6.1.4.1.9.9.13.1.3.1.1.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.1.6|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.1.8|2|8 +1.3.6.1.4.1.9.9.13.1.3.1.1.11|2|11 +1.3.6.1.4.1.9.9.13.1.3.1.1.13|2|13 +1.3.6.1.4.1.9.9.13.1.3.1.1.14|2|14 +1.3.6.1.4.1.9.9.13.1.3.1.1.20|2|20 +1.3.6.1.4.1.9.9.13.1.3.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.3.1.1.31|2|31 +1.3.6.1.4.1.9.9.13.1.3.1.2.3|4x|7468656972207a6f6d62696573207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.9.9.13.1.3.1.2.6|4x|64726976696e672064726976696e67206b657074206163746564 +1.3.6.1.4.1.9.9.13.1.3.1.2.8|4x|7a6f6d626965732062757420717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.2.11|4x|61637465642064726976696e67204a61646564206163746564 +1.3.6.1.4.1.9.9.13.1.3.1.2.13|4x|7a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.2.14|4|oxen +1.3.6.1.4.1.9.9.13.1.3.1.2.20|4x|6b657074206f78656e +1.3.6.1.4.1.9.9.13.1.3.1.2.21|4x|627574204a61646564207468656972 +1.3.6.1.4.1.9.9.13.1.3.1.2.31|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.13.1.3.1.3.3|66|3930379735 +1.3.6.1.4.1.9.9.13.1.3.1.3.6|66|2258658671 +1.3.6.1.4.1.9.9.13.1.3.1.3.8|66|3213289584 +1.3.6.1.4.1.9.9.13.1.3.1.3.11|66|978410705 +1.3.6.1.4.1.9.9.13.1.3.1.3.13|66|2328456073 +1.3.6.1.4.1.9.9.13.1.3.1.3.14|66|952183581 +1.3.6.1.4.1.9.9.13.1.3.1.3.20|66|2877883263 +1.3.6.1.4.1.9.9.13.1.3.1.3.21|66|3953080519 +1.3.6.1.4.1.9.9.13.1.3.1.3.31|66|414726588 +1.3.6.1.4.1.9.9.13.1.3.1.4.3|2|9 +1.3.6.1.4.1.9.9.13.1.3.1.4.6|2|17 +1.3.6.1.4.1.9.9.13.1.3.1.4.8|2|1 +1.3.6.1.4.1.9.9.13.1.3.1.4.11|2|29 +1.3.6.1.4.1.9.9.13.1.3.1.4.13|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.4.14|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.4.20|2|23 +1.3.6.1.4.1.9.9.13.1.3.1.4.21|2|13 +1.3.6.1.4.1.9.9.13.1.3.1.4.31|2|5 +1.3.6.1.4.1.9.9.13.1.3.1.5.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.5.6|2|7 +1.3.6.1.4.1.9.9.13.1.3.1.5.8|2|10 +1.3.6.1.4.1.9.9.13.1.3.1.5.11|2|26 +1.3.6.1.4.1.9.9.13.1.3.1.5.13|2|30 +1.3.6.1.4.1.9.9.13.1.3.1.5.14|2|9 +1.3.6.1.4.1.9.9.13.1.3.1.5.20|2|17 +1.3.6.1.4.1.9.9.13.1.3.1.5.21|2|21 +1.3.6.1.4.1.9.9.13.1.3.1.5.31|2|28 +1.3.6.1.4.1.9.9.13.1.3.1.6.3|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.6.6|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.8|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.11|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.13|2|3 +1.3.6.1.4.1.9.9.13.1.3.1.6.14|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.20|2|6 +1.3.6.1.4.1.9.9.13.1.3.1.6.21|2|4 +1.3.6.1.4.1.9.9.13.1.3.1.6.31|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.1.4|2|4 +1.3.6.1.4.1.9.9.13.1.4.1.1.6|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.1.7|2|7 +1.3.6.1.4.1.9.9.13.1.4.1.1.16|2|16 +1.3.6.1.4.1.9.9.13.1.4.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.4.1.1.22|2|22 +1.3.6.1.4.1.9.9.13.1.4.1.1.25|2|25 +1.3.6.1.4.1.9.9.13.1.4.1.1.27|2|27 +1.3.6.1.4.1.9.9.13.1.4.1.1.30|2|30 +1.3.6.1.4.1.9.9.13.1.4.1.2.4|4|fan_1 +1.3.6.1.4.1.9.9.13.1.4.1.2.6|4|fan_2 +1.3.6.1.4.1.9.9.13.1.4.1.2.7|4|fan_3 +1.3.6.1.4.1.9.9.13.1.4.1.2.16|4|fan_4 +1.3.6.1.4.1.9.9.13.1.4.1.2.22|4|fan_5 +1.3.6.1.4.1.9.9.13.1.4.1.2.25|4|fan_6 +1.3.6.1.4.1.9.9.13.1.4.1.2.27|4|fan_7 +1.3.6.1.4.1.9.9.13.1.4.1.2.30|4|fan_8 +1.3.6.1.4.1.9.9.13.1.4.1.3.4|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.6|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.3.7|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.16|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.21|2|3 +1.3.6.1.4.1.9.9.13.1.4.1.3.22|2|6 +1.3.6.1.4.1.9.9.13.1.4.1.3.25|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.27|2|5 +1.3.6.1.4.1.9.9.13.1.4.1.3.30|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.1.0|2|0 +1.3.6.1.4.1.9.9.13.1.5.1.1.5|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.1.16|2|16 +1.3.6.1.4.1.9.9.13.1.5.1.1.20|2|20 +1.3.6.1.4.1.9.9.13.1.5.1.1.21|2|21 +1.3.6.1.4.1.9.9.13.1.5.1.1.22|2|22 +1.3.6.1.4.1.9.9.13.1.5.1.1.25|2|25 +1.3.6.1.4.1.9.9.13.1.5.1.1.26|2|26 +1.3.6.1.4.1.9.9.13.1.5.1.1.29|2|29 +1.3.6.1.4.1.9.9.13.1.5.1.1.31|2|31 +1.3.6.1.4.1.9.9.13.1.5.1.2.0|4x|666f7277617264206f78656e206163746564 +1.3.6.1.4.1.9.9.13.1.5.1.2.5|4|Jaded +1.3.6.1.4.1.9.9.13.1.5.1.2.16|4x|62757420717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.9.9.13.1.5.1.2.20|4|quaintly +1.3.6.1.4.1.9.9.13.1.5.1.2.21|4x|64726976696e6720717561696e746c7920616374656420627574207468656972 +1.3.6.1.4.1.9.9.13.1.5.1.2.22|4x|62757420627574 +1.3.6.1.4.1.9.9.13.1.5.1.2.25|4x|6163746564206b6570742064726976696e67206163746564 +1.3.6.1.4.1.9.9.13.1.5.1.2.26|4x|6f78656e207468656972204a61646564 +1.3.6.1.4.1.9.9.13.1.5.1.2.29|4x|746865697220746865697220616374656420666f7277617264 +1.3.6.1.4.1.9.9.13.1.5.1.2.31|4x|4a616465642064726976696e67207468656972207468656972207468656972 +1.3.6.1.4.1.9.9.13.1.5.1.3.0|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.3.5|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.3.16|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.3.20|2|6 +1.3.6.1.4.1.9.9.13.1.5.1.3.21|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.3.22|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.3.25|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.3.26|2|6 +1.3.6.1.4.1.9.9.13.1.5.1.3.29|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.3.31|2|1 +1.3.6.1.4.1.9.9.13.1.5.1.4.0|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.4.5|2|3 +1.3.6.1.4.1.9.9.13.1.5.1.4.16|2|4 +1.3.6.1.4.1.9.9.13.1.5.1.4.20|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.21|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.22|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.25|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.26|2|2 +1.3.6.1.4.1.9.9.13.1.5.1.4.29|2|5 +1.3.6.1.4.1.9.9.13.1.5.1.4.31|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.1|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.9|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.11|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.12|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.13|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.14|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.17|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.26|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.29|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.1.31|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.1|2|6 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.9|2|15 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.11|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.12|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.13|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.14|2|6 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.17|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.26|2|15 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.29|2|4 +1.3.6.1.4.1.9.9.91.1.1.1.1.2.31|2|6 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.1|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.9|2|5 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.11|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.12|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.13|2|4 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.14|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.17|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.26|2|7 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.29|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.3.31|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.1|2|24 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.9|2|10 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.11|2|7 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.12|2|27 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.13|2|23 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.14|2|7 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.17|2|27 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.26|2|0 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.29|2|17 +1.3.6.1.4.1.9.9.91.1.1.1.1.4.31|2|0 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.1|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.9|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.11|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.12|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.13|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.14|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.17|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.26|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.29|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.5.31|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.1|67|1900813911 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.9|67|25123729 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.11|67|3628093885 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.12|67|3324089695 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.13|67|4269533055 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.14|67|660607648 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.17|67|1101047558 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.26|67|3983603615 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.29|67|1292535257 +1.3.6.1.4.1.9.9.91.1.1.1.1.6.31|67|3650464662 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.1|2|27 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.9|2|14 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.11|2|9 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.12|2|12 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.13|2|18 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.14|2|11 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.17|2|0 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.26|2|26 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.29|2|3 +1.3.6.1.4.1.9.9.91.1.1.1.1.7.31|2|2 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.1|2|7 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.9|2|27 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.11|2|0 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.12|2|8 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.13|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.14|2|22 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.17|2|1 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.26|2|29 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.29|2|25 +1.3.6.1.4.1.9.9.91.1.1.1.1.8.31|2|29 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.2.26|2|26 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.2.31|2|31 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.4.2|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.7.14|2|14 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.12.16|2|16 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.14.23|2|23 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.18.3|2|3 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.23.5|2|5 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.26.25|2|25 +1.3.6.1.4.1.9.9.91.1.2.1.1.1.31.18|2|18 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.2.26|2|30 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.2.31|2|10 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.4.2|2|20 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.7.14|2|10 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.12.16|2|10 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.14.23|2|10 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.18.3|2|20 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.23.5|2|30 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.26.25|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.2.31.18|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.2.26|2|5 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.2.31|2|4 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.4.2|2|3 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.7.14|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.12.16|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.14.23|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.18.3|2|6 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.23.5|2|5 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.26.25|2|5 +1.3.6.1.4.1.9.9.91.1.2.1.1.3.31.18|2|5 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.2.26|2|10 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.2.31|2|12 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.4.2|2|24 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.7.14|2|8 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.12.16|2|10 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.14.23|2|28 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.18.3|2|17 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.23.5|2|9 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.26.25|2|8 +1.3.6.1.4.1.9.9.91.1.2.1.1.4.31.18|2|8 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.2.26|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.2.31|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.4.2|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.7.14|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.12.16|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.14.23|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.18.3|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.23.5|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.26.25|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.5.31.18|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.2.26|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.2.31|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.4.2|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.7.14|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.12.16|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.14.23|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.18.3|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.23.5|2|2 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.26.25|2|1 +1.3.6.1.4.1.9.9.91.1.2.1.1.6.31.18|2|2 +1.3.6.1.4.1.9.9.91.1.3.1.0|2|2 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.3173|66|3173 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.6692|66|6692 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.11571|66|11571 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.19529|66|19529 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.30674|66|30674 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.38253|66|38253 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.52063|66|52063 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.54474|66|54474 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.55946|66|55946 +1.3.6.1.4.1.9.9.109.1.1.1.1.1.63960|66|63960 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.3173|2|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.6692|2|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.11571|2|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.19529|2|31 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.30674|2|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.38253|2|31 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.52063|2|7 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.54474|2|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.55946|2|27 +1.3.6.1.4.1.9.9.109.1.1.1.1.2.63960|2|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.3173|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.6692|66|34 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.11571|66|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.19529|66|56 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.30674|66|35 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.38253|66|87 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.52063|66|16 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.54474|66|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.55946|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.3.63960|66|8 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.3173|66|53 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.6692|66|77 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.11571|66|85 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.19529|66|79 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.30674|66|31 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.38253|66|86 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.52063|66|1 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.54474|66|90 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.55946|66|72 +1.3.6.1.4.1.9.9.109.1.1.1.1.4.63960|66|70 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.3173|66|72 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.6692|66|74 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.11571|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.19529|66|8 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.30674|66|80 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.38253|66|52 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.52063|66|66 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.54474|66|27 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.55946|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.5.63960|66|91 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.3173|66|96 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.6692|66|41 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.11571|66|78 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.19529|66|65 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.30674|66|70 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.38253|66|19 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.52063|66|41 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.54474|66|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.55946|66|32 +1.3.6.1.4.1.9.9.109.1.1.1.1.6.63960|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.3173|66|52 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.6692|66|64 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.11571|66|46 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.19529|66|19 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.30674|66|27 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.38253|66|34 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.52063|66|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.54474|66|94 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.55946|66|1 +1.3.6.1.4.1.9.9.109.1.1.1.1.7.63960|66|55 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.3173|66|29 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.6692|66|57 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.11571|66|7 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.19529|66|8 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.30674|66|1 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.38253|66|23 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.52063|66|96 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.54474|66|62 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.55946|66|23 +1.3.6.1.4.1.9.9.109.1.1.1.1.8.63960|66|87 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.3173|66|3050 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.6692|66|41115 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.11571|66|902 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.19529|66|42132 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.30674|66|42302 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.38253|66|14144 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.52063|66|55063 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.54474|66|52054 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.55946|66|42044 +1.3.6.1.4.1.9.9.109.1.1.1.1.9.63960|66|41009 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.3173|66|14 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.6692|66|4 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.11571|66|51 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.19529|66|97 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.30674|66|52 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.38253|66|8 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.52063|66|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.54474|66|9 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.55946|66|95 +1.3.6.1.4.1.9.9.109.1.1.1.1.10.63960|66|59 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.3173|66|15 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.6692|66|45 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.11571|66|48 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.19529|66|67 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.30674|66|66 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.38253|66|34 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.52063|66|76 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.54474|66|50 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.55946|66|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.11.63960|66|74 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.3173|66|59 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.6692|66|59 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.11571|66|71 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.19529|66|46 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.30674|66|18 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.38253|66|95 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.52063|66|35 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.54474|66|96 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.55946|66|36 +1.3.6.1.4.1.9.9.109.1.1.1.1.12.63960|66|44 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.3173|66|94 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.6692|66|8 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.11571|66|43 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.19529|66|27 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.30674|66|82 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.38253|66|1 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.52063|66|24 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.54474|66|44 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.55946|66|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.13.63960|66|43 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.3173|66|14 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.6692|66|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.11571|66|19 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.19529|66|4 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.30674|66|49 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.38253|66|87 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.52063|66|55 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.54474|66|75 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.55946|66|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.14.63960|66|61 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.3173|66|82 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.6692|66|33 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.11571|66|45 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.19529|66|54 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.30674|66|33 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.38253|66|10 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.52063|66|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.54474|66|35 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.55946|66|78 +1.3.6.1.4.1.9.9.109.1.1.1.1.15.63960|66|31 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.3173|66|71 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.6692|66|3 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.11571|66|95 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.19529|66|28 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.30674|66|74 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.38253|66|59 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.52063|66|8 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.54474|66|36 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.55946|66|40 +1.3.6.1.4.1.9.9.109.1.1.1.1.16.63960|66|79 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.3173|70|3290693061297386538 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.6692|70|7564509971850013770 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.11571|70|15654260797702288865 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.19529|70|13010811470010516479 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.30674|70|6793566916088852728 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.38253|70|5393542058728323197 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.52063|70|2268170237084751317 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.54474|70|3579988003556919076 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.55946|70|4093858454825039165 +1.3.6.1.4.1.9.9.109.1.1.1.1.17.63960|70|2077285200507819328 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.3173|66|78 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.6692|66|82 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.11571|66|19 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.19529|66|41 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.30674|66|52 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.38253|66|87 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.52063|66|48 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.54474|66|75 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.55946|66|17 +1.3.6.1.4.1.9.9.109.1.1.1.1.18.63960|66|58 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.3173|70|5822992624363405166 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.6692|70|13445277955552209028 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.11571|70|892841109358583387 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.19529|70|8797706252171050151 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.30674|70|13873733226744658372 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.38253|70|6444852483924982709 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.52063|70|7716954844901249882 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.54474|70|6036102741467749802 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.55946|70|9312669560315346235 +1.3.6.1.4.1.9.9.109.1.1.1.1.19.63960|70|10838219291701191875 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.3173|66|35 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.6692|66|77 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.11571|66|82 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.19529|66|70 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.30674|66|61 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.38253|66|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.52063|66|58 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.54474|66|42 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.55946|66|0 +1.3.6.1.4.1.9.9.109.1.1.1.1.20.63960|66|68 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.3173|70|16056868659973483516 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.6692|70|10017909177997976087 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.11571|70|2230842307636527027 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.19529|70|17668750968545471270 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.30674|70|12763088877257047417 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.38253|70|2636521422820186079 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.52063|70|12357278839854731282 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.54474|70|17340027277602899307 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.55946|70|5676502918525025098 +1.3.6.1.4.1.9.9.109.1.1.1.1.21.63960|70|2764302225969834845 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.3173|66|38 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.6692|66|20 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.11571|66|54 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.19529|66|21 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.30674|66|74 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.38253|66|26 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.52063|66|73 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.54474|66|42 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.55946|66|32 +1.3.6.1.4.1.9.9.109.1.1.1.1.22.63960|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.3173|70|7121308621459330441 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.6692|70|3922534602980269925 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.11571|70|5138610210651117747 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.19529|70|4224528508121142168 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.30674|70|11889431121186442907 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.38253|70|17918794903249540226 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.52063|70|5663281812824895846 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.54474|70|14961337836425660842 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.55946|70|4987695838892114677 +1.3.6.1.4.1.9.9.109.1.1.1.1.23.63960|70|5599291427942308324 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.3173|66|31199 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.6692|66|26726 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.11571|66|28498 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.19529|66|9348 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.30674|66|3520 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.38253|66|8160 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.52063|66|34590 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.54474|66|4270 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.55946|66|1405 +1.3.6.1.4.1.9.9.109.1.1.1.1.24.63960|66|4595 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.3173|66|14445 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.6692|66|59502 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.11571|66|39108 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.19529|66|64322 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.30674|66|13001 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.38253|66|54851 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.52063|66|64862 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.54474|66|28436 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.55946|66|16405 +1.3.6.1.4.1.9.9.109.1.1.1.1.25.63960|66|49738 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.3173|66|41359 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.6692|66|54594 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.11571|66|24124 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.19529|66|13619 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.30674|66|52103 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.38253|66|26931 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.52063|66|53441 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.54474|66|3524 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.55946|66|24054 +1.3.6.1.4.1.9.9.109.1.1.1.1.26.63960|66|22153 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.3173|66|60 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.6692|66|73 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.11571|66|33 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.19529|66|86 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.30674|66|99 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.38253|66|25 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.52063|66|75 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.54474|66|31 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.55946|66|47 +1.3.6.1.4.1.9.9.109.1.1.1.1.27.63960|66|41 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.3173|66|94 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.6692|66|55 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.11571|66|58 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.19529|66|6 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.30674|66|71 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.38253|66|11 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.52063|66|5 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.54474|66|94 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.55946|66|98 +1.3.6.1.4.1.9.9.109.1.1.1.1.28.63960|66|42 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.3173|70|11308386979488134514 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.6692|70|12867401079824171768 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.11571|70|7163940979205272132 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.19529|70|12755693763463931220 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.30674|70|2897889008176006026 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.38253|70|11248166661806159715 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.52063|70|9436792442958722426 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.54474|70|17287484452982049608 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.55946|70|710960261146813662 +1.3.6.1.4.1.9.9.109.1.1.1.1.29.63960|70|7288576621002403883 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.1834.53089|66|53089 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.5375.52445|66|52445 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.9984.29744|66|29744 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.11013.18610|66|18610 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.12674.11973|66|11973 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.32048.11203|66|11203 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.32435.37015|66|37015 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.37693.9209|66|9209 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.57718.34885|66|34885 +1.3.6.1.4.1.9.9.109.1.1.2.1.1.65273.50850|66|50850 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.1834.53089|2|9 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.5375.52445|2|0 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.9984.29744|2|27 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.11013.18610|2|24 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.12674.11973|2|31 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.32048.11203|2|16 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.32435.37015|2|2 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.37693.9209|2|23 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.57718.34885|2|29 +1.3.6.1.4.1.9.9.109.1.1.2.1.2.65273.50850|2|31 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.1834.53089|66|40 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.5375.52445|66|40 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.9984.29744|66|62 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.11013.18610|66|71 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.12674.11973|66|25 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.32048.11203|66|41 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.32435.37015|66|57 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.37693.9209|66|29 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.57718.34885|66|61 +1.3.6.1.4.1.9.9.109.1.1.2.1.3.65273.50850|66|77 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.1834.53089|66|64 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.5375.52445|66|52 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.9984.29744|66|68 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.11013.18610|66|73 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.12674.11973|66|74 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.32048.11203|66|55 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.32435.37015|66|9 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.37693.9209|66|23 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.57718.34885|66|61 +1.3.6.1.4.1.9.9.109.1.1.2.1.4.65273.50850|66|74 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.1834.53089|66|24 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.5375.52445|66|14 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.9984.29744|66|68 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.11013.18610|66|26 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.12674.11973|66|40 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.32048.11203|66|4 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.32435.37015|66|41 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.37693.9209|66|66 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.57718.34885|66|75 +1.3.6.1.4.1.9.9.109.1.1.2.1.5.65273.50850|66|68 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.1834.53089|66|50700 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.5375.52445|66|33201 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.9984.29744|66|50882 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.11013.18610|66|63295 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.12674.11973|66|7338 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.32048.11203|66|30398 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.32435.37015|66|30125 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.37693.9209|66|37494 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.57718.34885|66|65153 +1.3.6.1.4.1.9.9.109.1.1.2.1.6.65273.50850|66|63643 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.1834.53089|66|7224 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.5375.52445|66|20812 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.9984.29744|66|52999 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.11013.18610|66|45011 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.12674.11973|66|19495 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.32048.11203|66|7057 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.32435.37015|66|13812 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.37693.9209|66|44860 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.57718.34885|66|53378 +1.3.6.1.4.1.9.9.109.1.1.2.1.7.65273.50850|66|10616 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.1834.53089|66|63098 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.5375.52445|66|8783 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.9984.29744|66|33504 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.11013.18610|66|56445 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.12674.11973|66|46255 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.32048.11203|66|27163 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.32435.37015|66|5048 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.37693.9209|66|9031 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.57718.34885|66|18761 +1.3.6.1.4.1.9.9.109.1.1.2.1.8.65273.50850|66|217 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.5050.63191|66|63191 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.7738.13226|66|13226 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.16585.17703|66|17703 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.18884.41283|66|41283 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.31680.31158|66|31158 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.36563.52821|66|52821 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.36784.59513|66|59513 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.37198.27632|66|27632 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.57206.10814|66|10814 +1.3.6.1.4.1.9.9.109.1.2.1.1.1.62814.61830|66|61830 +1.3.6.1.4.1.9.9.109.1.2.1.1.2.5050.63191|4x|717561696e746c79206f78656e +1.3.6.1.4.1.9.9.109.1.2.1.1.2.7738.13226|4x|64726976696e672064726976696e67207a6f6d62696573 +1.3.6.1.4.1.9.9.109.1.2.1.1.2.16585.17703|4|zombies +1.3.6.1.4.1.9.9.109.1.2.1.1.2.18884.41283|4|Jaded +1.3.6.1.4.1.9.9.109.1.2.1.1.2.31680.31158|4x|6f78656e20666f7277617264 +1.3.6.1.4.1.9.9.109.1.2.1.1.2.36563.52821|4x|616374656420666f7277617264207468656972204a61646564206b657074 +1.3.6.1.4.1.9.9.109.1.2.1.1.2.36784.59513|4|oxen +1.3.6.1.4.1.9.9.109.1.2.1.1.2.37198.27632|4x|7a6f6d62696573206f78656e206f78656e206b657074 +1.3.6.1.4.1.9.9.109.1.2.1.1.2.57206.10814|4x|7a6f6d62696573206f78656e206f78656e207468656972204a61646564 +1.3.6.1.4.1.9.9.109.1.2.1.1.2.62814.61830|4|forward +1.3.6.1.4.1.9.9.109.1.2.1.1.4.5050.63191|66|53017 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.7738.13226|66|47056 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.16585.17703|66|28361 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.18884.41283|66|63054 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.31680.31158|66|61067 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.36563.52821|66|30259 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.36784.59513|66|43768 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.37198.27632|66|61208 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.57206.10814|66|1009 +1.3.6.1.4.1.9.9.109.1.2.1.1.4.62814.61830|66|33434 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.5050.63191|67|4102798138 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.7738.13226|67|783933618 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.16585.17703|67|2842563957 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.18884.41283|67|2858093979 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.31680.31158|67|2520052764 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.36563.52821|67|800983262 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.36784.59513|67|3329122975 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.37198.27632|67|1709081370 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.57206.10814|67|1281736894 +1.3.6.1.4.1.9.9.109.1.2.1.1.5.62814.61830|67|1155750717 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.5050.63191|66|2783 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.7738.13226|66|52771 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.16585.17703|66|28528 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.18884.41283|66|3682 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.31680.31158|66|21256 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.36563.52821|66|26879 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.36784.59513|66|39330 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.37198.27632|66|43770 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.57206.10814|66|55316 +1.3.6.1.4.1.9.9.109.1.2.1.1.6.62814.61830|66|35911 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.1866.44348|66|74 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.7109.50119|66|38 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.8148.23147|66|20 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.12213.58938|66|31 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.12594.44400|66|11 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.16216.28383|66|11 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.43925.62310|66|50 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.50020.18771|66|83 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.51224.10286|66|59 +1.3.6.1.4.1.9.9.109.1.2.2.1.1.62244.14693|66|33 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.1866.44348|66|8 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.7109.50119|66|80 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.8148.23147|66|43 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.12213.58938|66|7 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.12594.44400|66|4 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.16216.28383|66|29 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.43925.62310|66|41 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.50020.18771|66|81 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.51224.10286|66|44 +1.3.6.1.4.1.9.9.109.1.2.2.1.2.62244.14693|66|84 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.1866.44348|65|3073572808 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.7109.50119|65|2372764780 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.8148.23147|65|425569613 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.12213.58938|65|429486184 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.12594.44400|65|2416997065 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.16216.28383|65|1656249 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.43925.62310|65|1384080842 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.50020.18771|65|3116372117 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.51224.10286|65|2059867987 +1.3.6.1.4.1.9.9.109.1.2.2.1.3.62244.14693|65|2793792536 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.1866.44348|65|3132349595 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.7109.50119|65|3564734600 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.8148.23147|65|2053910930 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.12213.58938|65|2047793300 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.12594.44400|65|3730704944 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.16216.28383|65|1931040855 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.43925.62310|65|3915271815 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.50020.18771|65|318837471 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.51224.10286|65|3115812269 +1.3.6.1.4.1.9.9.109.1.2.2.1.4.62244.14693|65|2024261 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.1866.44348|66|36 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.7109.50119|66|55 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.8148.23147|66|62 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.12213.58938|66|87 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.12594.44400|66|90 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.16216.28383|66|7 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.43925.62310|66|86 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.50020.18771|66|97 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.51224.10286|66|72 +1.3.6.1.4.1.9.9.109.1.2.2.1.5.62244.14693|66|60 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.1866.44348|66|65 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.7109.50119|66|97 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.8148.23147|66|98 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.12213.58938|66|43 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.12594.44400|66|11 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.16216.28383|66|98 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.43925.62310|66|74 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.50020.18771|66|49 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.51224.10286|66|58 +1.3.6.1.4.1.9.9.109.1.2.2.1.6.62244.14693|66|77 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.1866.44348|66|32 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.7109.50119|66|89 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.8148.23147|66|51 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.12213.58938|66|5 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.12594.44400|66|41 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.16216.28383|66|10 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.43925.62310|66|59 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.50020.18771|66|90 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.51224.10286|66|84 +1.3.6.1.4.1.9.9.109.1.2.2.1.7.62244.14693|66|46 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.1866.44348|2|1 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.7109.50119|2|5 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.8148.23147|2|4 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.12213.58938|2|4 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.12594.44400|2|1 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.16216.28383|2|4 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.43925.62310|2|5 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.50020.18771|2|5 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.51224.10286|2|2 +1.3.6.1.4.1.9.9.109.1.2.2.1.8.62244.14693|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.521.56978|66|70 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.9186.213|66|61 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.16268.20475|66|73 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.17759.61739|66|45 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.23689.18870|66|99 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.31815.54480|66|91 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.33103.50821|66|63 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.33432.18914|66|85 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.40030.24893|66|20 +1.3.6.1.4.1.9.9.109.1.2.3.1.1.53251.36558|66|9 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.521.56978|66|37 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.9186.213|66|60 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.16268.20475|66|85 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.17759.61739|66|18 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.23689.18870|66|90 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.31815.54480|66|43 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.33103.50821|66|92 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.33432.18914|66|11 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.40030.24893|66|52 +1.3.6.1.4.1.9.9.109.1.2.3.1.2.53251.36558|66|57 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.521.56978|65|3985134255 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.9186.213|65|3772121799 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.16268.20475|65|1070607610 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.17759.61739|65|219330067 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.23689.18870|65|3338621279 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.31815.54480|65|3899074880 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.33103.50821|65|237491262 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.33432.18914|65|2853860449 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.40030.24893|65|4002243710 +1.3.6.1.4.1.9.9.109.1.2.3.1.3.53251.36558|65|349822375 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.521.56978|65|3005306269 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.9186.213|65|1559726237 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.16268.20475|65|2836214003 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.17759.61739|65|2502423132 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.23689.18870|65|2415987835 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.31815.54480|65|2980836764 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.33103.50821|65|2706830688 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.33432.18914|65|3252058731 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.40030.24893|65|722867811 +1.3.6.1.4.1.9.9.109.1.2.3.1.4.53251.36558|65|2751229876 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.521.56978|66|43 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.9186.213|66|39 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.16268.20475|66|78 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.17759.61739|66|76 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.23689.18870|66|30 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.31815.54480|66|92 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.33103.50821|66|82 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.33432.18914|66|8 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.40030.24893|66|69 +1.3.6.1.4.1.9.9.109.1.2.3.1.5.53251.36558|66|23 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.521.56978|66|51 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.9186.213|66|7 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.16268.20475|66|7 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.17759.61739|66|47 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.23689.18870|66|66 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.31815.54480|66|49 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.33103.50821|66|75 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.33432.18914|66|85 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.40030.24893|66|7 +1.3.6.1.4.1.9.9.109.1.2.3.1.6.53251.36558|66|67 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.521.56978|66|24 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.9186.213|66|23 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.16268.20475|66|95 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.17759.61739|66|32 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.23689.18870|66|67 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.31815.54480|66|61 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.33103.50821|66|90 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.33432.18914|66|86 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.40030.24893|66|38 +1.3.6.1.4.1.9.9.109.1.2.3.1.7.53251.36558|66|20 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.521.56978|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.9186.213|2|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.16268.20475|2|4 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.17759.61739|2|3 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.23689.18870|2|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.31815.54480|2|4 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.33103.50821|2|4 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.33432.18914|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.40030.24893|2|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.8.53251.36558|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.521.56978|2|3 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.9186.213|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.16268.20475|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.17759.61739|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.23689.18870|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.31815.54480|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.33103.50821|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.33432.18914|2|3 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.40030.24893|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.9.53251.36558|2|3 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.521.56978|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.9186.213|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.16268.20475|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.17759.61739|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.23689.18870|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.31815.54480|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.33103.50821|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.33432.18914|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.40030.24893|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.10.53251.36558|2|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.521.56978|65|1404850526 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.9186.213|65|2569030043 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.16268.20475|65|2615755782 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.17759.61739|65|4114438398 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.23689.18870|65|402464564 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.31815.54480|65|1935027795 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.33103.50821|65|1149247672 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.33432.18914|65|2004830638 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.40030.24893|65|3873710144 +1.3.6.1.4.1.9.9.109.1.2.3.1.11.53251.36558|65|3018383535 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.521.56978|65|3859893368 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.9186.213|65|1072275487 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.16268.20475|65|3562728775 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.17759.61739|65|1677368507 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.23689.18870|65|233736144 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.31815.54480|65|1094635678 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.33103.50821|65|1396030876 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.33432.18914|65|3225776463 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.40030.24893|65|3757864776 +1.3.6.1.4.1.9.9.109.1.2.3.1.12.53251.36558|65|2918462442 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.521.56978|2|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.9186.213|2|8 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.16268.20475|2|7 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.17759.61739|2|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.23689.18870|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.31815.54480|2|2 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.33103.50821|2|7 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.33432.18914|2|8 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.40030.24893|2|3 +1.3.6.1.4.1.9.9.109.1.2.3.1.13.53251.36558|2|6 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.521.56978|4x|6163746564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.9186.213|4x|4a61646564204a6164656420616374656420666f727761726420627574 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.16268.20475|4x|6275742064726976696e67204a61646564 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.17759.61739|4x|717561696e746c7920627574 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.23689.18870|4x|7a6f6d62696573207468656972 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.31815.54480|4x|7468656972206f78656e20627574 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.33103.50821|4x|717561696e746c79206f78656e2061637465642064726976696e67207468656972207a6f6d62696573 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.33432.18914|4x|64726976696e67207a6f6d6269657320717561696e746c79204a61646564207a6f6d62696573206f78656e207468656972206b657074207a6f6d62696573 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.40030.24893|4x|6b657074204a6164656420666f72776172642064726976696e67206b657074204a6164656420717561696e746c7920666f72776172642064726976696e67 +1.3.6.1.4.1.9.9.109.1.2.3.1.14.53251.36558|4x|4a616465642064726976696e67206f78656e206f78656e +1.3.6.1.4.1.9.9.109.1.2.3.1.15.521.56978|66|17420 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.9186.213|66|6080 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.16268.20475|66|48019 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.17759.61739|66|11499 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.23689.18870|66|6646 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.31815.54480|66|23119 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.33103.50821|66|38203 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.33432.18914|66|18223 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.40030.24893|66|13394 +1.3.6.1.4.1.9.9.109.1.2.3.1.15.53251.36558|66|13721 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.521.56978|66|60 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.9186.213|66|45 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.16268.20475|66|23 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.17759.61739|66|67 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.23689.18870|66|55 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.31815.54480|66|37 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.33103.50821|66|65 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.33432.18914|66|32 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.40030.24893|66|89 +1.3.6.1.4.1.9.9.109.1.2.3.1.16.53251.36558|66|18 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.521.56978|66|0 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.9186.213|66|0 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.16268.20475|66|30 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.17759.61739|66|24 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.23689.18870|66|16 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.31815.54480|66|45 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.33103.50821|66|64 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.33432.18914|66|65 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.40030.24893|66|51 +1.3.6.1.4.1.9.9.109.1.2.3.1.17.53251.36558|66|14 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.521.56978|66|88 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.9186.213|66|31 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.16268.20475|66|14 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.17759.61739|66|57 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.23689.18870|66|15 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.31815.54480|66|19 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.33103.50821|66|59 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.33432.18914|66|51 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.40030.24893|66|77 +1.3.6.1.4.1.9.9.109.1.2.3.1.18.53251.36558|66|26 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.521.56978|66|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.9186.213|66|72 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.16268.20475|66|41 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.17759.61739|66|29 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.23689.18870|66|46 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.31815.54480|66|79 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.33103.50821|66|37 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.33432.18914|66|89 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.40030.24893|66|83 +1.3.6.1.4.1.9.9.109.1.2.3.1.19.53251.36558|66|76 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.521.56978|70|15369492500408286360 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.9186.213|70|12330355343026713797 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.16268.20475|70|17437390839202513998 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.17759.61739|70|9811260540752629666 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.23689.18870|70|13072214610462469522 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.31815.54480|70|1423405882536019946 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.33103.50821|70|15400502503770756719 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.33432.18914|70|7304503024638386968 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.40030.24893|70|11355283423476280692 +1.3.6.1.4.1.9.9.109.1.2.3.1.20.53251.36558|70|11837713933155375260 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.521.56978|66|35 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.9186.213|66|22 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.16268.20475|66|56 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.17759.61739|66|21 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.23689.18870|66|20 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.31815.54480|66|40 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.33103.50821|66|53 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.33432.18914|66|72 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.40030.24893|66|56 +1.3.6.1.4.1.9.9.109.1.2.3.1.21.53251.36558|66|84 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.521.56978|70|1683904979685991049 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.9186.213|70|4543762234773299100 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.16268.20475|70|3924239032867687955 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.17759.61739|70|1073280279628186147 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.23689.18870|70|14916624358112448342 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.31815.54480|70|6715466263362714741 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.33103.50821|70|9408298646379651638 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.33432.18914|70|17162364556639216384 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.40030.24893|70|5738469502311508448 +1.3.6.1.4.1.9.9.109.1.2.3.1.22.53251.36558|70|1545963014044291141 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.521.56978|66|11931 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.9186.213|66|11912 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.16268.20475|66|3761 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.17759.61739|66|35961 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.23689.18870|66|31845 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.31815.54480|66|24022 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.33103.50821|66|36358 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.33432.18914|66|31994 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.40030.24893|66|51068 +1.3.6.1.4.1.9.9.109.1.2.3.1.23.53251.36558|66|63318 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.521.56978|70|15106092275461330334 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.9186.213|70|9324617721311197732 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.16268.20475|70|14862389194142061143 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.17759.61739|70|18407004200157355835 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.23689.18870|70|6271100479507239456 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.31815.54480|70|9839873037955051683 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.33103.50821|70|4028288617253475855 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.33432.18914|70|6242349747842387500 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.40030.24893|70|5755084948408634474 +1.3.6.1.4.1.9.9.109.1.2.3.1.24.53251.36558|70|9935343495073257974 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.521.56978|66|74 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.9186.213|66|73 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.16268.20475|66|54 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.17759.61739|66|93 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.23689.18870|66|81 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.31815.54480|66|98 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.33103.50821|66|14 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.33432.18914|66|36 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.40030.24893|66|66 +1.3.6.1.4.1.9.9.109.1.2.3.1.25.53251.36558|66|56 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.521.56978|70|9896650306660630803 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.9186.213|70|12209985520629545135 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.16268.20475|70|11813056167543624066 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.17759.61739|70|16053000599576554597 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.23689.18870|70|18358834980803529052 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.31815.54480|70|16544096150339367917 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.33103.50821|70|538800042495191723 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.33432.18914|70|11857589791529122871 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.40030.24893|70|3461284989967045243 +1.3.6.1.4.1.9.9.109.1.2.3.1.26.53251.36558|70|11968143525062600714 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.521.56978|66|20 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.9186.213|66|47 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.16268.20475|66|61 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.17759.61739|66|65 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.23689.18870|66|14 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.31815.54480|66|85 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.33103.50821|66|72 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.33432.18914|66|98 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.40030.24893|66|53 +1.3.6.1.4.1.9.9.109.1.2.3.1.27.53251.36558|66|10 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.521.56978|70|12103757085096184490 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.9186.213|70|5843830361500064657 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.16268.20475|70|4835774082804735247 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.17759.61739|70|5816035763173934275 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.23689.18870|70|1164307549666630523 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.31815.54480|70|10990798822073582251 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.33103.50821|70|6299245436047061138 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.33432.18914|70|5381347318027744817 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.40030.24893|70|15746196839872846105 +1.3.6.1.4.1.9.9.109.1.2.3.1.28.53251.36558|70|161883527798085410 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.521.56978|66|10 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.9186.213|66|68 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.16268.20475|66|23 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.17759.61739|66|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.23689.18870|66|1 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.31815.54480|66|6 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.33103.50821|66|98 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.33432.18914|66|82 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.40030.24893|66|16 +1.3.6.1.4.1.9.9.109.1.2.3.1.29.53251.36558|66|5 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.521.56978|70|13400642414041499439 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.9186.213|70|11304661000508108741 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.16268.20475|70|4516390742446116438 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.17759.61739|70|712473139123490782 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.23689.18870|70|10451729541519214955 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.31815.54480|70|5875934278731916632 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.33103.50821|70|11851468923929155496 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.33432.18914|70|9706081057617541131 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.40030.24893|70|17274595320087563389 +1.3.6.1.4.1.9.9.109.1.2.3.1.30.53251.36558|70|192402271146810407 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.4251.2|2|2 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.7251.3|2|3 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.13397.1|2|1 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.17564.2|2|2 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.23630.2|2|2 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.38929.2|2|2 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.47166.2|2|2 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.51708.1|2|1 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.57222.1|2|1 +1.3.6.1.4.1.9.9.109.1.2.4.1.1.58800.3|2|3 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.4251.2|66|76 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.7251.3|66|86 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.13397.1|66|32 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.17564.2|66|24 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.23630.2|66|90 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.38929.2|66|78 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.47166.2|66|68 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.51708.1|66|72 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.57222.1|66|7 +1.3.6.1.4.1.9.9.109.1.2.4.1.2.58800.3|66|63 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.4251.2|66|63285 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.7251.3|66|53546 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.13397.1|66|48639 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.17564.2|66|25925 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.23630.2|66|10236 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.38929.2|66|22952 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.47166.2|66|36386 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.51708.1|66|59094 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.57222.1|66|51439 +1.3.6.1.4.1.9.9.109.1.2.4.1.3.58800.3|66|16098 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.4251.2|66|9 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.7251.3|66|33 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.13397.1|66|11 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.17564.2|66|13 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.23630.2|66|9 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.38929.2|66|73 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.47166.2|66|4 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.51708.1|66|39 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.57222.1|66|57 +1.3.6.1.4.1.9.9.109.1.2.4.1.4.58800.3|66|51 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.4251.2|66|23417 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.7251.3|66|31195 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.13397.1|66|6720 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.17564.2|66|61155 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.23630.2|66|55792 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.38929.2|66|46253 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.47166.2|66|14058 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.51708.1|66|30560 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.57222.1|66|5784 +1.3.6.1.4.1.9.9.109.1.2.4.1.5.58800.3|66|58585 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.4251.2|2|1 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.7251.3|2|4 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.13397.1|2|0 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.17564.2|2|6 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.23630.2|2|0 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.38929.2|2|6 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.47166.2|2|5 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.51708.1|2|0 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.57222.1|2|3 +1.3.6.1.4.1.9.9.109.1.2.4.1.6.58800.3|2|2 +1.3.6.1.4.1.9.9.109.1.2.5.1.0|66|11 +1.3.6.1.4.1.9.9.109.1.2.5.2.0|66|33939 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.8025.50660|66|50660 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.11061.1486|66|1486 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.11069.43977|66|43977 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.28265.23860|66|23860 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.35051.14303|66|14303 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.36283.2959|66|2959 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.42204.45256|66|45256 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.42802.44838|66|44838 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.61447.37638|66|37638 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.1.64661.47730|66|47730 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.8025.50660|66|36170 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.11061.1486|66|42207 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.11069.43977|66|45614 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.28265.23860|66|22125 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.35051.14303|66|50421 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.36283.2959|66|27040 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.42204.45256|66|33126 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.42802.44838|66|8231 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.61447.37638|66|50415 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.2.64661.47730|66|46063 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.8025.50660|66|6 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.11061.1486|66|29 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.11069.43977|66|97 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.28265.23860|66|55 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.35051.14303|66|16 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.36283.2959|66|61 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.42204.45256|66|9 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.42802.44838|66|28 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.61447.37638|66|51 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.3.64661.47730|66|29 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.8025.50660|66|20 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.11061.1486|66|71 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.11069.43977|66|15 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.28265.23860|66|84 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.35051.14303|66|34 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.36283.2959|66|4 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.42204.45256|66|80 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.42802.44838|66|60 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.61447.37638|66|87 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.4.64661.47730|66|19 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.8025.50660|67|3675170886 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.11061.1486|67|4064616831 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.11069.43977|67|2380327368 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.28265.23860|67|1848980811 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.35051.14303|67|4065104924 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.36283.2959|67|3071143191 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.42204.45256|67|444804599 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.42802.44838|67|1792535979 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.61447.37638|67|3109485668 +1.3.6.1.4.1.9.9.109.1.2.5.3.1.5.64661.47730|67|1798876415 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.16683.48895.35002|66|35002 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.18720.61718.52124|66|52124 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.28936.23834.14668|66|14668 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.32346.30789.55465|66|55465 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.34089.11388.40727|66|40727 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.42715.33675.61887|66|61887 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.47371.19788.37363|66|37363 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.52454.22896.12510|66|12510 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.59802.25402.15265|66|15265 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.1.60431.32033.63487|66|63487 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.16683.48895.35002|66|35138 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.18720.61718.52124|66|42332 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.28936.23834.14668|66|8205 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.32346.30789.55465|66|35610 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.34089.11388.40727|66|18655 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.42715.33675.61887|66|8792 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.47371.19788.37363|66|36603 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.52454.22896.12510|66|2686 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.59802.25402.15265|66|45827 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.2.60431.32033.63487|66|14166 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.16683.48895.35002|4x|717561696e746c79206b657074206f78656e206275742062757420616374656420627574207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.18720.61718.52124|4x|7a6f6d62696573206b65707420666f7277617264207a6f6d62696573206163746564 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.28936.23834.14668|4x|666f727761726420666f727761726420666f7277617264207a6f6d6269657320627574206f78656e +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.32346.30789.55465|4x|64726976696e67204a616465642064726976696e67206f78656e204a6164656420666f7277617264206f78656e204a61646564 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.34089.11388.40727|4x|6b65707420717561696e746c79206163746564206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.42715.33675.61887|4x|7a6f6d6269657320666f7277617264206f78656e206f78656e206f78656e2064726976696e67206163746564207a6f6d62696573 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.47371.19788.37363|4x|6f78656e206b657074 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.52454.22896.12510|4x|4a61646564204a61646564204a616465642064726976696e67 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.59802.25402.15265|4|their +1.3.6.1.4.1.9.9.109.1.2.5.4.1.3.60431.32033.63487|4x|7a6f6d6269657320666f7277617264206f78656e20627574204a61646564206b657074206163746564204a6164656420627574 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.16683.48895.35002|67|2637003504 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.18720.61718.52124|67|1150051589 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.28936.23834.14668|67|1466560506 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.32346.30789.55465|67|3939095306 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.34089.11388.40727|67|845719368 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.42715.33675.61887|67|3896297407 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.47371.19788.37363|67|4222885604 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.52454.22896.12510|67|2519548440 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.59802.25402.15265|67|1179433578 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.4.60431.32033.63487|67|496965377 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.16683.48895.35002|66|44 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.18720.61718.52124|66|97 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.28936.23834.14668|66|97 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.32346.30789.55465|66|43 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.34089.11388.40727|66|34 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.42715.33675.61887|66|19 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.47371.19788.37363|66|67 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.52454.22896.12510|66|77 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.59802.25402.15265|66|55 +1.3.6.1.4.1.9.9.109.1.2.5.4.1.5.60431.32033.63487|66|24 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.7952.54529.32151|66|32151 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.14170.35158.34064|66|34064 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.14353.1576.21498|66|21498 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.17391.9714.37697|66|37697 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.24300.49333.30531|66|30531 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.30111.4885.10757|66|10757 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.42279.44258.13673|66|13673 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.52782.7129.14290|66|14290 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.60066.45127.57709|66|57709 +1.3.6.1.4.1.9.9.109.1.3.1.1.1.63585.42438.34574|66|34574 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.7952.54529.32151|4x|666f727761726420666f727761726420627574 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.14170.35158.34064|4x|64726976696e67207468656972 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.14353.1576.21498|4x|627574206163746564206163746564206f78656e206b657074206b657074 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.17391.9714.37697|4x|6b657074207468656972 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.24300.49333.30531|4x|64726976696e67206b657074 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.30111.4885.10757|4x|64726976696e6720746865697220627574204a61646564 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.42279.44258.13673|4x|6f78656e206b65707420666f7277617264206275742064726976696e67206b657074207a6f6d626965732064726976696e67 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.52782.7129.14290|4x|6f78656e20717561696e746c79206b657074207468656972207a6f6d626965732074686569722062757420616374656420627574 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.60066.45127.57709|4x|717561696e746c79207a6f6d626965732061637465642064726976696e672064726976696e6720627574206b657074 +1.3.6.1.4.1.9.9.109.1.3.1.1.2.63585.42438.34574|4|their +1.3.6.1.4.1.9.9.109.1.3.1.1.3.7952.54529.32151|66|31 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.14170.35158.34064|66|29 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.14353.1576.21498|66|23 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.17391.9714.37697|66|30 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.24300.49333.30531|66|0 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.30111.4885.10757|66|54 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.42279.44258.13673|66|51 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.52782.7129.14290|66|14 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.60066.45127.57709|66|59 +1.3.6.1.4.1.9.9.109.1.3.1.1.3.63585.42438.34574|66|9 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.7952.54529.32151|2|17 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.14170.35158.34064|2|7 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.14353.1576.21498|2|7 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.17391.9714.37697|2|15 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.24300.49333.30531|2|9 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.30111.4885.10757|2|10 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.42279.44258.13673|2|8 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.52782.7129.14290|2|17 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.60066.45127.57709|2|16 +1.3.6.1.4.1.9.9.109.1.3.1.1.4.63585.42438.34574|2|18 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.7952.54529.32151|6|1.3.6.1.3.3.168.226.157 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.14170.35158.34064|6|1.3.6.1.3.65.140.53.104.230.203 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.14353.1576.21498|6|1.3.6.1.3.88.83.240.128.167.91.123.99 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.17391.9714.37697|6|1.3.6.1.3.0 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.24300.49333.30531|6|1.3.6.1.3.78.9.202.14.13 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.30111.4885.10757|6|1.3.6.1.3.46.176.44.241 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.42279.44258.13673|6|1.3.6.1.3.204.130 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.52782.7129.14290|6|1.3.6.1.3.22.221.139.57.151.64.50.110.142 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.60066.45127.57709|6|1.3.6.1.3.216 +1.3.6.1.4.1.9.9.109.1.3.1.1.5.63585.42438.34574|6|1.3.6.1.3.74 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.7952.54529.32151|66|45 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.14170.35158.34064|66|97 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.14353.1576.21498|66|34 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.17391.9714.37697|66|31 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.24300.49333.30531|66|6 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.30111.4885.10757|66|99 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.42279.44258.13673|66|43 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.52782.7129.14290|66|51 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.60066.45127.57709|66|69 +1.3.6.1.4.1.9.9.109.1.3.1.1.6.63585.42438.34574|66|57 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.7952.54529.32151|66|31 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.14170.35158.34064|66|22 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.14353.1576.21498|66|40 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.17391.9714.37697|66|84 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.24300.49333.30531|66|28 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.30111.4885.10757|66|76 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.42279.44258.13673|66|70 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.52782.7129.14290|66|5 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.60066.45127.57709|66|82 +1.3.6.1.4.1.9.9.109.1.3.1.1.7.63585.42438.34574|66|56 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.7952.54529.32151|66|72 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.14170.35158.34064|66|58 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.14353.1576.21498|66|94 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.17391.9714.37697|66|7 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.24300.49333.30531|66|14 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.30111.4885.10757|66|73 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.42279.44258.13673|66|22 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.52782.7129.14290|66|12 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.60066.45127.57709|66|45 +1.3.6.1.4.1.9.9.109.1.3.1.1.8.63585.42438.34574|66|67 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.7952.54529.32151|70|12536855801311930303 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.14170.35158.34064|70|4572697853400027178 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.14353.1576.21498|70|6017610781913198128 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.17391.9714.37697|70|15327844184217226801 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.24300.49333.30531|70|6077808775831175044 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.30111.4885.10757|70|3569781898646775353 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.42279.44258.13673|70|13572180478614053874 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.52782.7129.14290|70|10311194709848961588 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.60066.45127.57709|70|15552960930157986525 +1.3.6.1.4.1.9.9.109.1.3.1.1.9.63585.42438.34574|70|11961455335232963984 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.4213.48030.43695|66|43695 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.6649.54424.42686|66|42686 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.31268.54020.15551|66|15551 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.36202.12464.13656|66|13656 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.41829.3820.41289|66|41289 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.42482.53385.10498|66|10498 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.47976.31857.32544|66|32544 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.53156.45280.48785|66|48785 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.61984.49990.63540|66|63540 +1.3.6.1.4.1.9.9.109.1.4.1.1.1.64988.4765.48638|66|48638 +1.3.6.1.4.1.9.9.109.1.4.1.1.2.4213.48030.43695|4|quaintly +1.3.6.1.4.1.9.9.109.1.4.1.1.2.6649.54424.42686|4x|616374656420717561696e746c79204a6164656420627574 +1.3.6.1.4.1.9.9.109.1.4.1.1.2.31268.54020.15551|4x|7a6f6d6269657320746865697220627574206163746564 +1.3.6.1.4.1.9.9.109.1.4.1.1.2.36202.12464.13656|4x|4a61646564206f78656e206f78656e +1.3.6.1.4.1.9.9.109.1.4.1.1.2.41829.3820.41289|4|quaintly +1.3.6.1.4.1.9.9.109.1.4.1.1.2.42482.53385.10498|4x|62757420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.9.9.109.1.4.1.1.2.47976.31857.32544|4x|666f7277617264206b657074204a61646564 +1.3.6.1.4.1.9.9.109.1.4.1.1.2.53156.45280.48785|4x|6163746564204a61646564 +1.3.6.1.4.1.9.9.109.1.4.1.1.2.61984.49990.63540|4x|4a6164656420627574206f78656e +1.3.6.1.4.1.9.9.109.1.4.1.1.2.64988.4765.48638|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.4213.48030.43695|66|5 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.6649.54424.42686|66|1 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.31268.54020.15551|66|87 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.36202.12464.13656|66|6 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.41829.3820.41289|66|85 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.42482.53385.10498|66|67 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.47976.31857.32544|66|56 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.53156.45280.48785|66|25 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.61984.49990.63540|66|93 +1.3.6.1.4.1.9.9.109.1.4.1.1.3.64988.4765.48638|66|94 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.4213.48030.43695|66|20 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.6649.54424.42686|66|19 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.31268.54020.15551|66|40 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.36202.12464.13656|66|18 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.41829.3820.41289|66|16 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.42482.53385.10498|66|12 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.47976.31857.32544|66|31 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.53156.45280.48785|66|30 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.61984.49990.63540|66|65 +1.3.6.1.4.1.9.9.109.1.4.1.1.4.64988.4765.48638|66|78 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.4213.48030.43695|66|54 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.6649.54424.42686|66|69 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.31268.54020.15551|66|68 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.36202.12464.13656|66|88 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.41829.3820.41289|66|83 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.42482.53385.10498|66|19 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.47976.31857.32544|66|59 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.53156.45280.48785|66|90 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.61984.49990.63540|66|94 +1.3.6.1.4.1.9.9.109.1.4.1.1.5.64988.4765.48638|66|29 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.4213.48030.43695|66|91 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.6649.54424.42686|66|71 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.31268.54020.15551|66|38 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.36202.12464.13656|66|70 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.41829.3820.41289|66|36 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.42482.53385.10498|66|34 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.47976.31857.32544|66|65 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.53156.45280.48785|66|48 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.61984.49990.63540|66|86 +1.3.6.1.4.1.9.9.109.1.4.1.1.6.64988.4765.48638|66|75 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.4213.48030.43695|66|31 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.6649.54424.42686|66|71 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.31268.54020.15551|66|59 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.36202.12464.13656|66|18 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.41829.3820.41289|66|16 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.42482.53385.10498|66|28 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.47976.31857.32544|66|60 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.53156.45280.48785|66|54 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.61984.49990.63540|66|77 +1.3.6.1.4.1.9.9.109.1.4.1.1.7.64988.4765.48638|66|66 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.4213.48030.43695|65|2319398173 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.6649.54424.42686|65|3249403752 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.31268.54020.15551|65|2155949024 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.36202.12464.13656|65|2160808000 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.41829.3820.41289|65|1376302709 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.42482.53385.10498|65|3349394117 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.47976.31857.32544|65|3008149292 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.53156.45280.48785|65|4092415521 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.61984.49990.63540|65|3409411081 +1.3.6.1.4.1.9.9.109.1.4.1.1.8.64988.4765.48638|65|3245997006 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.4213.48030.43695|65|3454673130 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.6649.54424.42686|65|793272003 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.31268.54020.15551|65|3654728742 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.36202.12464.13656|65|3957871964 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.41829.3820.41289|65|2134320096 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.42482.53385.10498|65|4144251809 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.47976.31857.32544|65|2191076942 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.53156.45280.48785|65|2196810675 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.61984.49990.63540|65|3650134545 +1.3.6.1.4.1.9.9.109.1.4.1.1.9.64988.4765.48638|65|2391168365 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.4213.48030.43695|66|98 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.6649.54424.42686|66|88 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.31268.54020.15551|66|17 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.36202.12464.13656|66|24 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.41829.3820.41289|66|75 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.42482.53385.10498|66|45 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.47976.31857.32544|66|34 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.53156.45280.48785|66|85 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.61984.49990.63540|66|90 +1.3.6.1.4.1.9.9.109.1.4.1.1.10.64988.4765.48638|66|13 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.4213.48030.43695|70|10771359123386452260 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.6649.54424.42686|70|6626829195585800715 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.31268.54020.15551|70|15590584626572032421 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.36202.12464.13656|70|3608045537640384570 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.41829.3820.41289|70|13156002808859145705 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.42482.53385.10498|70|9749715017365667806 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.47976.31857.32544|70|10496628384563594658 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.53156.45280.48785|70|10871113670784198631 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.61984.49990.63540|70|364988844010773600 +1.3.6.1.4.1.9.9.109.1.4.1.1.11.64988.4765.48638|70|14872310483613750125 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.4213.48030.43695|66|31 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.6649.54424.42686|66|95 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.31268.54020.15551|66|73 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.36202.12464.13656|66|36 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.41829.3820.41289|66|52 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.42482.53385.10498|66|52 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.47976.31857.32544|66|15 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.53156.45280.48785|66|43 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.61984.49990.63540|66|27 +1.3.6.1.4.1.9.9.109.1.4.1.1.12.64988.4765.48638|66|65 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.4213.48030.43695|70|17775814700657783740 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.6649.54424.42686|70|14498879412306746375 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.31268.54020.15551|70|17550750001047018929 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.36202.12464.13656|70|13563588664594938177 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.41829.3820.41289|70|13864198119835081503 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.42482.53385.10498|70|1629421407624276278 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.47976.31857.32544|70|17360179421514529509 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.53156.45280.48785|70|16167447620657197327 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.61984.49990.63540|70|4801744969275681230 +1.3.6.1.4.1.9.9.109.1.4.1.1.13.64988.4765.48638|70|2906757100866319957 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.1|2|5 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.4|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.5|2|7 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.16|2|5 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.18|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.19|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.24|2|3 +1.3.6.1.4.1.9.9.117.1.1.1.1.1.27|2|7 +1.3.6.1.4.1.9.9.117.1.1.1.1.2.1|4|zombies +1.3.6.1.4.1.9.9.117.1.1.1.1.2.4|4x|666f72776172642062757420627574 +1.3.6.1.4.1.9.9.117.1.1.1.1.2.5|4x|6b657074204a616465642064726976696e67 +1.3.6.1.4.1.9.9.117.1.1.1.1.2.16|4x|4a6164656420666f727761726420627574204a61646564204a616465642062757420717561696e746c79206f78656e20666f7277617264 +1.3.6.1.4.1.9.9.117.1.1.1.1.2.18|4|forward +1.3.6.1.4.1.9.9.117.1.1.1.1.2.19|4x|6f78656e20666f727761726420666f727761726420666f727761726420627574206f78656e20717561696e746c792062757420627574 +1.3.6.1.4.1.9.9.117.1.1.1.1.2.24|4x|666f7277617264206275742064726976696e67206f78656e +1.3.6.1.4.1.9.9.117.1.1.1.1.2.27|4|quaintly +1.3.6.1.4.1.9.9.117.1.1.1.1.3.1|2|13 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.4|2|31 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.5|2|6 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.16|2|16 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.18|2|31 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.19|2|26 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.24|2|12 +1.3.6.1.4.1.9.9.117.1.1.1.1.3.27|2|14 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.1|2|6 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.4|2|13 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.5|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.16|2|3 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.18|2|11 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.19|2|13 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.24|2|29 +1.3.6.1.4.1.9.9.117.1.1.1.1.4.27|2|13 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.1|2|3 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.4|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.5|2|7 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.16|2|4 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.18|2|1 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.19|2|1 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.24|2|4 +1.3.6.1.4.1.9.9.117.1.1.1.1.5.27|2|6 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.1|2|4 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.4|2|3 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.5|2|1 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.16|2|1 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.18|2|3 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.19|2|1 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.24|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.6.27|2|5 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.1|2|1 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.4|2|2 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.5|2|4 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.16|2|11 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.18|2|23 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.19|2|8 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.24|2|12 +1.3.6.1.4.1.9.9.117.1.1.1.1.7.27|2|23 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.6|2|5 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.7|2|4 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.15|2|3 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.16|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.19|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.27|2|4 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.30|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.1.31|2|1 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.6|2|12 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.7|2|4 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.15|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.16|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.19|2|7 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.27|2|8 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.30|2|7 +1.3.6.1.4.1.9.9.117.1.1.2.1.2.31|2|4 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.6|2|24 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.7|2|6 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.15|2|7 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.16|2|5 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.19|2|20 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.27|2|13 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.30|2|10 +1.3.6.1.4.1.9.9.117.1.1.2.1.3.31|2|2 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.6|4x|6b6570742061637465642062757420627574206f78656e20627574 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.7|4x|7a6f6d62696573206b65707420616374656420717561696e746c79204a61646564206f78656e206b657074206f78656e +1.3.6.1.4.1.9.9.117.1.1.2.1.4.15|4x|627574207a6f6d62696573 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.16|4x|4a6164656420666f72776172642064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.19|4x|6163746564207a6f6d62696573206b65707420717561696e746c79 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.27|4x|6b65707420717561696e746c792064726976696e672074686569722062757420717561696e746c79 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.30|4x|717561696e746c79206163746564206f78656e207468656972204a616465642074686569722064726976696e67 +1.3.6.1.4.1.9.9.117.1.1.2.1.4.31|4x|7468656972207468656972 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.6|2|30 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.7|2|25 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.15|2|6 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.16|2|25 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.19|2|17 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.27|2|19 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.30|2|25 +1.3.6.1.4.1.9.9.117.1.1.2.1.5.31|2|2 +1.3.6.1.4.1.9.9.117.1.1.3.0|2|9 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.11|2|7 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.12|2|18 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.15|2|14 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.18|2|13 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.19|2|28 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.20|2|16 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.27|2|2 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.29|2|2 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.30|2|27 +1.3.6.1.4.1.9.9.117.1.1.4.1.1.31|2|27 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.11|2|28 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.12|2|2 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.15|2|31 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.18|2|28 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.19|2|5 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.20|2|13 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.27|2|16 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.29|2|4 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.30|2|11 +1.3.6.1.4.1.9.9.117.1.1.4.1.2.31|2|25 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.11|2|14 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.12|2|16 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.15|2|24 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.18|2|23 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.19|2|16 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.20|2|22 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.27|2|11 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.29|2|14 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.30|2|14 +1.3.6.1.4.1.9.9.117.1.1.4.1.3.31|2|19 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.11|2|20 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.12|2|10 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.15|2|6 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.18|2|9 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.19|2|21 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.20|2|28 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.27|2|18 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.29|2|9 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.30|2|22 +1.3.6.1.4.1.9.9.117.1.1.4.1.4.31|2|12 +1.3.6.1.4.1.9.9.117.1.1.5.0|66|61033 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.5|2|1 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.12|2|4 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.14|2|2 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.15|2|1 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.20|2|2 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.23|2|4 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.29|2|4 +1.3.6.1.4.1.9.9.117.1.2.1.1.1.31|2|4 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.5|2|25 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.12|2|11 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.14|2|14 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.15|2|17 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.20|2|8 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.23|2|20 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.29|2|8 +1.3.6.1.4.1.9.9.117.1.2.1.1.2.31|2|1 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.5|2|12 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.12|2|7 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.14|2|16 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.15|2|20 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.20|2|19 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.23|2|22 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.29|2|7 +1.3.6.1.4.1.9.9.117.1.2.1.1.3.31|2|16 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.5|67|2650613581 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.12|67|3336923482 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.14|67|1586519763 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.15|67|843521143 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.20|67|1728591606 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.23|67|3380847573 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.29|67|2507423664 +1.3.6.1.4.1.9.9.117.1.2.1.1.4.31|67|927620814 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.5|67|1761743004 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.12|67|3248124270 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.14|67|1130741044 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.15|67|3891424805 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.20|67|1899751227 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.23|67|1918671328 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.29|67|4268202887 +1.3.6.1.4.1.9.9.117.1.2.1.1.5.31|67|3625784997 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.5|4x|666f72776172642064726976696e672064726976696e6720666f7277617264206b657074206275742064726976696e67 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.12|4x|717561696e746c7920717561696e746c7920627574207a6f6d62696573206f78656e204a61646564206163746564 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.14|4x|7468656972207a6f6d62696573206f78656e2064726976696e67204a61646564206163746564206b657074204a61646564204a61646564 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.15|4|Jaded +1.3.6.1.4.1.9.9.117.1.2.1.1.6.20|4x|6b657074207a6f6d6269657320666f7277617264207468656972 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.23|4x|627574206b657074204a61646564204a61646564204a616465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.29|4x|6f78656e206f78656e206163746564204a61646564 +1.3.6.1.4.1.9.9.117.1.2.1.1.6.31|4|oxen +1.3.6.1.4.1.9.9.117.1.2.1.1.7.5|4x|62757420627574206b657074204a61646564 +1.3.6.1.4.1.9.9.117.1.2.1.1.7.12|4x|6f78656e207a6f6d62696573206f78656e +1.3.6.1.4.1.9.9.117.1.2.1.1.7.14|4x|666f7277617264207a6f6d6269657320746865697220717561696e746c79 +1.3.6.1.4.1.9.9.117.1.2.1.1.7.15|4x|746865697220627574206f78656e207468656972 +1.3.6.1.4.1.9.9.117.1.2.1.1.7.20|4x|746865697220717561696e746c79 +1.3.6.1.4.1.9.9.117.1.2.1.1.7.23|4|driving +1.3.6.1.4.1.9.9.117.1.2.1.1.7.29|4x|666f7277617264206b6570742064726976696e6720666f72776172642064726976696e67 +1.3.6.1.4.1.9.9.117.1.2.1.1.7.31|4x|4a61646564206f78656e206f78656e2064726976696e6720627574 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.5|66|13876 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.12|66|39581 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.14|66|57038 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.15|66|57543 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.20|66|13652 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.23|66|19160 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.29|66|63177 +1.3.6.1.4.1.9.9.117.1.2.1.1.8.31|66|24546 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.7|2|3 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.11|2|1 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.12|2|0 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.13|2|2 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.23|2|16 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.27|2|1 +1.3.6.1.4.1.9.9.117.1.2.2.1.1.30|2|1 +1.3.6.1.4.1.9.9.117.1.2.2.1.2.7|4x|7a6f6d6269657320746865697220627574207a6f6d62696573207a6f6d62696573206163746564206b657074206b65707420717561696e746c79 +1.3.6.1.4.1.9.9.117.1.2.2.1.2.11|4|Jaded +1.3.6.1.4.1.9.9.117.1.2.2.1.2.12|4x|627574204a6164656420616374656420666f727761726420717561696e746c79206163746564 +1.3.6.1.4.1.9.9.117.1.2.2.1.2.13|4x|7a6f6d62696573206b65707420666f7277617264206f78656e20717561696e746c79206f78656e204a6164656420627574 +1.3.6.1.4.1.9.9.117.1.2.2.1.2.23|4x|7468656972206f78656e20717561696e746c792062757420717561696e746c79207468656972206b657074 +1.3.6.1.4.1.9.9.117.1.2.2.1.2.27|4x|627574207468656972207a6f6d62696573 +1.3.6.1.4.1.9.9.117.1.2.2.1.2.30|4x|627574206f78656e +1.3.6.1.4.1.9.9.117.1.2.3.1.1.8|2|2 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.10|2|1 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.13|2|1 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.14|2|2 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.20|2|2 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.22|2|2 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.23|2|1 +1.3.6.1.4.1.9.9.117.1.2.3.1.1.29|2|2 +1.3.6.1.4.1.9.9.117.1.3.1.0|2|2 +1.3.6.1.4.1.9.9.117.1.3.2.0|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.1|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.2|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.4|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.5|2|2 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.6|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.7|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.8|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.9|2|2 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.11|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.14|2|2 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.18|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.19|2|2 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.21|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.25|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.26|2|3 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.26|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.27|2|1 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.30|2|4 +1.3.6.1.4.1.9.9.117.1.4.1.1.1.31|2|1 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.3|2|4 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.13|2|1 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.17|2|1 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.18|2|4 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.22|2|1 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.24|2|2 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.26|2|2 +1.3.6.1.4.1.9.9.117.1.5.1.1.1.31|2|1 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.1.20536|66|20536 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.1.24360|66|24360 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.2.60246|66|60246 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.8.21110|66|21110 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.10.18774|66|18774 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.18.34118|66|34118 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.20.24263|66|24263 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.21.5548|66|5548 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.25.27317|66|27317 +1.3.6.1.4.1.9.9.117.1.6.1.1.1.30.41629|66|41629 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.1.20536|2|2 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.1.24360|2|4 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.2.60246|2|3 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.8.21110|2|3 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.10.18774|2|1 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.18.34118|2|4 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.20.24263|2|3 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.21.5548|2|2 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.25.27317|2|3 +1.3.6.1.4.1.9.9.117.1.6.1.1.2.30.41629|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.2.53113|66|53113 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.10.13370|66|13370 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.10.58710|66|58710 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.12.1018|66|1018 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.15.21396|66|21396 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.21.21751|66|21751 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.24.63359|66|63359 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.25.65482|66|65482 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.27.18113|66|18113 +1.3.6.1.4.1.9.9.117.1.6.2.1.1.27.48504|66|48504 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.2.53113|2|9 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.10.13370|2|5 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.10.58710|2|10 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.12.1018|2|23 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.15.21396|2|21 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.21.21751|2|22 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.24.63359|2|20 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.25.65482|2|19 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.27.18113|2|31 +1.3.6.1.4.1.9.9.117.1.6.2.1.2.27.48504|2|19 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.2.53113|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.10.13370|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.10.58710|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.12.1018|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.15.21396|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.21.21751|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.24.63359|2|1 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.25.65482|2|2 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.27.18113|2|2 +1.3.6.1.4.1.9.9.117.1.6.2.1.3.27.48504|2|1 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.1|66|25441 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.4|66|6818 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.5|66|44851 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.9|66|33852 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.12|66|35360 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.15|66|17917 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.20|66|55389 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.23|66|48174 +1.3.6.1.4.1.9.9.117.1.7.1.1.1.30|66|30688 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.1|2|2 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.4|2|1 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.5|2|1 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.9|2|1 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.12|2|1 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.15|2|1 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.20|2|2 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.23|2|2 +1.3.6.1.4.1.9.9.117.1.7.1.1.2.30|2|1 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.9|66|41370 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.14|66|52003 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.16|66|46889 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.18|66|11590 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.19|66|46437 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.22|66|63065 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.23|66|48410 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.24|66|53620 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.26|66|11023 +1.3.6.1.4.1.9.9.117.1.7.2.1.1.29|66|10318 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.9|2|1 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.14|2|2 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.16|2|2 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.18|2|2 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.19|2|1 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.22|2|1 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.23|2|2 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.24|2|1 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.26|2|2 +1.3.6.1.4.1.9.9.117.1.7.2.1.2.29|2|1 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.2|66|51721 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.3|66|17281 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.4|66|43398 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.8|66|29967 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.9|66|51797 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.15|66|54490 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.16|66|42031 +1.3.6.1.4.1.9.9.117.1.7.3.1.1.23|66|39972 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.2|2|2 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.3|2|1 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.4|2|2 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.8|2|1 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.9|2|1 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.15|2|1 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.16|2|1 +1.3.6.1.4.1.9.9.117.1.7.3.1.2.23|2|1 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.1.1267|66|1267 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.3.629|66|629 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.3.1733|66|1733 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.7.3612|66|3612 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.17.3132|66|3132 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.18.4038|66|4038 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.19.2397|66|2397 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.21.1323|66|1323 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.29.894|66|894 +1.3.6.1.4.1.9.9.117.1.7.4.1.1.29.3094|66|3094 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.1.1267|4x|7a6f6d626965732064726976696e67206b657074 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.3.629|4x|7a6f6d62696573206163746564206163746564204a61646564 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.3.1733|4x|7a6f6d62696573206163746564206f78656e2064726976696e67 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.7.3612|4x|62757420627574206f78656e207a6f6d62696573206f78656e20717561696e746c792064726976696e672062757420717561696e746c79 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.17.3132|4x|6b657074204a616465642074686569722064726976696e67 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.18.4038|4x|4a6164656420746865697220666f7277617264207468656972204a61646564 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.19.2397|4x|627574204a6164656420746865697220666f7277617264206b657074 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.21.1323|4x|717561696e746c7920717561696e746c79207468656972204a61646564204a61646564206f78656e2064726976696e67 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.29.894|4x|666f7277617264207a6f6d62696573 +1.3.6.1.4.1.9.9.117.1.7.4.1.2.29.3094|4x|6b657074204a61646564207a6f6d62696573206f78656e206f78656e207468656972 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.1.1267|66|27855 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.3.629|66|39251 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.3.1733|66|40348 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.7.3612|66|5443 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.17.3132|66|54303 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.18.4038|66|25212 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.19.2397|66|39539 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.21.1323|66|20445 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.29.894|66|23276 +1.3.6.1.4.1.9.9.117.1.7.4.1.3.29.3094|66|2788 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.1.1267|2|3 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.3.629|2|15 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.3.1733|2|15 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.7.3612|2|1 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.17.3132|2|22 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.18.4038|2|10 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.19.2397|2|18 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.21.1323|2|9 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.29.894|2|26 +1.3.6.1.4.1.9.9.117.1.7.4.1.4.29.3094|2|25 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.1.1267|2|1 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.3.629|2|1 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.3.1733|2|2 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.7.3612|2|2 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.17.3132|2|2 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.18.4038|2|2 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.19.2397|2|1 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.21.1323|2|2 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.29.894|2|1 +1.3.6.1.4.1.9.9.117.1.7.4.1.5.29.3094|2|2 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.2|2|29 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.8|2|12 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.10|2|20 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.17|2|12 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.19|2|19 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.21|2|14 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.24|2|24 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.30|2|24 +1.3.6.1.4.1.9.9.117.1.8.1.1.1.31|2|19 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.1|2|6 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.4|2|28 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.9|2|1 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.10|2|20 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.11|2|24 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.13|2|9 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.16|2|20 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.19|2|16 +1.3.6.1.4.1.9.9.117.1.8.2.1.1.31|2|30 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.5|66|9 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.11|66|79 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.12|66|89 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.14|66|34 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.15|66|74 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.23|66|24 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.25|66|88 +1.3.6.1.4.1.9.9.276.1.1.1.1.1.29|66|35 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.5|66|12 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.11|66|5 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.12|66|1 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.14|66|44 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.15|66|0 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.23|66|90 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.25|66|34 +1.3.6.1.4.1.9.9.276.1.1.1.1.2.29|66|82 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.5|66|32 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.11|66|26 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.12|66|32 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.14|66|9 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.15|66|66 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.23|66|14 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.25|66|47 +1.3.6.1.4.1.9.9.276.1.1.1.1.3.29|66|41 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.5|65|4052283384 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.11|65|480980367 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.12|65|3508786834 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.14|65|2019443519 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.15|65|1342830392 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.23|65|1001601252 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.25|65|4065517905 +1.3.6.1.4.1.9.9.276.1.1.1.1.4.29|65|2444516430 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.5|65|2440735346 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.11|65|3835354025 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.12|65|942612100 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.14|65|82195730 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.15|65|2249357700 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.23|65|3542170101 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.25|65|4072544026 +1.3.6.1.4.1.9.9.276.1.1.1.1.5.29|65|2640427379 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.5|65|3650575792 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.11|65|235730517 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.12|65|3647367127 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.14|65|216797306 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.15|65|2972949031 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.23|65|2018345924 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.25|65|3912317367 +1.3.6.1.4.1.9.9.276.1.1.1.1.6.29|65|791649334 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.5|65|4007008744 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.11|65|267618974 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.12|65|802656157 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.14|65|3644678682 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.15|65|3081748391 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.23|65|4173505379 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.25|65|2349555014 +1.3.6.1.4.1.9.9.276.1.1.1.1.7.29|65|1369139610 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.5|65|1848680438 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.11|65|1790263457 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.12|65|4286087546 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.14|65|3666898480 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.15|65|164051556 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.23|65|135332959 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.25|65|1559022063 +1.3.6.1.4.1.9.9.276.1.1.1.1.8.29|65|1334628187 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.5|65|150802315 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.11|65|4007752308 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.12|65|2608136927 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.14|65|1609551714 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.15|65|19654709 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.23|65|2364930933 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.25|65|2131515074 +1.3.6.1.4.1.9.9.276.1.1.1.1.9.29|65|1624161988 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.5|65|628727095 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.11|65|3009408111 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.12|65|84186513 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.14|65|4119672180 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.15|65|3992483911 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.23|65|4099430526 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.25|65|731955654 +1.3.6.1.4.1.9.9.276.1.1.1.1.10.29|65|1803277624 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.5|65|3859014027 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.11|65|308797052 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.12|65|3277252804 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.14|65|45074466 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.15|65|449876318 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.23|65|1461377563 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.25|65|2869435659 +1.3.6.1.4.1.9.9.276.1.1.1.1.11.29|65|972661753 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.5|67|978493077 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.11|67|308489210 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.12|67|330041448 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.14|67|2865645358 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.15|67|2556292449 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.23|67|2168609144 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.25|67|63056245 +1.3.6.1.4.1.9.9.276.1.1.1.1.12.29|67|2745518699 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.2|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.13|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.20|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.22|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.23|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.25|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.29|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.1.30|65|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.5|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.6|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.12|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.17|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.21|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.22|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.23|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.25|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.2.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.5|4|acted +1.3.6.1.4.1.9.9.276.1.1.2.1.3.6|4x|7468656972206f78656e20666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.12|4x|616374656420666f727761726420627574206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.17|4x|4a61646564207a6f6d626965732064726976696e67207a6f6d626965732064726976696e6720746865697220666f727761726420627574207a6f6d62696573 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.21|4x|6f78656e2061637465642074686569722064726976696e67 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.22|4x|6f78656e20666f7277617264206b657074206163746564 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.23|4x|6163746564206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.25|4x|746865697220666f7277617264206b657074207a6f6d62696573207468656972206b65707420717561696e746c79206f78656e204a61646564 +1.3.6.1.4.1.9.9.276.1.1.2.1.3.30|4x|4a61646564206f78656e204a61646564206f78656e206b657074204a6164656420666f7277617264207468656972204a61646564 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.5|65|1387081831 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.6|65|2496136103 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.12|65|3136594009 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.17|65|2162916259 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.21|65|4292195881 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.22|65|128378014 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.23|65|1214810007 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.25|65|2878318125 +1.3.6.1.4.1.9.9.276.1.1.2.1.4.30|65|139833157 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.5|67|3626823156 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.6|67|3287886572 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.12|67|2628828927 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.17|67|1930554714 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.21|67|177625006 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.22|67|2500042606 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.23|67|917039755 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.25|67|2469951495 +1.3.6.1.4.1.9.9.276.1.1.2.1.5.30|67|652857983 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.5|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.6|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.12|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.17|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.21|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.22|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.23|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.25|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.6.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.5|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.6|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.12|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.17|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.21|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.22|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.23|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.25|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.7.30|2|40 +1.3.6.1.4.1.9.9.276.1.1.2.1.8.5|4x|7468656972207468656972207a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.8.6|4|zombies +1.3.6.1.4.1.9.9.276.1.1.2.1.8.12|4|Jaded +1.3.6.1.4.1.9.9.276.1.1.2.1.8.17|4x|7a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.2.1.8.21|4x|64726976696e67206b6570742064726976696e67 +1.3.6.1.4.1.9.9.276.1.1.2.1.8.22|4x|666f727761726420717561696e746c79206b6570742064726976696e67 +1.3.6.1.4.1.9.9.276.1.1.2.1.8.23|4x|616374656420666f7277617264204a61646564 +1.3.6.1.4.1.9.9.276.1.1.2.1.8.25|4|oxen +1.3.6.1.4.1.9.9.276.1.1.2.1.8.30|4x|6f78656e2064726976696e67206b657074206163746564206163746564 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.5|2|10 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.6|2|15 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.12|2|16 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.17|2|28 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.21|2|14 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.22|2|27 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.23|2|11 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.25|2|18 +1.3.6.1.4.1.9.9.276.1.1.2.1.9.30|2|29 +1.3.6.1.4.1.9.9.276.1.1.2.1.10.5|4x|6b657074206163746564204a61646564206163746564206f78656e +1.3.6.1.4.1.9.9.276.1.1.2.1.10.6|4x|4a61646564206163746564206b6570742064726976696e672062757420627574206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.10.12|4x|6f78656e204a616465642064726976696e67207a6f6d62696573206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.10.17|4x|61637465642064726976696e6720666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.2.1.10.21|4|Jaded +1.3.6.1.4.1.9.9.276.1.1.2.1.10.22|4x|6b657074204a61646564206f78656e206f78656e20616374656420666f7277617264207a6f6d62696573207a6f6d62696573206f78656e +1.3.6.1.4.1.9.9.276.1.1.2.1.10.23|4x|64726976696e672064726976696e6720717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.2.1.10.25|4x|64726976696e67207a6f6d62696573 +1.3.6.1.4.1.9.9.276.1.1.2.1.10.30|4x|7a6f6d62696573206b65707420717561696e746c7920627574206163746564 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.5|66|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.6|66|20 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.12|66|0 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.17|66|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.21|66|72 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.22|66|87 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.23|66|3 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.25|66|95 +1.3.6.1.4.1.9.9.276.1.1.2.1.11.30|66|96 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.5|66|97 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.6|66|50 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.12|66|59 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.17|66|76 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.21|66|51 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.22|66|48 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.23|66|86 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.25|66|60 +1.3.6.1.4.1.9.9.276.1.1.2.1.12.30|66|13 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.5|4x|627574207a6f6d62696573204a6164656420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.6|4x|6f78656e206f78656e204a6164656420717561696e746c79206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.12|4x|7a6f6d6269657320717561696e746c792064726976696e67207468656972204a6164656420717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.17|4x|627574204a61646564204a61646564206b657074204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.21|4x|6f78656e206f78656e207a6f6d62696573 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.22|4x|7a6f6d62696573206b65707420666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.23|4x|6b65707420666f727761726420717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.25|4x|627574206f78656e206163746564206b6570742064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.276.1.1.2.1.13.30|4x|666f727761726420746865697220627574206f78656e20666f727761726420666f7277617264206b65707420746865697220717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.5|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.6|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.12|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.17|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.21|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.22|2|4 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.23|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.25|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.14.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.5|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.6|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.12|2|3 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.17|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.21|2|4 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.22|2|3 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.23|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.25|2|4 +1.3.6.1.4.1.9.9.276.1.1.2.1.15.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.5|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.6|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.12|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.17|2|3 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.21|2|3 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.22|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.23|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.25|2|3 +1.3.6.1.4.1.9.9.276.1.1.2.1.16.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.5|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.6|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.12|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.17|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.21|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.22|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.23|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.25|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.17.30|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.5|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.6|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.12|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.17|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.21|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.22|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.23|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.25|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.18.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.5|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.6|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.12|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.17|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.21|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.22|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.23|2|1 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.25|2|2 +1.3.6.1.4.1.9.9.276.1.1.2.1.19.30|2|2 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.1.16719|66|16719 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.1.39424|66|39424 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.4.45280|66|45280 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.7.95|66|95 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.10.52561|66|52561 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.12.14466|66|14466 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.13.56581|66|56581 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.17.63266|66|63266 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.18.7326|66|7326 +1.3.6.1.4.1.9.9.276.1.1.3.1.1.20.26270|66|26270 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.1.16719|4x|4a61646564206b65707420616374656420717561696e746c792064726976696e672064726976696e67207468656972206163746564206163746564 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.1.39424|4x|6163746564206b657074204a61646564206163746564204a61646564204a6164656420616374656420717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.4.45280|4x|64726976696e6720666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.7.95|4x|6b657074207468656972206163746564 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.10.52561|4x|62757420666f7277617264206b6570742064726976696e6720717561696e746c79206b657074207468656972206b657074204a61646564 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.12.14466|4x|627574206f78656e206f78656e204a616465642064726976696e67206b65707420666f727761726420717561696e746c79204a61646564 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.13.56581|4x|7a6f6d62696573206f78656e +1.3.6.1.4.1.9.9.276.1.1.3.1.2.17.63266|4x|74686569722064726976696e6720666f7277617264207a6f6d62696573 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.18.7326|4x|7a6f6d62696573206f78656e206163746564 +1.3.6.1.4.1.9.9.276.1.1.3.1.2.20.26270|4|kept +1.3.6.1.4.1.9.9.276.1.1.3.1.3.1.16719|4x|7468656972206163746564206f78656e2064726976696e67207468656972 +1.3.6.1.4.1.9.9.276.1.1.3.1.3.1.39424|4|Jaded +1.3.6.1.4.1.9.9.276.1.1.3.1.3.4.45280|4|acted +1.3.6.1.4.1.9.9.276.1.1.3.1.3.7.95|4x|64726976696e67206163746564206b6570742074686569722064726976696e67206f78656e +1.3.6.1.4.1.9.9.276.1.1.3.1.3.10.52561|4|forward +1.3.6.1.4.1.9.9.276.1.1.3.1.3.12.14466|4x|6b657074207a6f6d6269657320627574 +1.3.6.1.4.1.9.9.276.1.1.3.1.3.13.56581|4x|4a61646564206f78656e206163746564206163746564 +1.3.6.1.4.1.9.9.276.1.1.3.1.3.17.63266|4x|6b657074206f78656e206b6570742064726976696e6720666f7277617264206b657074 +1.3.6.1.4.1.9.9.276.1.1.3.1.3.18.7326|4|Jaded +1.3.6.1.4.1.9.9.276.1.1.3.1.3.20.26270|4x|666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.1.16719|4x|666f7277617264204a6164656420717561696e746c79 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.1.39424|4x|7a6f6d62696573204a6164656420666f72776172642064726976696e67207468656972206f78656e20666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.4.45280|4x|717561696e746c79204a61646564204a61646564206163746564 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.7.95|4x|717561696e746c7920627574206f78656e204a61646564206f78656e20746865697220666f7277617264207a6f6d62696573 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.10.52561|4x|6f78656e2061637465642064726976696e67206b657074206b657074206b6570742061637465642064726976696e67 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.12.14466|4x|64726976696e67206f78656e206f78656e207a6f6d62696573204a6164656420717561696e746c79206b657074207468656972 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.13.56581|4x|7a6f6d6269657320666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.17.63266|4x|666f72776172642064726976696e672062757420666f7277617264207468656972204a616465642064726976696e672064726976696e67 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.18.7326|4x|627574207a6f6d626965732064726976696e67207468656972206b6570742064726976696e6720746865697220666f7277617264 +1.3.6.1.4.1.9.9.276.1.1.3.1.4.20.26270|4x|746865697220627574 +1.3.6.1.4.1.9.9.276.1.1.3.1.5.1.16719|4|acted +1.3.6.1.4.1.9.9.276.1.1.3.1.5.1.39424|4|zombies +1.3.6.1.4.1.9.9.276.1.1.3.1.5.4.45280|4|kept +1.3.6.1.4.1.9.9.276.1.1.3.1.5.7.95|4|kept +1.3.6.1.4.1.9.9.276.1.1.3.1.5.10.52561|4|Jaded +1.3.6.1.4.1.9.9.276.1.1.3.1.5.12.14466|4|zombies +1.3.6.1.4.1.9.9.276.1.1.3.1.5.13.56581|4|acted +1.3.6.1.4.1.9.9.276.1.1.3.1.5.17.63266|4|acted +1.3.6.1.4.1.9.9.276.1.1.3.1.5.18.7326|4|quaintly +1.3.6.1.4.1.9.9.276.1.1.3.1.5.20.26270|4|quaintly +1.3.6.1.4.1.9.9.276.1.1.4.1.1.15|70|6515459484201652903 +1.3.6.1.4.1.9.9.276.1.1.4.1.1.20|70|6525228104465243106 +1.3.6.1.4.1.9.9.276.1.1.4.1.1.21|70|8074084556062809507 +1.3.6.1.4.1.9.9.276.1.1.4.1.1.22|70|3879828243818155564 +1.3.6.1.4.1.9.9.276.1.1.4.1.1.24|70|8254895130039056501 +1.3.6.1.4.1.9.9.276.1.1.4.1.1.26|70|12603496095441413057 +1.3.6.1.4.1.9.9.276.1.1.4.1.1.30|70|10909634483436674430 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.15|70|17560370720518583073 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.20|70|14771198156831440445 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.21|70|4516615649348040507 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.22|70|5398256853253084550 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.24|70|12234278304657512290 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.26|70|5542681715530028671 +1.3.6.1.4.1.9.9.276.1.1.4.1.2.30|70|7628466436218350687 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.15|70|8177103286894496983 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.20|70|12130035877430502410 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.21|70|11868242152478329003 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.22|70|17611012933324514101 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.24|70|14387955517091274482 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.26|70|12736718849002214539 +1.3.6.1.4.1.9.9.276.1.1.4.1.3.30|70|11254183245162288544 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.15|70|13985360553412293610 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.20|70|3367143004283872827 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.21|70|12488196907822745031 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.22|70|8001376348978922169 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.24|70|18394891919657574353 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.26|70|46777343186426235 +1.3.6.1.4.1.9.9.276.1.1.4.1.4.30|70|12772949408748318645 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.15|70|15911958525521007897 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.20|70|4658975256539769435 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.21|70|16870543779188523898 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.22|70|2933302758620621634 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.24|70|10920144256388106712 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.26|70|4188203579231500517 +1.3.6.1.4.1.9.9.276.1.1.4.1.5.30|70|5630120856472611172 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.15|70|726189341999283452 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.20|70|14885206523225807307 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.21|70|17183558753808646342 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.22|70|13449113140515066127 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.24|70|11727141470103305940 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.26|70|6877703282565992678 +1.3.6.1.4.1.9.9.276.1.1.4.1.6.30|70|3715117028720478102 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.15|70|16539956966645395556 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.20|70|6753588002541984324 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.21|70|1921495791084456864 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.22|70|216319505008223941 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.24|70|14594123502315176499 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.26|70|4597017118903375793 +1.3.6.1.4.1.9.9.276.1.1.4.1.7.30|70|18185946407597153850 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.15|70|3135026258998182869 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.20|70|6488324158989841839 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.21|70|11605005648862390544 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.22|70|8767339550959985057 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.24|70|14965930179802757449 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.26|70|17432541913022086602 +1.3.6.1.4.1.9.9.276.1.1.4.1.8.30|70|12385348985836041022 +1.3.6.1.4.1.9.9.276.1.2.1.0|2|4 +1.3.6.1.4.1.9.9.276.1.2.2.0|4x|6275742064726976696e6720666f7277617264204a6164656420666f727761726420666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.276.1.2.3.0|2|2 +1.3.6.1.4.1.9.9.276.1.2.4.0|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.2|2|2 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.5|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.6|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.14|2|2 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.18|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.22|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.23|2|2 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.27|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.29|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.1.31|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.2|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.5|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.6|2|3 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.14|2|3 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.18|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.22|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.23|2|3 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.27|2|3 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.29|2|1 +1.3.6.1.4.1.9.9.276.1.2.5.1.2.31|2|2 +1.3.6.1.4.1.9.9.276.1.2.6.0|2|1 +1.3.6.1.4.1.9.9.276.1.2.7.0|66|43 +1.3.6.1.4.1.9.9.276.1.2.8.0|2|2 +1.3.6.1.4.1.9.9.276.1.2.9.0|4x|4a61646564204a61646564 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.1|2|1 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.6|2|13 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.9|2|29 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.11|2|23 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.12|2|31 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.14|2|19 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.18|2|31 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.29|2|19 +1.3.6.1.4.1.9.9.276.1.3.1.1.1.31|2|2 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.1|2|23 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.6|2|2 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.9|2|3 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.11|2|5 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.12|2|10 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.14|2|18 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.18|2|13 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.29|2|29 +1.3.6.1.4.1.9.9.276.1.3.1.1.2.31|2|18 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.3|70|14350934316156695507 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.4|70|2899666167006496292 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.7|70|16520444618565274613 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.12|70|2503702512586709136 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.18|70|999601313714508681 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.19|70|325588263630070068 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.21|70|15658081660018889484 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.22|70|11313059572521385948 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.25|70|721808147740263798 +1.3.6.1.4.1.9.9.276.1.4.1.1.1.29|70|13072506015753748026 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.3|70|1866100775927682747 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.4|70|11376707929224250202 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.7|70|1825740447988070510 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.12|70|16138138532883603793 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.18|70|5408896337953193119 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.19|70|8765660358579533533 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.21|70|5522890384384570706 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.22|70|13168151856250529687 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.25|70|5558637931265655328 +1.3.6.1.4.1.9.9.276.1.4.1.1.2.29|70|1752008300868790087 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.3|70|451276363799057835 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.4|70|15367612972855483638 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.7|70|10866699429225037486 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.12|70|15853691834443554039 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.18|70|13279325565138533181 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.19|70|13883603126490830873 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.21|70|5638722143760747417 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.22|70|8135053447474485528 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.25|70|340101174908480024 +1.3.6.1.4.1.9.9.276.1.4.1.1.3.29|70|17802470503176288153 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.3|70|7701097226247683469 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.4|70|1499530274839182910 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.7|70|2346263121132498383 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.12|70|8760181703613327264 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.18|70|12686097106151010628 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.19|70|1275600082320266218 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.21|70|1028341336639671774 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.22|70|120349320811901336 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.25|70|9750928792210739924 +1.3.6.1.4.1.9.9.276.1.4.1.1.4.29|70|7865402135610317416 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.3|66|27705 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.4|66|48090 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.7|66|15587 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.12|66|9082 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.18|66|13183 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.19|66|55318 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.21|66|36553 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.22|66|24631 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.25|66|30253 +1.3.6.1.4.1.9.9.276.1.4.1.1.5.29|66|4976 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.1|2|25 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.5|2|25 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.9|2|26 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.12|2|14 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.13|2|17 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.17|2|21 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.26|2|1 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.28|2|29 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.29|2|30 +1.3.6.1.4.1.9.9.276.1.5.1.1.1.30|2|18 +1.3.6.1.4.1.9.9.276.1.6.1.1.1.7.100.114.105.118.105.110.103|4|driving +1.3.6.1.4.1.9.9.276.1.6.1.1.1.7.102.111.114.119.97.114.100|4|forward +1.3.6.1.4.1.9.9.276.1.6.1.1.1.21.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110|4x|7468656972206163746564206f78656e206f78656e +1.3.6.1.4.1.9.9.276.1.6.1.1.1.23.102.111.114.119.97.114.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103|4x|666f727761726420627574206275742064726976696e67 +1.3.6.1.4.1.9.9.276.1.6.1.1.1.26.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|4x|746865697220717561696e746c79207468656972207468656972 +1.3.6.1.4.1.9.9.276.1.6.1.1.1.33.100.114.105.118.105.110.103.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116|4x|64726976696e6720627574206163746564206163746564204a6164656420627574 +1.3.6.1.4.1.9.9.276.1.6.1.1.1.39.111.120.101.110.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.116.104.101.105.114|4x|6f78656e204a6164656420717561696e746c7920666f7277617264204a61646564207468656972 +1.3.6.1.4.1.9.9.276.1.6.1.1.1.41.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110|4x|64726976696e6720717561696e746c79206163746564204a616465642064726976696e67206f78656e +1.3.6.1.4.1.9.9.276.1.6.1.1.1.51.102.111.114.119.97.114.100.32.107.101.112.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.97.99.116.101.100|4x|666f7277617264206b657074206f78656e207a6f6d62696573207468656972207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.9.9.276.1.6.1.1.1.54.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|4x|717561696e746c79206f78656e20746865697220666f7277617264206f78656e20616374656420666f727761726420666f7277617264 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.7.100.114.105.118.105.110.103|2|28 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.7.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.21.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110|2|16 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.23.102.111.114.119.97.114.100.32.98.117.116.32.98.117.116.32.100.114.105.118.105.110.103|2|13 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.26.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|12 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.33.100.114.105.118.105.110.103.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116|2|3 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.39.111.120.101.110.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.116.104.101.105.114|2|26 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.41.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110|2|30 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.51.102.111.114.119.97.114.100.32.107.101.112.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.97.99.116.101.100|2|17 +1.3.6.1.4.1.9.9.276.1.6.1.1.2.54.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100|2|9 +1.3.6.1.4.1.9.9.500.1.2.1.1.1.21|66|23989 +1.3.6.1.4.1.9.9.500.1.2.1.1.2.21|66|64612 +1.3.6.1.4.1.9.9.500.1.2.1.1.3.21|2|4 +1.3.6.1.4.1.9.9.500.1.2.1.1.4.21|66|33053 +1.3.6.1.4.1.9.9.500.1.2.1.1.5.21|66|55695 +1.3.6.1.4.1.9.9.500.1.2.1.1.6.21|2|8 +1.3.6.1.4.1.9.9.500.1.2.1.1.7.21|4x|ffffffffffff +1.3.6.1.4.1.9.9.500.1.2.2.1.1.2|2|3 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.47.19.214.176.95.83.210 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.98.57.138.20 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.217 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.9.140.70.113.243.98 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.27.35.213.125 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.69.182.170.137.149.52.235.31 +1.3.6.1.6.3.1.1.6.1.0|2|7 +1.3.6.1.6.3.1.1.6.1.0|2|18 +1.3.6.1.6.3.1.1.6.1.0|2|22 +1.3.6.1.6.3.10.2.1.1.0|4x|4a6164656420666f7277617264 +1.3.6.1.6.3.10.2.1.1.0|4x|6b657074206f78656e206f78656e20666f7277617264207a6f6d62696573 +1.3.6.1.6.3.10.2.1.1.0|4x|627574207a6f6d62696573206f78656e +1.3.6.1.6.3.10.2.1.1.0|4|driving +1.3.6.1.6.3.10.2.1.2.0|2|6 +1.3.6.1.6.3.10.2.1.2.0|2|9 +1.3.6.1.6.3.10.2.1.2.0|2|23 +1.3.6.1.6.3.10.2.1.2.0|2|27 +1.3.6.1.6.3.10.2.1.3.0|2|9 +1.3.6.1.6.3.10.2.1.3.0|2|13 +1.3.6.1.6.3.10.2.1.3.0|2|16 +1.3.6.1.6.3.10.2.1.3.0|2|29 +1.3.6.1.6.3.10.2.1.4.0|2|484 diff --git a/test/new-e2e/ndm/snmp/compose/data/cisco_icm.snmprec b/test/new-e2e/ndm/snmp/compose/data/cisco_icm.snmprec new file mode 100644 index 0000000000000..5c15e492e6870 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/cisco_icm.snmprec @@ -0,0 +1,230 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.9.1.693 +1.3.6.1.2.1.1.3.0|67|1727368662 +1.3.6.1.2.1.1.5.0|4|test +1.3.6.1.2.1.10.21.1.2.2.1.1.7.3|66|32218 +1.3.6.1.2.1.10.21.1.2.2.1.2.7.3|66|5771 +1.3.6.1.2.1.10.21.1.2.2.1.3.7.3|66|46229 +1.3.6.1.2.1.10.21.1.2.2.1.4.7.3|66|42716 +1.3.6.1.2.1.10.21.1.2.2.1.5.7.3|66|4034 +1.3.6.1.2.1.10.21.1.2.2.1.6.7.3|66|17225 +1.3.6.1.2.1.25.4.2.1.1.8|2|18 +1.3.6.1.2.1.25.4.2.1.1.11|2|30 +1.3.6.1.2.1.25.4.2.1.1.14|2|10 +1.3.6.1.2.1.25.4.2.1.1.16|2|24 +1.3.6.1.2.1.25.4.2.1.1.19|2|8 +1.3.6.1.2.1.25.4.2.1.1.20|2|29 +1.3.6.1.2.1.25.4.2.1.1.23|2|7 +1.3.6.1.2.1.25.4.2.1.1.24|2|9 +1.3.6.1.2.1.25.4.2.1.1.27|2|4 +1.3.6.1.2.1.25.4.2.1.2.8|4|test +1.3.6.1.2.1.25.4.2.1.2.11|4|test +1.3.6.1.2.1.25.4.2.1.2.14|4|test +1.3.6.1.2.1.25.4.2.1.2.16|4|test +1.3.6.1.2.1.25.4.2.1.2.19|4|test +1.3.6.1.2.1.25.4.2.1.2.20|4|test +1.3.6.1.2.1.25.4.2.1.2.23|4|test +1.3.6.1.2.1.25.4.2.1.2.24|4|test +1.3.6.1.2.1.25.4.2.1.2.27|4|test +1.3.6.1.2.1.25.4.2.1.3.8|6|1.3.6.1.3.241.163.109.38.226.117 +1.3.6.1.2.1.25.4.2.1.3.11|6|1.3.6.1.3 +1.3.6.1.2.1.25.4.2.1.3.14|6|1.3.6.1.3.178.68.218.160.30 +1.3.6.1.2.1.25.4.2.1.3.16|6|1.3.6.1.3.97.233.247.97.19 +1.3.6.1.2.1.25.4.2.1.3.19|6|1.3.6.1.3.1.246.15.177.61.207 +1.3.6.1.2.1.25.4.2.1.3.20|6|1.3.6.1.3.237.85.224.239.104.112.55.36 +1.3.6.1.2.1.25.4.2.1.3.23|6|1.3.6.1.3.148.213.221.68.159.92 +1.3.6.1.2.1.25.4.2.1.3.24|6|1.3.6.1.3.23.53.58.26 +1.3.6.1.2.1.25.4.2.1.3.27|6|1.3.6.1.3.20.217.100.30.122.3.26.13 +1.3.6.1.2.1.25.4.2.1.4.8|4x|717561696e746c7920717561696e746c79204a6164656420666f7277617264204a61646564206b657074206f78656e206f78656e +1.3.6.1.2.1.25.4.2.1.4.11|4x|6275742064726976696e67206b657074204a6164656420616374656420746865697220666f72776172642064726976696e67206f78656e +1.3.6.1.2.1.25.4.2.1.4.14|4x|616374656420717561696e746c79204a61646564204a61646564206f78656e204a6164656420746865697220746865697220666f7277617264 +1.3.6.1.2.1.25.4.2.1.4.16|4x|6b657074207468656972 +1.3.6.1.2.1.25.4.2.1.4.19|4x|7a6f6d62696573207468656972 +1.3.6.1.2.1.25.4.2.1.4.20|4x|666f7277617264206b65707420627574207468656972 +1.3.6.1.2.1.25.4.2.1.4.23|4x|64726976696e6720666f727761726420717561696e746c79206b65707420666f7277617264 +1.3.6.1.2.1.25.4.2.1.4.24|4x|6163746564207a6f6d626965732064726976696e67207a6f6d6269657320666f7277617264206b65707420666f727761726420717561696e746c7920627574 +1.3.6.1.2.1.25.4.2.1.4.27|4x|746865697220666f72776172642064726976696e672064726976696e67206275742064726976696e67206163746564206f78656e +1.3.6.1.2.1.25.4.2.1.5.8|4|zombies +1.3.6.1.2.1.25.4.2.1.5.11|4x|4a61646564206b65707420717561696e746c79 +1.3.6.1.2.1.25.4.2.1.5.14|4x|7468656972207468656972207468656972206f78656e206f78656e206163746564 +1.3.6.1.2.1.25.4.2.1.5.16|4x|6b65707420666f727761726420717561696e746c7920616374656420717561696e746c7920616374656420666f7277617264 +1.3.6.1.2.1.25.4.2.1.5.19|4|oxen +1.3.6.1.2.1.25.4.2.1.5.20|4x|7a6f6d6269657320666f7277617264 +1.3.6.1.2.1.25.4.2.1.5.23|4x|6275742061637465642074686569722064726976696e67207468656972 +1.3.6.1.2.1.25.4.2.1.5.24|4x|717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.25.4.2.1.5.27|4x|6163746564206f78656e206b6570742061637465642064726976696e67 +1.3.6.1.2.1.25.4.2.1.6.8|2|2 +1.3.6.1.2.1.25.4.2.1.6.11|2|3 +1.3.6.1.2.1.25.4.2.1.6.14|2|3 +1.3.6.1.2.1.25.4.2.1.6.16|2|3 +1.3.6.1.2.1.25.4.2.1.6.19|2|4 +1.3.6.1.2.1.25.4.2.1.6.20|2|2 +1.3.6.1.2.1.25.4.2.1.6.23|2|1 +1.3.6.1.2.1.25.4.2.1.6.24|2|3 +1.3.6.1.2.1.25.4.2.1.6.27|2|2 +1.3.6.1.2.1.25.4.2.1.7.8|2|3 +1.3.6.1.2.1.25.4.2.1.7.11|2|4 +1.3.6.1.2.1.25.4.2.1.7.14|2|4 +1.3.6.1.2.1.25.4.2.1.7.16|2|3 +1.3.6.1.2.1.25.4.2.1.7.19|2|1 +1.3.6.1.2.1.25.4.2.1.7.20|2|2 +1.3.6.1.2.1.25.4.2.1.7.23|2|4 +1.3.6.1.2.1.25.4.2.1.7.24|2|3 +1.3.6.1.2.1.25.4.2.1.7.27|2|1 +1.3.6.1.2.1.25.5.1.1.1.1|2|5 +1.3.6.1.2.1.25.5.1.1.1.5|2|0 +1.3.6.1.2.1.25.5.1.1.1.7|2|10 +1.3.6.1.2.1.25.5.1.1.1.8|2|23 +1.3.6.1.2.1.25.5.1.1.1.13|2|9 +1.3.6.1.2.1.25.5.1.1.1.15|2|20 +1.3.6.1.2.1.25.5.1.1.1.21|2|0 +1.3.6.1.2.1.25.5.1.1.1.23|2|0 +1.3.6.1.2.1.25.5.1.1.1.28|2|15 +1.3.6.1.2.1.25.5.1.1.2.1|2|2 +1.3.6.1.2.1.25.5.1.1.2.5|2|5 +1.3.6.1.2.1.25.5.1.1.2.7|2|18 +1.3.6.1.2.1.25.5.1.1.2.8|2|18 +1.3.6.1.2.1.25.5.1.1.2.13|2|21 +1.3.6.1.2.1.25.5.1.1.2.15|2|30 +1.3.6.1.2.1.25.5.1.1.2.21|2|16 +1.3.6.1.2.1.25.5.1.1.2.23|2|12 +1.3.6.1.2.1.25.5.1.1.2.28|2|1 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.4|66|6 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.13|66|5 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.14|66|1 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.17|66|42127 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.18|66|5 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.22|66|43 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.25|66|5 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.30|66|3 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.1.31|66|3 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.4|66|7 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.13|66|34 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.14|66|4 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.17|66|7 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.18|66|6 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.22|66|5 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.25|66|4 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.30|66|343 +1.3.6.1.4.1.9.9.63.1.3.8.4.1.2.31|66|2 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.1|66|4 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.2|66|2 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.4|66|7 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.14|66|4 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.18|66|5 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.25|66|43 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.27|66|54 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.29|66|23 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.30|66|45 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.1.31|66|567 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.1|66|2 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.2|66|34 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.4|66|2 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.14|66|34 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.18|66|6 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.25|66|45 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.27|66|34 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.29|66|34 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.30|66|6 +1.3.6.1.4.1.9.9.63.1.3.8.5.1.2.31|66|65 +1.3.6.1.4.1.9.9.156.1.5.5.0|65|1194392220 +1.3.6.1.4.1.9.9.156.1.5.6.0|65|788063609 +1.3.6.1.4.1.9.9.156.1.5.7.0|65|2492003767 +1.3.6.1.4.1.9.9.156.1.5.8.0|65|401932234 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.4446|66|4446 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.5179|66|5179 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.12093|66|12093 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.19363|66|19363 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.25033|66|25033 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.37738|66|37738 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.42562|66|42562 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.51845|66|51845 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.62906|66|62906 +1.3.6.1.4.1.9.9.473.1.2.1.1.1.63361|66|63361 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.4446.18326|66|7469 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.5179.31658|66|5462 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.12093.24948|66|3953 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.19363.31336|66|7284 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.25033.57438|66|6013 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.37738.59634|66|9518 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.42562.46865|66|1371 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.51845.48063|66|9727 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.62906.5310|66|891 +1.3.6.1.4.1.9.9.473.1.3.1.1.3.63361.46518|66|8988 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.4446.18326|66|7137 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.5179.31658|66|330 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.12093.24948|66|3652 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.19363.31336|66|2456 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.25033.57438|66|8461 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.37738.59634|66|5291 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.42562.46865|66|940 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.51845.48063|66|8616 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.62906.5310|66|6023 +1.3.6.1.4.1.9.9.473.1.3.1.1.4.63361.46518|66|8797 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.4446.18326|66|815 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.5179.31658|66|5483 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.12093.24948|66|1936 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.19363.31336|66|772 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.25033.57438|66|7890 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.37738.59634|66|237 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.42562.46865|66|8766 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.51845.48063|66|4003 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.62906.5310|66|9754 +1.3.6.1.4.1.9.9.473.1.3.1.1.8.63361.46518|66|7024 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.4351.29722.31|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.16469.37169.2|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.18917.14469.5|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.20734.59281.32|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.31487.42819.17|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.36228.63314.4|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.37463.17761.14|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.50909.47402.7|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.57906.47038.21|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.1.59011.25332.2|66|2 +1.3.6.1.4.1.9.9.473.1.3.6.1.2.4351.29722.31|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.16469.37169.2|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.18917.14469.5|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.20734.59281.32|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.31487.42819.17|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.36228.63314.4|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.37463.17761.14|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.50909.47402.7|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.57906.47038.21|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.2.59011.25332.2|4|name +1.3.6.1.4.1.9.9.473.1.3.6.1.3.4351.29722.31|2|17 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.16469.37169.2|2|15 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.18917.14469.5|2|12 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.20734.59281.32|2|5 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.31487.42819.17|2|16 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.36228.63314.4|2|10 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.37463.17761.14|2|18 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.50909.47402.7|2|15 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.57906.47038.21|2|5 +1.3.6.1.4.1.9.9.473.1.3.6.1.3.59011.25332.2|2|14 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.4351.29722.31|2|4 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.16469.37169.2|2|7 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.18917.14469.5|2|7 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.20734.59281.32|2|8 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.31487.42819.17|2|3 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.36228.63314.4|2|1 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.37463.17761.14|2|4 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.50909.47402.7|2|1 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.57906.47038.21|2|7 +1.3.6.1.4.1.9.9.473.1.3.6.1.4.59011.25332.2|2|9 +1.3.6.1.4.1.9.9.473.1.3.6.1.5.4351.29722.31|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.16469.37169.2|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.18917.14469.5|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.20734.59281.32|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.31487.42819.17|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.36228.63314.4|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.37463.17761.14|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.50909.47402.7|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.57906.47038.21|4|test +1.3.6.1.4.1.9.9.473.1.3.6.1.5.59011.25332.2|4|test +1.3.6.1.4.1.9.9.590.1.2.2.0|66|951185694 +1.3.6.1.4.1.9.9.590.1.2.12.0|70|4641130472909277500 +1.3.6.1.4.1.9.9.590.1.6.1.1.1.33274|66|2756470189 +1.3.6.1.4.1.9.9.590.1.6.1.1.2.33274|66|2431416299 +1.3.6.1.4.1.9.9.590.1.6.1.1.3.33274|66|700781135 +1.3.6.1.4.1.9.9.590.1.6.1.1.4.33274|66|4286492019 +1.3.6.1.4.1.9.9.590.1.6.1.1.5.33274|66|2842971250 +1.3.6.1.4.1.9.9.590.1.6.1.1.6.33274|66|2149197955 diff --git a/test/new-e2e/ndm/snmp/compose/data/constraint.snmprec b/test/new-e2e/ndm/snmp/compose/data/constraint.snmprec new file mode 100644 index 0000000000000..60f8c29c95cfe --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/constraint.snmprec @@ -0,0 +1,2 @@ +1.3.6.1.2.1.6.1|2|10 +# (tcpRtoAlgorithm) OID with value breaking constraint 1 <= value <= 4 diff --git a/test/new-e2e/ndm/snmp/compose/data/dell-poweredge.snmprec b/test/new-e2e/ndm/snmp/compose/data/dell-poweredge.snmprec new file mode 100644 index 0000000000000..49b4f08b52275 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/dell-poweredge.snmprec @@ -0,0 +1,3487 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.674.10892.1.2 +1.3.6.1.4.1.343.2.7.2.1.1.0|4|kept +1.3.6.1.4.1.343.2.7.2.1.2.0|4x|7a6f6d6269657320717561696e746c792061637465642064726976696e6720627574 +1.3.6.1.4.1.343.2.7.2.1.3.0|4x|666f727761726420717561696e746c79206f78656e206163746564 +1.3.6.1.4.1.343.2.7.2.1.4.0|4x|62757420666f727761726420627574 +1.3.6.1.4.1.343.2.7.2.1.5.0|4x|64726976696e67206b657074204a61646564 +1.3.6.1.4.1.343.2.7.2.1.6.0|4x|666f7277617264204a61646564207468656972206b657074 +1.3.6.1.4.1.343.2.7.2.1.7.0|2|1 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.1.8|2|8 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.1.18|2|18 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.2.8|4x|65746830 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.2.18|4x|656e31 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.3.8|2|1 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.3.18|2|2 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.4.8|2|1 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.4.18|2|0 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.1.18|4x|666f7277617264207a6f6d62696573207468656972 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.1.22|4x|717561696e746c79204a61646564206f78656e207a6f6d62696573206f78656e2064726976696e67206f78656e +1.3.6.1.4.1.343.2.7.2.2.1.2.1.2.18|4x|4a61646564207a6f6d62696573206f78656e207468656972206b6570742064726976696e67206163746564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.2.22|4x|61637465642064726976696e6720666f7277617264206163746564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.3.18|4x|6b657074206163746564204a61646564204a6164656420746865697220666f7277617264207a6f6d62696573 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.3.22|4x|6f78656e206163746564204a6164656420717561696e746c79206163746564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.4.18|4x|627574206f78656e207468656972206f78656e206b6570742064726976696e672064726976696e6720627574 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.4.22|4x|717561696e746c79206f78656e2062757420717561696e746c792064726976696e67207a6f6d62696573206f78656e204a61646564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.5.18|4x|4a61646564206f78656e +1.3.6.1.4.1.343.2.7.2.2.1.2.1.5.22|4x|717561696e746c792074686569722064726976696e67207a6f6d62696573 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.6.18|4x|6b657074204a61646564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.6.22|4|driving +1.3.6.1.4.1.343.2.7.2.2.1.2.1.7.18|4x|4a616465642064726976696e67206b657074207468656972206f78656e20627574 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.7.22|4x|4a616465642064726976696e67206b65707420627574 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.1.8|65|26212581 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.1.18|65|918782676 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.2.8|65|2561191324 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.2.18|65|4290482129 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.3.8|65|3900533769 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.3.18|65|564767165 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.4.8|65|3058685355 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.4.18|65|3837029910 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.5.8|65|1958861748 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.5.18|65|2421785564 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.6.8|65|2377289710 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.6.18|65|4015875170 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.7.8|65|4079823523 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.7.18|65|577740315 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.8.8|65|3885573357 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.8.18|65|1559311203 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.9.8|65|1208244969 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.9.18|65|736603272 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.10.8|65|1397338420 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.10.18|65|3150855068 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.1.4|2|4 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.1.29|2|29 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.2.4|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.2.29|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.3.4|65|1467360873 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.3.29|65|3891936190 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.4.4|66|1428003748 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.4.29|66|3467694198 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.5.4|2|2 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.5.29|2|2 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.6.4|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.6.29|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.7.4|2|9 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.7.29|2|29 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.8.4|2|13 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.8.29|2|28 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.9.4|2|15 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.9.29|2|24 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.10.4|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.10.29|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.11.4|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.11.29|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.12.4|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.12.29|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.13.4|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.13.29|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.14.4|2|13 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.14.29|2|30 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.1.3|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.1.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.2.3|65|906870219 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.2.11|65|3854133097 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.3.3|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.3.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.4.3|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.4.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.5.3|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.5.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.6.3|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.6.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.1.2|2|2 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.1.11|2|11 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.2.2|2|11 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.2.11|2|22 +1.3.6.1.4.1.343.2.7.2.2.3.2.1.1.7|2|0 +1.3.6.1.4.1.343.2.7.2.2.3.2.1.1.23|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.1.22|2|22 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.1.30|2|30 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.2.22|2|29 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.2.30|2|19 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.3.22|2|16 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.3.30|2|12 +1.3.6.1.4.1.343.2.7.2.2.4.2.1.1.7|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.1.5|4x|6f78656e2061637465642064726976696e6720666f72776172642064726976696e67 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.1.11|4x|4a61646564206163746564 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.2.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.2.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.3.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.3.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.4.5|66|1949733254 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.4.11|66|2070885352 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.5.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.5.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.6.5|2|2 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.6.11|2|2 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.7.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.7.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.8.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.8.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.9.5|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.9.11|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.10.5|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.10.11|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.11.5|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.11.11|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.12.5|65|2997670242 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.12.11|65|2131631262 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.13.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.13.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.14.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.14.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.15.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.15.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.1.26|2|26 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.1.27|2|27 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.2.26|2|15 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.2.27|2|1 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.1.19|2|3 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.1.31|2|2 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.2.19|65|706719367 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.2.31|65|1306335671 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.3.19|2|2 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.3.31|2|2 +1.3.6.1.4.1.343.2.7.2.3.1.2.0|2|0 +1.3.6.1.4.1.343.2.7.2.3.1.3.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.1.4.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.2.2.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.3.2.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.4.2.0|2|0 +1.3.6.1.4.1.674.10892.1.200.10.1.1.26|2|26 +1.3.6.1.4.1.674.10892.1.200.10.1.1.29|2|29 +1.3.6.1.4.1.674.10892.1.200.10.1.2.26|2|3 +1.3.6.1.4.1.674.10892.1.200.10.1.2.29|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.3.26|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.3.29|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.4.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.4.29|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.5.26|4x|7a6f6d62696573206f78656e206b657074206b657074206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.200.10.1.5.29|4x|6275742062757420746865697220666f7277617264207a6f6d62696573206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.1.200.10.1.6.26|2|4 +1.3.6.1.4.1.674.10892.1.200.10.1.6.29|2|4 +1.3.6.1.4.1.674.10892.1.200.10.1.7.26|4x|64726976696e67206b65707420616374656420627574 +1.3.6.1.4.1.674.10892.1.200.10.1.7.29|4|kept +1.3.6.1.4.1.674.10892.1.200.10.1.8.26|4x|6b65707420627574207a6f6d6269657320666f7277617264204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.200.10.1.8.29|4|zombies +1.3.6.1.4.1.674.10892.1.200.10.1.9.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.9.29|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.10.26|4x|6b657074206163746564 +1.3.6.1.4.1.674.10892.1.200.10.1.10.29|4x|666f727761726420717561696e746c79204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.1.200.10.1.11.26|4x|666f7277617264204a61646564206f78656e20666f7277617264207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.200.10.1.11.29|4x|64726976696e6720666f727761726420666f727761726420717561696e746c79207a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.1.200.10.1.12.26|2|6 +1.3.6.1.4.1.674.10892.1.200.10.1.12.29|2|6 +1.3.6.1.4.1.674.10892.1.200.10.1.13.26|4x|4a6164656420666f7277617264207a6f6d6269657320746865697220717561696e746c79207468656972204a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.1.200.10.1.13.29|4x|717561696e746c7920627574 +1.3.6.1.4.1.674.10892.1.200.10.1.14.26|4x|6163746564207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.200.10.1.14.29|4x|6b657074206163746564206b65707420666f7277617264207a6f6d6269657320717561696e746c7920746865697220666f7277617264 +1.3.6.1.4.1.674.10892.1.200.10.1.15.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.15.29|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.16.26|4x|666f7277617264204a6164656420717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.1.200.10.1.16.29|4|quaintly +1.3.6.1.4.1.674.10892.1.200.10.1.17.26|4x|627574207468656972206b65707420717561696e746c7920717561696e746c7920746865697220666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.1.200.10.1.17.29|4x|64726976696e67207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.18.26|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.18.29|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.19.26|4x|6f78656e207468656972206f78656e +1.3.6.1.4.1.674.10892.1.200.10.1.19.29|4x|717561696e746c7920717561696e746c79206f78656e204a61646564206f78656e +1.3.6.1.4.1.674.10892.1.200.10.1.20.26|4x|6b65707420666f72776172642074686569722062757420627574 +1.3.6.1.4.1.674.10892.1.200.10.1.20.29|4x|6b65707420746865697220717561696e746c792064726976696e67207a6f6d62696573204a6164656420627574 +1.3.6.1.4.1.674.10892.1.200.10.1.21.26|2|1 +1.3.6.1.4.1.674.10892.1.200.10.1.21.29|2|1 +1.3.6.1.4.1.674.10892.1.200.10.1.22.26|4x|6b6570742062757420717561696e746c79206f78656e20717561696e746c79 +1.3.6.1.4.1.674.10892.1.200.10.1.22.29|4x|61637465642074686569722064726976696e67 +1.3.6.1.4.1.674.10892.1.200.10.1.23.26|4|acted +1.3.6.1.4.1.674.10892.1.200.10.1.23.29|4|their +1.3.6.1.4.1.674.10892.1.200.10.1.24.26|2|3 +1.3.6.1.4.1.674.10892.1.200.10.1.24.29|2|3 +1.3.6.1.4.1.674.10892.1.200.10.1.25.26|4x|616374656420666f72776172642061637465642064726976696e672064726976696e6720746865697220627574204a61646564 +1.3.6.1.4.1.674.10892.1.200.10.1.25.29|4x|62757420666f7277617264 +1.3.6.1.4.1.674.10892.1.200.10.1.26.26|4x|6f78656e206f78656e207a6f6d62696573207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.674.10892.1.200.10.1.26.29|4x|666f72776172642064726976696e6720666f7277617264206b657074207a6f6d62696573204a6164656420627574206163746564206b657074 +1.3.6.1.4.1.674.10892.1.200.10.1.27.26|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.27.29|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.28.26|4x|7a6f6d6269657320746865697220717561696e746c79206163746564206b657074207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.28.29|4x|4a61646564207a6f6d62696573206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.1.200.10.1.29.26|4x|746865697220666f7277617264206b6570742064726976696e6720717561696e746c79206163746564 +1.3.6.1.4.1.674.10892.1.200.10.1.29.29|4x|64726976696e6720666f727761726420627574206163746564 +1.3.6.1.4.1.674.10892.1.200.10.1.30.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.30.29|2|6 +1.3.6.1.4.1.674.10892.1.200.10.1.31.26|4x|627574206f78656e207468656972206f78656e2064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.1.200.10.1.31.29|4|acted +1.3.6.1.4.1.674.10892.1.200.10.1.42.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.42.29|2|4 +1.3.6.1.4.1.674.10892.1.200.10.1.43.26|4x|627574207a6f6d6269657320666f7277617264206163746564 +1.3.6.1.4.1.674.10892.1.200.10.1.43.29|4x|64726976696e6720616374656420666f727761726420666f7277617264 +1.3.6.1.4.1.674.10892.1.200.10.1.44.26|2|1 +1.3.6.1.4.1.674.10892.1.200.10.1.44.29|2|1 +1.3.6.1.4.1.674.10892.1.200.10.1.45.26|4x|6f78656e20666f7277617264207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.45.29|4x|6f78656e206b657074206b657074 +1.3.6.1.4.1.674.10892.1.200.10.1.50.26|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.50.29|2|4 +1.3.6.1.4.1.674.10892.1.200.10.1.51.26|4x|7a6f6d62696573206b657074206b65707420616374656420627574 +1.3.6.1.4.1.674.10892.1.200.10.1.51.29|4x|666f727761726420666f7277617264207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.52.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.52.29|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.53.26|4x|7a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.674.10892.1.200.10.1.53.29|4x|7468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.200.10.1.54.26|2|1 +1.3.6.1.4.1.674.10892.1.200.10.1.54.29|2|6 +1.3.6.1.4.1.674.10892.1.200.10.1.55.26|4x|64726976696e6720627574206f78656e204a61646564206275742074686569722064726976696e67 +1.3.6.1.4.1.674.10892.1.200.10.1.55.29|4x|64726976696e672074686569722064726976696e67 +1.3.6.1.4.1.674.10892.1.200.10.1.56.26|2|6 +1.3.6.1.4.1.674.10892.1.200.10.1.56.29|2|4 +1.3.6.1.4.1.674.10892.1.200.10.1.57.26|4x|717561696e746c792064726976696e6720746865697220616374656420666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.1.200.10.1.57.29|4x|717561696e746c7920717561696e746c79206b65707420666f7277617264206275742064726976696e67206b657074207468656972207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.58.26|2|5 +1.3.6.1.4.1.674.10892.1.200.10.1.58.29|2|3 +1.3.6.1.4.1.674.10892.1.200.10.1.59.26|4x|6f78656e2074686569722064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.200.10.1.59.29|4x|4a61646564206163746564207468656972206163746564207a6f6d62696573206f78656e207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.60.26|2|1 +1.3.6.1.4.1.674.10892.1.200.10.1.60.29|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.61.26|4x|6b657074207a6f6d62696573206163746564207a6f6d62696573207a6f6d6269657320616374656420746865697220627574207468656972 +1.3.6.1.4.1.674.10892.1.200.10.1.61.29|4x|666f7277617264207a6f6d6269657320717561696e746c7920717561696e746c79204a6164656420627574204a61646564206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.1.200.10.1.62.26|4x|7468656972207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.200.10.1.62.29|4x|4a6164656420666f7277617264206b6570742064726976696e67206f78656e206163746564 +1.3.6.1.4.1.674.10892.1.200.10.1.63.26|2|2 +1.3.6.1.4.1.674.10892.1.200.10.1.63.29|2|6 +1.3.6.1.4.1.674.10892.1.200.10.1.64.26|4x|6163746564206b657074204a61646564206f78656e +1.3.6.1.4.1.674.10892.1.200.10.1.64.29|4x|4a616465642064726976696e6720717561696e746c79206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.300.50.1.1.3.26|2|3 +1.3.6.1.4.1.674.10892.1.300.50.1.1.31.19|2|31 +1.3.6.1.4.1.674.10892.1.300.50.1.2.3.26|2|26 +1.3.6.1.4.1.674.10892.1.300.50.1.2.31.19|2|19 +1.3.6.1.4.1.674.10892.1.300.50.1.3.3.26|2|2 +1.3.6.1.4.1.674.10892.1.300.50.1.3.31.19|2|6 +1.3.6.1.4.1.674.10892.1.300.50.1.4.3.26|2|4 +1.3.6.1.4.1.674.10892.1.300.50.1.4.31.19|2|1 +1.3.6.1.4.1.674.10892.1.300.50.1.5.3.26|2|6 +1.3.6.1.4.1.674.10892.1.300.50.1.5.31.19|2|4 +1.3.6.1.4.1.674.10892.1.300.50.1.7.3.26|4x|61637465642061637465642064726976696e67206163746564 +1.3.6.1.4.1.674.10892.1.300.50.1.7.31.19|4x|666f7277617264207a6f6d62696573206b657074206b657074 +1.3.6.1.4.1.674.10892.1.300.50.1.8.3.26|4x|6f78656e206163746564204a6164656420666f7277617264207a6f6d626965732064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.1.300.50.1.8.31.19|4x|666f7277617264206b657074206f78656e +1.3.6.1.4.1.674.10892.1.300.50.1.11.3.26|4x|6f78656e2064726976696e6720717561696e746c79204a61646564207468656972 +1.3.6.1.4.1.674.10892.1.300.50.1.11.31.19|4x|64726976696e6720666f7277617264207a6f6d62696573204a61646564206b657074206b657074204a61646564204a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.300.70.1.1.18.23|2|18 +1.3.6.1.4.1.674.10892.1.300.70.1.1.29.21|2|29 +1.3.6.1.4.1.674.10892.1.300.70.1.2.18.23|2|23 +1.3.6.1.4.1.674.10892.1.300.70.1.2.29.21|2|21 +1.3.6.1.4.1.674.10892.1.300.70.1.3.18.23|2|1 +1.3.6.1.4.1.674.10892.1.300.70.1.3.29.21|2|4 +1.3.6.1.4.1.674.10892.1.300.70.1.4.18.23|2|2 +1.3.6.1.4.1.674.10892.1.300.70.1.4.29.21|2|2 +1.3.6.1.4.1.674.10892.1.300.70.1.5.18.23|2|4 +1.3.6.1.4.1.674.10892.1.300.70.1.5.29.21|2|2 +1.3.6.1.4.1.674.10892.1.300.70.1.6.18.23|2|3 +1.3.6.1.4.1.674.10892.1.300.70.1.6.29.21|2|1 +1.3.6.1.4.1.674.10892.1.300.70.1.7.18.23|2|2 +1.3.6.1.4.1.674.10892.1.300.70.1.7.29.21|2|1 +1.3.6.1.4.1.674.10892.1.300.70.1.8.18.23|4x|4a61646564206f78656e2064726976696e67207a6f6d62696573206163746564206f78656e +1.3.6.1.4.1.674.10892.1.300.70.1.8.29.21|4x|6b657074207a6f6d62696573206f78656e206b6570742064726976696e6720666f7277617264206f78656e +1.3.6.1.4.1.674.10892.1.400.20.1.1.4|2|4 +1.3.6.1.4.1.674.10892.1.400.20.1.1.5|2|5 +1.3.6.1.4.1.674.10892.1.400.20.1.1.6|2|6 +1.3.6.1.4.1.674.10892.1.400.20.1.1.8|2|8 +1.3.6.1.4.1.674.10892.1.400.20.1.1.14|2|14 +1.3.6.1.4.1.674.10892.1.400.20.1.1.23|2|23 +1.3.6.1.4.1.674.10892.1.400.20.1.1.29|2|29 +1.3.6.1.4.1.674.10892.1.400.20.1.1.31|2|31 +1.3.6.1.4.1.674.10892.1.400.20.1.2.4|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.2.5|2|4 +1.3.6.1.4.1.674.10892.1.400.20.1.2.6|2|4 +1.3.6.1.4.1.674.10892.1.400.20.1.2.8|2|6 +1.3.6.1.4.1.674.10892.1.400.20.1.2.14|2|4 +1.3.6.1.4.1.674.10892.1.400.20.1.2.23|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.2.29|2|6 +1.3.6.1.4.1.674.10892.1.400.20.1.2.31|2|1 +1.3.6.1.4.1.674.10892.1.400.20.1.3.4|2|6 +1.3.6.1.4.1.674.10892.1.400.20.1.3.5|2|1 +1.3.6.1.4.1.674.10892.1.400.20.1.3.6|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.3.8|2|6 +1.3.6.1.4.1.674.10892.1.400.20.1.3.14|2|4 +1.3.6.1.4.1.674.10892.1.400.20.1.3.23|2|1 +1.3.6.1.4.1.674.10892.1.400.20.1.3.29|2|4 +1.3.6.1.4.1.674.10892.1.400.20.1.3.31|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.4.4|2|1 +1.3.6.1.4.1.674.10892.1.400.20.1.4.5|2|5 +1.3.6.1.4.1.674.10892.1.400.20.1.4.6|2|1 +1.3.6.1.4.1.674.10892.1.400.20.1.4.8|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.4.14|2|1 +1.3.6.1.4.1.674.10892.1.400.20.1.4.23|2|5 +1.3.6.1.4.1.674.10892.1.400.20.1.4.29|2|5 +1.3.6.1.4.1.674.10892.1.400.20.1.4.31|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.5.4|2|12 +1.3.6.1.4.1.674.10892.1.400.20.1.5.5|2|27 +1.3.6.1.4.1.674.10892.1.400.20.1.5.6|2|12 +1.3.6.1.4.1.674.10892.1.400.20.1.5.8|2|10 +1.3.6.1.4.1.674.10892.1.400.20.1.5.14|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.5.23|2|17 +1.3.6.1.4.1.674.10892.1.400.20.1.5.29|2|9 +1.3.6.1.4.1.674.10892.1.400.20.1.5.31|2|29 +1.3.6.1.4.1.674.10892.1.400.20.1.6.4|2|16 +1.3.6.1.4.1.674.10892.1.400.20.1.6.5|2|15 +1.3.6.1.4.1.674.10892.1.400.20.1.6.6|2|31 +1.3.6.1.4.1.674.10892.1.400.20.1.6.8|2|23 +1.3.6.1.4.1.674.10892.1.400.20.1.6.14|2|18 +1.3.6.1.4.1.674.10892.1.400.20.1.6.23|2|29 +1.3.6.1.4.1.674.10892.1.400.20.1.6.29|2|20 +1.3.6.1.4.1.674.10892.1.400.20.1.6.31|2|5 +1.3.6.1.4.1.674.10892.1.400.20.1.7.4|2|7 +1.3.6.1.4.1.674.10892.1.400.20.1.7.5|2|14 +1.3.6.1.4.1.674.10892.1.400.20.1.7.6|2|8 +1.3.6.1.4.1.674.10892.1.400.20.1.7.8|2|15 +1.3.6.1.4.1.674.10892.1.400.20.1.7.14|2|11 +1.3.6.1.4.1.674.10892.1.400.20.1.7.23|2|27 +1.3.6.1.4.1.674.10892.1.400.20.1.7.29|2|10 +1.3.6.1.4.1.674.10892.1.400.20.1.7.31|2|2 +1.3.6.1.4.1.674.10892.1.400.20.1.8.4|2|30 +1.3.6.1.4.1.674.10892.1.400.20.1.8.5|2|16 +1.3.6.1.4.1.674.10892.1.400.20.1.8.6|2|22 +1.3.6.1.4.1.674.10892.1.400.20.1.8.8|2|11 +1.3.6.1.4.1.674.10892.1.400.20.1.8.14|2|22 +1.3.6.1.4.1.674.10892.1.400.20.1.8.23|2|14 +1.3.6.1.4.1.674.10892.1.400.20.1.8.29|2|25 +1.3.6.1.4.1.674.10892.1.400.20.1.8.31|2|28 +1.3.6.1.4.1.674.10892.1.400.20.1.9.4|2|23 +1.3.6.1.4.1.674.10892.1.400.20.1.9.5|2|21 +1.3.6.1.4.1.674.10892.1.400.20.1.9.6|2|21 +1.3.6.1.4.1.674.10892.1.400.20.1.9.8|2|25 +1.3.6.1.4.1.674.10892.1.400.20.1.9.14|2|20 +1.3.6.1.4.1.674.10892.1.400.20.1.9.23|2|7 +1.3.6.1.4.1.674.10892.1.400.20.1.9.29|2|14 +1.3.6.1.4.1.674.10892.1.400.20.1.9.31|2|30 +1.3.6.1.4.1.674.10892.1.400.20.1.10.4|2|12 +1.3.6.1.4.1.674.10892.1.400.20.1.10.5|2|18 +1.3.6.1.4.1.674.10892.1.400.20.1.10.6|2|15 +1.3.6.1.4.1.674.10892.1.400.20.1.10.8|2|29 +1.3.6.1.4.1.674.10892.1.400.20.1.10.14|2|21 +1.3.6.1.4.1.674.10892.1.400.20.1.10.23|2|9 +1.3.6.1.4.1.674.10892.1.400.20.1.10.29|2|3 +1.3.6.1.4.1.674.10892.1.400.20.1.10.31|2|5 +1.3.6.1.4.1.674.10892.1.400.20.1.11.4|4|quaintly +1.3.6.1.4.1.674.10892.1.400.20.1.11.5|4|quaintly +1.3.6.1.4.1.674.10892.1.400.20.1.11.6|4|quaintly +1.3.6.1.4.1.674.10892.1.400.20.1.11.8|4|quaintly +1.3.6.1.4.1.674.10892.1.400.20.1.11.14|4x|627574206b657074 +1.3.6.1.4.1.674.10892.1.400.20.1.11.23|4|quaintly +1.3.6.1.4.1.674.10892.1.400.20.1.11.29|4|quaintly +1.3.6.1.4.1.674.10892.1.400.20.1.11.31|4|quaintly +1.3.6.1.4.1.674.10892.1.600.10.1.1.1.24|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.1.1.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.1.2.4|2|2 +1.3.6.1.4.1.674.10892.1.600.10.1.1.8.21|2|8 +1.3.6.1.4.1.674.10892.1.600.10.1.1.9.18|2|9 +1.3.6.1.4.1.674.10892.1.600.10.1.1.14.27|2|14 +1.3.6.1.4.1.674.10892.1.600.10.1.1.15.9|2|15 +1.3.6.1.4.1.674.10892.1.600.10.1.1.16.7|2|16 +1.3.6.1.4.1.674.10892.1.600.10.1.1.21.13|2|21 +1.3.6.1.4.1.674.10892.1.600.10.1.1.28.27|2|28 +1.3.6.1.4.1.674.10892.1.600.10.1.2.1.24|2|24 +1.3.6.1.4.1.674.10892.1.600.10.1.2.1.27|2|27 +1.3.6.1.4.1.674.10892.1.600.10.1.2.2.4|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.2.8.21|2|21 +1.3.6.1.4.1.674.10892.1.600.10.1.2.9.18|2|18 +1.3.6.1.4.1.674.10892.1.600.10.1.2.14.27|2|27 +1.3.6.1.4.1.674.10892.1.600.10.1.2.15.9|2|9 +1.3.6.1.4.1.674.10892.1.600.10.1.2.16.7|2|7 +1.3.6.1.4.1.674.10892.1.600.10.1.2.21.13|2|13 +1.3.6.1.4.1.674.10892.1.600.10.1.2.28.27|2|27 +1.3.6.1.4.1.674.10892.1.600.10.1.3.1.24|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.3.1.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.3.2.4|2|2 +1.3.6.1.4.1.674.10892.1.600.10.1.3.8.21|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.3.9.18|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.3.14.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.3.15.9|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.3.16.7|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.3.21.13|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.3.28.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.4.1.24|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.4.1.27|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.4.2.4|2|2 +1.3.6.1.4.1.674.10892.1.600.10.1.4.8.21|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.4.9.18|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.4.14.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.4.15.9|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.4.16.7|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.4.21.13|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.4.28.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.5.1.24|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.5.1.27|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.5.2.4|2|7 +1.3.6.1.4.1.674.10892.1.600.10.1.5.8.21|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.5.9.18|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.5.14.27|2|5 +1.3.6.1.4.1.674.10892.1.600.10.1.5.15.9|2|3 +1.3.6.1.4.1.674.10892.1.600.10.1.5.16.7|2|3 +1.3.6.1.4.1.674.10892.1.600.10.1.5.21.13|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.5.28.27|2|5 +1.3.6.1.4.1.674.10892.1.600.10.1.6.1.24|2|11 +1.3.6.1.4.1.674.10892.1.600.10.1.6.1.27|2|31 +1.3.6.1.4.1.674.10892.1.600.10.1.6.2.4|2|31 +1.3.6.1.4.1.674.10892.1.600.10.1.6.8.21|2|27 +1.3.6.1.4.1.674.10892.1.600.10.1.6.9.18|2|21 +1.3.6.1.4.1.674.10892.1.600.10.1.6.14.27|2|10 +1.3.6.1.4.1.674.10892.1.600.10.1.6.15.9|2|19 +1.3.6.1.4.1.674.10892.1.600.10.1.6.16.7|2|22 +1.3.6.1.4.1.674.10892.1.600.10.1.6.21.13|2|18 +1.3.6.1.4.1.674.10892.1.600.10.1.6.28.27|2|11 +1.3.6.1.4.1.674.10892.1.600.10.1.7.1.24|4x|6275742062757420627574 +1.3.6.1.4.1.674.10892.1.600.10.1.7.1.27|4|zombies +1.3.6.1.4.1.674.10892.1.600.10.1.7.2.4|4x|717561696e746c79206b65707420717561696e746c79206b65707420717561696e746c7920717561696e746c79206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.600.10.1.7.8.21|4x|6163746564204a616465642064726976696e67207a6f6d626965732064726976696e67204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.1.600.10.1.7.9.18|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.1.600.10.1.7.14.27|4x|4a616465642064726976696e67 +1.3.6.1.4.1.674.10892.1.600.10.1.7.15.9|4|kept +1.3.6.1.4.1.674.10892.1.600.10.1.7.16.7|4x|4a61646564206f78656e20627574 +1.3.6.1.4.1.674.10892.1.600.10.1.7.21.13|4x|6f78656e20666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.600.10.1.7.28.27|4x|627574206b6570742064726976696e67206b657074 +1.3.6.1.4.1.674.10892.1.600.10.1.8.1.24|2|2 +1.3.6.1.4.1.674.10892.1.600.10.1.8.1.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.8.2.4|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.8.8.21|2|3 +1.3.6.1.4.1.674.10892.1.600.10.1.8.9.18|2|6 +1.3.6.1.4.1.674.10892.1.600.10.1.8.14.27|2|1 +1.3.6.1.4.1.674.10892.1.600.10.1.8.15.9|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.8.16.7|2|4 +1.3.6.1.4.1.674.10892.1.600.10.1.8.21.13|2|5 +1.3.6.1.4.1.674.10892.1.600.10.1.8.28.27|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.1.4.5|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.1.4.17|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.1.8.27|2|8 +1.3.6.1.4.1.674.10892.1.600.12.1.1.13.12|2|13 +1.3.6.1.4.1.674.10892.1.600.12.1.1.15.24|2|15 +1.3.6.1.4.1.674.10892.1.600.12.1.1.18.16|2|18 +1.3.6.1.4.1.674.10892.1.600.12.1.1.18.21|2|18 +1.3.6.1.4.1.674.10892.1.600.12.1.1.18.26|2|18 +1.3.6.1.4.1.674.10892.1.600.12.1.1.21.6|2|21 +1.3.6.1.4.1.674.10892.1.600.12.1.1.23.24|2|23 +1.3.6.1.4.1.674.10892.1.600.12.1.2.4.5|2|5 +1.3.6.1.4.1.674.10892.1.600.12.1.2.4.17|2|17 +1.3.6.1.4.1.674.10892.1.600.12.1.2.8.27|2|27 +1.3.6.1.4.1.674.10892.1.600.12.1.2.13.12|2|12 +1.3.6.1.4.1.674.10892.1.600.12.1.2.15.24|2|24 +1.3.6.1.4.1.674.10892.1.600.12.1.2.18.16|2|16 +1.3.6.1.4.1.674.10892.1.600.12.1.2.18.21|2|21 +1.3.6.1.4.1.674.10892.1.600.12.1.2.18.26|2|26 +1.3.6.1.4.1.674.10892.1.600.12.1.2.21.6|2|6 +1.3.6.1.4.1.674.10892.1.600.12.1.2.23.24|2|24 +1.3.6.1.4.1.674.10892.1.600.12.1.3.4.5|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.3.4.17|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.3.8.27|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.3.13.12|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.3.15.24|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.3.18.16|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.3.18.21|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.3.18.26|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.3.21.6|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.3.23.24|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.4.4.5|2|16 +1.3.6.1.4.1.674.10892.1.600.12.1.4.4.17|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.4.8.27|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.4.13.12|2|16 +1.3.6.1.4.1.674.10892.1.600.12.1.4.15.24|2|16 +1.3.6.1.4.1.674.10892.1.600.12.1.4.18.16|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.4.18.21|2|10 +1.3.6.1.4.1.674.10892.1.600.12.1.4.18.26|2|8 +1.3.6.1.4.1.674.10892.1.600.12.1.4.21.6|2|16 +1.3.6.1.4.1.674.10892.1.600.12.1.4.23.24|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.5.4.5|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.5.4.17|2|6 +1.3.6.1.4.1.674.10892.1.600.12.1.6.4.5|2|7 +1.3.6.1.4.1.674.10892.1.600.12.1.6.4.17|2|9 +1.3.6.1.4.1.674.10892.1.600.12.1.6.8.27|2|18 +1.3.6.1.4.1.674.10892.1.600.12.1.6.13.12|2|21 +1.3.6.1.4.1.674.10892.1.600.12.1.6.15.24|2|19 +1.3.6.1.4.1.674.10892.1.600.12.1.6.18.16|2|10 +1.3.6.1.4.1.674.10892.1.600.12.1.6.18.21|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.6.18.26|2|9 +1.3.6.1.4.1.674.10892.1.600.12.1.6.21.6|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.6.23.24|2|13 +1.3.6.1.4.1.674.10892.1.600.12.1.7.4.5|2|7 +1.3.6.1.4.1.674.10892.1.600.12.1.7.4.17|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.7.8.27|2|7 +1.3.6.1.4.1.674.10892.1.600.12.1.7.13.12|2|10 +1.3.6.1.4.1.674.10892.1.600.12.1.7.15.24|2|10 +1.3.6.1.4.1.674.10892.1.600.12.1.7.18.16|2|5 +1.3.6.1.4.1.674.10892.1.600.12.1.7.18.21|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.7.18.26|2|10 +1.3.6.1.4.1.674.10892.1.600.12.1.7.21.6|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.7.23.24|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.8.4.5|4x|627574206f78656e20616374656420717561696e746c79207468656972207a6f6d626965732062757420627574 +1.3.6.1.4.1.674.10892.1.600.12.1.8.4.17|4x|6b65707420717561696e746c79207468656972207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.1.600.12.1.8.8.27|4x|666f7277617264206f78656e +1.3.6.1.4.1.674.10892.1.600.12.1.8.13.12|4x|6b6570742062757420666f7277617264206163746564 +1.3.6.1.4.1.674.10892.1.600.12.1.8.15.24|4x|6b657074204a6164656420717561696e746c79207a6f6d6269657320627574204a61646564206b657074204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.1.600.12.1.8.18.16|4x|6163746564206f78656e20717561696e746c79204a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.600.12.1.8.18.21|4|zombies +1.3.6.1.4.1.674.10892.1.600.12.1.8.18.26|4x|7a6f6d62696573204a616465642062757420717561696e746c7920717561696e746c792064726976696e67204a61646564204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.1.600.12.1.8.21.6|4x|4a616465642064726976696e672062757420666f727761726420717561696e746c79206f78656e206f78656e207468656972206b657074 +1.3.6.1.4.1.674.10892.1.600.12.1.8.23.24|4x|64726976696e67207468656972207468656972204a616465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.600.12.1.9.4.5|2|29 +1.3.6.1.4.1.674.10892.1.600.12.1.9.4.17|2|19 +1.3.6.1.4.1.674.10892.1.600.12.1.10.4.5|2|14 +1.3.6.1.4.1.674.10892.1.600.12.1.10.4.17|2|31 +1.3.6.1.4.1.674.10892.1.600.12.1.10.8.27|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.10.13.12|2|29 +1.3.6.1.4.1.674.10892.1.600.12.1.10.15.24|2|6 +1.3.6.1.4.1.674.10892.1.600.12.1.10.18.16|2|12 +1.3.6.1.4.1.674.10892.1.600.12.1.10.18.21|2|12 +1.3.6.1.4.1.674.10892.1.600.12.1.10.18.26|2|11 +1.3.6.1.4.1.674.10892.1.600.12.1.10.21.6|2|11 +1.3.6.1.4.1.674.10892.1.600.12.1.10.23.24|2|11 +1.3.6.1.4.1.674.10892.1.600.12.1.11.4.5|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.11.4.17|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.11.8.27|2|16 +1.3.6.1.4.1.674.10892.1.600.12.1.11.13.12|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.11.15.24|2|8 +1.3.6.1.4.1.674.10892.1.600.12.1.11.18.16|2|8 +1.3.6.1.4.1.674.10892.1.600.12.1.11.18.21|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.11.18.26|2|8 +1.3.6.1.4.1.674.10892.1.600.12.1.11.21.6|2|4 +1.3.6.1.4.1.674.10892.1.600.12.1.11.23.24|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.12.4.5|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.12.4.17|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.12.8.27|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.12.13.12|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.12.15.24|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.12.18.16|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.12.18.21|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.12.18.26|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.12.21.6|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.12.23.24|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.13.4.5|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.13.4.17|2|0 +1.3.6.1.4.1.674.10892.1.600.12.1.13.8.27|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.13.13.12|2|0 +1.3.6.1.4.1.674.10892.1.600.12.1.13.15.24|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.13.18.16|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.13.18.21|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.13.18.26|2|0 +1.3.6.1.4.1.674.10892.1.600.12.1.13.21.6|2|1 +1.3.6.1.4.1.674.10892.1.600.12.1.13.23.24|2|0 +1.3.6.1.4.1.674.10892.1.600.12.1.14.4.5|2|2 +1.3.6.1.4.1.674.10892.1.600.12.1.14.4.17|2|3 +1.3.6.1.4.1.674.10892.1.600.12.1.14.8.27|2|13 +1.3.6.1.4.1.674.10892.1.600.12.1.14.13.12|2|19 +1.3.6.1.4.1.674.10892.1.600.12.1.14.15.24|2|31 +1.3.6.1.4.1.674.10892.1.600.12.1.14.18.16|2|13 +1.3.6.1.4.1.674.10892.1.600.12.1.14.18.21|2|30 +1.3.6.1.4.1.674.10892.1.600.12.1.14.18.26|2|31 +1.3.6.1.4.1.674.10892.1.600.12.1.14.21.6|2|12 +1.3.6.1.4.1.674.10892.1.600.12.1.14.23.24|2|23 +1.3.6.1.4.1.674.10892.1.600.12.1.16.4.5|2|29 +1.3.6.1.4.1.674.10892.1.600.12.1.16.4.17|2|19 +1.3.6.1.4.1.674.10892.1.600.20.1.1.12.15|2|12 +1.3.6.1.4.1.674.10892.1.600.20.1.1.22.19|2|22 +1.3.6.1.4.1.674.10892.1.600.20.1.2.12.15|2|15 +1.3.6.1.4.1.674.10892.1.600.20.1.2.22.19|2|19 +1.3.6.1.4.1.674.10892.1.600.20.1.3.12.15|2|6 +1.3.6.1.4.1.674.10892.1.600.20.1.3.22.19|2|2 +1.3.6.1.4.1.674.10892.1.600.20.1.4.12.15|2|1 +1.3.6.1.4.1.674.10892.1.600.20.1.4.22.19|2|1 +1.3.6.1.4.1.674.10892.1.600.20.1.5.12.15|2|5 +1.3.6.1.4.1.674.10892.1.600.20.1.5.22.19|2|6 +1.3.6.1.4.1.674.10892.1.600.20.1.6.12.15|2|19 +1.3.6.1.4.1.674.10892.1.600.20.1.6.22.19|2|29 +1.3.6.1.4.1.674.10892.1.600.20.1.7.12.15|2|6 +1.3.6.1.4.1.674.10892.1.600.20.1.7.22.19|2|3 +1.3.6.1.4.1.674.10892.1.600.20.1.8.12.15|4x|6275742064726976696e6720616374656420666f7277617264 +1.3.6.1.4.1.674.10892.1.600.20.1.8.22.19|4x|4a61646564206275742062757420717561696e746c79206f78656e204a61646564206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.600.20.1.9.12.15|2|0 +1.3.6.1.4.1.674.10892.1.600.20.1.9.22.19|2|11 +1.3.6.1.4.1.674.10892.1.600.20.1.10.12.15|2|25 +1.3.6.1.4.1.674.10892.1.600.20.1.10.22.19|2|21 +1.3.6.1.4.1.674.10892.1.600.20.1.11.12.15|2|6 +1.3.6.1.4.1.674.10892.1.600.20.1.11.22.19|2|11 +1.3.6.1.4.1.674.10892.1.600.20.1.12.12.15|2|10 +1.3.6.1.4.1.674.10892.1.600.20.1.12.22.19|2|1 +1.3.6.1.4.1.674.10892.1.600.20.1.13.12.15|2|25 +1.3.6.1.4.1.674.10892.1.600.20.1.13.22.19|2|21 +1.3.6.1.4.1.674.10892.1.600.20.1.14.12.15|2|22 +1.3.6.1.4.1.674.10892.1.600.20.1.14.22.19|2|15 +1.3.6.1.4.1.674.10892.1.600.20.1.15.12.15|2|4 +1.3.6.1.4.1.674.10892.1.600.20.1.15.22.19|2|8 +1.3.6.1.4.1.674.10892.1.600.20.1.16.12.15|2|2 +1.3.6.1.4.1.674.10892.1.600.20.1.16.22.19|2|2 +1.3.6.1.4.1.674.10892.1.600.30.1.1.9.28|2|9 +1.3.6.1.4.1.674.10892.1.600.30.1.1.18.4|2|18 +1.3.6.1.4.1.674.10892.1.600.30.1.2.9.28|2|28 +1.3.6.1.4.1.674.10892.1.600.30.1.2.18.4|2|4 +1.3.6.1.4.1.674.10892.1.600.30.1.3.9.28|2|6 +1.3.6.1.4.1.674.10892.1.600.30.1.3.18.4|2|1 +1.3.6.1.4.1.674.10892.1.600.30.1.4.9.28|2|1 +1.3.6.1.4.1.674.10892.1.600.30.1.4.18.4|2|6 +1.3.6.1.4.1.674.10892.1.600.30.1.5.9.28|2|2 +1.3.6.1.4.1.674.10892.1.600.30.1.5.18.4|2|5 +1.3.6.1.4.1.674.10892.1.600.30.1.6.9.28|2|16 +1.3.6.1.4.1.674.10892.1.600.30.1.6.18.4|2|10 +1.3.6.1.4.1.674.10892.1.600.30.1.7.9.28|2|26 +1.3.6.1.4.1.674.10892.1.600.30.1.7.18.4|2|26 +1.3.6.1.4.1.674.10892.1.600.30.1.8.9.28|4x|64726976696e67207a6f6d626965732064726976696e6720717561696e746c7920717561696e746c79206b657074206163746564 +1.3.6.1.4.1.674.10892.1.600.30.1.8.18.4|4x|4a61646564206b6570742062757420666f7277617264206163746564204a6164656420666f7277617264206b657074207468656972 +1.3.6.1.4.1.674.10892.1.600.30.1.9.9.28|2|1 +1.3.6.1.4.1.674.10892.1.600.30.1.9.18.4|2|14 +1.3.6.1.4.1.674.10892.1.600.30.1.10.9.28|2|2 +1.3.6.1.4.1.674.10892.1.600.30.1.10.18.4|2|19 +1.3.6.1.4.1.674.10892.1.600.30.1.11.9.28|2|25 +1.3.6.1.4.1.674.10892.1.600.30.1.11.18.4|2|13 +1.3.6.1.4.1.674.10892.1.600.30.1.12.9.28|2|12 +1.3.6.1.4.1.674.10892.1.600.30.1.12.18.4|2|10 +1.3.6.1.4.1.674.10892.1.600.30.1.13.9.28|2|19 +1.3.6.1.4.1.674.10892.1.600.30.1.13.18.4|2|19 +1.3.6.1.4.1.674.10892.1.600.30.1.14.9.28|2|31 +1.3.6.1.4.1.674.10892.1.600.30.1.14.18.4|2|23 +1.3.6.1.4.1.674.10892.1.600.30.1.15.9.28|2|8 +1.3.6.1.4.1.674.10892.1.600.30.1.15.18.4|2|8 +1.3.6.1.4.1.674.10892.1.600.30.1.16.9.28|2|2 +1.3.6.1.4.1.674.10892.1.600.30.1.16.18.4|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.1.5.9|2|5 +1.3.6.1.4.1.674.10892.1.600.40.1.1.9.5|2|9 +1.3.6.1.4.1.674.10892.1.600.40.1.1.11.16|2|11 +1.3.6.1.4.1.674.10892.1.600.40.1.1.15.28|2|15 +1.3.6.1.4.1.674.10892.1.600.40.1.1.19.3|2|19 +1.3.6.1.4.1.674.10892.1.600.40.1.1.19.16|2|19 +1.3.6.1.4.1.674.10892.1.600.40.1.1.21.31|2|21 +1.3.6.1.4.1.674.10892.1.600.40.1.1.25.26|2|25 +1.3.6.1.4.1.674.10892.1.600.40.1.1.29.7|2|29 +1.3.6.1.4.1.674.10892.1.600.40.1.1.30.13|2|30 +1.3.6.1.4.1.674.10892.1.600.40.1.2.5.9|2|9 +1.3.6.1.4.1.674.10892.1.600.40.1.2.9.5|2|5 +1.3.6.1.4.1.674.10892.1.600.40.1.2.11.16|2|16 +1.3.6.1.4.1.674.10892.1.600.40.1.2.15.28|2|28 +1.3.6.1.4.1.674.10892.1.600.40.1.2.19.3|2|3 +1.3.6.1.4.1.674.10892.1.600.40.1.2.19.16|2|16 +1.3.6.1.4.1.674.10892.1.600.40.1.2.21.31|2|31 +1.3.6.1.4.1.674.10892.1.600.40.1.2.25.26|2|26 +1.3.6.1.4.1.674.10892.1.600.40.1.2.29.7|2|7 +1.3.6.1.4.1.674.10892.1.600.40.1.2.30.13|2|13 +1.3.6.1.4.1.674.10892.1.600.40.1.3.5.9|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.3.9.5|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.3.11.16|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.3.15.28|2|14 +1.3.6.1.4.1.674.10892.1.600.40.1.3.19.3|2|30 +1.3.6.1.4.1.674.10892.1.600.40.1.3.19.16|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.3.21.31|2|16 +1.3.6.1.4.1.674.10892.1.600.40.1.3.25.26|2|16 +1.3.6.1.4.1.674.10892.1.600.40.1.3.29.7|2|8 +1.3.6.1.4.1.674.10892.1.600.40.1.3.30.13|2|8 +1.3.6.1.4.1.674.10892.1.600.40.1.4.5.9|2|8 +1.3.6.1.4.1.674.10892.1.600.40.1.4.9.5|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.4.11.16|2|8 +1.3.6.1.4.1.674.10892.1.600.40.1.4.15.28|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.4.19.3|2|8 +1.3.6.1.4.1.674.10892.1.600.40.1.4.19.16|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.4.21.31|2|16 +1.3.6.1.4.1.674.10892.1.600.40.1.4.25.26|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.4.29.7|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.4.30.13|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.5.5.9|2|6 +1.3.6.1.4.1.674.10892.1.600.40.1.5.9.5|2|7 +1.3.6.1.4.1.674.10892.1.600.40.1.5.11.16|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.5.15.28|2|7 +1.3.6.1.4.1.674.10892.1.600.40.1.5.19.3|2|3 +1.3.6.1.4.1.674.10892.1.600.40.1.5.19.16|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.5.21.31|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.5.25.26|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.5.29.7|2|6 +1.3.6.1.4.1.674.10892.1.600.40.1.5.30.13|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.6.5.9|2|29 +1.3.6.1.4.1.674.10892.1.600.40.1.6.9.5|2|18 +1.3.6.1.4.1.674.10892.1.600.40.1.6.11.16|2|22 +1.3.6.1.4.1.674.10892.1.600.40.1.6.15.28|2|28 +1.3.6.1.4.1.674.10892.1.600.40.1.6.19.3|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.6.19.16|2|13 +1.3.6.1.4.1.674.10892.1.600.40.1.6.21.31|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.6.25.26|2|16 +1.3.6.1.4.1.674.10892.1.600.40.1.6.29.7|2|8 +1.3.6.1.4.1.674.10892.1.600.40.1.6.30.13|2|19 +1.3.6.1.4.1.674.10892.1.600.40.1.7.5.9|4x|7468656972206163746564 +1.3.6.1.4.1.674.10892.1.600.40.1.7.9.5|4x|7a6f6d62696573207a6f6d6269657320666f7277617264206b657074204a616465642064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.1.600.40.1.7.11.16|4x|6f78656e2064726976696e6720666f7277617264206f78656e206b65707420666f7277617264206b657074204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.1.600.40.1.7.15.28|4x|7a6f6d6269657320666f727761726420746865697220666f7277617264206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.600.40.1.7.19.3|4|kept +1.3.6.1.4.1.674.10892.1.600.40.1.7.19.16|4|quaintly +1.3.6.1.4.1.674.10892.1.600.40.1.7.21.31|4|Jaded +1.3.6.1.4.1.674.10892.1.600.40.1.7.25.26|4x|64726976696e67206163746564206b657074204a61646564206163746564204a61646564 +1.3.6.1.4.1.674.10892.1.600.40.1.7.29.7|4x|6b65707420717561696e746c79207468656972207468656972206b6570742064726976696e6720746865697220616374656420666f7277617264 +1.3.6.1.4.1.674.10892.1.600.40.1.7.30.13|4x|64726976696e6720616374656420627574206f78656e20666f727761726420666f7277617264206b657074204a61646564 +1.3.6.1.4.1.674.10892.1.600.40.1.8.5.9|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.8.9.5|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.8.11.16|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.8.15.28|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.8.19.3|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.8.19.16|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.8.21.31|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.8.25.26|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.8.29.7|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.8.30.13|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.9.5.9|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.9.9.5|2|2 +1.3.6.1.4.1.674.10892.1.600.40.1.9.11.16|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.9.15.28|2|5 +1.3.6.1.4.1.674.10892.1.600.40.1.9.19.3|2|6 +1.3.6.1.4.1.674.10892.1.600.40.1.9.19.16|2|1 +1.3.6.1.4.1.674.10892.1.600.40.1.9.21.31|2|6 +1.3.6.1.4.1.674.10892.1.600.40.1.9.25.26|2|4 +1.3.6.1.4.1.674.10892.1.600.40.1.9.29.7|2|6 +1.3.6.1.4.1.674.10892.1.600.40.1.9.30.13|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.1.2.18|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.1.3.3|2|3 +1.3.6.1.4.1.674.10892.1.600.42.1.1.3.18|2|3 +1.3.6.1.4.1.674.10892.1.600.42.1.1.8.6|2|8 +1.3.6.1.4.1.674.10892.1.600.42.1.1.15.4|2|15 +1.3.6.1.4.1.674.10892.1.600.42.1.1.16.11|2|16 +1.3.6.1.4.1.674.10892.1.600.42.1.1.17.25|2|17 +1.3.6.1.4.1.674.10892.1.600.42.1.1.21.22|2|21 +1.3.6.1.4.1.674.10892.1.600.42.1.1.26.9|2|26 +1.3.6.1.4.1.674.10892.1.600.42.1.1.30.30|2|30 +1.3.6.1.4.1.674.10892.1.600.42.1.2.2.18|2|18 +1.3.6.1.4.1.674.10892.1.600.42.1.2.3.3|2|3 +1.3.6.1.4.1.674.10892.1.600.42.1.2.3.18|2|18 +1.3.6.1.4.1.674.10892.1.600.42.1.2.8.6|2|6 +1.3.6.1.4.1.674.10892.1.600.42.1.2.15.4|2|4 +1.3.6.1.4.1.674.10892.1.600.42.1.2.16.11|2|11 +1.3.6.1.4.1.674.10892.1.600.42.1.2.17.25|2|25 +1.3.6.1.4.1.674.10892.1.600.42.1.2.21.22|2|22 +1.3.6.1.4.1.674.10892.1.600.42.1.2.26.9|2|9 +1.3.6.1.4.1.674.10892.1.600.42.1.2.30.30|2|30 +1.3.6.1.4.1.674.10892.1.600.42.1.3.2.18|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.3.3.3|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.3.3.18|2|4 +1.3.6.1.4.1.674.10892.1.600.42.1.3.8.6|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.3.15.4|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.3.16.11|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.3.17.25|2|4 +1.3.6.1.4.1.674.10892.1.600.42.1.3.21.22|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.3.26.9|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.3.30.30|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.4.2.18|2|16 +1.3.6.1.4.1.674.10892.1.600.42.1.4.3.3|2|10 +1.3.6.1.4.1.674.10892.1.600.42.1.4.3.18|2|16 +1.3.6.1.4.1.674.10892.1.600.42.1.4.8.6|2|16 +1.3.6.1.4.1.674.10892.1.600.42.1.4.15.4|2|4 +1.3.6.1.4.1.674.10892.1.600.42.1.4.16.11|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.4.17.25|2|26 +1.3.6.1.4.1.674.10892.1.600.42.1.4.21.22|2|10 +1.3.6.1.4.1.674.10892.1.600.42.1.4.26.9|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.4.30.30|2|8 +1.3.6.1.4.1.674.10892.1.600.42.1.5.2.18|2|4 +1.3.6.1.4.1.674.10892.1.600.42.1.5.3.3|2|4 +1.3.6.1.4.1.674.10892.1.600.42.1.5.3.18|2|6 +1.3.6.1.4.1.674.10892.1.600.42.1.5.8.6|2|1 +1.3.6.1.4.1.674.10892.1.600.42.1.5.15.4|2|5 +1.3.6.1.4.1.674.10892.1.600.42.1.5.16.11|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.5.17.25|2|3 +1.3.6.1.4.1.674.10892.1.600.42.1.5.21.22|2|3 +1.3.6.1.4.1.674.10892.1.600.42.1.5.26.9|2|2 +1.3.6.1.4.1.674.10892.1.600.42.1.5.30.30|2|5 +1.3.6.1.4.1.674.10892.1.600.42.1.6.2.18|2|17 +1.3.6.1.4.1.674.10892.1.600.42.1.6.3.3|2|22 +1.3.6.1.4.1.674.10892.1.600.42.1.6.3.18|2|30 +1.3.6.1.4.1.674.10892.1.600.42.1.6.8.6|2|5 +1.3.6.1.4.1.674.10892.1.600.42.1.6.15.4|2|14 +1.3.6.1.4.1.674.10892.1.600.42.1.6.16.11|2|31 +1.3.6.1.4.1.674.10892.1.600.42.1.6.17.25|2|28 +1.3.6.1.4.1.674.10892.1.600.42.1.6.21.22|2|3 +1.3.6.1.4.1.674.10892.1.600.42.1.6.26.9|2|22 +1.3.6.1.4.1.674.10892.1.600.42.1.6.30.30|2|5 +1.3.6.1.4.1.674.10892.1.600.42.1.7.2.18|4x|6b6570742062757420746865697220627574206f78656e204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.600.42.1.7.3.3|4x|7468656972206f78656e204a6164656420627574 +1.3.6.1.4.1.674.10892.1.600.42.1.7.3.18|4x|7a6f6d6269657320746865697220616374656420666f727761726420666f7277617264206b657074207468656972 +1.3.6.1.4.1.674.10892.1.600.42.1.7.8.6|4x|74686569722064726976696e6720666f7277617264207468656972207468656972207a6f6d6269657320717561696e746c79204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.1.600.42.1.7.15.4|4x|61637465642064726976696e67206f78656e207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.600.42.1.7.16.11|4x|616374656420627574207468656972 +1.3.6.1.4.1.674.10892.1.600.42.1.7.17.25|4x|6b65707420627574206b65707420627574204a61646564 +1.3.6.1.4.1.674.10892.1.600.42.1.7.21.22|4x|64726976696e67206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.1.600.42.1.7.26.9|4x|717561696e746c79207a6f6d626965732064726976696e67207468656972207a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.1.600.42.1.7.30.30|4x|7a6f6d626965732064726976696e672064726976696e67207a6f6d6269657320627574204a61646564207468656972207a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.1.600.50.1.1.3.17|2|3 +1.3.6.1.4.1.674.10892.1.600.50.1.1.6.19|2|6 +1.3.6.1.4.1.674.10892.1.600.50.1.2.3.17|2|17 +1.3.6.1.4.1.674.10892.1.600.50.1.2.6.19|2|19 +1.3.6.1.4.1.674.10892.1.600.50.1.3.3.17|2|6 +1.3.6.1.4.1.674.10892.1.600.50.1.3.6.19|2|1 +1.3.6.1.4.1.674.10892.1.600.50.1.4.3.17|2|2 +1.3.6.1.4.1.674.10892.1.600.50.1.4.6.19|2|2 +1.3.6.1.4.1.674.10892.1.600.50.1.5.3.17|2|6 +1.3.6.1.4.1.674.10892.1.600.50.1.5.6.19|2|5 +1.3.6.1.4.1.674.10892.1.600.50.1.6.3.17|2|1 +1.3.6.1.4.1.674.10892.1.600.50.1.6.6.19|2|1 +1.3.6.1.4.1.674.10892.1.600.50.1.7.3.17|4x|7a6f6d62696573206b65707420746865697220717561696e746c7920627574 +1.3.6.1.4.1.674.10892.1.600.50.1.7.6.19|4|zombies +1.3.6.1.4.1.674.10892.1.600.60.1.1.12.14|2|12 +1.3.6.1.4.1.674.10892.1.600.60.1.1.22.22|2|22 +1.3.6.1.4.1.674.10892.1.600.60.1.2.12.14|2|14 +1.3.6.1.4.1.674.10892.1.600.60.1.2.22.22|2|22 +1.3.6.1.4.1.674.10892.1.600.60.1.3.12.14|2|2 +1.3.6.1.4.1.674.10892.1.600.60.1.3.22.22|2|2 +1.3.6.1.4.1.674.10892.1.600.60.1.4.12.14|2|6 +1.3.6.1.4.1.674.10892.1.600.60.1.4.22.22|2|6 +1.3.6.1.4.1.674.10892.1.600.60.1.5.12.14|2|4 +1.3.6.1.4.1.674.10892.1.600.60.1.5.22.22|2|3 +1.3.6.1.4.1.674.10892.1.600.60.1.6.12.14|4x|7a6f6d6269657320717561696e746c7920666f727761726420616374656420717561696e746c79206163746564204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.600.60.1.6.22.22|4x|616374656420717561696e746c79207468656972204a61646564206f78656e20666f727761726420666f7277617264 +1.3.6.1.4.1.674.10892.1.600.60.1.7.12.14|2|20 +1.3.6.1.4.1.674.10892.1.600.60.1.7.22.22|2|7 +1.3.6.1.4.1.674.10892.1.600.60.1.8.12.14|4x|717561696e746c79206163746564206163746564206f78656e +1.3.6.1.4.1.674.10892.1.600.60.1.8.22.22|4x|746865697220717561696e746c79206b657074207468656972 +1.3.6.1.4.1.674.10892.1.600.60.1.9.12.14|2|15 +1.3.6.1.4.1.674.10892.1.600.60.1.9.22.22|2|26 +1.3.6.1.4.1.674.10892.1.600.60.1.10.12.14|4x|717561696e746c7920717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.600.60.1.10.22.22|4x|627574206f78656e20717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.1.600.60.1.11.12.14|4x|7a6f6d62696573206b657074206f78656e2064726976696e67 +1.3.6.1.4.1.674.10892.1.600.60.1.11.22.22|4x|6b657074206b657074206b657074207468656972206f78656e +1.3.6.1.4.1.674.10892.1.600.60.1.12.12.14|2|21 +1.3.6.1.4.1.674.10892.1.600.60.1.12.22.22|2|29 +1.3.6.1.4.1.674.10892.1.600.60.1.13.12.14|4x|7468656972207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.600.60.1.13.22.22|4x|64726976696e672064726976696e67204a6164656420627574 +1.3.6.1.4.1.674.10892.1.600.60.1.14.12.14|4x|717561696e746c7920717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.1.600.60.1.14.22.22|4x|6163746564207468656972204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.1.600.60.1.15.12.14|2|6 +1.3.6.1.4.1.674.10892.1.600.60.1.15.22.22|2|2 +1.3.6.1.4.1.674.10892.1.600.60.1.16.12.14|2|4 +1.3.6.1.4.1.674.10892.1.600.60.1.16.22.22|2|1 +1.3.6.1.4.1.674.10892.1.600.60.1.17.12.14|2|1 +1.3.6.1.4.1.674.10892.1.600.60.1.17.22.22|2|1 +1.3.6.1.4.1.674.10892.1.600.60.1.18.12.14|2|1 +1.3.6.1.4.1.674.10892.1.600.60.1.18.22.22|2|1 +1.3.6.1.4.1.674.10892.1.600.60.1.19.12.14|2|21 +1.3.6.1.4.1.674.10892.1.600.60.1.19.22.22|2|0 +1.3.6.1.4.1.674.10892.1.600.60.1.20.12.14|2|25 +1.3.6.1.4.1.674.10892.1.600.60.1.20.22.22|2|14 +1.3.6.1.4.1.674.10892.1.600.60.1.21.12.14|2|10 +1.3.6.1.4.1.674.10892.1.600.60.1.21.22.22|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.1.1.1|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.1.1.7|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.1.4.9|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.1.6.26|2|6 +1.3.6.1.4.1.674.10892.1.600.70.1.1.8.4|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.1.10.17|2|10 +1.3.6.1.4.1.674.10892.1.600.70.1.1.14.30|2|14 +1.3.6.1.4.1.674.10892.1.600.70.1.1.26.27|2|26 +1.3.6.1.4.1.674.10892.1.600.70.1.1.26.29|2|26 +1.3.6.1.4.1.674.10892.1.600.70.1.1.29.9|2|29 +1.3.6.1.4.1.674.10892.1.600.70.1.2.1.1|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.2.1.7|2|7 +1.3.6.1.4.1.674.10892.1.600.70.1.2.4.9|2|9 +1.3.6.1.4.1.674.10892.1.600.70.1.2.6.26|2|26 +1.3.6.1.4.1.674.10892.1.600.70.1.2.8.4|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.2.10.17|2|17 +1.3.6.1.4.1.674.10892.1.600.70.1.2.14.30|2|30 +1.3.6.1.4.1.674.10892.1.600.70.1.2.26.27|2|27 +1.3.6.1.4.1.674.10892.1.600.70.1.2.26.29|2|29 +1.3.6.1.4.1.674.10892.1.600.70.1.2.29.9|2|9 +1.3.6.1.4.1.674.10892.1.600.70.1.3.1.1|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.3.1.7|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.3.4.9|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.3.6.26|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.3.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.3.10.17|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.3.14.30|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.3.26.27|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.3.26.29|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.3.29.9|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.4.1.1|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.4.1.7|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.4.4.9|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.4.6.26|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.4.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.4.10.17|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.4.14.30|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.4.26.27|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.4.26.29|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.4.29.9|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.5.1.1|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.5.1.7|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.5.4.9|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.5.6.26|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.5.8.4|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.5.10.17|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.5.14.30|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.5.26.27|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.5.26.29|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.5.29.9|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.6.1.1|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.6.1.7|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.6.4.9|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.6.6.26|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.6.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.6.10.17|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.6.14.30|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.6.26.27|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.6.26.29|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.6.29.9|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.7.1.1|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.7.1.7|2|16 +1.3.6.1.4.1.674.10892.1.600.70.1.7.4.9|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.7.6.26|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.7.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.7.10.17|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.7.14.30|2|16 +1.3.6.1.4.1.674.10892.1.600.70.1.7.26.27|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.7.26.29|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.7.29.9|2|16 +1.3.6.1.4.1.674.10892.1.600.70.1.8.1.1|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.8.1.7|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.8.4.9|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.8.6.26|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.8.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.8.10.17|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.8.14.30|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.8.26.27|2|8 +1.3.6.1.4.1.674.10892.1.600.70.1.8.26.29|2|4 +1.3.6.1.4.1.674.10892.1.600.70.1.8.29.9|2|16 +1.3.6.1.4.1.674.10892.1.600.70.1.9.1.1|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.1.7|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.9.4.9|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.6.26|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.10.17|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.14.30|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.26.27|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.9.26.29|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.9.29.9|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.10.1.1|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.10.1.7|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.4.9|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.6.26|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.8.4|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.10.17|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.14.30|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.26.27|2|2 +1.3.6.1.4.1.674.10892.1.600.70.1.10.26.29|2|1 +1.3.6.1.4.1.674.10892.1.600.70.1.10.29.9|2|2 +1.3.6.1.4.1.674.10892.1.700.10.1.1.1.19|2|1 +1.3.6.1.4.1.674.10892.1.700.10.1.1.6.31|2|6 +1.3.6.1.4.1.674.10892.1.700.10.1.2.1.19|2|19 +1.3.6.1.4.1.674.10892.1.700.10.1.2.6.31|2|31 +1.3.6.1.4.1.674.10892.1.700.10.1.3.1.19|2|2 +1.3.6.1.4.1.674.10892.1.700.10.1.3.6.31|2|1 +1.3.6.1.4.1.674.10892.1.700.10.1.4.1.19|2|6 +1.3.6.1.4.1.674.10892.1.700.10.1.4.6.31|2|4 +1.3.6.1.4.1.674.10892.1.700.10.1.5.1.19|2|4 +1.3.6.1.4.1.674.10892.1.700.10.1.5.6.31|2|7 +1.3.6.1.4.1.674.10892.1.700.10.1.6.1.19|2|6 +1.3.6.1.4.1.674.10892.1.700.10.1.6.6.31|2|29 +1.3.6.1.4.1.674.10892.1.700.10.1.7.1.19|4x|64726976696e67206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.1.700.10.1.7.6.31|4x|7468656972204a6164656420717561696e746c79206275742062757420746865697220717561696e746c79206b657074206163746564 +1.3.6.1.4.1.674.10892.1.700.10.1.8.1.19|2|3 +1.3.6.1.4.1.674.10892.1.700.10.1.8.6.31|2|6 +1.3.6.1.4.1.674.10892.1.700.12.1.1.8.11|2|8 +1.3.6.1.4.1.674.10892.1.700.12.1.1.19.3|2|19 +1.3.6.1.4.1.674.10892.1.700.12.1.2.8.11|2|11 +1.3.6.1.4.1.674.10892.1.700.12.1.2.19.3|2|3 +1.3.6.1.4.1.674.10892.1.700.12.1.3.8.11|2|2 +1.3.6.1.4.1.674.10892.1.700.12.1.3.19.3|2|1 +1.3.6.1.4.1.674.10892.1.700.12.1.4.8.11|2|2 +1.3.6.1.4.1.674.10892.1.700.12.1.4.19.3|2|1 +1.3.6.1.4.1.674.10892.1.700.12.1.5.8.11|2|2 +1.3.6.1.4.1.674.10892.1.700.12.1.5.19.3|2|5 +1.3.6.1.4.1.674.10892.1.700.12.1.6.8.11|2|11 +1.3.6.1.4.1.674.10892.1.700.12.1.6.19.3|2|21 +1.3.6.1.4.1.674.10892.1.700.12.1.7.8.11|2|9 +1.3.6.1.4.1.674.10892.1.700.12.1.7.19.3|2|10 +1.3.6.1.4.1.674.10892.1.700.12.1.8.8.11|4|acted +1.3.6.1.4.1.674.10892.1.700.12.1.8.19.3|4x|6163746564206f78656e20627574207a6f6d626965732064726976696e67206163746564204a61646564 +1.3.6.1.4.1.674.10892.1.700.12.1.9.8.11|2|23 +1.3.6.1.4.1.674.10892.1.700.12.1.9.19.3|2|18 +1.3.6.1.4.1.674.10892.1.700.12.1.10.8.11|2|3 +1.3.6.1.4.1.674.10892.1.700.12.1.10.19.3|2|26 +1.3.6.1.4.1.674.10892.1.700.12.1.11.8.11|2|13 +1.3.6.1.4.1.674.10892.1.700.12.1.11.19.3|2|18 +1.3.6.1.4.1.674.10892.1.700.12.1.12.8.11|2|7 +1.3.6.1.4.1.674.10892.1.700.12.1.12.19.3|2|17 +1.3.6.1.4.1.674.10892.1.700.12.1.13.8.11|2|21 +1.3.6.1.4.1.674.10892.1.700.12.1.13.19.3|2|7 +1.3.6.1.4.1.674.10892.1.700.12.1.14.8.11|2|7 +1.3.6.1.4.1.674.10892.1.700.12.1.14.19.3|2|30 +1.3.6.1.4.1.674.10892.1.700.12.1.15.8.11|2|11 +1.3.6.1.4.1.674.10892.1.700.12.1.15.19.3|2|4 +1.3.6.1.4.1.674.10892.1.700.12.1.16.8.11|2|4 +1.3.6.1.4.1.674.10892.1.700.12.1.16.19.3|2|2 +1.3.6.1.4.1.674.10892.1.700.12.1.17.8.11|2|8 +1.3.6.1.4.1.674.10892.1.700.12.1.17.19.3|2|2 +1.3.6.1.4.1.674.10892.1.700.12.1.18.8.11|2|1 +1.3.6.1.4.1.674.10892.1.700.12.1.18.19.3|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.1.11.1|2|11 +1.3.6.1.4.1.674.10892.1.700.20.1.1.13.18|2|13 +1.3.6.1.4.1.674.10892.1.700.20.1.1.14.8|2|14 +1.3.6.1.4.1.674.10892.1.700.20.1.1.18.13|2|18 +1.3.6.1.4.1.674.10892.1.700.20.1.1.19.10|2|19 +1.3.6.1.4.1.674.10892.1.700.20.1.1.21.13|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.1.22.4|2|22 +1.3.6.1.4.1.674.10892.1.700.20.1.1.23.23|2|23 +1.3.6.1.4.1.674.10892.1.700.20.1.1.24.10|2|24 +1.3.6.1.4.1.674.10892.1.700.20.1.1.25.17|2|25 +1.3.6.1.4.1.674.10892.1.700.20.1.2.11.1|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.2.13.18|2|18 +1.3.6.1.4.1.674.10892.1.700.20.1.2.14.8|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.2.18.13|2|13 +1.3.6.1.4.1.674.10892.1.700.20.1.2.19.10|2|10 +1.3.6.1.4.1.674.10892.1.700.20.1.2.21.13|2|13 +1.3.6.1.4.1.674.10892.1.700.20.1.2.22.4|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.2.23.23|2|23 +1.3.6.1.4.1.674.10892.1.700.20.1.2.24.10|2|10 +1.3.6.1.4.1.674.10892.1.700.20.1.2.25.17|2|17 +1.3.6.1.4.1.674.10892.1.700.20.1.3.11.1|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.3.13.18|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.3.14.8|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.3.18.13|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.3.19.10|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.3.21.13|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.3.22.4|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.3.23.23|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.3.24.10|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.3.25.17|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.4.11.1|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.4.13.18|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.4.14.8|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.4.18.13|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.4.19.10|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.4.21.13|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.4.22.4|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.4.23.23|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.4.24.10|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.4.25.17|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.5.4.5|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.5.4.17|2|9 +1.3.6.1.4.1.674.10892.1.700.20.1.5.14.8|2|7 +1.3.6.1.4.1.674.10892.1.700.20.1.5.18.13|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.5.18.23|2|10 +1.3.6.1.4.1.674.10892.1.700.20.1.5.21.13|2|9 +1.3.6.1.4.1.674.10892.1.700.20.1.5.22.4|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.5.23.23|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.5.24.10|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.5.25.17|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.6.11.1|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.6.13.18|2|9 +1.3.6.1.4.1.674.10892.1.700.20.1.6.14.8|2|31 +1.3.6.1.4.1.674.10892.1.700.20.1.6.18.13|2|24 +1.3.6.1.4.1.674.10892.1.700.20.1.6.19.10|2|12 +1.3.6.1.4.1.674.10892.1.700.20.1.6.21.13|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.6.22.4|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.6.23.23|2|10 +1.3.6.1.4.1.674.10892.1.700.20.1.6.24.10|2|25 +1.3.6.1.4.1.674.10892.1.700.20.1.6.25.17|2|16 +1.3.6.1.4.1.674.10892.1.700.20.1.7.11.1|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.7.13.18|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.7.14.8|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.7.18.13|2|16 +1.3.6.1.4.1.674.10892.1.700.20.1.7.19.10|2|16 +1.3.6.1.4.1.674.10892.1.700.20.1.7.21.13|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.7.22.4|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.7.23.23|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.7.24.10|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.7.25.17|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.8.11.1|4x|62757420666f7277617264206f78656e2064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.700.20.1.8.13.18|4x|616374656420666f727761726420666f7277617264206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.700.20.1.8.14.8|4x|62757420746865697220666f7277617264206f78656e206f78656e +1.3.6.1.4.1.674.10892.1.700.20.1.8.18.13|4x|6163746564204a61646564206b657074206b6570742062757420717561696e746c7920717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.700.20.1.8.19.10|4x|62757420666f727761726420627574 +1.3.6.1.4.1.674.10892.1.700.20.1.8.21.13|4x|6b657074206f78656e206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.1.700.20.1.8.22.4|4x|62757420627574206f78656e207a6f6d6269657320717561696e746c7920717561696e746c7920627574204a61646564 +1.3.6.1.4.1.674.10892.1.700.20.1.8.23.23|4x|6b6570742064726976696e672064726976696e67204a61646564207a6f6d6269657320666f727761726420717561696e746c79207a6f6d6269657320627574 +1.3.6.1.4.1.674.10892.1.700.20.1.8.24.10|4x|6163746564207468656972206b65707420666f727761726420666f7277617264 +1.3.6.1.4.1.674.10892.1.700.20.1.8.25.17|4x|6f78656e207468656972207468656972206f78656e +1.3.6.1.4.1.674.10892.1.700.20.1.9.11.1|2|0 +1.3.6.1.4.1.674.10892.1.700.20.1.9.13.18|2|14 +1.3.6.1.4.1.674.10892.1.700.20.1.9.14.8|2|17 +1.3.6.1.4.1.674.10892.1.700.20.1.9.18.13|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.9.19.10|2|12 +1.3.6.1.4.1.674.10892.1.700.20.1.9.21.13|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.9.22.4|2|31 +1.3.6.1.4.1.674.10892.1.700.20.1.9.23.23|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.9.24.10|2|9 +1.3.6.1.4.1.674.10892.1.700.20.1.9.25.17|2|5 +1.3.6.1.4.1.674.10892.1.700.20.1.10.11.1|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.10.13.18|2|14 +1.3.6.1.4.1.674.10892.1.700.20.1.10.14.8|2|11 +1.3.6.1.4.1.674.10892.1.700.20.1.10.18.13|2|6 +1.3.6.1.4.1.674.10892.1.700.20.1.10.19.10|2|9 +1.3.6.1.4.1.674.10892.1.700.20.1.10.21.13|2|14 +1.3.6.1.4.1.674.10892.1.700.20.1.10.22.4|2|27 +1.3.6.1.4.1.674.10892.1.700.20.1.10.23.23|2|7 +1.3.6.1.4.1.674.10892.1.700.20.1.10.24.10|2|18 +1.3.6.1.4.1.674.10892.1.700.20.1.10.25.17|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.11.11.1|2|10 +1.3.6.1.4.1.674.10892.1.700.20.1.11.13.18|2|27 +1.3.6.1.4.1.674.10892.1.700.20.1.11.14.8|2|26 +1.3.6.1.4.1.674.10892.1.700.20.1.11.18.13|2|12 +1.3.6.1.4.1.674.10892.1.700.20.1.11.19.10|2|5 +1.3.6.1.4.1.674.10892.1.700.20.1.11.21.13|2|19 +1.3.6.1.4.1.674.10892.1.700.20.1.11.22.4|2|30 +1.3.6.1.4.1.674.10892.1.700.20.1.11.23.23|2|25 +1.3.6.1.4.1.674.10892.1.700.20.1.11.24.10|2|5 +1.3.6.1.4.1.674.10892.1.700.20.1.11.25.17|2|29 +1.3.6.1.4.1.674.10892.1.700.20.1.12.11.1|2|0 +1.3.6.1.4.1.674.10892.1.700.20.1.12.13.18|2|9 +1.3.6.1.4.1.674.10892.1.700.20.1.12.14.8|2|11 +1.3.6.1.4.1.674.10892.1.700.20.1.12.18.13|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.12.19.10|2|30 +1.3.6.1.4.1.674.10892.1.700.20.1.12.21.13|2|30 +1.3.6.1.4.1.674.10892.1.700.20.1.12.22.4|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.12.23.23|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.12.24.10|2|5 +1.3.6.1.4.1.674.10892.1.700.20.1.12.25.17|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.13.11.1|2|24 +1.3.6.1.4.1.674.10892.1.700.20.1.13.13.18|2|10 +1.3.6.1.4.1.674.10892.1.700.20.1.13.14.8|2|25 +1.3.6.1.4.1.674.10892.1.700.20.1.13.18.13|2|16 +1.3.6.1.4.1.674.10892.1.700.20.1.13.19.10|2|16 +1.3.6.1.4.1.674.10892.1.700.20.1.13.21.13|2|7 +1.3.6.1.4.1.674.10892.1.700.20.1.13.22.4|2|11 +1.3.6.1.4.1.674.10892.1.700.20.1.13.23.23|2|31 +1.3.6.1.4.1.674.10892.1.700.20.1.13.24.10|2|18 +1.3.6.1.4.1.674.10892.1.700.20.1.13.25.17|2|3 +1.3.6.1.4.1.674.10892.1.700.20.1.14.11.1|2|27 +1.3.6.1.4.1.674.10892.1.700.20.1.14.13.18|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.14.14.8|2|31 +1.3.6.1.4.1.674.10892.1.700.20.1.14.18.13|2|0 +1.3.6.1.4.1.674.10892.1.700.20.1.14.19.10|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.14.21.13|2|26 +1.3.6.1.4.1.674.10892.1.700.20.1.14.22.4|2|26 +1.3.6.1.4.1.674.10892.1.700.20.1.14.23.23|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.14.24.10|2|17 +1.3.6.1.4.1.674.10892.1.700.20.1.14.25.17|2|21 +1.3.6.1.4.1.674.10892.1.700.20.1.15.11.1|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.15.13.18|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.15.14.8|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.15.18.13|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.15.19.10|2|4 +1.3.6.1.4.1.674.10892.1.700.20.1.15.21.13|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.15.22.4|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.15.23.23|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.15.24.10|2|8 +1.3.6.1.4.1.674.10892.1.700.20.1.15.25.17|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.16.11.1|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.16.13.18|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.16.14.8|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.16.18.13|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.16.19.10|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.16.21.13|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.16.22.4|2|2 +1.3.6.1.4.1.674.10892.1.700.20.1.16.23.23|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.16.24.10|2|1 +1.3.6.1.4.1.674.10892.1.700.20.1.16.25.17|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.3.20|2|3 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.4.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.5.21|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.7.27|2|7 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.8.4|2|8 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.19.23|2|19 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.23.3|2|23 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.26.2|2|26 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.26.10|2|26 +1.3.6.1.4.1.674.10892.1.1100.10.1.1.27.22|2|27 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.3.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.4.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.5.21|2|21 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.7.27|2|27 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.8.4|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.19.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.23.3|2|3 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.26.2|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.26.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.10.1.2.27.22|2|22 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.3.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.4.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.5.21|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.7.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.8.4|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.19.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.23.3|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.26.2|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.26.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.3.27.22|2|1 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.3.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.4.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.5.21|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.7.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.8.4|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.19.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.23.3|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.26.2|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.26.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.4.27.22|2|4 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.3.20|2|3 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.4.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.5.21|2|1 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.7.27|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.8.4|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.19.23|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.23.3|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.26.2|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.26.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.5.27.22|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.3.20|2|22 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.4.8|2|17 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.5.21|2|25 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.7.27|2|23 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.8.4|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.19.23|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.23.3|2|25 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.26.2|2|1 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.26.10|2|9 +1.3.6.1.4.1.674.10892.1.1100.10.1.6.27.22|2|13 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.3.20|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.4.8|2|3 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.5.21|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.7.27|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.8.4|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.19.23|2|3 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.23.3|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.26.2|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.26.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.7.27.22|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.3.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.4.8|2|17 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.5.21|2|20 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.7.27|2|25 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.8.4|2|6 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.19.23|2|9 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.23.3|2|2 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.26.2|2|25 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.26.10|2|5 +1.3.6.1.4.1.674.10892.1.1100.10.1.8.27.22|2|28 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.4.24|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.5.6|2|5 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.7.31|2|7 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.8.24|2|8 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.10.7|2|10 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.10.27|2|10 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.12.16|2|12 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.12.19|2|12 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.18.24|2|18 +1.3.6.1.4.1.674.10892.1.1100.20.1.1.26.20|2|26 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.4.24|2|24 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.5.6|2|6 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.7.31|2|31 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.8.24|2|24 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.10.7|2|7 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.10.27|2|27 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.12.16|2|16 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.12.19|2|19 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.18.24|2|24 +1.3.6.1.4.1.674.10892.1.1100.20.1.2.26.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.4.24|2|2 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.5.6|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.7.31|2|2 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.8.24|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.10.7|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.10.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.12.16|2|6 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.12.19|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.18.24|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.3.26.20|2|6 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.4.24|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.5.6|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.7.31|2|2 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.8.24|2|6 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.10.7|2|6 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.10.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.12.16|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.12.19|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.18.24|2|2 +1.3.6.1.4.1.674.10892.1.1100.20.1.4.26.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.4.24|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.5.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.7.31|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.8.24|2|2 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.10.7|2|6 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.10.27|2|2 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.12.16|2|3 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.12.19|2|5 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.18.24|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.5.26.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.4.24|2|4 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.5.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.7.31|2|16 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.8.24|2|19 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.10.7|2|16 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.10.27|2|24 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.12.16|2|11 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.12.19|2|11 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.18.24|2|30 +1.3.6.1.4.1.674.10892.1.1100.20.1.6.26.20|2|17 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.4.24|4x|64726976696e67204a61646564206b657074 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.5.6|4x|616374656420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.7.31|4|but +1.3.6.1.4.1.674.10892.1.1100.20.1.7.8.24|4x|6f78656e20627574207468656972207468656972204a61646564204a6164656420717561696e746c79207468656972206b657074 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.10.7|4x|717561696e746c7920746865697220717561696e746c7920627574206b657074 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.10.27|4x|7a6f6d6269657320627574207a6f6d62696573206b657074206163746564206f78656e207468656972207468656972 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.12.16|4x|6b65707420627574206b657074204a61646564206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.12.19|4x|64726976696e67204a6164656420627574206b657074206f78656e207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.18.24|4x|64726976696e6720666f7277617264206275742064726976696e6720717561696e746c79206f78656e204a61646564 +1.3.6.1.4.1.674.10892.1.1100.20.1.7.26.20|4|Jaded +1.3.6.1.4.1.674.10892.1.1100.20.1.8.4.24|4x|6b6570742062757420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.20.1.8.5.6|4x|717561696e746c79206163746564206f78656e20717561696e746c79206f78656e20616374656420717561696e746c79206f78656e207468656972 +1.3.6.1.4.1.674.10892.1.1100.20.1.8.7.31|4x|4a61646564207468656972206b657074206f78656e +1.3.6.1.4.1.674.10892.1.1100.20.1.8.8.24|4x|6b65707420627574207a6f6d62696573204a61646564204a61646564206163746564 +1.3.6.1.4.1.674.10892.1.1100.20.1.8.10.7|4x|6f78656e2064726976696e67204a6164656420616374656420717561696e746c7920666f7277617264204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.20.1.8.10.27|4|forward +1.3.6.1.4.1.674.10892.1.1100.20.1.8.12.16|4x|627574207a6f6d6269657320627574206163746564206163746564 +1.3.6.1.4.1.674.10892.1.1100.20.1.8.12.19|4|forward +1.3.6.1.4.1.674.10892.1.1100.20.1.8.18.24|4x|627574206b65707420616374656420717561696e746c7920666f7277617264207468656972207468656972 +1.3.6.1.4.1.674.10892.1.1100.20.1.8.26.20|4|but +1.3.6.1.4.1.674.10892.1.1100.30.1.1.5.17|2|5 +1.3.6.1.4.1.674.10892.1.1100.30.1.1.5.28|2|5 +1.3.6.1.4.1.674.10892.1.1100.30.1.2.5.17|2|17 +1.3.6.1.4.1.674.10892.1.1100.30.1.2.5.28|2|28 +1.3.6.1.4.1.674.10892.1.1100.30.1.3.5.17|2|2 +1.3.6.1.4.1.674.10892.1.1100.30.1.3.5.28|2|1 +1.3.6.1.4.1.674.10892.1.1100.30.1.4.5.17|2|2 +1.3.6.1.4.1.674.10892.1.1100.30.1.4.5.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.30.1.5.5.17|2|3 +1.3.6.1.4.1.674.10892.1.1100.30.1.5.5.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.30.1.5.31.4|2|1 +1.3.6.1.4.1.674.10892.1.1100.30.1.6.5.17|2|23 +1.3.6.1.4.1.674.10892.1.1100.30.1.6.5.28|2|21 +1.3.6.1.4.1.674.10892.1.1100.30.1.7.5.17|2|4 +1.3.6.1.4.1.674.10892.1.1100.30.1.7.5.28|2|6 +1.3.6.1.4.1.674.10892.1.1100.30.1.8.5.17|4x|7468656972206163746564 +1.3.6.1.4.1.674.10892.1.1100.30.1.8.5.28|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.30.1.9.5.17|2|5 +1.3.6.1.4.1.674.10892.1.1100.30.1.9.5.28|2|6 +1.3.6.1.4.1.674.10892.1.1100.30.1.10.5.17|2|11 +1.3.6.1.4.1.674.10892.1.1100.30.1.10.5.28|2|8 +1.3.6.1.4.1.674.10892.1.1100.30.1.10.31.4|2|6 +1.3.6.1.4.1.674.10892.1.1100.30.1.11.5.17|2|3 +1.3.6.1.4.1.674.10892.1.1100.30.1.11.5.28|2|10 +1.3.6.1.4.1.674.10892.1.1100.30.1.12.5.17|2|11 +1.3.6.1.4.1.674.10892.1.1100.30.1.12.5.28|2|28 +1.3.6.1.4.1.674.10892.1.1100.30.1.13.5.17|2|9 +1.3.6.1.4.1.674.10892.1.1100.30.1.13.5.28|2|19 +1.3.6.1.4.1.674.10892.1.1100.30.1.14.5.17|2|23 +1.3.6.1.4.1.674.10892.1.1100.30.1.14.5.28|2|29 +1.3.6.1.4.1.674.10892.1.1100.30.1.15.5.17|2|21 +1.3.6.1.4.1.674.10892.1.1100.30.1.15.5.28|2|12 +1.3.6.1.4.1.674.10892.1.1100.30.1.16.5.17|4x|7468656972206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.30.1.16.5.28|4x|627574204a61646564 +1.3.6.1.4.1.674.10892.1.1100.30.1.17.5.17|2|18 +1.3.6.1.4.1.674.10892.1.1100.30.1.17.5.28|2|30 +1.3.6.1.4.1.674.10892.1.1100.30.1.18.5.17|2|9 +1.3.6.1.4.1.674.10892.1.1100.30.1.18.5.28|2|21 +1.3.6.1.4.1.674.10892.1.1100.30.1.19.5.17|2|31 +1.3.6.1.4.1.674.10892.1.1100.30.1.19.5.28|2|25 +1.3.6.1.4.1.674.10892.1.1100.30.1.20.5.17|2|26 +1.3.6.1.4.1.674.10892.1.1100.30.1.20.5.28|2|10 +1.3.6.1.4.1.674.10892.1.1100.30.1.21.5.17|2|22 +1.3.6.1.4.1.674.10892.1.1100.30.1.21.5.28|2|18 +1.3.6.1.4.1.674.10892.1.1100.30.1.22.5.17|2|0 +1.3.6.1.4.1.674.10892.1.1100.30.1.22.5.28|2|24 +1.3.6.1.4.1.674.10892.1.1100.30.1.23.5.17|4x|616374656420666f727761726420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.30.1.23.5.28|4x|6163746564207a6f6d62696573206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.30.1.24.5.17|4x|4a6164656420717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.30.1.24.5.28|4x|64726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.30.1.25.5.17|4x|6f78656e206f78656e20666f727761726420627574207a6f6d62696573206b657074206163746564207a6f6d62696573206f78656e +1.3.6.1.4.1.674.10892.1.1100.30.1.25.5.28|4x|7468656972206b657074206f78656e206163746564 +1.3.6.1.4.1.674.10892.1.1100.32.1.1.3.11|2|3 +1.3.6.1.4.1.674.10892.1.1100.32.1.1.18.21|2|18 +1.3.6.1.4.1.674.10892.1.1100.32.1.2.3.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.32.1.2.18.21|2|21 +1.3.6.1.4.1.674.10892.1.1100.32.1.3.3.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.32.1.3.18.21|2|4 +1.3.6.1.4.1.674.10892.1.1100.32.1.4.3.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.32.1.4.18.21|2|4 +1.3.6.1.4.1.674.10892.1.1100.32.1.5.3.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.32.1.5.18.21|2|1 +1.3.6.1.4.1.674.10892.1.1100.32.1.6.3.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.32.1.6.18.21|2|2 +1.3.6.1.4.1.674.10892.1.1100.32.1.7.3.11|4x|64726976696e67207a6f6d62696573206f78656e2064726976696e67206b657074204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.32.1.7.18.21|4x|6b657074206b657074 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.3.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.8.7|2|8 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.11.15|2|11 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.11.27|2|11 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.12.8|2|12 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.12.18|2|12 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.13.1|2|13 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.13.11|2|13 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.17.1|2|17 +1.3.6.1.4.1.674.10892.1.1100.40.1.1.25.18|2|25 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.3.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.8.7|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.11.15|2|15 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.11.27|2|27 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.12.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.12.18|2|18 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.13.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.13.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.17.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.2.25.18|2|18 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.3.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.8.7|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.11.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.11.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.12.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.12.18|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.13.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.13.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.17.1|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.3.25.18|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.3.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.8.7|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.11.15|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.11.27|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.12.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.12.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.13.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.13.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.17.1|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.4.25.18|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.3.29|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.8.7|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.11.15|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.11.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.12.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.12.18|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.13.1|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.13.11|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.17.1|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.5.25.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.3.29|2|18 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.8.7|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.11.15|2|21 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.11.27|2|16 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.12.8|2|19 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.12.18|2|9 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.13.1|2|28 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.13.11|2|12 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.17.1|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.6.25.18|2|16 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.3.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.8.7|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.11.15|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.11.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.12.8|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.12.18|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.13.1|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.13.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.17.1|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.7.25.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.3.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.8.7|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.11.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.11.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.12.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.12.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.13.1|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.13.11|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.17.1|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.8.25.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.3.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.8.7|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.11.15|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.11.27|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.12.8|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.12.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.13.1|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.13.11|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.17.1|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.9.25.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.3.29|4x|4a616465642064726976696e672064726976696e6720627574 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.8.7|4x|7468656972206f78656e20627574207a6f6d62696573206b657074204a61646564 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.11.15|4x|61637465642064726976696e67207468656972 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.11.27|4x|7a6f6d6269657320717561696e746c7920717561696e746c79206f78656e +1.3.6.1.4.1.674.10892.1.1100.40.1.10.12.8|4x|6f78656e20616374656420717561696e746c79204a61646564 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.12.18|4x|4a61646564207468656972206f78656e206f78656e20627574207a6f6d62696573204a61646564206163746564206f78656e +1.3.6.1.4.1.674.10892.1.1100.40.1.10.13.1|4x|627574204a61646564 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.13.11|4x|7a6f6d6269657320717561696e746c79206f78656e207a6f6d6269657320627574206b657074206f78656e20627574 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.17.1|4x|666f727761726420746865697220627574 +1.3.6.1.4.1.674.10892.1.1100.40.1.10.25.18|4x|6f78656e20666f727761726420666f7277617264206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.3.29|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.8.7|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.11.15|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.11.27|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.12.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.12.18|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.13.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.13.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.17.1|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.11.25.18|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.3.29|2|13 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.8.7|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.11.15|2|10 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.11.27|2|8 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.12.8|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.12.18|2|20 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.13.1|2|15 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.13.11|2|20 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.17.1|2|21 +1.3.6.1.4.1.674.10892.1.1100.40.1.12.25.18|2|22 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.3.29|2|27 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.8.7|2|15 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.11.15|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.11.27|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.12.8|2|24 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.12.18|2|19 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.13.1|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.13.11|2|28 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.17.1|2|26 +1.3.6.1.4.1.674.10892.1.1100.40.1.13.25.18|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.3.29|2|25 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.8.7|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.11.15|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.11.27|2|18 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.12.8|2|23 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.12.18|2|24 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.13.1|2|8 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.13.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.17.1|2|13 +1.3.6.1.4.1.674.10892.1.1100.40.1.14.25.18|2|16 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.3.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.8.7|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.11.15|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.11.27|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.12.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.12.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.13.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.13.11|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.17.1|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.15.25.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.3.29|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.8.7|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.11.15|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.11.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.12.8|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.12.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.13.1|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.13.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.17.1|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.16.25.18|2|0 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.3.29|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.8.7|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.11.15|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.11.27|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.12.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.12.18|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.13.1|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.13.11|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.17.1|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.17.25.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.3.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.8.7|2|9 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.11.15|2|13 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.11.27|2|8 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.12.8|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.12.18|2|12 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.13.1|2|2 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.13.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.17.1|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.18.25.18|2|11 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.3.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.8.7|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.11.15|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.11.27|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.12.8|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.12.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.13.1|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.13.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.17.1|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.19.25.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.3.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.8.7|2|1 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.11.15|2|3 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.11.27|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.12.8|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.12.18|2|5 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.13.1|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.13.11|2|6 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.17.1|2|7 +1.3.6.1.4.1.674.10892.1.1100.40.1.20.25.18|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.1.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.1.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.4.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.6.9|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.14.8|2|14 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.16.14|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.19.11|2|19 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.26.10|2|26 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.29.10|2|29 +1.3.6.1.4.1.674.10892.1.1100.50.1.1.29.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.1.6|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.1.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.4.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.6.9|2|9 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.14.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.16.14|2|14 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.19.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.26.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.29.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.2.29.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.1.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.1.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.4.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.6.9|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.14.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.16.14|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.19.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.26.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.29.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.3.29.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.1.6|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.1.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.4.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.6.9|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.14.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.16.14|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.19.11|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.26.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.29.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.4.29.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.1.6|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.1.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.4.20|2|3 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.6.9|2|3 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.14.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.16.14|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.19.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.26.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.29.10|2|5 +1.3.6.1.4.1.674.10892.1.1100.50.1.5.29.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.1.6|2|9 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.1.10|2|28 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.4.20|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.6.9|2|7 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.14.8|2|7 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.16.14|2|22 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.19.11|2|24 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.26.10|2|7 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.29.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.6.29.29|2|18 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.1.6|2|20 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.1.10|2|12 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.4.20|2|15 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.6.9|2|25 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.14.8|2|24 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.16.14|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.19.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.26.10|2|13 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.29.10|2|24 +1.3.6.1.4.1.674.10892.1.1100.50.1.7.29.29|2|18 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.1.6|4x|717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.1.10|4x|6b657074206b65707420666f727761726420627574206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.4.20|4x|6f78656e204a616465642062757420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.6.9|4x|717561696e746c792064726976696e6720616374656420717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.14.8|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.16.14|4x|666f727761726420627574206f78656e2064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.19.11|4x|666f7277617264206b657074207a6f6d626965732064726976696e6720627574206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.8.26.10|4x|717561696e746c7920616374656420746865697220666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.29.10|4x|666f727761726420717561696e746c792064726976696e6720616374656420627574207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.8.29.29|4x|666f7277617264206f78656e20717561696e746c79206163746564207a6f6d6269657320627574207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.1.6|2|18 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.1.10|2|14 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.4.20|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.6.9|2|17 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.14.8|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.16.14|2|11 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.19.11|2|21 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.26.10|2|15 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.29.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.50.1.9.29.29|2|9 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.1.6|4x|666f7277617264206163746564206b65707420717561696e746c7920717561696e746c7920717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.1.10|4x|64726976696e672064726976696e672064726976696e6720717561696e746c792064726976696e67206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.10.4.20|4x|64726976696e672064726976696e67206f78656e2061637465642061637465642064726976696e67206f78656e206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.10.6.9|4x|64726976696e672061637465642064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.14.8|4x|62757420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.16.14|4x|616374656420616374656420717561696e746c79207a6f6d6269657320717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.19.11|4x|717561696e746c79206b6570742064726976696e6720746865697220627574206f78656e207468656972207468656972206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.10.26.10|4x|6275742062757420627574207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.29.10|4x|4a61646564206f78656e20746865697220717561696e746c79206f78656e20746865697220666f7277617264206b657074204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.10.29.29|4x|7a6f6d626965732064726976696e672061637465642064726976696e6720627574206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.11.1.6|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.1.10|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.4.20|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.6.9|2|4 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.14.8|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.16.14|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.19.11|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.26.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.29.10|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.11.29.29|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.1.6|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.1.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.4.20|2|13 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.6.9|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.14.8|2|13 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.16.14|2|15 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.19.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.26.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.29.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.12.29.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.1.6|2|19 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.1.10|2|22 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.4.20|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.6.9|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.14.8|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.16.14|2|28 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.19.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.26.10|2|30 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.29.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.13.29.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.1.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.1.10|2|26 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.4.20|2|21 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.6.9|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.14.8|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.16.14|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.19.11|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.26.10|2|20 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.29.10|2|23 +1.3.6.1.4.1.674.10892.1.1100.50.1.14.29.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.1.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.1.10|2|11 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.4.20|2|11 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.6.9|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.14.8|2|23 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.16.14|2|26 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.19.11|2|31 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.26.10|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.29.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.15.29.29|2|18 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.1.6|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.1.10|2|21 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.4.20|2|28 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.6.9|2|22 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.14.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.16.14|2|5 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.19.11|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.26.10|2|21 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.29.10|2|5 +1.3.6.1.4.1.674.10892.1.1100.50.1.16.29.29|2|5 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.1.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.1.10|2|30 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.4.20|2|22 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.6.9|2|11 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.14.8|2|31 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.16.14|2|28 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.19.11|2|12 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.26.10|2|3 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.29.10|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.17.29.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.1.6|2|29 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.1.10|2|18 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.4.20|2|25 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.6.9|2|22 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.14.8|2|10 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.16.14|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.19.11|2|13 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.26.10|2|24 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.29.10|2|7 +1.3.6.1.4.1.674.10892.1.1100.50.1.18.29.29|2|17 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.1.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.1.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.4.20|2|12 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.6.9|2|21 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.14.8|2|26 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.16.14|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.19.11|2|7 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.26.10|2|27 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.29.10|2|26 +1.3.6.1.4.1.674.10892.1.1100.50.1.19.29.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.1.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.1.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.4.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.6.9|2|16 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.14.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.16.14|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.19.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.26.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.29.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.20.29.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.1.6|4x|717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.1.10|4x|4a6164656420666f7277617264207a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.4.20|4|their +1.3.6.1.4.1.674.10892.1.1100.50.1.21.6.9|4x|666f7277617264207468656972206b657074 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.14.8|4x|717561696e746c79206f78656e20666f7277617264206f78656e207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.16.14|4x|62757420666f7277617264206b657074206b6570742064726976696e67206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.19.11|4x|64726976696e67206f78656e206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.26.10|4|kept +1.3.6.1.4.1.674.10892.1.1100.50.1.21.29.10|4x|6f78656e206163746564206b657074207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.21.29.29|4x|64726976696e67206b65707420717561696e746c792064726976696e67206b657074204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.1.6|4|forward +1.3.6.1.4.1.674.10892.1.1100.50.1.22.1.10|4|acted +1.3.6.1.4.1.674.10892.1.1100.50.1.22.4.20|4x|61637465642064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.6.9|4x|666f727761726420627574204a6164656420627574204a6164656420666f727761726420666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.14.8|4x|627574206b657074 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.16.14|4x|627574206f78656e20666f7277617264206b657074207a6f6d62696573207a6f6d6269657320627574206b657074 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.19.11|4x|62757420666f7277617264204a6164656420627574204a616465642061637465642062757420666f727761726420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.26.10|4x|6f78656e206f78656e20627574204a61646564207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.29.10|4x|4a61646564207a6f6d6269657320616374656420746865697220666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.50.1.22.29.29|4x|666f7277617264206f78656e20717561696e746c79204a616465642064726976696e67206b65707420666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.1.6|4x|666f7277617264207a6f6d62696573206163746564204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.1.10|4x|6b657074206f78656e207468656972207468656972206f78656e206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.23.4.20|4x|7468656972206b65707420717561696e746c792062757420666f7277617264206f78656e20627574206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.6.9|4x|64726976696e67206f78656e20666f727761726420666f72776172642062757420717561696e746c79206f78656e2064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.14.8|4x|616374656420717561696e746c792062757420666f7277617264206b657074207a6f6d6269657320666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.16.14|4x|6275742064726976696e672064726976696e6720717561696e746c7920627574204a6164656420666f7277617264206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.19.11|4x|6b657074204a61646564206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.23.26.10|4x|64726976696e67207a6f6d626965732064726976696e67206f78656e207468656972207a6f6d62696573204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.29.10|4x|746865697220717561696e746c79207a6f6d6269657320717561696e746c7920627574207a6f6d62696573206163746564204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.23.29.29|4x|4a61646564204a61646564207468656972207468656972206b657074206163746564206f78656e207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.1.6|4x|62757420717561696e746c79207a6f6d626965732062757420616374656420627574 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.1.10|4x|64726976696e67206b65707420666f7277617264206b657074206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.4.20|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.50.1.24.6.9|4|their +1.3.6.1.4.1.674.10892.1.1100.50.1.24.14.8|4x|4a6164656420746865697220717561696e746c79206b65707420746865697220717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.16.14|4x|627574206f78656e2064726976696e672064726976696e67204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.19.11|4x|64726976696e6720627574 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.26.10|4x|627574206f78656e +1.3.6.1.4.1.674.10892.1.1100.50.1.24.29.10|4x|666f7277617264206b65707420717561696e746c792064726976696e6720627574207468656972204a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.24.29.29|4x|6b65707420616374656420666f72776172642064726976696e67206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.1.6|4x|717561696e746c7920666f7277617264204a61646564206163746564206b65707420627574206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.1.10|4x|64726976696e67206b657074206b65707420717561696e746c7920627574206b657074206b657074206f78656e206163746564 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.4.20|4x|6f78656e206b657074206163746564207468656972207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.6.9|4x|7a6f6d62696573204a616465642064726976696e67207468656972206f78656e207a6f6d62696573207468656972204a61646564 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.14.8|4x|61637465642074686569722064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.16.14|4x|746865697220717561696e746c79207a6f6d6269657320666f7277617264207468656972206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.19.11|4|acted +1.3.6.1.4.1.674.10892.1.1100.50.1.25.26.10|4x|717561696e746c79204a6164656420627574207a6f6d6269657320627574207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.25.29.10|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.50.1.25.29.29|4x|7a6f6d62696573206b657074206f78656e207a6f6d6269657320627574207468656972 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.1.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.1.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.4.20|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.6.9|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.14.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.16.14|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.19.11|2|8 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.26.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.29.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.50.1.26.29.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.1.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.1.10|2|12 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.4.20|2|26 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.6.9|2|24 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.14.8|2|3 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.16.14|2|14 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.19.11|2|19 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.26.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.29.10|2|29 +1.3.6.1.4.1.674.10892.1.1100.50.1.27.29.29|2|20 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.1.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.5.29|2|5 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.6.11|2|6 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.9.10|2|9 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.9.16|2|9 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.12.18|2|12 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.12.23|2|12 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.16.27|2|16 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.22.15|2|22 +1.3.6.1.4.1.674.10892.1.1100.60.1.1.31.28|2|31 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.1.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.5.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.6.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.9.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.9.16|2|16 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.12.18|2|18 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.12.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.16.27|2|27 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.22.15|2|15 +1.3.6.1.4.1.674.10892.1.1100.60.1.2.31.28|2|28 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.1.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.5.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.6.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.9.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.9.16|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.12.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.12.23|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.16.27|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.22.15|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.3.31.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.1.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.5.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.6.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.9.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.9.16|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.12.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.12.23|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.16.27|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.22.15|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.4.31.28|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.1.23|2|6 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.5.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.6.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.9.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.9.16|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.12.18|2|5 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.12.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.16.27|2|4 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.22.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.5.31.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.1.23|2|8 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.5.29|2|14 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.6.11|2|21 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.9.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.9.16|2|17 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.12.18|2|22 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.12.23|2|17 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.16.27|2|5 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.22.15|2|20 +1.3.6.1.4.1.674.10892.1.1100.60.1.6.31.28|2|23 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.1.23|2|11 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.5.29|2|25 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.6.11|2|29 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.9.10|2|23 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.9.16|2|27 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.12.18|2|27 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.12.23|2|15 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.16.27|2|26 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.22.15|2|3 +1.3.6.1.4.1.674.10892.1.1100.60.1.7.31.28|2|5 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.1.23|2|2 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.5.29|2|27 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.6.11|2|15 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.9.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.9.16|2|0 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.12.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.12.23|2|19 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.16.27|2|25 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.22.15|2|8 +1.3.6.1.4.1.674.10892.1.1100.60.1.8.31.28|2|23 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.1.23|2|17 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.5.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.6.11|2|0 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.9.10|2|14 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.9.16|2|6 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.12.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.12.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.16.27|2|15 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.22.15|2|27 +1.3.6.1.4.1.674.10892.1.1100.60.1.9.31.28|2|19 +1.3.6.1.4.1.674.10892.1.1100.60.1.10.1.23|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.10.5.29|4x|6b65707420627574 +1.3.6.1.4.1.674.10892.1.1100.60.1.10.6.11|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.10.9.10|4x|6b65707420627574 +1.3.6.1.4.1.674.10892.1.1100.60.1.10.9.16|4x|6b65707420627574 +1.3.6.1.4.1.674.10892.1.1100.60.1.10.12.18|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.10.12.23|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.10.16.27|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.10.22.15|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.10.31.28|4x|627574206f78656e +1.3.6.1.4.1.674.10892.1.1100.60.1.11.1.23|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.5.29|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.6.11|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.9.10|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.9.16|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.12.18|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.12.23|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.16.27|4x|627574206f78656e +1.3.6.1.4.1.674.10892.1.1100.60.1.11.22.15|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.60.1.11.31.28|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.70.1.1.7.27|2|7 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.10.29|2|10 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.12.18|2|12 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.17.6|2|17 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.23.22|2|23 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.23.28|2|23 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.27.29|2|27 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.27.30|2|27 +1.3.6.1.4.1.674.10892.1.1100.70.1.1.31.21|2|31 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.7.27|2|27 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.10.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.12.18|2|18 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.17.6|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.23.22|2|22 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.23.28|2|28 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.27.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.27.30|2|30 +1.3.6.1.4.1.674.10892.1.1100.70.1.2.31.21|2|21 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.7.27|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.10.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.12.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.17.6|2|4 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.23.22|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.23.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.27.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.27.30|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.3.31.21|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.7.27|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.10.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.12.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.17.6|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.23.22|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.23.28|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.27.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.27.30|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.4.31.21|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.7.27|2|3 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.10.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.12.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.17.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.23.22|2|5 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.23.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.27.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.27.30|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.5.31.21|2|3 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.7.27|2|22 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.10.29|2|13 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.12.18|2|25 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.17.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.23.22|2|28 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.23.28|2|31 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.27.29|2|9 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.27.30|2|31 +1.3.6.1.4.1.674.10892.1.1100.70.1.6.31.21|2|3 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.7.27|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.10.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.12.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.17.6|2|4 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.23.22|2|1 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.23.28|2|6 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.27.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.27.30|2|2 +1.3.6.1.4.1.674.10892.1.1100.70.1.7.31.21|2|5 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.7.27|4x|64726976696e672064726976696e67206f78656e206b657074207468656972206f78656e207468656972206163746564 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.10.29|4x|6f78656e206163746564 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.12.18|4x|6b657074207468656972 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.17.6|4x|7468656972206b6570742064726976696e6720746865697220627574206b65707420616374656420616374656420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.23.22|4x|64726976696e67206b657074204a61646564207a6f6d6269657320627574204a6164656420666f7277617264204a61646564206b657074 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.23.28|4x|6f78656e206f78656e +1.3.6.1.4.1.674.10892.1.1100.70.1.8.27.29|4x|4a61646564206f78656e2062757420717561696e746c79206f78656e20666f7277617264206b657074206163746564206b657074 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.27.30|4x|6f78656e207468656972204a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.1100.70.1.8.31.21|4x|6b6570742064726976696e672064726976696e6720616374656420717561696e746c79206f78656e +1.3.6.1.4.1.674.10892.1.1100.80.1.1.2.24|2|2 +1.3.6.1.4.1.674.10892.1.1100.80.1.1.7.10|2|7 +1.3.6.1.4.1.674.10892.1.1100.80.1.2.2.24|2|24 +1.3.6.1.4.1.674.10892.1.1100.80.1.2.7.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.80.1.3.2.24|2|2 +1.3.6.1.4.1.674.10892.1.1100.80.1.3.7.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.80.1.4.2.24|2|2 +1.3.6.1.4.1.674.10892.1.1100.80.1.4.7.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.80.1.5.2.24|2|6 +1.3.6.1.4.1.674.10892.1.1100.80.1.5.7.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.80.1.6.2.24|2|11 +1.3.6.1.4.1.674.10892.1.1100.80.1.6.7.10|2| +1.3.6.1.4.1.674.10892.1.1100.80.1.7.2.24|2|4 +1.3.6.1.4.1.674.10892.1.1100.80.1.7.7.10|2|30 +1.3.6.1.4.1.674.10892.1.1100.80.1.8.2.24|4x|666f7277617264207a6f6d626965732064726976696e6720666f727761726420666f7277617264206f78656e20666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.80.1.8.7.10|4x|4a61646564206163746564206b65707420666f7277617264207a6f6d62696573206b657074207468656972 +1.3.6.1.4.1.674.10892.1.1100.80.1.9.2.24|4x|64726976696e67206f78656e206f78656e20627574 +1.3.6.1.4.1.674.10892.1.1100.80.1.9.7.10|4x|6b65707420627574204a61646564206f78656e20717561696e746c79204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.80.1.10.2.24|2|11 +1.3.6.1.4.1.674.10892.1.1100.80.1.10.7.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.80.1.11.2.24|2|1 +1.3.6.1.4.1.674.10892.1.1100.80.1.11.7.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.1.30|2|1 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.9.20|2|9 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.13.8|2|13 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.14.29|2|14 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.22.8|2|22 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.23.9|2|23 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.23.13|2|23 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.27.22|2|27 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.27.29|2|27 +1.3.6.1.4.1.674.10892.1.1100.82.1.1.29.13|2|29 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.1.30|2|30 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.9.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.13.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.14.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.22.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.23.9|2|9 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.23.13|2|13 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.27.22|2|22 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.27.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.82.1.2.29.13|2|13 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.1.30|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.9.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.13.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.14.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.22.8|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.23.9|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.23.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.27.22|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.27.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.3.29.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.1.30|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.9.20|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.13.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.14.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.22.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.23.9|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.23.13|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.27.22|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.27.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.4.29.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.1.30|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.9.20|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.13.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.14.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.22.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.23.9|2|5 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.23.13|2|5 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.27.22|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.27.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.82.1.5.29.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.1.30|2|11 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.9.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.13.8|2|12 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.14.29|2|9 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.22.8|2|23 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.23.9|2|29 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.23.13|2|7 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.27.22|2|3 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.27.29|2|27 +1.3.6.1.4.1.674.10892.1.1100.82.1.6.29.13|2|27 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.1.30|2|29 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.9.20|2|18 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.13.8|2|20 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.14.29|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.22.8|2|9 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.23.9|2|21 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.23.13|2|14 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.27.22|2|9 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.27.29|2|8 +1.3.6.1.4.1.674.10892.1.1100.82.1.7.29.13|2|3 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.1.30|2|28 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.9.20|2|7 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.13.8|2|21 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.14.29|2|10 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.22.8|2|6 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.23.9|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.23.13|2|7 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.27.22|2|11 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.27.29|2|24 +1.3.6.1.4.1.674.10892.1.1100.82.1.8.29.13|2|25 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.1.30|2|24 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.9.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.13.8|2|25 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.14.29|2|31 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.22.8|2|21 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.23.9|2|24 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.23.13|2|3 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.27.22|2|5 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.27.29|2|3 +1.3.6.1.4.1.674.10892.1.1100.82.1.9.29.13|2|25 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.1.30|4x|4a61646564207468656972204a6164656420666f727761726420666f72776172642061637465642064726976696e67206163746564 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.9.20|4x|64726976696e6720717561696e746c792062757420717561696e746c79207468656972207468656972206f78656e +1.3.6.1.4.1.674.10892.1.1100.82.1.10.13.8|4x|717561696e746c79207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.14.29|4x|6f78656e206163746564206b657074207a6f6d62696573204a6164656420717561696e746c7920666f7277617264207468656972 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.22.8|4x|4a61646564204a61646564 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.23.9|4x|7a6f6d6269657320666f7277617264207a6f6d6269657320717561696e746c79204a61646564204a6164656420717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.23.13|4x|7a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.27.22|4x|6275742064726976696e6720717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.27.29|4x|627574207468656972 +1.3.6.1.4.1.674.10892.1.1100.82.1.10.29.13|4x|627574207a6f6d62696573206f78656e204a61646564206f78656e20666f7277617264206163746564206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.2.20|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.5.29|2|5 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.5.31|2|5 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.11.16|2|11 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.13.10|2|13 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.14.18|2|14 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.22.28|2|22 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.23.10|2|23 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.27.8|2|27 +1.3.6.1.4.1.674.10892.1.1100.90.1.1.29.5|2|29 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.2.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.5.29|2|29 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.5.31|2|31 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.11.16|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.13.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.14.18|2|18 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.22.28|2|28 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.23.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.27.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.2.29.5|2|5 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.2.20|2|3 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.5.29|2|5 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.5.31|2|6 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.11.16|2|5 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.13.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.14.18|2|3 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.22.28|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.23.10|2|3 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.27.8|2|3 +1.3.6.1.4.1.674.10892.1.1100.90.1.3.29.5|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.2.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.5.29|2|11 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.5.31|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.11.16|2|12 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.13.10|2|12 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.14.18|2|12 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.22.28|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.23.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.27.8|2|12 +1.3.6.1.4.1.674.10892.1.1100.90.1.4.29.5|2|12 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.2.20|4x|6f78656e206b657074 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.5.29|4x|4a6164656420717561696e746c79207a6f6d62696573207468656972206f78656e204a61646564206f78656e +1.3.6.1.4.1.674.10892.1.1100.90.1.5.5.31|4x|616374656420666f7277617264206f78656e206b65707420717561696e746c7920717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.11.16|4x|627574204a61646564207a6f6d62696573206163746564204a6164656420717561696e746c792064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.13.10|4x|717561696e746c792062757420717561696e746c7920666f7277617264206f78656e204a61646564204a616465642061637465642064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.14.18|4x|6f78656e207a6f6d62696573204a61646564204a61646564206b657074206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.22.28|4x|64726976696e6720666f727761726420746865697220666f7277617264206163746564207a6f6d6269657320717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.23.10|4x|64726976696e6720746865697220666f727761726420627574 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.27.8|4x|746865697220717561696e746c79206b657074207468656972207468656972206b6570742064726976696e67207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.5.29.5|4x|7468656972206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.2.20|4x|717561696e746c7920717561696e746c79207468656972206b65707420627574 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.5.29|4x|6b65707420717561696e746c7920616374656420717561696e746c79204a61646564207468656972 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.5.31|4x|666f7277617264206f78656e206b657074206f78656e20627574206f78656e206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.11.16|4x|74686569722062757420666f7277617264204a61646564207a6f6d62696573207468656972206f78656e20666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.13.10|4x|6b65707420717561696e746c792061637465642064726976696e67204a61646564204a61646564204a6164656420717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.14.18|4x|7a6f6d62696573206f78656e +1.3.6.1.4.1.674.10892.1.1100.90.1.6.22.28|4x|4a61646564206163746564206f78656e204a61646564204a6164656420666f7277617264204a61646564206f78656e +1.3.6.1.4.1.674.10892.1.1100.90.1.6.23.10|4x|64726976696e6720717561696e746c79206275742062757420627574206b657074 +1.3.6.1.4.1.674.10892.1.1100.90.1.6.27.8|4x|666f727761726420666f7277617264206f78656e +1.3.6.1.4.1.674.10892.1.1100.90.1.6.29.5|4|their +1.3.6.1.4.1.674.10892.1.1100.90.1.7.2.20|4x|666f7277617264206275742064726976696e67204a61646564206f78656e20717561696e746c7920717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.7.5.29|4x|6b65707420627574206f78656e206b657074206163746564 +1.3.6.1.4.1.674.10892.1.1100.90.1.7.5.31|4|Jaded +1.3.6.1.4.1.674.10892.1.1100.90.1.7.11.16|4x|7468656972206f78656e2064726976696e67204a61646564 +1.3.6.1.4.1.674.10892.1.1100.90.1.7.13.10|4x|7468656972206f78656e +1.3.6.1.4.1.674.10892.1.1100.90.1.7.14.18|4x|6163746564206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.90.1.7.22.28|4x|7a6f6d6269657320616374656420627574206b657074206f78656e207468656972206163746564 +1.3.6.1.4.1.674.10892.1.1100.90.1.7.23.10|4|acted +1.3.6.1.4.1.674.10892.1.1100.90.1.7.27.8|4x|7a6f6d6269657320627574207468656972206163746564206b65707420717561696e746c79206f78656e +1.3.6.1.4.1.674.10892.1.1100.90.1.7.29.5|4|acted +1.3.6.1.4.1.674.10892.1.1100.90.1.8.2.20|4x|717561696e746c792064726976696e67204a61646564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.5.29|4x|64726976696e6720746865697220717561696e746c79206163746564207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.5.31|4x|7468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.11.16|4|driving +1.3.6.1.4.1.674.10892.1.1100.90.1.8.13.10|4x|746865697220666f727761726420666f7277617264204a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.14.18|4x|746865697220717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.22.28|4x|7a6f6d6269657320717561696e746c7920616374656420717561696e746c792064726976696e6720627574 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.23.10|4x|6163746564206275742074686569722064726976696e6720666f727761726420627574 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.27.8|4x|6b657074204a616465642062757420717561696e746c79204a616465642062757420717561696e746c7920627574207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.8.29.5|4x|7a6f6d6269657320746865697220666f7277617264206f78656e2064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.2.20|4x|64726976696e67206163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.5.29|4|their +1.3.6.1.4.1.674.10892.1.1100.90.1.9.5.31|4x|6f78656e206163746564206b65707420717561696e746c79206f78656e204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.11.16|4x|6163746564206f78656e206163746564207468656972206b657074206b65707420666f7277617264206b657074 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.13.10|4x|7a6f6d626965732064726976696e6720717561696e746c79206f78656e20666f72776172642074686569722064726976696e67207468656972 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.14.18|4x|64726976696e672064726976696e6720616374656420666f7277617264206163746564207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.22.28|4x|666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.23.10|4x|74686569722064726976696e67206f78656e207468656972 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.27.8|4x|6f78656e207468656972206163746564207a6f6d626965732064726976696e67206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.9.29.5|4x|7a6f6d62696573206163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.2.20|4x|717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.5.29|4x|6f78656e206f78656e206b65707420616374656420717561696e746c79 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.5.31|4x|4a6164656420666f7277617264206f78656e20627574204a61646564206f78656e206f78656e206163746564 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.11.16|4x|6275742062757420717561696e746c79206163746564 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.13.10|4x|6163746564207a6f6d62696573207468656972206b65707420666f727761726420717561696e746c79204a61646564 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.14.18|4|forward +1.3.6.1.4.1.674.10892.1.1100.90.1.10.22.28|4x|4a616465642064726976696e6720666f727761726420627574 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.23.10|4|acted +1.3.6.1.4.1.674.10892.1.1100.90.1.10.27.8|4x|6b65707420666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.90.1.10.29.5|4|but +1.3.6.1.4.1.674.10892.1.1100.90.1.11.2.20|64x|85f6a05e +1.3.6.1.4.1.674.10892.1.1100.90.1.11.5.29|64x|9b24b7c1 +1.3.6.1.4.1.674.10892.1.1100.90.1.11.5.31|64x|06b6dd9f +1.3.6.1.4.1.674.10892.1.1100.90.1.11.11.16|64x|74e47488 +1.3.6.1.4.1.674.10892.1.1100.90.1.11.13.10|64x|2d03f39b +1.3.6.1.4.1.674.10892.1.1100.90.1.11.14.18|64x|c73fe9bd +1.3.6.1.4.1.674.10892.1.1100.90.1.11.22.28|64x|3e944c20 +1.3.6.1.4.1.674.10892.1.1100.90.1.11.23.10|64x|dd469461 +1.3.6.1.4.1.674.10892.1.1100.90.1.11.27.8|64x|bff6d3c5 +1.3.6.1.4.1.674.10892.1.1100.90.1.11.29.5|64x|42610167 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.2.20|64x|573a73c3 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.5.29|64x|aaa560f9 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.5.31|64x|1f1395be +1.3.6.1.4.1.674.10892.1.1100.90.1.12.11.16|64x|69ed21b5 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.13.10|64x|810dc7d2 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.14.18|64x|f6832024 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.22.28|64x|493c8253 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.23.10|64x|1ba3a6c2 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.27.8|64x|3bf350c6 +1.3.6.1.4.1.674.10892.1.1100.90.1.12.29.5|64x|f4db8f30 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.2.20|64x|63167384 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.5.29|64x|ed9f4617 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.5.31|64x|69accc18 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.11.16|64x|6b1a6bb3 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.13.10|64x|20fb07a2 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.14.18|64x|c0dc0432 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.22.28|64x|07c2cb42 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.23.10|64x|a9d42443 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.27.8|64x|be92b504 +1.3.6.1.4.1.674.10892.1.1100.90.1.13.29.5|64x|f7d79fd8 +1.3.6.1.4.1.674.10892.1.1100.90.1.14.2.20|64x|b45d7d92 +1.3.6.1.4.1.674.10892.1.1100.90.1.14.5.29|64x|ecd178ae +1.3.6.1.4.1.674.10892.1.1100.90.1.14.5.31|64x|2808b770 +1.3.6.1.4.1.674.10892.1.1100.90.1.14.11.16|64x|ff9098dd +1.3.6.1.4.1.674.10892.1.1100.90.1.14.13.10|64x|b3ac9fed +1.3.6.1.4.1.674.10892.1.1100.90.1.14.14.18|64x|f164ac6b +1.3.6.1.4.1.674.10892.1.1100.90.1.14.22.28|64x|1d96bc8d +1.3.6.1.4.1.674.10892.1.1100.90.1.14.23.10|64x|6cdf4842 +1.3.6.1.4.1.674.10892.1.1100.90.1.14.27.8|64x|48d2370a +1.3.6.1.4.1.674.10892.1.1100.90.1.14.29.5|64x|323cfaf8 +1.3.6.1.4.1.674.10892.1.1100.90.1.15.2.20|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.5.29|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.5.31|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.11.16|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.13.10|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.14.18|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.22.28|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.23.10|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.27.8|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.15.29.5|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.2.20|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.5.29|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.5.31|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.11.16|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.13.10|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.14.18|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.22.28|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.23.10|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.27.8|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.16.29.5|4|zombie +1.3.6.1.4.1.674.10892.1.1100.90.1.17.2.20|2|22 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.5.29|2|14 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.5.31|2|30 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.11.16|2|7 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.13.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.14.18|2|9 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.22.28|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.23.10|2|19 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.27.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.17.29.5|2|26 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.2.20|2|22 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.5.29|2|23 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.5.31|2|15 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.11.16|2|7 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.13.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.14.18|2|10 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.22.28|2|19 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.23.10|2|30 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.27.8|2|23 +1.3.6.1.4.1.674.10892.1.1100.90.1.18.29.5|2|7 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.2.20|2|11 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.5.29|2|11 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.5.31|2|21 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.11.16|2|11 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.13.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.14.18|2|19 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.22.28|2|26 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.23.10|2|26 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.27.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.19.29.5|2|18 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.2.20|2|26 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.5.29|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.5.31|2|25 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.11.16|2|30 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.13.10|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.14.18|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.22.28|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.23.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.27.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.20.29.5|2|30 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.2.20|2|7 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.5.29|2|18 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.5.31|2|6 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.11.16|2|6 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.13.10|2|14 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.14.18|2|15 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.22.28|2|14 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.23.10|2|20 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.27.8|2|13 +1.3.6.1.4.1.674.10892.1.1100.90.1.21.29.5|2|21 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.2.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.5.29|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.5.31|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.11.16|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.13.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.14.18|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.22.28|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.23.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.27.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.22.29.5|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.2.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.5.29|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.5.31|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.11.16|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.13.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.14.18|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.22.28|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.23.10|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.27.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.23.29.5|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.2.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.5.29|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.5.31|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.11.16|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.13.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.14.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.22.28|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.23.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.27.8|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.24.29.5|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.2.20|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.5.29|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.5.31|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.11.16|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.13.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.14.18|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.22.28|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.23.10|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.27.8|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.25.29.5|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.2.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.5.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.5.31|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.11.16|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.13.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.14.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.22.28|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.23.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.27.8|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.26.29.5|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.2.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.5.29|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.5.31|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.11.16|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.13.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.14.18|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.22.28|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.23.10|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.27.8|2|16 +1.3.6.1.4.1.674.10892.1.1100.90.1.27.29.5|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.2.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.5.29|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.5.31|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.11.16|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.13.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.14.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.22.28|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.23.10|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.27.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.28.29.5|2|0 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.2.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.5.29|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.5.31|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.11.16|2|2 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.13.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.14.18|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.22.28|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.23.10|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.27.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.90.1.29.29.5|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.1.13|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.7.26|2|7 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.11.12|2|11 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.11.20|2|11 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.17.23|2|17 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.19.3|2|19 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.20.10|2|20 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.24.23|2|24 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.27.7|2|27 +1.3.6.1.4.1.674.10892.1.1100.100.1.1.28.19|2|28 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.1.13|2|13 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.7.26|2|26 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.11.12|2|12 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.11.20|2|20 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.17.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.19.3|2|3 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.20.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.24.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.27.7|2|7 +1.3.6.1.4.1.674.10892.1.1100.100.1.2.28.19|2|19 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.1.13|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.7.26|2|2 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.11.12|2|4 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.11.20|2|4 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.17.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.19.3|2|2 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.20.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.24.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.27.7|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.3.28.19|2|4 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.1.13|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.7.26|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.11.12|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.11.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.17.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.19.3|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.20.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.24.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.27.7|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.4.28.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.1.13|2|0 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.7.26|2|0 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.11.12|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.11.20|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.17.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.19.3|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.20.10|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.24.23|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.27.7|2|0 +1.3.6.1.4.1.674.10892.1.1100.100.1.5.28.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.1.13|2|12 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.7.26|2|21 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.11.12|2|8 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.11.20|2|8 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.17.23|2|14 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.19.3|2|28 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.20.10|2|25 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.24.23|2|9 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.27.7|2|15 +1.3.6.1.4.1.674.10892.1.1100.100.1.6.28.19|2|12 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.1.8|2|1 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.3.2|2|3 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.9.14|2|9 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.18.23|2|18 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.21.26|2|21 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.22.26|2|22 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.23.16|2|23 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.24.10|2|24 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.26.18|2|26 +1.3.6.1.4.1.674.10892.1.1100.110.1.1.31.10|2|31 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.1.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.3.2|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.9.14|2|14 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.18.23|2|23 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.21.26|2|26 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.22.26|2|26 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.23.16|2|16 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.24.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.26.18|2|18 +1.3.6.1.4.1.674.10892.1.1100.110.1.2.31.10|2|10 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.1.8|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.3.2|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.9.14|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.18.23|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.21.26|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.22.26|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.23.16|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.24.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.26.18|2|1 +1.3.6.1.4.1.674.10892.1.1100.110.1.3.31.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.1.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.3.2|2|1 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.9.14|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.18.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.21.26|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.22.26|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.23.16|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.24.10|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.26.18|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.4.31.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.1.8|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.3.2|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.9.14|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.18.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.21.26|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.22.26|2|3 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.23.16|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.24.10|2|5 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.26.18|2|5 +1.3.6.1.4.1.674.10892.1.1100.110.1.5.31.10|2|3 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.1.8|2|8 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.3.2|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.9.14|2|23 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.18.23|2|19 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.21.26|2|9 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.22.26|2|5 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.23.16|2|13 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.24.10|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.26.18|2|19 +1.3.6.1.4.1.674.10892.1.1100.110.1.6.31.10|2|14 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.1.8|4x|746865697220666f7277617264207468656972206f78656e +1.3.6.1.4.1.674.10892.1.1100.110.1.7.3.2|4x|717561696e746c7920627574207468656972207a6f6d62696573206b6570742061637465642064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.9.14|4x|6f78656e204a61646564204a61646564206f78656e20627574204a61646564207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.18.23|4x|627574207468656972206163746564206b657074 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.21.26|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.110.1.7.22.26|4x|6b6570742064726976696e67206b657074 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.23.16|4|Jaded +1.3.6.1.4.1.674.10892.1.1100.110.1.7.24.10|4x|61637465642064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.26.18|4x|64726976696e67206f78656e206b65707420666f7277617264206b657074 +1.3.6.1.4.1.674.10892.1.1100.110.1.7.31.10|4|quaintly +1.3.6.1.4.1.674.10892.1.1100.110.1.8.1.8|2|6 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.3.2|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.9.14|2|1 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.18.23|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.21.26|2|2 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.22.26|2|5 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.23.16|2|3 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.24.10|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.26.18|2|4 +1.3.6.1.4.1.674.10892.1.1100.110.1.8.31.10|2|3 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.6.11|2|6 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.8.19|2|8 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.9.5|2|9 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.9.21|2|9 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.11.17|2|11 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.20.15|2|20 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.25.11|2|25 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.25.13|2|25 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.25.19|2|25 +1.3.6.1.4.1.674.10892.1.1100.112.1.1.28.6|2|28 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.6.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.8.19|2|19 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.9.5|2|5 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.9.21|2|21 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.11.17|2|17 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.20.15|2|15 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.25.11|2|11 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.25.13|2|13 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.25.19|2|19 +1.3.6.1.4.1.674.10892.1.1100.112.1.2.28.6|2|6 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.6.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.8.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.9.5|2|6 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.9.21|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.11.17|2|6 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.20.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.25.11|2|5 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.25.13|2|5 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.25.19|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.3.28.6|2|5 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.6.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.8.19|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.9.5|2|3 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.9.21|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.11.17|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.20.15|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.25.11|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.25.13|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.25.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.4.28.6|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.6.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.8.19|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.9.5|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.9.21|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.11.17|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.20.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.25.11|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.25.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.25.19|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.5.28.6|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.6.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.8.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.9.5|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.9.21|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.11.17|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.20.15|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.25.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.25.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.25.19|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.6.28.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.6.11|4x|666f7277617264207a6f6d626965732064726976696e672064726976696e67207468656972 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.8.19|4x|6b65707420717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.9.5|4x|7a6f6d62696573204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.9.21|4x|4a6164656420666f72776172642064726976696e6720746865697220666f7277617264 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.11.17|4x|61637465642064726976696e67206275742064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.20.15|4x|7a6f6d62696573206f78656e2064726976696e67206163746564206f78656e +1.3.6.1.4.1.674.10892.1.1100.112.1.7.25.11|4x|6163746564206f78656e20627574204a61646564 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.25.13|4x|64726976696e67204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.25.19|4x|7a6f6d6269657320627574204a616465642064726976696e67206b65707420717561696e746c7920666f727761726420627574 +1.3.6.1.4.1.674.10892.1.1100.112.1.7.28.6|4|acted +1.3.6.1.4.1.674.10892.1.1100.112.1.8.6.11|2|0 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.8.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.9.5|2|0 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.9.21|2|0 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.11.17|2|0 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.20.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.25.11|2|0 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.25.13|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.25.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.8.28.6|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.6.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.8.19|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.9.5|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.9.21|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.11.17|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.20.15|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.25.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.25.13|2|2 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.25.19|2|4 +1.3.6.1.4.1.674.10892.1.1100.112.1.9.28.6|2|16 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.6.11|2|13 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.8.19|2|14 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.9.5|2|10 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.9.21|2|5 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.11.17|2|12 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.20.15|2|28 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.25.11|2|28 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.25.13|2|17 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.25.19|2|24 +1.3.6.1.4.1.674.10892.1.1100.112.1.10.28.6|2|17 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.6.11|2|25 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.8.19|2|30 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.9.5|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.9.21|2|7 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.11.17|2|12 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.20.15|2|22 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.25.11|2|13 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.25.13|2|23 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.25.19|2|8 +1.3.6.1.4.1.674.10892.1.1100.112.1.11.28.6|2|31 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.6.11|2|12 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.8.19|2|16 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.9.5|2|19 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.9.21|2|19 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.11.17|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.20.15|2|31 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.25.11|2|18 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.25.13|2|31 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.25.19|2|18 +1.3.6.1.4.1.674.10892.1.1100.112.1.12.28.6|2|13 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.6.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.8.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.9.5|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.9.21|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.11.17|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.20.15|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.25.11|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.25.13|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.25.19|2|1 +1.3.6.1.4.1.674.10892.1.1100.112.1.13.28.6|2|1 +1.3.6.1.4.1.674.10892.1.1200.10.1.1.19.17|2|19 +1.3.6.1.4.1.674.10892.1.1200.10.1.1.21.21|2|21 +1.3.6.1.4.1.674.10892.1.1200.10.1.2.19.17|2|17 +1.3.6.1.4.1.674.10892.1.1200.10.1.2.21.21|2|21 +1.3.6.1.4.1.674.10892.1.1200.10.1.3.19.17|2|4 +1.3.6.1.4.1.674.10892.1.1200.10.1.3.21.21|2|2 +1.3.6.1.4.1.674.10892.1.1200.10.1.4.19.17|2|2 +1.3.6.1.4.1.674.10892.1.1200.10.1.4.21.21|2|8 +1.3.6.1.4.1.674.10892.1.1200.10.1.5.19.17|2|3 +1.3.6.1.4.1.674.10892.1.1200.10.1.5.21.21|2|1 +1.3.6.1.4.1.674.10892.1.1200.10.1.6.19.17|2|1 +1.3.6.1.4.1.674.10892.1.1200.10.1.6.21.21|2|1 +1.3.6.1.4.1.674.10892.1.1200.10.1.7.19.17|2|13 +1.3.6.1.4.1.674.10892.1.1200.10.1.7.21.21|2|10 +1.3.6.1.4.1.674.10892.1.1200.10.1.8.19.17|4x|7468656972206b657074206b657074207a6f6d62696573206b657074207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.1.1200.10.1.8.21.21|4x|7a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.1.1200.10.1.11.19.17|2|5 +1.3.6.1.4.1.674.10892.1.1200.10.1.11.21.21|2|3 +1.3.6.1.4.1.674.10892.1.2000.10.1.1.2.11|2|2 +1.3.6.1.4.1.674.10892.1.2000.10.1.1.8.3|2|8 +1.3.6.1.4.1.674.10892.1.2000.10.1.2.2.11|2|11 +1.3.6.1.4.1.674.10892.1.2000.10.1.2.8.3|2|3 +1.3.6.1.4.1.674.10892.1.2000.10.1.3.2.11|2|1 +1.3.6.1.4.1.674.10892.1.2000.10.1.3.8.3|2|2 +1.3.6.1.4.1.674.10892.1.2000.10.1.6.2.11|4x|666f7277617264206b6570742062757420717561696e746c79206b657074207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.2000.10.1.6.8.3|4x|6b657074204a61646564 +1.3.6.1.4.1.674.10892.1.2000.10.1.7.2.11|4x|6f78656e20717561696e746c79204a61646564207a6f6d6269657320627574207468656972 +1.3.6.1.4.1.674.10892.1.2000.10.1.7.8.3|4x|6f78656e2064726976696e67206b657074207a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.1.2000.10.1.8.2.11|4x|627574207a6f6d6269657320627574206f78656e206163746564206163746564 +1.3.6.1.4.1.674.10892.1.2000.10.1.8.8.3|4x|666f727761726420666f72776172642061637465642064726976696e67206b6570742064726976696e672064726976696e67204a61646564206f78656e +1.3.6.1.4.1.674.10892.1.2000.10.1.9.2.11|4x|666f72776172642062757420746865697220627574207a6f6d6269657320717561696e746c79207a6f6d62696573204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.1.2000.10.1.9.8.3|4x|7468656972207468656972204a6164656420627574206163746564204a6164656420616374656420666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.2.4.1.1.1.1|2|2 +1.3.6.1.4.1.674.10892.2.4.1.1.1.2|2|83 +1.3.6.1.4.1.674.10892.2.4.1.1.6.1|2|2803 +1.3.6.1.4.1.674.10892.2.4.1.1.6.2|2|191739 +1.3.6.1.4.1.674.10892.2.4.1.1.13.1|2|1219 +1.3.6.1.4.1.674.10892.2.4.1.1.13.2|2|113 +1.3.6.1.4.1.674.10892.2.4.1.1.14.1|2|111 +1.3.6.1.4.1.674.10892.2.4.1.1.14.2|2|827 +1.3.6.1.4.1.674.10892.2.4.2.1.2.1|2|27 +1.3.6.1.4.1.674.10892.2.4.2.1.2.2|2|86 +1.3.6.1.4.1.674.10892.5.1.1.1.0|4x|717561696e746c79204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.1.1.2.0|4|acted +1.3.6.1.4.1.674.10892.5.1.1.3.0|4x|6f78656e204a61646564206275742064726976696e67206163746564206f78656e +1.3.6.1.4.1.674.10892.5.1.1.4.0|4x|6163746564207a6f6d62696573207a6f6d6269657320717561696e746c792064726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.1.1.5.0|4x|7a6f6d62696573206b65707420616374656420627574207468656972204a61646564 +1.3.6.1.4.1.674.10892.5.1.1.6.0|4x|717561696e746c79206f78656e2062757420746865697220666f727761726420627574 +1.3.6.1.4.1.674.10892.5.1.1.7.0|2|17 +1.3.6.1.4.1.674.10892.5.1.1.8.0|4x|616374656420666f7277617264206f78656e20717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.1.2.1.0|4x|7468656972206163746564206b65707420627574204a61646564 +1.3.6.1.4.1.674.10892.5.1.2.2.0|4x|6f78656e206163746564206b657074204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.1.2.3.0|4x|746865697220666f727761726420666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.1.3.1.0|4x|7a6f6d62696573204a61646564206b65707420746865697220627574207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.1.3.2.0|4x|616374656420717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.5.1.3.3.0|4x|7468656972206b657074207468656972206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.1.3.4.0|4x|62757420627574 +1.3.6.1.4.1.674.10892.5.1.3.5.0|4|forward +1.3.6.1.4.1.674.10892.5.1.3.6.0|4x|666f727761726420616374656420666f7277617264206f78656e20717561696e746c79206f78656e20746865697220666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.5.1.3.7.0|2|3 +1.3.6.1.4.1.674.10892.5.1.3.8.0|4x|4a6164656420666f727761726420717561696e746c79204a61646564206f78656e204a6164656420627574206f78656e +1.3.6.1.4.1.674.10892.5.1.3.9.0|4x|6163746564206163746564 +1.3.6.1.4.1.674.10892.5.1.3.10.0|4x|6f78656e206b6570742064726976696e67206163746564206b657074206b657074206163746564 +1.3.6.1.4.1.674.10892.5.1.3.11.0|4x|7468656972207a6f6d62696573204a6164656420666f7277617264206f78656e207a6f6d62696573206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.1.3.12.0|4x|6f78656e207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.5.1.3.13.0|2|20 +1.3.6.1.4.1.674.10892.5.1.3.14.0|4x|4a616465642064726976696e67207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.1.3.15.0|4x|4a6164656420627574207468656972 +1.3.6.1.4.1.674.10892.5.1.3.16.0|2|28 +1.3.6.1.4.1.674.10892.5.1.3.17.0|2|9 +1.3.6.1.4.1.674.10892.5.1.3.18.0|4x|6163746564207468656972206163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.2.1.0|2|1 +1.3.6.1.4.1.674.10892.5.2.2.0|2|2 +1.3.6.1.4.1.674.10892.5.2.3.0|2|6 +1.3.6.1.4.1.674.10892.5.2.4.0|2|4 +1.3.6.1.4.1.674.10892.5.2.5.0|2|21 +1.3.6.1.4.1.674.10892.5.3.1.1.0|4|driving +1.3.6.1.4.1.674.10892.5.3.1.2.0|4x|6f78656e206b657074206163746564206f78656e207a6f6d62696573206f78656e +1.3.6.1.4.1.674.10892.5.3.1.3.0|2|1 +1.3.6.1.4.1.674.10892.5.3.1.4.0|4x|7468656972206b657074206f78656e +1.3.6.1.4.1.674.10892.5.3.1.5.0|4x|717561696e746c79206b65707420616374656420666f7277617264206f78656e206f78656e206b657074206b657074 +1.3.6.1.4.1.674.10892.5.3.1.6.0|4x|717561696e746c792064726976696e67206f78656e20666f7277617264207a6f6d62696573206f78656e206f78656e20717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.5.3.1.7.0|4x|616374656420616374656420746865697220666f7277617264 +1.3.6.1.4.1.674.10892.5.3.1.8.0|4x|666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.3.1.9.0|4|Jaded +1.3.6.1.4.1.674.10892.5.3.1.10.0|4x|6163746564207a6f6d62696573207468656972206f78656e207a6f6d6269657320666f7277617264206b657074204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.3.1.11.0|4x|627574204a6164656420746865697220666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1.1.0|2|15 +1.3.6.1.4.1.674.10892.5.4.1.2.0|2|20 +1.3.6.1.4.1.674.10892.5.4.1.3.0|2|12 +1.3.6.1.4.1.674.10892.5.4.300.1.0|2|17 +1.3.6.1.4.1.674.10892.5.4.300.2.0|2|19 +1.3.6.1.4.1.674.10892.5.4.300.10.1.1.22|2|22 +1.3.6.1.4.1.674.10892.5.4.300.10.1.1.28|2|28 +1.3.6.1.4.1.674.10892.5.4.300.10.1.2.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.2.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.3.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.3.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.4.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.4.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.5.22|2|3 +1.3.6.1.4.1.674.10892.5.4.300.10.1.5.28|2|21 +1.3.6.1.4.1.674.10892.5.4.300.10.1.6.22|2|23 +1.3.6.1.4.1.674.10892.5.4.300.10.1.6.28|2|17 +1.3.6.1.4.1.674.10892.5.4.300.10.1.7.22|4x|6163746564207468656972207468656972207a6f6d6269657320666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.10.1.7.28|4|their +1.3.6.1.4.1.674.10892.5.4.300.10.1.8.22|4x|6b657074206b657074206f78656e +1.3.6.1.4.1.674.10892.5.4.300.10.1.8.28|4x|7a6f6d6269657320616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.10.1.9.22|4x|666f727761726420746865697220666f7277617264207468656972206f78656e206275742064726976696e67206f78656e +1.3.6.1.4.1.674.10892.5.4.300.10.1.9.28|4x|64726976696e67207468656972204a61646564206f78656e2064726976696e67207a6f6d62696573204a616465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.10.1.10.22|4x|6f78656e204a61646564 +1.3.6.1.4.1.674.10892.5.4.300.10.1.10.28|4|driving +1.3.6.1.4.1.674.10892.5.4.300.10.1.11.22|4|kept +1.3.6.1.4.1.674.10892.5.4.300.10.1.11.28|4|acted +1.3.6.1.4.1.674.10892.5.4.300.10.1.12.22|2|18 +1.3.6.1.4.1.674.10892.5.4.300.10.1.12.28|2|18 +1.3.6.1.4.1.674.10892.5.4.300.10.1.13.22|2|27 +1.3.6.1.4.1.674.10892.5.4.300.10.1.13.28|2|14 +1.3.6.1.4.1.674.10892.5.4.300.10.1.14.22|2|7 +1.3.6.1.4.1.674.10892.5.4.300.10.1.14.28|2|5 +1.3.6.1.4.1.674.10892.5.4.300.10.1.15.22|4|oxen +1.3.6.1.4.1.674.10892.5.4.300.10.1.15.28|4|but +1.3.6.1.4.1.674.10892.5.4.300.10.1.24.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.24.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.25.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.25.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.28.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.28.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.29.22|2|10 +1.3.6.1.4.1.674.10892.5.4.300.10.1.29.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.30.22|2|0 +1.3.6.1.4.1.674.10892.5.4.300.10.1.30.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.31.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.31.28|2|8 +1.3.6.1.4.1.674.10892.5.4.300.10.1.32.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.32.28|2|9 +1.3.6.1.4.1.674.10892.5.4.300.10.1.33.22|2|31 +1.3.6.1.4.1.674.10892.5.4.300.10.1.33.28|2|16 +1.3.6.1.4.1.674.10892.5.4.300.10.1.34.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.34.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.35.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.35.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.36.22|2|19 +1.3.6.1.4.1.674.10892.5.4.300.10.1.36.28|2|25 +1.3.6.1.4.1.674.10892.5.4.300.10.1.38.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.38.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.39.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.39.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.44.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.44.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.45.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.45.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.46.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.46.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.47.22|2|22 +1.3.6.1.4.1.674.10892.5.4.300.10.1.47.28|2|18 +1.3.6.1.4.1.674.10892.5.4.300.10.1.48.22|4x|7468656972206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.4.300.10.1.48.28|4x|6b657074204a61646564207468656972206163746564 +1.3.6.1.4.1.674.10892.5.4.300.10.1.49.22|4x|7a6f6d62696573207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.10.1.49.28|4x|616374656420627574204a61646564207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.5.4.300.40.1.1.10.22|2|10 +1.3.6.1.4.1.674.10892.5.4.300.40.1.1.16.20|2|16 +1.3.6.1.4.1.674.10892.5.4.300.40.1.2.10.22|2|22 +1.3.6.1.4.1.674.10892.5.4.300.40.1.2.16.20|2|20 +1.3.6.1.4.1.674.10892.5.4.300.40.1.3.10.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.40.1.3.16.20|2|8 +1.3.6.1.4.1.674.10892.5.4.300.40.1.4.10.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.40.1.4.16.20|2|8 +1.3.6.1.4.1.674.10892.5.4.300.40.1.5.10.22|4x|666f7277617264204a616465642064726976696e672061637465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.40.1.5.16.20|4x|717561696e746c792064726976696e67204a6164656420717561696e746c79206163746564206b657074207a6f6d62696573207a6f6d6269657320627574 +1.3.6.1.4.1.674.10892.5.4.300.40.1.6.10.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.40.1.6.16.20|2|1 +1.3.6.1.4.1.674.10892.5.4.300.40.1.7.10.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.40.1.7.16.20|2|4 +1.3.6.1.4.1.674.10892.5.4.300.40.1.8.10.22|4x|4a616465642074686569722074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.40.1.8.16.20|4x|62757420627574206b6570742062757420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.300.60.1.1.3.10|2|3 +1.3.6.1.4.1.674.10892.5.4.300.60.1.1.23.26|2|23 +1.3.6.1.4.1.674.10892.5.4.300.60.1.2.3.10|2|10 +1.3.6.1.4.1.674.10892.5.4.300.60.1.2.23.26|2|26 +1.3.6.1.4.1.674.10892.5.4.300.60.1.3.3.10|2|6 +1.3.6.1.4.1.674.10892.5.4.300.60.1.3.23.26|2|1 +1.3.6.1.4.1.674.10892.5.4.300.60.1.4.3.10|2|4 +1.3.6.1.4.1.674.10892.5.4.300.60.1.4.23.26|2|6 +1.3.6.1.4.1.674.10892.5.4.300.60.1.5.3.10|2|4 +1.3.6.1.4.1.674.10892.5.4.300.60.1.5.23.26|2|5 +1.3.6.1.4.1.674.10892.5.4.300.60.1.6.3.10|2|14 +1.3.6.1.4.1.674.10892.5.4.300.60.1.6.23.26|2|4 +1.3.6.1.4.1.674.10892.5.4.300.60.1.7.3.10|2|21 +1.3.6.1.4.1.674.10892.5.4.300.60.1.7.23.26|2|22 +1.3.6.1.4.1.674.10892.5.4.300.60.1.8.3.10|4x|6163746564206163746564204a61646564206f78656e206f78656e207a6f6d6269657320627574206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.60.1.8.23.26|4x|64726976696e67207468656972206163746564207468656972206f78656e20666f7277617264204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.300.60.1.9.3.10|2|1 +1.3.6.1.4.1.674.10892.5.4.300.60.1.9.23.26|2|26 +1.3.6.1.4.1.674.10892.5.4.300.60.1.11.3.10|4x|616374656420616374656420746865697220717561696e746c79206f78656e207a6f6d626965732064726976696e67206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.60.1.11.23.26|4x|746865697220627574206163746564206f78656e20627574206b657074 +1.3.6.1.4.1.674.10892.5.4.300.70.1.1.18.23|2|18 +1.3.6.1.4.1.674.10892.5.4.300.70.1.1.29.21|2|29 +1.3.6.1.4.1.674.10892.5.4.300.70.1.2.18.23|2|23 +1.3.6.1.4.1.674.10892.5.4.300.70.1.2.29.21|2|21 +1.3.6.1.4.1.674.10892.5.4.300.70.1.3.18.23|2|1 +1.3.6.1.4.1.674.10892.5.4.300.70.1.3.29.21|2|4 +1.3.6.1.4.1.674.10892.5.4.300.70.1.4.18.23|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.4.29.21|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.5.18.23|2|4 +1.3.6.1.4.1.674.10892.5.4.300.70.1.5.29.21|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.6.18.23|2|3 +1.3.6.1.4.1.674.10892.5.4.300.70.1.6.29.21|2|1 +1.3.6.1.4.1.674.10892.5.4.300.70.1.7.18.23|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.7.29.21|2|1 +1.3.6.1.4.1.674.10892.5.4.300.70.1.8.18.23|4x|4a61646564206f78656e2064726976696e67207a6f6d62696573206163746564206f78656e +1.3.6.1.4.1.674.10892.5.4.300.70.1.8.29.21|4x|6b657074207a6f6d62696573206f78656e206b6570742064726976696e6720666f7277617264206f78656e +1.3.6.1.4.1.674.10892.5.4.300.90.1.1.2.16|2|2 +1.3.6.1.4.1.674.10892.5.4.300.90.1.1.6.30|2|6 +1.3.6.1.4.1.674.10892.5.4.300.90.1.2.2.16|2|16 +1.3.6.1.4.1.674.10892.5.4.300.90.1.2.6.30|2|30 +1.3.6.1.4.1.674.10892.5.4.300.90.1.3.2.16|2|10 +1.3.6.1.4.1.674.10892.5.4.300.90.1.3.6.30|2|13 +1.3.6.1.4.1.674.10892.5.4.300.90.1.4.2.16|2|2 +1.3.6.1.4.1.674.10892.5.4.300.90.1.4.6.30|2|3 +1.3.6.1.4.1.674.10892.5.4.300.90.1.5.2.16|2|3 +1.3.6.1.4.1.674.10892.5.4.300.90.1.5.6.30|2|2 +1.3.6.1.4.1.674.10892.5.4.300.90.1.6.2.16|4x|74686569722061637465642064726976696e67204a61646564 +1.3.6.1.4.1.674.10892.5.4.300.90.1.6.6.30|4x|717561696e746c7920717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.90.1.7.2.16|4x|746865697220666f7277617264206b657074206163746564 +1.3.6.1.4.1.674.10892.5.4.300.90.1.7.6.30|4x|7468656972206f78656e206b65707420746865697220627574206163746564 +1.3.6.1.4.1.674.10892.5.4.300.90.1.8.2.16|4|their +1.3.6.1.4.1.674.10892.5.4.300.90.1.8.6.30|4|Jaded +1.3.6.1.4.1.674.10892.5.4.300.90.1.9.2.16|4x|4a61646564206f78656e204a6164656420717561696e746c7920627574207468656972206275742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.90.1.9.6.30|4x|4a61646564206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.4.300.90.1.10.2.16|4x|616374656420627574 +1.3.6.1.4.1.674.10892.5.4.300.90.1.10.6.30|4x|666f72776172642064726976696e67204a61646564206b657074207468656972206b6570742062757420627574206b657074 +1.3.6.1.4.1.674.10892.5.4.300.90.1.11.2.16|4|kept +1.3.6.1.4.1.674.10892.5.4.300.90.1.11.6.30|4x|6b657074206b65707420666f7277617264207a6f6d6269657320666f7277617264206b657074204a61646564206163746564206b657074 +1.3.6.1.4.1.674.10892.5.4.300.90.1.12.2.16|4x|7a6f6d62696573206b657074207a6f6d62696573207a6f6d6269657320616374656420627574207468656972 +1.3.6.1.4.1.674.10892.5.4.300.90.1.12.6.30|4|their +1.3.6.1.4.1.674.10892.5.4.600.10.1.1.5.22|2|5 +1.3.6.1.4.1.674.10892.5.4.600.10.1.1.26.20|2|26 +1.3.6.1.4.1.674.10892.5.4.600.10.1.2.5.22|2|22 +1.3.6.1.4.1.674.10892.5.4.600.10.1.2.26.20|2|20 +1.3.6.1.4.1.674.10892.5.4.600.10.1.3.5.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.10.1.3.26.20|2|4 +1.3.6.1.4.1.674.10892.5.4.600.10.1.4.5.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.10.1.4.26.20|2|1 +1.3.6.1.4.1.674.10892.5.4.600.10.1.5.5.22|2|5 +1.3.6.1.4.1.674.10892.5.4.600.10.1.5.26.20|2|6 +1.3.6.1.4.1.674.10892.5.4.600.10.1.6.5.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.10.1.6.26.20|2|9 +1.3.6.1.4.1.674.10892.5.4.600.10.1.7.5.22|4x|717561696e746c7920717561696e746c79206f78656e206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.600.10.1.7.26.20|4x|6b657074207a6f6d62696573204a616465642064726976696e67207a6f6d62696573204a61646564204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.600.10.1.8.5.22|2|4 +1.3.6.1.4.1.674.10892.5.4.600.10.1.8.26.20|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.1.16.26|2|16 +1.3.6.1.4.1.674.10892.5.4.600.12.1.1.17.15|2|17 +1.3.6.1.4.1.674.10892.5.4.600.12.1.2.16.26|2|26 +1.3.6.1.4.1.674.10892.5.4.600.12.1.2.17.15|2|15 +1.3.6.1.4.1.674.10892.5.4.600.12.1.3.16.26|2|4 +1.3.6.1.4.1.674.10892.5.4.600.12.1.3.17.15|2|2 +1.3.6.1.4.1.674.10892.5.4.600.12.1.4.16.26|2|10 +1.3.6.1.4.1.674.10892.5.4.600.12.1.4.17.15|2|10 +1.3.6.1.4.1.674.10892.5.4.600.12.1.5.16.26|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.5.17.15|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.6.16.26|2|7 +1.3.6.1.4.1.674.10892.5.4.600.12.1.6.17.15|2|4 +1.3.6.1.4.1.674.10892.5.4.600.12.1.7.16.26|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.7.17.15|2|1 +1.3.6.1.4.1.674.10892.5.4.600.12.1.8.16.26|4x|7a6f6d626965732064726976696e672064726976696e67206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.4.600.12.1.8.17.15|4x|7a6f6d62696573207468656972207a6f6d62696573207468656972206163746564204a61646564204a61646564 +1.3.6.1.4.1.674.10892.5.4.600.12.1.9.16.26|2|26 +1.3.6.1.4.1.674.10892.5.4.600.12.1.9.17.15|2|19 +1.3.6.1.4.1.674.10892.5.4.600.12.1.10.16.26|2|6 +1.3.6.1.4.1.674.10892.5.4.600.12.1.10.17.15|2|11 +1.3.6.1.4.1.674.10892.5.4.600.12.1.11.16.26|2|16 +1.3.6.1.4.1.674.10892.5.4.600.12.1.11.17.15|2|2 +1.3.6.1.4.1.674.10892.5.4.600.12.1.12.16.26|2|1 +1.3.6.1.4.1.674.10892.5.4.600.12.1.12.17.15|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.13.16.26|2|0 +1.3.6.1.4.1.674.10892.5.4.600.12.1.13.17.15|2|1 +1.3.6.1.4.1.674.10892.5.4.600.12.1.14.16.26|2|2 +1.3.6.1.4.1.674.10892.5.4.600.12.1.14.17.15|2|4 +1.3.6.1.4.1.674.10892.5.4.600.12.1.15.16.26|4x|7a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.12.1.15.17.15|4|zombies +1.3.6.1.4.1.674.10892.5.4.600.12.1.16.16.26|2|19 +1.3.6.1.4.1.674.10892.5.4.600.12.1.16.17.15|2|12 +1.3.6.1.4.1.674.10892.5.4.600.50.1.1.20.31|2|20 +1.3.6.1.4.1.674.10892.5.4.600.50.1.1.21.13|2|21 +1.3.6.1.4.1.674.10892.5.4.600.50.1.2.20.31|2|31 +1.3.6.1.4.1.674.10892.5.4.600.50.1.2.21.13|2|13 +1.3.6.1.4.1.674.10892.5.4.600.50.1.3.20.31|2|1 +1.3.6.1.4.1.674.10892.5.4.600.50.1.3.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.4.20.31|2|6 +1.3.6.1.4.1.674.10892.5.4.600.50.1.4.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.5.20.31|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.5.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.6.20.31|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.6.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.7.20.31|4x|717561696e746c7920627574206f78656e204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.50.1.7.21.13|4x|6b657074206b6570742074686569722062757420717561696e746c79206b65707420717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.5.4.700.20.1.1.7.28|2|7 +1.3.6.1.4.1.674.10892.5.4.700.20.1.1.15.28|2|15 +1.3.6.1.4.1.674.10892.5.4.700.20.1.2.7.28|2|28 +1.3.6.1.4.1.674.10892.5.4.700.20.1.2.15.28|2|28 +1.3.6.1.4.1.674.10892.5.4.700.20.1.3.7.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.3.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.4.7.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.4.15.28|2|6 +1.3.6.1.4.1.674.10892.5.4.700.20.1.5.7.28|2|6 +1.3.6.1.4.1.674.10892.5.4.700.20.1.5.15.28|2|3 +1.3.6.1.4.1.674.10892.5.4.700.20.1.6.7.28|2|12 +1.3.6.1.4.1.674.10892.5.4.700.20.1.6.15.28|2|14 +1.3.6.1.4.1.674.10892.5.4.700.20.1.7.7.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.7.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.8.7.28|4x|717561696e746c792074686569722062757420666f7277617264206163746564206163746564206b657074204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.700.20.1.8.15.28|4x|6275742064726976696e6720717561696e746c79206b657074204a61646564 +1.3.6.1.4.1.674.10892.5.4.700.20.1.9.7.28|2|9 +1.3.6.1.4.1.674.10892.5.4.700.20.1.9.15.28|2|24 +1.3.6.1.4.1.674.10892.5.4.700.20.1.10.7.28|2|14 +1.3.6.1.4.1.674.10892.5.4.700.20.1.10.15.28|2|22 +1.3.6.1.4.1.674.10892.5.4.700.20.1.11.7.28|2|27 +1.3.6.1.4.1.674.10892.5.4.700.20.1.11.15.28|2|1 +1.3.6.1.4.1.674.10892.5.4.700.20.1.12.7.28|2|12 +1.3.6.1.4.1.674.10892.5.4.700.20.1.12.15.28|2|25 +1.3.6.1.4.1.674.10892.5.4.700.20.1.13.7.28|2|24 +1.3.6.1.4.1.674.10892.5.4.700.20.1.13.15.28|2|7 +1.3.6.1.4.1.674.10892.5.4.700.20.1.14.7.28|2|31 +1.3.6.1.4.1.674.10892.5.4.700.20.1.14.15.28|2|22 +1.3.6.1.4.1.674.10892.5.4.700.20.1.15.7.28|2|4 +1.3.6.1.4.1.674.10892.5.4.700.20.1.15.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.16.7.28|2|1 +1.3.6.1.4.1.674.10892.5.4.700.20.1.16.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.1.4.24|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.1.19.1|2|19 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.2.4.24|2|24 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.2.19.1|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.3.4.24|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.3.19.1|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.4.4.24|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.4.19.1|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.5.4.24|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.5.19.1|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.7.4.24|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.7.19.1|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.8.4.24|4x|4a61646564206b6570742064726976696e672064726976696e6720666f7277617264207468656972206163746564 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.8.19.1|4|driving +1.3.6.1.4.1.674.10892.5.4.1100.30.1.9.4.24|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.9.19.1|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.10.4.24|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.10.19.1|2|18 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.11.4.24|2|27 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.11.19.1|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.12.4.24|2|20 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.12.19.1|2|9 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.13.4.24|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.13.19.1|2|0 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.14.4.24|2|15 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.14.19.1|2|7 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.16.4.24|4x|7a6f6d6269657320717561696e746c792064726976696e6720717561696e746c7920666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.16.19.1|4x|717561696e746c7920627574206b657074 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.17.4.24|2|25 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.17.19.1|2|30 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.18.4.24|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.18.19.1|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.19.4.24|2|19 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.19.19.1|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.20.4.24|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.20.19.1|2|29 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.21.4.24|2|8 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.21.19.1|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.22.4.24|2|19 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.22.19.1|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.23.4.24|4x|627574206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.23.19.1|4x|6275742064726976696e67206f78656e206275742064726976696e67206f78656e206f78656e206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.26.4.24|4x|746865697220666f7277617264206f78656e +1.3.6.1.4.1.674.10892.5.4.1100.30.1.26.19.1|4x|7a6f6d6269657320717561696e746c79204a6164656420627574204a616465642064726976696e6720616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.1.22.21|2|22 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.1.29.4|2|29 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.2.22.21|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.2.29.4|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.3.22.21|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.3.29.4|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.4.22.21|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.4.29.4|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.5.22.21|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.5.29.4|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.7.22.21|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.7.29.4|2|26 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.8.22.21|4x|717561696e746c7920666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.8.29.4|4x|6b657074207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.10.22.21|4|forward +1.3.6.1.4.1.674.10892.5.4.1100.50.1.10.29.4|4x|6f78656e207468656972204a61646564 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.14.22.21|2|7 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.14.29.4|2|28 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.15.22.21|2|30 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.15.29.4|2|30 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.21.22.21|4x|666f7277617264207a6f6d62696573204a61646564206b65707420717561696e746c79206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.21.29.4|4|driving +1.3.6.1.4.1.674.10892.5.4.1100.50.1.22.22.21|4x|4a61646564206163746564207468656972204a61646564207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.22.29.4|4x|7468656972206f78656e20666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.23.22.21|4x|6163746564204a61646564206163746564206f78656e2061637465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.23.29.4|4x|4a61646564207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.26.22.21|4x|6f78656e20627574206163746564207468656972206f78656e206b6570742061637465642064726976696e67204a61646564 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.26.29.4|4|kept +1.3.6.1.4.1.674.10892.5.4.1100.50.1.27.22.21|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.27.29.4|2|23 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.1.10.9|2|10 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.1.20.20|2|20 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.2.10.9|2|9 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.2.20.20|2|20 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.3.10.9|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.3.20.20|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.4.10.9|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.4.20.20|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.5.10.9|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.5.20.20|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.7.10.9|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.7.20.20|2|10 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.8.10.9|4|acted +1.3.6.1.4.1.674.10892.5.4.1100.80.1.8.20.20|4x|4a61646564204a61646564204a61646564206b657074204a61646564 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.9.10.9|4x|4a616465642074686569722064726976696e67207468656972206f78656e206b657074207468656972207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.9.20.20|4x|6163746564206b6570742062757420627574 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.12.10.9|4|kept +1.3.6.1.4.1.674.10892.5.4.1100.80.1.12.20.20|4x|7468656972206b6570742064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.1.3.23|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.1.29.25|2|29 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.2.3.23|2|23 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.2.29.25|2|25 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.3.3.23|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.3.29.25|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.4.3.23|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.4.29.25|2|11 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.6.3.23|4x|7a6f6d62696573207468656972207a6f6d62696573206163746564206163746564207468656972206275742062757420627574 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.6.29.25|4x|7468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.7.3.23|4x|7a6f6d626965732064726976696e67206f78656e +1.3.6.1.4.1.674.10892.5.4.1100.90.1.7.29.25|4x|7468656972206b657074206b657074207468656972206b657074204a6164656420666f727761726420616374656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.15.3.23|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.15.29.25|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.16.3.23|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.16.29.25|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.17.3.23|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.17.29.25|2|22 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.18.3.23|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.18.29.25|2|22 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.19.3.23|2|12 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.19.29.25|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.23.3.23|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.23.29.25|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.27.3.23|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.27.29.25|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.28.3.23|2|0 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.28.29.25|2|0 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.29.3.23|2|8 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.29.29.25|2|8 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.30.3.23|4x|64726976696e67206f78656e20666f72776172642064726976696e67207a6f6d62696573206163746564204a61646564207a6f6d6269657320627574 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.30.29.25|4|zombies +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.1.4|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.1.21|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.2.4|4x|7a6f6d62696573207a6f6d62696573206b657074206b65707420717561696e746c792064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.2.21|4x|4a616465642062757420616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.7.4|2|10 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.7.21|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.8.4|4x|616374656420627574206b65707420717561696e746c79206f78656e207a6f6d6269657320717561696e746c7920666f7277617264206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.8.21|4x|6f78656e206b6570742064726976696e6720746865697220616374656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.9.4|2|20 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.9.21|2|30 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.37.4|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.37.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.38.4|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.38.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.41.4|4x|6b657074207a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.41.21|4x|4a61646564206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.42.4|4x|717561696e746c79206b65707420616374656420616374656420627574206163746564207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.42.21|4|acted +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.48.4|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.48.21|2|20 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.49.4|2|22 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.49.21|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.50.4|2|18 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.50.21|2|27 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.51.4|2|23 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.51.21|2|22 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.52.4|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.52.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.53.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.53.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.59.4|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.59.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.60.4|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.60.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.61.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.61.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.62.4|2|31 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.62.21|2|31 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.69.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.69.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.70.4|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.70.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.71.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.71.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.72.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.72.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.73.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.73.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.74.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.74.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.75.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.75.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.76.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.76.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.77.4|4x|717561696e746c79206f78656e2064726976696e6720717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.77.21|4x|4a6164656420666f7277617264204a6164656420717561696e746c79206f78656e207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.78.4|4x|717561696e746c79207a6f6d626965732061637465642064726976696e67206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.78.21|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.79.4|4x|6b65707420717561696e746c792064726976696e672064726976696e6720627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.79.21|4x|717561696e746c7920717561696e746c79207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.80.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.80.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.81.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.81.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.82.4|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.82.21|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.83.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.83.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.84.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.84.21|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.1.7|2|7 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.1.26|2|26 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.2.7|4x|717561696e746c7920717561696e746c79207a6f6d6269657320666f727761726420616374656420717561696e746c79206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.2.26|4x|666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.4.7|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.4.26|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.8.7|4|their +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.8.26|4|Jaded +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.9.7|4x|6f78656e20627574206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.9.26|4x|6b65707420627574206b657074206f78656e207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.19.7|4|kept +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.19.26|4x|6b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.23.7|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.23.26|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.24.7|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.24.26|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.26.7|4x|4a616465642064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.26.26|4x|4a61646564206f78656e2064726976696e67204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.30.7|4x|666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.30.26|4x|6f78656e206f78656e2064726976696e67206275742064726976696e67207468656972206f78656e207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.31.7|2|15 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.31.26|2|23 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.32.7|2|28 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.32.26|2|28 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.40.7|4x|7468656972206f78656e207468656972206163746564204a6164656420666f727761726420666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.40.26|4x|6275742074686569722074686569722062757420666f72776172642062757420616374656420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.41.7|4x|6163746564207468656972207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.41.26|4x|717561696e746c79207a6f6d6269657320717561696e746c79204a61646564206f78656e2064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.42.7|4x|666f7277617264204a61646564206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.42.26|4x|64726976696e67206b65707420717561696e746c79204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.43.7|4x|7468656972206f78656e20666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.43.26|4x|6b657074206b65707420627574206b657074206b657074206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.44.7|4x|666f7277617264204a6164656420717561696e746c7920666f72776172642061637465642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.44.26|4x|61637465642074686569722064726976696e67206b6570742064726976696e67206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.45.7|4x|64726976696e6720717561696e746c792064726976696e6720627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.45.26|4x|717561696e746c79204a61646564206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.46.7|4|acted +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.46.26|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.47.7|4|their +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.47.26|4x|6b65707420666f7277617264204a6164656420666f7277617264206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.48.7|4x|7468656972204a61646564206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.48.26|4x|64726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.49.7|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.49.26|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.1.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.1.21|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.2.8|4x|6469736b31 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.2.21|4x|6469736b32 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.3.8|4x|4a61646564204a61646564206f78656e204a61646564206b657074206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.3.21|4x|666f7277617264206f78656e2062757420627574204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4.21|2|9 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.6.8|4x|717561696e746c7920717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.6.21|4x|6163746564206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.7.8|4x|666f727761726420616374656420616374656420666f7277617264207a6f6d62696573206163746564206f78656e207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.7.21|4x|6b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.8.8|4|driving +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.8.21|4x|627574206b657074204a61646564207a6f6d6269657320616374656420627574206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.11.8|2|20 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.11.21|2|9 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.17.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.17.21|2|14 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.19.8|2|30 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.19.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.21.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.21.21|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.22.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.22.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.24.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.24.21|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.27.8|4x|74686569722064726976696e67206f78656e207a6f6d6269657320746865697220666f727761726420746865697220717561696e746c7920717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.27.21|4x|666f727761726420666f7277617264207a6f6d62696573206b65707420717561696e746c79206f78656e207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.28.8|4x|6f78656e206163746564204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.28.21|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.29.8|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.29.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.30.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.30.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.31.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.31.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.32.8|4x|64726976696e67206f78656e206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.32.21|4x|717561696e746c7920666f727761726420746865697220627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.33.8|4|forward +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.33.21|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.34.8|4x|4a61646564206f78656e206f78656e206163746564204a61646564207a6f6d62696573206275742062757420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.34.21|4x|717561696e746c792064726976696e6720666f7277617264207a6f6d62696573206b657074207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.35.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.35.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.42.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.42.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.49.8|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.49.21|2|19 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.50.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.50.21|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.51.8|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.51.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.52.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.52.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.53.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.53.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.54.8|4x|666f7277617264206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.54.21|4x|6b657074206f78656e206f78656e2064726976696e67206163746564204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.55.8|4x|6f78656e20666f7277617264206f78656e206f78656e20666f727761726420627574207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.55.21|4x|627574207a6f6d626965732062757420746865697220717561696e746c7920746865697220717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.57.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.57.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.58.8|2|29 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.58.21|2|9 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.59.8|4x|666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.59.21|4|acted +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.60.8|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.60.21|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.61.8|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.61.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.1.19|2|19 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.1.24|2|24 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.2.19|4x|64726976696e6720717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.2.24|4|their +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.4.19|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.4.24|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.11.19|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.11.24|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.15.19|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.15.24|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.20.19|4|zombies +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.20.24|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.21.19|4|driving +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.21.24|4x|666f7277617264207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.1.13|2|13 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.1.16|2|16 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.2.13|4x|737570706c7931 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.2.16|4x|737570706c7932 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.4.13|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.4.16|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.7.13|4x|7468656972206275742064726976696e67207a6f6d62696573206b65707420666f727761726420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.7.16|4x|717561696e746c7920717561696e746c7920666f72776172642074686569722064726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.9.13|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.9.16|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.15.13|4x|666f7277617264207468656972206f78656e206163746564206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.15.16|4x|717561696e746c7920627574206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.16.13|4x|4a6164656420627574206b65707420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.16.16|4x|62757420717561696e746c7920627574207a6f6d62696573204a61646564206163746564207468656972204a6164656420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.1.6|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.1.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.2.6|4x|7a6f6d62696573206b657074204a61646564206f78656e2064726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.2.8|4x|6b65707420627574207a6f6d626965732061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.4.6|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.4.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.7.6|2|24 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.7.8|2|25 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.8.6|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.8.8|2|22 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.9.6|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.9.8|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.10.6|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.10.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.11.6|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.11.8|2|14 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.13.6|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.13.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.15.6|4|Jaded +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.15.8|4x|64726976696e6720717561696e746c79204a6164656420717561696e746c79206f78656e20717561696e746c7920627574207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.16.6|4x|7a6f6d626965732064726976696e67204a6164656420616374656420717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.16.8|4x|6b657074204a6164656420627574207a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.1.14|2|14 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.1.30|2|30 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.2.14|4x|6163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.2.30|4x|6b657074204a616465642064726976696e67204a61646564207a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.4.14|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.4.30|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.6.14|4x|64726976696e67204a616465642062757420627574206163746564204a6164656420717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.6.30|4x|666f7277617264206163746564206f78656e20666f7277617264204a6164656420666f727761726420666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.8.14|4x|6f78656e2064726976696e672062757420717561696e746c79206f78656e204a6164656420666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.8.30|4x|4a6164656420616374656420627574206b657074206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.11.14|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.11.30|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.15.14|4x|717561696e746c79207a6f6d626965732061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.15.30|4x|746865697220627574206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.16.14|4x|7a6f6d626965732064726976696e67207468656972204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.16.30|4|zombies +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.1.17|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.1.18|2|18 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.4.17|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.4.18|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.6.17|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.6.18|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.10.17|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.10.18|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.20.17|4x|627574206275742061637465642064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.20.18|4x|6f78656e206163746564204a6164656420717561696e746c79206b65707420666f727761726420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.21.17|4x|6163746564204a6164656420717561696e746c7920746865697220717561696e746c7920717561696e746c79204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.21.18|4x|7468656972206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.1.2|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.1.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.2.2|4x|64726976696e6720717561696e746c79206b657074204a6164656420666f72776172642062757420666f7277617264206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.2.8|4x|7a6f6d6269657320717561696e746c79206b657074206b6570742062757420717561696e746c7920666f727761726420717561696e746c79206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.4.2|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.4.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.6.2|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.6.8|2|25 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.10.2|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.10.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.11.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.11.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.13.2|2|7 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.13.8|2|10 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.14.2|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.14.8|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.20.2|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.20.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.23.2|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.23.8|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.24.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.24.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.25.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.25.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.26.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.26.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.30.2|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.30.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.31.2|2|12 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.31.8|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.32.2|4x|4a6164656420717561696e746c7920717561696e746c792064726976696e67206b657074207468656972206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.32.8|4x|6f78656e206b6570742064726976696e6720717561696e746c79207a6f6d62696573204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.33.2|4x|6f78656e2064726976696e67204a61646564206f78656e206f78656e204a61646564204a616465642062757420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.33.8|4x|62757420746865697220666f7277617264206b65707420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.34.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.34.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.35.2|4x|4a6164656420627574204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.35.8|4x|6f78656e20616374656420746865697220746865697220666f727761726420627574204a61646564207a6f6d62696573206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.36.2|4x|6163746564206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.36.8|4x|4a61646564207468656972207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.37.2|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.37.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.38.2|2|31 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.38.8|2|27 diff --git a/test/new-e2e/ndm/snmp/compose/data/dummy.snmprec b/test/new-e2e/ndm/snmp/compose/data/dummy.snmprec new file mode 100644 index 0000000000000..3c0c255574c3f --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/dummy.snmprec @@ -0,0 +1,5 @@ +1.3.6.1.4.1.123456789.1.0|2|10 +1.3.6.1.4.1.123456789.2.0|4x|3930 +1.3.6.1.4.1.123456789.3.0|4x|313230 +1.3.6.1.4.1.123456789.4.0|4|22C +1.3.6.1.4.1.123456789.5.0|4|1.5 diff --git a/test/new-e2e/ndm/snmp/compose/data/entity.snmprec b/test/new-e2e/ndm/snmp/compose/data/entity.snmprec new file mode 100644 index 0000000000000..2d22231069c29 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/entity.snmprec @@ -0,0 +1,67 @@ +1.3.6.1.2.1.47.1.1.1.1.1.14|2|14 +1.3.6.1.2.1.47.1.1.1.1.2.14|4x|7468656972206b6570742074686569722064726976696e6720717561696e746c7920666f7277617264206163746564206b657074 +1.3.6.1.2.1.47.1.1.1.1.3.14|6|1.3.6.1.3.188.55.250.82.5.91.149.89.39 +1.3.6.1.2.1.47.1.1.1.1.4.14|2|13 +1.3.6.1.2.1.47.1.1.1.1.5.14|2|6 +1.3.6.1.2.1.47.1.1.1.1.6.14|2|1 +1.3.6.1.2.1.47.1.1.1.1.7.14|4x|717561696e746c79206f78656e20616374656420717561696e746c7920666f7277617264206275742064726976696e672064726976696e67 +1.3.6.1.2.1.47.1.1.1.1.8.14|4x|62757420666f7277617264206f78656e204a616465642064726976696e67206b65707420627574 +1.3.6.1.2.1.47.1.1.1.1.9.14|4x|4a6164656420627574 +1.3.6.1.2.1.47.1.1.1.1.10.14|4x|717561696e746c79207468656972206163746564207468656972206163746564206163746564207468656972206163746564206163746564 +1.3.6.1.2.1.47.1.1.1.1.11.14|4x|64726976696e67206b657074 +1.3.6.1.2.1.47.1.1.1.1.12.14|4x|6163746564206b65707420746865697220666f7277617264204a61646564 +1.3.6.1.2.1.47.1.1.1.1.13.14|4x|7a6f6d62696573207a6f6d62696573204a6164656420627574206163746564204a6164656420627574207a6f6d62696573 +1.3.6.1.2.1.47.1.1.1.1.14.14|4x|7a6f6d626965732061637465642064726976696e67206f78656e +1.3.6.1.2.1.47.1.1.1.1.15.14|4x|666f7277617264207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.2.1.47.1.1.1.1.16.14|2|1 +1.3.6.1.2.1.47.1.1.1.1.17.14|4x|07d209150d352003 +1.3.6.1.2.1.47.1.1.1.1.18.14|4x|717561696e746c792064726976696e67 +1.3.6.1.2.1.47.1.1.1.1.19.14|4| +1.3.6.1.2.1.47.1.2.1.1.1.5|2|5 +1.3.6.1.2.1.47.1.2.1.1.1.17|2|17 +1.3.6.1.2.1.47.1.2.1.1.2.5|4x|4a6164656420717561696e746c79206b65707420666f7277617264206b657074206f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.2.1.47.1.2.1.1.2.17|4x|64726976696e67206163746564 +1.3.6.1.2.1.47.1.2.1.1.3.5|6|1.3.6.1.3.64.213.26.118.121 +1.3.6.1.2.1.47.1.2.1.1.3.17|6|1.3.6.1.3.98 +1.3.6.1.2.1.47.1.2.1.1.4.5|4x|6f78656e20627574206f78656e +1.3.6.1.2.1.47.1.2.1.1.4.17|4x|64726976696e6720627574206163746564206f78656e2062757420746865697220717561696e746c79 +1.3.6.1.2.1.47.1.2.1.1.5.5|4x|666f7277617264206f78656e20616374656420717561696e746c79206b65707420746865697220666f7277617264206f78656e +1.3.6.1.2.1.47.1.2.1.1.5.17|4x|6b657074204a6164656420717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.47.1.2.1.1.6.5|6|1.3.6.1.3.186.48.80.241.211.233.121.131 +1.3.6.1.2.1.47.1.2.1.1.6.17|6|1.3.6.1.3.8 +1.3.6.1.2.1.47.1.2.1.1.7.5|4x|6b657074207a6f6d62696573204a6164656420666f7277617264206163746564 +1.3.6.1.2.1.47.1.2.1.1.7.17|4x|6f78656e207468656972 +1.3.6.1.2.1.47.1.2.1.1.8.5|4x|717561696e746c79206f78656e20717561696e746c7920717561696e746c79 +1.3.6.1.2.1.47.1.2.1.1.8.17|4x|64726976696e6720717561696e746c79207a6f6d62696573207a6f6d6269657320666f7277617264206b657074 +1.3.6.1.2.1.47.1.3.1.1.1.16.29|2|29 +1.3.6.1.2.1.47.1.3.1.1.1.27.9|2|9 +1.3.6.1.2.1.47.1.3.2.1.1.13.23|2|23 +1.3.6.1.2.1.47.1.3.2.1.1.25.23|2|23 +1.3.6.1.2.1.47.1.3.2.1.2.13.23|6|1.3.6.1.3.96.235.172.158.104.173 +1.3.6.1.2.1.47.1.3.2.1.2.25.23|6|1.3.6.1.3.166.89.181.51.175 +1.3.6.1.2.1.47.1.3.3.1.1.5.22|2|22 +1.3.6.1.2.1.47.1.3.3.1.1.14.6|2|6 +1.3.6.1.2.1.47.1.4.1.0|67|3122888737 +1.3.6.1.2.1.99.1.1.1.1.5|2|8 +1.3.6.1.2.1.99.1.1.1.1.17|2|2 +1.3.6.1.2.1.99.1.1.1.2.5|2|2 +1.3.6.1.2.1.99.1.1.1.2.17|2|15 +1.3.6.1.2.1.99.1.1.1.3.5|2|1 +1.3.6.1.2.1.99.1.1.1.3.17|2|4 +1.3.6.1.2.1.99.1.1.1.4.5|2|15 +1.3.6.1.2.1.99.1.1.1.4.17|2|21 +1.3.6.1.2.1.99.1.1.1.5.5|2|3 +1.3.6.1.2.1.99.1.1.1.5.17|2|1 +1.3.6.1.2.1.99.1.1.1.6.5|4x|61637465642064726976696e67207a6f6d62696573206b657074207468656972207a6f6d626965732064726976696e67206b657074 +1.3.6.1.2.1.99.1.1.1.6.17|4x|64726976696e67206b657074207468656972206f78656e2064726976696e6720627574204a61646564 +1.3.6.1.2.1.99.1.1.1.7.5|67|2030232691 +1.3.6.1.2.1.99.1.1.1.7.17|67|963254584 +1.3.6.1.2.1.99.1.1.1.8.5|66|25995 +1.3.6.1.2.1.99.1.1.1.8.17|66|52278 +1.3.6.1.6.3.10.2.1.1.0|4x|616374656420666f7277617264206f78656e +1.3.6.1.6.3.10.2.1.1.0|4x|62757420746865697220746865697220746865697220627574206f78656e +1.3.6.1.6.3.10.2.1.2.0|2|6 +1.3.6.1.6.3.10.2.1.2.0|2|12 +1.3.6.1.6.3.10.2.1.3.0|2|4 +1.3.6.1.6.3.10.2.1.3.0|2|7 +1.3.6.1.6.3.10.2.1.4.0|2|500 diff --git a/test/new-e2e/ndm/snmp/compose/data/f5-big-ip.snmprec b/test/new-e2e/ndm/snmp/compose/data/f5-big-ip.snmprec new file mode 100644 index 0000000000000..d1cc8416b126f --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/f5-big-ip.snmprec @@ -0,0 +1,34555 @@ +1.3.6.1.2.1.1.1.0|4x|4249472d4950205669727475616c2045646974696f6e203a204c696e757820332e31302e302d3836322e31342e342e656c372e76652e7838365f3634203a204249472d495020736f6674776172652072656c656173652031352e302e312c206275696c6420302e302e3131 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.3375.2.1.3.4.43 +1.3.6.1.2.1.1.3.0|67|181235303 +1.3.6.1.2.1.1.4.0|4x|437573746f6d6572204e616d65203c61646d696e40637573746f6d65722e636f6d3e +1.3.6.1.2.1.1.5.0|4x|66352d6269672d69702d6164632d676f6f642d62796f6c2d312d766d2e632e64617461646f672d696e746567726174696f6e732d6c61622e696e7465726e616c +1.3.6.1.2.1.1.6.0|4x|4e6574776f726b20436c6f7365742031 +1.3.6.1.2.1.1.7.0|2|78 +1.3.6.1.2.1.1.8.0|67|8266 +1.3.6.1.2.1.1.9.1.2.1|6|1.3.6.1.6.3.11.3.1.1 +1.3.6.1.2.1.1.9.1.2.2|6|1.3.6.1.6.3.15.2.1.1 +1.3.6.1.2.1.1.9.1.2.3|6|1.3.6.1.6.3.10.3.1.1 +1.3.6.1.2.1.1.9.1.2.4|6|1.3.6.1.6.3.1 +1.3.6.1.2.1.1.9.1.2.5|6|1.3.6.1.6.3.16.2.2.1 +1.3.6.1.2.1.1.9.1.2.6|6|1.3.6.1.6.3.13.3.1.3 +1.3.6.1.2.1.1.9.1.2.7|6|1.3.6.1.2.1.92 +1.3.6.1.2.1.1.9.1.2.8|6|1.3.6.1.2.1.31 +1.3.6.1.2.1.1.9.1.2.9|6|1.3.6.1.2.1.48 +1.3.6.1.2.1.1.9.1.3.1|4x|546865204d494220666f72204d6573736167652050726f63657373696e6720616e64204469737061746368696e672e +1.3.6.1.2.1.1.9.1.3.2|4x|546865206d616e6167656d656e7420696e666f726d6174696f6e20646566696e6974696f6e7320666f722074686520534e4d5020557365722d6261736564205365637572697479204d6f64656c2e +1.3.6.1.2.1.1.9.1.3.3|4x|54686520534e4d50204d616e6167656d656e7420417263686974656374757265204d49422e +1.3.6.1.2.1.1.9.1.3.4|4x|546865204d4942206d6f64756c6520666f7220534e4d50763220656e746974696573 +1.3.6.1.2.1.1.9.1.3.5|4x|566965772d62617365642041636365737320436f6e74726f6c204d6f64656c20666f7220534e4d502e +1.3.6.1.2.1.1.9.1.3.6|4x|546865204d4942206d6f64756c657320666f72206d616e6167696e6720534e4d50204e6f74696669636174696f6e2c20706c75732066696c746572696e672e +1.3.6.1.2.1.1.9.1.3.7|4x|546865204d4942206d6f64756c6520666f72206c6f6767696e6720534e4d50204e6f74696669636174696f6e732e +1.3.6.1.2.1.1.9.1.3.8|4x|546865204d4942206d6f64756c6520746f2064657363726962652067656e65726963206f626a6563747320666f72206e6574776f726b20696e74657266616365207375622d6c6179657273 +1.3.6.1.2.1.1.9.1.3.9|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e6720495020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.4.1|67|92 +1.3.6.1.2.1.1.9.1.4.2|67|92 +1.3.6.1.2.1.1.9.1.4.3|67|92 +1.3.6.1.2.1.1.9.1.4.4|67|96 +1.3.6.1.2.1.1.9.1.4.5|67|96 +1.3.6.1.2.1.1.9.1.4.6|67|108 +1.3.6.1.2.1.1.9.1.4.7|67|108 +1.3.6.1.2.1.1.9.1.4.8|67|8261 +1.3.6.1.2.1.1.9.1.4.9|67|8266 +1.3.6.1.2.1.2.1.0|2|5 +1.3.6.1.2.1.2.2.1.1.32|2|32 +1.3.6.1.2.1.2.2.1.1.48|2|48 +1.3.6.1.2.1.2.2.1.1.80|2|80 +1.3.6.1.2.1.2.2.1.1.96|2|96 +1.3.6.1.2.1.2.2.1.1.112|2|112 +1.3.6.1.2.1.2.2.1.2.32|4|mgmt +1.3.6.1.2.1.2.2.1.2.48|4x|312e30 +1.3.6.1.2.1.2.2.1.2.80|4x|2f436f6d6d6f6e2f687474702d74756e6e656c +1.3.6.1.2.1.2.2.1.2.96|4x|2f436f6d6d6f6e2f736f636b732d74756e6e656c +1.3.6.1.2.1.2.2.1.2.112|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.2.1.2.2.1.3.32|2|6 +1.3.6.1.2.1.2.2.1.3.48|2|6 +1.3.6.1.2.1.2.2.1.3.80|2|0 +1.3.6.1.2.1.2.2.1.3.96|2|0 +1.3.6.1.2.1.2.2.1.3.112|2|6 +1.3.6.1.2.1.2.2.1.4.32|2|1460 +1.3.6.1.2.1.2.2.1.4.48|2|1460 +1.3.6.1.2.1.2.2.1.4.80|2|0 +1.3.6.1.2.1.2.2.1.4.96|2|0 +1.3.6.1.2.1.2.2.1.4.112|2|1460 +1.3.6.1.2.1.2.2.1.5.32|66|100000000 +1.3.6.1.2.1.2.2.1.5.48|66|4294967295 +1.3.6.1.2.1.2.2.1.5.80|66|0 +1.3.6.1.2.1.2.2.1.5.96|66|0 +1.3.6.1.2.1.2.2.1.5.112|66|4294967295 +1.3.6.1.2.1.2.2.1.6.32|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.48|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.80|4x|42010aa40034 +1.3.6.1.2.1.2.2.1.6.96|4x|42010aa40034 +1.3.6.1.2.1.2.2.1.6.112|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.7.32|2|1 +1.3.6.1.2.1.2.2.1.7.48|2|1 +1.3.6.1.2.1.2.2.1.7.80|2|1 +1.3.6.1.2.1.2.2.1.7.96|2|1 +1.3.6.1.2.1.2.2.1.7.112|2|1 +1.3.6.1.2.1.2.2.1.8.32|2|1 +1.3.6.1.2.1.2.2.1.8.48|2|1 +1.3.6.1.2.1.2.2.1.8.80|2|4 +1.3.6.1.2.1.2.2.1.8.96|2|4 +1.3.6.1.2.1.2.2.1.8.112|2|1 +1.3.6.1.2.1.2.2.1.9.32|67|0 +1.3.6.1.2.1.2.2.1.9.48|67|0 +1.3.6.1.2.1.2.2.1.9.80|67|0 +1.3.6.1.2.1.2.2.1.9.96|67|0 +1.3.6.1.2.1.2.2.1.9.112|67|0 +1.3.6.1.2.1.2.2.1.10.32|65|457067217 +1.3.6.1.2.1.2.2.1.10.48|65|601487263 +1.3.6.1.2.1.2.2.1.10.80|65|0 +1.3.6.1.2.1.2.2.1.10.96|65|0 +1.3.6.1.2.1.2.2.1.10.112|65|392203366 +1.3.6.1.2.1.2.2.1.11.32|65|893580 +1.3.6.1.2.1.2.2.1.11.48|65|762482 +1.3.6.1.2.1.2.2.1.11.80|65|0 +1.3.6.1.2.1.2.2.1.11.96|65|0 +1.3.6.1.2.1.2.2.1.11.112|65|861050 +1.3.6.1.2.1.2.2.1.12.32|65|0 +1.3.6.1.2.1.2.2.1.12.48|65|0 +1.3.6.1.2.1.2.2.1.12.80|65|0 +1.3.6.1.2.1.2.2.1.12.96|65|0 +1.3.6.1.2.1.2.2.1.12.112|65|0 +1.3.6.1.2.1.2.2.1.13.32|65|0 +1.3.6.1.2.1.2.2.1.13.48|65|0 +1.3.6.1.2.1.2.2.1.13.80|65|0 +1.3.6.1.2.1.2.2.1.13.96|65|0 +1.3.6.1.2.1.2.2.1.13.112|65|226244 +1.3.6.1.2.1.2.2.1.14.32|65|0 +1.3.6.1.2.1.2.2.1.14.48|65|0 +1.3.6.1.2.1.2.2.1.14.80|65|0 +1.3.6.1.2.1.2.2.1.14.96|65|0 +1.3.6.1.2.1.2.2.1.14.112|65|0 +1.3.6.1.2.1.2.2.1.15.32|65|0 +1.3.6.1.2.1.2.2.1.15.48|65|0 +1.3.6.1.2.1.2.2.1.15.80|65|0 +1.3.6.1.2.1.2.2.1.15.96|65|0 +1.3.6.1.2.1.2.2.1.15.112|65|0 +1.3.6.1.2.1.2.2.1.16.32|65|308158529 +1.3.6.1.2.1.2.2.1.16.48|65|63659219 +1.3.6.1.2.1.2.2.1.16.80|65|0 +1.3.6.1.2.1.2.2.1.16.96|65|0 +1.3.6.1.2.1.2.2.1.16.112|65|401424438 +1.3.6.1.2.1.2.2.1.17.32|65|736668 +1.3.6.1.2.1.2.2.1.17.48|65|487183 +1.3.6.1.2.1.2.2.1.17.80|65|0 +1.3.6.1.2.1.2.2.1.17.96|65|0 +1.3.6.1.2.1.2.2.1.17.112|65|842310 +1.3.6.1.2.1.2.2.1.18.32|65|0 +1.3.6.1.2.1.2.2.1.18.48|65|0 +1.3.6.1.2.1.2.2.1.18.80|65|0 +1.3.6.1.2.1.2.2.1.18.96|65|0 +1.3.6.1.2.1.2.2.1.18.112|65|0 +1.3.6.1.2.1.2.2.1.19.32|65|0 +1.3.6.1.2.1.2.2.1.19.48|65|0 +1.3.6.1.2.1.2.2.1.19.80|65|0 +1.3.6.1.2.1.2.2.1.19.96|65|0 +1.3.6.1.2.1.2.2.1.19.112|65|0 +1.3.6.1.2.1.2.2.1.20.32|65|0 +1.3.6.1.2.1.2.2.1.20.48|65|0 +1.3.6.1.2.1.2.2.1.20.80|65|0 +1.3.6.1.2.1.2.2.1.20.96|65|0 +1.3.6.1.2.1.2.2.1.20.112|65|0 +1.3.6.1.2.1.2.2.1.21.32|66|0 +1.3.6.1.2.1.2.2.1.21.48|66|0 +1.3.6.1.2.1.2.2.1.21.80|66|0 +1.3.6.1.2.1.2.2.1.21.96|66|0 +1.3.6.1.2.1.2.2.1.21.112|66|0 +1.3.6.1.2.1.2.2.1.22.32|6|0.0 +1.3.6.1.2.1.2.2.1.22.48|6|0.0 +1.3.6.1.2.1.2.2.1.22.80|6|0.0 +1.3.6.1.2.1.2.2.1.22.96|6|0.0 +1.3.6.1.2.1.2.2.1.22.112|6|0.0 +1.3.6.1.2.1.4.1.0|2|2 +1.3.6.1.2.1.4.2.0|2|64 +1.3.6.1.2.1.4.13.0|2|30 +1.3.6.1.2.1.4.20.1.1.10.164.0.51|64x|0aa40033 +1.3.6.1.2.1.4.20.1.2.10.164.0.51|2|32 +1.3.6.1.2.1.4.20.1.3.10.164.0.51|64x|ffffffff +1.3.6.1.2.1.4.20.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.25.0|2|2 +1.3.6.1.2.1.4.26.0|2|64 +1.3.6.1.2.1.4.31.1.1.1.1|2|1 +1.3.6.1.2.1.4.31.1.1.1.2|2|2 +1.3.6.1.2.1.4.31.1.1.3.1|65|8543642 +1.3.6.1.2.1.4.31.1.1.3.2|65|15102 +1.3.6.1.2.1.4.31.1.1.4.1|70|8543642 +1.3.6.1.2.1.4.31.1.1.4.2|70|15102 +1.3.6.1.2.1.4.31.1.1.7.1|65|0 +1.3.6.1.2.1.4.31.1.1.7.2|65|0 +1.3.6.1.2.1.4.31.1.1.14.1|65|0 +1.3.6.1.2.1.4.31.1.1.14.2|65|0 +1.3.6.1.2.1.4.31.1.1.16.1|65|0 +1.3.6.1.2.1.4.31.1.1.16.2|65|0 +1.3.6.1.2.1.4.31.1.1.26.1|65|0 +1.3.6.1.2.1.4.31.1.1.26.2|65|0 +1.3.6.1.2.1.4.31.1.1.28.1|65|0 +1.3.6.1.2.1.4.31.1.1.28.2|65|0 +1.3.6.1.2.1.4.31.1.1.30.1|65|8533411 +1.3.6.1.2.1.4.31.1.1.30.2|65|0 +1.3.6.1.2.1.4.31.1.1.31.1|70|8533411 +1.3.6.1.2.1.4.31.1.1.31.2|70|0 +1.3.6.1.2.1.4.31.1.1.34.1|65|0 +1.3.6.1.2.1.4.31.1.1.34.2|65|15102 +1.3.6.1.2.1.4.31.1.1.35.1|70|0 +1.3.6.1.2.1.4.31.1.1.35.2|70|15102 +1.3.6.1.2.1.4.31.1.1.38.1|65|0 +1.3.6.1.2.1.4.31.1.1.38.2|65|0 +1.3.6.1.2.1.4.31.1.1.39.1|70|0 +1.3.6.1.2.1.4.31.1.1.39.2|70|0 +1.3.6.1.2.1.4.31.1.1.47.1|66|2000 +1.3.6.1.2.1.4.31.1.1.47.2|66|2000 +1.3.6.1.2.1.4.32.1.5.32.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.5.112.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.6.32.1.4.10.164.0.51.32|2|1 +1.3.6.1.2.1.4.32.1.6.112.1.4.10.164.0.51.32|2|1 +1.3.6.1.2.1.4.32.1.7.32.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.7.112.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.8.32.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.32.1.8.112.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.32.1.9.32.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.32.1.9.112.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.33.0|2|459515095 +1.3.6.1.2.1.4.34.1.3.1.4.10.164.0.51|2|32 +1.3.6.1.2.1.4.34.1.4.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.34.1.5.1.4.10.164.0.51|6|1.3.6.1.2.1.4.32.1.5.32.1.4.10.164.0.51.32 +1.3.6.1.2.1.4.34.1.6.1.4.10.164.0.51|2|2 +1.3.6.1.2.1.4.34.1.7.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.34.1.8.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.34.1.9.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.34.1.10.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.34.1.11.1.4.10.164.0.51|2|3 +1.3.6.1.2.1.4.35.1.4.32.1.4.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.4.112.1.4.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.5.32.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.35.1.5.112.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.35.1.6.32.1.4.10.164.0.51|2|4 +1.3.6.1.2.1.4.35.1.6.112.1.4.10.164.0.51|2|4 +1.3.6.1.2.1.4.35.1.7.32.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.35.1.7.112.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.35.1.8.32.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.35.1.8.112.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.5.29.1.2.1|65|0 +1.3.6.1.2.1.5.29.1.2.2|65|15 +1.3.6.1.2.1.5.29.1.3.1|65|0 +1.3.6.1.2.1.5.29.1.3.2|65|35 +1.3.6.1.2.1.5.29.1.4.1|65|0 +1.3.6.1.2.1.5.29.1.4.2|65|30 +1.3.6.1.2.1.5.29.1.5.1|65|0 +1.3.6.1.2.1.5.29.1.5.2|65|0 +1.3.6.1.2.1.11.1.0|65|140759 +1.3.6.1.2.1.11.2.0|65|140662 +1.3.6.1.2.1.11.3.0|65|0 +1.3.6.1.2.1.11.4.0|65|0 +1.3.6.1.2.1.11.5.0|65|0 +1.3.6.1.2.1.11.6.0|65|0 +1.3.6.1.2.1.11.8.0|65|0 +1.3.6.1.2.1.11.9.0|65|0 +1.3.6.1.2.1.11.10.0|65|0 +1.3.6.1.2.1.11.11.0|65|0 +1.3.6.1.2.1.11.12.0|65|0 +1.3.6.1.2.1.11.13.0|65|761321 +1.3.6.1.2.1.11.14.0|65|0 +1.3.6.1.2.1.11.15.0|65|5815 +1.3.6.1.2.1.11.16.0|65|113502 +1.3.6.1.2.1.11.17.0|65|0 +1.3.6.1.2.1.11.18.0|65|0 +1.3.6.1.2.1.11.19.0|65|0 +1.3.6.1.2.1.11.20.0|65|0 +1.3.6.1.2.1.11.21.0|65|0 +1.3.6.1.2.1.11.22.0|65|0 +1.3.6.1.2.1.11.24.0|65|0 +1.3.6.1.2.1.11.25.0|65|0 +1.3.6.1.2.1.11.26.0|65|0 +1.3.6.1.2.1.11.27.0|65|0 +1.3.6.1.2.1.11.28.0|65|140686 +1.3.6.1.2.1.11.29.0|65|0 +1.3.6.1.2.1.11.30.0|2|2 +1.3.6.1.2.1.11.31.0|65|0 +1.3.6.1.2.1.11.32.0|65|0 +1.3.6.1.2.1.25.1.1.0|67|181580115 +1.3.6.1.2.1.25.1.2.0|4x|07e30a15022208002d0700 +1.3.6.1.2.1.25.1.3.0|2|393216 +1.3.6.1.2.1.25.1.4.0|4x|726f20726f6f743d555549443d37313463316461302d646562372d346230332d383830642d34636564383531313965333520636f6e736f6c653d747479302020636f6e736f6c653d74747953302070616e69633d3120706c6174666f726d3d5a3130302064656661756c745f6370755f6f726465722071756965740a +1.3.6.1.2.1.25.1.5.0|66|0 +1.3.6.1.2.1.25.1.6.0|66|190 +1.3.6.1.2.1.25.1.7.0|2|0 +1.3.6.1.2.1.25.2.2.0|2|7660752 +1.3.6.1.2.1.25.2.3.1.1.1|2|1 +1.3.6.1.2.1.25.2.3.1.1.3|2|3 +1.3.6.1.2.1.25.2.3.1.1.6|2|6 +1.3.6.1.2.1.25.2.3.1.1.7|2|7 +1.3.6.1.2.1.25.2.3.1.1.8|2|8 +1.3.6.1.2.1.25.2.3.1.1.10|2|10 +1.3.6.1.2.1.25.2.3.1.1.31|2|31 +1.3.6.1.2.1.25.2.3.1.1.32|2|32 +1.3.6.1.2.1.25.2.3.1.1.37|2|37 +1.3.6.1.2.1.25.2.3.1.1.39|2|39 +1.3.6.1.2.1.25.2.3.1.1.40|2|40 +1.3.6.1.2.1.25.2.3.1.1.44|2|44 +1.3.6.1.2.1.25.2.3.1.1.50|2|50 +1.3.6.1.2.1.25.2.3.1.1.51|2|51 +1.3.6.1.2.1.25.2.3.1.1.52|2|52 +1.3.6.1.2.1.25.2.3.1.1.53|2|53 +1.3.6.1.2.1.25.2.3.1.1.54|2|54 +1.3.6.1.2.1.25.2.3.1.1.55|2|55 +1.3.6.1.2.1.25.2.3.1.1.56|2|56 +1.3.6.1.2.1.25.2.3.1.1.57|2|57 +1.3.6.1.2.1.25.2.3.1.1.58|2|58 +1.3.6.1.2.1.25.2.3.1.1.59|2|59 +1.3.6.1.2.1.25.2.3.1.2.1|6|1.3.6.1.2.1.25.2.1.2 +1.3.6.1.2.1.25.2.3.1.2.3|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.6|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.7|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.8|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.10|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.31|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.32|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.37|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.39|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.40|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.44|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.50|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.51|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.52|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.53|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.54|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.55|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.56|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.57|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.58|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.59|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.3.1|4x|506879736963616c206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.3|4x|5669727475616c206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.6|4x|4d656d6f72792062756666657273 +1.3.6.1.2.1.25.2.3.1.3.7|4x|436163686564206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.8|4x|536861726564206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.10|4x|53776170207370616365 +1.3.6.1.2.1.25.2.3.1.3.31|4x|2f +1.3.6.1.2.1.25.2.3.1.3.32|4x|2f766172 +1.3.6.1.2.1.25.2.3.1.3.37|4x|2f6465762f73686d +1.3.6.1.2.1.25.2.3.1.3.39|4x|2f72756e +1.3.6.1.2.1.25.2.3.1.3.40|4x|2f7379732f66732f6367726f7570 +1.3.6.1.2.1.25.2.3.1.3.44|4x|2f757372 +1.3.6.1.2.1.25.2.3.1.3.50|4x|2f736861726564 +1.3.6.1.2.1.25.2.3.1.3.51|4x|2f7368617265642f7272642e312e32 +1.3.6.1.2.1.25.2.3.1.3.52|4x|2f61707064617461 +1.3.6.1.2.1.25.2.3.1.3.53|4x|2f636f6e666967 +1.3.6.1.2.1.25.2.3.1.3.54|4x|2f7661722f70726f6d7074 +1.3.6.1.2.1.25.2.3.1.3.55|4x|2f7661722f746d73746174 +1.3.6.1.2.1.25.2.3.1.3.56|4x|2f7661722f6c6f67 +1.3.6.1.2.1.25.2.3.1.3.57|4x|2f7661722f6c6f697063 +1.3.6.1.2.1.25.2.3.1.3.58|4x|2f72756e2f757365722f3931 +1.3.6.1.2.1.25.2.3.1.3.59|4x|2f7661722f6e616d65642f6c6962 +1.3.6.1.2.1.25.2.3.1.4.1|2|1024 +1.3.6.1.2.1.25.2.3.1.4.3|2|1024 +1.3.6.1.2.1.25.2.3.1.4.6|2|1024 +1.3.6.1.2.1.25.2.3.1.4.7|2|1024 +1.3.6.1.2.1.25.2.3.1.4.8|2|1024 +1.3.6.1.2.1.25.2.3.1.4.10|2|1024 +1.3.6.1.2.1.25.2.3.1.4.31|2|1024 +1.3.6.1.2.1.25.2.3.1.4.32|2|4096 +1.3.6.1.2.1.25.2.3.1.4.37|2|4096 +1.3.6.1.2.1.25.2.3.1.4.39|2|4096 +1.3.6.1.2.1.25.2.3.1.4.40|2|4096 +1.3.6.1.2.1.25.2.3.1.4.44|2|4096 +1.3.6.1.2.1.25.2.3.1.4.50|2|4096 +1.3.6.1.2.1.25.2.3.1.4.51|2|4096 +1.3.6.1.2.1.25.2.3.1.4.52|2|1024 +1.3.6.1.2.1.25.2.3.1.4.53|2|1024 +1.3.6.1.2.1.25.2.3.1.4.54|2|4096 +1.3.6.1.2.1.25.2.3.1.4.55|2|4096 +1.3.6.1.2.1.25.2.3.1.4.56|2|4096 +1.3.6.1.2.1.25.2.3.1.4.57|2|4096 +1.3.6.1.2.1.25.2.3.1.4.58|2|4096 +1.3.6.1.2.1.25.2.3.1.4.59|2|4096 +1.3.6.1.2.1.25.2.3.1.5.1|2|7660752 +1.3.6.1.2.1.25.2.3.1.5.3|2|8684748 +1.3.6.1.2.1.25.2.3.1.5.6|2|7660752 +1.3.6.1.2.1.25.2.3.1.5.7|2|424284 +1.3.6.1.2.1.25.2.3.1.5.8|2|54064 +1.3.6.1.2.1.25.2.3.1.5.10|2|1023996 +1.3.6.1.2.1.25.2.3.1.5.31|2|428150 +1.3.6.1.2.1.25.2.3.1.5.32|2|235782 +1.3.6.1.2.1.25.2.3.1.5.37|2|957594 +1.3.6.1.2.1.25.2.3.1.5.39|2|957594 +1.3.6.1.2.1.25.2.3.1.5.40|2|957594 +1.3.6.1.2.1.25.2.3.1.5.44|2|1296662 +1.3.6.1.2.1.25.2.3.1.5.50|2|3837692 +1.3.6.1.2.1.25.2.3.1.5.51|2|957594 +1.3.6.1.2.1.25.2.3.1.5.52|2|31729 +1.3.6.1.2.1.25.2.3.1.5.53|2|479716 +1.3.6.1.2.1.25.2.3.1.5.54|2|1024 +1.3.6.1.2.1.25.2.3.1.5.55|2|957594 +1.3.6.1.2.1.25.2.3.1.5.56|2|247878 +1.3.6.1.2.1.25.2.3.1.5.57|2|957594 +1.3.6.1.2.1.25.2.3.1.5.58|2|191519 +1.3.6.1.2.1.25.2.3.1.5.59|2|235782 +1.3.6.1.2.1.25.2.3.1.6.1|2|7572748 +1.3.6.1.2.1.25.2.3.1.6.3|2|8033292 +1.3.6.1.2.1.25.2.3.1.6.6|2|70956 +1.3.6.1.2.1.25.2.3.1.6.7|2|424284 +1.3.6.1.2.1.25.2.3.1.6.8|2|54064 +1.3.6.1.2.1.25.2.3.1.6.10|2|460544 +1.3.6.1.2.1.25.2.3.1.6.31|2|78704 +1.3.6.1.2.1.25.2.3.1.6.32|2|90615 +1.3.6.1.2.1.25.2.3.1.6.37|2|569 +1.3.6.1.2.1.25.2.3.1.6.39|2|511 +1.3.6.1.2.1.25.2.3.1.6.40|2|0 +1.3.6.1.2.1.25.2.3.1.6.44|2|1040421 +1.3.6.1.2.1.25.2.3.1.6.50|2|43151 +1.3.6.1.2.1.25.2.3.1.6.51|2|7937 +1.3.6.1.2.1.25.2.3.1.6.52|2|4516 +1.3.6.1.2.1.25.2.3.1.6.53|2|14722 +1.3.6.1.2.1.25.2.3.1.6.54|2|7 +1.3.6.1.2.1.25.2.3.1.6.55|2|4360 +1.3.6.1.2.1.25.2.3.1.6.56|2|105253 +1.3.6.1.2.1.25.2.3.1.6.57|2|0 +1.3.6.1.2.1.25.2.3.1.6.58|2|0 +1.3.6.1.2.1.25.2.3.1.6.59|2|90615 +1.3.6.1.2.1.25.3.2.1.1.196608|2|196608 +1.3.6.1.2.1.25.3.2.1.1.196609|2|196609 +1.3.6.1.2.1.25.3.2.1.1.786432|2|786432 +1.3.6.1.2.1.25.3.2.1.2.196608|6|1.3.6.1.2.1.25.3.1.3 +1.3.6.1.2.1.25.3.2.1.2.196609|6|1.3.6.1.2.1.25.3.1.3 +1.3.6.1.2.1.25.3.2.1.2.786432|6|1.3.6.1.2.1.25.3.1.12 +1.3.6.1.2.1.25.3.2.1.3.196608|4x|47656e75696e65496e74656c3a20496e74656c2852292058656f6e28522920435055204020322e303047487a +1.3.6.1.2.1.25.3.2.1.3.196609|4x|47656e75696e65496e74656c3a20496e74656c2852292058656f6e28522920435055204020322e303047487a +1.3.6.1.2.1.25.3.2.1.3.786432|4x|4775657373696e6720746861742074686572652773206120666c6f6174696e6720706f696e7420636f2d70726f636573736f72 +1.3.6.1.2.1.25.3.2.1.4.196608|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.196609|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.786432|6|0.0 +1.3.6.1.2.1.25.3.2.1.5.196608|2|2 +1.3.6.1.2.1.25.3.2.1.5.196609|2|2 +1.3.6.1.2.1.25.3.3.1.1.196608|6|0.0 +1.3.6.1.2.1.25.3.3.1.1.196609|6|0.0 +1.3.6.1.2.1.25.3.3.1.2.196608|2|7 +1.3.6.1.2.1.25.3.3.1.2.196609|2|7 +1.3.6.1.2.1.25.3.8.1.1.1|2|1 +1.3.6.1.2.1.25.3.8.1.1.2|2|2 +1.3.6.1.2.1.25.3.8.1.1.7|2|7 +1.3.6.1.2.1.25.3.8.1.1.9|2|9 +1.3.6.1.2.1.25.3.8.1.1.10|2|10 +1.3.6.1.2.1.25.3.8.1.1.14|2|14 +1.3.6.1.2.1.25.3.8.1.1.20|2|20 +1.3.6.1.2.1.25.3.8.1.1.21|2|21 +1.3.6.1.2.1.25.3.8.1.1.22|2|22 +1.3.6.1.2.1.25.3.8.1.1.23|2|23 +1.3.6.1.2.1.25.3.8.1.1.24|2|24 +1.3.6.1.2.1.25.3.8.1.1.25|2|25 +1.3.6.1.2.1.25.3.8.1.1.26|2|26 +1.3.6.1.2.1.25.3.8.1.1.27|2|27 +1.3.6.1.2.1.25.3.8.1.1.28|2|28 +1.3.6.1.2.1.25.3.8.1.1.29|2|29 +1.3.6.1.2.1.25.3.8.1.2.1|4x|2f +1.3.6.1.2.1.25.3.8.1.2.2|4x|2f766172 +1.3.6.1.2.1.25.3.8.1.2.7|4x|2f6465762f73686d +1.3.6.1.2.1.25.3.8.1.2.9|4x|2f72756e +1.3.6.1.2.1.25.3.8.1.2.10|4x|2f7379732f66732f6367726f7570 +1.3.6.1.2.1.25.3.8.1.2.14|4x|2f757372 +1.3.6.1.2.1.25.3.8.1.2.20|4x|2f736861726564 +1.3.6.1.2.1.25.3.8.1.2.21|4x|2f7368617265642f7272642e312e32 +1.3.6.1.2.1.25.3.8.1.2.22|4x|2f61707064617461 +1.3.6.1.2.1.25.3.8.1.2.23|4x|2f636f6e666967 +1.3.6.1.2.1.25.3.8.1.2.24|4x|2f7661722f70726f6d7074 +1.3.6.1.2.1.25.3.8.1.2.25|4x|2f7661722f746d73746174 +1.3.6.1.2.1.25.3.8.1.2.26|4x|2f7661722f6c6f67 +1.3.6.1.2.1.25.3.8.1.2.27|4x|2f7661722f6c6f697063 +1.3.6.1.2.1.25.3.8.1.2.28|4x|2f72756e2f757365722f3931 +1.3.6.1.2.1.25.3.8.1.2.29|4x|2f7661722f6e616d65642f6c6962 +1.3.6.1.2.1.25.3.8.1.3.1|4| +1.3.6.1.2.1.25.3.8.1.3.2|4| +1.3.6.1.2.1.25.3.8.1.3.7|4| +1.3.6.1.2.1.25.3.8.1.3.9|4| +1.3.6.1.2.1.25.3.8.1.3.10|4| +1.3.6.1.2.1.25.3.8.1.3.14|4| +1.3.6.1.2.1.25.3.8.1.3.20|4| +1.3.6.1.2.1.25.3.8.1.3.21|4| +1.3.6.1.2.1.25.3.8.1.3.22|4| +1.3.6.1.2.1.25.3.8.1.3.23|4| +1.3.6.1.2.1.25.3.8.1.3.24|4| +1.3.6.1.2.1.25.3.8.1.3.25|4| +1.3.6.1.2.1.25.3.8.1.3.26|4| +1.3.6.1.2.1.25.3.8.1.3.27|4| +1.3.6.1.2.1.25.3.8.1.3.28|4| +1.3.6.1.2.1.25.3.8.1.3.29|4| +1.3.6.1.2.1.25.3.8.1.4.1|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.2|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.7|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.9|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.10|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.14|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.20|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.21|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.22|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.23|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.24|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.25|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.26|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.27|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.28|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.29|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.5.1|2|1 +1.3.6.1.2.1.25.3.8.1.5.2|2|1 +1.3.6.1.2.1.25.3.8.1.5.7|2|1 +1.3.6.1.2.1.25.3.8.1.5.9|2|1 +1.3.6.1.2.1.25.3.8.1.5.10|2|2 +1.3.6.1.2.1.25.3.8.1.5.14|2|2 +1.3.6.1.2.1.25.3.8.1.5.20|2|1 +1.3.6.1.2.1.25.3.8.1.5.21|2|1 +1.3.6.1.2.1.25.3.8.1.5.22|2|1 +1.3.6.1.2.1.25.3.8.1.5.23|2|1 +1.3.6.1.2.1.25.3.8.1.5.24|2|1 +1.3.6.1.2.1.25.3.8.1.5.25|2|1 +1.3.6.1.2.1.25.3.8.1.5.26|2|1 +1.3.6.1.2.1.25.3.8.1.5.27|2|1 +1.3.6.1.2.1.25.3.8.1.5.28|2|1 +1.3.6.1.2.1.25.3.8.1.5.29|2|1 +1.3.6.1.2.1.25.3.8.1.6.1|2|1 +1.3.6.1.2.1.25.3.8.1.6.2|2|2 +1.3.6.1.2.1.25.3.8.1.6.7|2|2 +1.3.6.1.2.1.25.3.8.1.6.9|2|2 +1.3.6.1.2.1.25.3.8.1.6.10|2|2 +1.3.6.1.2.1.25.3.8.1.6.14|2|2 +1.3.6.1.2.1.25.3.8.1.6.20|2|2 +1.3.6.1.2.1.25.3.8.1.6.21|2|2 +1.3.6.1.2.1.25.3.8.1.6.22|2|2 +1.3.6.1.2.1.25.3.8.1.6.23|2|2 +1.3.6.1.2.1.25.3.8.1.6.24|2|2 +1.3.6.1.2.1.25.3.8.1.6.25|2|2 +1.3.6.1.2.1.25.3.8.1.6.26|2|2 +1.3.6.1.2.1.25.3.8.1.6.27|2|2 +1.3.6.1.2.1.25.3.8.1.6.28|2|2 +1.3.6.1.2.1.25.3.8.1.6.29|2|2 +1.3.6.1.2.1.25.3.8.1.7.1|2|31 +1.3.6.1.2.1.25.3.8.1.7.2|2|32 +1.3.6.1.2.1.25.3.8.1.7.7|2|37 +1.3.6.1.2.1.25.3.8.1.7.9|2|39 +1.3.6.1.2.1.25.3.8.1.7.10|2|40 +1.3.6.1.2.1.25.3.8.1.7.14|2|44 +1.3.6.1.2.1.25.3.8.1.7.20|2|50 +1.3.6.1.2.1.25.3.8.1.7.21|2|51 +1.3.6.1.2.1.25.3.8.1.7.22|2|52 +1.3.6.1.2.1.25.3.8.1.7.23|2|53 +1.3.6.1.2.1.25.3.8.1.7.24|2|54 +1.3.6.1.2.1.25.3.8.1.7.25|2|55 +1.3.6.1.2.1.25.3.8.1.7.26|2|56 +1.3.6.1.2.1.25.3.8.1.7.27|2|57 +1.3.6.1.2.1.25.3.8.1.7.28|2|58 +1.3.6.1.2.1.25.3.8.1.7.29|2|59 +1.3.6.1.2.1.25.3.8.1.8.1|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.2|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.7|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.9|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.10|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.14|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.20|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.21|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.22|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.23|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.24|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.25|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.26|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.27|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.28|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.29|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.1|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.2|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.7|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.9|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.10|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.14|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.20|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.21|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.22|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.23|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.24|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.25|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.26|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.27|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.28|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.29|4x|0000010100000000 +1.3.6.1.2.1.25.4.2.1.1.1|2|1 +1.3.6.1.2.1.25.4.2.1.1.415|2|415 +1.3.6.1.2.1.25.4.2.1.1.440|2|440 +1.3.6.1.2.1.25.4.2.1.1.447|2|447 +1.3.6.1.2.1.25.4.2.1.1.921|2|921 +1.3.6.1.2.1.25.4.2.1.1.951|2|951 +1.3.6.1.2.1.25.4.2.1.1.977|2|977 +1.3.6.1.2.1.25.4.2.1.1.979|2|979 +1.3.6.1.2.1.25.4.2.1.1.982|2|982 +1.3.6.1.2.1.25.4.2.1.1.984|2|984 +1.3.6.1.2.1.25.4.2.1.1.1038|2|1038 +1.3.6.1.2.1.25.4.2.1.1.1826|2|1826 +1.3.6.1.2.1.25.4.2.1.1.2851|2|2851 +1.3.6.1.2.1.25.4.2.1.1.2852|2|2852 +1.3.6.1.2.1.25.4.2.1.1.2919|2|2919 +1.3.6.1.2.1.25.4.2.1.1.3773|2|3773 +1.3.6.1.2.1.25.4.2.1.1.4068|2|4068 +1.3.6.1.2.1.25.4.2.1.1.4085|2|4085 +1.3.6.1.2.1.25.4.2.1.1.4119|2|4119 +1.3.6.1.2.1.25.4.2.1.1.4122|2|4122 +1.3.6.1.2.1.25.4.2.1.1.4212|2|4212 +1.3.6.1.2.1.25.4.2.1.1.4213|2|4213 +1.3.6.1.2.1.25.4.2.1.1.4214|2|4214 +1.3.6.1.2.1.25.4.2.1.1.4215|2|4215 +1.3.6.1.2.1.25.4.2.1.1.4216|2|4216 +1.3.6.1.2.1.25.4.2.1.1.4217|2|4217 +1.3.6.1.2.1.25.4.2.1.1.4218|2|4218 +1.3.6.1.2.1.25.4.2.1.1.4219|2|4219 +1.3.6.1.2.1.25.4.2.1.1.4220|2|4220 +1.3.6.1.2.1.25.4.2.1.1.4221|2|4221 +1.3.6.1.2.1.25.4.2.1.1.4222|2|4222 +1.3.6.1.2.1.25.4.2.1.1.4224|2|4224 +1.3.6.1.2.1.25.4.2.1.1.4226|2|4226 +1.3.6.1.2.1.25.4.2.1.1.4434|2|4434 +1.3.6.1.2.1.25.4.2.1.1.4435|2|4435 +1.3.6.1.2.1.25.4.2.1.1.4436|2|4436 +1.3.6.1.2.1.25.4.2.1.1.4437|2|4437 +1.3.6.1.2.1.25.4.2.1.1.4438|2|4438 +1.3.6.1.2.1.25.4.2.1.1.4439|2|4439 +1.3.6.1.2.1.25.4.2.1.1.4440|2|4440 +1.3.6.1.2.1.25.4.2.1.1.4441|2|4441 +1.3.6.1.2.1.25.4.2.1.1.4442|2|4442 +1.3.6.1.2.1.25.4.2.1.1.4443|2|4443 +1.3.6.1.2.1.25.4.2.1.1.4451|2|4451 +1.3.6.1.2.1.25.4.2.1.1.4773|2|4773 +1.3.6.1.2.1.25.4.2.1.1.4774|2|4774 +1.3.6.1.2.1.25.4.2.1.1.4775|2|4775 +1.3.6.1.2.1.25.4.2.1.1.4776|2|4776 +1.3.6.1.2.1.25.4.2.1.1.4777|2|4777 +1.3.6.1.2.1.25.4.2.1.1.4778|2|4778 +1.3.6.1.2.1.25.4.2.1.1.4779|2|4779 +1.3.6.1.2.1.25.4.2.1.1.4780|2|4780 +1.3.6.1.2.1.25.4.2.1.1.4781|2|4781 +1.3.6.1.2.1.25.4.2.1.1.4782|2|4782 +1.3.6.1.2.1.25.4.2.1.1.4784|2|4784 +1.3.6.1.2.1.25.4.2.1.1.4786|2|4786 +1.3.6.1.2.1.25.4.2.1.1.4787|2|4787 +1.3.6.1.2.1.25.4.2.1.1.5137|2|5137 +1.3.6.1.2.1.25.4.2.1.1.5138|2|5138 +1.3.6.1.2.1.25.4.2.1.1.5139|2|5139 +1.3.6.1.2.1.25.4.2.1.1.5140|2|5140 +1.3.6.1.2.1.25.4.2.1.1.5141|2|5141 +1.3.6.1.2.1.25.4.2.1.1.5142|2|5142 +1.3.6.1.2.1.25.4.2.1.1.5143|2|5143 +1.3.6.1.2.1.25.4.2.1.1.5144|2|5144 +1.3.6.1.2.1.25.4.2.1.1.5145|2|5145 +1.3.6.1.2.1.25.4.2.1.1.5146|2|5146 +1.3.6.1.2.1.25.4.2.1.1.5148|2|5148 +1.3.6.1.2.1.25.4.2.1.1.5151|2|5151 +1.3.6.1.2.1.25.4.2.1.1.5155|2|5155 +1.3.6.1.2.1.25.4.2.1.1.5159|2|5159 +1.3.6.1.2.1.25.4.2.1.1.5501|2|5501 +1.3.6.1.2.1.25.4.2.1.1.5502|2|5502 +1.3.6.1.2.1.25.4.2.1.1.5503|2|5503 +1.3.6.1.2.1.25.4.2.1.1.5504|2|5504 +1.3.6.1.2.1.25.4.2.1.1.5505|2|5505 +1.3.6.1.2.1.25.4.2.1.1.5506|2|5506 +1.3.6.1.2.1.25.4.2.1.1.5507|2|5507 +1.3.6.1.2.1.25.4.2.1.1.5508|2|5508 +1.3.6.1.2.1.25.4.2.1.1.5509|2|5509 +1.3.6.1.2.1.25.4.2.1.1.5510|2|5510 +1.3.6.1.2.1.25.4.2.1.1.5516|2|5516 +1.3.6.1.2.1.25.4.2.1.1.5522|2|5522 +1.3.6.1.2.1.25.4.2.1.1.5861|2|5861 +1.3.6.1.2.1.25.4.2.1.1.5862|2|5862 +1.3.6.1.2.1.25.4.2.1.1.5863|2|5863 +1.3.6.1.2.1.25.4.2.1.1.5864|2|5864 +1.3.6.1.2.1.25.4.2.1.1.5865|2|5865 +1.3.6.1.2.1.25.4.2.1.1.5866|2|5866 +1.3.6.1.2.1.25.4.2.1.1.5867|2|5867 +1.3.6.1.2.1.25.4.2.1.1.5868|2|5868 +1.3.6.1.2.1.25.4.2.1.1.5869|2|5869 +1.3.6.1.2.1.25.4.2.1.1.5870|2|5870 +1.3.6.1.2.1.25.4.2.1.1.5872|2|5872 +1.3.6.1.2.1.25.4.2.1.1.5875|2|5875 +1.3.6.1.2.1.25.4.2.1.1.5878|2|5878 +1.3.6.1.2.1.25.4.2.1.1.5879|2|5879 +1.3.6.1.2.1.25.4.2.1.1.5884|2|5884 +1.3.6.1.2.1.25.4.2.1.1.6344|2|6344 +1.3.6.1.2.1.25.4.2.1.1.6345|2|6345 +1.3.6.1.2.1.25.4.2.1.1.6346|2|6346 +1.3.6.1.2.1.25.4.2.1.1.6347|2|6347 +1.3.6.1.2.1.25.4.2.1.1.6348|2|6348 +1.3.6.1.2.1.25.4.2.1.1.6349|2|6349 +1.3.6.1.2.1.25.4.2.1.1.6350|2|6350 +1.3.6.1.2.1.25.4.2.1.1.6351|2|6351 +1.3.6.1.2.1.25.4.2.1.1.6352|2|6352 +1.3.6.1.2.1.25.4.2.1.1.6353|2|6353 +1.3.6.1.2.1.25.4.2.1.1.6358|2|6358 +1.3.6.1.2.1.25.4.2.1.1.6366|2|6366 +1.3.6.1.2.1.25.4.2.1.1.6763|2|6763 +1.3.6.1.2.1.25.4.2.1.1.6764|2|6764 +1.3.6.1.2.1.25.4.2.1.1.6765|2|6765 +1.3.6.1.2.1.25.4.2.1.1.6766|2|6766 +1.3.6.1.2.1.25.4.2.1.1.6767|2|6767 +1.3.6.1.2.1.25.4.2.1.1.6768|2|6768 +1.3.6.1.2.1.25.4.2.1.1.6769|2|6769 +1.3.6.1.2.1.25.4.2.1.1.6770|2|6770 +1.3.6.1.2.1.25.4.2.1.1.6771|2|6771 +1.3.6.1.2.1.25.4.2.1.1.6772|2|6772 +1.3.6.1.2.1.25.4.2.1.1.6782|2|6782 +1.3.6.1.2.1.25.4.2.1.1.6784|2|6784 +1.3.6.1.2.1.25.4.2.1.1.7174|2|7174 +1.3.6.1.2.1.25.4.2.1.1.7175|2|7175 +1.3.6.1.2.1.25.4.2.1.1.7176|2|7176 +1.3.6.1.2.1.25.4.2.1.1.7177|2|7177 +1.3.6.1.2.1.25.4.2.1.1.7178|2|7178 +1.3.6.1.2.1.25.4.2.1.1.7179|2|7179 +1.3.6.1.2.1.25.4.2.1.1.7180|2|7180 +1.3.6.1.2.1.25.4.2.1.1.7181|2|7181 +1.3.6.1.2.1.25.4.2.1.1.7182|2|7182 +1.3.6.1.2.1.25.4.2.1.1.7183|2|7183 +1.3.6.1.2.1.25.4.2.1.1.7188|2|7188 +1.3.6.1.2.1.25.4.2.1.1.7192|2|7192 +1.3.6.1.2.1.25.4.2.1.1.7194|2|7194 +1.3.6.1.2.1.25.4.2.1.1.7196|2|7196 +1.3.6.1.2.1.25.4.2.1.1.7523|2|7523 +1.3.6.1.2.1.25.4.2.1.1.7524|2|7524 +1.3.6.1.2.1.25.4.2.1.1.7525|2|7525 +1.3.6.1.2.1.25.4.2.1.1.7526|2|7526 +1.3.6.1.2.1.25.4.2.1.1.7527|2|7527 +1.3.6.1.2.1.25.4.2.1.1.7528|2|7528 +1.3.6.1.2.1.25.4.2.1.1.7529|2|7529 +1.3.6.1.2.1.25.4.2.1.1.7530|2|7530 +1.3.6.1.2.1.25.4.2.1.1.7531|2|7531 +1.3.6.1.2.1.25.4.2.1.1.7532|2|7532 +1.3.6.1.2.1.25.4.2.1.1.7535|2|7535 +1.3.6.1.2.1.25.4.2.1.1.7539|2|7539 +1.3.6.1.2.1.25.4.2.1.1.7543|2|7543 +1.3.6.1.2.1.25.4.2.1.1.7544|2|7544 +1.3.6.1.2.1.25.4.2.1.1.7949|2|7949 +1.3.6.1.2.1.25.4.2.1.1.7950|2|7950 +1.3.6.1.2.1.25.4.2.1.1.7951|2|7951 +1.3.6.1.2.1.25.4.2.1.1.7952|2|7952 +1.3.6.1.2.1.25.4.2.1.1.7953|2|7953 +1.3.6.1.2.1.25.4.2.1.1.7954|2|7954 +1.3.6.1.2.1.25.4.2.1.1.9526|2|9526 +1.3.6.1.2.1.25.4.2.1.1.9602|2|9602 +1.3.6.1.2.1.25.4.2.1.1.11784|2|11784 +1.3.6.1.2.1.25.4.2.1.1.13563|2|13563 +1.3.6.1.2.1.25.4.2.1.1.13565|2|13565 +1.3.6.1.2.1.25.4.2.1.1.13566|2|13566 +1.3.6.1.2.1.25.4.2.1.1.15387|2|15387 +1.3.6.1.2.1.25.4.2.1.1.15921|2|15921 +1.3.6.1.2.1.25.4.2.1.1.16645|2|16645 +1.3.6.1.2.1.25.4.2.1.1.16646|2|16646 +1.3.6.1.2.1.25.4.2.1.1.16648|2|16648 +1.3.6.1.2.1.25.4.2.1.1.16651|2|16651 +1.3.6.1.2.1.25.4.2.1.1.16652|2|16652 +1.3.6.1.2.1.25.4.2.1.1.16653|2|16653 +1.3.6.1.2.1.25.4.2.1.1.16654|2|16654 +1.3.6.1.2.1.25.4.2.1.1.17900|2|17900 +1.3.6.1.2.1.25.4.2.1.1.18651|2|18651 +1.3.6.1.2.1.25.4.2.1.1.23175|2|23175 +1.3.6.1.2.1.25.4.2.1.1.23330|2|23330 +1.3.6.1.2.1.25.4.2.1.1.24570|2|24570 +1.3.6.1.2.1.25.4.2.1.1.25514|2|25514 +1.3.6.1.2.1.25.4.2.1.1.25517|2|25517 +1.3.6.1.2.1.25.4.2.1.1.25518|2|25518 +1.3.6.1.2.1.25.4.2.1.1.25522|2|25522 +1.3.6.1.2.1.25.4.2.1.1.25524|2|25524 +1.3.6.1.2.1.25.4.2.1.1.25531|2|25531 +1.3.6.1.2.1.25.4.2.1.1.25946|2|25946 +1.3.6.1.2.1.25.4.2.1.1.27567|2|27567 +1.3.6.1.2.1.25.4.2.1.1.29431|2|29431 +1.3.6.1.2.1.25.4.2.1.1.29439|2|29439 +1.3.6.1.2.1.25.4.2.1.1.29440|2|29440 +1.3.6.1.2.1.25.4.2.1.1.30092|2|30092 +1.3.6.1.2.1.25.4.2.1.1.30120|2|30120 +1.3.6.1.2.1.25.4.2.1.1.31793|2|31793 +1.3.6.1.2.1.25.4.2.1.2.1|4|systemd +1.3.6.1.2.1.25.4.2.1.2.415|4x|73797374656d642d6a6f75726e616c +1.3.6.1.2.1.25.4.2.1.2.440|4|lvmetad +1.3.6.1.2.1.25.4.2.1.2.447|4x|73797374656d642d7564657664 +1.3.6.1.2.1.25.4.2.1.2.921|4x|6a6974746572656e74726f70792d72 +1.3.6.1.2.1.25.4.2.1.2.951|4|auditd +1.3.6.1.2.1.25.4.2.1.2.977|4x|646275732d6461656d6f6e +1.3.6.1.2.1.25.4.2.1.2.979|4|acpid +1.3.6.1.2.1.25.4.2.1.2.982|4|irqbalance +1.3.6.1.2.1.25.4.2.1.2.984|4x|73797374656d642d6c6f67696e64 +1.3.6.1.2.1.25.4.2.1.2.1038|4x|696e6372656173655f656e74726f70 +1.3.6.1.2.1.25.4.2.1.2.1826|4x|7379736c6f672d6e67 +1.3.6.1.2.1.25.4.2.1.2.2851|4|crond +1.3.6.1.2.1.25.4.2.1.2.2852|4|promptstatusd +1.3.6.1.2.1.25.4.2.1.2.2919|4|overdog +1.3.6.1.2.1.25.4.2.1.2.3773|4|sshd +1.3.6.1.2.1.25.4.2.1.2.4068|4|httpd +1.3.6.1.2.1.25.4.2.1.2.4085|4|runsvdir +1.3.6.1.2.1.25.4.2.1.2.4119|4|agetty +1.3.6.1.2.1.25.4.2.1.2.4122|4|agetty +1.3.6.1.2.1.25.4.2.1.2.4212|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4213|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4214|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4215|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4216|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4217|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4218|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4219|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4220|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4221|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4222|4|eventd +1.3.6.1.2.1.25.4.2.1.2.4224|4x|72756e736d315f6e616d6564 +1.3.6.1.2.1.25.4.2.1.2.4226|4|wccpd +1.3.6.1.2.1.25.4.2.1.2.4434|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4435|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4436|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4437|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4438|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4439|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4440|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4441|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4442|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4443|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4451|4|scriptd +1.3.6.1.2.1.25.4.2.1.2.4773|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4774|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4775|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4776|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4777|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4778|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4779|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4780|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4781|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4782|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4784|4|tmrouted +1.3.6.1.2.1.25.4.2.1.2.4786|4|tamd +1.3.6.1.2.1.25.4.2.1.2.4787|4|alertd +1.3.6.1.2.1.25.4.2.1.2.5137|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5138|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5139|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5140|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5141|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5142|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5143|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5144|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5145|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5146|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5148|4|evrouted +1.3.6.1.2.1.25.4.2.1.2.5151|4|big3d +1.3.6.1.2.1.25.4.2.1.2.5155|4|csyncd +1.3.6.1.2.1.25.4.2.1.2.5159|4|syscalld +1.3.6.1.2.1.25.4.2.1.2.5501|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5502|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5503|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5504|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5505|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5506|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5507|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5508|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5509|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5510|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5516|4|errdefsd +1.3.6.1.2.1.25.4.2.1.2.5522|4|logstatd +1.3.6.1.2.1.25.4.2.1.2.5861|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5862|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5863|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5864|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5865|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5866|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5867|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5868|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5869|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5870|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5872|4|chmand +1.3.6.1.2.1.25.4.2.1.2.5875|4x|6963725f6576656e7464 +1.3.6.1.2.1.25.4.2.1.2.5878|4|mcpd +1.3.6.1.2.1.25.4.2.1.2.5879|4|statsd +1.3.6.1.2.1.25.4.2.1.2.5884|4|zxfrd +1.3.6.1.2.1.25.4.2.1.2.6344|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6345|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6346|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6347|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6348|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6349|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6350|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6351|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6352|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6353|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6358|4|merged +1.3.6.1.2.1.25.4.2.1.2.6366|4|dynconfd +1.3.6.1.2.1.25.4.2.1.2.6763|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6764|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6765|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6766|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6767|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6768|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6769|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6770|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6771|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6772|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6782|4x|676f6f676c655f6163636f756e7473 +1.3.6.1.2.1.25.4.2.1.2.6784|4|keymgmtd +1.3.6.1.2.1.25.4.2.1.2.7174|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7175|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7176|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7177|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7178|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7179|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7180|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7181|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7182|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7183|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7188|4|java +1.3.6.1.2.1.25.4.2.1.2.7192|4|lacpd +1.3.6.1.2.1.25.4.2.1.2.7194|4|devmgmtd +1.3.6.1.2.1.25.4.2.1.2.7196|4|cbrd +1.3.6.1.2.1.25.4.2.1.2.7523|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7524|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7525|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7526|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7527|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7528|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7529|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7530|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7531|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7532|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7535|4|lind +1.3.6.1.2.1.25.4.2.1.2.7539|4|sod +1.3.6.1.2.1.25.4.2.1.2.7543|4x|73666c6f775f6167656e74 +1.3.6.1.2.1.25.4.2.1.2.7544|4x|66352d726573742d6e6f6465 +1.3.6.1.2.1.25.4.2.1.2.7949|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7950|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7951|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7952|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7953|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7954|4|runsv +1.3.6.1.2.1.25.4.2.1.2.9526|4|dhclient +1.3.6.1.2.1.25.4.2.1.2.9602|4|dhclient +1.3.6.1.2.1.25.4.2.1.2.11784|4|su +1.3.6.1.2.1.25.4.2.1.2.13563|4|httpd +1.3.6.1.2.1.25.4.2.1.2.13565|4|httpd +1.3.6.1.2.1.25.4.2.1.2.13566|4|httpd +1.3.6.1.2.1.25.4.2.1.2.15387|4|ntpd +1.3.6.1.2.1.25.4.2.1.2.15921|4|java +1.3.6.1.2.1.25.4.2.1.2.16645|4|logger +1.3.6.1.2.1.25.4.2.1.2.16646|4|logger +1.3.6.1.2.1.25.4.2.1.2.16648|4|httpd +1.3.6.1.2.1.25.4.2.1.2.16651|4|mcpq +1.3.6.1.2.1.25.4.2.1.2.16652|4|rrdstats +1.3.6.1.2.1.25.4.2.1.2.16653|4|rtstats +1.3.6.1.2.1.25.4.2.1.2.16654|4x|69436f6e74726f6c506f7274616c2e +1.3.6.1.2.1.25.4.2.1.2.17900|4|named +1.3.6.1.2.1.25.4.2.1.2.18651|4x|696372645f6368696c64 +1.3.6.1.2.1.25.4.2.1.2.23175|4|rrdshim +1.3.6.1.2.1.25.4.2.1.2.23330|4|snmpd +1.3.6.1.2.1.25.4.2.1.2.24570|4|agetty +1.3.6.1.2.1.25.4.2.1.2.25514|4|pccd +1.3.6.1.2.1.25.4.2.1.2.25517|4|tmipsecd +1.3.6.1.2.1.25.4.2.1.2.25518|4x|746d6d2e7374617274 +1.3.6.1.2.1.25.4.2.1.2.25522|4x|6d676d745f61636c64 +1.3.6.1.2.1.25.4.2.1.2.25524|4|vxland +1.3.6.1.2.1.25.4.2.1.2.25531|4|iprepd +1.3.6.1.2.1.25.4.2.1.2.25946|4|bigd +1.3.6.1.2.1.25.4.2.1.2.27567|4|ntlmconnpool +1.3.6.1.2.1.25.4.2.1.2.29431|4|httpd +1.3.6.1.2.1.25.4.2.1.2.29439|4|httpd +1.3.6.1.2.1.25.4.2.1.2.29440|4|httpd +1.3.6.1.2.1.25.4.2.1.2.30092|4x|746d6d2e30 +1.3.6.1.2.1.25.4.2.1.2.30120|4|racoon +1.3.6.1.2.1.25.4.2.1.2.31793|4x|61756469745f666f72776172646572 +1.3.6.1.2.1.25.4.2.1.3.1|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.415|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.440|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.447|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.921|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.951|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.977|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.979|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.982|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.984|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.1038|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.1826|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.2851|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.2852|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.2919|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.3773|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4068|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4085|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4119|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4122|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4212|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4213|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4214|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4215|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4216|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4217|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4218|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4219|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4220|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4221|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4222|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4224|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4226|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4434|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4435|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4436|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4437|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4438|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4439|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4440|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4441|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4442|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4443|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4451|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4773|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4774|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4775|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4776|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4777|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4778|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4779|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4780|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4781|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4782|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4784|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4786|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4787|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5137|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5138|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5139|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5140|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5141|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5142|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5143|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5144|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5145|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5146|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5148|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5151|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5155|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5159|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5501|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5502|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5503|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5504|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5505|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5506|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5507|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5508|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5509|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5510|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5516|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5522|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5861|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5862|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5863|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5864|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5865|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5866|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5867|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5868|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5869|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5870|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5872|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5875|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5878|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5879|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5884|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6344|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6345|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6346|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6347|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6348|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6349|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6350|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6351|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6352|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6353|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6358|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6366|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6763|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6764|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6765|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6766|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6767|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6768|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6769|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6770|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6771|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6772|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6782|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6784|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7174|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7175|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7176|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7177|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7178|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7179|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7180|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7181|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7182|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7183|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7188|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7192|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7194|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7196|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7523|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7524|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7525|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7526|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7527|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7528|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7529|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7530|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7531|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7532|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7535|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7539|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7543|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7544|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7949|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7950|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7951|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7952|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7953|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7954|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.9526|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.9602|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.11784|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.13563|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.13565|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.13566|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.15387|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.15921|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16645|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16646|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16648|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16651|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16652|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16653|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16654|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.17900|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.18651|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.23175|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.23330|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.24570|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25514|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25517|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25518|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25522|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25524|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25531|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25946|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.27567|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.29431|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.29439|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.29440|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.30092|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.30120|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.31793|6|0.0 +1.3.6.1.2.1.25.4.2.1.4.1|4x|2f7573722f6c69622f73797374656d642f73797374656d64 +1.3.6.1.2.1.25.4.2.1.4.415|4x|2f7573722f6c69622f73797374656d642f73797374656d642d6a6f75726e616c64 +1.3.6.1.2.1.25.4.2.1.4.440|4x|2f7573722f7362696e2f6c766d65746164 +1.3.6.1.2.1.25.4.2.1.4.447|4x|2f7573722f6c69622f73797374656d642f73797374656d642d7564657664 +1.3.6.1.2.1.25.4.2.1.4.921|4x|2f7573722f7362696e2f6a6974746572656e74726f70792d726e6764 +1.3.6.1.2.1.25.4.2.1.4.951|4x|2f7362696e2f617564697464 +1.3.6.1.2.1.25.4.2.1.4.977|4x|2f62696e2f646275732d6461656d6f6e +1.3.6.1.2.1.25.4.2.1.4.979|4x|2f7573722f7362696e2f6163706964 +1.3.6.1.2.1.25.4.2.1.4.982|4x|2f7573722f7362696e2f69727162616c616e6365 +1.3.6.1.2.1.25.4.2.1.4.984|4x|2f7573722f6c69622f73797374656d642f73797374656d642d6c6f67696e64 +1.3.6.1.2.1.25.4.2.1.4.1038|4x|696e6372656173655f656e74726f7079 +1.3.6.1.2.1.25.4.2.1.4.1826|4x|2f7573722f7362696e2f7379736c6f672d6e67 +1.3.6.1.2.1.25.4.2.1.4.2851|4x|2f7573722f7362696e2f63726f6e64 +1.3.6.1.2.1.25.4.2.1.4.2852|4x|2f62696e2f70726f6d707473746174757364 +1.3.6.1.2.1.25.4.2.1.4.2919|4x|2f7573722f62696e2f6f766572646f67 +1.3.6.1.2.1.25.4.2.1.4.3773|4x|2f7573722f7362696e2f73736864 +1.3.6.1.2.1.25.4.2.1.4.4068|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.4085|4|runsvdir +1.3.6.1.2.1.25.4.2.1.4.4119|4x|2f7362696e2f616765747479 +1.3.6.1.2.1.25.4.2.1.4.4122|4x|2f7362696e2f616765747479 +1.3.6.1.2.1.25.4.2.1.4.4212|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4213|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4214|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4215|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4216|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4217|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4218|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4219|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4220|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4221|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4222|4x|2f7573722f62696e2f6576656e7464 +1.3.6.1.2.1.25.4.2.1.4.4224|4x|2f7362696e2f72756e736d315f6e616d6564 +1.3.6.1.2.1.25.4.2.1.4.4226|4x|2f7573722f62696e2f7763637064 +1.3.6.1.2.1.25.4.2.1.4.4434|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4435|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4436|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4437|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4438|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4439|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4440|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4441|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4442|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4443|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4451|4x|2f7573722f62696e2f73637269707464 +1.3.6.1.2.1.25.4.2.1.4.4773|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4774|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4775|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4776|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4777|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4778|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4779|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4780|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4781|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4782|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4784|4x|2f7573722f62696e2f746d726f75746564 +1.3.6.1.2.1.25.4.2.1.4.4786|4x|2f7573722f62696e2f74616d64 +1.3.6.1.2.1.25.4.2.1.4.4787|4x|2f7573722f7362696e2f616c65727464 +1.3.6.1.2.1.25.4.2.1.4.5137|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5138|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5139|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5140|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5141|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5142|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5143|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5144|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5145|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5146|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5148|4x|2f7573722f62696e2f6576726f75746564 +1.3.6.1.2.1.25.4.2.1.4.5151|4x|2f7368617265642f62696e2f6269673364 +1.3.6.1.2.1.25.4.2.1.4.5155|4x|2f7573722f62696e2f6373796e6364 +1.3.6.1.2.1.25.4.2.1.4.5159|4x|2f7573722f62696e2f73797363616c6c64 +1.3.6.1.2.1.25.4.2.1.4.5501|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5502|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5503|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5504|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5505|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5506|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5507|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5508|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5509|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5510|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5516|4x|2f7573722f62696e2f6572726465667364 +1.3.6.1.2.1.25.4.2.1.4.5522|4x|2f7573722f7362696e2f6c6f677374617464 +1.3.6.1.2.1.25.4.2.1.4.5861|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5862|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5863|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5864|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5865|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5866|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5867|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5868|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5869|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5870|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5872|4x|2f7573722f62696e2f63686d616e64 +1.3.6.1.2.1.25.4.2.1.4.5875|4x|2f7573722f62696e2f6963725f6576656e7464 +1.3.6.1.2.1.25.4.2.1.4.5878|4x|2f7573722f62696e2f6d637064 +1.3.6.1.2.1.25.4.2.1.4.5879|4x|2f7573722f62696e2f737461747364 +1.3.6.1.2.1.25.4.2.1.4.5884|4x|2f7573722f62696e2f7a78667264 +1.3.6.1.2.1.25.4.2.1.4.6344|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6345|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6346|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6347|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6348|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6349|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6350|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6351|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6352|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6353|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6358|4x|2f7573722f62696e2f6d6572676564 +1.3.6.1.2.1.25.4.2.1.4.6366|4x|2f7573722f62696e2f64796e636f6e6664 +1.3.6.1.2.1.25.4.2.1.4.6763|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6764|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6765|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6766|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6767|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6768|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6769|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6770|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6771|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6772|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6782|4x|2f7573722f62696e2f707974686f6e +1.3.6.1.2.1.25.4.2.1.4.6784|4x|2f7573722f62696e2f6b65796d676d7464 +1.3.6.1.2.1.25.4.2.1.4.7174|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7175|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7176|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7177|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7178|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7179|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7180|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7181|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7182|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7183|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7188|4x|2f7573722f6c69622f6a766d2f6a72652f62696e2f6a617661 +1.3.6.1.2.1.25.4.2.1.4.7192|4x|2f7573722f62696e2f6c61637064 +1.3.6.1.2.1.25.4.2.1.4.7194|4x|2f7573722f62696e2f6465766d676d7464 +1.3.6.1.2.1.25.4.2.1.4.7196|4x|2f7573722f73686172652f6362722f62696e2f63627264 +1.3.6.1.2.1.25.4.2.1.4.7523|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7524|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7525|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7526|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7527|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7528|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7529|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7530|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7531|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7532|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7535|4x|2f7573722f62696e2f6c696e64 +1.3.6.1.2.1.25.4.2.1.4.7539|4x|2f7573722f62696e2f736f64 +1.3.6.1.2.1.25.4.2.1.4.7543|4x|2f7573722f7362696e2f73666c6f775f6167656e74 +1.3.6.1.2.1.25.4.2.1.4.7544|4x|2f7573722f62696e2f66352d726573742d6e6f6465 +1.3.6.1.2.1.25.4.2.1.4.7949|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7950|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7951|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7952|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7953|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7954|4|runsv +1.3.6.1.2.1.25.4.2.1.4.9526|4x|2f7362696e2f6468636c69656e74 +1.3.6.1.2.1.25.4.2.1.4.9602|4x|2f7362696e2f6468636c69656e74 +1.3.6.1.2.1.25.4.2.1.4.11784|4|su +1.3.6.1.2.1.25.4.2.1.4.13563|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.13565|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.13566|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.15387|4|ntpd +1.3.6.1.2.1.25.4.2.1.4.15921|4x|2f7573722f6c69622f6a766d2f6a72652f62696e2f6a617661 +1.3.6.1.2.1.25.4.2.1.4.16645|4x|2f7573722f62696e2f6c6f67676572 +1.3.6.1.2.1.25.4.2.1.4.16646|4x|2f7573722f62696e2f6c6f67676572 +1.3.6.1.2.1.25.4.2.1.4.16648|4x|2f7573722f7362696e2f666367692d +1.3.6.1.2.1.25.4.2.1.4.16651|4x|2f7573722f6c6f63616c2f7777772f6d6370712f6d637071 +1.3.6.1.2.1.25.4.2.1.4.16652|4x|2f7573722f6c6f63616c2f7777772f72726473746174732f7272647374617473 +1.3.6.1.2.1.25.4.2.1.4.16653|4x|2f7573722f6c6f63616c2f7777772f727473746174732f72747374617473 +1.3.6.1.2.1.25.4.2.1.4.16654|4x|2f7573722f6c6f63616c2f7777772f69436f6e74726f6c2f69436f6e74726f6c506f7274616c2e636769 +1.3.6.1.2.1.25.4.2.1.4.17900|4x|2f7573722f7362696e2f6e616d6564 +1.3.6.1.2.1.25.4.2.1.4.18651|4x|696372645f6368696c64 +1.3.6.1.2.1.25.4.2.1.4.23175|4x|2f7573722f7362696e2f7272647368696d +1.3.6.1.2.1.25.4.2.1.4.23330|4x|2f7573722f7362696e2f736e6d7064 +1.3.6.1.2.1.25.4.2.1.4.24570|4x|2f7362696e2f616765747479 +1.3.6.1.2.1.25.4.2.1.4.25514|4x|2f7573722f62696e2f70636364 +1.3.6.1.2.1.25.4.2.1.4.25517|4x|2f7573722f62696e2f746d697073656364 +1.3.6.1.2.1.25.4.2.1.4.25518|4x|2f6574632f62696773746172742f736372697074732f746d6d2e7374617274 +1.3.6.1.2.1.25.4.2.1.4.25522|4x|2f7573722f62696e2f6d676d745f61636c64 +1.3.6.1.2.1.25.4.2.1.4.25524|4x|2f7573722f62696e2f76786c616e64 +1.3.6.1.2.1.25.4.2.1.4.25531|4x|2f7573722f73686172652f6970726570642f62696e2f697072657064 +1.3.6.1.2.1.25.4.2.1.4.25946|4|bigd +1.3.6.1.2.1.25.4.2.1.4.27567|4x|2f7573722f7362696e2f6e746c6d636f6e6e706f6f6c +1.3.6.1.2.1.25.4.2.1.4.29431|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.29439|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.29440|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.30092|4x|746d6d2e30 +1.3.6.1.2.1.25.4.2.1.4.30120|4x|2f7573722f7362696e2f7261636f6f6e +1.3.6.1.2.1.25.4.2.1.4.31793|4x|2f7573722f62696e2f61756469745f666f72776172646572 +1.3.6.1.2.1.25.4.2.1.5.1|4x|2d2d73776974636865642d726f6f74202d2d73797374656d202d2d646573657269616c697a65203230 +1.3.6.1.2.1.25.4.2.1.5.415|4| +1.3.6.1.2.1.25.4.2.1.5.440|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.447|4| +1.3.6.1.2.1.25.4.2.1.5.921|4| +1.3.6.1.2.1.25.4.2.1.5.951|4x|2d6e +1.3.6.1.2.1.25.4.2.1.5.977|4x|2d2d73797374656d202d2d616464726573733d73797374656d643a202d2d6e6f666f726b202d2d6e6f70696466696c65202d2d73797374656d642d61637469766174696f6e +1.3.6.1.2.1.25.4.2.1.5.979|4| +1.3.6.1.2.1.25.4.2.1.5.982|4x|2d2d666f726567726f756e64 +1.3.6.1.2.1.25.4.2.1.5.984|4| +1.3.6.1.2.1.25.4.2.1.5.1038|4x|2d64202d652034303030202d72202d712038 +1.3.6.1.2.1.25.4.2.1.5.1826|4x|2d46202d70202f7661722f72756e2f7379736c6f67642e706964 +1.3.6.1.2.1.25.4.2.1.5.2851|4x|2d6e +1.3.6.1.2.1.25.4.2.1.5.2852|4| +1.3.6.1.2.1.25.4.2.1.5.2919|4| +1.3.6.1.2.1.25.4.2.1.5.3773|4x|2d44 +1.3.6.1.2.1.25.4.2.1.5.4068|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.4085|4x|2f7661722f73657276696365206c6f673a202e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e +1.3.6.1.2.1.25.4.2.1.5.4119|4x|2d2d6e6f636c6561722074747931206c696e7578 +1.3.6.1.2.1.25.4.2.1.5.4122|4x|2d2d6b6565702d62617564203131353230302c33383430302c39363030207474795330207674323230 +1.3.6.1.2.1.25.4.2.1.5.4212|4|datastor +1.3.6.1.2.1.25.4.2.1.5.4213|4|eventd +1.3.6.1.2.1.25.4.2.1.5.4214|4|named +1.3.6.1.2.1.25.4.2.1.5.4215|4|sdmd +1.3.6.1.2.1.25.4.2.1.5.4216|4x|6f767364622d736572766572 +1.3.6.1.2.1.25.4.2.1.5.4217|4|wocd +1.3.6.1.2.1.25.4.2.1.5.4218|4|nlad +1.3.6.1.2.1.25.4.2.1.5.4219|4|wccpd +1.3.6.1.2.1.25.4.2.1.5.4220|4|dnscached +1.3.6.1.2.1.25.4.2.1.5.4221|4|rba +1.3.6.1.2.1.25.4.2.1.5.4222|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.4224|4x|2f7573722f7362696e2f6e616d6564202d66202d74202f7661722f6e616d6564202d75206e616d6564202d63202f636f6e6669672f6e616d65642e636f6e66202d6e2031 +1.3.6.1.2.1.25.4.2.1.5.4226|4| +1.3.6.1.2.1.25.4.2.1.5.4434|4|tmipsecd +1.3.6.1.2.1.25.4.2.1.5.4435|4|ntlmconnpool +1.3.6.1.2.1.25.4.2.1.5.4436|4|pgadmind +1.3.6.1.2.1.25.4.2.1.5.4437|4|antserver +1.3.6.1.2.1.25.4.2.1.5.4438|4x|64656475705f61646d696e +1.3.6.1.2.1.25.4.2.1.5.4439|4x|61706d5f77656273736f +1.3.6.1.2.1.25.4.2.1.5.4440|4|samlidpd +1.3.6.1.2.1.25.4.2.1.5.4441|4|eca +1.3.6.1.2.1.25.4.2.1.5.4442|4|autodosd +1.3.6.1.2.1.25.4.2.1.5.4443|4|scriptd +1.3.6.1.2.1.25.4.2.1.5.4451|4| +1.3.6.1.2.1.25.4.2.1.5.4773|4|tmrouted +1.3.6.1.2.1.25.4.2.1.5.4774|4|vdi +1.3.6.1.2.1.25.4.2.1.5.4775|4|alertd +1.3.6.1.2.1.25.4.2.1.5.4776|4|fpuserd +1.3.6.1.2.1.25.4.2.1.5.4777|4|bdosd +1.3.6.1.2.1.25.4.2.1.5.4778|4|pccd +1.3.6.1.2.1.25.4.2.1.5.4779|4|asm +1.3.6.1.2.1.25.4.2.1.5.4780|4|eam +1.3.6.1.2.1.25.4.2.1.5.4781|4|tamd +1.3.6.1.2.1.25.4.2.1.5.4782|4|rtconfd +1.3.6.1.2.1.25.4.2.1.5.4784|4x|2d642030202d6f202f7661722f746d702f746d726f757465642e6f7574 +1.3.6.1.2.1.25.4.2.1.5.4786|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.4787|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.5137|4|evrouted +1.3.6.1.2.1.25.4.2.1.5.5138|4|syscalld +1.3.6.1.2.1.25.4.2.1.5.5139|4|csyncd +1.3.6.1.2.1.25.4.2.1.5.5140|4|natstatsd +1.3.6.1.2.1.25.4.2.1.5.5141|4x|6d676d745f61636c64 +1.3.6.1.2.1.25.4.2.1.5.5142|4x|616466735f70726f7879 +1.3.6.1.2.1.25.4.2.1.5.5143|4|rewrite +1.3.6.1.2.1.25.4.2.1.5.5144|4|big3d +1.3.6.1.2.1.25.4.2.1.5.5145|4|omapd +1.3.6.1.2.1.25.4.2.1.5.5146|4|updated +1.3.6.1.2.1.25.4.2.1.5.5148|4| +1.3.6.1.2.1.25.4.2.1.5.5151|4x|2d746c7320544c537631202d636970686572732041455347434d3a4145533a214144483a2141454344483a2150534b3a2161454344483a214453533a2145434453413a214145533132383a2d534841313a4145533235362d534841202d72656e6567203836343030 +1.3.6.1.2.1.25.4.2.1.5.5155|4| +1.3.6.1.2.1.25.4.2.1.5.5159|4| +1.3.6.1.2.1.25.4.2.1.5.5501|4|botd +1.3.6.1.2.1.25.4.2.1.5.5502|4|clusterd +1.3.6.1.2.1.25.4.2.1.5.5503|4|bigd +1.3.6.1.2.1.25.4.2.1.5.5504|4|urldb +1.3.6.1.2.1.25.4.2.1.5.5505|4|logstatd +1.3.6.1.2.1.25.4.2.1.5.5506|4|errdefsd +1.3.6.1.2.1.25.4.2.1.5.5507|4|mysql +1.3.6.1.2.1.25.4.2.1.5.5508|4|logmysqld +1.3.6.1.2.1.25.4.2.1.5.5509|4|flowspecd +1.3.6.1.2.1.25.4.2.1.5.5510|4|ecmd +1.3.6.1.2.1.25.4.2.1.5.5516|4| +1.3.6.1.2.1.25.4.2.1.5.5522|4| +1.3.6.1.2.1.25.4.2.1.5.5861|4x|6963725f6576656e7464 +1.3.6.1.2.1.25.4.2.1.5.5862|4|debugd +1.3.6.1.2.1.25.4.2.1.5.5863|4|statsd +1.3.6.1.2.1.25.4.2.1.5.5864|4|mcpd +1.3.6.1.2.1.25.4.2.1.5.5865|4|zxfrd +1.3.6.1.2.1.25.4.2.1.5.5866|4x|646f736c37645f61747461636b5f6d6f6e69746f72 +1.3.6.1.2.1.25.4.2.1.5.5867|4|chmand +1.3.6.1.2.1.25.4.2.1.5.5868|4|autodiscd +1.3.6.1.2.1.25.4.2.1.5.5869|4|mdmsyncmgr +1.3.6.1.2.1.25.4.2.1.5.5870|4|apmd +1.3.6.1.2.1.25.4.2.1.5.5872|4x|2d66202d2d76617269616e7420316e6963 +1.3.6.1.2.1.25.4.2.1.5.5875|4| +1.3.6.1.2.1.25.4.2.1.5.5878|4x|2d64626d656d20353132202d6c697374656e203132372e302e302e31202d666f7263656c6f6164202d66 +1.3.6.1.2.1.25.4.2.1.5.5879|4x|2d532030202d66 +1.3.6.1.2.1.25.4.2.1.5.5884|4| +1.3.6.1.2.1.25.4.2.1.5.6344|4|gtmd +1.3.6.1.2.1.25.4.2.1.5.6345|4|dynconfd +1.3.6.1.2.1.25.4.2.1.5.6346|4|sshplugin +1.3.6.1.2.1.25.4.2.1.5.6347|4|tmm +1.3.6.1.2.1.25.4.2.1.5.6348|4|avrd +1.3.6.1.2.1.25.4.2.1.5.6349|4x|70696e675f6163636573735f6167656e74 +1.3.6.1.2.1.25.4.2.1.5.6350|4|dwbld +1.3.6.1.2.1.25.4.2.1.5.6351|4|merged +1.3.6.1.2.1.25.4.2.1.5.6352|4|wamd +1.3.6.1.2.1.25.4.2.1.5.6353|4|tomcat +1.3.6.1.2.1.25.4.2.1.5.6358|4x|2d532030202d66 +1.3.6.1.2.1.25.4.2.1.5.6366|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.6763|4|vxland +1.3.6.1.2.1.25.4.2.1.5.6764|4|hwpd +1.3.6.1.2.1.25.4.2.1.5.6765|4|tasd +1.3.6.1.2.1.25.4.2.1.5.6766|4|pkcs11d +1.3.6.1.2.1.25.4.2.1.5.6767|4|admd +1.3.6.1.2.1.25.4.2.1.5.6768|4|iprepd +1.3.6.1.2.1.25.4.2.1.5.6769|4x|676f6f676c655f6163636f756e74735f6461656d6f6e +1.3.6.1.2.1.25.4.2.1.5.6770|4|snmpd +1.3.6.1.2.1.25.4.2.1.5.6771|4|keymgmtd +1.3.6.1.2.1.25.4.2.1.5.6772|4|oauth +1.3.6.1.2.1.25.4.2.1.5.6782|4x|2f7573722f62696e2f676f6f676c655f6163636f756e74735f6461656d6f6e +1.3.6.1.2.1.25.4.2.1.5.6784|4| +1.3.6.1.2.1.25.4.2.1.5.7174|4|captured +1.3.6.1.2.1.25.4.2.1.5.7175|4|cbrd +1.3.6.1.2.1.25.4.2.1.5.7176|4|zrd +1.3.6.1.2.1.25.4.2.1.5.7177|4|lacpd +1.3.6.1.2.1.25.4.2.1.5.7178|4|monpd +1.3.6.1.2.1.25.4.2.1.5.7179|4|restjavad +1.3.6.1.2.1.25.4.2.1.5.7180|4|shmmapd +1.3.6.1.2.1.25.4.2.1.5.7181|4|websso +1.3.6.1.2.1.25.4.2.1.5.7182|4|devmgmtd +1.3.6.1.2.1.25.4.2.1.5.7183|4x|68747470645f61706d +1.3.6.1.2.1.25.4.2.1.5.7188|4x|2d446a6176612e7574696c2e6c6f6767696e672e6d616e616765723d636f6d2e66352e726573742e636f6d6d6f6e2e526573744c6f674d616e61676572202d446a6176612e7574696c2e6c6f6767696e672e636f6e6669672e66696c653d2f6574632f726573746a617661642e6c6f672e636f6e66202d446c6f67346a2e6465 +1.3.6.1.2.1.25.4.2.1.5.7192|4| +1.3.6.1.2.1.25.4.2.1.5.7194|4x|2d6c206e6f74696365 +1.3.6.1.2.1.25.4.2.1.5.7196|4x|2d2d746872656164733d32202d2d686f73742d6d656d6f72793d343032363533313834202d2d756d755f7468726573686f6c643d3930202d2d70656e64696e675f7472616e733d35303030202d2d726571756573745f73697a653d3130323430202d2d6269675f726571756573745f73697a652031303438353736202d2d6d61 +1.3.6.1.2.1.25.4.2.1.5.7523|4|sod +1.3.6.1.2.1.25.4.2.1.5.7524|4|wocplugin +1.3.6.1.2.1.25.4.2.1.5.7525|4x|73666c6f775f6167656e74 +1.3.6.1.2.1.25.4.2.1.5.7526|4|urldbmgrd +1.3.6.1.2.1.25.4.2.1.5.7527|4x|66355f7570646174655f636865636b6572 +1.3.6.1.2.1.25.4.2.1.5.7528|4|nsyncd +1.3.6.1.2.1.25.4.2.1.5.7529|4|lind +1.3.6.1.2.1.25.4.2.1.5.7530|4|aced +1.3.6.1.2.1.25.4.2.1.5.7531|4|restnoded +1.3.6.1.2.1.25.4.2.1.5.7532|4|datasyncd +1.3.6.1.2.1.25.4.2.1.5.7535|4| +1.3.6.1.2.1.25.4.2.1.5.7539|4| +1.3.6.1.2.1.25.4.2.1.5.7543|4x|2d66202d4c462035202f7661722f6c6f672f73666c6f775f6167656e742e6c6f67 +1.3.6.1.2.1.25.4.2.1.5.7544|4x|2f7573722f73686172652f726573742f6e6f64652f7372632f726573746e6f64652e6a73202d702038313035202d2d6c6f674c6576656c2066696e657374202d69202f7661722f6c6f672f726573746e6f6465642f726573746e6f6465642e6c6f67202d73206e6f6e65 +1.3.6.1.2.1.25.4.2.1.5.7949|4|fslogd +1.3.6.1.2.1.25.4.2.1.5.7950|4|ipsd +1.3.6.1.2.1.25.4.2.1.5.7951|4|nokiasnmpd +1.3.6.1.2.1.25.4.2.1.5.7952|4|dosl7d +1.3.6.1.2.1.25.4.2.1.5.7953|4|localdbmgr +1.3.6.1.2.1.25.4.2.1.5.7954|4x|77725f75726c646264 +1.3.6.1.2.1.25.4.2.1.5.9526|4x|2d6e77206d676d74202d6366202f6574632f6468636c69656e742e636f6e66202d6c66202f7661722f6c69622f6468636c69656e742f6468636c69656e742e6c6561736573202d7066202f7661722f72756e2f6468636c69656e742e706964 +1.3.6.1.2.1.25.4.2.1.5.9602|4x|2d36202d6e77206d676d74202d6366202f6574632f6468636c69656e742e636f6e66202d6c66202f7661722f6c69622f6468636c69656e742f6468636c69656e74362d6d676d742e6c6561736573202d7066202f7661722f72756e2f6468636c69656e74362d6d676d742e706964 +1.3.6.1.2.1.25.4.2.1.5.11784|4x|746f6d636174202d73202f62696e2f62617368202d63206578706f7274204a4156415f4f5054533d272d4468747470732e70726f746f636f6c733d544c5376312e312c544c5376312e32202d44707974686f6e2e63616368656469723d2f7661722f746d70202d446a6176612e6c6962726172792e706174683d2f7573722f6c +1.3.6.1.2.1.25.4.2.1.5.13563|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.13565|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.13566|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.15387|4x|2d67 +1.3.6.1.2.1.25.4.2.1.5.15921|4x|2d4468747470732e70726f746f636f6c733d544c5376312e312c544c5376312e32202d44707974686f6e2e63616368656469723d2f7661722f746d70202d446a6176612e6c6962726172792e706174683d2f7573722f6c6962202d4466696c652e656e636f64696e673d5554462d38202d636c69656e74202d586d783133306d +1.3.6.1.2.1.25.4.2.1.5.16645|4x|2d70206c6f63616c362e696e666f +1.3.6.1.2.1.25.4.2.1.5.16646|4x|2d70206c6f63616c362e696e666f +1.3.6.1.2.1.25.4.2.1.5.16648|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.16651|4| +1.3.6.1.2.1.25.4.2.1.5.16652|4| +1.3.6.1.2.1.25.4.2.1.5.16653|4| +1.3.6.1.2.1.25.4.2.1.5.16654|4| +1.3.6.1.2.1.25.4.2.1.5.17900|4x|2d66202d74202f7661722f6e616d6564202d75206e616d6564202d63202f636f6e6669672f6e616d65642e636f6e66202d6e2031 +1.3.6.1.2.1.25.4.2.1.5.18651|4x|2d702038313030202d6c2032202d692034343038353361662d376362352d346530302d393631632d373133303033336265613235 +1.3.6.1.2.1.25.4.2.1.5.23175|4| +1.3.6.1.2.1.25.4.2.1.5.23330|4x|2d66202d63202f636f6e6669672f736e6d702f736e6d70642e636f6e66202d4c7364202d4c462036202f7661722f6c6f672f736e6d70642e6c6f67202d70202f7661722f72756e2f736e6d70642e706964 +1.3.6.1.2.1.25.4.2.1.5.24570|4x|2d2d6e6f636c6561722074747930207474795330207674323230 +1.3.6.1.2.1.25.4.2.1.5.25514|4| +1.3.6.1.2.1.25.4.2.1.5.25517|4x|2d2d746d6d636f756e742032 +1.3.6.1.2.1.25.4.2.1.5.25518|4x|2f7661722f72756e203220322030202d2d706c6174666f726d205a313030202d6d202d732035393434 +1.3.6.1.2.1.25.4.2.1.5.25522|4| +1.3.6.1.2.1.25.4.2.1.5.25524|4| +1.3.6.1.2.1.25.4.2.1.5.25531|4| +1.3.6.1.2.1.25.4.2.1.5.25946|4x|2d53 +1.3.6.1.2.1.25.4.2.1.5.27567|4x|2d63206d656d3a2f2f6e746c6d +1.3.6.1.2.1.25.4.2.1.5.29431|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.29439|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.29440|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.30092|4x|2d542032202d2d746d69642030202d2d6e7075732032202d2d706c6174666f726d205a313030202d6d202d732035393434 +1.3.6.1.2.1.25.4.2.1.5.30120|4x|2d6c202f7661722f6c6f672f7261636f6f6e2e6c6f67202d66202f6574632f7261636f6f6e2f7261636f6f6e2e636f6e66 +1.3.6.1.2.1.25.4.2.1.5.31793|4| +1.3.6.1.2.1.25.4.2.1.6.1|2|4 +1.3.6.1.2.1.25.4.2.1.6.415|2|4 +1.3.6.1.2.1.25.4.2.1.6.440|2|4 +1.3.6.1.2.1.25.4.2.1.6.447|2|4 +1.3.6.1.2.1.25.4.2.1.6.921|2|4 +1.3.6.1.2.1.25.4.2.1.6.951|2|4 +1.3.6.1.2.1.25.4.2.1.6.977|2|4 +1.3.6.1.2.1.25.4.2.1.6.979|2|4 +1.3.6.1.2.1.25.4.2.1.6.982|2|4 +1.3.6.1.2.1.25.4.2.1.6.984|2|4 +1.3.6.1.2.1.25.4.2.1.6.1038|2|4 +1.3.6.1.2.1.25.4.2.1.6.1826|2|4 +1.3.6.1.2.1.25.4.2.1.6.2851|2|4 +1.3.6.1.2.1.25.4.2.1.6.2852|2|4 +1.3.6.1.2.1.25.4.2.1.6.2919|2|4 +1.3.6.1.2.1.25.4.2.1.6.3773|2|4 +1.3.6.1.2.1.25.4.2.1.6.4068|2|4 +1.3.6.1.2.1.25.4.2.1.6.4085|2|4 +1.3.6.1.2.1.25.4.2.1.6.4119|2|4 +1.3.6.1.2.1.25.4.2.1.6.4122|2|4 +1.3.6.1.2.1.25.4.2.1.6.4212|2|4 +1.3.6.1.2.1.25.4.2.1.6.4213|2|4 +1.3.6.1.2.1.25.4.2.1.6.4214|2|4 +1.3.6.1.2.1.25.4.2.1.6.4215|2|4 +1.3.6.1.2.1.25.4.2.1.6.4216|2|4 +1.3.6.1.2.1.25.4.2.1.6.4217|2|4 +1.3.6.1.2.1.25.4.2.1.6.4218|2|4 +1.3.6.1.2.1.25.4.2.1.6.4219|2|4 +1.3.6.1.2.1.25.4.2.1.6.4220|2|4 +1.3.6.1.2.1.25.4.2.1.6.4221|2|4 +1.3.6.1.2.1.25.4.2.1.6.4222|2|4 +1.3.6.1.2.1.25.4.2.1.6.4224|2|4 +1.3.6.1.2.1.25.4.2.1.6.4226|2|4 +1.3.6.1.2.1.25.4.2.1.6.4434|2|4 +1.3.6.1.2.1.25.4.2.1.6.4435|2|4 +1.3.6.1.2.1.25.4.2.1.6.4436|2|4 +1.3.6.1.2.1.25.4.2.1.6.4437|2|4 +1.3.6.1.2.1.25.4.2.1.6.4438|2|4 +1.3.6.1.2.1.25.4.2.1.6.4439|2|4 +1.3.6.1.2.1.25.4.2.1.6.4440|2|4 +1.3.6.1.2.1.25.4.2.1.6.4441|2|4 +1.3.6.1.2.1.25.4.2.1.6.4442|2|4 +1.3.6.1.2.1.25.4.2.1.6.4443|2|4 +1.3.6.1.2.1.25.4.2.1.6.4451|2|4 +1.3.6.1.2.1.25.4.2.1.6.4773|2|4 +1.3.6.1.2.1.25.4.2.1.6.4774|2|4 +1.3.6.1.2.1.25.4.2.1.6.4775|2|4 +1.3.6.1.2.1.25.4.2.1.6.4776|2|4 +1.3.6.1.2.1.25.4.2.1.6.4777|2|4 +1.3.6.1.2.1.25.4.2.1.6.4778|2|4 +1.3.6.1.2.1.25.4.2.1.6.4779|2|4 +1.3.6.1.2.1.25.4.2.1.6.4780|2|4 +1.3.6.1.2.1.25.4.2.1.6.4781|2|4 +1.3.6.1.2.1.25.4.2.1.6.4782|2|4 +1.3.6.1.2.1.25.4.2.1.6.4784|2|4 +1.3.6.1.2.1.25.4.2.1.6.4786|2|4 +1.3.6.1.2.1.25.4.2.1.6.4787|2|4 +1.3.6.1.2.1.25.4.2.1.6.5137|2|4 +1.3.6.1.2.1.25.4.2.1.6.5138|2|4 +1.3.6.1.2.1.25.4.2.1.6.5139|2|4 +1.3.6.1.2.1.25.4.2.1.6.5140|2|4 +1.3.6.1.2.1.25.4.2.1.6.5141|2|4 +1.3.6.1.2.1.25.4.2.1.6.5142|2|4 +1.3.6.1.2.1.25.4.2.1.6.5143|2|4 +1.3.6.1.2.1.25.4.2.1.6.5144|2|4 +1.3.6.1.2.1.25.4.2.1.6.5145|2|4 +1.3.6.1.2.1.25.4.2.1.6.5146|2|4 +1.3.6.1.2.1.25.4.2.1.6.5148|2|4 +1.3.6.1.2.1.25.4.2.1.6.5151|2|4 +1.3.6.1.2.1.25.4.2.1.6.5155|2|4 +1.3.6.1.2.1.25.4.2.1.6.5159|2|4 +1.3.6.1.2.1.25.4.2.1.6.5501|2|4 +1.3.6.1.2.1.25.4.2.1.6.5502|2|4 +1.3.6.1.2.1.25.4.2.1.6.5503|2|4 +1.3.6.1.2.1.25.4.2.1.6.5504|2|4 +1.3.6.1.2.1.25.4.2.1.6.5505|2|4 +1.3.6.1.2.1.25.4.2.1.6.5506|2|4 +1.3.6.1.2.1.25.4.2.1.6.5507|2|4 +1.3.6.1.2.1.25.4.2.1.6.5508|2|4 +1.3.6.1.2.1.25.4.2.1.6.5509|2|4 +1.3.6.1.2.1.25.4.2.1.6.5510|2|4 +1.3.6.1.2.1.25.4.2.1.6.5516|2|4 +1.3.6.1.2.1.25.4.2.1.6.5522|2|4 +1.3.6.1.2.1.25.4.2.1.6.5861|2|4 +1.3.6.1.2.1.25.4.2.1.6.5862|2|4 +1.3.6.1.2.1.25.4.2.1.6.5863|2|4 +1.3.6.1.2.1.25.4.2.1.6.5864|2|4 +1.3.6.1.2.1.25.4.2.1.6.5865|2|4 +1.3.6.1.2.1.25.4.2.1.6.5866|2|4 +1.3.6.1.2.1.25.4.2.1.6.5867|2|4 +1.3.6.1.2.1.25.4.2.1.6.5868|2|4 +1.3.6.1.2.1.25.4.2.1.6.5869|2|4 +1.3.6.1.2.1.25.4.2.1.6.5870|2|4 +1.3.6.1.2.1.25.4.2.1.6.5872|2|4 +1.3.6.1.2.1.25.4.2.1.6.5875|2|4 +1.3.6.1.2.1.25.4.2.1.6.5878|2|4 +1.3.6.1.2.1.25.4.2.1.6.5879|2|4 +1.3.6.1.2.1.25.4.2.1.6.5884|2|4 +1.3.6.1.2.1.25.4.2.1.6.6344|2|4 +1.3.6.1.2.1.25.4.2.1.6.6345|2|4 +1.3.6.1.2.1.25.4.2.1.6.6346|2|4 +1.3.6.1.2.1.25.4.2.1.6.6347|2|4 +1.3.6.1.2.1.25.4.2.1.6.6348|2|4 +1.3.6.1.2.1.25.4.2.1.6.6349|2|4 +1.3.6.1.2.1.25.4.2.1.6.6350|2|4 +1.3.6.1.2.1.25.4.2.1.6.6351|2|4 +1.3.6.1.2.1.25.4.2.1.6.6352|2|4 +1.3.6.1.2.1.25.4.2.1.6.6353|2|4 +1.3.6.1.2.1.25.4.2.1.6.6358|2|4 +1.3.6.1.2.1.25.4.2.1.6.6366|2|4 +1.3.6.1.2.1.25.4.2.1.6.6763|2|4 +1.3.6.1.2.1.25.4.2.1.6.6764|2|4 +1.3.6.1.2.1.25.4.2.1.6.6765|2|4 +1.3.6.1.2.1.25.4.2.1.6.6766|2|4 +1.3.6.1.2.1.25.4.2.1.6.6767|2|4 +1.3.6.1.2.1.25.4.2.1.6.6768|2|4 +1.3.6.1.2.1.25.4.2.1.6.6769|2|4 +1.3.6.1.2.1.25.4.2.1.6.6770|2|4 +1.3.6.1.2.1.25.4.2.1.6.6771|2|4 +1.3.6.1.2.1.25.4.2.1.6.6772|2|4 +1.3.6.1.2.1.25.4.2.1.6.6782|2|4 +1.3.6.1.2.1.25.4.2.1.6.6784|2|4 +1.3.6.1.2.1.25.4.2.1.6.7174|2|4 +1.3.6.1.2.1.25.4.2.1.6.7175|2|4 +1.3.6.1.2.1.25.4.2.1.6.7176|2|4 +1.3.6.1.2.1.25.4.2.1.6.7177|2|4 +1.3.6.1.2.1.25.4.2.1.6.7178|2|4 +1.3.6.1.2.1.25.4.2.1.6.7179|2|4 +1.3.6.1.2.1.25.4.2.1.6.7180|2|4 +1.3.6.1.2.1.25.4.2.1.6.7181|2|4 +1.3.6.1.2.1.25.4.2.1.6.7182|2|4 +1.3.6.1.2.1.25.4.2.1.6.7183|2|4 +1.3.6.1.2.1.25.4.2.1.6.7188|2|4 +1.3.6.1.2.1.25.4.2.1.6.7192|2|4 +1.3.6.1.2.1.25.4.2.1.6.7194|2|4 +1.3.6.1.2.1.25.4.2.1.6.7196|2|4 +1.3.6.1.2.1.25.4.2.1.6.7523|2|4 +1.3.6.1.2.1.25.4.2.1.6.7524|2|4 +1.3.6.1.2.1.25.4.2.1.6.7525|2|4 +1.3.6.1.2.1.25.4.2.1.6.7526|2|4 +1.3.6.1.2.1.25.4.2.1.6.7527|2|4 +1.3.6.1.2.1.25.4.2.1.6.7528|2|4 +1.3.6.1.2.1.25.4.2.1.6.7529|2|4 +1.3.6.1.2.1.25.4.2.1.6.7530|2|4 +1.3.6.1.2.1.25.4.2.1.6.7531|2|4 +1.3.6.1.2.1.25.4.2.1.6.7532|2|4 +1.3.6.1.2.1.25.4.2.1.6.7535|2|4 +1.3.6.1.2.1.25.4.2.1.6.7539|2|4 +1.3.6.1.2.1.25.4.2.1.6.7543|2|4 +1.3.6.1.2.1.25.4.2.1.6.7544|2|4 +1.3.6.1.2.1.25.4.2.1.6.7949|2|4 +1.3.6.1.2.1.25.4.2.1.6.7950|2|4 +1.3.6.1.2.1.25.4.2.1.6.7951|2|4 +1.3.6.1.2.1.25.4.2.1.6.7952|2|4 +1.3.6.1.2.1.25.4.2.1.6.7953|2|4 +1.3.6.1.2.1.25.4.2.1.6.7954|2|4 +1.3.6.1.2.1.25.4.2.1.6.9526|2|4 +1.3.6.1.2.1.25.4.2.1.6.9602|2|4 +1.3.6.1.2.1.25.4.2.1.6.11784|2|4 +1.3.6.1.2.1.25.4.2.1.6.13563|2|4 +1.3.6.1.2.1.25.4.2.1.6.13565|2|4 +1.3.6.1.2.1.25.4.2.1.6.13566|2|4 +1.3.6.1.2.1.25.4.2.1.6.15387|2|4 +1.3.6.1.2.1.25.4.2.1.6.15921|2|4 +1.3.6.1.2.1.25.4.2.1.6.16645|2|4 +1.3.6.1.2.1.25.4.2.1.6.16646|2|4 +1.3.6.1.2.1.25.4.2.1.6.16648|2|4 +1.3.6.1.2.1.25.4.2.1.6.16651|2|4 +1.3.6.1.2.1.25.4.2.1.6.16652|2|4 +1.3.6.1.2.1.25.4.2.1.6.16653|2|4 +1.3.6.1.2.1.25.4.2.1.6.16654|2|4 +1.3.6.1.2.1.25.4.2.1.6.17900|2|4 +1.3.6.1.2.1.25.4.2.1.6.18651|2|4 +1.3.6.1.2.1.25.4.2.1.6.23175|2|4 +1.3.6.1.2.1.25.4.2.1.6.23330|2|4 +1.3.6.1.2.1.25.4.2.1.6.24570|2|4 +1.3.6.1.2.1.25.4.2.1.6.25514|2|4 +1.3.6.1.2.1.25.4.2.1.6.25517|2|4 +1.3.6.1.2.1.25.4.2.1.6.25518|2|4 +1.3.6.1.2.1.25.4.2.1.6.25522|2|4 +1.3.6.1.2.1.25.4.2.1.6.25524|2|4 +1.3.6.1.2.1.25.4.2.1.6.25531|2|4 +1.3.6.1.2.1.25.4.2.1.6.25946|2|4 +1.3.6.1.2.1.25.4.2.1.6.27567|2|4 +1.3.6.1.2.1.25.4.2.1.6.29431|2|4 +1.3.6.1.2.1.25.4.2.1.6.29439|2|4 +1.3.6.1.2.1.25.4.2.1.6.29440|2|4 +1.3.6.1.2.1.25.4.2.1.6.30092|2|4 +1.3.6.1.2.1.25.4.2.1.6.30120|2|4 +1.3.6.1.2.1.25.4.2.1.6.31793|2|4 +1.3.6.1.2.1.25.4.2.1.7.1|2|2 +1.3.6.1.2.1.25.4.2.1.7.415|2|2 +1.3.6.1.2.1.25.4.2.1.7.440|2|2 +1.3.6.1.2.1.25.4.2.1.7.447|2|2 +1.3.6.1.2.1.25.4.2.1.7.921|2|2 +1.3.6.1.2.1.25.4.2.1.7.951|2|2 +1.3.6.1.2.1.25.4.2.1.7.977|2|2 +1.3.6.1.2.1.25.4.2.1.7.979|2|2 +1.3.6.1.2.1.25.4.2.1.7.982|2|2 +1.3.6.1.2.1.25.4.2.1.7.984|2|2 +1.3.6.1.2.1.25.4.2.1.7.1038|2|2 +1.3.6.1.2.1.25.4.2.1.7.1826|2|2 +1.3.6.1.2.1.25.4.2.1.7.2851|2|2 +1.3.6.1.2.1.25.4.2.1.7.2852|2|2 +1.3.6.1.2.1.25.4.2.1.7.2919|2|2 +1.3.6.1.2.1.25.4.2.1.7.3773|2|2 +1.3.6.1.2.1.25.4.2.1.7.4068|2|2 +1.3.6.1.2.1.25.4.2.1.7.4085|2|2 +1.3.6.1.2.1.25.4.2.1.7.4119|2|2 +1.3.6.1.2.1.25.4.2.1.7.4122|2|2 +1.3.6.1.2.1.25.4.2.1.7.4212|2|2 +1.3.6.1.2.1.25.4.2.1.7.4213|2|2 +1.3.6.1.2.1.25.4.2.1.7.4214|2|2 +1.3.6.1.2.1.25.4.2.1.7.4215|2|2 +1.3.6.1.2.1.25.4.2.1.7.4216|2|2 +1.3.6.1.2.1.25.4.2.1.7.4217|2|2 +1.3.6.1.2.1.25.4.2.1.7.4218|2|2 +1.3.6.1.2.1.25.4.2.1.7.4219|2|2 +1.3.6.1.2.1.25.4.2.1.7.4220|2|2 +1.3.6.1.2.1.25.4.2.1.7.4221|2|2 +1.3.6.1.2.1.25.4.2.1.7.4222|2|2 +1.3.6.1.2.1.25.4.2.1.7.4224|2|2 +1.3.6.1.2.1.25.4.2.1.7.4226|2|2 +1.3.6.1.2.1.25.4.2.1.7.4434|2|2 +1.3.6.1.2.1.25.4.2.1.7.4435|2|2 +1.3.6.1.2.1.25.4.2.1.7.4436|2|2 +1.3.6.1.2.1.25.4.2.1.7.4437|2|2 +1.3.6.1.2.1.25.4.2.1.7.4438|2|2 +1.3.6.1.2.1.25.4.2.1.7.4439|2|2 +1.3.6.1.2.1.25.4.2.1.7.4440|2|2 +1.3.6.1.2.1.25.4.2.1.7.4441|2|2 +1.3.6.1.2.1.25.4.2.1.7.4442|2|2 +1.3.6.1.2.1.25.4.2.1.7.4443|2|2 +1.3.6.1.2.1.25.4.2.1.7.4451|2|2 +1.3.6.1.2.1.25.4.2.1.7.4773|2|2 +1.3.6.1.2.1.25.4.2.1.7.4774|2|2 +1.3.6.1.2.1.25.4.2.1.7.4775|2|2 +1.3.6.1.2.1.25.4.2.1.7.4776|2|2 +1.3.6.1.2.1.25.4.2.1.7.4777|2|2 +1.3.6.1.2.1.25.4.2.1.7.4778|2|2 +1.3.6.1.2.1.25.4.2.1.7.4779|2|2 +1.3.6.1.2.1.25.4.2.1.7.4780|2|2 +1.3.6.1.2.1.25.4.2.1.7.4781|2|2 +1.3.6.1.2.1.25.4.2.1.7.4782|2|2 +1.3.6.1.2.1.25.4.2.1.7.4784|2|2 +1.3.6.1.2.1.25.4.2.1.7.4786|2|2 +1.3.6.1.2.1.25.4.2.1.7.4787|2|2 +1.3.6.1.2.1.25.4.2.1.7.5137|2|2 +1.3.6.1.2.1.25.4.2.1.7.5138|2|2 +1.3.6.1.2.1.25.4.2.1.7.5139|2|2 +1.3.6.1.2.1.25.4.2.1.7.5140|2|2 +1.3.6.1.2.1.25.4.2.1.7.5141|2|2 +1.3.6.1.2.1.25.4.2.1.7.5142|2|2 +1.3.6.1.2.1.25.4.2.1.7.5143|2|2 +1.3.6.1.2.1.25.4.2.1.7.5144|2|2 +1.3.6.1.2.1.25.4.2.1.7.5145|2|2 +1.3.6.1.2.1.25.4.2.1.7.5146|2|2 +1.3.6.1.2.1.25.4.2.1.7.5148|2|2 +1.3.6.1.2.1.25.4.2.1.7.5151|2|2 +1.3.6.1.2.1.25.4.2.1.7.5155|2|2 +1.3.6.1.2.1.25.4.2.1.7.5159|2|2 +1.3.6.1.2.1.25.4.2.1.7.5501|2|2 +1.3.6.1.2.1.25.4.2.1.7.5502|2|2 +1.3.6.1.2.1.25.4.2.1.7.5503|2|2 +1.3.6.1.2.1.25.4.2.1.7.5504|2|2 +1.3.6.1.2.1.25.4.2.1.7.5505|2|2 +1.3.6.1.2.1.25.4.2.1.7.5506|2|2 +1.3.6.1.2.1.25.4.2.1.7.5507|2|2 +1.3.6.1.2.1.25.4.2.1.7.5508|2|2 +1.3.6.1.2.1.25.4.2.1.7.5509|2|2 +1.3.6.1.2.1.25.4.2.1.7.5510|2|2 +1.3.6.1.2.1.25.4.2.1.7.5516|2|2 +1.3.6.1.2.1.25.4.2.1.7.5522|2|2 +1.3.6.1.2.1.25.4.2.1.7.5861|2|2 +1.3.6.1.2.1.25.4.2.1.7.5862|2|2 +1.3.6.1.2.1.25.4.2.1.7.5863|2|2 +1.3.6.1.2.1.25.4.2.1.7.5864|2|2 +1.3.6.1.2.1.25.4.2.1.7.5865|2|2 +1.3.6.1.2.1.25.4.2.1.7.5866|2|2 +1.3.6.1.2.1.25.4.2.1.7.5867|2|2 +1.3.6.1.2.1.25.4.2.1.7.5868|2|2 +1.3.6.1.2.1.25.4.2.1.7.5869|2|2 +1.3.6.1.2.1.25.4.2.1.7.5870|2|2 +1.3.6.1.2.1.25.4.2.1.7.5872|2|2 +1.3.6.1.2.1.25.4.2.1.7.5875|2|2 +1.3.6.1.2.1.25.4.2.1.7.5878|2|2 +1.3.6.1.2.1.25.4.2.1.7.5879|2|2 +1.3.6.1.2.1.25.4.2.1.7.5884|2|2 +1.3.6.1.2.1.25.4.2.1.7.6344|2|2 +1.3.6.1.2.1.25.4.2.1.7.6345|2|2 +1.3.6.1.2.1.25.4.2.1.7.6346|2|2 +1.3.6.1.2.1.25.4.2.1.7.6347|2|2 +1.3.6.1.2.1.25.4.2.1.7.6348|2|2 +1.3.6.1.2.1.25.4.2.1.7.6349|2|2 +1.3.6.1.2.1.25.4.2.1.7.6350|2|2 +1.3.6.1.2.1.25.4.2.1.7.6351|2|2 +1.3.6.1.2.1.25.4.2.1.7.6352|2|2 +1.3.6.1.2.1.25.4.2.1.7.6353|2|2 +1.3.6.1.2.1.25.4.2.1.7.6358|2|2 +1.3.6.1.2.1.25.4.2.1.7.6366|2|2 +1.3.6.1.2.1.25.4.2.1.7.6763|2|2 +1.3.6.1.2.1.25.4.2.1.7.6764|2|2 +1.3.6.1.2.1.25.4.2.1.7.6765|2|2 +1.3.6.1.2.1.25.4.2.1.7.6766|2|2 +1.3.6.1.2.1.25.4.2.1.7.6767|2|2 +1.3.6.1.2.1.25.4.2.1.7.6768|2|2 +1.3.6.1.2.1.25.4.2.1.7.6769|2|2 +1.3.6.1.2.1.25.4.2.1.7.6770|2|2 +1.3.6.1.2.1.25.4.2.1.7.6771|2|2 +1.3.6.1.2.1.25.4.2.1.7.6772|2|2 +1.3.6.1.2.1.25.4.2.1.7.6782|2|2 +1.3.6.1.2.1.25.4.2.1.7.6784|2|2 +1.3.6.1.2.1.25.4.2.1.7.7174|2|2 +1.3.6.1.2.1.25.4.2.1.7.7175|2|2 +1.3.6.1.2.1.25.4.2.1.7.7176|2|2 +1.3.6.1.2.1.25.4.2.1.7.7177|2|2 +1.3.6.1.2.1.25.4.2.1.7.7178|2|2 +1.3.6.1.2.1.25.4.2.1.7.7179|2|2 +1.3.6.1.2.1.25.4.2.1.7.7180|2|2 +1.3.6.1.2.1.25.4.2.1.7.7181|2|2 +1.3.6.1.2.1.25.4.2.1.7.7182|2|2 +1.3.6.1.2.1.25.4.2.1.7.7183|2|2 +1.3.6.1.2.1.25.4.2.1.7.7188|2|2 +1.3.6.1.2.1.25.4.2.1.7.7192|2|2 +1.3.6.1.2.1.25.4.2.1.7.7194|2|2 +1.3.6.1.2.1.25.4.2.1.7.7196|2|2 +1.3.6.1.2.1.25.4.2.1.7.7523|2|2 +1.3.6.1.2.1.25.4.2.1.7.7524|2|2 +1.3.6.1.2.1.25.4.2.1.7.7525|2|2 +1.3.6.1.2.1.25.4.2.1.7.7526|2|2 +1.3.6.1.2.1.25.4.2.1.7.7527|2|2 +1.3.6.1.2.1.25.4.2.1.7.7528|2|2 +1.3.6.1.2.1.25.4.2.1.7.7529|2|2 +1.3.6.1.2.1.25.4.2.1.7.7530|2|2 +1.3.6.1.2.1.25.4.2.1.7.7531|2|2 +1.3.6.1.2.1.25.4.2.1.7.7532|2|2 +1.3.6.1.2.1.25.4.2.1.7.7535|2|2 +1.3.6.1.2.1.25.4.2.1.7.7539|2|2 +1.3.6.1.2.1.25.4.2.1.7.7543|2|2 +1.3.6.1.2.1.25.4.2.1.7.7544|2|2 +1.3.6.1.2.1.25.4.2.1.7.7949|2|2 +1.3.6.1.2.1.25.4.2.1.7.7950|2|2 +1.3.6.1.2.1.25.4.2.1.7.7951|2|2 +1.3.6.1.2.1.25.4.2.1.7.7952|2|2 +1.3.6.1.2.1.25.4.2.1.7.7953|2|2 +1.3.6.1.2.1.25.4.2.1.7.7954|2|2 +1.3.6.1.2.1.25.4.2.1.7.9526|2|2 +1.3.6.1.2.1.25.4.2.1.7.9602|2|2 +1.3.6.1.2.1.25.4.2.1.7.11784|2|2 +1.3.6.1.2.1.25.4.2.1.7.13563|2|2 +1.3.6.1.2.1.25.4.2.1.7.13565|2|2 +1.3.6.1.2.1.25.4.2.1.7.13566|2|2 +1.3.6.1.2.1.25.4.2.1.7.15387|2|2 +1.3.6.1.2.1.25.4.2.1.7.15921|2|2 +1.3.6.1.2.1.25.4.2.1.7.16645|2|2 +1.3.6.1.2.1.25.4.2.1.7.16646|2|2 +1.3.6.1.2.1.25.4.2.1.7.16648|2|2 +1.3.6.1.2.1.25.4.2.1.7.16651|2|2 +1.3.6.1.2.1.25.4.2.1.7.16652|2|2 +1.3.6.1.2.1.25.4.2.1.7.16653|2|2 +1.3.6.1.2.1.25.4.2.1.7.16654|2|2 +1.3.6.1.2.1.25.4.2.1.7.17900|2|2 +1.3.6.1.2.1.25.4.2.1.7.18651|2|2 +1.3.6.1.2.1.25.4.2.1.7.23175|2|2 +1.3.6.1.2.1.25.4.2.1.7.23330|2|1 +1.3.6.1.2.1.25.4.2.1.7.24620|2|2 +1.3.6.1.2.1.25.4.2.1.7.25514|2|2 +1.3.6.1.2.1.25.4.2.1.7.25517|2|2 +1.3.6.1.2.1.25.4.2.1.7.25518|2|2 +1.3.6.1.2.1.25.4.2.1.7.25522|2|2 +1.3.6.1.2.1.25.4.2.1.7.25524|2|2 +1.3.6.1.2.1.25.4.2.1.7.25531|2|2 +1.3.6.1.2.1.25.4.2.1.7.25946|2|2 +1.3.6.1.2.1.25.4.2.1.7.27567|2|2 +1.3.6.1.2.1.25.4.2.1.7.29431|2|2 +1.3.6.1.2.1.25.4.2.1.7.29439|2|2 +1.3.6.1.2.1.25.4.2.1.7.29440|2|2 +1.3.6.1.2.1.25.4.2.1.7.30092|2|2 +1.3.6.1.2.1.25.4.2.1.7.30120|2|2 +1.3.6.1.2.1.25.4.2.1.7.31793|2|2 +1.3.6.1.2.1.25.5.1.1.1.1|2|164793 +1.3.6.1.2.1.25.5.1.1.1.415|2|61212 +1.3.6.1.2.1.25.5.1.1.1.440|2|4 +1.3.6.1.2.1.25.5.1.1.1.447|2|39 +1.3.6.1.2.1.25.5.1.1.1.921|2|30296 +1.3.6.1.2.1.25.5.1.1.1.951|2|5675 +1.3.6.1.2.1.25.5.1.1.1.977|2|40364 +1.3.6.1.2.1.25.5.1.1.1.979|2|0 +1.3.6.1.2.1.25.5.1.1.1.982|2|12182 +1.3.6.1.2.1.25.5.1.1.1.984|2|25717 +1.3.6.1.2.1.25.5.1.1.1.1038|2|4453 +1.3.6.1.2.1.25.5.1.1.1.1826|2|48057 +1.3.6.1.2.1.25.5.1.1.1.2851|2|7041 +1.3.6.1.2.1.25.5.1.1.1.2852|2|17916 +1.3.6.1.2.1.25.5.1.1.1.2919|2|42140 +1.3.6.1.2.1.25.5.1.1.1.3773|2|6 +1.3.6.1.2.1.25.5.1.1.1.4068|2|8817 +1.3.6.1.2.1.25.5.1.1.1.4085|2|7800 +1.3.6.1.2.1.25.5.1.1.1.4119|2|1 +1.3.6.1.2.1.25.5.1.1.1.4122|2|0 +1.3.6.1.2.1.25.5.1.1.1.4212|2|8 +1.3.6.1.2.1.25.5.1.1.1.4213|2|7 +1.3.6.1.2.1.25.5.1.1.1.4214|2|6 +1.3.6.1.2.1.25.5.1.1.1.4215|2|7 +1.3.6.1.2.1.25.5.1.1.1.4216|2|13 +1.3.6.1.2.1.25.5.1.1.1.4217|2|7 +1.3.6.1.2.1.25.5.1.1.1.4218|2|7 +1.3.6.1.2.1.25.5.1.1.1.4219|2|6 +1.3.6.1.2.1.25.5.1.1.1.4220|2|6 +1.3.6.1.2.1.25.5.1.1.1.4221|2|6 +1.3.6.1.2.1.25.5.1.1.1.4222|2|6273 +1.3.6.1.2.1.25.5.1.1.1.4224|2|5518 +1.3.6.1.2.1.25.5.1.1.1.4226|2|7778 +1.3.6.1.2.1.25.5.1.1.1.4434|2|6 +1.3.6.1.2.1.25.5.1.1.1.4435|2|5 +1.3.6.1.2.1.25.5.1.1.1.4436|2|7 +1.3.6.1.2.1.25.5.1.1.1.4437|2|7 +1.3.6.1.2.1.25.5.1.1.1.4438|2|7 +1.3.6.1.2.1.25.5.1.1.1.4439|2|6 +1.3.6.1.2.1.25.5.1.1.1.4440|2|6 +1.3.6.1.2.1.25.5.1.1.1.4441|2|6 +1.3.6.1.2.1.25.5.1.1.1.4442|2|9 +1.3.6.1.2.1.25.5.1.1.1.4443|2|7 +1.3.6.1.2.1.25.5.1.1.1.4451|2|5329 +1.3.6.1.2.1.25.5.1.1.1.4773|2|6 +1.3.6.1.2.1.25.5.1.1.1.4774|2|6 +1.3.6.1.2.1.25.5.1.1.1.4775|2|14 +1.3.6.1.2.1.25.5.1.1.1.4776|2|6 +1.3.6.1.2.1.25.5.1.1.1.4777|2|6 +1.3.6.1.2.1.25.5.1.1.1.4778|2|8 +1.3.6.1.2.1.25.5.1.1.1.4779|2|10 +1.3.6.1.2.1.25.5.1.1.1.4780|2|6 +1.3.6.1.2.1.25.5.1.1.1.4781|2|6 +1.3.6.1.2.1.25.5.1.1.1.4782|2|6 +1.3.6.1.2.1.25.5.1.1.1.4784|2|24 +1.3.6.1.2.1.25.5.1.1.1.4786|2|6096 +1.3.6.1.2.1.25.5.1.1.1.4787|2|18120 +1.3.6.1.2.1.25.5.1.1.1.5137|2|8 +1.3.6.1.2.1.25.5.1.1.1.5138|2|6 +1.3.6.1.2.1.25.5.1.1.1.5139|2|289 +1.3.6.1.2.1.25.5.1.1.1.5140|2|8 +1.3.6.1.2.1.25.5.1.1.1.5141|2|6 +1.3.6.1.2.1.25.5.1.1.1.5142|2|7 +1.3.6.1.2.1.25.5.1.1.1.5143|2|7 +1.3.6.1.2.1.25.5.1.1.1.5144|2|231 +1.3.6.1.2.1.25.5.1.1.1.5145|2|6 +1.3.6.1.2.1.25.5.1.1.1.5146|2|6 +1.3.6.1.2.1.25.5.1.1.1.5148|2|10673 +1.3.6.1.2.1.25.5.1.1.1.5151|2|764 +1.3.6.1.2.1.25.5.1.1.1.5155|2|248494 +1.3.6.1.2.1.25.5.1.1.1.5159|2|19 +1.3.6.1.2.1.25.5.1.1.1.5501|2|6 +1.3.6.1.2.1.25.5.1.1.1.5502|2|6 +1.3.6.1.2.1.25.5.1.1.1.5503|2|252 +1.3.6.1.2.1.25.5.1.1.1.5504|2|6 +1.3.6.1.2.1.25.5.1.1.1.5505|2|6 +1.3.6.1.2.1.25.5.1.1.1.5506|2|231 +1.3.6.1.2.1.25.5.1.1.1.5507|2|7 +1.3.6.1.2.1.25.5.1.1.1.5508|2|6 +1.3.6.1.2.1.25.5.1.1.1.5509|2|6 +1.3.6.1.2.1.25.5.1.1.1.5510|2|5 +1.3.6.1.2.1.25.5.1.1.1.5516|2|6688 +1.3.6.1.2.1.25.5.1.1.1.5522|2|9286 +1.3.6.1.2.1.25.5.1.1.1.5861|2|7 +1.3.6.1.2.1.25.5.1.1.1.5862|2|7 +1.3.6.1.2.1.25.5.1.1.1.5863|2|6 +1.3.6.1.2.1.25.5.1.1.1.5864|2|253 +1.3.6.1.2.1.25.5.1.1.1.5865|2|254 +1.3.6.1.2.1.25.5.1.1.1.5866|2|6 +1.3.6.1.2.1.25.5.1.1.1.5867|2|8 +1.3.6.1.2.1.25.5.1.1.1.5868|2|8 +1.3.6.1.2.1.25.5.1.1.1.5869|2|6 +1.3.6.1.2.1.25.5.1.1.1.5870|2|6 +1.3.6.1.2.1.25.5.1.1.1.5872|2|88851 +1.3.6.1.2.1.25.5.1.1.1.5875|2|1574 +1.3.6.1.2.1.25.5.1.1.1.5878|2|314954 +1.3.6.1.2.1.25.5.1.1.1.5879|2|135525 +1.3.6.1.2.1.25.5.1.1.1.5884|2|124 +1.3.6.1.2.1.25.5.1.1.1.6344|2|8 +1.3.6.1.2.1.25.5.1.1.1.6345|2|225 +1.3.6.1.2.1.25.5.1.1.1.6346|2|7 +1.3.6.1.2.1.25.5.1.1.1.6347|2|7 +1.3.6.1.2.1.25.5.1.1.1.6348|2|6 +1.3.6.1.2.1.25.5.1.1.1.6349|2|6 +1.3.6.1.2.1.25.5.1.1.1.6350|2|7 +1.3.6.1.2.1.25.5.1.1.1.6351|2|7 +1.3.6.1.2.1.25.5.1.1.1.6352|2|6 +1.3.6.1.2.1.25.5.1.1.1.6353|2|6 +1.3.6.1.2.1.25.5.1.1.1.6358|2|1121128 +1.3.6.1.2.1.25.5.1.1.1.6366|2|24803 +1.3.6.1.2.1.25.5.1.1.1.6763|2|7 +1.3.6.1.2.1.25.5.1.1.1.6764|2|6 +1.3.6.1.2.1.25.5.1.1.1.6765|2|7 +1.3.6.1.2.1.25.5.1.1.1.6766|2|9 +1.3.6.1.2.1.25.5.1.1.1.6767|2|6 +1.3.6.1.2.1.25.5.1.1.1.6768|2|8 +1.3.6.1.2.1.25.5.1.1.1.6769|2|6 +1.3.6.1.2.1.25.5.1.1.1.6770|2|278 +1.3.6.1.2.1.25.5.1.1.1.6771|2|6 +1.3.6.1.2.1.25.5.1.1.1.6772|2|6 +1.3.6.1.2.1.25.5.1.1.1.6782|2|16886 +1.3.6.1.2.1.25.5.1.1.1.6784|2|13602 +1.3.6.1.2.1.25.5.1.1.1.7174|2|7 +1.3.6.1.2.1.25.5.1.1.1.7175|2|247 +1.3.6.1.2.1.25.5.1.1.1.7176|2|6 +1.3.6.1.2.1.25.5.1.1.1.7177|2|6 +1.3.6.1.2.1.25.5.1.1.1.7178|2|7 +1.3.6.1.2.1.25.5.1.1.1.7179|2|7 +1.3.6.1.2.1.25.5.1.1.1.7180|2|11 +1.3.6.1.2.1.25.5.1.1.1.7181|2|7 +1.3.6.1.2.1.25.5.1.1.1.7182|2|230 +1.3.6.1.2.1.25.5.1.1.1.7183|2|6 +1.3.6.1.2.1.25.5.1.1.1.7188|2|443110 +1.3.6.1.2.1.25.5.1.1.1.7192|2|58060 +1.3.6.1.2.1.25.5.1.1.1.7194|2|374 +1.3.6.1.2.1.25.5.1.1.1.7196|2|19690 +1.3.6.1.2.1.25.5.1.1.1.7523|2|25 +1.3.6.1.2.1.25.5.1.1.1.7524|2|7 +1.3.6.1.2.1.25.5.1.1.1.7525|2|5 +1.3.6.1.2.1.25.5.1.1.1.7526|2|9 +1.3.6.1.2.1.25.5.1.1.1.7527|2|6 +1.3.6.1.2.1.25.5.1.1.1.7528|2|7 +1.3.6.1.2.1.25.5.1.1.1.7529|2|7 +1.3.6.1.2.1.25.5.1.1.1.7530|2|6 +1.3.6.1.2.1.25.5.1.1.1.7531|2|7 +1.3.6.1.2.1.25.5.1.1.1.7532|2|6 +1.3.6.1.2.1.25.5.1.1.1.7535|2|12611 +1.3.6.1.2.1.25.5.1.1.1.7539|2|249329 +1.3.6.1.2.1.25.5.1.1.1.7543|2|1616 +1.3.6.1.2.1.25.5.1.1.1.7544|2|464 +1.3.6.1.2.1.25.5.1.1.1.7949|2|6 +1.3.6.1.2.1.25.5.1.1.1.7950|2|6 +1.3.6.1.2.1.25.5.1.1.1.7951|2|6 +1.3.6.1.2.1.25.5.1.1.1.7952|2|6 +1.3.6.1.2.1.25.5.1.1.1.7953|2|6 +1.3.6.1.2.1.25.5.1.1.1.7954|2|8 +1.3.6.1.2.1.25.5.1.1.1.9526|2|19 +1.3.6.1.2.1.25.5.1.1.1.9602|2|2900 +1.3.6.1.2.1.25.5.1.1.1.11784|2|5 +1.3.6.1.2.1.25.5.1.1.1.13563|2|8 +1.3.6.1.2.1.25.5.1.1.1.13565|2|19 +1.3.6.1.2.1.25.5.1.1.1.13566|2|164 +1.3.6.1.2.1.25.5.1.1.1.15387|2|1373 +1.3.6.1.2.1.25.5.1.1.1.15921|2|2400923 +1.3.6.1.2.1.25.5.1.1.1.16645|2|553 +1.3.6.1.2.1.25.5.1.1.1.16646|2|353 +1.3.6.1.2.1.25.5.1.1.1.16648|2|23 +1.3.6.1.2.1.25.5.1.1.1.16651|2|372 +1.3.6.1.2.1.25.5.1.1.1.16652|2|1145 +1.3.6.1.2.1.25.5.1.1.1.16653|2|4450 +1.3.6.1.2.1.25.5.1.1.1.16654|2|75 +1.3.6.1.2.1.25.5.1.1.1.17900|2|77 +1.3.6.1.2.1.25.5.1.1.1.18651|2|168616 +1.3.6.1.2.1.25.5.1.1.1.23175|2|39844 +1.3.6.1.2.1.25.5.1.1.1.23330|2|33915 +1.3.6.1.2.1.25.5.1.1.1.24620|2|0 +1.3.6.1.2.1.25.5.1.1.1.25514|2|213 +1.3.6.1.2.1.25.5.1.1.1.25517|2|1968 +1.3.6.1.2.1.25.5.1.1.1.25518|2|4 +1.3.6.1.2.1.25.5.1.1.1.25522|2|54954 +1.3.6.1.2.1.25.5.1.1.1.25524|2|1523 +1.3.6.1.2.1.25.5.1.1.1.25531|2|6683 +1.3.6.1.2.1.25.5.1.1.1.25946|2|105377 +1.3.6.1.2.1.25.5.1.1.1.27567|2|1 +1.3.6.1.2.1.25.5.1.1.1.29431|2|390 +1.3.6.1.2.1.25.5.1.1.1.29439|2|397 +1.3.6.1.2.1.25.5.1.1.1.29440|2|562 +1.3.6.1.2.1.25.5.1.1.1.30092|2|30637277 +1.3.6.1.2.1.25.5.1.1.1.30120|2|501 +1.3.6.1.2.1.25.5.1.1.1.31793|2|27 +1.3.6.1.2.1.25.5.1.1.2.1|2|4500 +1.3.6.1.2.1.25.5.1.1.2.415|2|1788 +1.3.6.1.2.1.25.5.1.1.2.440|2|220 +1.3.6.1.2.1.25.5.1.1.2.447|2|144 +1.3.6.1.2.1.25.5.1.1.2.921|2|40 +1.3.6.1.2.1.25.5.1.1.2.951|2|492 +1.3.6.1.2.1.25.5.1.1.2.977|2|1040 +1.3.6.1.2.1.25.5.1.1.2.979|2|48 +1.3.6.1.2.1.25.5.1.1.2.982|2|444 +1.3.6.1.2.1.25.5.1.1.2.984|2|1108 +1.3.6.1.2.1.25.5.1.1.2.1038|2|16 +1.3.6.1.2.1.25.5.1.1.2.1826|2|5136 +1.3.6.1.2.1.25.5.1.1.2.2851|2|436 +1.3.6.1.2.1.25.5.1.1.2.2852|2|15216 +1.3.6.1.2.1.25.5.1.1.2.2919|2|89012 +1.3.6.1.2.1.25.5.1.1.2.3773|2|140 +1.3.6.1.2.1.25.5.1.1.2.4068|2|6820 +1.3.6.1.2.1.25.5.1.1.2.4085|2|188 +1.3.6.1.2.1.25.5.1.1.2.4119|2|48 +1.3.6.1.2.1.25.5.1.1.2.4122|2|44 +1.3.6.1.2.1.25.5.1.1.2.4212|2|212 +1.3.6.1.2.1.25.5.1.1.2.4213|2|152 +1.3.6.1.2.1.25.5.1.1.2.4214|2|172 +1.3.6.1.2.1.25.5.1.1.2.4215|2|336 +1.3.6.1.2.1.25.5.1.1.2.4216|2|304 +1.3.6.1.2.1.25.5.1.1.2.4217|2|312 +1.3.6.1.2.1.25.5.1.1.2.4218|2|276 +1.3.6.1.2.1.25.5.1.1.2.4219|2|172 +1.3.6.1.2.1.25.5.1.1.2.4220|2|296 +1.3.6.1.2.1.25.5.1.1.2.4221|2|276 +1.3.6.1.2.1.25.5.1.1.2.4222|2|15716 +1.3.6.1.2.1.25.5.1.1.2.4224|2|2548 +1.3.6.1.2.1.25.5.1.1.2.4226|2|4060 +1.3.6.1.2.1.25.5.1.1.2.4434|2|312 +1.3.6.1.2.1.25.5.1.1.2.4435|2|348 +1.3.6.1.2.1.25.5.1.1.2.4436|2|280 +1.3.6.1.2.1.25.5.1.1.2.4437|2|304 +1.3.6.1.2.1.25.5.1.1.2.4438|2|272 +1.3.6.1.2.1.25.5.1.1.2.4439|2|296 +1.3.6.1.2.1.25.5.1.1.2.4440|2|296 +1.3.6.1.2.1.25.5.1.1.2.4441|2|280 +1.3.6.1.2.1.25.5.1.1.2.4442|2|300 +1.3.6.1.2.1.25.5.1.1.2.4443|2|164 +1.3.6.1.2.1.25.5.1.1.2.4451|2|16160 +1.3.6.1.2.1.25.5.1.1.2.4773|2|152 +1.3.6.1.2.1.25.5.1.1.2.4774|2|348 +1.3.6.1.2.1.25.5.1.1.2.4775|2|380 +1.3.6.1.2.1.25.5.1.1.2.4776|2|348 +1.3.6.1.2.1.25.5.1.1.2.4777|2|292 +1.3.6.1.2.1.25.5.1.1.2.4778|2|308 +1.3.6.1.2.1.25.5.1.1.2.4779|2|256 +1.3.6.1.2.1.25.5.1.1.2.4780|2|264 +1.3.6.1.2.1.25.5.1.1.2.4781|2|172 +1.3.6.1.2.1.25.5.1.1.2.4782|2|364 +1.3.6.1.2.1.25.5.1.1.2.4784|2|760 +1.3.6.1.2.1.25.5.1.1.2.4786|2|3064 +1.3.6.1.2.1.25.5.1.1.2.4787|2|5052 +1.3.6.1.2.1.25.5.1.1.2.5137|2|176 +1.3.6.1.2.1.25.5.1.1.2.5138|2|176 +1.3.6.1.2.1.25.5.1.1.2.5139|2|164 +1.3.6.1.2.1.25.5.1.1.2.5140|2|324 +1.3.6.1.2.1.25.5.1.1.2.5141|2|356 +1.3.6.1.2.1.25.5.1.1.2.5142|2|332 +1.3.6.1.2.1.25.5.1.1.2.5143|2|296 +1.3.6.1.2.1.25.5.1.1.2.5144|2|176 +1.3.6.1.2.1.25.5.1.1.2.5145|2|280 +1.3.6.1.2.1.25.5.1.1.2.5146|2|300 +1.3.6.1.2.1.25.5.1.1.2.5148|2|16600 +1.3.6.1.2.1.25.5.1.1.2.5151|2|1032 +1.3.6.1.2.1.25.5.1.1.2.5155|2|16436 +1.3.6.1.2.1.25.5.1.1.2.5159|2|16788 +1.3.6.1.2.1.25.5.1.1.2.5501|2|324 +1.3.6.1.2.1.25.5.1.1.2.5502|2|348 +1.3.6.1.2.1.25.5.1.1.2.5503|2|256 +1.3.6.1.2.1.25.5.1.1.2.5504|2|284 +1.3.6.1.2.1.25.5.1.1.2.5505|2|152 +1.3.6.1.2.1.25.5.1.1.2.5506|2|176 +1.3.6.1.2.1.25.5.1.1.2.5507|2|296 +1.3.6.1.2.1.25.5.1.1.2.5508|2|304 +1.3.6.1.2.1.25.5.1.1.2.5509|2|284 +1.3.6.1.2.1.25.5.1.1.2.5510|2|304 +1.3.6.1.2.1.25.5.1.1.2.5516|2|4252 +1.3.6.1.2.1.25.5.1.1.2.5522|2|4436 +1.3.6.1.2.1.25.5.1.1.2.5861|2|144 +1.3.6.1.2.1.25.5.1.1.2.5862|2|324 +1.3.6.1.2.1.25.5.1.1.2.5863|2|144 +1.3.6.1.2.1.25.5.1.1.2.5864|2|140 +1.3.6.1.2.1.25.5.1.1.2.5865|2|392 +1.3.6.1.2.1.25.5.1.1.2.5866|2|308 +1.3.6.1.2.1.25.5.1.1.2.5867|2|384 +1.3.6.1.2.1.25.5.1.1.2.5868|2|324 +1.3.6.1.2.1.25.5.1.1.2.5869|2|268 +1.3.6.1.2.1.25.5.1.1.2.5870|2|284 +1.3.6.1.2.1.25.5.1.1.2.5872|2|21036 +1.3.6.1.2.1.25.5.1.1.2.5875|2|17260 +1.3.6.1.2.1.25.5.1.1.2.5878|2|92724 +1.3.6.1.2.1.25.5.1.1.2.5879|2|22224 +1.3.6.1.2.1.25.5.1.1.2.5884|2|384 +1.3.6.1.2.1.25.5.1.1.2.6344|2|328 +1.3.6.1.2.1.25.5.1.1.2.6345|2|144 +1.3.6.1.2.1.25.5.1.1.2.6346|2|280 +1.3.6.1.2.1.25.5.1.1.2.6347|2|300 +1.3.6.1.2.1.25.5.1.1.2.6348|2|280 +1.3.6.1.2.1.25.5.1.1.2.6349|2|280 +1.3.6.1.2.1.25.5.1.1.2.6350|2|296 +1.3.6.1.2.1.25.5.1.1.2.6351|2|144 +1.3.6.1.2.1.25.5.1.1.2.6352|2|280 +1.3.6.1.2.1.25.5.1.1.2.6353|2|388 +1.3.6.1.2.1.25.5.1.1.2.6358|2|14944 +1.3.6.1.2.1.25.5.1.1.2.6366|2|832 +1.3.6.1.2.1.25.5.1.1.2.6763|2|328 +1.3.6.1.2.1.25.5.1.1.2.6764|2|356 +1.3.6.1.2.1.25.5.1.1.2.6765|2|268 +1.3.6.1.2.1.25.5.1.1.2.6766|2|356 +1.3.6.1.2.1.25.5.1.1.2.6767|2|268 +1.3.6.1.2.1.25.5.1.1.2.6768|2|320 +1.3.6.1.2.1.25.5.1.1.2.6769|2|144 +1.3.6.1.2.1.25.5.1.1.2.6770|2|340 +1.3.6.1.2.1.25.5.1.1.2.6771|2|144 +1.3.6.1.2.1.25.5.1.1.2.6772|2|296 +1.3.6.1.2.1.25.5.1.1.2.6782|2|7868 +1.3.6.1.2.1.25.5.1.1.2.6784|2|17968 +1.3.6.1.2.1.25.5.1.1.2.7174|2|292 +1.3.6.1.2.1.25.5.1.1.2.7175|2|144 +1.3.6.1.2.1.25.5.1.1.2.7176|2|332 +1.3.6.1.2.1.25.5.1.1.2.7177|2|144 +1.3.6.1.2.1.25.5.1.1.2.7178|2|332 +1.3.6.1.2.1.25.5.1.1.2.7179|2|144 +1.3.6.1.2.1.25.5.1.1.2.7180|2|320 +1.3.6.1.2.1.25.5.1.1.2.7181|2|268 +1.3.6.1.2.1.25.5.1.1.2.7182|2|136 +1.3.6.1.2.1.25.5.1.1.2.7183|2|292 +1.3.6.1.2.1.25.5.1.1.2.7188|2|171092 +1.3.6.1.2.1.25.5.1.1.2.7192|2|32956 +1.3.6.1.2.1.25.5.1.1.2.7194|2|17216 +1.3.6.1.2.1.25.5.1.1.2.7196|2|14212 +1.3.6.1.2.1.25.5.1.1.2.7523|2|140 +1.3.6.1.2.1.25.5.1.1.2.7524|2|300 +1.3.6.1.2.1.25.5.1.1.2.7525|2|144 +1.3.6.1.2.1.25.5.1.1.2.7526|2|280 +1.3.6.1.2.1.25.5.1.1.2.7527|2|336 +1.3.6.1.2.1.25.5.1.1.2.7528|2|288 +1.3.6.1.2.1.25.5.1.1.2.7529|2|136 +1.3.6.1.2.1.25.5.1.1.2.7530|2|296 +1.3.6.1.2.1.25.5.1.1.2.7531|2|144 +1.3.6.1.2.1.25.5.1.1.2.7532|2|276 +1.3.6.1.2.1.25.5.1.1.2.7535|2|15752 +1.3.6.1.2.1.25.5.1.1.2.7539|2|81804 +1.3.6.1.2.1.25.5.1.1.2.7543|2|1900 +1.3.6.1.2.1.25.5.1.1.2.7544|2|20220 +1.3.6.1.2.1.25.5.1.1.2.7949|2|288 +1.3.6.1.2.1.25.5.1.1.2.7950|2|284 +1.3.6.1.2.1.25.5.1.1.2.7951|2|280 +1.3.6.1.2.1.25.5.1.1.2.7952|2|276 +1.3.6.1.2.1.25.5.1.1.2.7953|2|284 +1.3.6.1.2.1.25.5.1.1.2.7954|2|328 +1.3.6.1.2.1.25.5.1.1.2.9526|2|896 +1.3.6.1.2.1.25.5.1.1.2.9602|2|560 +1.3.6.1.2.1.25.5.1.1.2.11784|2|68 +1.3.6.1.2.1.25.5.1.1.2.13563|2|5956 +1.3.6.1.2.1.25.5.1.1.2.13565|2|5788 +1.3.6.1.2.1.25.5.1.1.2.13566|2|5064 +1.3.6.1.2.1.25.5.1.1.2.15387|2|1948 +1.3.6.1.2.1.25.5.1.1.2.15921|2|226040 +1.3.6.1.2.1.25.5.1.1.2.16645|2|272 +1.3.6.1.2.1.25.5.1.1.2.16646|2|300 +1.3.6.1.2.1.25.5.1.1.2.16648|2|3144 +1.3.6.1.2.1.25.5.1.1.2.16651|2|18536 +1.3.6.1.2.1.25.5.1.1.2.16652|2|1256 +1.3.6.1.2.1.25.5.1.1.2.16653|2|1440 +1.3.6.1.2.1.25.5.1.1.2.16654|2|17096 +1.3.6.1.2.1.25.5.1.1.2.17900|2|1456 +1.3.6.1.2.1.25.5.1.1.2.18651|2|93160 +1.3.6.1.2.1.25.5.1.1.2.23175|2|1200 +1.3.6.1.2.1.25.5.1.1.2.23330|2|32636 +1.3.6.1.2.1.25.5.1.1.2.24620|2|832 +1.3.6.1.2.1.25.5.1.1.2.25514|2|21768 +1.3.6.1.2.1.25.5.1.1.2.25517|2|25124 +1.3.6.1.2.1.25.5.1.1.2.25518|2|584 +1.3.6.1.2.1.25.5.1.1.2.25522|2|25256 +1.3.6.1.2.1.25.5.1.1.2.25524|2|25460 +1.3.6.1.2.1.25.5.1.1.2.25531|2|25184 +1.3.6.1.2.1.25.5.1.1.2.25946|2|25848 +1.3.6.1.2.1.25.5.1.1.2.27567|2|1228 +1.3.6.1.2.1.25.5.1.1.2.29431|2|14544 +1.3.6.1.2.1.25.5.1.1.2.29439|2|8036 +1.3.6.1.2.1.25.5.1.1.2.29440|2|8220 +1.3.6.1.2.1.25.5.1.1.2.30092|2|108020 +1.3.6.1.2.1.25.5.1.1.2.30120|2|1132 +1.3.6.1.2.1.25.5.1.1.2.31793|2|23800 +1.3.6.1.2.1.31.1.1.1.1.32|4|mgmt +1.3.6.1.2.1.31.1.1.1.1.48|4x|312e30 +1.3.6.1.2.1.31.1.1.1.1.80|4x|2f436f6d6d6f6e2f687474702d74756e6e656c +1.3.6.1.2.1.31.1.1.1.1.96|4x|2f436f6d6d6f6e2f736f636b732d74756e6e656c +1.3.6.1.2.1.31.1.1.1.1.112|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.2.1.31.1.1.1.2.32|65|0 +1.3.6.1.2.1.31.1.1.1.2.48|65|0 +1.3.6.1.2.1.31.1.1.1.2.80|65|0 +1.3.6.1.2.1.31.1.1.1.2.96|65|0 +1.3.6.1.2.1.31.1.1.1.2.112|65|15088 +1.3.6.1.2.1.31.1.1.1.3.32|65|0 +1.3.6.1.2.1.31.1.1.1.3.48|65|0 +1.3.6.1.2.1.31.1.1.1.3.80|65|0 +1.3.6.1.2.1.31.1.1.1.3.96|65|0 +1.3.6.1.2.1.31.1.1.1.3.112|65|2918 +1.3.6.1.2.1.31.1.1.1.4.32|65|0 +1.3.6.1.2.1.31.1.1.1.4.48|65|0 +1.3.6.1.2.1.31.1.1.1.4.80|65|0 +1.3.6.1.2.1.31.1.1.1.4.96|65|0 +1.3.6.1.2.1.31.1.1.1.4.112|65|15103 +1.3.6.1.2.1.31.1.1.1.5.32|65|0 +1.3.6.1.2.1.31.1.1.1.5.48|65|0 +1.3.6.1.2.1.31.1.1.1.5.80|65|0 +1.3.6.1.2.1.31.1.1.1.5.96|65|0 +1.3.6.1.2.1.31.1.1.1.5.112|65|607 +1.3.6.1.2.1.31.1.1.1.6.32|70|457265376 +1.3.6.1.2.1.31.1.1.1.6.48|70|601695323 +1.3.6.1.2.1.31.1.1.1.6.80|70|0 +1.3.6.1.2.1.31.1.1.1.6.96|70|0 +1.3.6.1.2.1.31.1.1.1.6.112|70|392412410 +1.3.6.1.2.1.31.1.1.1.7.32|70|895729 +1.3.6.1.2.1.31.1.1.1.7.48|70|764742 +1.3.6.1.2.1.31.1.1.1.7.80|70|0 +1.3.6.1.2.1.31.1.1.1.7.96|70|0 +1.3.6.1.2.1.31.1.1.1.7.112|70|863320 +1.3.6.1.2.1.31.1.1.1.8.32|70|0 +1.3.6.1.2.1.31.1.1.1.8.48|70|0 +1.3.6.1.2.1.31.1.1.1.8.80|70|0 +1.3.6.1.2.1.31.1.1.1.8.96|70|0 +1.3.6.1.2.1.31.1.1.1.8.112|70|15088 +1.3.6.1.2.1.31.1.1.1.9.32|70|0 +1.3.6.1.2.1.31.1.1.1.9.48|70|0 +1.3.6.1.2.1.31.1.1.1.9.80|70|0 +1.3.6.1.2.1.31.1.1.1.9.96|70|0 +1.3.6.1.2.1.31.1.1.1.9.112|70|2918 +1.3.6.1.2.1.31.1.1.1.10.32|70|308353370 +1.3.6.1.2.1.31.1.1.1.10.48|70|63858761 +1.3.6.1.2.1.31.1.1.1.10.80|70|0 +1.3.6.1.2.1.31.1.1.1.10.96|70|0 +1.3.6.1.2.1.31.1.1.1.10.112|70|401634634 +1.3.6.1.2.1.31.1.1.1.11.32|70|738778 +1.3.6.1.2.1.31.1.1.1.11.48|70|489344 +1.3.6.1.2.1.31.1.1.1.11.80|70|0 +1.3.6.1.2.1.31.1.1.1.11.96|70|0 +1.3.6.1.2.1.31.1.1.1.11.112|70|844482 +1.3.6.1.2.1.31.1.1.1.12.32|70|0 +1.3.6.1.2.1.31.1.1.1.12.48|70|0 +1.3.6.1.2.1.31.1.1.1.12.80|70|0 +1.3.6.1.2.1.31.1.1.1.12.96|70|0 +1.3.6.1.2.1.31.1.1.1.12.112|70|15103 +1.3.6.1.2.1.31.1.1.1.13.32|70|0 +1.3.6.1.2.1.31.1.1.1.13.48|70|0 +1.3.6.1.2.1.31.1.1.1.13.80|70|0 +1.3.6.1.2.1.31.1.1.1.13.96|70|0 +1.3.6.1.2.1.31.1.1.1.13.112|70|607 +1.3.6.1.2.1.31.1.1.1.14.32|2|1 +1.3.6.1.2.1.31.1.1.1.14.48|2|1 +1.3.6.1.2.1.31.1.1.1.14.80|2|2 +1.3.6.1.2.1.31.1.1.1.14.96|2|2 +1.3.6.1.2.1.31.1.1.1.14.112|2|2 +1.3.6.1.2.1.31.1.1.1.15.32|66|100 +1.3.6.1.2.1.31.1.1.1.15.48|66|10000 +1.3.6.1.2.1.31.1.1.1.15.80|66|0 +1.3.6.1.2.1.31.1.1.1.15.96|66|0 +1.3.6.1.2.1.31.1.1.1.15.112|66|10000 +1.3.6.1.2.1.31.1.1.1.16.32|2|2 +1.3.6.1.2.1.31.1.1.1.16.48|2|2 +1.3.6.1.2.1.31.1.1.1.16.80|2|2 +1.3.6.1.2.1.31.1.1.1.16.96|2|2 +1.3.6.1.2.1.31.1.1.1.16.112|2|2 +1.3.6.1.2.1.31.1.1.1.17.32|2|1 +1.3.6.1.2.1.31.1.1.1.17.48|2|1 +1.3.6.1.2.1.31.1.1.1.17.80|2|2 +1.3.6.1.2.1.31.1.1.1.17.96|2|2 +1.3.6.1.2.1.31.1.1.1.17.112|2|2 +1.3.6.1.2.1.31.1.1.1.18.32|4|desc1 +1.3.6.1.2.1.31.1.1.1.18.48|4|desc2 +1.3.6.1.2.1.31.1.1.1.18.80|4|desc3 +1.3.6.1.2.1.31.1.1.1.18.96|4|desc4 +1.3.6.1.2.1.31.1.1.1.18.112|4|desc5 +1.3.6.1.2.1.31.1.1.1.19.32|67|0 +1.3.6.1.2.1.31.1.1.1.19.48|67|0 +1.3.6.1.2.1.31.1.1.1.19.80|67|0 +1.3.6.1.2.1.31.1.1.1.19.96|67|0 +1.3.6.1.2.1.31.1.1.1.19.112|67|0 +1.3.6.1.2.1.92.1.1.1.0|66|1000 +1.3.6.1.2.1.92.1.1.2.0|66|1440 +1.3.6.1.2.1.92.1.2.1.0|65|0 +1.3.6.1.2.1.92.1.2.2.0|65|0 +1.3.6.1.4.1.2021.2.1.1.1|2|1 +1.3.6.1.4.1.2021.2.1.1.2|2|2 +1.3.6.1.4.1.2021.2.1.1.3|2|3 +1.3.6.1.4.1.2021.2.1.1.4|2|4 +1.3.6.1.4.1.2021.2.1.1.5|2|5 +1.3.6.1.4.1.2021.2.1.1.6|2|6 +1.3.6.1.4.1.2021.2.1.2.1|4|bigd +1.3.6.1.4.1.2021.2.1.2.2|4|chmand +1.3.6.1.4.1.2021.2.1.2.3|4|httpd +1.3.6.1.4.1.2021.2.1.2.4|4|mcpd +1.3.6.1.4.1.2021.2.1.2.5|4|sod +1.3.6.1.4.1.2021.2.1.2.6|4|tmm +1.3.6.1.4.1.2021.2.1.3.1|2|1 +1.3.6.1.4.1.2021.2.1.3.2|2|1 +1.3.6.1.4.1.2021.2.1.3.3|2|1 +1.3.6.1.4.1.2021.2.1.3.4|2|1 +1.3.6.1.4.1.2021.2.1.3.5|2|1 +1.3.6.1.4.1.2021.2.1.3.6|2|1 +1.3.6.1.4.1.2021.2.1.4.1|2|0 +1.3.6.1.4.1.2021.2.1.4.2|2|1 +1.3.6.1.4.1.2021.2.1.4.3|2|0 +1.3.6.1.4.1.2021.2.1.4.4|2|1 +1.3.6.1.4.1.2021.2.1.4.5|2|1 +1.3.6.1.4.1.2021.2.1.4.6|2|0 +1.3.6.1.4.1.2021.2.1.5.1|2|1 +1.3.6.1.4.1.2021.2.1.5.2|2|1 +1.3.6.1.4.1.2021.2.1.5.3|2|8 +1.3.6.1.4.1.2021.2.1.5.4|2|1 +1.3.6.1.4.1.2021.2.1.5.5|2|1 +1.3.6.1.4.1.2021.2.1.5.6|2|1 +1.3.6.1.4.1.2021.2.1.100.1|2|0 +1.3.6.1.4.1.2021.2.1.100.2|2|0 +1.3.6.1.4.1.2021.2.1.100.3|2|0 +1.3.6.1.4.1.2021.2.1.100.4|2|0 +1.3.6.1.4.1.2021.2.1.100.5|2|0 +1.3.6.1.4.1.2021.2.1.100.6|2|0 +1.3.6.1.4.1.2021.2.1.101.1|4| +1.3.6.1.4.1.2021.2.1.101.2|4| +1.3.6.1.4.1.2021.2.1.101.3|4| +1.3.6.1.4.1.2021.2.1.101.4|4| +1.3.6.1.4.1.2021.2.1.101.5|4| +1.3.6.1.4.1.2021.2.1.101.6|4| +1.3.6.1.4.1.2021.2.1.102.1|2|0 +1.3.6.1.4.1.2021.2.1.102.2|2|0 +1.3.6.1.4.1.2021.2.1.102.3|2|0 +1.3.6.1.4.1.2021.2.1.102.4|2|0 +1.3.6.1.4.1.2021.2.1.102.5|2|0 +1.3.6.1.4.1.2021.2.1.102.6|2|0 +1.3.6.1.4.1.2021.2.1.103.1|4| +1.3.6.1.4.1.2021.2.1.103.2|4| +1.3.6.1.4.1.2021.2.1.103.3|4| +1.3.6.1.4.1.2021.2.1.103.4|4| +1.3.6.1.4.1.2021.2.1.103.5|4| +1.3.6.1.4.1.2021.2.1.103.6|4| +1.3.6.1.4.1.2021.4.1.0|2|0 +1.3.6.1.4.1.2021.4.2.0|4|swap +1.3.6.1.4.1.2021.4.3.0|2|1023996 +1.3.6.1.4.1.2021.4.4.0|2|563452 +1.3.6.1.4.1.2021.4.5.0|2|7660752 +1.3.6.1.4.1.2021.4.6.0|2|86248 +1.3.6.1.4.1.2021.4.11.0|2|649700 +1.3.6.1.4.1.2021.4.12.0|2|16000 +1.3.6.1.4.1.2021.4.13.0|2|54036 +1.3.6.1.4.1.2021.4.14.0|2|71048 +1.3.6.1.4.1.2021.4.15.0|2|424332 +1.3.6.1.4.1.2021.4.100.0|2|0 +1.3.6.1.4.1.2021.4.101.0|4| +1.3.6.1.4.1.2021.9.1.1.1|2|1 +1.3.6.1.4.1.2021.9.1.1.2|2|2 +1.3.6.1.4.1.2021.9.1.2.1|4x|2f +1.3.6.1.4.1.2021.9.1.2.2|4x|2f766172 +1.3.6.1.4.1.2021.9.1.3.1|4x|2f6465762f6d61707065722f76672d2d64622d2d7664612d7365742e312e726f6f74 +1.3.6.1.4.1.2021.9.1.3.2|4x|2f6465762f6d61707065722f76672d2d64622d2d7664612d7365742e312e5f766172 +1.3.6.1.4.1.2021.9.1.4.1|2|2000 +1.3.6.1.4.1.2021.9.1.4.2|2|10000 +1.3.6.1.4.1.2021.9.1.5.1|2|-1 +1.3.6.1.4.1.2021.9.1.5.2|2|-1 +1.3.6.1.4.1.2021.9.1.6.1|2|428150 +1.3.6.1.4.1.2021.9.1.6.2|2|943128 +1.3.6.1.4.1.2021.9.1.7.1|2|322822 +1.3.6.1.4.1.2021.9.1.7.2|2|515544 +1.3.6.1.4.1.2021.9.1.8.1|2|78704 +1.3.6.1.4.1.2021.9.1.8.2|2|362460 +1.3.6.1.4.1.2021.9.1.9.1|2|18 +1.3.6.1.4.1.2021.9.1.9.2|2|38 +1.3.6.1.4.1.2021.9.1.10.1|2|4 +1.3.6.1.4.1.2021.9.1.10.2|2|17 +1.3.6.1.4.1.2021.9.1.11.1|66|428150 +1.3.6.1.4.1.2021.9.1.11.2|66|943128 +1.3.6.1.4.1.2021.9.1.12.1|66|0 +1.3.6.1.4.1.2021.9.1.12.2|66|0 +1.3.6.1.4.1.2021.9.1.13.1|66|322822 +1.3.6.1.4.1.2021.9.1.13.2|66|515544 +1.3.6.1.4.1.2021.9.1.14.1|66|0 +1.3.6.1.4.1.2021.9.1.14.2|66|0 +1.3.6.1.4.1.2021.9.1.15.1|66|78704 +1.3.6.1.4.1.2021.9.1.15.2|66|362460 +1.3.6.1.4.1.2021.9.1.16.1|66|0 +1.3.6.1.4.1.2021.9.1.16.2|66|0 +1.3.6.1.4.1.2021.9.1.100.1|2|0 +1.3.6.1.4.1.2021.9.1.100.2|2|0 +1.3.6.1.4.1.2021.9.1.101.1|4| +1.3.6.1.4.1.2021.9.1.101.2|4| +1.3.6.1.4.1.2021.10.1.1.1|2|1 +1.3.6.1.4.1.2021.10.1.1.2|2|2 +1.3.6.1.4.1.2021.10.1.1.3|2|3 +1.3.6.1.4.1.2021.10.1.2.1|4x|4c6f61642d31 +1.3.6.1.4.1.2021.10.1.2.2|4x|4c6f61642d35 +1.3.6.1.4.1.2021.10.1.2.3|4x|4c6f61642d3135 +1.3.6.1.4.1.2021.10.1.3.1|4x|302e3237 +1.3.6.1.4.1.2021.10.1.3.2|4x|302e3234 +1.3.6.1.4.1.2021.10.1.3.3|4x|302e3233 +1.3.6.1.4.1.2021.10.1.4.1|4x|31322e3030 +1.3.6.1.4.1.2021.10.1.4.2|4x|31322e3030 +1.3.6.1.4.1.2021.10.1.4.3|4x|31322e3030 +1.3.6.1.4.1.2021.10.1.5.1|2|27 +1.3.6.1.4.1.2021.10.1.5.2|2|24 +1.3.6.1.4.1.2021.10.1.5.3|2|23 +1.3.6.1.4.1.2021.10.1.6.1|68x|9f78043e8a3d71 +1.3.6.1.4.1.2021.10.1.6.2|68x|9f78043e75c28f +1.3.6.1.4.1.2021.10.1.6.3|68x|9f78043e6b851f +1.3.6.1.4.1.2021.10.1.100.1|2|0 +1.3.6.1.4.1.2021.10.1.100.2|2|0 +1.3.6.1.4.1.2021.10.1.100.3|2|0 +1.3.6.1.4.1.2021.10.1.101.1|4| +1.3.6.1.4.1.2021.10.1.101.2|4| +1.3.6.1.4.1.2021.10.1.101.3|4| +1.3.6.1.4.1.2021.11.1.0|2|1 +1.3.6.1.4.1.2021.11.2.0|4|systemStats +1.3.6.1.4.1.2021.11.3.0|2|0 +1.3.6.1.4.1.2021.11.4.0|2|0 +1.3.6.1.4.1.2021.11.5.0|2|82 +1.3.6.1.4.1.2021.11.6.0|2|3 +1.3.6.1.4.1.2021.11.7.0|2|16467 +1.3.6.1.4.1.2021.11.8.0|2|31310 +1.3.6.1.4.1.2021.11.9.0|2|2 +1.3.6.1.4.1.2021.11.10.0|2|3 +1.3.6.1.4.1.2021.11.11.0|2|92 +1.3.6.1.4.1.2021.11.50.0|65|8458649 +1.3.6.1.4.1.2021.11.51.0|65|943954 +1.3.6.1.4.1.2021.11.52.0|65|11839421 +1.3.6.1.4.1.2021.11.53.0|65|318900977 +1.3.6.1.4.1.2021.11.54.0|65|869594 +1.3.6.1.4.1.2021.11.55.0|65|0 +1.3.6.1.4.1.2021.11.56.0|65|0 +1.3.6.1.4.1.2021.11.57.0|65|164771618 +1.3.6.1.4.1.2021.11.58.0|65|71445552 +1.3.6.1.4.1.2021.11.59.0|65|2356812896 +1.3.6.1.4.1.2021.11.60.0|65|1712163215 +1.3.6.1.4.1.2021.11.61.0|65|220796 +1.3.6.1.4.1.2021.11.62.0|65|79704 +1.3.6.1.4.1.2021.11.63.0|65|164009 +1.3.6.1.4.1.2021.11.64.0|65|0 +1.3.6.1.4.1.2021.11.65.0|65|0 +1.3.6.1.4.1.2021.11.66.0|65|0 +1.3.6.1.4.1.2021.13.14.1.0|2|31 +1.3.6.1.4.1.2021.13.14.2.1.2.30|4|bigipTrafficMgmt +1.3.6.1.4.1.2021.13.14.2.1.3.30|4x|2f7573722f6c696236342f6269676970547261666669634d676d742e736f +1.3.6.1.4.1.2021.13.14.2.1.4.30|4| +1.3.6.1.4.1.2021.13.14.2.1.5.30|2|1 +1.3.6.1.4.1.2021.16.1.0|2|250 +1.3.6.1.4.1.2021.100.1.0|2|1 +1.3.6.1.4.1.2021.100.2.0|4x|352e372e32 +1.3.6.1.4.1.2021.100.3.0|4x|244461746524 +1.3.6.1.4.1.2021.100.4.0|4x|4d6f6e204f63742032312030323a33353a30342032303139 +1.3.6.1.4.1.2021.100.5.0|4x|24496424 +1.3.6.1.4.1.2021.100.6.0|4x|20272d2d7072656669783d2f7573722720272d2d737973636f6e666469723d2f6574632720272d2d6c69626469723d2f7573722f6c696236342720272d2d776974682d6f70656e73736c3d2f686f6d652f6635636d2f636d2f626967697031352e302e312f313132383538372f66355f6275696c642f64657666735f7838365f36342f7573722720272d2d656e61626c652d7368617265643d7965732720272d2d656e61626c652d7374617469633d7965732720272d2d64697361626c652d656d6265646465642d7065726c2720272d2d776974682d64656661756c74732720272d2d776974682d6c6962777261702720272d2d776974682d6d6962646972733d2f7573722f73686172652f736e6d702f6d6962732720272d2d776974682d6d6962733d616c6c2720272d2d776974682d64656661756c742d736e6d702d76657273696f6e3d322720272d2d776974682d70657273697374656e742d6469726563746f72793d2f636f6e6669672f6e65742d736e6d702720272d2d776974682d7065726c2d6d6f64756c65733d5052454649583d2f686f6d652f6635636d2f636d2f626967697031352e302e312f313132383538372f66355f6275696c642f5f696e7374726f6f742f7838365f36342f6e65742d736e6d702d352e372e322f75737220494e5354414c4c444952533d76656e646f722720272d2d656e61626c652d697076362720272d2d776974682d656e74657270726973652d6f69643d333337352720272d2d776974682d656e74657270726973652d6e6f74696669636174696f6e2d6f69643d2e312e332e362e312e342e312e333337352e322e342720272d2d776974686f75742d72706d2720272d2d776974682d6f75742d6d69622d6d6f64756c65733d6167656e74206167656e745f6d696273206469736d616e2f6576656e74206469736d616e2f7363686564756c65206d696249492f69665461626c65206d696249492f746370206d696249492f7463705461626c65206d696249492f756470206d696249492f7564705461626c65206d696249492f6970206d696249492f69707636206d696249492f69636d70206d696249492f61742069662d6d69622f6966585461626c652069662d6d69622f69665461626c65207463702d6d69622f746370436f6e6e656374696f6e5461626c65207463702d6d69622f7463704c697374656e65725461626c65207564702d6d69622f756470456e64706f696e745461626c652069702d6d69622f6970416464726573735461626c652069702d6d69622f6970416464726573735072656669785461626c652069702d6d69622f696e65744e6574546f4d656469615461626c652069702d6d69622f697053797374656d53746174735461626c652069702d6d69622f697049665374617473 +1.3.6.1.4.1.2021.100.10.0|2|0 +1.3.6.1.4.1.2021.100.11.0|2|0 +1.3.6.1.4.1.2021.100.12.0|2|0 +1.3.6.1.4.1.2021.100.13.0|2|0 +1.3.6.1.4.1.2021.100.20.0|2|0 +1.3.6.1.4.1.2021.101.1.0|2|0 +1.3.6.1.4.1.2021.101.2.0|4|snmp +1.3.6.1.4.1.2021.101.100.0|2|0 +1.3.6.1.4.1.2021.101.101.0|4| +1.3.6.1.4.1.3375.2.1.1.1.1.1.0|66|8192 +1.3.6.1.4.1.3375.2.1.1.1.1.2.0|2|1 +1.3.6.1.4.1.3375.2.1.1.1.1.3.0|66|300 +1.3.6.1.4.1.3375.2.1.1.1.1.4.0|66|6 +1.3.6.1.4.1.3375.2.1.1.1.1.5.0|2|1 +1.3.6.1.4.1.3375.2.1.1.1.1.6.0|4| +1.3.6.1.4.1.3375.2.1.1.1.1.7.0|66|95 +1.3.6.1.4.1.3375.2.1.1.1.1.8.0|66|85 +1.3.6.1.4.1.3375.2.1.1.1.1.9.0|2|1 +1.3.6.1.4.1.3375.2.1.1.1.1.10.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.11.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.12.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.13.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.14.0|66|0 +1.3.6.1.4.1.3375.2.1.1.1.1.15.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.16.0|66|0 +1.3.6.1.4.1.3375.2.1.1.1.1.17.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.18.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.19.0|66|0 +1.3.6.1.4.1.3375.2.1.1.1.1.20.0|66|0 +1.3.6.1.4.1.3375.2.1.1.1.1.21.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.22.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.23.0|2|1 +1.3.6.1.4.1.3375.2.1.1.1.1.24.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.25.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.26.0|2|0 +1.3.6.1.4.1.3375.2.1.1.1.1.27.0|2|2 +1.3.6.1.4.1.3375.2.1.1.1.1.28.0|66|300 +1.3.6.1.4.1.3375.2.1.1.1.1.29.0|2|1 +1.3.6.1.4.1.3375.2.1.1.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.1.2.0|70|465922 +1.3.6.1.4.1.3375.2.1.1.2.1.3.0|70|45551151 +1.3.6.1.4.1.3375.2.1.1.2.1.4.0|70|481666 +1.3.6.1.4.1.3375.2.1.1.2.1.5.0|70|364502697 +1.3.6.1.4.1.3375.2.1.1.2.1.6.0|70|17 +1.3.6.1.4.1.3375.2.1.1.2.1.7.0|70|59597 +1.3.6.1.4.1.3375.2.1.1.2.1.8.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.1.9.0|70|453523 +1.3.6.1.4.1.3375.2.1.1.2.1.10.0|70|44851350 +1.3.6.1.4.1.3375.2.1.1.2.1.11.0|70|485042 +1.3.6.1.4.1.3375.2.1.1.2.1.12.0|70|364639481 +1.3.6.1.4.1.3375.2.1.1.2.1.13.0|70|17 +1.3.6.1.4.1.3375.2.1.1.2.1.14.0|70|59597 +1.3.6.1.4.1.3375.2.1.1.2.1.15.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.1.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.22.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.29.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.31.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.35.0|70|4803 +1.3.6.1.4.1.3375.2.1.1.2.1.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.38.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.1.39.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.1.40.0|2|1 +1.3.6.1.4.1.3375.2.1.1.2.1.41.0|70|7248386504413460 +1.3.6.1.4.1.3375.2.1.1.2.1.42.0|70|125154350310912 +1.3.6.1.4.1.3375.2.1.1.2.1.43.0|70|7080812734355185 +1.3.6.1.4.1.3375.2.1.1.2.1.44.0|70|6098518016 +1.3.6.1.4.1.3375.2.1.1.2.1.45.0|70|191364000 +1.3.6.1.4.1.3375.2.1.1.2.1.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.48.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.49.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.50.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.51.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.52.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.53.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.54.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.55.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.56.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.57.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.58.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.1.59.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.60.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.61.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.62.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.63.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.1.64.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.65.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.66.0|66|65 +1.3.6.1.4.1.3375.2.1.1.2.1.67.0|66|4790 +1.3.6.1.4.1.3375.2.1.1.2.1.68.0|66|65 +1.3.6.1.4.1.3375.2.1.1.2.1.69.0|66|4877 +1.3.6.1.4.1.3375.2.1.1.2.1.70.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.1.71.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.72.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.73.0|66|34 +1.3.6.1.4.1.3375.2.1.1.2.1.74.0|66|2524 +1.3.6.1.4.1.3375.2.1.1.2.1.75.0|66|34 +1.3.6.1.4.1.3375.2.1.1.2.1.76.0|66|2854 +1.3.6.1.4.1.3375.2.1.1.2.1.77.0|66|5 +1.3.6.1.4.1.3375.2.1.1.2.1.78.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.79.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.80.0|66|35 +1.3.6.1.4.1.3375.2.1.1.2.1.81.0|66|2587 +1.3.6.1.4.1.3375.2.1.1.2.1.82.0|66|35 +1.3.6.1.4.1.3375.2.1.1.2.1.83.0|66|2919 +1.3.6.1.4.1.3375.2.1.1.2.1.84.0|66|5 +1.3.6.1.4.1.3375.2.1.1.2.1.85.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.86.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.87.0|66|8 +1.3.6.1.4.1.3375.2.1.1.2.1.88.0|66|623 +1.3.6.1.4.1.3375.2.1.1.2.1.89.0|66|8 +1.3.6.1.4.1.3375.2.1.1.2.1.90.0|66|826 +1.3.6.1.4.1.3375.2.1.1.2.1.91.0|66|5 +1.3.6.1.4.1.3375.2.1.1.2.1.92.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.93.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.94.0|66|8 +1.3.6.1.4.1.3375.2.1.1.2.1.95.0|66|635 +1.3.6.1.4.1.3375.2.1.1.2.1.96.0|66|8 +1.3.6.1.4.1.3375.2.1.1.2.1.97.0|66|840 +1.3.6.1.4.1.3375.2.1.1.2.1.98.0|66|5 +1.3.6.1.4.1.3375.2.1.1.2.1.99.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.100.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.101.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.102.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.103.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.104.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.105.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.106.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.107.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.108.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.109.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.110.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.111.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.112.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.113.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.114.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.115.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.116.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.117.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.118.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.119.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.120.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.121.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.122.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.123.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.124.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.125.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.126.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.127.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.128.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.129.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.130.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.131.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.132.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.133.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.134.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.135.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.136.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.137.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.138.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.139.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.140.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.141.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.142.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.1.143.0|66|5955584 +1.3.6.1.4.1.3375.2.1.1.2.1.144.0|66|186878 +1.3.6.1.4.1.3375.2.1.1.2.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.2.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.2.3.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.2.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.2.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.2.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.2.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.2.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.3.2.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.3.3.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.3.4.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.3.5.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.4.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.48.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.49.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.50.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.51.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.52.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.53.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.54.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.4.55.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.5.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.5.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.6.2.0|70|30 +1.3.6.1.4.1.3375.2.1.1.2.6.3.0|70|15 +1.3.6.1.4.1.3375.2.1.1.2.6.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.10.0|70|35 +1.3.6.1.4.1.3375.2.1.1.2.6.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.6.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.7.2.0|70|8538932 +1.3.6.1.4.1.3375.2.1.1.2.7.3.0|70|8549205 +1.3.6.1.4.1.3375.2.1.1.2.7.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.17.0|70|69 +1.3.6.1.4.1.3375.2.1.1.2.7.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.7.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.8.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.3.0|70|15103 +1.3.6.1.4.1.3375.2.1.1.2.8.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.20.0|70|15103 +1.3.6.1.4.1.3375.2.1.1.2.8.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.8.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.9.2.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.4.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.7.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.21.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.48.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.49.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.50.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.51.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.52.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.53.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.54.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.9.55.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.56.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.57.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.58.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.59.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.60.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.61.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.62.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.63.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.64.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.65.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.66.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.67.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.68.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.69.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.70.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.71.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.72.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.73.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.74.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.75.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.76.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.77.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.78.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.79.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.80.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.81.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.82.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.83.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.84.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.85.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.86.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.87.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.88.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.89.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.90.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.91.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.92.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.93.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.94.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.95.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.96.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.97.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.98.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.99.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.100.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.101.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.102.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.103.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.104.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.9.105.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.10.2.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.10.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.4.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.10.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.7.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.10.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.21.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.10.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.48.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.49.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.50.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.51.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.52.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.53.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.54.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.55.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.56.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.57.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.58.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.59.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.60.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.61.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.62.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.63.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.64.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.65.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.66.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.67.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.68.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.69.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.70.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.71.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.72.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.73.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.74.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.75.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.76.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.77.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.78.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.79.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.80.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.81.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.82.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.83.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.84.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.85.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.86.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.87.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.88.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.89.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.90.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.91.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.92.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.93.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.10.94.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.11.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.11.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.12.2.0|66|8 +1.3.6.1.4.1.3375.2.1.1.2.12.3.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.12.4.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.12.5.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.12.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.8.0|70|8 +1.3.6.1.4.1.3375.2.1.1.2.12.9.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.12.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.12.20.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.13.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.13.2.0|66|6 +1.3.6.1.4.1.3375.2.1.1.2.13.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.5.0|70|6 +1.3.6.1.4.1.3375.2.1.1.2.13.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.13.13.0|70|60 +1.3.6.1.4.1.3375.2.1.1.2.14.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.14.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.5.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.14.6.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.14.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.14.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.17.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.17.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.17.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.17.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.17.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.18.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.18.12.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.18.13.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.18.14.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.18.15.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.18.16.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.18.17.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.19.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.19.2.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.19.3.0|70|59597 +1.3.6.1.4.1.3375.2.1.1.2.19.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.5.0|70|30820 +1.3.6.1.4.1.3375.2.1.1.2.19.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.7.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.19.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.19.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.20.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.20.2.0|70|7844610048 +1.3.6.1.4.1.3375.2.1.1.2.20.3.0|70|1341733792 +1.3.6.1.4.1.3375.2.1.1.2.20.4.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.20.5.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.20.6.0|70|4229365 +1.3.6.1.4.1.3375.2.1.1.2.20.7.0|70|471979 +1.3.6.1.4.1.3375.2.1.1.2.20.8.0|70|5919762 +1.3.6.1.4.1.3375.2.1.1.2.20.9.0|70|159451735 +1.3.6.1.4.1.3375.2.1.1.2.20.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.20.11.0|70|110399 +1.3.6.1.4.1.3375.2.1.1.2.20.12.0|70|434800 +1.3.6.1.4.1.3375.2.1.1.2.20.13.0|66|6 +1.3.6.1.4.1.3375.2.1.1.2.20.14.0|66|2 +1.3.6.1.4.1.3375.2.1.1.2.20.15.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.16.0|66|3 +1.3.6.1.4.1.3375.2.1.1.2.20.17.0|66|87 +1.3.6.1.4.1.3375.2.1.1.2.20.18.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.19.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.20.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.21.0|66|6 +1.3.6.1.4.1.3375.2.1.1.2.20.22.0|66|2 +1.3.6.1.4.1.3375.2.1.1.2.20.23.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.24.0|66|3 +1.3.6.1.4.1.3375.2.1.1.2.20.25.0|66|86 +1.3.6.1.4.1.3375.2.1.1.2.20.26.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.27.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.28.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.29.0|66|7 +1.3.6.1.4.1.3375.2.1.1.2.20.30.0|66|2 +1.3.6.1.4.1.3375.2.1.1.2.20.31.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.32.0|66|3 +1.3.6.1.4.1.3375.2.1.1.2.20.33.0|66|87 +1.3.6.1.4.1.3375.2.1.1.2.20.34.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.35.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.36.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.37.0|66|6 +1.3.6.1.4.1.3375.2.1.1.2.20.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.20.39.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.40.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.41.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.20.42.0|66|7660752 +1.3.6.1.4.1.3375.2.1.1.2.20.43.0|66|1310286 +1.3.6.1.4.1.3375.2.1.1.2.20.44.0|70|1746092032 +1.3.6.1.4.1.3375.2.1.1.2.20.45.0|70|1150369792 +1.3.6.1.4.1.3375.2.1.1.2.20.46.0|70|1048571904 +1.3.6.1.4.1.3375.2.1.1.2.20.47.0|70|428797952 +1.3.6.1.4.1.3375.2.1.1.2.20.48.0|66|1705168 +1.3.6.1.4.1.3375.2.1.1.2.20.49.0|66|1123408 +1.3.6.1.4.1.3375.2.1.1.2.20.50.0|66|1023996 +1.3.6.1.4.1.3375.2.1.1.2.20.51.0|66|418748 +1.3.6.1.4.1.3375.2.1.1.2.21.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.21.2.0|70|2 +1.3.6.1.4.1.3375.2.1.1.2.21.3.0|70|466559 +1.3.6.1.4.1.3375.2.1.1.2.21.4.0|70|45598995 +1.3.6.1.4.1.3375.2.1.1.2.21.5.0|70|482303 +1.3.6.1.4.1.3375.2.1.1.2.21.6.0|70|364552584 +1.3.6.1.4.1.3375.2.1.1.2.21.7.0|70|17 +1.3.6.1.4.1.3375.2.1.1.2.21.8.0|70|59597 +1.3.6.1.4.1.3375.2.1.1.2.21.9.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.21.10.0|70|454160 +1.3.6.1.4.1.3375.2.1.1.2.21.11.0|70|44899349 +1.3.6.1.4.1.3375.2.1.1.2.21.12.0|70|485679 +1.3.6.1.4.1.3375.2.1.1.2.21.13.0|70|364689511 +1.3.6.1.4.1.3375.2.1.1.2.21.14.0|70|17 +1.3.6.1.4.1.3375.2.1.1.2.21.15.0|70|59597 +1.3.6.1.4.1.3375.2.1.1.2.21.16.0|66|4 +1.3.6.1.4.1.3375.2.1.1.2.21.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.21.0|70|4803 +1.3.6.1.4.1.3375.2.1.1.2.21.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.28.0|70|6098518016 +1.3.6.1.4.1.3375.2.1.1.2.21.29.0|70|191364000 +1.3.6.1.4.1.3375.2.1.1.2.21.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.34.0|66|1 +1.3.6.1.4.1.3375.2.1.1.2.21.35.0|66|1 +1.3.6.1.4.1.3375.2.1.1.2.21.36.0|66|1 +1.3.6.1.4.1.3375.2.1.1.2.21.37.0|66|5955584 +1.3.6.1.4.1.3375.2.1.1.2.21.38.0|66|186878 +1.3.6.1.4.1.3375.2.1.1.2.21.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.21.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.22.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.22.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.23.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.23.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.24.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.48.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.49.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.50.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.51.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.52.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.53.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.54.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.55.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.56.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.57.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.24.58.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.25.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.25.25.0|4|0 +1.3.6.1.4.1.3375.2.1.1.2.26.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.26.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.26.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.27.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.27.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.27.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.27.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.27.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.28.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.28.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.29.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.29.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.30.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.30.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.30.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.30.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.30.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.31.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.31.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.32.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.32.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.32.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.32.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.33.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.33.2.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.34.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.34.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.34.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.34.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.34.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.34.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.35.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.35.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.36.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.36.37.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.36.38.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.36.39.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.36.40.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.37.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.37.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.37.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.38.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.39.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.40.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.41.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.42.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.43.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.44.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.45.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.46.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.47.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.48.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.49.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.50.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.51.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.52.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.53.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.54.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.55.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.56.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.57.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.58.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.37.59.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.38.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.12.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.34.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.35.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.36.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.38.37.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.38.38.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.38.39.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.38.40.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.38.41.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.38.42.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.38.43.0|66|0 +1.3.6.1.4.1.3375.2.1.1.2.39.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.39.2.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.3.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.4.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.5.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.6.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.7.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.8.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.9.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.10.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.11.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.12.0|4|0 +1.3.6.1.4.1.3375.2.1.1.2.39.13.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.14.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.15.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.16.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.17.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.18.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.19.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.20.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.21.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.22.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.23.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.24.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.25.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.26.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.27.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.28.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.29.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.30.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.31.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.32.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.39.33.0|70|0 +1.3.6.1.4.1.3375.2.1.1.2.40.1.0|2|0 +1.3.6.1.4.1.3375.2.1.1.2.40.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.1.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.1.1.2.1.1.1.4.10.164.0.51|2|1 +1.3.6.1.4.1.3375.2.1.2.1.1.2.1.2.1.4.10.164.0.51|4x|0aa40033 +1.3.6.1.4.1.3375.2.1.2.1.1.2.1.3.1.4.10.164.0.51|2|1 +1.3.6.1.4.1.3375.2.1.2.1.1.2.1.4.1.4.10.164.0.51|4x|ffffffff +1.3.6.1.4.1.3375.2.1.2.1.1.2.1.5.1.4.10.164.0.51|4x|31302e3136342e302e3531 +1.3.6.1.4.1.3375.2.1.2.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.3.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.3.1.3.0|2|0 +1.3.6.1.4.1.3375.2.1.2.3.1.4.0|2|0 +1.3.6.1.4.1.3375.2.1.2.3.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.1.0|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.1.3.49.46.48|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.1.4.109.103.109.116|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.2.3.49.46.48|66|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.2.4.109.103.109.116|66|100 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.3.3.49.46.48|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.3.4.109.103.109.116|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.4.3.49.46.48|66|10000 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.4.4.109.103.109.116|66|100 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.5.3.49.46.48|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.5.4.109.103.109.116|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.6.3.49.46.48|4x|42010aa40033 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.6.4.109.103.109.116|4x|42010aa40033 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.7.3.49.46.48|66|1460 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.7.4.109.103.109.116|66|1460 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.8.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.8.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.9.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.9.4.109.103.109.116|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.10.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.10.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.11.3.49.46.48|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.11.4.109.103.109.116|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.12.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.12.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.13.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.13.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.14.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.14.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.15.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.15.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.16.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.16.4.109.103.109.116|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.17.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.17.4.109.103.109.116|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.18.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.18.4.109.103.109.116|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.19.3.49.46.48|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.19.4.109.103.109.116|2|1 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.20.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.20.4.109.103.109.116|2|0 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.21.3.49.46.48|2|2 +1.3.6.1.4.1.3375.2.1.2.4.1.2.1.21.4.109.103.109.116|2|2 +1.3.6.1.4.1.3375.2.1.2.4.2.1.0|2|9 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.3.49.46.48.1|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.3.49.46.48.2|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.3.49.46.48.3|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.4.109.103.109.116.1|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.4.109.103.109.116.2|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.4.109.103.109.116.3|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.4.109.103.109.116.4|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.4.109.103.109.116.5|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.1.4.109.103.109.116.6|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.3.49.46.48.1|2|1 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.3.49.46.48.2|2|2 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.3.49.46.48.3|2|3 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.4.109.103.109.116.1|2|1 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.4.109.103.109.116.2|2|2 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.4.109.103.109.116.3|2|3 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.4.109.103.109.116.4|2|4 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.4.109.103.109.116.5|2|5 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.2.4.109.103.109.116.6|2|6 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.3.49.46.48.1|2|10 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.3.49.46.48.2|2|14 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.3.49.46.48.3|2|13 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.4.109.103.109.116.1|2|14 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.4.109.103.109.116.2|2|13 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.4.109.103.109.116.3|2|2 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.4.109.103.109.116.4|2|1 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.4.109.103.109.116.5|2|4 +1.3.6.1.4.1.3375.2.1.2.4.2.2.1.3.4.109.103.109.116.6|2|3 +1.3.6.1.4.1.3375.2.1.2.4.3.1.0|2|2 +1.3.6.1.4.1.3375.2.1.2.4.3.2.1.1.1|2|1 +1.3.6.1.4.1.3375.2.1.2.4.3.2.1.1.2|2|2 +1.3.6.1.4.1.3375.2.1.2.4.3.2.1.2.1|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.3.2.1.2.2|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.4.4.2.0|2|2 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.1.3.49.46.48|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.1.4.109.103.109.116|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.2.3.49.46.48|70|766261 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.2.4.109.103.109.116|70|897197 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.3.3.49.46.48|70|601841092 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.3.4.109.103.109.116|70|457405873 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.4.3.49.46.48|70|490862 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.4.4.109.103.109.116|70|740246 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.5.3.49.46.48|70|63998013 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.5.4.109.103.109.116|70|308487474 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.6.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.6.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.7.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.7.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.8.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.8.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.9.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.9.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.10.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.10.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.11.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.11.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.12.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.12.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.13.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.13.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.14.3.49.46.48|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.14.4.109.103.109.116|70|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.15.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.4.4.3.1.15.4.109.103.109.116|2|0 +1.3.6.1.4.1.3375.2.1.2.4.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.4.5.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.4.6.1.0|2|4 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.1.3.49.46.48.1|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.1.3.49.46.48.2|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.1.4.109.103.109.116.1|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.1.4.109.103.109.116.2|4|mgmt +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.2.3.49.46.48.1|2|1 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.2.3.49.46.48.2|2|2 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.2.4.109.103.109.116.1|2|1 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.2.4.109.103.109.116.2|2|2 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.3.3.49.46.48.1|2|14 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.3.3.49.46.48.2|2|13 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.3.4.109.103.109.116.1|2|14 +1.3.6.1.4.1.3375.2.1.2.4.6.2.1.3.4.109.103.109.116.2|2|13 +1.3.6.1.4.1.3375.2.1.2.4.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.5.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.5.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.5.3.1.0|4|all +1.3.6.1.4.1.3375.2.1.2.6.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.6.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.6.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.6.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.6.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.6.5.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.7.1.1.0|2|2 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.1.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|1 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.1.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|1 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.2.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|00000000 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.2.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|0aa40001 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.3.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|1 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.3.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|1 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.4.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|00000000 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.4.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|ffffffff +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.5.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|0 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.5.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|2 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.6.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|1 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.6.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|2 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.7.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|0aa40001 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.7.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.8.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|0 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.8.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|0 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.9.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|2f436f6d6d6f6e2f64656661756c74 +1.3.6.1.4.1.3375.2.1.2.7.1.2.1.9.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|2f436f6d6d6f6e2f6468636c69656e745f726f75746531 +1.3.6.1.4.1.3375.2.1.2.7.2.1.0|2|2 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.1.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|1 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.1.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|1 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.2.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|00000000 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.2.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|0aa40001 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.3.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|1 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.3.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|1 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.4.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|00000000 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.4.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|ffffffff +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.5.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|0 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.5.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|2 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.6.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4| +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.6.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.7.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|1 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.7.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|2 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.8.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|0aa40001 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.8.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.9.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4| +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.9.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4| +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.10.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|2|0 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.10.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|2|0 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.11.15.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116|4x|2f436f6d6d6f6e2f64656661756c74 +1.3.6.1.4.1.3375.2.1.2.7.2.2.1.11.23.47.67.111.109.109.111.110.47.100.104.99.108.105.101.110.116.95.114.111.117.116.101.49|4x|2f436f6d6d6f6e2f6468636c69656e745f726f75746531 +1.3.6.1.4.1.3375.2.1.2.8.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.1.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|2|1 +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.2.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|4x|0aa40033 +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.3.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|2|1 +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.4.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|4x|ffffffff +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.5.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|66|0 +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.6.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|2|0 +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.7.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.8.1.2.1.8.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99|4x|2f436f6d6d6f6e2f73656c665f316e6963 +1.3.6.1.4.1.3375.2.1.2.9.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.9.1.2.1.1.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99.256.0|2|2 +1.3.6.1.4.1.3375.2.1.2.9.1.2.1.2.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99.256.0|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.1.2.9.1.2.1.3.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99.256.0|2|256 +1.3.6.1.4.1.3375.2.1.2.9.1.2.1.4.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99.256.0|66|0 +1.3.6.1.4.1.3375.2.1.2.9.1.2.1.5.17.47.67.111.109.109.111.110.47.115.101.108.102.95.49.110.105.99.256.0|4x|2f436f6d6d6f6e2f73656c665f316e6963 +1.3.6.1.4.1.3375.2.1.2.9.2.1.0|2|13 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.2.0|2|2 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.22|2|6 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.53|2|6 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.161|2|6 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.4353|2|6 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.8443|2|6 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.53|2|17 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.161|2|17 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.520|2|17 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.1026|2|17 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.4353|2|17 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.89.0|2|89 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.1.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.103.0|2|103 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.2.0|66|0 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.22|66|22 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.53|66|53 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.161|66|161 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.4353|66|4353 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.8443|66|8443 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.53|66|53 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.161|66|161 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.520|66|520 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.1026|66|1026 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.4353|66|4353 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.89.0|66|0 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.2.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.103.0|66|0 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.2.0|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.22|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.53|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.161|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.4353|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.6.8443|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.53|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.161|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.520|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.1026|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.17.4353|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.89.0|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.9.2.2.1.3.18.47.67.111.109.109.111.110.47.115.101.108.102.45.97.108.108.111.119.103.0|4x|2f436f6d6d6f6e2f73656c662d616c6c6f77 +1.3.6.1.4.1.3375.2.1.2.10.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.10.1.2.1.1.12.47.67.111.109.109.111.110.47.99.105.115.116|66|0 +1.3.6.1.4.1.3375.2.1.2.10.1.2.1.2.12.47.67.111.109.109.111.110.47.99.105.115.116|2|61440 +1.3.6.1.4.1.3375.2.1.2.10.1.2.1.3.12.47.67.111.109.109.111.110.47.99.105.115.116|4x|000000000000 +1.3.6.1.4.1.3375.2.1.2.10.1.2.1.4.12.47.67.111.109.109.111.110.47.99.105.115.116|4x|000000000000 +1.3.6.1.4.1.3375.2.1.2.10.1.2.1.5.12.47.67.111.109.109.111.110.47.99.105.115.116|4x|2f436f6d6d6f6e2f63697374 +1.3.6.1.4.1.3375.2.1.2.10.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.2.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.2.3.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.2.4.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.2.5.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.2.6.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.2.7.0|4| +1.3.6.1.4.1.3375.2.1.2.10.2.8.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.3.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.1.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|66|0 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.2.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.3.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.4.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|2|5 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.5.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.6.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|2|128 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.7.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|66|500 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.8.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|2|5 +1.3.6.1.4.1.3375.2.1.2.10.3.2.1.9.12.47.67.111.109.109.111.110.47.99.105.115.116.3.49.46.48|4x|2f436f6d6d6f6e2f63697374 +1.3.6.1.4.1.3375.2.1.2.10.4.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.10.4.2.1.1.12.47.67.111.109.109.111.110.47.99.105.115.116.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|66|0 +1.3.6.1.4.1.3375.2.1.2.10.4.2.1.2.12.47.67.111.109.109.111.110.47.99.105.115.116.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.10.4.2.1.3.12.47.67.111.109.109.111.110.47.99.105.115.116.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|4x|2f436f6d6d6f6e2f63697374 +1.3.6.1.4.1.3375.2.1.2.10.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.3.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.4.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.5.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.6.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.7.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.8.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.9.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.5.10.0|66|0 +1.3.6.1.4.1.3375.2.1.2.10.5.11.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.6.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.7.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.8.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.10.9.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.1.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|4 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.2.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|15 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.3.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|2 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.4.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|20 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.5.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|6 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.6.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|20 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.7.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|4| +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.8.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|2|0 +1.3.6.1.4.1.3375.2.1.2.10.9.2.1.9.19.47.67.111.109.109.111.110.47.115.116.112.45.103.108.111.98.97.108.115|4x|2f436f6d6d6f6e2f7374702d676c6f62616c73 +1.3.6.1.4.1.3375.2.1.2.11.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.11.1.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.12.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.12.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.12.2.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.12.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.13.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.1.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.2.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|4094 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.3.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|0 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.4.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|4x|000000000000 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.5.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|4x|42010aa40033 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.6.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|0 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.7.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|0 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.8.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|1460 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.9.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|66|90 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.10.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|7 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.11.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|0 +1.3.6.1.4.1.3375.2.1.2.13.1.2.1.12.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|2|0 +1.3.6.1.4.1.3375.2.1.2.13.2.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.13.2.2.1.1.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108.3.49.46.48|4x|312e30 +1.3.6.1.4.1.3375.2.1.2.13.2.2.1.2.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108.3.49.46.48|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.13.2.2.1.3.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.13.2.2.1.4.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108.3.49.46.48|2|0 +1.3.6.1.4.1.3375.2.1.2.13.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.13.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.13.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.13.6.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.1.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.2.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|766453 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.3.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|601860927 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.4.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|491054 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.5.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|64018584 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.6.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.7.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.8.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.9.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.10.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.11.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.6.2.1.12.16.47.67.111.109.109.111.110.47.105.110.116.101.114.110.97.108|70|0 +1.3.6.1.4.1.3375.2.1.2.13.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.14.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.1.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|2f436f6d6d6f6e2f626967697031 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.2.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|0aa40033 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.3.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|2|1 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.4.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|66352d6269672d69702d6164632d676f6f642d62796f6c2d312d766d2e632e64617461646f672d696e746567726174696f6e732d6c61622e696e7465726e616c +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.5.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.6.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|2|2 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.7.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.8.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|2|2 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.9.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4| +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.10.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.11.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|2|2 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.12.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|66|0 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.13.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|31352e302e31 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.14.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|4249472d4950 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.15.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4|Final +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.16.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|4249472d4950205669727475616c2045646974696f6e +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.17.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4|Z100 +1.3.6.1.4.1.3375.2.1.2.14.1.2.1.18.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|32366666346134642d313930652d313261632d643432353765643336626136 +1.3.6.1.4.1.3375.2.1.2.14.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.14.4.1.0|2|1 +1.3.6.1.4.1.3375.2.1.2.14.4.2.1.1.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49.1|4x|2f436f6d6d6f6e2f626967697031 +1.3.6.1.4.1.3375.2.1.2.14.4.2.1.2.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49.1|2|1 +1.3.6.1.4.1.3375.2.1.2.14.4.2.1.3.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49.1|4x|4249472d49502c20564520547269616c7c424f504a5743432d55454352574b4f7c526174652053686170696e677c45787465726e616c20496e7465726661636520616e64204e6574776f726b2048534d2c2056457c53444e2053657276696365732c2056457c53534c2c20466f72776172642050726f78792c2056457c4249472d49502056452c204d756c74696361737420526f7574696e677c41504d2c204c696d697465647c53534c2c2056457c444e532028314b20515053292c2056457c526f7574696e672042756e646c652c2056457c41534d2c2056457c43727974706f204f66666c6f61642c2056452c20546965722031202832354d202d203230304d297c4d617820436f6d7072657373696f6e2c2056457c41464d2c2056457c444e535345437c416e74692d566972757320436865636b737c4261736520456e64706f696e7420536563757269747920436865636b737c4669726577616c6c20436865636b737c4e6574776f726b204163636573737c536563757265205669727475616c204b6579626f6172647c41504d2c20576562204170706c69636174696f6e7c4d616368696e6520436572746966696361746520436865636b737c50726f74656374656420576f726b73706163657c52656d6f7465204465736b746f707c4170702054756e6e656c7c56452c2043617272696572204772616465204e4154202841464d204f4e4c59297c50534d2c205645 +1.3.6.1.4.1.3375.2.1.2.14.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.14.6.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.14.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.15.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.15.1.2.0|2|0 +1.3.6.1.4.1.3375.2.1.2.16.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.17.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.2.17.1.2.0|2|0 +1.3.6.1.4.1.3375.2.1.3.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.3.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.3.2.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.3.2.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.3.2.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.3.2.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.3.3.1.0|4|Z100 +1.3.6.1.4.1.3375.2.1.3.3.2.0|4|deprecated +1.3.6.1.4.1.3375.2.1.3.3.3.0|4x|32366666346134642d313930652d313261632d643432353765643336626136 +1.3.6.1.4.1.3375.2.1.3.5.1.0|4|Z100 +1.3.6.1.4.1.3375.2.1.3.5.2.0|4x|4249472d4950205669727475616c2045646974696f6e +1.3.6.1.4.1.3375.2.1.3.6.1.0|2|0 +1.3.6.1.4.1.3375.2.1.4.1.0|4x|4249472d4950 +1.3.6.1.4.1.3375.2.1.4.2.0|4x|31352e302e31 +1.3.6.1.4.1.3375.2.1.4.3.0|4x|302e302e3131 +1.3.6.1.4.1.3375.2.1.4.4.0|4|Final +1.3.6.1.4.1.3375.2.1.4.5.0|4x|467269204175672020322032313a33383a3033205044542032303139 +1.3.6.1.4.1.3375.2.1.4.6.0|4|deprecated +1.3.6.1.4.1.3375.2.1.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.5.2.0|2|0 +1.3.6.1.4.1.3375.2.1.6.1.0|4|Linux +1.3.6.1.4.1.3375.2.1.6.2.0|4x|66352d6269672d69702d6164632d676f6f642d62796f6c2d312d766d2e632e64617461646f672d696e746567726174696f6e732d6c61622e696e7465726e616c +1.3.6.1.4.1.3375.2.1.6.3.0|4x|332e31302e302d3836322e31342e342e656c372e76652e7838365f3634 +1.3.6.1.4.1.3375.2.1.6.4.0|4x|233120534d50204672692041756720322031393a33343a3135205044542032303139 +1.3.6.1.4.1.3375.2.1.6.5.0|4x|7838365f3634 +1.3.6.1.4.1.3375.2.1.6.6.0|67|181588900 +1.3.6.1.4.1.3375.2.1.6.7.0|66|1815889 +1.3.6.1.4.1.3375.2.1.7.1.1.0|70|7844610048 +1.3.6.1.4.1.3375.2.1.7.1.2.0|70|1341751080 +1.3.6.1.4.1.3375.2.1.7.1.3.0|66|7660752 +1.3.6.1.4.1.3375.2.1.7.1.4.0|66|1310303 +1.3.6.1.4.1.3375.2.1.7.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.7.3.1.0|2|8 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.1.47|4x|2f +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.4.47.117.115.114|4x|2f757372 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.4.47.118.97.114|4x|2f766172 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.7.47.99.111.110.102.105.103|4x|2f636f6e666967 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.7.47.115.104.97.114.101.100|4x|2f736861726564 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.8.47.97.112.112.100.97.116.97|4x|2f61707064617461 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.8.47.118.97.114.47.108.111.103|4x|2f7661722f6c6f67 +1.3.6.1.4.1.3375.2.1.7.3.2.1.1.14.47.118.97.114.47.110.97.109.101.100.47.108.105.98|4x|2f7661722f6e616d65642f6c6962 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.1.47|66|1024 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.4.47.117.115.114|66|4096 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.4.47.118.97.114|66|4096 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.7.47.99.111.110.102.105.103|66|1024 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.7.47.115.104.97.114.101.100|66|4096 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.8.47.97.112.112.100.97.116.97|66|1024 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.8.47.118.97.114.47.108.111.103|66|4096 +1.3.6.1.4.1.3375.2.1.7.3.2.1.2.14.47.118.97.114.47.110.97.109.101.100.47.108.105.98|66|4096 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.1.47|66|428150 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.4.47.117.115.114|66|1296662 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.4.47.118.97.114|66|235782 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.7.47.99.111.110.102.105.103|66|479716 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.7.47.115.104.97.114.101.100|66|3837692 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.8.47.97.112.112.100.97.116.97|66|31729 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.8.47.118.97.114.47.108.111.103|66|247878 +1.3.6.1.4.1.3375.2.1.7.3.2.1.3.14.47.118.97.114.47.110.97.109.101.100.47.108.105.98|66|235782 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.1.47|66|322822 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.4.47.117.115.114|66|184613 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.4.47.118.97.114|66|128886 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.7.47.99.111.110.102.105.103|66|435708 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.7.47.115.104.97.114.101.100|66|3593837 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.8.47.97.112.112.100.97.116.97|66|25575 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.8.47.118.97.114.47.108.111.103|66|125719 +1.3.6.1.4.1.3375.2.1.7.3.2.1.4.14.47.118.97.114.47.110.97.109.101.100.47.108.105.98|66|128886 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.1.47|66|112640 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.4.47.117.115.114|66|338016 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.4.47.118.97.114|66|60928 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.7.47.99.111.110.102.105.103|66|125984 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.7.47.115.104.97.114.101.100|66|983040 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.8.47.97.112.112.100.97.116.97|66|8192 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.8.47.118.97.114.47.108.111.103|66|64000 +1.3.6.1.4.1.3375.2.1.7.3.2.1.5.14.47.118.97.114.47.110.97.109.101.100.47.108.105.98|66|60928 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.1.47|66|108402 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.4.47.117.115.114|66|253046 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.4.47.118.97.114|66|50550 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.7.47.99.111.110.102.105.103|66|125686 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.7.47.115.104.97.114.101.100|66|982681 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.8.47.97.112.112.100.97.116.97|66|8176 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.8.47.118.97.114.47.108.111.103|66|63760 +1.3.6.1.4.1.3375.2.1.7.3.2.1.6.14.47.118.97.114.47.110.97.109.101.100.47.108.105.98|66|50550 +1.3.6.1.4.1.3375.2.1.7.4.1.0|2|1 +1.3.6.1.4.1.3375.2.1.7.4.2.1.1.1.48|4|0 +1.3.6.1.4.1.3375.2.1.7.4.2.1.2.1.48|70|7844610048 +1.3.6.1.4.1.3375.2.1.7.4.2.1.3.1.48|70|1341877992 +1.3.6.1.4.1.3375.2.1.7.4.2.1.4.1.48|2|1 +1.3.6.1.4.1.3375.2.1.7.4.2.1.5.1.48|70|2 +1.3.6.1.4.1.3375.2.1.7.4.2.1.6.1.48|70|2 +1.3.6.1.4.1.3375.2.1.7.4.2.1.7.1.48|70|1746092032 +1.3.6.1.4.1.3375.2.1.7.4.2.1.8.1.48|70|1150513152 +1.3.6.1.4.1.3375.2.1.7.4.2.1.9.1.48|70|1048571904 +1.3.6.1.4.1.3375.2.1.7.4.2.1.10.1.48|70|428797952 +1.3.6.1.4.1.3375.2.1.7.4.2.1.11.1.48|66|7660752 +1.3.6.1.4.1.3375.2.1.7.4.2.1.12.1.48|66|1310427 +1.3.6.1.4.1.3375.2.1.7.4.2.1.13.1.48|66|1705168 +1.3.6.1.4.1.3375.2.1.7.4.2.1.14.1.48|66|1123548 +1.3.6.1.4.1.3375.2.1.7.4.2.1.15.1.48|66|1023996 +1.3.6.1.4.1.3375.2.1.7.4.2.1.16.1.48|66|418748 +1.3.6.1.4.1.3375.2.1.7.5.1.0|2|2 +1.3.6.1.4.1.3375.2.1.7.5.2.1.1.1.48.1|4|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.1.1.48.2|4|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.2.1.48.1|2|1 +1.3.6.1.4.1.3375.2.1.7.5.2.1.2.1.48.2|2|2 +1.3.6.1.4.1.3375.2.1.7.5.2.1.3.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.3.1.48.2|66|1 +1.3.6.1.4.1.3375.2.1.7.5.2.1.4.1.48.1|70|3990585 +1.3.6.1.4.1.3375.2.1.7.5.2.1.4.1.48.2|70|4468255 +1.3.6.1.4.1.3375.2.1.7.5.2.1.5.1.48.1|70|474468 +1.3.6.1.4.1.3375.2.1.7.5.2.1.5.1.48.2|70|469498 +1.3.6.1.4.1.3375.2.1.7.5.2.1.6.1.48.1|70|5873688 +1.3.6.1.4.1.3375.2.1.7.5.2.1.6.1.48.2|70|5965975 +1.3.6.1.4.1.3375.2.1.7.5.2.1.7.1.48.1|70|159394504 +1.3.6.1.4.1.3375.2.1.7.5.2.1.7.1.48.2|70|159512430 +1.3.6.1.4.1.3375.2.1.7.5.2.1.8.1.48.1|70|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.8.1.48.2|70|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.9.1.48.1|70|120654 +1.3.6.1.4.1.3375.2.1.7.5.2.1.9.1.48.2|70|100147 +1.3.6.1.4.1.3375.2.1.7.5.2.1.10.1.48.1|70|463951 +1.3.6.1.4.1.3375.2.1.7.5.2.1.10.1.48.2|70|405665 +1.3.6.1.4.1.3375.2.1.7.5.2.1.11.1.48.1|66|5 +1.3.6.1.4.1.3375.2.1.7.5.2.1.11.1.48.2|66|7 +1.3.6.1.4.1.3375.2.1.7.5.2.1.12.1.48.1|66|2 +1.3.6.1.4.1.3375.2.1.7.5.2.1.12.1.48.2|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.13.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.13.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.14.1.48.1|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.14.1.48.2|66|4 +1.3.6.1.4.1.3375.2.1.7.5.2.1.15.1.48.1|66|87 +1.3.6.1.4.1.3375.2.1.7.5.2.1.15.1.48.2|66|86 +1.3.6.1.4.1.3375.2.1.7.5.2.1.16.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.16.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.17.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.17.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.18.1.48.1|66|1 +1.3.6.1.4.1.3375.2.1.7.5.2.1.18.1.48.2|66|1 +1.3.6.1.4.1.3375.2.1.7.5.2.1.19.1.48.1|66|6 +1.3.6.1.4.1.3375.2.1.7.5.2.1.19.1.48.2|66|7 +1.3.6.1.4.1.3375.2.1.7.5.2.1.20.1.48.1|66|2 +1.3.6.1.4.1.3375.2.1.7.5.2.1.20.1.48.2|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.21.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.21.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.22.1.48.1|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.22.1.48.2|66|4 +1.3.6.1.4.1.3375.2.1.7.5.2.1.23.1.48.1|66|87 +1.3.6.1.4.1.3375.2.1.7.5.2.1.23.1.48.2|66|86 +1.3.6.1.4.1.3375.2.1.7.5.2.1.24.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.24.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.25.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.25.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.26.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.26.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.27.1.48.1|66|7 +1.3.6.1.4.1.3375.2.1.7.5.2.1.27.1.48.2|66|7 +1.3.6.1.4.1.3375.2.1.7.5.2.1.28.1.48.1|66|2 +1.3.6.1.4.1.3375.2.1.7.5.2.1.28.1.48.2|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.29.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.29.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.30.1.48.1|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.30.1.48.2|66|3 +1.3.6.1.4.1.3375.2.1.7.5.2.1.31.1.48.1|66|87 +1.3.6.1.4.1.3375.2.1.7.5.2.1.31.1.48.2|66|87 +1.3.6.1.4.1.3375.2.1.7.5.2.1.32.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.32.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.33.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.33.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.34.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.34.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.35.1.48.1|66|6 +1.3.6.1.4.1.3375.2.1.7.5.2.1.35.1.48.2|66|6 +1.3.6.1.4.1.3375.2.1.7.5.2.1.36.1.48.1|70|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.36.1.48.2|70|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.37.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.37.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.38.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.38.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.39.1.48.1|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.39.1.48.2|66|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.40.1.48.1|2|0 +1.3.6.1.4.1.3375.2.1.7.5.2.1.40.1.48.2|2|0 +1.3.6.1.4.1.3375.2.1.7.6.1.0|2|1 +1.3.6.1.4.1.3375.2.1.7.6.2.1.1.0.3.72.68.49|2|0 +1.3.6.1.4.1.3375.2.1.7.6.2.1.2.0.3.72.68.49|4|HD1 +1.3.6.1.4.1.3375.2.1.7.6.2.1.3.0.3.72.68.49|4|sda +1.3.6.1.4.1.3375.2.1.7.6.2.1.4.0.3.72.68.49|4|hd +1.3.6.1.4.1.3375.2.1.7.6.2.1.5.0.3.72.68.49|66|40960 +1.3.6.1.4.1.3375.2.1.7.6.2.1.6.0.3.72.68.49|4|volumes +1.3.6.1.4.1.3375.2.1.7.7.1.0|2|1 +1.3.6.1.4.1.3375.2.1.7.7.2.1.1.10.118.105.114.116.105.111.45.115.100.97|4x|76697274696f2d736461 +1.3.6.1.4.1.3375.2.1.7.7.2.1.2.10.118.105.114.116.105.111.45.115.100.97|2|0 +1.3.6.1.4.1.3375.2.1.7.7.2.1.3.10.118.105.114.116.105.111.45.115.100.97|4|HD1 +1.3.6.1.4.1.3375.2.1.7.7.2.1.4.10.118.105.114.116.105.111.45.115.100.97|2|0 +1.3.6.1.4.1.3375.2.1.7.7.2.1.5.10.118.105.114.116.105.111.45.115.100.97|2|0 +1.3.6.1.4.1.3375.2.1.7.8.1.0|2|0 +1.3.6.1.4.1.3375.2.1.7.9.1.0|2|1 +1.3.6.1.4.1.3375.2.1.7.9.2.1.1.3.115.100.97.10.118.105.114.116.105.111.45.115.100.97|4|sda +1.3.6.1.4.1.3375.2.1.7.9.2.1.2.3.115.100.97.10.118.105.114.116.105.111.45.115.100.97|4x|76697274696f2d736461 +1.3.6.1.4.1.3375.2.1.7.9.2.1.3.3.115.100.97.10.118.105.114.116.105.111.45.115.100.97|2|0 +1.3.6.1.4.1.3375.2.1.8.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.8.1.2.0|2|2 +1.3.6.1.4.1.3375.2.1.8.1.3.1.1.3.48.46.48|4x|302e30 +1.3.6.1.4.1.3375.2.1.8.1.3.1.1.3.48.46.49|4x|302e31 +1.3.6.1.4.1.3375.2.1.8.1.3.1.2.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.2.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.3.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.3.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.4.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.4.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.5.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.5.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.6.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.6.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.7.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.7.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.8.3.48.46.48|66|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.8.3.48.46.49|66|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.9.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.9.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.10.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.10.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.11.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.11.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.12.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.12.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.13.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.13.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.14.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.14.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.15.3.48.46.48|66|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.15.3.48.46.49|66|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.16.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.16.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.17.3.48.46.48|66|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.17.3.48.46.49|66|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.18.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.18.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.19.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.1.3.1.19.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.8.2.2.0|2|2 +1.3.6.1.4.1.3375.2.1.8.2.3.1.1.3.48.46.48|4x|302e30 +1.3.6.1.4.1.3375.2.1.8.2.3.1.1.3.48.46.49|4x|302e31 +1.3.6.1.4.1.3375.2.1.8.2.3.1.2.3.48.46.48|70|30092 +1.3.6.1.4.1.3375.2.1.8.2.3.1.2.3.48.46.49|70|30092 +1.3.6.1.4.1.3375.2.1.8.2.3.1.3.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.3.3.48.46.49|70|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.4.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.4.3.48.46.49|70|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.5.3.48.46.48|70|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.5.3.48.46.49|70|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.6.3.48.46.48|70|324182 +1.3.6.1.4.1.3375.2.1.8.2.3.1.6.3.48.46.49|70|143341 +1.3.6.1.4.1.3375.2.1.8.2.3.1.7.3.48.46.48|70|24129976 +1.3.6.1.4.1.3375.2.1.8.2.3.1.7.3.48.46.49|70|21545233 +1.3.6.1.4.1.3375.2.1.8.2.3.1.8.3.48.46.48|70|340082 +1.3.6.1.4.1.3375.2.1.8.2.3.1.8.3.48.46.49|70|143186 +1.3.6.1.4.1.3375.2.1.8.2.3.1.9.3.48.46.48|70|334863650 +1.3.6.1.4.1.3375.2.1.8.2.3.1.9.3.48.46.49|70|29776444 +1.3.6.1.4.1.3375.2.1.8.2.3.1.10.3.48.46.48|70|15 +1.3.6.1.4.1.3375.2.1.8.2.3.1.10.3.48.46.49|70|17 +1.3.6.1.4.1.3375.2.1.8.2.3.1.11.3.48.46.48|70|45009 +1.3.6.1.4.1.3375.2.1.8.2.3.1.11.3.48.46.49|70|14590 +1.3.6.1.4.1.3375.2.1.8.2.3.1.12.3.48.46.48|66|4 +1.3.6.1.4.1.3375.2.1.8.2.3.1.12.3.48.46.49|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.13.3.48.46.48|70|311782 +1.3.6.1.4.1.3375.2.1.8.2.3.1.13.3.48.46.49|70|143340 +1.3.6.1.4.1.3375.2.1.8.2.3.1.14.3.48.46.48|70|23430711 +1.3.6.1.4.1.3375.2.1.8.2.3.1.14.3.48.46.49|70|21545193 +1.3.6.1.4.1.3375.2.1.8.2.3.1.15.3.48.46.48|70|343457 +1.3.6.1.4.1.3375.2.1.8.2.3.1.15.3.48.46.49|70|143185 +1.3.6.1.4.1.3375.2.1.8.2.3.1.16.3.48.46.48|70|335001017 +1.3.6.1.4.1.3375.2.1.8.2.3.1.16.3.48.46.49|70|29776404 +1.3.6.1.4.1.3375.2.1.8.2.3.1.17.3.48.46.48|70|15 +1.3.6.1.4.1.3375.2.1.8.2.3.1.17.3.48.46.49|70|17 +1.3.6.1.4.1.3375.2.1.8.2.3.1.18.3.48.46.48|70|45009 +1.3.6.1.4.1.3375.2.1.8.2.3.1.18.3.48.46.49|70|14590 +1.3.6.1.4.1.3375.2.1.8.2.3.1.19.3.48.46.48|66|4 +1.3.6.1.4.1.3375.2.1.8.2.3.1.19.3.48.46.49|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.20.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.20.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.21.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.21.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.22.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.22.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.23.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.23.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.24.3.48.46.48|70|4803 +1.3.6.1.4.1.3375.2.1.8.2.3.1.24.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.25.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.25.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.26.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.26.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.27.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.27.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.28.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.28.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.29.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.29.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.30.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.30.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.31.3.48.46.48|70|6098518016 +1.3.6.1.4.1.3375.2.1.8.2.3.1.31.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.32.3.48.46.48|70|191364840 +1.3.6.1.4.1.3375.2.1.8.2.3.1.32.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.33.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.33.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.34.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.34.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.35.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.35.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.36.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.36.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.37.3.48.46.48|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.37.3.48.46.49|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.38.3.48.46.48|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.38.3.48.46.49|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.39.3.48.46.48|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.39.3.48.46.49|66|1 +1.3.6.1.4.1.3375.2.1.8.2.3.1.40.3.48.46.48|2|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.40.3.48.46.49|2|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.41.3.48.46.48|66|5955584 +1.3.6.1.4.1.3375.2.1.8.2.3.1.41.3.48.46.49|66|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.42.3.48.46.48|66|186879 +1.3.6.1.4.1.3375.2.1.8.2.3.1.42.3.48.46.49|66|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.43.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.43.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.44.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.44.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.45.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.45.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.46.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.46.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.47.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.47.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.48.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.48.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.49.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.49.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.50.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.50.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.51.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.51.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.52.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.52.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.53.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.53.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.54.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.54.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.55.3.48.46.48|70|0 +1.3.6.1.4.1.3375.2.1.8.2.3.1.55.3.48.46.49|70|0 +1.3.6.1.4.1.3375.2.1.8.3.1.0|2|1 +1.3.6.1.4.1.3375.2.1.8.3.2.1.1.0.30092|2|0 +1.3.6.1.4.1.3375.2.1.8.3.2.1.2.0.30092|2|30092 +1.3.6.1.4.1.3375.2.1.8.3.2.1.3.0.30092|66|5955584 +1.3.6.1.4.1.3375.2.1.8.3.2.1.4.0.30092|66|186879 +1.3.6.1.4.1.3375.2.1.9.1.1.0|2|1 +1.3.6.1.4.1.3375.2.1.9.1.2.1.1.0.5.72.68.49.46.49|2|0 +1.3.6.1.4.1.3375.2.1.9.1.2.1.2.0.5.72.68.49.46.49|4x|4844312e31 +1.3.6.1.4.1.3375.2.1.9.1.2.1.3.0.5.72.68.49.46.49|4|default +1.3.6.1.4.1.3375.2.1.9.1.2.1.4.0.5.72.68.49.46.49|2|1 +1.3.6.1.4.1.3375.2.1.9.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.9.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.9.4.1.0|2|1 +1.3.6.1.4.1.3375.2.1.9.4.2.1.1.0.5.72.68.49.46.49|2|0 +1.3.6.1.4.1.3375.2.1.9.4.2.1.2.0.5.72.68.49.46.49|4x|4844312e31 +1.3.6.1.4.1.3375.2.1.9.4.2.1.3.0.5.72.68.49.46.49|4x|4249472d4950 +1.3.6.1.4.1.3375.2.1.9.4.2.1.4.0.5.72.68.49.46.49|4x|31352e302e31 +1.3.6.1.4.1.3375.2.1.9.4.2.1.5.0.5.72.68.49.46.49|4x|302e302e3131 +1.3.6.1.4.1.3375.2.1.9.4.2.1.6.0.5.72.68.49.46.49|2|1 +1.3.6.1.4.1.3375.2.1.10.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.10.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.10.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.11.1.1.0|2|16 +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.2.97.109|4|am +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.2.108.99|4|lc +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.97.102.109|4|afm +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.97.112.109|4|apm +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.97.115.109|4|asm +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.97.118.114|4|avr +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.100.111.115|4|dos +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.102.112.115|4|fps +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.103.116.109|4|gtm +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.105.108.120|4|ilx +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.108.116.109|4|ltm +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.112.101.109|4|pem +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.3.115.119.103|4|swg +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.4.115.115.108.111|4|sslo +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.5.99.103.110.97.116|4|cgnat +1.3.6.1.4.1.3375.2.1.11.1.2.1.1.5.117.114.108.100.98|4|urldb +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.2.97.109|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.2.108.99|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.97.102.109|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.97.112.109|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.97.115.109|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.97.118.114|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.100.111.115|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.102.112.115|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.103.116.109|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.105.108.120|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.108.116.109|2|3 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.112.101.109|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.3.115.119.103|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.4.115.115.108.111|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.5.99.103.110.97.116|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.2.5.117.114.108.100.98|2|1 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.2.97.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.2.108.99|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.97.102.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.97.112.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.97.115.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.97.118.114|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.100.111.115|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.102.112.115|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.103.116.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.105.108.120|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.108.116.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.112.101.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.3.115.119.103|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.4.115.115.108.111|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.5.99.103.110.97.116|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.3.5.117.114.108.100.98|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.2.97.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.2.108.99|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.97.102.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.97.112.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.97.115.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.97.118.114|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.100.111.115|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.102.112.115|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.103.116.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.105.108.120|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.108.116.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.112.101.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.3.115.119.103|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.4.115.115.108.111|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.5.99.103.110.97.116|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.4.5.117.114.108.100.98|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.2.97.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.2.108.99|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.97.102.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.97.112.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.97.115.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.97.118.114|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.100.111.115|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.102.112.115|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.103.116.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.105.108.120|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.108.116.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.112.101.109|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.3.115.119.103|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.4.115.115.108.111|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.5.99.103.110.97.116|2|0 +1.3.6.1.4.1.3375.2.1.11.1.2.1.5.5.117.114.108.100.98|2|0 +1.3.6.1.4.1.3375.2.1.12.1.1.0|2|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1|2|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.2|2|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.3|2|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5|2|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7|2|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.8|2|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.9|2|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.10|2|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.11|2|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.12|2|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.13|2|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.14|2|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16|2|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.18|2|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.19|2|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.20|2|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.21|2|21 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.22|2|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23|2|23 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24|2|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25|2|25 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.26|2|26 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.27|2|27 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.34|2|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.35|2|35 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.36|2|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.49|2|49 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.51|2|51 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.52|2|52 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.53|2|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.55|2|55 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.68|2|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.99|2|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.219|2|219 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.220|2|220 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.221|2|221 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.286|2|286 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.287|2|287 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.288|2|288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.290|2|290 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.292|2|292 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.293|2|293 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.295|2|295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.298|2|298 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.299|2|299 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.300|2|300 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.302|2|302 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.304|2|304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.307|2|307 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.310|2|310 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.313|2|313 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.315|2|315 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.317|2|317 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.318|2|318 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.352|2|352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.353|2|353 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.381|2|381 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.382|2|382 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.415|2|415 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.440|2|440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.447|2|447 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.885|2|885 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.886|2|886 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.887|2|887 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.905|2|905 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.906|2|906 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.907|2|907 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.910|2|910 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.911|2|911 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.921|2|921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.928|2|928 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.929|2|929 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.951|2|951 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.977|2|977 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.979|2|979 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.982|2|982 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.984|2|984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1038|2|1038 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1130|2|1130 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1138|2|1138 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1139|2|1139 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1140|2|1140 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1142|2|1142 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1143|2|1143 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1212|2|1212 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1222|2|1222 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.1826|2|1826 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.2031|2|2031 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.2851|2|2851 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.2852|2|2852 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.2919|2|2919 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.3773|2|3773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4068|2|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4085|2|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4119|2|4119 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4122|2|4122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4212|2|4212 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4213|2|4213 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4214|2|4214 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4215|2|4215 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4216|2|4216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4217|2|4217 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4218|2|4218 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4219|2|4219 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4220|2|4220 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4221|2|4221 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4222|2|4222 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4224|2|4224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4226|2|4226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4434|2|4434 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4435|2|4435 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4436|2|4436 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4437|2|4437 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4438|2|4438 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4439|2|4439 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4440|2|4440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4441|2|4441 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4442|2|4442 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4443|2|4443 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4451|2|4451 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4773|2|4773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4774|2|4774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4775|2|4775 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4776|2|4776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4777|2|4777 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4778|2|4778 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4779|2|4779 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4780|2|4780 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4781|2|4781 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4782|2|4782 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4784|2|4784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4786|2|4786 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.4787|2|4787 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5137|2|5137 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5138|2|5138 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5139|2|5139 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5140|2|5140 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5141|2|5141 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5142|2|5142 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5143|2|5143 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5144|2|5144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5145|2|5145 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5146|2|5146 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5148|2|5148 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5151|2|5151 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5155|2|5155 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5159|2|5159 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5501|2|5501 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5502|2|5502 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5503|2|5503 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5504|2|5504 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5505|2|5505 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5506|2|5506 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5507|2|5507 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5508|2|5508 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5509|2|5509 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5510|2|5510 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5516|2|5516 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5522|2|5522 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5861|2|5861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5862|2|5862 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5863|2|5863 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5864|2|5864 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5865|2|5865 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5866|2|5866 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5867|2|5867 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5868|2|5868 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5869|2|5869 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5870|2|5870 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5872|2|5872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5875|2|5875 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5878|2|5878 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5879|2|5879 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.5884|2|5884 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6344|2|6344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6345|2|6345 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6346|2|6346 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6347|2|6347 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6348|2|6348 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6349|2|6349 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6350|2|6350 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6351|2|6351 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6352|2|6352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6353|2|6353 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6358|2|6358 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6366|2|6366 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6763|2|6763 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6764|2|6764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6765|2|6765 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6766|2|6766 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6767|2|6767 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6768|2|6768 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6769|2|6769 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6770|2|6770 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6771|2|6771 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6772|2|6772 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6782|2|6782 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.6784|2|6784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7174|2|7174 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7175|2|7175 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7176|2|7176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7177|2|7177 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7178|2|7178 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7179|2|7179 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7180|2|7180 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7181|2|7181 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7182|2|7182 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7183|2|7183 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7188|2|7188 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7192|2|7192 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7194|2|7194 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7196|2|7196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7523|2|7523 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7524|2|7524 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7525|2|7525 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7526|2|7526 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7527|2|7527 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7528|2|7528 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7529|2|7529 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7530|2|7530 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7531|2|7531 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7532|2|7532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7535|2|7535 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7539|2|7539 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7543|2|7543 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7544|2|7544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7949|2|7949 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7950|2|7950 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7951|2|7951 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7952|2|7952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7953|2|7953 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.7954|2|7954 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.9526|2|9526 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.9602|2|9602 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.11784|2|11784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.13563|2|13563 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.13565|2|13565 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.13566|2|13566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.14596|2|14596 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.15387|2|15387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.15921|2|15921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16645|2|16645 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16646|2|16646 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16648|2|16648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16651|2|16651 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16652|2|16652 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16653|2|16653 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.16654|2|16654 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.17900|2|17900 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.18651|2|18651 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.21085|2|21085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23175|2|23175 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23206|2|23206 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23330|2|23330 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23416|2|23416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23554|2|23554 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23740|2|23740 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.23891|2|23891 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24265|2|24265 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24341|2|24341 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24415|2|24415 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24648|2|24648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24673|2|24673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24686|2|24686 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.24697|2|24697 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25514|2|25514 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25517|2|25517 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25518|2|25518 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25522|2|25522 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25524|2|25524 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25531|2|25531 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.25946|2|25946 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.27567|2|27567 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.29431|2|29431 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.29439|2|29439 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.29440|2|29440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.29574|2|29574 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.30092|2|30092 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.30120|2|30120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.1.0.31793|2|31793 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1|4|systemd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.2|4|kthreadd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.3|4x|6b736f6674697271642f30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5|4x|6b776f726b65722f303a3048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7|4x|6d6967726174696f6e2f30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.8|4x|7263755f6268 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.9|4x|7263755f7363686564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.10|4x|6c72752d6164642d647261696e +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.11|4x|7761746368646f672f30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.12|4x|7761746368646f672f31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.13|4x|6d6967726174696f6e2f31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.14|4x|6b736f6674697271642f31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16|4x|6b776f726b65722f313a3048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.18|4|kdevtmpfs +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.19|4|netns +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.20|4|khungtaskd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.21|4|writeback +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.22|4|kintegrityd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.26|4|kblockd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.27|4|md +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.34|4|kswapd0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.35|4|ksmd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.36|4|crypto +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.49|4|kthrotld +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.51|4x|6b6d706174685f7264616364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.52|4|kaluad +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.53|4|kpsmoused +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.55|4x|697076365f61646472636f6e66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.68|4|deferwq +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.99|4|kauditd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.219|4x|76697274736373692d7363616e +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.220|4x|736373695f65685f30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.221|4x|736373695f746d665f30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.286|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.287|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.288|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.290|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.292|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.293|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.295|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.298|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.299|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.300|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.302|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.304|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.307|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.310|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.313|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.315|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.317|4|kdmflush +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.318|4|bioset +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.352|4x|6a6264322f646d2d352d38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.353|4x|657874342d7273762d636f6e766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.381|4x|6a6264322f646d2d362d38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.382|4x|657874342d7273762d636f6e766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.415|4x|73797374656d642d6a6f75726e616c +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.440|4|lvmetad +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.447|4x|73797374656d642d7564657664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.885|4x|6b776f726b65722f303a3148 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.886|4x|6a6264322f646d2d312d38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.887|4x|657874342d7273762d636f6e766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.905|4|kjournald +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.906|4x|6a6264322f646d2d372d38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.907|4x|657874342d7273762d636f6e766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.910|4x|6a6264322f646d2d382d38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.911|4x|657874342d7273762d636f6e766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.921|4x|6a6974746572656e74726f70792d72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.928|4x|6a6264322f646d2d332d38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.929|4x|657874342d7273762d636f6e766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.951|4|auditd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.977|4x|646275732d6461656d6f6e +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.979|4|acpid +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.982|4|irqbalance +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.984|4x|73797374656d642d6c6f67696e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1038|4x|696e6372656173655f656e74726f70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1130|4|mlx4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1138|4x|69622d636f6d702d7771 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1139|4x|69625f6d63617374 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1140|4x|69625f6e6c5f73615f7771 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1142|4x|6d6c78345f6962 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1143|4x|6d6c78345f69625f6d6367 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1212|4x|69706f69625f666c757368 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1222|4x|72646d615f636d +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.1826|4x|7379736c6f672d6e67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.2031|4x|6b776f726b65722f313a3148 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.2851|4|crond +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.2852|4|promptstatusd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.2919|4|overdog +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.3773|4|sshd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4068|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4085|4|runsvdir +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4119|4|agetty +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4122|4|agetty +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4212|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4213|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4214|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4215|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4216|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4217|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4218|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4219|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4220|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4221|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4222|4|eventd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4224|4x|72756e736d315f6e616d6564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4226|4|wccpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4434|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4435|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4436|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4437|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4438|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4439|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4440|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4441|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4442|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4443|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4451|4|scriptd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4773|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4774|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4775|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4776|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4777|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4778|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4779|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4780|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4781|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4782|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4784|4|tmrouted +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4786|4|tamd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.4787|4|alertd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5137|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5138|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5139|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5140|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5141|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5142|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5143|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5144|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5145|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5146|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5148|4|evrouted +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5151|4|big3d +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5155|4|csyncd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5159|4|syscalld +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5501|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5502|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5503|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5504|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5505|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5506|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5507|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5508|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5509|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5510|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5516|4|errdefsd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5522|4|logstatd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5861|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5862|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5863|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5864|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5865|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5866|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5867|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5868|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5869|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5870|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5872|4|chmand +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5875|4x|6963725f6576656e7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5878|4|mcpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5879|4|statsd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.5884|4|zxfrd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6344|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6345|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6346|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6347|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6348|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6349|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6350|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6351|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6352|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6353|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6358|4|merged +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6366|4|dynconfd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6763|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6764|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6765|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6766|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6767|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6768|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6769|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6770|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6771|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6772|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6782|4x|676f6f676c655f6163636f756e7473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.6784|4|keymgmtd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7174|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7175|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7176|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7177|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7178|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7179|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7180|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7181|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7182|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7183|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7188|4|java +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7192|4|lacpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7194|4|devmgmtd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7196|4|cbrd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7523|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7524|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7525|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7526|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7527|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7528|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7529|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7530|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7531|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7532|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7535|4|lind +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7539|4|sod +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7543|4x|73666c6f775f6167656e74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7544|4x|66352d726573742d6e6f6465 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7949|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7950|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7951|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7952|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7953|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.7954|4|runsv +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.9526|4|dhclient +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.9602|4|dhclient +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.11784|4|su +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.13563|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.13565|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.13566|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.14596|4|systemctl +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.15387|4|ntpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.15921|4|java +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16645|4|logger +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16646|4|logger +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16648|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16651|4|mcpq +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16652|4|rrdstats +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16653|4|rtstats +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.16654|4x|69436f6e74726f6c506f7274616c2e +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.17900|4|named +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.18651|4x|696372645f6368696c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.21085|4x|6b776f726b65722f75343a32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23175|4|rrdshim +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23206|4x|6b776f726b65722f313a32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23330|4|snmpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23416|4x|6b776f726b65722f303a30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23554|4x|6b776f726b65722f75343a30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23740|4x|6b776f726b65722f313a31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.23891|4x|6b776f726b65722f303a31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24265|4x|6b776f726b65722f313a30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24341|4x|6b776f726b65722f303a32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24415|4x|6b776f726b65722f313a33 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24648|4x|6b776f726b65722f75343a31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24673|4|agetty +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24686|4|agetty +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.24697|4|agetty +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25514|4|pccd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25517|4|tmipsecd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25518|4x|746d6d2e7374617274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25522|4x|6d676d745f61636c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25524|4|vxland +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25531|4|iprepd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.25946|4|bigd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.27567|4|ntlmconnpool +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.29431|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.29439|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.29440|4|httpd +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.29574|4|rm +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.30092|4x|746d6d2e30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.30120|4|racoon +1.3.6.1.4.1.3375.2.1.12.1.2.1.2.0.31793|4x|61756469745f666f72776172646572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1|4x|2f7573722f6c69622f73797374656d642f73797374656d64202d2d73776974636865642d726f6f74202d2d73797374656d202d2d646573657269616c697a65 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.2|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.3|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.8|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.9|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.10|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.11|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.12|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.13|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.14|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.18|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.19|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.20|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.21|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.22|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.26|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.27|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.34|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.35|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.36|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.49|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.51|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.52|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.53|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.55|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.68|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.99|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.219|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.220|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.221|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.286|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.287|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.288|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.290|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.292|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.293|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.295|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.298|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.299|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.300|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.302|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.304|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.307|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.310|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.313|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.315|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.317|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.318|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.352|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.353|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.381|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.382|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.415|4x|2f7573722f6c69622f73797374656d642f73797374656d642d6a6f75726e616c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.440|4x|2f7573722f7362696e2f6c766d65746164202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.447|4x|2f7573722f6c69622f73797374656d642f73797374656d642d7564657664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.885|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.886|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.887|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.905|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.906|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.907|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.910|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.911|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.921|4x|2f7573722f7362696e2f6a6974746572656e74726f70792d726e6764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.928|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.929|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.951|4x|2f7362696e2f617564697464202d6e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.977|4x|2f62696e2f646275732d6461656d6f6e202d2d73797374656d202d2d616464726573733d73797374656d643a202d2d6e6f666f726b202d2d6e6f7069646669 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.979|4x|2f7573722f7362696e2f6163706964 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.982|4x|2f7573722f7362696e2f69727162616c616e6365202d2d666f726567726f756e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.984|4x|2f7573722f6c69622f73797374656d642f73797374656d642d6c6f67696e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1038|4x|696e6372656173655f656e74726f7079202d64202d652034303030202d72202d712038 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1130|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1138|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1139|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1140|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1142|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1143|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1212|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1222|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.1826|4x|2f7573722f7362696e2f7379736c6f672d6e67202d46202d70202f7661722f72756e2f7379736c6f67642e706964 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.2031|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.2851|4x|2f7573722f7362696e2f63726f6e64202d6e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.2852|4x|2f62696e2f70726f6d707473746174757364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.2919|4x|2f7573722f62696e2f6f766572646f67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.3773|4x|2f7573722f7362696e2f73736864202d44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4068|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4085|4x|72756e7376646972202f7661722f73657276696365206c6f673a202e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4119|4x|2f7362696e2f616765747479202d2d6e6f636c6561722074747931206c696e7578 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4122|4x|2f7362696e2f616765747479202d2d6b6565702d62617564203131353230302c33383430302c39363030207474795330207674323230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4212|4x|72756e7376206461746173746f72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4213|4x|72756e7376206576656e7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4214|4x|72756e7376206e616d6564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4215|4x|72756e73762073646d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4216|4x|72756e7376206f767364622d736572766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4217|4x|72756e737620776f6364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4218|4x|72756e7376206e6c6164 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4219|4x|72756e7376207763637064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4220|4x|72756e737620646e73636163686564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4221|4x|72756e737620726261 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4222|4x|2f7573722f62696e2f6576656e7464202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4224|4x|2f7362696e2f72756e736d315f6e616d6564202f7573722f7362696e2f6e616d6564202d66202d74202f7661722f6e616d6564202d75206e616d6564202d63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4226|4x|2f7573722f62696e2f7763637064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4434|4x|72756e737620746d697073656364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4435|4x|72756e7376206e746c6d636f6e6e706f6f6c +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4436|4x|72756e737620706761646d696e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4437|4x|72756e737620616e74736572766572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4438|4x|72756e73762064656475705f61646d696e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4439|4x|72756e73762061706d5f77656273736f +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4440|4x|72756e73762073616d6c69647064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4441|4x|72756e737620656361 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4442|4x|72756e7376206175746f646f7364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4443|4x|72756e73762073637269707464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4451|4x|2f7573722f62696e2f73637269707464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4773|4x|72756e737620746d726f75746564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4774|4x|72756e737620766469 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4775|4x|72756e737620616c65727464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4776|4x|72756e73762066707573657264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4777|4x|72756e73762062646f7364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4778|4x|72756e73762070636364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4779|4x|72756e73762061736d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4780|4x|72756e73762065616d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4781|4x|72756e73762074616d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4782|4x|72756e7376207274636f6e6664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4784|4x|2f7573722f62696e2f746d726f75746564202d642030202d6f202f7661722f746d702f746d726f757465642e6f7574 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4786|4x|2f7573722f62696e2f74616d64202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.4787|4x|2f7573722f7362696e2f616c65727464202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5137|4x|72756e7376206576726f75746564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5138|4x|72756e73762073797363616c6c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5139|4x|72756e7376206373796e6364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5140|4x|72756e7376206e6174737461747364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5141|4x|72756e7376206d676d745f61636c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5142|4x|72756e737620616466735f70726f7879 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5143|4x|72756e73762072657772697465 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5144|4x|72756e7376206269673364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5145|4x|72756e7376206f6d617064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5146|4x|72756e73762075706461746564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5148|4x|2f7573722f62696e2f6576726f75746564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5151|4x|2f7368617265642f62696e2f6269673364202d746c7320544c537631202d636970686572732041455347434d3a4145533a214144483a2141454344483a2150 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5155|4x|2f7573722f62696e2f6373796e6364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5159|4x|2f7573722f62696e2f73797363616c6c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5501|4x|72756e737620626f7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5502|4x|72756e737620636c757374657264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5503|4x|72756e73762062696764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5504|4x|72756e73762075726c6462 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5505|4x|72756e7376206c6f677374617464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5506|4x|72756e7376206572726465667364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5507|4x|72756e7376206d7973716c +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5508|4x|72756e7376206c6f676d7973716c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5509|4x|72756e737620666c6f777370656364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5510|4x|72756e73762065636d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5516|4x|2f7573722f62696e2f6572726465667364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5522|4x|2f7573722f7362696e2f6c6f677374617464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5861|4x|72756e7376206963725f6576656e7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5862|4x|72756e737620646562756764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5863|4x|72756e737620737461747364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5864|4x|72756e7376206d637064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5865|4x|72756e7376207a78667264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5866|4x|72756e737620646f736c37645f61747461636b5f6d6f6e69746f72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5867|4x|72756e73762063686d616e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5868|4x|72756e7376206175746f6469736364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5869|4x|72756e7376206d646d73796e636d6772 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5870|4x|72756e73762061706d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5872|4x|2f7573722f62696e2f63686d616e64202d66202d2d76617269616e7420316e6963 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5875|4x|2f7573722f62696e2f6963725f6576656e7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5878|4x|2f7573722f62696e2f6d637064202d64626d656d20353132202d6c697374656e203132372e302e302e31202d666f7263656c6f6164202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5879|4x|2f7573722f62696e2f737461747364202d532030202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.5884|4x|2f7573722f62696e2f7a78667264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6344|4x|72756e73762067746d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6345|4x|72756e73762064796e636f6e6664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6346|4x|72756e737620737368706c7567696e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6347|4x|72756e737620746d6d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6348|4x|72756e73762061767264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6349|4x|72756e73762070696e675f6163636573735f6167656e74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6350|4x|72756e7376206477626c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6351|4x|72756e7376206d6572676564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6352|4x|72756e73762077616d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6353|4x|72756e737620746f6d636174 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6358|4x|2f7573722f62696e2f6d6572676564202d532030202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6366|4x|2f7573722f62696e2f64796e636f6e6664202d66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6763|4x|72756e73762076786c616e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6764|4x|72756e73762068777064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6765|4x|72756e73762074617364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6766|4x|72756e737620706b6373313164 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6767|4x|72756e73762061646d64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6768|4x|72756e737620697072657064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6769|4x|72756e737620676f6f676c655f6163636f756e74735f6461656d6f6e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6770|4x|72756e737620736e6d7064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6771|4x|72756e7376206b65796d676d7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6772|4x|72756e7376206f61757468 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6782|4x|2f7573722f62696e2f707974686f6e202f7573722f62696e2f676f6f676c655f6163636f756e74735f6461656d6f6e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.6784|4x|2f7573722f62696e2f6b65796d676d7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7174|4x|72756e7376206361707475726564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7175|4x|72756e73762063627264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7176|4x|72756e7376207a7264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7177|4x|72756e7376206c61637064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7178|4x|72756e7376206d6f6e7064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7179|4x|72756e737620726573746a61766164 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7180|4x|72756e73762073686d6d617064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7181|4x|72756e73762077656273736f +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7182|4x|72756e7376206465766d676d7464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7183|4x|72756e73762068747470645f61706d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7188|4x|2f7573722f6c69622f6a766d2f6a72652f62696e2f6a617661202d446a6176612e7574696c2e6c6f6767696e672e6d616e616765723d636f6d2e66352e7265 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7192|4x|2f7573722f62696e2f6c61637064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7194|4x|2f7573722f62696e2f6465766d676d7464202d6c206e6f74696365 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7196|4x|2f7573722f73686172652f6362722f62696e2f63627264202d2d746872656164733d32202d2d686f73742d6d656d6f72793d343032363533313834202d2d75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7523|4x|72756e737620736f64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7524|4x|72756e737620776f63706c7567696e +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7525|4x|72756e73762073666c6f775f6167656e74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7526|4x|72756e73762075726c64626d677264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7527|4x|72756e73762066355f7570646174655f636865636b6572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7528|4x|72756e7376206e73796e6364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7529|4x|72756e7376206c696e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7530|4x|72756e73762061636564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7531|4x|72756e737620726573746e6f646564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7532|4x|72756e7376206461746173796e6364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7535|4x|2f7573722f62696e2f6c696e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7539|4x|2f7573722f62696e2f736f64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7543|4x|2f7573722f7362696e2f73666c6f775f6167656e74202d66202d4c462035202f7661722f6c6f672f73666c6f775f6167656e742e6c6f67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7544|4x|2f7573722f62696e2f66352d726573742d6e6f6465202f7573722f73686172652f726573742f6e6f64652f7372632f726573746e6f64652e6a73202d702038 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7949|4x|72756e73762066736c6f6764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7950|4x|72756e73762069707364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7951|4x|72756e7376206e6f6b6961736e6d7064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7952|4x|72756e737620646f736c3764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7953|4x|72756e7376206c6f63616c64626d6772 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.7954|4x|72756e73762077725f75726c646264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.9526|4x|2f7362696e2f6468636c69656e74202d6e77206d676d74202d6366202f6574632f6468636c69656e742e636f6e66202d6c66202f7661722f6c69622f646863 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.9602|4x|2f7362696e2f6468636c69656e74202d36202d6e77206d676d74202d6366202f6574632f6468636c69656e742e636f6e66202d6c66202f7661722f6c69622f +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.11784|4x|737520746f6d636174202d73202f62696e2f62617368202d63206578706f7274204a4156415f4f5054533d272d4468747470732e70726f746f636f6c733d54 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.13563|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.13565|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.13566|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.14596|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.15387|4x|6e747064202d67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.15921|4x|2f7573722f6c69622f6a766d2f6a72652f62696e2f6a617661202d4468747470732e70726f746f636f6c733d544c5376312e312c544c5376312e32202d4470 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16645|4x|2f7573722f62696e2f6c6f67676572202d70206c6f63616c362e696e666f +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16646|4x|2f7573722f62696e2f6c6f67676572202d70206c6f63616c362e696e666f +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16648|4x|2f7573722f7362696e2f666367692d202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16651|4x|2f7573722f6c6f63616c2f7777772f6d6370712f6d637071 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16652|4x|2f7573722f6c6f63616c2f7777772f72726473746174732f7272647374617473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16653|4x|2f7573722f6c6f63616c2f7777772f727473746174732f72747374617473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.16654|4x|2f7573722f6c6f63616c2f7777772f69436f6e74726f6c2f69436f6e74726f6c506f7274616c2e636769 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.17900|4x|2f7573722f7362696e2f6e616d6564202d66202d74202f7661722f6e616d6564202d75206e616d6564202d63202f636f6e6669672f6e616d65642e636f6e66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.18651|4x|696372645f6368696c64202d702038313030202d6c2032202d692034343038353361662d376362352d346530302d393631632d373133303033336265613235 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.21085|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23175|4x|2f7573722f7362696e2f7272647368696d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23206|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23330|4x|2f7573722f7362696e2f736e6d7064202d66202d63202f636f6e6669672f736e6d702f736e6d70642e636f6e66202d4c7364202d4c462036202f7661722f6c +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23416|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23554|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23740|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.23891|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24265|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24341|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24415|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24648|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24673|4x|2f7362696e2f616765747479202d2d6e6f636c6561722074747930207474795330207674323230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24686|4x|2f7362696e2f616765747479202d2d6e6f636c6561722074747930207474795330207674323230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.24697|4x|2f7362696e2f616765747479202d2d6e6f636c6561722074747930207474795330207674323230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25514|4x|2f7573722f62696e2f70636364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25517|4x|2f7573722f62696e2f746d697073656364202d2d746d6d636f756e742032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25518|4x|2f6574632f62696773746172742f736372697074732f746d6d2e7374617274202f7661722f72756e203220322030202d2d706c6174666f726d205a31303020 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25522|4x|2f7573722f62696e2f6d676d745f61636c64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25524|4x|2f7573722f62696e2f76786c616e64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25531|4x|2f7573722f73686172652f6970726570642f62696e2f697072657064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.25946|4x|62696764202d53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.27567|4x|2f7573722f7362696e2f6e746c6d636f6e6e706f6f6c202d63206d656d3a2f2f6e746c6d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.29431|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.29439|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.29440|4x|2f7573722f7362696e2f6874747064202d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.29574|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.30092|4x|746d6d2e30202d542032202d2d746d69642030202d2d6e7075732032202d2d706c6174666f726d205a313030202d6d202d732035393434 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.30120|4x|2f7573722f7362696e2f7261636f6f6e202d6c202f7661722f6c6f672f7261636f6f6e2e6c6f67202d66202f6574632f7261636f6f6e2f7261636f6f6e2e63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.3.0.31793|4x|2f7573722f62696e2f61756469745f666f72776172646572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.2|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.3|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.8|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.9|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.10|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.11|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.12|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.13|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.14|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.18|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.19|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.20|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.21|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.22|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.26|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.27|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.34|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.35|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.36|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.49|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.51|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.52|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.53|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.55|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.68|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.99|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.219|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.220|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.221|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.286|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.287|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.288|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.290|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.292|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.293|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.295|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.298|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.299|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.300|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.302|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.304|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.307|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.310|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.313|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.315|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.317|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.318|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.352|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.353|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.381|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.382|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.415|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.440|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.447|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.885|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.886|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.887|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.905|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.906|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.907|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.910|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.911|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.921|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.928|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.929|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.951|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.977|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.979|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.982|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.984|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1038|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1130|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1138|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1139|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1140|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1142|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1143|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1212|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1222|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.1826|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.2031|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.2851|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.2852|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.2919|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.3773|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4068|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4085|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4119|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4122|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4212|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4213|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4214|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4215|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4216|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4217|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4218|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4219|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4220|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4221|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4222|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4224|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4226|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4434|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4435|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4436|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4437|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4438|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4439|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4440|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4441|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4442|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4443|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4451|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4773|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4774|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4775|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4776|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4777|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4778|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4779|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4780|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4781|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4782|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4784|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4786|4|ltm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.4787|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5137|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5138|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5139|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5140|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5141|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5142|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5143|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5144|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5145|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5146|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5148|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5151|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5155|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5159|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5501|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5502|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5503|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5504|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5505|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5506|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5507|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5508|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5509|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5510|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5516|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5522|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5861|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5862|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5863|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5864|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5865|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5866|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5867|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5868|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5869|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5870|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5872|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5875|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5878|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5879|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.5884|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6344|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6345|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6346|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6347|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6348|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6349|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6350|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6351|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6352|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6353|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6358|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6366|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6763|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6764|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6765|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6766|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6767|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6768|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6769|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6770|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6771|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6772|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6782|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.6784|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7174|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7175|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7176|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7177|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7178|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7179|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7180|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7181|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7182|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7183|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7188|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7192|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7194|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7196|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7523|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7524|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7525|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7526|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7527|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7528|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7529|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7530|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7531|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7532|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7535|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7539|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7543|4|ltm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7544|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7949|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7950|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7951|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7952|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7953|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.7954|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.9526|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.9602|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.11784|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.13563|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.13565|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.13566|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.14596|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.15387|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.15921|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16645|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16646|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16648|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16651|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16652|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16653|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.16654|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.17900|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.18651|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.21085|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23175|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23206|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23330|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23416|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23554|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23740|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.23891|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24265|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24341|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24415|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24648|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24673|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24686|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.24697|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25514|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25517|4|ltm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25518|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25522|4| +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25524|4|ltm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25531|4|ltm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.25946|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.27567|4|mgmt +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.29431|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.29439|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.29440|4|ui +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.29574|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.30092|4|tmm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.30120|4|ltm +1.3.6.1.4.1.3375.2.1.12.1.2.1.4.0.31793|4x|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.2|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.3|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.8|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.9|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.10|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.11|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.12|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.13|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.14|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.18|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.19|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.20|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.21|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.22|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.26|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.27|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.34|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.35|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.36|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.49|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.51|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.52|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.53|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.55|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.68|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.99|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.219|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.220|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.221|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.286|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.287|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.288|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.290|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.292|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.293|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.295|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.298|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.299|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.300|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.302|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.304|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.307|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.310|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.313|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.315|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.317|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.318|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.352|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.353|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.381|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.382|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.415|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.440|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.447|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.885|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.886|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.887|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.905|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.906|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.907|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.910|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.911|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.921|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.928|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.929|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.951|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.977|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.979|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.982|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.984|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1038|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1130|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1138|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1139|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1140|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1142|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1143|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1212|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1222|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.1826|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.2031|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.2851|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.2852|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.2919|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.3773|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4068|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4085|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4119|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4122|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4212|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4213|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4214|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4215|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4216|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4217|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4218|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4219|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4220|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4221|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4222|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4224|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4226|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4434|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4435|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4436|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4437|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4438|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4439|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4440|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4441|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4442|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4443|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4451|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4773|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4774|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4775|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4776|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4777|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4778|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4779|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4780|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4781|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4782|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4784|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4786|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.4787|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5137|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5138|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5139|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5140|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5141|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5142|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5143|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5144|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5145|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5146|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5148|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5151|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5155|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5159|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5501|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5502|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5503|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5504|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5505|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5506|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5507|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5508|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5509|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5510|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5516|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5522|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5861|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5862|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5863|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5864|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5865|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5866|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5867|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5868|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5869|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5870|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5872|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5875|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5878|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5879|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.5884|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6344|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6345|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6346|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6347|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6348|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6349|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6350|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6351|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6352|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6353|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6358|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6366|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6763|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6764|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6765|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6766|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6767|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6768|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6769|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6770|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6771|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6772|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6782|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.6784|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7174|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7175|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7176|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7177|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7178|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7179|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7180|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7181|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7182|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7183|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7188|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7192|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7194|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7196|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7523|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7524|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7525|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7526|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7527|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7528|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7529|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7530|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7531|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7532|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7535|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7539|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7543|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7544|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7949|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7950|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7951|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7952|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7953|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.7954|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.9526|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.9602|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.11784|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.13563|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.13565|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.13566|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.14596|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.15387|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.15921|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16645|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16646|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16648|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16651|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16652|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16653|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.16654|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.17900|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.18651|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.21085|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23175|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23206|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23330|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23416|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23554|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23740|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.23891|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24265|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24341|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24415|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24648|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24673|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24686|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.24697|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25514|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25517|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25518|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25522|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25524|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25531|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.25946|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.27567|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.29431|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.29439|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.29440|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.29574|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.30092|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.30120|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.5.0.31793|2|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.8|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.12|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.13|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.14|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.19|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.20|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.22|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.27|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.34|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.49|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.51|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.52|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.53|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.68|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.220|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.221|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.286|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.292|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.293|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.295|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.298|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.299|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.300|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.302|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.304|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.315|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.318|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.353|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.382|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.447|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.887|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.905|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.907|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.910|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.982|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1038|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1138|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1139|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1140|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1142|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.2031|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.3773|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4068|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4216|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4217|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4219|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4220|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4221|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4224|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4438|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4440|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4442|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4443|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4451|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4774|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4778|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4779|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4780|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4784|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4786|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5137|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5141|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5142|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5144|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5145|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5146|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5148|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5502|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5506|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5507|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5510|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5522|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5861|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5862|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5863|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5864|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5865|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5867|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5868|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5869|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5870|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5872|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.5884|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6349|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6350|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6352|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6353|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6358|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6366|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6766|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6772|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6782|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7175|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7177|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7178|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7179|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7181|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7194|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7525|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7527|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7529|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7532|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7535|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7544|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7951|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7952|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.9526|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.13563|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.15387|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.15921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16645|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16652|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16653|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.16654|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23206|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23330|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23554|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23740|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.23891|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24265|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24415|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24697|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24706|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24717|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.24734|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25514|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.25946|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.27567|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.29431|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.29574|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.30092|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.30120|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.6.0.31793|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.2|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.3|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.8|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.9|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.10|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.11|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.12|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.13|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.14|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.18|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.19|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.20|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.21|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.22|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.26|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.27|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.34|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.35|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.36|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.49|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.51|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.52|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.53|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.55|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.68|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.99|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.219|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.220|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.221|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.286|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.287|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.288|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.290|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.292|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.293|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.295|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.298|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.299|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.300|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.302|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.304|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.307|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.310|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.313|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.315|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.317|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.318|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.352|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.353|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.381|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.382|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.415|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.440|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.447|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.885|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.886|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.887|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.905|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.906|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.907|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.910|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.911|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.921|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.928|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.929|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.951|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.977|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.979|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.982|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.984|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1038|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1130|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1138|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1139|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1140|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1142|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1143|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1212|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1222|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.1826|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.2031|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.2851|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.2852|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.2919|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.3773|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4068|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4085|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4119|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4122|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4212|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4213|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4214|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4215|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4216|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4217|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4218|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4219|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4220|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4221|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4222|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4224|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4226|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4434|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4435|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4436|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4437|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4438|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4439|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4440|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4441|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4442|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4443|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4451|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4773|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4774|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4775|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4776|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4777|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4778|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4779|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4780|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4781|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4782|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4784|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4786|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.4787|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5137|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5138|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5139|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5140|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5141|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5142|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5143|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5144|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5145|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5146|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5148|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5151|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5155|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5159|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5501|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5502|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5503|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5504|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5505|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5506|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5507|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5508|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5509|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5510|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5516|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5522|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5861|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5862|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5863|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5864|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5865|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5866|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5867|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5868|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5869|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5870|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5872|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5875|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5878|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5879|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.5884|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6344|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6345|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6346|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6347|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6348|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6349|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6350|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6351|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6352|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6353|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6358|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6366|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6763|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6764|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6765|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6766|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6767|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6768|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6769|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6770|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6771|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6772|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6782|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.6784|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7174|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7175|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7176|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7177|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7178|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7179|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7180|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7181|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7182|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7183|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7188|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7192|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7194|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7196|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7523|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7524|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7525|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7526|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7527|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7528|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7529|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7530|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7531|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7532|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7535|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7539|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7543|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7544|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7949|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7950|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7951|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7952|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7953|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.7954|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.9526|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.9602|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.11784|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.13563|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.13565|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.13566|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.14596|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.15387|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.15921|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16645|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16646|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16648|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16651|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16652|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16653|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.16654|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.17900|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.18651|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.21085|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23175|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23206|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23330|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23416|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23554|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23740|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.23891|66|1571650560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24265|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24341|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24415|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24648|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24717|66|1571650560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24734|66|1571650570 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.24745|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25514|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25517|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25518|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25522|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25524|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25531|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.25946|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.27567|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.29431|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.29439|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.29440|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.29574|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.30092|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.30120|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.7.0.31793|66|1571650580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6358|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.15921|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23330|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.23891|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24717|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24734|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.24745|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.30092|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.8.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6358|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.15921|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23330|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.23891|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24717|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24734|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.24745|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.30092|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.9.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6358|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.15921|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23330|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.23891|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24717|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24734|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.24745|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.30092|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.10.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.15921|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23330|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.23891|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24717|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24734|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.24745|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.30092|66|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.11.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.15921|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23330|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24745|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24758|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.24781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.30092|66|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.12.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.15921|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23330|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24745|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24758|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.24781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.30092|66|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.13.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.3|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.8|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.9|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.10|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.11|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.12|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.13|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.14|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.18|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.19|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.20|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.21|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.22|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.26|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.27|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.34|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.35|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.36|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.49|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.51|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.52|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.53|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.55|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.68|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.99|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.219|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.220|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.221|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.286|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.287|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.288|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.290|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.292|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.293|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.295|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.298|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.299|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.300|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.302|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.304|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.307|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.310|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.313|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.315|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.317|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.318|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.352|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.353|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.381|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.382|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.415|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.440|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.447|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.885|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.886|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.887|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.905|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.906|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.907|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.910|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.911|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.921|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.928|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.929|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.951|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.977|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.979|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.982|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.984|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1038|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1130|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1138|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1139|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1140|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1142|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1143|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1212|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1222|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.1826|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.2031|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.2851|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.2852|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.2919|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.3773|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4068|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4085|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4119|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4122|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4212|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4213|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4214|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4215|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4216|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4217|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4218|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4219|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4220|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4221|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4222|66|4213 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4224|66|4214 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4226|66|4219 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4434|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4435|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4436|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4437|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4438|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4439|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4440|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4441|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4442|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4443|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4451|66|4443 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4773|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4774|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4775|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4776|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4777|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4778|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4779|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4780|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4781|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4782|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4784|66|4773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4786|66|4781 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.4787|66|4775 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5137|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5138|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5139|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5140|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5141|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5142|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5143|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5144|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5145|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5146|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5148|66|5137 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5151|66|5144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5155|66|5139 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5159|66|5138 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5501|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5502|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5503|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5504|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5505|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5506|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5507|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5508|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5509|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5510|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5516|66|5506 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5522|66|5505 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5861|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5862|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5863|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5864|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5865|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5866|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5867|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5868|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5869|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5870|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5872|66|5867 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5875|66|5861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5878|66|5864 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5879|66|5863 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.5884|66|5865 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6344|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6345|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6346|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6347|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6348|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6349|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6350|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6351|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6352|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6353|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6358|66|6351 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6366|66|6345 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6763|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6764|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6765|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6766|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6767|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6768|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6769|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6770|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6771|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6772|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6782|66|6769 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.6784|66|6771 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7174|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7175|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7176|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7177|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7178|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7179|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7180|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7181|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7182|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7183|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7188|66|7179 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7192|66|7177 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7194|66|7182 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7196|66|7175 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7523|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7524|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7525|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7526|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7527|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7528|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7529|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7530|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7531|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7532|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7535|66|7529 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7539|66|7523 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7543|66|7525 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7544|66|7531 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7949|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7950|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7951|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7952|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7953|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.7954|66|4085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.9526|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.9602|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.11784|66|6353 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.13563|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.13565|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.13566|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.14596|66|5878 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.15387|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.15921|66|11784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16645|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16646|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16648|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16651|66|16648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16652|66|16648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16653|66|16648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.16654|66|16648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.17900|66|4224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.18651|66|7188 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.21085|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23175|66|5879 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23206|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23330|66|6770 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23416|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23554|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.23740|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24265|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24341|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24415|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24648|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24745|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24758|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24769|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.24781|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25514|66|4778 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25517|66|4434 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25518|66|6347 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25522|66|5141 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25524|66|6763 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25531|66|6768 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.25946|66|5503 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.27567|66|4435 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.29431|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.29439|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.29440|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.29574|66|25517 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.30092|66|25518 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.30120|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.14.0.31793|66|1826 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.415|66|415 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.440|66|440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.447|66|447 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.921|66|921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.951|66|951 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.977|66|977 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.979|66|979 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.982|66|982 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.984|66|984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1038|66|1038 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.1826|66|1826 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.2851|66|2851 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.2852|66|2852 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.2919|66|2919 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.3773|66|3773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4068|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4085|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4119|66|4119 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4122|66|4122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4212|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4213|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4214|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4215|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4216|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4217|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4218|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4219|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4220|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4221|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4222|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4224|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4226|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4434|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4435|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4436|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4437|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4438|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4439|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4440|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4441|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4442|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4443|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4451|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4773|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4774|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4775|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4776|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4777|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4778|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4779|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4780|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4781|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4782|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4784|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4786|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.4787|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5137|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5138|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5139|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5140|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5141|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5142|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5143|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5144|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5145|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5146|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5148|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5151|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5155|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5159|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5501|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5502|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5503|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5504|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5505|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5506|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5507|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5508|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5509|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5510|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5516|66|5516 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5522|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5861|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5862|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5863|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5864|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5865|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5866|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5867|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5868|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5869|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5870|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5872|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5875|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5878|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5879|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.5884|66|5884 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6344|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6345|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6346|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6347|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6348|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6349|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6350|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6351|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6352|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6353|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6358|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6366|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6763|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6764|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6765|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6766|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6767|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6768|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6769|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6770|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6771|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6772|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6782|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.6784|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7174|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7175|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7176|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7177|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7178|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7179|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7180|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7181|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7182|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7183|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7188|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7192|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7194|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7196|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7523|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7524|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7525|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7526|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7527|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7528|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7529|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7530|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7531|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7532|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7535|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7539|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7543|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7544|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7949|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7950|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7951|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7952|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7953|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.7954|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.9526|66|9526 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.9602|66|9602 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.11784|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.13563|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.13565|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.13566|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.14596|66|14596 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.15387|66|15387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.15921|66|15921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16645|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16646|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16648|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16651|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16652|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16653|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.16654|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.17900|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.18651|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23175|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23330|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24745|66|24745 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24758|66|24758 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24769|66|24769 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.24781|66|24781 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25514|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25517|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25518|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25522|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25524|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25531|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.25946|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.27567|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.29431|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.29439|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.29440|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.29574|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.30092|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.30120|66|30120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.15.0.31793|66|31793 +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.2|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.3|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.8|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.9|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.10|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.11|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.12|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.13|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.14|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.18|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.19|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.20|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.21|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.22|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.26|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.27|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.34|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.35|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.36|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.49|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.51|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.52|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.53|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.55|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.68|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.99|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.219|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.220|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.221|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.286|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.287|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.288|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.290|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.292|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.293|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.295|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.298|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.299|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.300|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.302|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.304|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.307|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.310|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.313|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.315|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.317|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.318|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.352|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.353|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.381|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.382|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.415|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.440|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.447|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.885|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.886|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.887|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.905|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.906|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.907|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.910|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.911|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.921|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.928|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.929|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.951|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.977|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.979|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.982|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.984|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1038|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1130|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1138|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1139|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1140|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1142|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1143|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1212|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1222|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.1826|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.2031|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.2851|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.2852|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.2919|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.3773|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4068|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4085|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4119|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4122|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4212|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4213|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4214|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4215|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4216|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4217|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4218|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4219|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4220|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4221|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4222|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4224|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4226|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4434|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4435|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4436|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4437|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4438|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4439|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4440|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4441|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4442|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4443|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4451|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4773|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4774|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4775|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4776|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4777|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4778|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4779|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4780|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4781|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4782|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4784|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4786|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.4787|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5137|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5138|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5139|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5140|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5141|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5142|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5143|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5144|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5145|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5146|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5148|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5151|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5155|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5159|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5501|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5502|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5503|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5504|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5505|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5506|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5507|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5508|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5509|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5510|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5516|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5522|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5861|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5862|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5863|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5864|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5865|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5866|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5867|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5868|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5869|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5870|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5872|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5875|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5878|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5879|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.5884|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6344|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6345|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6346|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6347|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6348|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6349|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6350|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6351|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6352|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6353|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6358|4|R +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6366|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6763|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6764|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6765|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6766|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6767|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6768|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6769|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6770|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6771|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6772|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6782|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.6784|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7174|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7175|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7176|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7177|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7178|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7179|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7180|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7181|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7182|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7183|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7188|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7192|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7194|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7196|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7523|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7524|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7525|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7526|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7527|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7528|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7529|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7530|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7531|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7532|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7535|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7539|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7543|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7544|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7949|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7950|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7951|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7952|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7953|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.7954|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.9526|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.9602|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.11784|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.13563|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.13565|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.13566|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.14596|4|Z +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.15387|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.15921|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16645|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16646|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16648|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16651|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16652|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16653|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.16654|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.17900|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.18651|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.21085|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23175|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23206|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23330|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23416|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23554|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.23740|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24265|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24341|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24415|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24648|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24745|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24758|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24769|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.24781|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25514|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25517|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25518|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25522|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25524|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25531|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.25946|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.27567|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.29431|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.29439|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.29440|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.29574|4|Z +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.30092|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.30120|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.16.0.31793|4|S +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.415|66|415 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.440|66|440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.447|66|447 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.921|66|921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.951|66|951 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.977|66|977 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.979|66|979 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.982|66|982 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.984|66|984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1038|66|1038 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.1826|66|1826 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.2851|66|2851 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.2852|66|2852 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.2919|66|2919 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.3773|66|3773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4068|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4085|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4119|66|4119 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4122|66|4122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4212|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4213|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4214|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4215|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4216|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4217|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4218|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4219|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4220|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4221|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4222|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4224|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4226|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4434|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4435|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4436|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4437|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4438|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4439|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4440|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4441|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4442|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4443|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4451|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4773|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4774|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4775|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4776|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4777|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4778|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4779|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4780|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4781|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4782|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4784|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4786|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.4787|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5137|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5138|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5139|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5140|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5141|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5142|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5143|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5144|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5145|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5146|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5148|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5151|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5155|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5159|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5501|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5502|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5503|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5504|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5505|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5506|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5507|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5508|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5509|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5510|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5516|66|5516 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5522|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5861|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5862|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5863|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5864|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5865|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5866|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5867|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5868|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5869|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5870|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5872|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5875|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5878|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5879|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.5884|66|5884 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6344|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6345|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6346|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6347|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6348|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6349|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6350|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6351|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6352|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6353|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6358|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6366|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6763|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6764|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6765|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6766|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6767|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6768|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6769|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6770|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6771|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6772|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6782|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.6784|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7174|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7175|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7176|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7177|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7178|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7179|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7180|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7181|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7182|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7183|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7188|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7192|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7194|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7196|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7523|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7524|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7525|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7526|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7527|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7528|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7529|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7530|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7531|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7532|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7535|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7539|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7543|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7544|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7949|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7950|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7951|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7952|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7953|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.7954|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.9526|66|9526 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.9602|66|9602 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.11784|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.13563|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.13565|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.13566|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.14596|66|14596 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.15387|66|15387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.15921|66|15921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16645|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16646|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16648|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16651|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16652|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16653|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.16654|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.17900|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.18651|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23175|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23330|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24745|66|24745 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24758|66|24758 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24769|66|24769 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.24781|66|24781 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25514|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25517|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25518|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25522|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25524|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25531|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.25946|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.27567|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.29431|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.29439|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.29440|66|4068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.29574|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.30092|66|4081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.30120|66|30120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.17.0.31793|66|1826 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4119|66|1025 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4122|66|1088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.15921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23206|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23330|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24792|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24804|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.24816|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.30092|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.18.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.2|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.3|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.8|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.9|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.10|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.11|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.12|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.13|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.14|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.18|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.19|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.20|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.21|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.22|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.26|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.27|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.34|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.35|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.36|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.49|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.51|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.52|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.53|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.55|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.68|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.99|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.219|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.220|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.221|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.286|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.287|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.288|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.290|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.292|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.293|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.295|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.298|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.299|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.300|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.302|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.304|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.307|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.310|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.313|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.315|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.317|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.318|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.352|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.353|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.381|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.382|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.415|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.440|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.447|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.885|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.886|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.887|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.905|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.906|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.907|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.910|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.911|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.921|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.928|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.929|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.951|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.977|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.979|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.982|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.984|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1038|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1130|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1138|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1139|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1140|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1142|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1143|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1212|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1222|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.1826|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.2031|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.2851|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.2852|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.2919|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.3773|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4068|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4085|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4119|66|4119 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4122|66|4122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4212|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4213|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4214|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4215|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4216|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4217|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4218|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4219|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4220|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4221|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4222|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4224|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4226|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4434|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4435|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4436|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4437|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4438|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4439|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4440|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4441|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4442|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4443|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4451|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4773|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4774|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4775|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4776|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4777|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4778|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4779|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4780|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4781|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4782|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4784|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4786|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.4787|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5137|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5138|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5139|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5140|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5141|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5142|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5143|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5144|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5145|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5146|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5148|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5151|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5155|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5159|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5501|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5502|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5503|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5504|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5505|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5506|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5507|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5508|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5509|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5510|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5516|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5522|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5861|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5862|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5863|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5864|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5865|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5866|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5867|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5868|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5869|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5870|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5872|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5875|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5878|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5879|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.5884|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6344|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6345|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6346|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6347|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6348|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6349|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6350|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6351|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6352|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6353|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6358|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6366|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6763|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6764|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6765|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6766|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6767|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6768|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6769|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6770|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6771|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6772|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6782|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.6784|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7174|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7175|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7176|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7177|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7178|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7179|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7180|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7181|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7182|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7183|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7188|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7192|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7194|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7196|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7523|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7524|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7525|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7526|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7527|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7528|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7529|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7530|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7531|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7532|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7535|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7539|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7543|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7544|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7949|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7950|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7951|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7952|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7953|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.7954|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.9526|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.9602|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.11784|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.13563|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.13565|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.13566|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.14596|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.15387|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.15921|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16645|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16646|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16648|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16651|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16652|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16653|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.16654|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.17900|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.18651|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.21085|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23175|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23206|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23330|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23416|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23554|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.23740|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24265|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24341|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24415|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24648|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24792|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24804|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.24816|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25514|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25517|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25518|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25522|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25524|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25531|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.25946|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.27567|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.29431|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.29439|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.29440|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.29574|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.30092|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.30120|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.19.0.31793|66|4294967295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.2|70|2138176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.3|70|69247040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7|70|69247040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.8|70|2138176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.9|70|2138176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.10|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.11|70|69247296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.12|70|69247296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.13|70|69247040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.14|70|69247040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.18|70|2138432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.19|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.20|70|2138176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.21|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.22|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.26|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.27|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.34|70|10758208 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.35|70|1075847232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.36|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.49|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.51|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.52|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.53|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.55|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.68|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.99|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.219|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.220|70|2138176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.221|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.286|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.287|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.288|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.290|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.292|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.293|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.295|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.298|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.299|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.300|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.302|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.304|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.307|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.310|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.313|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.315|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.317|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.318|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.352|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.353|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.381|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.382|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.415|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.440|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.447|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.885|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.886|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.887|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.905|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.906|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.907|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.910|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.911|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.921|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.928|70|2105408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.929|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.951|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.977|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.979|70|1077944384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.982|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.984|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1038|70|1077944640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1130|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1138|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1139|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1140|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1142|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1143|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1212|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1222|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.1826|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.2031|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.2851|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.2852|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.2919|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.3773|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4068|70|1077944640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4085|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4119|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4122|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4212|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4213|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4214|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4215|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4216|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4217|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4218|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4219|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4220|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4221|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4222|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4224|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4226|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4434|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4435|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4436|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4437|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4438|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4439|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4440|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4441|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4442|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4443|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4451|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4773|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4774|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4775|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4776|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4777|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4778|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4779|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4780|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4781|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4782|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4784|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4786|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.4787|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5137|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5138|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5139|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5140|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5141|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5142|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5143|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5144|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5145|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5146|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5148|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5151|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5155|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5159|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5501|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5502|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5503|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5504|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5505|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5506|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5507|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5508|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5509|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5510|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5516|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5522|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5861|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5862|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5863|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5864|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5865|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5866|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5867|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5868|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5869|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5870|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5872|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5875|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5878|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5879|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.5884|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6344|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6345|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6346|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6347|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6348|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6349|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6350|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6351|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6352|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6353|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6358|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6366|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6763|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6764|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6765|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6766|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6767|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6768|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6769|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6770|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6771|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6772|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6782|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.6784|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7174|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7175|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7176|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7177|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7178|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7179|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7180|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7181|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7182|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7183|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7188|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7192|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7194|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7196|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7523|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7524|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7525|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7526|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7527|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7528|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7529|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7530|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7531|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7532|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7535|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7539|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7543|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7544|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7949|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7950|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7951|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7952|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7953|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.7954|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.9526|70|1077944640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.9602|70|1077944384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.11784|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.13563|70|4202816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.13565|70|4202816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.13566|70|4202816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.14596|70|4227340 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.15387|70|1077944640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.15921|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16645|70|4202496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16646|70|4202496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16648|70|1077944640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16651|70|4202496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16652|70|4202496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16653|70|4202496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.16654|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.17900|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.18651|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.21085|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23175|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23206|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23330|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23416|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23554|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.23740|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24265|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24341|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24415|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24648|70|69247072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24792|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24804|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.24816|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25514|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25517|70|4202496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25518|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25522|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25524|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25531|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.25946|70|4202752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.27567|70|1077944320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.29431|70|4202816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.29439|70|4202816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.29440|70|4202816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.29574|70|4227084 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.30092|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.30120|70|1077944640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.20.0.31793|70|1077944576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1|70|47815593 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.415|70|11704595 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.440|70|1641 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.447|70|2939 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.921|70|661 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.951|70|1988 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.977|70|42258 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.979|70|130 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.982|70|2183120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.984|70|609353 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1038|70|108 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.1826|70|343860 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.2851|70|599691 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.2852|70|30429 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.2919|70|23150 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.3773|70|1799 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4068|70|8509 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4085|70|2084 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4119|70|412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4122|70|408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4212|70|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4213|70|240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4214|70|241 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4215|70|259 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4216|70|266 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4217|70|272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4218|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4219|70|241 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4220|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4221|70|274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4222|70|8067 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4224|70|2621 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4226|70|2804 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4434|70|268 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4435|70|259 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4436|70|275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4437|70|275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4438|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4439|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4440|70|274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4441|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4442|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4443|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4451|70|45584 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4773|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4774|70|262 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4775|70|226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4776|70|262 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4777|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4778|70|269 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4779|70|281 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4780|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4781|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4782|70|260 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4784|70|3791 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4786|70|2825 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.4787|70|7117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5137|70|240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5138|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5139|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5140|70|270 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5141|70|258 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5142|70|262 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5143|70|272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5144|70|241 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5145|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5146|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5148|70|10863 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5151|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5155|70|10970 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5159|70|10594 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5501|70|261 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5502|70|257 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5503|70|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5504|70|278 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5505|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5506|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5507|70|270 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5508|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5509|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5510|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5516|70|4836 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5522|70|21124 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5861|70|246 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5862|70|270 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5863|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5864|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5865|70|246 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5866|70|275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5867|70|238 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5868|70|269 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5869|70|279 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5870|70|272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5872|70|41429 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5875|70|19365 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5878|70|46991648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5879|70|52821098 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.5884|70|3435 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6344|70|267 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6345|70|243 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6346|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6347|70|272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6348|70|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6349|70|278 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6350|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6351|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6352|70|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6353|70|250 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6358|70|445561210 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6366|70|13054 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6763|70|266 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6764|70|261 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6765|70|282 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6766|70|260 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6767|70|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6768|70|263 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6769|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6770|70|262 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6771|70|243 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6772|70|272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6782|70|58843 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.6784|70|10064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7174|70|275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7175|70|245 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7176|70|267 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7177|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7178|70|266 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7179|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7180|70|262 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7181|70|278 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7182|70|243 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7183|70|275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7188|70|932720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7192|70|9561 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7194|70|9381 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7196|70|614030 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7523|70|244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7524|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7525|70|245 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7526|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7527|70|258 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7528|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7529|70|247 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7530|70|274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7531|70|243 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7532|70|281 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7535|70|9124 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7539|70|23453 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7543|70|18685 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7544|70|48354 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7949|70|276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7950|70|271 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7951|70|275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7952|70|278 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7953|70|279 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.7954|70|270 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.9526|70|3147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.9602|70|1782 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.11784|70|3144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.13563|70|1155 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.13565|70|1111 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.13566|70|840 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.14596|70|576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.15387|70|7184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.15921|70|428696 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16645|70|398 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16646|70|417 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16648|70|452 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16651|70|7854 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16652|70|11563 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16653|70|337047 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.16654|70|48671 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.17900|70|9419 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.18651|70|49729 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23175|70|17447163 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23206|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23330|70|288617 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24792|70|420 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24804|70|420 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.24816|70|424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25514|70|14706 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25517|70|9466 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25518|70|3390 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25522|70|21261189 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25524|70|9292 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25531|70|7991 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.25946|70|9042 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.27567|70|2019 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.29431|70|7802 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.29439|70|4630 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.29440|70|4717 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.29574|70|168 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.30092|70|48958 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.30120|70|298 +1.3.6.1.4.1.3375.2.1.12.1.2.1.21.0.31793|70|6593 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1|70|907472918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.447|70|211940 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.951|70|247 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.1826|70|153898 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.2851|70|404783385 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.3773|70|58976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4068|70|213554 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4085|70|99544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4212|70|180175 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4215|70|46638 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4216|70|20835 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4217|70|39234 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4218|70|39314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4220|70|40886 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4221|70|39287 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4222|70|6715 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4224|70|22797 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4226|70|9124 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4434|70|51688 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4435|70|38313 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4436|70|17535 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4437|70|71126 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4438|70|47536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4439|70|67988 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4440|70|39251 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4441|70|39284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4442|70|50695 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4451|70|6777 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4774|70|20439 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4776|70|21515 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4777|70|47629 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4778|70|43156 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4779|70|275888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4780|70|39345 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4782|70|11007 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4784|70|13181 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4786|70|7538 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.4787|70|9134 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5140|70|30041 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5141|70|178493 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5142|70|20444 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5143|70|79859 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5145|70|39283 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5146|70|42436 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5148|70|4870 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5151|70|36016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5155|70|58150 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5159|70|1186216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5501|70|25576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5502|70|18927 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5503|70|97287 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5504|70|49110 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5507|70|270259 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5508|70|91707 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5509|70|48412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5510|70|75707 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5516|70|6099 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5522|70|11911 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5862|70|26127 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5866|70|49264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5868|70|26087 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5869|70|39313 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5870|70|39330 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5872|70|117929 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5875|70|157340 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5878|70|2043571 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5879|70|15964 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.5884|70|19762 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6344|70|78330 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6346|70|70555 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6347|70|751174 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6348|70|99836 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6349|70|41644 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6350|70|63325 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6352|70|80116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6353|70|7061 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6358|70|9773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6366|70|8816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6763|70|37608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6764|70|28410 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6765|70|39121 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6766|70|113498 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6767|70|52459 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6768|70|23267 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6770|70|22750 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6772|70|39275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6782|70|88394 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.6784|70|6706 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7174|70|52391 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7176|70|35904 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7178|70|102653 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7180|70|22668 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7181|70|68020 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7183|70|47585 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7188|70|237547 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7192|70|7853 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7194|70|6437 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7196|70|38537 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7524|70|39224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7526|70|198067 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7527|70|16238 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7528|70|49092 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7530|70|39285 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7532|70|63215 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7535|70|74317 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7539|70|18910 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7543|70|44737 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7544|70|14293 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7949|70|91353 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7950|70|34267 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7951|70|36861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7952|70|129112 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7953|70|39300 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.7954|70|72025 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.9526|70|5403503 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.11784|70|18465 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.15921|70|2825516 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16652|70|870295 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.23330|70|7315 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24816|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24827|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24838|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.24851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25514|70|9110 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25517|70|21193 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25518|70|426710 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25522|70|58155066 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25524|70|19364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25531|70|6933 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.25946|70|32594 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.27567|70|30892 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.30092|70|16903 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.22.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1|70|2544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.415|70|5561 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.440|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.447|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.921|70|182 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.951|70|126 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.977|70|556 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.982|70|216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.984|70|696 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1038|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.1826|70|4218 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.2851|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.2852|70|455 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.2919|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.3773|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4068|70|300 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4085|70|172 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4119|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4212|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4215|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4216|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4218|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4220|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4221|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4222|70|218 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4224|70|263 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4226|70|148 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4434|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4435|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4436|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4438|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4439|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4441|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4443|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4451|70|373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4775|70|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4777|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4778|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4779|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4780|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4784|70|106 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4786|70|252 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.4787|70|733 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5139|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5141|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5142|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5143|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5145|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5146|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5148|70|595 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5151|70|430 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5155|70|714 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5159|70|194 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5501|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5502|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5503|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5504|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5507|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5508|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5509|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5516|70|387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5522|70|792 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5861|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5862|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5863|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5864|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5865|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5866|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5867|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5868|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5869|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5870|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5872|70|1264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5875|70|597 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5878|70|29412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5879|70|427 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.5884|70|111 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6344|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6345|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6346|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6347|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6348|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6349|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6351|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6352|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6353|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6358|70|929 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6366|70|137 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6763|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6765|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6766|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6767|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6768|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6769|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6770|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6771|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6772|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6782|70|463 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.6784|70|967 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7174|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7175|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7177|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7178|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7179|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7180|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7181|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7182|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7183|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7188|70|43595 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7192|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7194|70|389 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7196|70|980 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7523|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7524|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7525|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7526|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7527|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7528|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7529|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7530|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7531|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7532|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7535|70|684 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7539|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7543|70|942 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7544|70|4227 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7949|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7950|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7951|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7952|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7953|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.7954|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.9526|70|252 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.9602|70|159 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.11784|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.13563|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.14596|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.15387|70|101 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.15921|70|30006 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16645|70|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16646|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16648|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16651|70|174 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16652|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16653|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.16654|70|520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.17900|70|490 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.18651|70|2671 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.23175|70|182 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.23330|70|3649 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24816|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24827|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24838|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.24851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25514|70|298 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25517|70|248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25518|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25522|70|466 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25524|70|143 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25531|70|97 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.25946|70|159 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.27567|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.29431|70|161 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.29439|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.29440|70|23 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.30092|70|100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.30120|70|87 +1.3.6.1.4.1.3375.2.1.12.1.2.1.23.0.31793|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1|70|18660 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.447|70|59 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.951|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.1826|70|452 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.2851|70|22839 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.3773|70|2237 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4068|70|5574 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4085|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4212|70|303 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4215|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4218|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4220|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4224|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4226|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4434|70|1121 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4435|70|21 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4436|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4437|70|33 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4438|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4439|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4442|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4777|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4778|70|1027 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4779|70|250 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4780|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4782|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4784|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4786|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5140|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5141|70|4127 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5142|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5143|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5145|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5151|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5155|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5159|70|14440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5501|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5502|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5503|70|557 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5507|70|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5522|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5862|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5866|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5868|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5869|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5870|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5872|70|795 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5875|70|2582 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5878|70|9135 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5879|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.5884|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6344|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6346|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6347|70|1150 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6349|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6350|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6352|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6366|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6763|70|1109 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6764|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6766|70|648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6767|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6768|70|522 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6770|70|865 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6782|70|408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7176|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7178|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7180|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7181|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7183|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7188|70|6133 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7526|70|225 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7530|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7532|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7539|70|47 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7543|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7544|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7951|70|28 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7952|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.7954|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.9526|70|41073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.11784|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.15921|70|1711 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16652|70|197 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.23330|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24816|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24827|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24838|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.24851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25514|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25517|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25518|70|1410 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25522|70|1518 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25524|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25531|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.25946|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.27567|70|49 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.30092|70|158 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.24.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1|70|47039 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.9|70|40 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.11|70|245 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.12|70|311 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.20|70|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.415|70|13954 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.440|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.447|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.921|70|22489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.951|70|1732 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.977|70|24657 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.982|70|1100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.984|70|5582 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1038|70|331 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.1826|70|32144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.2851|70|217 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.2852|70|1599 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.2919|70|35176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4068|70|1660 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4085|70|210 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4212|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4213|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4215|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4216|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4217|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4218|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4219|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4220|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4222|70|2981 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4224|70|607 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4226|70|2862 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4434|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4435|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4436|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4437|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4438|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4439|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4440|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4441|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4442|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4443|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4451|70|2287 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4773|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4774|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4775|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4776|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4778|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4779|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4780|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4781|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4782|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4784|70|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4786|70|3993 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.4787|70|11480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5137|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5138|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5139|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5140|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5141|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5142|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5143|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5144|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5145|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5146|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5148|70|5524 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5151|70|280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5155|70|97367 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5159|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5501|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5502|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5503|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5504|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5505|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5506|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5507|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5508|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5509|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5510|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5516|70|4198 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5522|70|6084 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5861|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5862|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5863|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5864|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5865|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5866|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5867|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5868|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5869|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5870|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5872|70|31159 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5875|70|822 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5878|70|195238 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5879|70|78077 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.5884|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6344|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6345|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6346|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6347|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6348|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6349|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6350|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6351|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6352|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6353|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6358|70|686592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6366|70|12776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6763|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6764|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6765|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6766|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6767|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6768|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6769|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6770|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6771|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6772|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6782|70|13772 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.6784|70|6321 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7174|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7175|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7176|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7177|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7178|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7179|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7181|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7182|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7183|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7188|70|307921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7192|70|18348 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7194|70|273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7196|70|3067 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7523|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7524|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7525|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7526|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7527|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7528|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7529|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7530|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7531|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7532|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7535|70|7094 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7539|70|50777 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7543|70|1066 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7544|70|364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7949|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7950|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7951|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7952|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7953|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.7954|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.9526|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.9602|70|121 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.11784|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.13563|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.13565|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.13566|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.15387|70|54 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.15921|70|1378579 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16645|70|234 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16646|70|154 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16648|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16651|70|193 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16652|70|1021 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16653|70|3921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.16654|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.17900|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.18651|70|95298 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.23175|70|14954 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.23330|70|19766 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24816|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24827|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24838|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.24851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25514|70|92 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25517|70|1219 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25518|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25522|70|9725 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25524|70|882 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25531|70|3647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.25946|70|71905 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.27567|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.29431|70|296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.29439|70|281 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.29440|70|340 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.30092|70|10383960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.30120|70|196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.25.0.31793|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1|70|117771 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.2|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.3|70|10067 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7|70|6232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.9|70|165096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.11|70|172 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.13|70|6195 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.14|70|11539 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.20|70|83 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.34|70|1640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.99|70|1224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.352|70|1465 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.415|70|47264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.440|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.447|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.885|70|1852 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.886|70|2793 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.906|70|2684 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.910|70|2433 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.921|70|7808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.928|70|3285 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.951|70|3945 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.977|70|15712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.982|70|11084 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.984|70|20138 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1038|70|4123 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.1826|70|15918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.2031|70|66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.2851|70|6824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.2852|70|16319 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.2919|70|6967 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.3773|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4068|70|7158 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4085|70|7591 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4119|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4212|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4213|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4214|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4215|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4216|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4217|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4218|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4219|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4220|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4221|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4222|70|3293 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4224|70|4912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4226|70|4918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4434|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4435|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4436|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4437|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4438|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4439|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4440|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4441|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4442|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4443|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4451|70|3044 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4773|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4774|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4775|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4776|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4777|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4778|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4779|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4780|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4781|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4782|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4784|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4786|70|2105 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.4787|70|6642 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5137|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5138|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5139|70|288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5140|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5141|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5142|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5143|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5144|70|230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5145|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5146|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5148|70|5150 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5151|70|484 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5155|70|151153 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5159|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5501|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5502|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5503|70|251 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5504|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5505|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5506|70|230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5507|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5508|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5509|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5510|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5516|70|2491 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5522|70|3204 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5861|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5862|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5863|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5864|70|252 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5865|70|253 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5866|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5867|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5868|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5869|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5870|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5872|70|57700 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5875|70|752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5878|70|119765 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5879|70|57462 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.5884|70|109 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6344|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6345|70|224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6346|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6347|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6348|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6349|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6350|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6351|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6352|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6353|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6358|70|434649 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6366|70|12030 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6763|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6764|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6765|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6766|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6767|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6768|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6769|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6770|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6771|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6772|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6782|70|3117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.6784|70|7283 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7174|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7175|70|246 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7176|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7177|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7178|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7179|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7180|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7181|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7182|70|228 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7183|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7188|70|135233 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7192|70|39719 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7194|70|101 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7196|70|16626 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7523|70|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7524|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7525|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7526|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7527|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7528|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7529|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7530|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7531|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7532|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7535|70|5517 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7539|70|198579 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7543|70|550 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7544|70|100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7949|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7950|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7951|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7952|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7953|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.7954|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.9526|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.9602|70|2779 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.11784|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.13563|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.13565|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.13566|70|120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.14596|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.15387|70|1319 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.15921|70|1022608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16645|70|319 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16646|70|199 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16648|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16651|70|179 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16652|70|124 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16653|70|529 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.16654|70|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.17900|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.18651|70|73337 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.21085|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.23175|70|24894 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.23330|70|14396 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.23416|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.23554|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.23740|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24816|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24827|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24838|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.24851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25514|70|122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25517|70|749 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25518|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25522|70|45233 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25524|70|641 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25531|70|3036 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.25946|70|33483 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.29431|70|94 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.29439|70|116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.29440|70|222 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.30092|70|20256468 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.30120|70|305 +1.3.6.1.4.1.3375.2.1.12.1.2.1.26.0.31793|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1|70|1006275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.447|70|52 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.1826|70|384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.2851|70|573116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.3773|70|54 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4068|70|9124 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4085|70|134 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4212|70|390 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4215|70|21 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4216|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4217|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4218|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4220|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4221|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4222|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4224|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4226|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4434|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4435|70|41 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4436|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4437|70|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4438|70|23 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4439|70|26 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4440|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4441|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4442|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4451|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4774|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4776|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4777|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4778|70|39 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4779|70|618 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4780|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4782|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4784|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4786|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.4787|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5140|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5141|70|72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5142|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5143|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5145|70|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5146|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5148|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5151|70|51 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5155|70|163 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5159|70|2336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5501|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5502|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5503|70|261 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5504|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5507|70|135 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5508|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5509|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5510|70|27 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5516|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5522|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5862|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5866|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5868|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5869|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5870|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5872|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5875|70|190 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5878|70|2285 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5879|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.5884|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6344|70|82 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6346|70|25 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6347|70|12397 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6348|70|35 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6349|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6350|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6352|70|78 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6353|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6358|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6366|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6763|70|39 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6764|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6765|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6766|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6767|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6768|70|42 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6770|70|156 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6772|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6782|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.6784|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7174|70|19 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7176|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7178|70|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7180|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7181|70|26 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7183|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7188|70|287 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7192|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7196|70|25 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7524|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7526|70|457 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7527|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7528|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7530|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7532|70|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7535|70|72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7539|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7543|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7544|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7949|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7950|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7951|70|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7952|70|101 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7953|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.7954|70|47 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.9526|70|3775 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.11784|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.15921|70|7746 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16652|70|404 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.23330|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24880|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.24890|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25514|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25517|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25518|70|327 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25522|70|6389 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25524|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25531|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.25946|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.27567|70|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.30092|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.27.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1|70|354220 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.447|70|124 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.1826|70|249 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.2851|70|177444 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.3773|70|243 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4068|70|3312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4085|70|42 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4212|70|144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4215|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4216|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4217|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4218|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4220|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4221|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4222|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4224|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4226|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4434|70|59 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4435|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4436|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4437|70|29 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4438|70|33 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4439|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4440|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4441|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4442|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4451|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4774|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4776|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4777|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4778|70|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4779|70|116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4780|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4782|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4784|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4786|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.4787|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5140|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5141|70|251 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5142|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5143|70|21 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5145|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5146|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5151|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5155|70|26 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5159|70|717 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5501|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5502|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5503|70|122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5504|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5507|70|83 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5508|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5509|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5510|70|18 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5516|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5522|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5862|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5866|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5868|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5869|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5870|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5872|70|48 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5875|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5878|70|1030 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5879|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.5884|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6344|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6346|70|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6347|70|12442 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6348|70|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6349|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6350|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6352|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6353|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6358|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6366|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6763|70|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6764|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6765|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6766|70|41 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6767|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6768|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6770|70|49 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6772|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6782|70|46 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.6784|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7174|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7176|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7178|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7180|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7181|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7183|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7188|70|166 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7192|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7194|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7196|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7524|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7526|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7527|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7528|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7530|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7532|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7535|70|48 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7539|70|13 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7543|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7544|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7949|70|22 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7950|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7951|70|9 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7952|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7953|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.7954|70|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.9526|70|1954 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.11784|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.15921|70|1052 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16652|70|431 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.23330|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24880|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.24890|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25514|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25517|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25518|70|337 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25522|70|39081 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25524|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.25946|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.27567|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.30092|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.28.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.2|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.3|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7|66|4294967196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.8|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.9|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.11|66|4294967196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.12|66|4294967196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.13|66|4294967196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.14|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.18|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.20|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.34|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.35|66|25 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.99|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.220|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.352|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.381|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.415|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.440|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.447|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.886|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.905|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.906|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.910|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.921|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.928|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.951|66|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.977|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.979|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.982|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.984|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1038|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.1826|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.2851|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.2852|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.3773|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4068|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4085|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4119|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4122|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4212|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4213|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4214|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4215|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4216|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4217|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4218|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4219|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4220|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4221|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4222|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4224|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4226|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4434|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4435|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4436|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4437|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4438|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4439|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4440|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4441|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4442|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4443|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4451|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4773|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4774|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4775|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4776|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4777|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4778|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4779|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4780|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4781|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4782|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4784|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4786|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.4787|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5137|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5138|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5139|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5140|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5141|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5142|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5143|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5144|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5145|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5146|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5148|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5151|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5155|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5159|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5501|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5502|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5503|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5504|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5505|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5506|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5507|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5508|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5509|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5510|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5516|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5522|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5861|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5862|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5863|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5864|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5865|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5866|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5867|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5868|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5869|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5870|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5872|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5875|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5878|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5879|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.5884|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6344|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6345|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6346|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6347|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6348|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6349|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6350|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6351|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6352|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6353|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6358|66|25 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6366|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6763|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6764|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6765|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6766|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6767|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6768|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6769|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6770|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6771|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6772|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6782|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.6784|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7174|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7175|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7176|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7177|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7178|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7179|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7180|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7181|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7182|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7183|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7188|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7192|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7194|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7196|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7523|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7524|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7525|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7526|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7527|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7528|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7529|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7530|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7531|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7532|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7535|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7539|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7543|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7544|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7949|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7950|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7951|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7952|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7953|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.7954|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.9526|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.9602|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.11784|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.13563|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.13565|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.13566|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.14596|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.15387|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.15921|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16645|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16646|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16648|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16651|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16652|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16653|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.16654|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.17900|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.18651|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.21085|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.23175|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.23330|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.23416|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.23554|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.23740|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24265|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24341|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24415|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24648|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24829|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24868|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24890|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24902|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.24912|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25514|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25517|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25518|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25522|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25524|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25531|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.25946|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.27567|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.29431|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.29439|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.29440|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.29574|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.30092|66|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.30120|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.29.0.31793|66|20 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.10|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.19|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.21|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.22|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.23|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.26|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.27|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.35|66|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.36|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.49|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.51|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.52|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.53|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.55|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.68|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.219|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.221|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.286|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.287|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.288|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.290|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.292|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.293|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.295|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.298|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.299|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.300|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.302|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.304|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.307|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.310|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.313|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.315|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.317|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.318|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.353|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.382|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.885|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.887|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.907|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.911|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.929|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.951|66|4294967292 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1130|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1138|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1139|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1140|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1142|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1143|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1212|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1222|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.2031|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.2919|66|4294967276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6358|66|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.15921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.23330|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24829|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24890|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24902|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.24912|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.30092|66|4294967283 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.30.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.2|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.3|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.8|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.9|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.10|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.11|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.12|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.13|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.14|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.18|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.19|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.20|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.21|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.22|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.23|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.26|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.27|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.34|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.35|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.36|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.49|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.51|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.52|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.53|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.55|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.68|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.99|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.219|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.220|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.221|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.286|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.287|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.288|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.290|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.292|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.293|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.295|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.298|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.299|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.300|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.302|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.304|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.307|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.310|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.313|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.315|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.317|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.318|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.352|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.353|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.381|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.382|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.415|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.440|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.447|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.885|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.886|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.887|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.905|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.906|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.907|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.910|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.911|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.921|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.928|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.929|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.951|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.977|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.979|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.982|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.984|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1038|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1130|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1138|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1139|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1140|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1142|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1143|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1212|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1222|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.1826|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.2031|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.2851|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.2852|66|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.2919|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.3773|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4068|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4085|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4119|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4122|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4212|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4213|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4214|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4215|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4216|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4217|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4218|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4219|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4220|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4221|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4222|66|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4224|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4226|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4434|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4435|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4436|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4437|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4438|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4439|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4440|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4441|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4442|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4443|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4451|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4773|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4774|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4775|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4776|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4777|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4778|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4779|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4780|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4781|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4782|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4784|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4786|66|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.4787|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5137|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5138|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5139|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5140|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5141|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5142|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5143|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5144|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5145|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5146|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5148|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5151|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5155|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5159|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5501|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5502|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5503|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5504|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5505|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5506|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5507|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5508|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5509|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5510|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5516|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5522|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5861|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5862|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5863|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5864|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5865|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5866|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5867|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5868|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5869|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5870|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5872|66|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5875|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5878|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5879|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.5884|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6344|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6345|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6346|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6347|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6348|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6349|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6350|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6351|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6352|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6353|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6358|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6366|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6763|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6764|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6765|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6766|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6767|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6768|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6769|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6770|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6771|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6772|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6782|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.6784|66|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7174|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7175|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7176|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7177|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7178|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7179|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7180|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7181|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7182|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7183|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7188|66|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7192|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7194|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7196|66|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7523|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7524|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7525|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7526|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7527|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7528|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7529|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7530|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7531|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7532|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7535|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7539|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7543|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7544|66|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7949|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7950|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7951|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7952|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7953|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.7954|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.9526|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.9602|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.11784|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.13563|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.13565|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.13566|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.14596|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.15387|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.15921|66|49 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16645|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16646|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16648|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16651|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16652|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16653|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.16654|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.17900|66|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.18651|66|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.21085|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.23175|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.23330|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.23416|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.23554|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.23740|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24265|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24341|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24415|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24648|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24829|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24868|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24890|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24902|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.24912|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25514|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25517|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25518|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25522|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25524|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25531|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.25946|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.27567|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.29431|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.29439|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.29440|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.29574|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.30092|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.30120|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.31.0.31793|66|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.15921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.23330|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.23554|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24829|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24890|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24902|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.24912|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.30092|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.32.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.2|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.3|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.8|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.9|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.10|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.11|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.12|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.13|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.14|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.18|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.19|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.20|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.21|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.22|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.23|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.26|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.27|70|14 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.34|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.35|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.36|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.49|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.51|70|52 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.52|70|52 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.53|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.55|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.68|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.99|70|58 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.219|70|79 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.220|70|79 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.221|70|79 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.286|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.287|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.288|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.290|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.292|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.293|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.295|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.298|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.299|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.300|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.302|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.304|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.307|70|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.310|70|100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.313|70|100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.315|70|101 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.317|70|101 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.318|70|101 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.352|70|116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.353|70|116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.381|70|125 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.382|70|125 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.415|70|234 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.440|70|290 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.447|70|315 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.885|70|478 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.886|70|478 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.887|70|478 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.905|70|501 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.906|70|502 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.907|70|502 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.910|70|505 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.911|70|505 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.921|70|514 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.928|70|547 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.929|70|547 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.951|70|592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.977|70|610 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.979|70|612 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.982|70|620 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.984|70|620 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1038|70|645 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1130|70|722 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1138|70|730 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1139|70|730 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1140|70|730 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1142|70|732 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1143|70|732 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1212|70|812 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1222|70|821 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.1826|70|1272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.2031|70|1872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.2851|70|3471 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.2852|70|3472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.2919|70|3549 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.3773|70|5544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4068|70|5715 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4085|70|5736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4119|70|5789 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4122|70|5791 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4212|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4213|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4214|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4215|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4216|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4217|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4218|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4219|70|5972 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4220|70|5973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4221|70|5973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4222|70|5973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4224|70|5973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4226|70|5973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4434|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4435|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4436|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4437|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4438|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4439|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4440|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4441|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4442|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4443|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4451|70|6073 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4773|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4774|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4775|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4776|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4777|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4778|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4779|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4780|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4781|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4782|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4784|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4786|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.4787|70|6173 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5137|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5138|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5139|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5140|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5141|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5142|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5143|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5144|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5145|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5146|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5148|70|6273 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5151|70|6274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5155|70|6274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5159|70|6275 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5501|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5502|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5503|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5504|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5505|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5506|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5507|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5508|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5509|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5510|70|6373 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5516|70|6374 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5522|70|6375 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5861|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5862|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5863|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5864|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5865|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5866|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5867|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5868|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5869|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5870|70|6473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5872|70|6474 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5875|70|6474 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5878|70|6474 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5879|70|6474 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.5884|70|6475 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6344|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6345|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6346|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6347|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6348|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6349|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6350|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6351|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6352|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6353|70|6573 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6358|70|6574 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6366|70|6575 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6763|70|6673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6764|70|6673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6765|70|6673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6766|70|6673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6767|70|6673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6768|70|6673 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6769|70|6674 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6770|70|6674 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6771|70|6674 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6772|70|6674 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6782|70|6675 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.6784|70|6675 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7174|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7175|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7176|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7177|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7178|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7179|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7180|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7181|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7182|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7183|70|6774 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7188|70|6775 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7192|70|6775 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7194|70|6775 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7196|70|6776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7523|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7524|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7525|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7526|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7527|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7528|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7529|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7530|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7531|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7532|70|6874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7535|70|6875 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7539|70|6876 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7543|70|6876 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7544|70|6876 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7949|70|6974 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7950|70|6974 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7951|70|6974 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7952|70|6974 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7953|70|6974 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.7954|70|6974 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.9526|70|7966 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.9602|70|7993 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.11784|70|10074 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.13563|70|131991877 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.13565|70|131991978 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.13566|70|131991978 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.14596|70|10549 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.15387|70|3740161 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.15921|70|11089 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16645|70|11973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16646|70|11973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16648|70|11976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16651|70|11976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16652|70|11977 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16653|70|11977 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.16654|70|11977 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.17900|70|14608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.18651|70|51135 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.21085|70|181345385 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.23175|70|340220 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.23330|70|342244 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.23416|70|181499095 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.23554|70|181505145 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.23740|70|181519405 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24265|70|181560701 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24341|70|181561468 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24415|70|181567387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24648|70|181585424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24829|70|181600077 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24868|70|181603386 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24890|70|181605125 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24902|70|181606134 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.24912|70|181607143 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25514|70|370941 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25517|70|370941 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25518|70|370941 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25522|70|370942 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25524|70|370943 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25531|70|370946 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.25946|70|371401 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.27567|70|371629 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.29431|70|35645721 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.29439|70|35645821 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.29440|70|35645821 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.29574|70|371925 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.30092|70|375282 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.30120|70|376493 +1.3.6.1.4.1.3375.2.1.12.1.2.1.33.0.31793|70|173191645 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1|70|49713152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.415|70|33943552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.440|70|141217792 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.447|70|47235072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.921|70|4435968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.951|70|57036800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.977|70|61444096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.979|70|4464640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.982|70|22003712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.984|70|24870912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1038|70|8642560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.1826|70|269340672 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.2851|70|129306624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.2852|70|86798336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.2919|70|92344320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.3773|70|128389120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4068|70|123240448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4085|70|2330624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4119|70|112705536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4122|70|112705536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4212|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4213|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4214|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4215|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4216|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4217|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4218|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4219|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4220|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4221|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4222|70|54636544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4224|70|26431488 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4226|70|30048256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4434|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4435|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4436|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4437|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4438|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4439|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4440|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4441|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4442|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4443|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4451|70|290471936 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4773|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4774|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4775|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4776|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4777|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4778|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4779|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4780|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4781|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4782|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4784|70|62533632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4786|70|39739392 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.4787|70|38821888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5137|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5138|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5139|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5140|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5141|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5142|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5143|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5144|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5145|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5146|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5148|70|33505280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5151|70|10104832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5155|70|33701888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5159|70|30638080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5501|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5502|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5503|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5504|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5505|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5506|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5507|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5508|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5509|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5510|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5516|70|102584320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5522|70|131997696 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5861|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5862|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5863|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5864|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5865|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5866|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5867|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5868|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5869|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5870|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5872|70|153038848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5875|70|44605440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5878|70|263057408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5879|70|49266688 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.5884|70|73691136 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6344|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6345|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6346|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6347|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6348|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6349|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6350|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6351|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6352|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6353|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6358|70|101949440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6366|70|99876864 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6763|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6764|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6765|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6766|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6767|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6768|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6769|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6770|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6771|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6772|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6782|70|17645568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.6784|70|135647232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7174|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7175|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7176|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7177|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7178|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7179|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7180|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7181|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7182|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7183|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7188|70|480456704 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7192|70|33775616 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7194|70|39104512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7196|70|59047936 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7523|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7524|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7525|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7526|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7527|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7528|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7529|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7530|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7531|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7532|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7535|70|30617600 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7539|70|84951040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7543|70|155557888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7544|70|1276493824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7949|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7950|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7951|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7952|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7953|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.7954|70|2179072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.9526|70|105476096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.9602|70|105476096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.11784|70|117710848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.13563|70|124289024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.13565|70|124289024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.13566|70|124289024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.15387|70|50196480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.15921|70|341299200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16645|70|6615040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16646|70|6615040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16648|70|123240448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16651|70|64565248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16652|70|4423680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16653|70|4186112 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.16654|70|318685184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.17900|70|67162112 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.18651|70|387264512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.23175|70|10960896 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.23330|70|142557184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24890|70|6631424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24902|70|6631424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.24912|70|6631424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25514|70|131899392 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25517|70|55631872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25518|70|4431872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25522|70|168435712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25524|70|34631680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25531|70|33611776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.25946|70|60416000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.27567|70|6381568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.29431|70|126652416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.29439|70|124289024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.29440|70|124289024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.30092|70|6445785088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.30120|70|13733888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.34.0.31793|70|43233280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1|70|4608000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.415|70|1953792 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.440|70|225280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.447|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.921|70|40960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.951|70|503808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.977|70|1064960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.979|70|49152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.982|70|454656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.984|70|1134592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1038|70|16384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.1826|70|5361664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.2851|70|446464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.2852|70|15581184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.2919|70|91148288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.3773|70|143360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4068|70|6983680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4085|70|192512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4119|70|49152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4122|70|45056 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4212|70|217088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4213|70|155648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4214|70|176128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4215|70|344064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4216|70|311296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4217|70|319488 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4218|70|282624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4219|70|176128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4220|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4221|70|282624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4222|70|16093184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4224|70|2609152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4226|70|4157440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4434|70|319488 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4435|70|356352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4436|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4437|70|311296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4438|70|278528 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4439|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4440|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4441|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4442|70|307200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4443|70|167936 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4451|70|16547840 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4773|70|155648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4774|70|356352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4775|70|389120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4776|70|356352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4777|70|299008 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4778|70|315392 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4779|70|262144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4780|70|270336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4781|70|176128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4782|70|372736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4784|70|778240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4786|70|3137536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.4787|70|5173248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5137|70|180224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5138|70|180224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5139|70|167936 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5140|70|331776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5141|70|364544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5142|70|339968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5143|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5144|70|180224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5145|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5146|70|307200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5148|70|16998400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5151|70|1056768 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5155|70|16830464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5159|70|17190912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5501|70|331776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5502|70|356352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5503|70|262144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5504|70|290816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5505|70|155648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5506|70|180224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5507|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5508|70|311296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5509|70|290816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5510|70|311296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5516|70|4354048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5522|70|4542464 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5861|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5862|70|331776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5863|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5864|70|143360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5865|70|401408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5866|70|315392 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5867|70|393216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5868|70|331776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5869|70|274432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5870|70|290816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5872|70|21540864 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5875|70|17674240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5878|70|95326208 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5879|70|22757376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.5884|70|393216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6344|70|335872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6345|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6346|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6347|70|307200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6348|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6349|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6350|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6351|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6352|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6353|70|397312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6358|70|15302656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6366|70|851968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6763|70|335872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6764|70|364544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6765|70|274432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6766|70|364544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6767|70|274432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6768|70|327680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6769|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6770|70|348160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6771|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6772|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6782|70|8056832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.6784|70|18399232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7174|70|299008 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7175|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7176|70|339968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7177|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7178|70|339968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7179|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7180|70|327680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7181|70|274432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7182|70|139264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7183|70|299008 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7188|70|175198208 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7192|70|33746944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7194|70|17629184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7196|70|14553088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7523|70|143360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7524|70|307200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7525|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7526|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7527|70|344064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7528|70|294912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7529|70|139264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7530|70|303104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7531|70|147456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7532|70|282624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7535|70|16130048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7539|70|83767296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7543|70|1945600 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7544|70|20705280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7949|70|294912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7950|70|290816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7951|70|286720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7952|70|282624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7953|70|290816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.7954|70|335872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.9526|70|917504 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.9602|70|573440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.11784|70|69632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.13563|70|6098944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.13565|70|5926912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.13566|70|5185536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.15387|70|1994752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.15921|70|231464960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16645|70|278528 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16646|70|307200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16648|70|3219456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16651|70|18980864 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16652|70|1286144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16653|70|1474560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.16654|70|17506304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.17900|70|1490944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.18651|70|95395840 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.23175|70|1228800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.23330|70|35278848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24912|70|856064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24925|70|851968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24937|70|851968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.24949|70|864256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25514|70|22290432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25517|70|25726976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25518|70|598016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25522|70|25862144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25524|70|26071040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25531|70|25788416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.25946|70|26468352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.27567|70|1257472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.29431|70|14893056 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.29439|70|8228864 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.29440|70|8417280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.30092|70|110612480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.30120|70|1159168 +1.3.6.1.4.1.3375.2.1.12.1.2.1.35.0.31793|70|24371200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.2|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.3|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.8|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.9|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.10|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.11|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.12|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.13|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.14|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.18|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.19|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.20|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.21|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.22|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.23|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.26|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.27|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.34|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.35|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.36|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.49|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.51|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.52|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.53|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.55|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.68|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.99|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.219|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.220|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.221|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.286|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.287|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.288|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.290|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.292|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.293|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.295|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.298|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.299|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.300|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.302|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.304|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.307|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.310|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.313|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.315|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.317|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.318|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.352|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.353|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.381|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.382|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.415|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.440|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.447|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.885|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.886|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.887|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.905|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.906|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.907|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.910|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.911|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.921|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.928|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.929|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.951|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.977|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.979|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.982|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.984|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1038|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1130|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1138|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1139|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1140|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1142|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1143|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1212|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1222|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.1826|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.2031|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.2851|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.2852|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.2919|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.3773|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4068|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4085|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4119|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4122|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4212|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4213|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4214|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4215|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4216|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4217|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4218|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4219|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4220|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4221|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4222|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4224|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4226|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4434|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4435|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4436|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4437|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4438|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4439|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4440|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4441|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4442|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4443|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4451|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4773|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4774|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4775|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4776|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4777|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4778|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4779|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4780|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4781|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4782|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4784|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4786|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.4787|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5137|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5138|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5139|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5140|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5141|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5142|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5143|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5144|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5145|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5146|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5148|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5151|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5155|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5159|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5501|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5502|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5503|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5504|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5505|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5506|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5507|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5508|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5509|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5510|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5516|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5522|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5861|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5862|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5863|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5864|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5865|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5866|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5867|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5868|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5869|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5870|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5872|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5875|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5878|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5879|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.5884|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6344|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6345|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6346|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6347|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6348|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6349|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6350|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6351|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6352|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6353|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6358|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6366|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6763|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6764|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6765|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6766|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6767|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6768|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6769|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6770|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6771|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6772|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6782|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.6784|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7174|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7175|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7176|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7177|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7178|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7179|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7180|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7181|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7182|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7183|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7188|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7192|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7194|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7196|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7523|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7524|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7525|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7526|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7527|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7528|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7529|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7530|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7531|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7532|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7535|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7539|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7543|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7544|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7949|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7950|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7951|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7952|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7953|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.7954|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.9526|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.9602|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.11784|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.13563|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.13565|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.13566|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.14596|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.15387|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.15921|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16645|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16646|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16648|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16651|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16652|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16653|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.16654|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.17900|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.18651|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.21085|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.23175|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.23330|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.23416|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.23554|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.23740|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24265|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24341|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24415|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24648|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24829|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24868|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24912|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24925|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24937|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.24949|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25514|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25517|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25518|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25522|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25524|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25531|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.25946|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.27567|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.29431|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.29439|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.29440|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.29574|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.30092|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.30120|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.36.0.31793|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1|70|94346280902656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.415|70|94425133027328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.440|70|94857912774656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.447|70|94129310830592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.921|70|94485268529152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.951|70|94098792108032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.977|70|94355467161600 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.979|70|93976630431744 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.982|70|94107871502336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.984|70|93847942225920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1038|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.1826|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.2851|70|94072984322048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.2852|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.2919|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.3773|70|94745531465728 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4068|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4085|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4119|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4122|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4212|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4213|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4214|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4215|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4216|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4217|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4218|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4219|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4220|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4221|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4222|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4224|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4226|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4434|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4435|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4436|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4437|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4438|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4439|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4440|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4441|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4442|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4443|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4451|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4773|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4774|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4775|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4776|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4777|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4778|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4779|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4780|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4781|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4782|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4784|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4786|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.4787|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5137|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5138|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5139|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5140|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5141|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5142|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5143|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5144|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5145|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5146|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5148|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5151|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5155|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5159|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5501|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5502|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5503|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5504|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5505|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5506|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5507|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5508|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5509|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5510|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5516|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5522|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5861|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5862|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5863|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5864|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5865|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5866|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5867|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5868|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5869|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5870|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5872|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5875|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5878|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5879|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.5884|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6344|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6345|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6346|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6347|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6348|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6349|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6350|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6351|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6352|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6353|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6358|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6366|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6763|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6764|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6765|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6766|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6767|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6768|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6769|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6770|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6771|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6772|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6782|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.6784|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7174|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7175|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7176|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7177|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7178|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7179|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7180|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7181|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7182|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7183|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7188|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7192|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7194|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7196|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7523|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7524|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7525|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7526|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7527|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7528|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7529|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7530|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7531|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7532|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7535|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7539|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7543|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7544|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7949|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7950|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7951|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7952|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7953|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.7954|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.9526|70|94884366323712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.9602|70|93935795552256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.11784|70|94089056813056 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.13563|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.13565|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.13566|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.15387|70|94922591174656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.15921|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16645|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16646|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16648|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16651|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16652|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16653|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.16654|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.17900|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.18651|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.23175|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.23330|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24937|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24949|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.24959|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25514|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25517|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25518|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25522|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25524|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25531|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.25946|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.27567|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.29431|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.29439|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.29440|70|1449304064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.30092|70|4194304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.30120|70|1448448000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.37.0.31793|70|134512640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1|70|94346282237616 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.415|70|94425133284104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.440|70|94857912837404 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.447|70|94129311134192 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.921|70|94485268545932 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.951|70|94098792218652 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.977|70|94355467578284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.979|70|93976630475108 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.982|70|94107871543300 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.984|70|93847942756952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1038|70|4206060 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.1826|70|4202636 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.2851|70|94072984381548 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.2852|70|134919186 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.2919|70|134536564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.3773|70|94745532287748 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4068|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4085|70|134529492 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4119|70|4226284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4122|70|4226284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4212|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4213|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4214|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4215|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4216|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4217|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4218|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4219|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4220|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4221|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4222|70|134981023 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4224|70|134531971 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4226|70|134682980 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4434|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4435|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4436|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4437|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4438|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4439|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4440|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4441|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4442|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4443|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4451|70|135983196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4773|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4774|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4775|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4776|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4777|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4778|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4779|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4780|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4781|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4782|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4784|70|4711036 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4786|70|134609472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.4787|70|134762383 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5137|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5138|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5139|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5140|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5141|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5142|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5143|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5144|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5145|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5146|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5148|70|135144380 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5151|70|139997850 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5155|70|135084855 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5159|70|134749296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5501|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5502|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5503|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5504|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5505|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5506|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5507|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5508|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5509|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5510|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5516|70|4384068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5522|70|4933648 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5861|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5862|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5863|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5864|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5865|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5866|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5867|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5868|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5869|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5870|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5872|70|134891524 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5875|70|135202884 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5878|70|138002848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5879|70|134928616 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.5884|70|4571836 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6344|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6345|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6346|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6347|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6348|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6349|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6350|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6351|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6352|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6353|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6358|70|135058942 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6366|70|4490669 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6763|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6764|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6765|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6766|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6767|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6768|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6769|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6770|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6771|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6772|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6782|70|134514660 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.6784|70|135869367 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7174|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7175|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7176|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7177|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7178|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7179|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7180|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7181|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7182|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7183|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7188|70|134514716 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7192|70|134813894 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7194|70|135488239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7196|70|136947495 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7523|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7524|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7525|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7526|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7527|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7528|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7529|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7530|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7531|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7532|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7535|70|136799079 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7539|70|135035883 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7543|70|4497788 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7544|70|31481328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7949|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7950|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7951|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7952|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7953|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.7954|70|134532288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.9526|70|94884366724572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.9602|70|93935795953116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.11784|70|94089056838084 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.13563|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.13565|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.13566|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.15387|70|94922591840116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.15921|70|134514716 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16645|70|4212076 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16646|70|4212076 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16648|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16651|70|142468913 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16652|70|134698152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16653|70|134728030 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.16654|70|137412196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.17900|70|135207764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.18651|70|134633080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.23175|70|134519412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.23330|70|4219948 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24959|70|4226284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24970|70|4226284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.24981|70|4226284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25514|70|4814432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25517|70|136199459 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25518|70|4205412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25522|70|6216072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25524|70|136080339 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25531|70|135084667 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.25946|70|135897564 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.27567|70|134534924 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.29431|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.29439|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.29440|70|1449782480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.30092|70|61374939 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.30120|70|1449459400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.38.0.31793|70|134860908 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1|70|140732766786352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.415|70|140721758066368 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.440|70|140731499222656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.447|70|140732891572384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.921|70|140733613925856 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.951|70|140730624358624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.977|70|140724594581040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.979|70|140733472443312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.982|70|140733876277760 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.984|70|140720738944912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1038|70|140723899688240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.1826|70|140722242821376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.2851|70|140734565503824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.2852|70|4292325408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.2919|70|4294440720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.3773|70|140730125576880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4068|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4085|70|4293351552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4119|70|140725382887920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4122|70|140723316694560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4212|70|4287489568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4213|70|4293986800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4214|70|4289328080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4215|70|4294445600 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4216|70|4291935968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4217|70|4289703376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4218|70|4292756496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4219|70|4294513744 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4220|70|4291117600 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4221|70|4292853408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4222|70|4286991808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4224|70|4292363312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4226|70|4292525680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4434|70|4294832560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4435|70|4287015584 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4436|70|4288987344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4437|70|4293374224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4438|70|4293846800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4439|70|4291522960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4440|70|4289794976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4441|70|4290656304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4442|70|4291588800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4443|70|4293195920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4451|70|4293533520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4773|70|4294732944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4774|70|4288887968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4775|70|4290211680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4776|70|4294483632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4777|70|4291875184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4778|70|4294880304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4779|70|4288679264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4780|70|4287485568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4781|70|4291050064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4782|70|4293145024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4784|70|140730893949088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4786|70|4288706976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.4787|70|4292692448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5137|70|4292674880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5138|70|4291111088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5139|70|4289792752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5140|70|4292719184 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5141|70|4286929264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5142|70|4287505680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5143|70|4288357376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5144|70|4292965216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5145|70|4292314256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5146|70|4291626272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5148|70|4293754320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5151|70|4289031952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5155|70|4288322400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5159|70|4290637504 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5501|70|4286645984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5502|70|4289633248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5503|70|4289228672 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5504|70|4294403584 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5505|70|4286594496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5506|70|4291186144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5507|70|4294411440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5508|70|4291913792 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5509|70|4288302880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5510|70|4288457536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5516|70|140735832122880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5522|70|140729354123712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5861|70|4287136832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5862|70|4289574800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5863|70|4291120320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5864|70|4288947808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5865|70|4290187952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5866|70|4294212928 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5867|70|4293525072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5868|70|4292464192 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5869|70|4287035440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5870|70|4291962352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5872|70|4290437920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5875|70|4291297920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5878|70|4289252848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5879|70|4291265664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.5884|70|140736910470784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6344|70|4287815904 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6345|70|4294724528 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6346|70|4290962032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6347|70|4293920736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6348|70|4292734080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6349|70|4289813888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6350|70|4293015152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6351|70|4290208032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6352|70|4292000672 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6353|70|4291706944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6358|70|4293146112 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6366|70|140728188951872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6763|70|4294749072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6764|70|4288063232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6765|70|4289995312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6766|70|4293695712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6767|70|4291392720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6768|70|4293346048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6769|70|4287458816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6770|70|4286902272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6771|70|4293823984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6772|70|4291579072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6782|70|4294855904 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.6784|70|4293534512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7174|70|4287874832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7175|70|4291819536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7176|70|4293358544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7177|70|4294355568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7178|70|4289270384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7179|70|4290711744 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7180|70|4293474160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7181|70|4289841920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7182|70|4286670624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7183|70|4287157424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7188|70|4287091520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7192|70|4294876576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7194|70|4288912144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7196|70|4291264960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7523|70|4293564304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7524|70|4290690160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7525|70|4286817680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7526|70|4291985984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7527|70|4289521808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7528|70|4290590064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7529|70|4289720960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7530|70|4290056128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7531|70|4291370368 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7532|70|4291151152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7535|70|4293372912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7539|70|4293670848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7543|70|140732176812672 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7544|70|140735184362704 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7949|70|4287648544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7950|70|4294565152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7951|70|4290050880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7952|70|4294614016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7953|70|4291006016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.7954|70|4293249616 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.9526|70|140726487098160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.9602|70|140726560751680 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.11784|70|140728703830320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.13563|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.13565|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.13566|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.15387|70|140724663555776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.15921|70|4286590512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16645|70|140725167277552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16646|70|140725725288096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16648|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16651|70|4292212240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16652|70|4286632176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16653|70|4287934624 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.16654|70|4290916928 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.17900|70|4289663520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.18651|70|4292495440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.23175|70|4289708384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.23330|70|140734326725328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24959|70|140724777098784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24970|70|140726176479568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.24981|70|140723622028160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25514|70|140722861115168 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25517|70|4289440944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25518|70|140722276450480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25522|70|140736876610384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25524|70|4288663248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25531|70|4288061104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.25946|70|4290285840 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.27567|70|4292665696 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.29431|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.29439|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.29440|70|4286897968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.30092|70|140721301273248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.30120|70|4291970640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.39.0.31793|70|4290252096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1|70|140732766782744 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.415|70|140721758064920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.440|70|140731499220544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.447|70|140732891569736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.921|70|140733613925384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.951|70|140730624339344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.977|70|140724594578896 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.979|70|140733472442376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.982|70|140733876276776 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.984|70|140720738943960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1038|70|140723899687800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.1826|70|140722242820352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.2851|70|140734565502536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.2852|70|4292322572 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.2919|70|4294440236 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.3773|70|140730125574280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4068|70|4286897148 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4085|70|4293351080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4119|70|140725382877256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4122|70|140723316683896 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4212|70|4287488856 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4213|70|4293986088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4214|70|4289327368 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4215|70|4294444888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4216|70|4291935256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4217|70|4289702664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4218|70|4292755784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4219|70|4294513032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4220|70|4291116888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4221|70|4292852696 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4222|70|4286991448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4224|70|4292361580 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4226|70|4292524976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4434|70|4294831848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4435|70|4287014872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4436|70|4288986632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4437|70|4293373512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4438|70|4293846088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4439|70|4291522248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4440|70|4289794264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4441|70|4290655592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4442|70|4291588088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4443|70|4293195208 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4451|70|4293529688 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4773|70|4294732232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4774|70|4288887256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4775|70|4290210968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4776|70|4294482920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4777|70|4291874472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4778|70|4294879592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4779|70|4288678552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4780|70|4287484856 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4781|70|4291049352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4782|70|4293144312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4784|70|140730893947920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4786|70|4288703544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.4787|70|4292687440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5137|70|4292674168 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5138|70|4291110376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5139|70|4289792040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5140|70|4292718472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5141|70|4286928552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5142|70|4287504968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5143|70|4288356664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5144|70|4292964504 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5145|70|4292313544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5146|70|4291625560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5148|70|4293752012 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5151|70|4289030620 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5155|70|4288319948 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5159|70|4290636684 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5501|70|4286645272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5502|70|4289632536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5503|70|4289227960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5504|70|4294402872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5505|70|4286593784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5506|70|4291185432 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5507|70|4294410728 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5508|70|4291913080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5509|70|4288302168 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5510|70|4288456824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5516|70|140735832122368 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5522|70|140729354123128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5861|70|4287136120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5862|70|4289574088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5863|70|4291119608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5864|70|4288947096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5865|70|4290187240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5866|70|4294212216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5867|70|4293524360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5868|70|4292463480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5869|70|4287034728 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5870|70|4291961640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5872|70|4290435364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5875|70|4291297404 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5878|70|4289251740 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5879|70|4291264988 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.5884|70|47493968305664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6344|70|4287815192 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6345|70|4294723816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6346|70|4290961320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6347|70|4293920024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6348|70|4292733368 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6349|70|4289813176 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6350|70|4293014440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6351|70|4290207320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6352|70|4291999960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6353|70|4291706232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6358|70|4293132552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6366|70|140728188949224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6763|70|4294748360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6764|70|4288062520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6765|70|4289994600 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6766|70|4293695000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6767|70|4291392008 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6768|70|4293345336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6769|70|4287458104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6770|70|4286901560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6771|70|4293823272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6772|70|4291578360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6782|70|4294848472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.6784|70|4293532236 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7174|70|4287874120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7175|70|4291818824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7176|70|4293357832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7177|70|4294354856 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7178|70|4289269672 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7179|70|4290711032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7180|70|4293473448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7181|70|4289841208 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7182|70|4286669912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7183|70|4287156712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7188|70|4287074272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7192|70|4294875964 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7194|70|4288909308 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7196|70|4291264492 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7523|70|4293563592 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7524|70|4290689448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7525|70|4286816968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7526|70|4291985272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7527|70|4289521096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7528|70|4290589352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7529|70|4289720248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7530|70|4290055416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7531|70|4291369656 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7532|70|4291150440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7535|70|4293370812 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7539|70|4293669900 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7543|70|140732176812040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7544|70|140735184345848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7949|70|4287647832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7950|70|4294564440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7951|70|4290050168 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7952|70|4294613304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7953|70|4291005304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.7954|70|4293248904 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.9526|70|140726487097096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.9602|70|140726560750616 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.11784|70|140728703829384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.13563|70|4286896992 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.13565|70|4286896992 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.13566|70|4286896944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.15387|70|140724663555288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.15921|70|4286573264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16645|70|140725167275880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16646|70|140725725286424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16648|70|4286896812 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16651|70|4292209804 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16652|70|4286627228 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16653|70|4287929644 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.16654|70|4290912492 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.17900|70|4289662832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.18651|70|4292494880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.23175|70|4289703800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.23330|70|140734326723760 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24959|70|140724777087416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24970|70|140726176468200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24981|70|140723622016792 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.24992|70|140733967253416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25514|70|140722861110416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25517|70|4289437348 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25518|70|140722276437528 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25522|70|140736876606288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25524|70|4288658604 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25531|70|4288058524 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.25946|70|4290285236 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.27567|70|4292665240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.29431|70|4286896992 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.29439|70|4286896992 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.29440|70|4286896992 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.30092|70|94558004171520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.30120|70|4291965888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.40.0.31793|70|4290242268 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1|70|47627409845491 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.415|70|47323536116979 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.440|70|46986588298131 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.447|70|47986283310323 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.921|70|47136718375795 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.951|70|47549278190867 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.977|70|47093558488339 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.979|70|47979494984563 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.982|70|47837183442928 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.984|70|47780355079411 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1038|70|47972738981392 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.1826|70|47663091748115 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.2851|70|47067289817072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.2852|70|1457514643 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.2919|70|1431925808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.3773|70|47160180738931 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4068|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4085|70|1432753200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4119|70|47897375533984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4122|70|47118343572384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4212|70|1432523824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4213|70|1432650800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4214|70|1432364080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4215|70|1432220720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4216|70|1432278064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4217|70|1432626224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4218|70|1432245296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4219|70|1432396848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4220|70|1432577072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4221|70|1432597552 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4222|70|1432646704 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4224|70|1432200240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4226|70|1432163376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4434|70|1432024112 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4435|70|1432818736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4436|70|1432237104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4437|70|1432421424 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4438|70|1432319024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4439|70|1432568880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4440|70|1432310832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4441|70|1432052784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4442|70|1432192048 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4443|70|1432056880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4451|70|1432110128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4773|70|1432572976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4774|70|1432687664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4775|70|1432228912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4776|70|1432073264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4777|70|1431946288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4778|70|1432134704 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4779|70|1432245296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4780|70|1432491056 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4781|70|1432372272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4782|70|1432003632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4784|70|47733961268235 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4786|70|1432507440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.4787|70|1432499248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5137|70|1431807024 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5138|70|1432007728 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5139|70|1432310832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5140|70|1432171568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5141|70|1431843888 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5142|70|1432593456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5143|70|1431921712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5144|70|1432466480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5145|70|1432716336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5146|70|1432806448 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5148|70|1457031315 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5151|70|1434097811 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5155|70|1457875091 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5159|70|1432310832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5501|70|1431938096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5502|70|1432286256 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5503|70|1431925808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5504|70|1432204336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5505|70|1432011824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5506|70|1432425520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5507|70|1432020016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5508|70|1431999536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5509|70|1432548400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5510|70|1432708144 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5516|70|47642156997907 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5522|70|47306113899379 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5861|70|1432724528 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5862|70|1431852080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5863|70|1432400944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5864|70|1432110128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5865|70|1431798832 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5866|70|1432618032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5867|70|1431790640 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5868|70|1431880752 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5869|70|1432298544 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5870|70|1431974960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5872|70|1431987248 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5875|70|1432204336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5878|70|1545078931 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5879|70|1459964051 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.5884|70|47493950430219 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6344|70|1431815216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6345|70|1431974960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6346|70|1432425520 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6347|70|1432679472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6348|70|1431946288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6349|70|1432470576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6350|70|1432040496 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6351|70|1432618032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6352|70|1432577072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6353|70|1432204336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6358|70|1432749104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6366|70|47119478271219 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6763|70|1431901232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6764|70|1431938096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6765|70|1431794736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6766|70|1432106032 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6767|70|1432757296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6768|70|1431819312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6769|70|1432118320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6770|70|1432835120 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6771|70|1431901232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6772|70|1432331312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6782|70|1432769584 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.6784|70|1458915475 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7174|70|1431905328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7175|70|1432138800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7176|70|1432118320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7177|70|1431962672 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7178|70|1432794160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7179|70|1432171568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7180|70|1432413232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7181|70|1432507440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7182|70|1432663088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7183|70|1432532016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7188|70|1432269872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7192|70|1459021971 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7194|70|1458845843 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7196|70|1432020016 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7523|70|1432593456 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7524|70|1432818736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7525|70|1432671280 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7526|70|1431938096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7527|70|1432241200 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7528|70|1432495152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7529|70|1432802352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7530|70|1432110128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7531|70|1431999536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7532|70|1432003632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7535|70|1454700691 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7539|70|1480325267 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7543|70|47235317930867 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7544|70|48010185595881 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7949|70|1432200240 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7950|70|1432626224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7951|70|1431839792 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7952|70|1432568880 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7953|70|1432683568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.7954|70|1432749104 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.9526|70|47405977721715 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.9602|70|47670331878259 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.11784|70|47963304819740 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.13563|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.13565|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.13566|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.15387|70|47203279956851 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.15921|70|1432446000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16645|70|47677498370976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16646|70|47021884324768 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16648|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16651|70|1432269872 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16652|70|1432007728 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16653|70|1432736816 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.16654|70|1432335408 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.17900|70|1432658992 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.18651|70|1432683568 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.23175|70|1432167472 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.23330|70|47740347538323 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24981|70|47780493475824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.24992|70|47661043736560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25004|70|47149384757232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25514|70|47796091816971 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25517|70|1431888944 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25518|70|47518685990800 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25522|70|47944454302731 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25524|70|1457707155 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25531|70|1457100947 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.25946|70|1432699952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.27567|70|1432585264 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.29431|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.29439|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.29440|70|1432785968 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.30092|70|47952520835085 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.30120|70|1432470576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.41.0.31793|70|1458043027 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24981|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.24992|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25004|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.42.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1|70|671173123 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.415|70|18946 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.447|70|2147221247 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.2852|70|2560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4085|70|65536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4451|70|524288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7196|70|16416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.11784|70|2147196665 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16648|70|16896 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.18651|70|16390 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24981|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.24992|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25004|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.43.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.2|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.3|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.8|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.9|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.10|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.11|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.12|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.13|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.14|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.18|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.19|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.20|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.21|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.22|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.23|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.26|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.27|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.34|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.35|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.36|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.49|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.51|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.52|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.53|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.55|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.68|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.99|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.219|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.220|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.221|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.286|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.287|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.288|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.290|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.292|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.293|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.295|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.298|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.299|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.300|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.302|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.304|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.307|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.310|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.313|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.315|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.317|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.318|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.352|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.353|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.381|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.382|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.415|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.440|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.447|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.885|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.886|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.887|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.905|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.906|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.907|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.910|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.911|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.921|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.928|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.929|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.951|70|2147136766 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.977|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.979|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.982|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.984|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1130|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1138|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1139|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1140|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1142|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1143|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1212|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1222|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.1826|70|4198400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.2031|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.2851|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.2852|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.2919|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.3773|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4068|70|16781312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4085|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4119|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4122|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4212|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4213|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4214|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4215|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4216|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4217|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4218|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4219|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4220|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4221|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4222|70|3676676 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4224|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4226|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4434|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4435|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4436|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4437|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4438|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4439|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4440|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4441|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4442|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4443|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4451|70|14848 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4773|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4774|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4775|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4776|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4777|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4778|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4779|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4780|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4781|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4782|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4784|70|20451328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4786|70|4102 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.4787|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5137|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5138|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5139|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5140|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5141|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5142|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5143|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5144|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5145|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5146|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5148|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5151|70|4097 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5155|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5159|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5501|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5502|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5503|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5504|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5505|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5506|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5507|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5508|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5509|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5510|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5516|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5522|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5861|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5862|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5863|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5864|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5865|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5866|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5867|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5868|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5869|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5870|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5872|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5878|70|3676676 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5879|70|3674116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.5884|70|4108 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6344|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6345|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6346|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6347|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6348|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6349|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6350|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6351|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6352|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6353|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6358|70|3674116 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6366|70|4097 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6763|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6764|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6765|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6766|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6767|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6768|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6769|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6770|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6771|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6772|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6782|70|16781318 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.6784|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7174|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7175|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7176|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7177|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7178|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7179|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7180|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7181|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7182|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7183|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7188|70|4098 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7192|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7194|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7196|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7523|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7524|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7525|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7526|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7527|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7528|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7529|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7530|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7531|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7532|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7535|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7539|70|6659 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7543|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7544|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7949|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7950|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7951|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7952|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7953|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.7954|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.13563|70|16781314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.13565|70|16781314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.13566|70|16781314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.14596|70|3676676 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.15387|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.15921|70|4098 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16645|70|16781825 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16646|70|16781825 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16648|70|16781312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16651|70|16781312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.17900|70|16781312 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.18651|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.21085|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.23175|70|3873431 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.23330|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.23416|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.23554|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.23740|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24265|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24341|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24415|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24648|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24829|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24868|70|2147483647 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24981|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.24992|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25004|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25514|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25517|70|69632 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25518|70|4103 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25522|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25524|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25531|70|4100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.25946|70|4097 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.27567|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.29431|70|16781314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.29439|70|16781314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.29440|70|16781314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.29574|70|4102 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.30092|70|4097 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.30120|70|4096 +1.3.6.1.4.1.3375.2.1.12.1.2.1.44.0.31793|70|4198400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1|70|1260 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.415|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.440|70|24583 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.921|70|24583 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.951|70|84481 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.977|70|16385 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.979|70|16391 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.982|70|18947 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1038|70|2560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.1826|70|90115 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.2851|70|81923 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.2852|70|268454400 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.2919|70|84481 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.3773|70|81925 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4068|70|134235883 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4085|70|16385 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4212|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4213|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4214|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4215|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4216|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4217|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4218|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4219|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4220|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4221|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4222|70|16387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4224|70|158215 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4226|70|545890 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4434|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4435|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4436|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4437|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4438|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4439|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4440|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4441|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4442|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4443|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4451|70|81926 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4773|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4774|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4775|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4776|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4777|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4778|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4779|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4780|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4781|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4782|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4784|70|12668671 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.4787|70|16385 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5137|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5138|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5139|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5140|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5141|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5142|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5143|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5144|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5145|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5146|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5148|70|81922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5151|70|25249022 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5155|70|268517379 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5159|70|512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5501|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5502|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5503|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5504|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5505|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5506|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5507|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5508|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5509|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5510|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5516|70|65536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5522|70|16386 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5861|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5862|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5863|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5864|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5865|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5866|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5867|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5868|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5869|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5870|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5872|70|16897 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5875|70|16422 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5878|70|16387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5879|70|84483 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.5884|70|81922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6344|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6345|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6346|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6347|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6348|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6349|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6350|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6351|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6352|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6353|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6358|70|84483 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6366|70|18950 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6763|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6764|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6765|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6766|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6767|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6768|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6769|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6770|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6771|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6772|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.6784|70|81922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7174|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7175|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7176|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7177|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7178|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7179|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7180|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7181|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7182|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7183|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7188|70|16796877 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7194|70|25249022 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7523|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7524|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7525|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7526|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7527|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7528|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7529|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7530|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7531|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7532|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7535|70|81923 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7539|70|25257212 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7543|70|16387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7544|70|16899 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7949|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7950|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7951|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7952|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7953|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.7954|70|81920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.11784|70|16390 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.13563|70|134235881 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.13565|70|134235881 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.13566|70|134235881 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.15387|70|19015 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.15921|70|16796877 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16648|70|134309611 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16651|70|512 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16652|70|4608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16653|70|4608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.16654|70|4608 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.17900|70|16387 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.18651|70|16390 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.23330|70|25183999 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24981|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.24992|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25004|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25514|70|25249534 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25517|70|16423 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25518|70|81952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25522|70|81922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25524|70|81922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25531|70|81922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.25946|70|25251582 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.27567|70|21610 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.29431|70|201344745 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.29439|70|134235881 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.29440|70|134235881 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.30092|70|25185534 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.30120|70|84519 +1.3.6.1.4.1.3375.2.1.12.1.2.1.45.0.31793|70|16386 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.2|70|18446744071579569973 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.3|70|18446744071579602226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7|70|18446744071579602226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.8|70|18446744071580134834 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.9|70|18446744071580135497 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.10|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.11|70|18446744071579602226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.12|70|18446744071579602226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.13|70|18446744071579602226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.14|70|18446744071579602226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.18|70|18446744071583417901 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.19|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.20|70|18446744071580084844 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.21|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.22|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.23|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.26|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.27|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.34|70|18446744071580525455 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.35|70|18446744071580804922 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.36|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.49|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.51|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.52|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.53|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.55|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.68|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.99|70|18446744071579988404 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.219|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.220|70|18446744071583547891 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.221|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.286|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.287|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.288|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.290|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.292|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.293|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.295|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.298|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.299|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.300|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.302|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.304|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.307|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.310|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.313|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.315|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.317|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.318|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.352|70|18446744072099523590 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.353|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.381|70|18446744072099523590 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.382|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.415|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.440|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.447|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.885|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.886|70|18446744072099523590 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.887|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.905|70|18446744072101159257 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.906|70|18446744072099523590 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.907|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.910|70|18446744072099523590 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.911|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.921|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.928|70|18446744072099523590 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.929|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.951|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.977|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.979|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.982|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.984|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1038|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1130|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1138|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1139|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1140|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1142|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1143|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1212|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1222|70|18446744071579537566 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.1826|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.2031|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.2851|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.2852|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.2919|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.3773|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4068|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4085|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4119|70|18446744071583072796 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4122|70|18446744071583072796 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4212|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4213|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4214|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4215|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4216|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4217|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4218|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4219|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4220|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4221|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4222|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4224|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4226|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4434|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4435|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4436|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4437|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4438|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4439|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4440|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4441|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4442|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4443|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4451|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4773|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4774|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4775|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4776|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4777|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4778|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4779|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4780|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4781|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4782|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4784|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4786|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.4787|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5137|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5138|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5139|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5140|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5141|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5142|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5143|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5144|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5145|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5146|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5148|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5151|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5155|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5159|70|18446744071585490473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5501|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5502|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5503|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5504|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5505|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5506|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5507|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5508|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5509|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5510|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5516|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5522|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5861|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5862|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5863|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5864|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5865|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5866|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5867|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5868|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5869|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5870|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5872|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5875|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5878|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5879|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.5884|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6344|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6345|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6346|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6347|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6348|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6349|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6350|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6351|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6352|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6353|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6366|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6763|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6764|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6765|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6766|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6767|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6768|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6769|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6770|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6771|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6772|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6782|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.6784|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7174|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7175|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7176|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7177|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7178|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7179|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7180|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7181|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7182|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7183|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7188|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7192|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7194|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7196|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7523|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7524|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7525|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7526|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7527|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7528|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7529|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7530|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7531|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7532|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7535|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7539|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7543|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7544|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7949|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7950|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7951|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7952|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7953|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.7954|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.9526|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.9602|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.11784|70|18446744071579418806 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.13563|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.13565|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.13566|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.14596|70|18446744071579421451 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.15387|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.15921|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16645|70|18446744071581011216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16646|70|18446744071581011216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16648|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16651|70|18446744071584672976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16652|70|18446744071584672976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16653|70|18446744071584672976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.16654|70|18446744071584672976 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.17900|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.18651|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.21085|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.23175|70|18446744071585490473 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.23330|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.23416|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.23554|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.23740|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24265|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24341|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24415|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24648|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24829|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24868|70|18446744071579540489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24981|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.24992|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25004|70|18446744071579587147 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25514|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25517|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25518|70|18446744071579500172 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25522|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25524|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25531|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.25946|70|18446744071581287918 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.27567|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.29431|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.29439|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.29440|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.29574|70|18446744071579421451 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.30092|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.30120|70|18446744071581061861 +1.3.6.1.4.1.3375.2.1.12.1.2.1.46.0.31793|70|18446744073709551615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.23554|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25004|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25051|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25063|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25073|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.47.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25051|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25063|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25073|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.48.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.3|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.8|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.9|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.10|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.11|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.12|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.13|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.14|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.18|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.19|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.20|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.21|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.22|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.23|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.24|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.26|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.27|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.34|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.35|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.36|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.49|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.51|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.52|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.53|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.55|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.68|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.99|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.219|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.220|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.221|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.286|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.287|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.288|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.290|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.292|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.293|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.295|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.298|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.299|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.300|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.302|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.304|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.307|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.310|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.313|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.315|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.317|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.318|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.352|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.353|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.381|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.382|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.415|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.440|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.447|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.885|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.886|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.887|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.905|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.906|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.907|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.910|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.911|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.921|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.928|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.929|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.951|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.977|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.979|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.982|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.984|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1038|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1130|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1138|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1139|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1140|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1142|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1143|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1212|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1222|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.1826|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.2031|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.2851|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.2852|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.2919|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.3773|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4068|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4085|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4119|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4122|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4212|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4213|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4214|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4215|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4216|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4217|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4218|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4219|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4220|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4221|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4222|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4224|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4226|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4434|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4435|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4436|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4437|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4438|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4439|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4440|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4441|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4442|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4443|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4451|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4773|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4774|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4775|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4776|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4777|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4778|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4779|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4780|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4781|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4782|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4784|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4786|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.4787|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5137|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5138|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5139|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5140|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5141|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5142|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5143|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5144|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5145|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5146|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5148|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5151|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5155|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5159|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5501|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5502|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5503|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5504|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5505|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5506|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5507|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5508|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5509|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5510|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5516|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5522|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5861|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5862|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5863|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5864|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5865|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5866|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5867|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5868|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5869|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5870|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5872|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5875|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5878|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5879|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.5884|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6344|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6345|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6346|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6347|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6348|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6349|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6350|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6351|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6352|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6353|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6358|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6366|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6763|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6764|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6765|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6766|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6767|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6768|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6769|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6770|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6771|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6772|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6782|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.6784|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7174|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7175|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7176|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7177|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7178|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7179|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7180|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7181|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7182|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7183|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7188|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7192|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7194|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7196|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7523|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7524|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7525|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7526|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7527|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7528|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7529|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7530|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7531|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7532|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7535|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7539|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7543|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7544|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7949|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7950|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7951|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7952|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7953|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.7954|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.9526|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.9602|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.11784|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.13563|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.13565|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.13566|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.14596|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.15387|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.15921|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16645|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16646|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16648|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16651|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16652|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16653|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.16654|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.17900|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.18651|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.21085|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.23175|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.23330|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.23416|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.23740|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.24265|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.24341|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.24648|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.24829|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.24868|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25050|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25051|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25063|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25073|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25514|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25517|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25518|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25522|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25524|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25531|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.25946|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.27567|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.29431|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.29439|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.29440|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.29574|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.30092|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.30120|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.49.0.31793|66|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7|66|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.11|66|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.12|66|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.13|66|99 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.15921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.23330|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.24829|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.24868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25050|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25051|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25063|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25073|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.30092|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.50.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.11|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.12|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.13|66|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.415|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.447|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.977|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.979|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.982|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.984|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1038|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.1826|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.2851|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.2852|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.2919|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.3773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4068|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4119|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4122|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4213|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4214|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4215|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4216|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4217|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4218|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4224|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4226|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4434|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4435|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4436|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4437|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4438|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4441|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4442|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4443|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4451|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4773|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4774|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4775|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4776|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4777|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4778|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4779|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4780|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4781|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4786|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.4787|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5137|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5141|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5144|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5145|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5146|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5148|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5151|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5155|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5159|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5501|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5502|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5503|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5504|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5505|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5506|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5507|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5508|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5509|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5510|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5516|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5861|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5862|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5863|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5864|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5865|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5866|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5867|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5869|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5870|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5872|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5875|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5878|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5879|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.5884|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6344|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6345|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6346|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6347|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6348|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6349|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6350|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6351|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6358|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6366|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6763|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6764|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6765|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6766|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6767|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6768|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6769|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6770|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6771|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6772|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6782|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.6784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7174|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7176|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7177|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7178|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7179|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7180|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7181|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7182|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7183|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7188|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7192|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7194|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7196|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7523|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7525|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7527|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7528|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7529|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7530|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7532|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7535|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7539|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7543|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7544|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7949|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7950|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7951|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7952|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7953|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.7954|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.9526|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.9602|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.11784|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.13563|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.13565|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.13566|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.15387|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.15921|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16645|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16646|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16652|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16653|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.16654|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.17900|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.18651|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.23175|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.23330|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.24829|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.24868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25050|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25051|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25063|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25073|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25514|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25517|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25518|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25522|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25524|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25531|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.25946|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.27567|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.29431|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.29439|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.29440|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.30092|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.30120|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.51.0.31793|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1|66|12137 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.415|66|8287 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.440|66|34477 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.447|66|11532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.921|66|1083 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.951|66|13925 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.977|66|15001 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.979|66|1090 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.982|66|5372 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.984|66|6072 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1038|66|2110 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.1826|66|65757 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.2851|66|31569 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.2852|66|21191 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.2919|66|22545 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.3773|66|31345 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4068|66|30088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4085|66|569 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4119|66|27516 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4122|66|27516 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4212|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4213|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4214|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4215|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4216|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4217|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4218|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4219|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4220|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4221|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4222|66|13339 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4224|66|6453 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4226|66|7336 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4434|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4435|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4436|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4437|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4438|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4439|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4440|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4441|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4442|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4443|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4451|66|70916 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4773|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4774|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4775|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4776|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4777|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4778|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4779|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4780|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4781|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4782|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4784|66|15267 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4786|66|9702 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.4787|66|9478 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5137|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5138|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5139|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5140|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5141|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5142|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5143|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5144|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5145|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5146|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5148|66|8180 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5151|66|2467 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5155|66|8228 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5159|66|7480 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5501|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5502|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5503|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5504|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5505|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5506|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5507|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5508|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5509|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5510|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5516|66|25045 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5522|66|32226 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5861|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5862|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5863|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5864|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5865|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5866|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5867|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5868|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5869|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5870|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5872|66|37363 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5875|66|10890 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5878|66|64230 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5879|66|12028 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.5884|66|17991 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6344|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6345|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6346|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6347|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6348|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6349|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6350|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6351|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6352|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6353|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6358|66|24890 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6366|66|24384 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6763|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6764|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6765|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6766|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6767|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6768|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6769|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6770|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6771|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6772|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6782|66|4308 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.6784|66|33117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7174|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7175|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7176|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7177|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7178|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7179|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7180|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7181|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7182|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7183|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7188|66|117299 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7192|66|8246 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7194|66|9547 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7196|66|14416 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7523|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7524|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7525|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7526|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7527|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7528|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7529|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7530|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7531|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7532|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7535|66|7475 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7539|66|20740 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7543|66|37978 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7544|66|311644 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7949|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7950|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7951|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7952|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7953|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.7954|66|532 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.9526|66|25751 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.9602|66|25751 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.11784|66|28738 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.13563|66|30344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.13565|66|30344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.13566|66|30344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.15387|66|12255 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.15921|66|83325 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16645|66|1615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16646|66|1615 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16648|66|30088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16651|66|15763 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16652|66|1080 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16653|66|1022 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.16654|66|77804 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.17900|66|16397 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.18651|66|94547 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.23175|66|2676 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.23330|66|34804 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.24829|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.24868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25050|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25051|66|1619 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25063|66|1619 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25073|66|1619 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25514|66|32202 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25517|66|13582 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25518|66|1082 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25522|66|41122 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25524|66|8455 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25531|66|8206 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.25946|66|14750 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.27567|66|1558 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.29431|66|30921 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.29439|66|30344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.29440|66|30344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.30092|66|1573678 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.30120|66|3353 +1.3.6.1.4.1.3375.2.1.12.1.2.1.52.0.31793|66|10555 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1|70|1125 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.415|70|488 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.440|70|55 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.447|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.921|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.951|70|123 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.977|70|260 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.979|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.982|70|111 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.984|70|277 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1038|70|4 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.1826|70|1320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.2851|70|109 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.2852|70|3804 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.2919|70|22253 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.3773|70|35 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4068|70|1705 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4085|70|47 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4119|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4122|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4212|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4213|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4214|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4215|70|84 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4216|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4217|70|78 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4218|70|69 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4219|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4220|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4221|70|69 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4222|70|3929 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4224|70|637 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4226|70|1015 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4434|70|78 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4435|70|87 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4436|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4437|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4438|70|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4439|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4440|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4441|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4442|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4443|70|41 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4451|70|4040 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4773|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4774|70|87 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4775|70|95 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4776|70|87 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4777|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4778|70|77 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4779|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4780|70|66 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4781|70|43 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4782|70|91 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4784|70|190 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4786|70|766 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.4787|70|1263 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5137|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5138|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5139|70|41 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5140|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5141|70|89 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5142|70|83 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5143|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5144|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5145|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5146|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5148|70|4150 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5151|70|258 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5155|70|4109 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5159|70|4197 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5501|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5502|70|87 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5503|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5504|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5505|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5506|70|44 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5507|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5508|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5509|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5510|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5516|70|1063 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5522|70|1109 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5861|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5862|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5863|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5864|70|35 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5865|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5866|70|77 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5867|70|96 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5868|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5869|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5870|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5872|70|5259 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5875|70|4315 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5878|70|23315 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5879|70|5556 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.5884|70|96 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6344|70|82 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6345|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6346|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6347|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6348|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6349|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6350|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6351|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6352|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6353|70|97 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6358|70|3736 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6366|70|208 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6763|70|82 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6764|70|89 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6765|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6766|70|89 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6767|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6768|70|80 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6769|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6770|70|85 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6771|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6772|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6782|70|1967 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.6784|70|4492 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7174|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7175|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7176|70|83 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7177|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7178|70|83 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7179|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7180|70|80 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7181|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7182|70|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7183|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7188|70|42773 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7192|70|8239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7194|70|4304 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7196|70|3553 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7523|70|35 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7524|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7525|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7526|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7527|70|84 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7528|70|72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7529|70|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7530|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7531|70|36 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7532|70|69 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7535|70|3938 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7539|70|20451 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7543|70|475 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7544|70|5055 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7949|70|72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7950|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7951|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7952|70|69 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7953|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.7954|70|82 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.9526|70|224 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.9602|70|140 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.11784|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.13563|70|1489 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.13565|70|1447 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.13566|70|1266 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.15387|70|487 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.15921|70|56510 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16645|70|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16646|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16648|70|786 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16651|70|4634 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16652|70|314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16653|70|360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.16654|70|4274 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.17900|70|364 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.18651|70|23290 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.23175|70|300 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.23330|70|8613 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25096|70|211 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25182|70|211 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25195|70|210 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25514|70|5442 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25517|70|6281 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25518|70|146 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25522|70|6314 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25524|70|6365 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25531|70|6296 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.25946|70|6462 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.27567|70|307 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.29431|70|3636 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.29439|70|2009 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.29440|70|2055 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.30092|70|27005 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.30120|70|283 +1.3.6.1.4.1.3375.2.1.12.1.2.1.53.0.31793|70|5950 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1|70|612 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.415|70|436 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.440|70|12 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.447|70|17 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.951|70|89 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.977|70|171 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.979|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.982|70|83 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.984|70|205 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.1826|70|693 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.2851|70|79 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.2852|70|3545 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.2919|70|19269 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.3773|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4068|70|1000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4085|70|41 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4119|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4122|70|10 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4212|70|48 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4213|70|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4214|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4215|70|79 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4216|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4217|70|72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4218|70|63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4219|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4220|70|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4221|70|63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4222|70|3890 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4224|70|631 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4226|70|988 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4434|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4435|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4436|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4437|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4438|70|62 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4439|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4440|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4441|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4442|70|69 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4443|70|37 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4451|70|3926 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4773|70|33 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4774|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4775|70|90 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4776|70|81 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4777|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4778|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4779|70|58 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4780|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4781|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4782|70|85 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4784|70|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4786|70|740 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.4787|70|853 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5137|70|39 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5138|70|39 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5139|70|37 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5140|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5141|70|84 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5142|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5143|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5144|70|38 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5145|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5146|70|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5148|70|3611 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5151|70|227 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5155|70|3619 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5159|70|3441 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5501|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5502|70|77 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5503|70|57 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5504|70|65 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5505|70|34 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5506|70|39 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5507|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5508|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5509|70|65 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5510|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5516|70|84 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5522|70|187 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5861|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5862|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5863|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5864|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5865|70|93 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5866|70|67 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5867|70|92 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5868|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5869|70|57 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5870|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5872|70|4931 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5875|70|3650 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5878|70|5279 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5879|70|833 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.5884|70|59 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6344|70|76 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6345|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6346|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6347|70|65 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6348|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6349|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6350|70|69 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6351|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6352|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6353|70|92 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6358|70|2569 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6366|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6763|70|68 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6764|70|84 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6765|70|57 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6766|70|80 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6767|70|58 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6768|70|71 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6769|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6770|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6771|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6772|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6782|70|754 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.6784|70|3760 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7174|70|63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7175|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7176|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7177|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7178|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7179|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7180|70|70 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7181|70|57 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7182|70|30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7183|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7188|70|559 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7192|70|7777 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7194|70|3784 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7196|70|3553 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7523|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7524|70|65 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7525|70|32 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7526|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7527|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7528|70|63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7529|70|28 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7530|70|64 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7531|70|31 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7532|70|59 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7535|70|3431 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7539|70|17885 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7543|70|220 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7544|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7949|70|62 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7950|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7951|70|57 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7952|70|60 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7953|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.7954|70|72 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.9526|70|160 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.9602|70|93 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.11784|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.13563|70|436 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.13565|70|414 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.13566|70|309 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.15387|70|288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.15921|70|450 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16645|70|45 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16646|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16648|70|103 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16651|70|3772 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16652|70|272 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16653|70|284 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.16654|70|3889 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.17900|70|289 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.18651|70|4064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.23175|70|197 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.23330|70|2713 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25096|70|177 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25182|70|177 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25195|70|177 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25514|70|145 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25517|70|3867 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25518|70|121 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25522|70|874 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25524|70|3662 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25531|70|3619 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.25946|70|4008 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.27567|70|164 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.29431|70|834 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.29439|70|567 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.29440|70|612 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.30092|70|18904 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.30120|70|130 +1.3.6.1.4.1.3375.2.1.12.1.2.1.54.0.31793|70|3635 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1|70|326 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.415|70|63 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.440|70|16 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.447|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.921|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.951|70|28 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.977|70|102 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.979|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.982|70|11 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.984|70|130 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1038|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.1826|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.2851|70|15 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.2852|70|100 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.2919|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.3773|70|201 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4068|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4085|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4119|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4122|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4212|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4213|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4214|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4215|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4216|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4217|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4218|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4219|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4220|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4221|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4222|70|115 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4224|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4226|70|42 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4434|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4435|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4436|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4437|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4438|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4439|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4440|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4441|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4442|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4443|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4451|70|360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4773|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4774|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4775|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4776|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4777|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4778|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4779|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4780|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4781|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4782|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4784|70|127 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4786|70|24 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.4787|70|61 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5137|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5138|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5139|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5140|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5141|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5142|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5143|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5144|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5145|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5146|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5148|70|155 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5151|70|1340 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5155|70|140 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5159|70|58 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5501|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5502|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5503|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5504|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5505|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5506|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5507|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5508|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5509|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5510|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5516|70|47 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5522|70|181 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5861|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5862|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5863|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5864|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5865|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5866|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5867|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5868|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5869|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5870|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5872|70|93 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5875|70|169 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5878|70|853 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5879|70|102 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.5884|70|93 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6344|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6345|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6346|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6347|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6348|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6349|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6350|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6351|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6352|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6353|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6358|70|134 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6366|70|73 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6763|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6764|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6765|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6766|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6767|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6768|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6769|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6770|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6771|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6772|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6782|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.6784|70|332 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7174|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7175|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7176|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7177|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7178|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7179|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7180|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7181|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7182|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7183|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7188|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7192|70|74 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7194|70|239 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7196|70|595 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7523|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7524|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7525|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7526|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7527|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7528|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7529|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7530|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7531|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7532|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7535|70|559 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7539|70|128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7543|70|75 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7544|70|6662 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7949|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7950|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7951|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7952|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7953|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.7954|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.9526|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.9602|70|98 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.11784|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.13563|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.13565|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.13566|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.15387|70|163 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.15921|70|1 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16645|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16646|70|5 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16648|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16651|70|1943 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16652|70|46 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16653|70|53 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.16654|70|708 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.17900|70|170 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.18651|70|30 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.23175|70|2 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.23330|70|7 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25096|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25182|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25195|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25206|70|8 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25514|70|152 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25517|70|412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25518|70|3 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25522|70|494 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25524|70|383 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25531|70|140 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.25946|70|339 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.27567|70|6 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.29431|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.29439|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.29440|70|117 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.30092|70|13961 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.30120|70|247 +1.3.6.1.4.1.3375.2.1.12.1.2.1.55.0.31793|70|86 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25096|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25195|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25206|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.56.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25096|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25195|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25206|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.57.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.2|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.3|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.8|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.9|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.10|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.11|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.12|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.13|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.14|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.18|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.19|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.20|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.21|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.22|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.23|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.24|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.26|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.27|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.34|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.35|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.36|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.49|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.51|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.52|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.53|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.55|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.68|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.99|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.286|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.287|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.288|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.290|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.292|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.293|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.295|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.298|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.299|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.300|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.302|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.304|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.307|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.310|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.313|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.315|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.317|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.318|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.381|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.382|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.415|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.447|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.885|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.886|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.887|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.905|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.906|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.907|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.910|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.911|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.928|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.929|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.977|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.979|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.982|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.984|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1038|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1130|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.1826|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.2031|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.2851|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.2852|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.2919|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.3773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4068|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4119|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4122|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4212|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4213|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4214|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4215|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4216|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4217|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4218|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4219|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4220|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4221|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4222|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4224|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4226|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4434|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4435|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4436|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4437|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4438|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4441|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4442|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4443|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4451|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4773|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4774|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4775|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4776|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4777|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4778|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4779|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4780|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4781|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4786|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.4787|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5137|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5138|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5139|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5140|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5141|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5142|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5143|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5144|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5145|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5146|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5148|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5151|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5155|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5159|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5501|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5502|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5503|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5504|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5505|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5506|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5507|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5508|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5509|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5510|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5516|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5861|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5862|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5863|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5864|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5865|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5866|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5867|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5869|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5870|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5872|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5875|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5878|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5879|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.5884|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6344|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6345|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6346|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6347|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6348|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6349|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6350|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6351|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6352|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6353|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6358|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6366|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6763|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6764|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6765|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6766|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6767|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6768|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6769|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6770|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6771|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6772|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6782|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.6784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7174|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7176|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7177|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7178|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7179|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7180|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7181|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7183|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7188|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7192|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7194|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7196|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7523|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7525|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7527|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7528|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7529|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7530|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7532|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7535|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7539|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7543|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7544|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7949|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7950|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7951|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7952|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7953|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.7954|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.9526|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.9602|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.11784|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.13563|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.13565|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.13566|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.14596|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.15387|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.15921|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16645|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16646|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16652|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16653|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.16654|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.17900|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.18651|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.21085|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.23175|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.23330|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.23416|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.23740|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.24265|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.24341|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.24648|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.24829|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.24868|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25050|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25096|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25182|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25195|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25206|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25514|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25517|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25518|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25522|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25524|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25531|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.25946|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.27567|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.29431|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.29439|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.29440|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.29574|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.30092|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.30120|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.58.0.31793|70|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1|66|48548 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.2|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.3|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.8|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.9|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.10|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.11|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.12|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.13|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.14|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.18|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.19|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.20|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.21|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.22|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.23|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.24|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.26|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.27|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.34|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.35|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.36|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.49|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.51|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.52|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.53|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.55|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.68|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.99|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.219|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.220|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.221|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.286|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.287|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.288|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.290|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.292|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.293|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.295|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.298|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.299|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.300|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.302|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.304|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.307|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.310|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.313|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.315|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.317|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.318|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.352|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.353|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.381|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.382|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.415|66|33148 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.440|66|137908 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.447|66|46128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.885|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.886|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.887|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.905|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.906|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.907|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.910|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.911|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.921|66|4332 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.928|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.929|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.951|66|55700 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.977|66|60004 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.979|66|4360 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.982|66|21488 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.984|66|24288 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1038|66|8440 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1130|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1138|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1139|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1140|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1142|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1143|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1212|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1222|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.1826|66|263028 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.2031|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.2851|66|126276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.2852|66|84764 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.2919|66|90180 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.3773|66|125380 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4068|66|120352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4085|66|2276 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4119|66|110064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4122|66|110064 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4212|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4213|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4214|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4215|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4216|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4217|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4218|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4219|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4220|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4221|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4222|66|53356 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4224|66|25812 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4226|66|29344 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4434|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4435|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4436|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4437|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4438|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4439|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4440|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4441|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4442|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4443|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4451|66|283664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4773|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4774|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4775|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4776|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4777|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4778|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4779|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4780|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4781|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4782|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4784|66|61068 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4786|66|38808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.4787|66|37912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5137|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5138|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5139|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5140|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5141|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5142|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5143|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5144|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5145|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5146|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5148|66|32720 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5151|66|9868 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5155|66|32912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5159|66|29920 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5501|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5502|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5503|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5504|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5505|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5506|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5507|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5508|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5509|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5510|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5516|66|100180 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5522|66|128904 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5861|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5862|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5863|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5864|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5865|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5866|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5867|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5868|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5869|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5870|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5872|66|149452 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5875|66|43560 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5878|66|256788 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5879|66|48112 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.5884|66|71964 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6344|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6345|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6346|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6347|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6348|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6349|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6350|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6351|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6352|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6353|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6358|66|99556 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6366|66|97536 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6763|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6764|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6765|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6766|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6767|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6768|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6769|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6770|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6771|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6772|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6782|66|17232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.6784|66|132468 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7174|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7175|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7176|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7177|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7178|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7179|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7180|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7181|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7182|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7183|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7188|66|469196 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7192|66|32984 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7194|66|38188 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7196|66|57664 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7523|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7524|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7525|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7526|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7527|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7528|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7529|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7530|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7531|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7532|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7535|66|29900 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7539|66|82960 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7543|66|151912 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7544|66|1246576 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7949|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7950|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7951|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7952|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7953|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.7954|66|2128 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.9526|66|103004 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.9602|66|103004 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.11784|66|114952 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.13563|66|121376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.13565|66|121376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.13566|66|121376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.14596|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.15387|66|49020 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.15921|66|333300 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16645|66|6460 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16646|66|6460 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16648|66|120352 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16651|66|63052 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16652|66|4320 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16653|66|4088 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.16654|66|311216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.17900|66|65588 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.18651|66|378188 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.21085|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.23175|66|10704 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.23330|66|139216 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.23416|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.23740|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.24265|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.24341|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.24648|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.24829|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.24868|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25050|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25210|66|6028 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25217|66|6476 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25228|66|6476 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25514|66|128808 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25517|66|54328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25518|66|4328 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25522|66|164484 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25524|66|33820 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25531|66|32824 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.25946|66|59000 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.27567|66|6232 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.29431|66|123684 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.29439|66|121376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.29440|66|121376 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.29574|66|0 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.30092|66|6294712 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.30120|66|13412 +1.3.6.1.4.1.3375.2.1.12.1.2.1.59.0.31793|66|42220 +1.3.6.1.4.1.3375.2.1.12.2.1.0|2|3 +1.3.6.1.4.1.3375.2.1.12.2.2.1.1.4.100.97.116.97|4|data +1.3.6.1.4.1.3375.2.1.12.2.2.1.1.7.99.111.110.116.114.111.108|4|control +1.3.6.1.4.1.3375.2.1.12.2.2.1.1.8.97.110.97.108.121.115.105.115|4|analysis +1.3.6.1.4.1.3375.2.1.12.2.2.1.2.4.100.97.116.97|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.2.7.99.111.110.116.114.111.108|66|2 +1.3.6.1.4.1.3375.2.1.12.2.2.1.2.8.97.110.97.108.121.115.105.115|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.3.4.100.97.116.97|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.3.7.99.111.110.116.114.111.108|66|5 +1.3.6.1.4.1.3375.2.1.12.2.2.1.3.8.97.110.97.108.121.115.105.115|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.4.4.100.97.116.97|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.4.7.99.111.110.116.114.111.108|66|5 +1.3.6.1.4.1.3375.2.1.12.2.2.1.4.8.97.110.97.108.121.115.105.115|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.5.4.100.97.116.97|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.5.7.99.111.110.116.114.111.108|66|7 +1.3.6.1.4.1.3375.2.1.12.2.2.1.5.8.97.110.97.108.121.115.105.115|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.6.4.100.97.116.97|66|0 +1.3.6.1.4.1.3375.2.1.12.2.2.1.6.7.99.111.110.116.114.111.108|66|6 +1.3.6.1.4.1.3375.2.1.12.2.2.1.6.8.97.110.97.108.121.115.105.115|66|0 +1.3.6.1.4.1.3375.2.1.13.1.1.0|2|0 +1.3.6.1.4.1.3375.2.1.13.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.13.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.13.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.13.5.1.0|2|0 +1.3.6.1.4.1.3375.2.1.13.6.1.0|2|0 +1.3.6.1.4.1.3375.2.1.13.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.14.1.1.0|2|6 +1.3.6.1.4.1.3375.2.1.14.1.2.0|4|Standalone +1.3.6.1.4.1.3375.2.1.14.1.3.0|2|0 +1.3.6.1.4.1.3375.2.1.14.1.4.0|4| +1.3.6.1.4.1.3375.2.1.14.2.1.0|2|1 +1.3.6.1.4.1.3375.2.1.14.2.2.1.1.1|2|1 +1.3.6.1.4.1.3375.2.1.14.2.2.1.2.1|4x|4f7074696f6e616c20616374696f6e3a2041646420612064657669636520746f2074686520747275737420646f6d61696e +1.3.6.1.4.1.3375.2.1.14.3.1.0|2|4 +1.3.6.1.4.1.3375.2.1.14.3.2.0|4|ACTIVE +1.3.6.1.4.1.3375.2.1.14.3.3.0|2|0 +1.3.6.1.4.1.3375.2.1.14.3.4.0|4x|312f3120616374697665 +1.3.6.1.4.1.3375.2.1.14.4.1.0|2|1 +1.3.6.1.4.1.3375.2.1.14.4.2.1.1.1|2|1 +1.3.6.1.4.1.3375.2.1.14.4.2.1.2.1|4x|61637469766520666f72202f436f6d6d6f6e2f747261666669632d67726f75702d31 +1.3.6.1.4.1.3375.2.1.14.5.1.0|2|1 +1.3.6.1.4.1.3375.2.1.14.5.2.1.1.23.47.67.111.109.109.111.110.47.116.114.97.102.102.105.99.45.103.114.111.117.112.45.49.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|2f436f6d6d6f6e2f747261666669632d67726f75702d31 +1.3.6.1.4.1.3375.2.1.14.5.2.1.2.23.47.67.111.109.109.111.110.47.116.114.97.102.102.105.99.45.103.114.111.117.112.45.49.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|4x|2f436f6d6d6f6e2f626967697031 +1.3.6.1.4.1.3375.2.1.14.5.2.1.3.23.47.67.111.109.109.111.110.47.116.114.97.102.102.105.99.45.103.114.111.117.112.45.49.14.47.67.111.109.109.111.110.47.98.105.103.105.112.49|2|4 +1.3.6.1.4.1.3375.2.1.15.1.1.0|2|4 +1.3.6.1.4.1.3375.2.1.15.1.2.1.1.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.1.15.1.2.1.1.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|4x|2f436f6d6d6f6e2f66352d6972756c652e637274 +1.3.6.1.4.1.3375.2.1.15.1.2.1.1.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|4x|2f436f6d6d6f6e2f63612d62756e646c652e637274 +1.3.6.1.4.1.3375.2.1.15.1.2.1.1.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|4x|2f436f6d6d6f6e2f66352d63612d62756e646c652e637274 +1.3.6.1.4.1.3375.2.1.15.1.2.1.2.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|4| +1.3.6.1.4.1.3375.2.1.15.1.2.1.2.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|4| +1.3.6.1.4.1.3375.2.1.15.1.2.1.2.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|4| +1.3.6.1.4.1.3375.2.1.15.1.2.1.2.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|4| +1.3.6.1.4.1.3375.2.1.15.1.2.1.3.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|66|0 +1.3.6.1.4.1.3375.2.1.15.1.2.1.3.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|66|0 +1.3.6.1.4.1.3375.2.1.15.1.2.1.3.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|66|0 +1.3.6.1.4.1.3375.2.1.15.1.2.1.3.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|66|0 +1.3.6.1.4.1.3375.2.1.15.1.2.1.4.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|4x|5365702032372030393a31313a3137203230323920474d54 +1.3.6.1.4.1.3375.2.1.15.1.2.1.4.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|4x|4a756c2031382032313a30303a3133203230323720474d54 +1.3.6.1.4.1.3375.2.1.15.1.2.1.4.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|4x|4465632033312032333a35393a3539203230323920474d54 +1.3.6.1.4.1.3375.2.1.15.1.2.1.4.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|4x|4465632020372031373a35353a3534203230333020474d54 +1.3.6.1.4.1.3375.2.1.15.1.2.1.5.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|70|1885194677 +1.3.6.1.4.1.3375.2.1.15.1.2.1.5.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|70|1815944413 +1.3.6.1.4.1.3375.2.1.15.1.2.1.5.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|70|1893455999 +1.3.6.1.4.1.3375.2.1.15.1.2.1.5.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|70|1922896554 +1.3.6.1.4.1.3375.2.1.15.2.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.3.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.4.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.4.2.0|2|0 +1.3.6.1.4.1.3375.2.1.15.5.1.0|2|4 +1.3.6.1.4.1.3375.2.1.15.5.2.1.1.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.1.15.5.2.1.1.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|4x|2f436f6d6d6f6e2f66352d6972756c652e637274 +1.3.6.1.4.1.3375.2.1.15.5.2.1.1.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|4x|2f436f6d6d6f6e2f63612d62756e646c652e637274 +1.3.6.1.4.1.3375.2.1.15.5.2.1.1.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|4x|2f436f6d6d6f6e2f66352d63612d62756e646c652e637274 +1.3.6.1.4.1.3375.2.1.15.5.2.1.2.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.2.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.2.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.2.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.3.19.47.67.111.109.109.111.110.47.100.101.102.97.117.108.116.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.3.20.47.67.111.109.109.111.110.47.102.53.45.105.114.117.108.101.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.3.21.47.67.111.109.109.111.110.47.99.97.45.98.117.110.100.108.101.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.5.2.1.3.24.47.67.111.109.109.111.110.47.102.53.45.99.97.45.98.117.110.100.108.101.46.99.114.116|2|0 +1.3.6.1.4.1.3375.2.1.15.6.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.7.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.7.2.0|2|0 +1.3.6.1.4.1.3375.2.1.15.8.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.9.1.0|2|0 +1.3.6.1.4.1.3375.2.1.15.9.2.0|2|0 +1.3.6.1.4.1.3375.2.2.1.1.1.0|66|0 +1.3.6.1.4.1.3375.2.2.1.1.2.0|2|1 +1.3.6.1.4.1.3375.2.2.1.1.3.0|2|0 +1.3.6.1.4.1.3375.2.2.1.1.4.0|66|2048 +1.3.6.1.4.1.3375.2.2.1.1.5.0|2|0 +1.3.6.1.4.1.3375.2.2.1.1.6.0|4x|3a3a +1.3.6.1.4.1.3375.2.2.1.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.1.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.1.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.1.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.1.4.2.0|2|0 +1.3.6.1.4.1.3375.2.2.1.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.1.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.2.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.3.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.3.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.3.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.3.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.4.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.4.1.1|2|3 +1.3.6.1.4.1.3375.2.2.4.1.2.1.1.1|2|0 +1.3.6.1.4.1.3375.2.2.4.1.2.1.1.2|2|16 +1.3.6.1.4.1.3375.2.2.4.1.2.1.1.3|2|1 +1.3.6.1.4.1.3375.2.2.4.1.2.1.2.1|4x|6275742062757420616374656420717561696e746c79207468656972206163746564206b65707420717561696e746c79 +1.3.6.1.4.1.3375.2.2.4.1.2.1.2.2|4x|62757420627574 +1.3.6.1.4.1.3375.2.2.4.1.2.1.2.3|4|forward +1.3.6.1.4.1.3375.2.2.4.1.2.1.3.1|2|0 +1.3.6.1.4.1.3375.2.2.4.1.2.1.3.2|2|30 +1.3.6.1.4.1.3375.2.2.4.1.2.1.3.3|2|20 +1.3.6.1.4.1.3375.2.2.4.1.2.1.4.1|2|30 +1.3.6.1.4.1.3375.2.2.4.1.2.1.4.2|2|28 +1.3.6.1.4.1.3375.2.2.4.1.2.1.4.3|2|19 +1.3.6.1.4.1.3375.2.2.4.1.2.1.5.1|2|15 +1.3.6.1.4.1.3375.2.2.4.1.2.1.5.2|2|0 +1.3.6.1.4.1.3375.2.2.4.1.2.1.5.3|2|31 +1.3.6.1.4.1.3375.2.2.4.1.2.1.6.1|2|0 +1.3.6.1.4.1.3375.2.2.4.1.2.1.6.2|2|23 +1.3.6.1.4.1.3375.2.2.4.1.2.1.6.3|2|22 +1.3.6.1.4.1.3375.2.2.4.1.2.1.7.1|2|24 +1.3.6.1.4.1.3375.2.2.4.1.2.1.7.2|2|23 +1.3.6.1.4.1.3375.2.2.4.1.2.1.7.3|2|3 +1.3.6.1.4.1.3375.2.2.4.1.2.1.8.1|4x|7a6f6d6269657320717561696e746c79206b65707420717561696e746c7920717561696e746c79206f78656e +1.3.6.1.4.1.3375.2.2.4.1.2.1.8.2|4|forward +1.3.6.1.4.1.3375.2.2.4.1.2.1.8.3|4x|6163746564207a6f6d62696573206f78656e2064726976696e672064726976696e672062757420666f7277617264204a61646564 +1.3.6.1.4.1.3375.2.2.4.1.2.1.9.1|2|3 +1.3.6.1.4.1.3375.2.2.4.1.2.1.9.2|2|2 +1.3.6.1.4.1.3375.2.2.4.1.2.1.9.3|2|2 +1.3.6.1.4.1.3375.2.2.4.1.2.1.10.1|2|4 +1.3.6.1.4.1.3375.2.2.4.1.2.1.10.2|2|2 +1.3.6.1.4.1.3375.2.2.4.1.2.1.10.3|2|3 +1.3.6.1.4.1.3375.2.2.4.1.2.1.11.1|2|7 +1.3.6.1.4.1.3375.2.2.4.1.2.1.11.2|2|6 +1.3.6.1.4.1.3375.2.2.4.1.2.1.11.3|2|27 +1.3.6.1.4.1.3375.2.2.4.1.2.1.12.1|4x|7468656972207a6f6d62696573207468656972207a6f6d62696573207a6f6d6269657320627574207468656972 +1.3.6.1.4.1.3375.2.2.4.1.2.1.12.2|4x|62757420717561696e746c79 +1.3.6.1.4.1.3375.2.2.4.1.2.1.12.3|4x|4a61646564207a6f6d6269657320627574206b657074 +1.3.6.1.4.1.3375.2.2.4.1.2.1.13.1|2|4 +1.3.6.1.4.1.3375.2.2.4.1.2.1.13.2|2|0 +1.3.6.1.4.1.3375.2.2.4.1.2.1.13.3|2|3 +1.3.6.1.4.1.3375.2.2.4.1.2.1.14.1|2|0 +1.3.6.1.4.1.3375.2.2.4.1.2.1.14.2|2|2 +1.3.6.1.4.1.3375.2.2.4.1.2.1.14.3|2|2 +1.3.6.1.4.1.3375.2.2.4.1.2.1.15.1|2|15 +1.3.6.1.4.1.3375.2.2.4.1.2.1.15.2|2|11 +1.3.6.1.4.1.3375.2.2.4.1.2.1.15.3|2|21 +1.3.6.1.4.1.3375.2.2.4.1.2.1.16.1|4|their +1.3.6.1.4.1.3375.2.2.4.1.2.1.16.2|4x|616374656420717561696e746c79 +1.3.6.1.4.1.3375.2.2.4.1.2.1.16.3|4x|627574204a6164656420666f7277617264 +1.3.6.1.4.1.3375.2.2.4.1.2.1.17.1|4x|6e6f646531 +1.3.6.1.4.1.3375.2.2.4.1.2.1.17.2|4x|6e6f646532 +1.3.6.1.4.1.3375.2.2.4.1.2.1.17.3|4x|6e6f646533 +1.3.6.1.4.1.3375.2.2.4.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.4.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.4.2.3.1.1.1|2|0 +1.3.6.1.4.1.3375.2.2.4.2.3.1.1.2|2|2 +1.3.6.1.4.1.3375.2.2.4.2.3.1.1.3|2|1 +1.3.6.1.4.1.3375.2.2.4.2.3.1.2.1|4x|627574204a6164656420717561696e746c79204a61646564206b657074206f78656e20717561696e746c792064726976696e67 +1.3.6.1.4.1.3375.2.2.4.2.3.1.2.2|4x|74686569722064726976696e67 +1.3.6.1.4.1.3375.2.2.4.2.3.1.2.3|4x|7a6f6d626965732074686569722062757420616374656420746865697220746865697220666f7277617264 +1.3.6.1.4.1.3375.2.2.4.2.3.1.3.1|70|4944872918648779327 +1.3.6.1.4.1.3375.2.2.4.2.3.1.3.2|70|8029375396251303915 +1.3.6.1.4.1.3375.2.2.4.2.3.1.3.3|70|13077172560709481671 +1.3.6.1.4.1.3375.2.2.4.2.3.1.4.1|70|4068229906985517548 +1.3.6.1.4.1.3375.2.2.4.2.3.1.4.2|70|8158617595607170573 +1.3.6.1.4.1.3375.2.2.4.2.3.1.4.3|70|8570216897735326644 +1.3.6.1.4.1.3375.2.2.4.2.3.1.5.1|70|8266159627953159227 +1.3.6.1.4.1.3375.2.2.4.2.3.1.5.2|70|6409527896954307095 +1.3.6.1.4.1.3375.2.2.4.2.3.1.5.3|70|11729448798088947091 +1.3.6.1.4.1.3375.2.2.4.2.3.1.6.1|70|6073838854401463636 +1.3.6.1.4.1.3375.2.2.4.2.3.1.6.2|70|8390897027300387699 +1.3.6.1.4.1.3375.2.2.4.2.3.1.6.3|70|10823245692376386274 +1.3.6.1.4.1.3375.2.2.4.2.3.1.7.1|70|1642226835677429374 +1.3.6.1.4.1.3375.2.2.4.2.3.1.7.2|70|6074301342335640587 +1.3.6.1.4.1.3375.2.2.4.2.3.1.7.3|70|17373143971219577691 +1.3.6.1.4.1.3375.2.2.4.2.3.1.8.1|70|4119264629154729857 +1.3.6.1.4.1.3375.2.2.4.2.3.1.8.2|70|7878249428133895665 +1.3.6.1.4.1.3375.2.2.4.2.3.1.8.3|70|7928254558377589981 +1.3.6.1.4.1.3375.2.2.4.2.3.1.9.1|66|1651920139 +1.3.6.1.4.1.3375.2.2.4.2.3.1.9.2|66|3038783190 +1.3.6.1.4.1.3375.2.2.4.2.3.1.9.3|66|591588210 +1.3.6.1.4.1.3375.2.2.4.2.3.1.10.1|70|14662592026588814360 +1.3.6.1.4.1.3375.2.2.4.2.3.1.10.2|70|3961661652095473285 +1.3.6.1.4.1.3375.2.2.4.2.3.1.10.3|70|12449952025922061878 +1.3.6.1.4.1.3375.2.2.4.2.3.1.11.1|70|15394562351003399313 +1.3.6.1.4.1.3375.2.2.4.2.3.1.11.2|70|1786591066820350842 +1.3.6.1.4.1.3375.2.2.4.2.3.1.11.3|70|12474830199603794536 +1.3.6.1.4.1.3375.2.2.4.2.3.1.12.1|70|14854644677157090730 +1.3.6.1.4.1.3375.2.2.4.2.3.1.12.2|70|4544871405060434280 +1.3.6.1.4.1.3375.2.2.4.2.3.1.12.3|70|5261739439469317107 +1.3.6.1.4.1.3375.2.2.4.2.3.1.13.1|70|361936506436156012 +1.3.6.1.4.1.3375.2.2.4.2.3.1.13.2|70|11356492468627532113 +1.3.6.1.4.1.3375.2.2.4.2.3.1.13.3|70|12051964844036690225 +1.3.6.1.4.1.3375.2.2.4.2.3.1.14.1|70|10820521555590319445 +1.3.6.1.4.1.3375.2.2.4.2.3.1.14.2|70|7272864848476956229 +1.3.6.1.4.1.3375.2.2.4.2.3.1.14.3|70|13359503625543215912 +1.3.6.1.4.1.3375.2.2.4.2.3.1.15.1|70|10907836064895621196 +1.3.6.1.4.1.3375.2.2.4.2.3.1.15.2|70|5009646550570838518 +1.3.6.1.4.1.3375.2.2.4.2.3.1.15.3|70|4529016329646344243 +1.3.6.1.4.1.3375.2.2.4.2.3.1.16.1|66|3003009877 +1.3.6.1.4.1.3375.2.2.4.2.3.1.16.2|66|782515544 +1.3.6.1.4.1.3375.2.2.4.2.3.1.16.3|66|3821721731 +1.3.6.1.4.1.3375.2.2.4.2.3.1.17.1|70|9543188708531228614 +1.3.6.1.4.1.3375.2.2.4.2.3.1.17.2|70|1982462802964786213 +1.3.6.1.4.1.3375.2.2.4.2.3.1.17.3|70|3503949068840085478 +1.3.6.1.4.1.3375.2.2.4.2.3.1.18.1|70|1538964337621885130 +1.3.6.1.4.1.3375.2.2.4.2.3.1.18.2|70|1655662892984174663 +1.3.6.1.4.1.3375.2.2.4.2.3.1.18.3|70|4318101150266803459 +1.3.6.1.4.1.3375.2.2.4.2.3.1.19.1|66|3000376368 +1.3.6.1.4.1.3375.2.2.4.2.3.1.19.2|66|3947013440 +1.3.6.1.4.1.3375.2.2.4.2.3.1.19.3|66|72658592 +1.3.6.1.4.1.3375.2.2.4.2.3.1.20.1|4x|6e6f646531 +1.3.6.1.4.1.3375.2.2.4.2.3.1.20.2|4x|6e6f646532 +1.3.6.1.4.1.3375.2.2.4.2.3.1.20.3|4x|6e6f646533 +1.3.6.1.4.1.3375.2.2.4.2.3.1.21.1|66|3550776537 +1.3.6.1.4.1.3375.2.2.4.2.3.1.21.2|66|1830868585 +1.3.6.1.4.1.3375.2.2.4.2.3.1.21.3|66|1703147893 +1.3.6.1.4.1.3375.2.2.4.2.3.1.22.1|66|3594307962 +1.3.6.1.4.1.3375.2.2.4.2.3.1.22.2|66|3313621335 +1.3.6.1.4.1.3375.2.2.4.2.3.1.22.3|66|3370950269 +1.3.6.1.4.1.3375.2.2.4.2.3.1.23.1|66|3834831533 +1.3.6.1.4.1.3375.2.2.4.2.3.1.23.2|66|3055589865 +1.3.6.1.4.1.3375.2.2.4.2.3.1.23.3|66|126963258 +1.3.6.1.4.1.3375.2.2.4.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.5.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.5.1.1|2|2 +1.3.6.1.4.1.3375.2.2.5.1.2.1.1.1|4x|706f6f6c31 +1.3.6.1.4.1.3375.2.2.5.1.2.1.1.2|4x|706f6f6c32 +1.3.6.1.4.1.3375.2.2.5.1.2.1.2.1|2|15 +1.3.6.1.4.1.3375.2.2.5.1.2.1.2.2|2|3 +1.3.6.1.4.1.3375.2.2.5.1.2.1.3.1|2|0 +1.3.6.1.4.1.3375.2.2.5.1.2.1.3.2|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.4.1|2|2 +1.3.6.1.4.1.3375.2.2.5.1.2.1.4.2|2|27 +1.3.6.1.4.1.3375.2.2.5.1.2.1.5.1|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.5.2|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.6.1|2|6 +1.3.6.1.4.1.3375.2.2.5.1.2.1.6.2|2|12 +1.3.6.1.4.1.3375.2.2.5.1.2.1.7.1|2|8 +1.3.6.1.4.1.3375.2.2.5.1.2.1.7.2|2|12 +1.3.6.1.4.1.3375.2.2.5.1.2.1.8.1|2|12 +1.3.6.1.4.1.3375.2.2.5.1.2.1.8.2|2|3 +1.3.6.1.4.1.3375.2.2.5.1.2.1.9.1|2|0 +1.3.6.1.4.1.3375.2.2.5.1.2.1.9.2|2|0 +1.3.6.1.4.1.3375.2.2.5.1.2.1.10.1|2|0 +1.3.6.1.4.1.3375.2.2.5.1.2.1.10.2|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.11.1|2|8 +1.3.6.1.4.1.3375.2.2.5.1.2.1.11.2|2|27 +1.3.6.1.4.1.3375.2.2.5.1.2.1.12.1|2|2 +1.3.6.1.4.1.3375.2.2.5.1.2.1.12.2|2|5 +1.3.6.1.4.1.3375.2.2.5.1.2.1.13.1|2|16 +1.3.6.1.4.1.3375.2.2.5.1.2.1.13.2|2|11 +1.3.6.1.4.1.3375.2.2.5.1.2.1.14.1|2|4 +1.3.6.1.4.1.3375.2.2.5.1.2.1.14.2|2|31 +1.3.6.1.4.1.3375.2.2.5.1.2.1.15.1|2|24 +1.3.6.1.4.1.3375.2.2.5.1.2.1.15.2|2|6 +1.3.6.1.4.1.3375.2.2.5.1.2.1.16.1|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.16.2|2|30 +1.3.6.1.4.1.3375.2.2.5.1.2.1.17.1|4x|6275742061637465642062757420746865697220717561696e746c79 +1.3.6.1.4.1.3375.2.2.5.1.2.1.17.2|4|acted +1.3.6.1.4.1.3375.2.2.5.1.2.1.18.1|2|4 +1.3.6.1.4.1.3375.2.2.5.1.2.1.18.2|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.19.1|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.19.2|2|2 +1.3.6.1.4.1.3375.2.2.5.1.2.1.20.1|2|24 +1.3.6.1.4.1.3375.2.2.5.1.2.1.20.2|2|23 +1.3.6.1.4.1.3375.2.2.5.1.2.1.21.1|4x|6b657074206f78656e206b657074206b657074 +1.3.6.1.4.1.3375.2.2.5.1.2.1.21.2|4x|62757420717561696e746c792064726976696e67207468656972207a6f6d62696573206b657074207a6f6d62696573204a61646564 +1.3.6.1.4.1.3375.2.2.5.1.2.1.22.1|2|29 +1.3.6.1.4.1.3375.2.2.5.1.2.1.22.2|2|31 +1.3.6.1.4.1.3375.2.2.5.1.2.1.23.1|2|18 +1.3.6.1.4.1.3375.2.2.5.1.2.1.23.2|2|13 +1.3.6.1.4.1.3375.2.2.5.1.2.1.24.1|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.24.2|2|1 +1.3.6.1.4.1.3375.2.2.5.1.2.1.25.1|2|0 +1.3.6.1.4.1.3375.2.2.5.1.2.1.25.2|2|25 +1.3.6.1.4.1.3375.2.2.5.1.2.1.26.1|2|15 +1.3.6.1.4.1.3375.2.2.5.1.2.1.26.2|2|14 +1.3.6.1.4.1.3375.2.2.5.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.5.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.5.2.3.1.1.1|4x|706f6f6c31 +1.3.6.1.4.1.3375.2.2.5.2.3.1.1.2|4x|706f6f6c32 +1.3.6.1.4.1.3375.2.2.5.2.3.1.2.1|70|4256553769388318370 +1.3.6.1.4.1.3375.2.2.5.2.3.1.2.2|70|13792863044069252701 +1.3.6.1.4.1.3375.2.2.5.2.3.1.3.1|70|1247857108542250490 +1.3.6.1.4.1.3375.2.2.5.2.3.1.3.2|70|2439768386565676696 +1.3.6.1.4.1.3375.2.2.5.2.3.1.4.1|70|13685798431063739945 +1.3.6.1.4.1.3375.2.2.5.2.3.1.4.2|70|8010152851446650287 +1.3.6.1.4.1.3375.2.2.5.2.3.1.5.1|70|12792963120883269730 +1.3.6.1.4.1.3375.2.2.5.2.3.1.5.2|70|4510088173493731928 +1.3.6.1.4.1.3375.2.2.5.2.3.1.6.1|70|14430847875818333591 +1.3.6.1.4.1.3375.2.2.5.2.3.1.6.2|70|1288344245168217259 +1.3.6.1.4.1.3375.2.2.5.2.3.1.7.1|70|14093027756920293176 +1.3.6.1.4.1.3375.2.2.5.2.3.1.7.2|70|6792874586505659276 +1.3.6.1.4.1.3375.2.2.5.2.3.1.8.1|66|2268921071 +1.3.6.1.4.1.3375.2.2.5.2.3.1.8.2|66|2797808131 +1.3.6.1.4.1.3375.2.2.5.2.3.1.9.1|70|14784730794774140792 +1.3.6.1.4.1.3375.2.2.5.2.3.1.9.2|70|7416951176019391429 +1.3.6.1.4.1.3375.2.2.5.2.3.1.10.1|70|17355194836665939296 +1.3.6.1.4.1.3375.2.2.5.2.3.1.10.2|70|12182868513869101472 +1.3.6.1.4.1.3375.2.2.5.2.3.1.11.1|70|6195382402846351570 +1.3.6.1.4.1.3375.2.2.5.2.3.1.11.2|70|11175052932718179982 +1.3.6.1.4.1.3375.2.2.5.2.3.1.12.1|70|13201653056011990257 +1.3.6.1.4.1.3375.2.2.5.2.3.1.12.2|70|3408578314658150822 +1.3.6.1.4.1.3375.2.2.5.2.3.1.13.1|70|9260687003378291011 +1.3.6.1.4.1.3375.2.2.5.2.3.1.13.2|70|15861637656764668687 +1.3.6.1.4.1.3375.2.2.5.2.3.1.14.1|70|15599209190275180986 +1.3.6.1.4.1.3375.2.2.5.2.3.1.14.2|70|11462228613215705267 +1.3.6.1.4.1.3375.2.2.5.2.3.1.15.1|66|1393706886 +1.3.6.1.4.1.3375.2.2.5.2.3.1.15.2|66|1661974926 +1.3.6.1.4.1.3375.2.2.5.2.3.1.16.1|70|12326970103109086788 +1.3.6.1.4.1.3375.2.2.5.2.3.1.16.2|70|3374152115876485407 +1.3.6.1.4.1.3375.2.2.5.2.3.1.17.1|66|4287949346 +1.3.6.1.4.1.3375.2.2.5.2.3.1.17.2|66|3795953038 +1.3.6.1.4.1.3375.2.2.5.2.3.1.18.1|2|26 +1.3.6.1.4.1.3375.2.2.5.2.3.1.18.2|2|21 +1.3.6.1.4.1.3375.2.2.5.2.3.1.19.1|2|30 +1.3.6.1.4.1.3375.2.2.5.2.3.1.19.2|2|5 +1.3.6.1.4.1.3375.2.2.5.2.3.1.20.1|2|23 +1.3.6.1.4.1.3375.2.2.5.2.3.1.20.2|2|12 +1.3.6.1.4.1.3375.2.2.5.2.3.1.21.1|2|25 +1.3.6.1.4.1.3375.2.2.5.2.3.1.21.2|2|12 +1.3.6.1.4.1.3375.2.2.5.2.3.1.22.1|2|7 +1.3.6.1.4.1.3375.2.2.5.2.3.1.22.2|2|1 +1.3.6.1.4.1.3375.2.2.5.2.3.1.23.1|70|1185517316256128603 +1.3.6.1.4.1.3375.2.2.5.2.3.1.23.2|70|1309485462824427150 +1.3.6.1.4.1.3375.2.2.5.2.3.1.24.1|2|25 +1.3.6.1.4.1.3375.2.2.5.2.3.1.24.2|2|16 +1.3.6.1.4.1.3375.2.2.5.2.3.1.25.1|2|22 +1.3.6.1.4.1.3375.2.2.5.2.3.1.25.2|2|1 +1.3.6.1.4.1.3375.2.2.5.2.3.1.26.1|2|1 +1.3.6.1.4.1.3375.2.2.5.2.3.1.26.2|2|5 +1.3.6.1.4.1.3375.2.2.5.2.3.1.27.1|2|1 +1.3.6.1.4.1.3375.2.2.5.2.3.1.27.2|2|18 +1.3.6.1.4.1.3375.2.2.5.2.3.1.28.1|2|27 +1.3.6.1.4.1.3375.2.2.5.2.3.1.28.2|2|10 +1.3.6.1.4.1.3375.2.2.5.2.3.1.29.1|70|9671521655276789662 +1.3.6.1.4.1.3375.2.2.5.2.3.1.29.2|70|5297673884035549156 +1.3.6.1.4.1.3375.2.2.5.2.3.1.30.1|70|830110198927418245 +1.3.6.1.4.1.3375.2.2.5.2.3.1.30.2|70|8485525847267957855 +1.3.6.1.4.1.3375.2.2.5.2.3.1.31.1|66|3031153578 +1.3.6.1.4.1.3375.2.2.5.2.3.1.31.2|66|716027177 +1.3.6.1.4.1.3375.2.2.5.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.5.3.1|2|3 +1.3.6.1.4.1.3375.2.2.5.3.2.1.1.1|4x|706f6f6c31 +1.3.6.1.4.1.3375.2.2.5.3.2.1.1.2|4x|706f6f6c31 +1.3.6.1.4.1.3375.2.2.5.3.2.1.1.3|4x|706f6f6c32 +1.3.6.1.4.1.3375.2.2.5.3.2.1.2.1|2|2 +1.3.6.1.4.1.3375.2.2.5.3.2.1.2.2|2|1 +1.3.6.1.4.1.3375.2.2.5.3.2.1.2.3|2|16 +1.3.6.1.4.1.3375.2.2.5.3.2.1.3.1|4x|6275742064726976696e6720627574 +1.3.6.1.4.1.3375.2.2.5.3.2.1.3.2|4x|6b6570742064726976696e67206163746564206f78656e204a61646564207a6f6d626965732064726976696e67207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.3375.2.2.5.3.2.1.3.3|4x|6275742064726976696e67 +1.3.6.1.4.1.3375.2.2.5.3.2.1.4.1|66|11453 +1.3.6.1.4.1.3375.2.2.5.3.2.1.4.2|66|61194 +1.3.6.1.4.1.3375.2.2.5.3.2.1.4.3|66|27571 +1.3.6.1.4.1.3375.2.2.5.3.2.1.5.1|2|16 +1.3.6.1.4.1.3375.2.2.5.3.2.1.5.2|2|12 +1.3.6.1.4.1.3375.2.2.5.3.2.1.5.3|2|3 +1.3.6.1.4.1.3375.2.2.5.3.2.1.6.1|2|4 +1.3.6.1.4.1.3375.2.2.5.3.2.1.6.2|2|11 +1.3.6.1.4.1.3375.2.2.5.3.2.1.6.3|2|16 +1.3.6.1.4.1.3375.2.2.5.3.2.1.7.1|2|10 +1.3.6.1.4.1.3375.2.2.5.3.2.1.7.2|2|23 +1.3.6.1.4.1.3375.2.2.5.3.2.1.7.3|2|6 +1.3.6.1.4.1.3375.2.2.5.3.2.1.8.1|2|21 +1.3.6.1.4.1.3375.2.2.5.3.2.1.8.2|2|9 +1.3.6.1.4.1.3375.2.2.5.3.2.1.8.3|2|12 +1.3.6.1.4.1.3375.2.2.5.3.2.1.9.1|2|4 +1.3.6.1.4.1.3375.2.2.5.3.2.1.9.2|2|0 +1.3.6.1.4.1.3375.2.2.5.3.2.1.9.3|2|7 +1.3.6.1.4.1.3375.2.2.5.3.2.1.10.1|2|19 +1.3.6.1.4.1.3375.2.2.5.3.2.1.10.2|2|24 +1.3.6.1.4.1.3375.2.2.5.3.2.1.10.3|2|1 +1.3.6.1.4.1.3375.2.2.5.3.2.1.11.1|2|20 +1.3.6.1.4.1.3375.2.2.5.3.2.1.11.2|2|4 +1.3.6.1.4.1.3375.2.2.5.3.2.1.11.3|2|18 +1.3.6.1.4.1.3375.2.2.5.3.2.1.12.1|2|4 +1.3.6.1.4.1.3375.2.2.5.3.2.1.12.2|2|1 +1.3.6.1.4.1.3375.2.2.5.3.2.1.12.3|2|2 +1.3.6.1.4.1.3375.2.2.5.3.2.1.13.1|2|2 +1.3.6.1.4.1.3375.2.2.5.3.2.1.13.2|2|5 +1.3.6.1.4.1.3375.2.2.5.3.2.1.13.3|2|4 +1.3.6.1.4.1.3375.2.2.5.3.2.1.14.1|4x|6f78656e2064726976696e67206163746564204a6164656420627574206163746564 +1.3.6.1.4.1.3375.2.2.5.3.2.1.14.2|4x|717561696e746c7920627574 +1.3.6.1.4.1.3375.2.2.5.3.2.1.14.3|4x|4a61646564206f78656e206b65707420627574 +1.3.6.1.4.1.3375.2.2.5.3.2.1.15.1|2|2 +1.3.6.1.4.1.3375.2.2.5.3.2.1.15.2|2|4 +1.3.6.1.4.1.3375.2.2.5.3.2.1.15.3|2|0 +1.3.6.1.4.1.3375.2.2.5.3.2.1.16.1|2|0 +1.3.6.1.4.1.3375.2.2.5.3.2.1.16.2|2|0 +1.3.6.1.4.1.3375.2.2.5.3.2.1.16.3|2|2 +1.3.6.1.4.1.3375.2.2.5.3.2.1.17.1|2|16 +1.3.6.1.4.1.3375.2.2.5.3.2.1.17.2|2|16 +1.3.6.1.4.1.3375.2.2.5.3.2.1.17.3|2|13 +1.3.6.1.4.1.3375.2.2.5.3.2.1.18.1|4x|616374656420627574 +1.3.6.1.4.1.3375.2.2.5.3.2.1.18.2|4|oxen +1.3.6.1.4.1.3375.2.2.5.3.2.1.18.3|4x|6163746564206b657074206b657074206f78656e20627574206b657074206b657074206f78656e +1.3.6.1.4.1.3375.2.2.5.3.2.1.19.1|4x|6e6f646531 +1.3.6.1.4.1.3375.2.2.5.3.2.1.19.2|4x|6e6f646532 +1.3.6.1.4.1.3375.2.2.5.3.2.1.19.3|4x|6e6f646533 +1.3.6.1.4.1.3375.2.2.5.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.5.4.2.0|2|0 +1.3.6.1.4.1.3375.2.2.5.4.3.1.1.1|4x|706f6f6c31 +1.3.6.1.4.1.3375.2.2.5.4.3.1.1.2|4x|706f6f6c31 +1.3.6.1.4.1.3375.2.2.5.4.3.1.1.3|4x|706f6f6c32 +1.3.6.1.4.1.3375.2.2.5.4.3.1.2.1|2|16 +1.3.6.1.4.1.3375.2.2.5.4.3.1.2.2|2|3 +1.3.6.1.4.1.3375.2.2.5.4.3.1.2.3|2|2 +1.3.6.1.4.1.3375.2.2.5.4.3.1.3.1|4x|6163746564206b657074206163746564206f78656e2062757420717561696e746c79 +1.3.6.1.4.1.3375.2.2.5.4.3.1.3.2|4x|4a6164656420666f727761726420666f727761726420666f727761726420627574204a6164656420666f7277617264 +1.3.6.1.4.1.3375.2.2.5.4.3.1.3.3|4x|64726976696e672064726976696e6720666f7277617264206163746564206f78656e207468656972204a61646564 +1.3.6.1.4.1.3375.2.2.5.4.3.1.4.1|66|20398 +1.3.6.1.4.1.3375.2.2.5.4.3.1.4.2|66|4985 +1.3.6.1.4.1.3375.2.2.5.4.3.1.4.3|66|56300 +1.3.6.1.4.1.3375.2.2.5.4.3.1.5.1|70|2873284505721733998 +1.3.6.1.4.1.3375.2.2.5.4.3.1.5.2|70|14270783585237366881 +1.3.6.1.4.1.3375.2.2.5.4.3.1.5.3|70|15682680367338516603 +1.3.6.1.4.1.3375.2.2.5.4.3.1.6.1|70|2063208377357646609 +1.3.6.1.4.1.3375.2.2.5.4.3.1.6.2|70|9942037616777823716 +1.3.6.1.4.1.3375.2.2.5.4.3.1.6.3|70|769481878289981685 +1.3.6.1.4.1.3375.2.2.5.4.3.1.7.1|70|11411203339993724679 +1.3.6.1.4.1.3375.2.2.5.4.3.1.7.2|70|5001137335017343208 +1.3.6.1.4.1.3375.2.2.5.4.3.1.7.3|70|3447939929195254599 +1.3.6.1.4.1.3375.2.2.5.4.3.1.8.1|70|6923370659660874655 +1.3.6.1.4.1.3375.2.2.5.4.3.1.8.2|70|6109106490701278125 +1.3.6.1.4.1.3375.2.2.5.4.3.1.8.3|70|11245438125243532220 +1.3.6.1.4.1.3375.2.2.5.4.3.1.9.1|70|555839854274537154 +1.3.6.1.4.1.3375.2.2.5.4.3.1.9.2|70|12084595149680519637 +1.3.6.1.4.1.3375.2.2.5.4.3.1.9.3|70|6827966006511803702 +1.3.6.1.4.1.3375.2.2.5.4.3.1.10.1|70|13744051120023251665 +1.3.6.1.4.1.3375.2.2.5.4.3.1.10.2|70|3445855454713090727 +1.3.6.1.4.1.3375.2.2.5.4.3.1.10.3|70|2832567909193568324 +1.3.6.1.4.1.3375.2.2.5.4.3.1.11.1|66|263232881 +1.3.6.1.4.1.3375.2.2.5.4.3.1.11.2|66|3622767247 +1.3.6.1.4.1.3375.2.2.5.4.3.1.11.3|66|2159532223 +1.3.6.1.4.1.3375.2.2.5.4.3.1.12.1|70|13225166919628318581 +1.3.6.1.4.1.3375.2.2.5.4.3.1.12.2|70|4343349396059039628 +1.3.6.1.4.1.3375.2.2.5.4.3.1.12.3|70|10913327605844057353 +1.3.6.1.4.1.3375.2.2.5.4.3.1.13.1|70|8083056369720634069 +1.3.6.1.4.1.3375.2.2.5.4.3.1.13.2|70|174353434991594275 +1.3.6.1.4.1.3375.2.2.5.4.3.1.13.3|70|7279687954640490954 +1.3.6.1.4.1.3375.2.2.5.4.3.1.14.1|70|17307719017620384345 +1.3.6.1.4.1.3375.2.2.5.4.3.1.14.2|70|1088230504663588150 +1.3.6.1.4.1.3375.2.2.5.4.3.1.14.3|70|18351016744712524042 +1.3.6.1.4.1.3375.2.2.5.4.3.1.15.1|70|15469407905940915899 +1.3.6.1.4.1.3375.2.2.5.4.3.1.15.2|70|14466119304285597253 +1.3.6.1.4.1.3375.2.2.5.4.3.1.15.3|70|12778844528206900286 +1.3.6.1.4.1.3375.2.2.5.4.3.1.16.1|70|10829126290726572990 +1.3.6.1.4.1.3375.2.2.5.4.3.1.16.2|70|14015592186250105992 +1.3.6.1.4.1.3375.2.2.5.4.3.1.16.3|70|7362635876654415560 +1.3.6.1.4.1.3375.2.2.5.4.3.1.17.1|70|15253976660678040104 +1.3.6.1.4.1.3375.2.2.5.4.3.1.17.2|70|5447560082343902862 +1.3.6.1.4.1.3375.2.2.5.4.3.1.17.3|70|10900456361966376214 +1.3.6.1.4.1.3375.2.2.5.4.3.1.18.1|66|1084714099 +1.3.6.1.4.1.3375.2.2.5.4.3.1.18.2|66|1255758041 +1.3.6.1.4.1.3375.2.2.5.4.3.1.18.3|66|3842923528 +1.3.6.1.4.1.3375.2.2.5.4.3.1.19.1|70|13037023619346591279 +1.3.6.1.4.1.3375.2.2.5.4.3.1.19.2|70|7941461199036912343 +1.3.6.1.4.1.3375.2.2.5.4.3.1.19.3|70|2938290648063178294 +1.3.6.1.4.1.3375.2.2.5.4.3.1.20.1|70|2075228672003575187 +1.3.6.1.4.1.3375.2.2.5.4.3.1.20.2|70|9615394599206193500 +1.3.6.1.4.1.3375.2.2.5.4.3.1.20.3|70|12646485798805777773 +1.3.6.1.4.1.3375.2.2.5.4.3.1.21.1|66|2120986942 +1.3.6.1.4.1.3375.2.2.5.4.3.1.21.2|66|2670664273 +1.3.6.1.4.1.3375.2.2.5.4.3.1.21.3|66|2340421060 +1.3.6.1.4.1.3375.2.2.5.4.3.1.22.1|2|14 +1.3.6.1.4.1.3375.2.2.5.4.3.1.22.2|2|5 +1.3.6.1.4.1.3375.2.2.5.4.3.1.22.3|2|11 +1.3.6.1.4.1.3375.2.2.5.4.3.1.23.1|2|26 +1.3.6.1.4.1.3375.2.2.5.4.3.1.23.2|2|15 +1.3.6.1.4.1.3375.2.2.5.4.3.1.23.3|2|31 +1.3.6.1.4.1.3375.2.2.5.4.3.1.24.1|2|4 +1.3.6.1.4.1.3375.2.2.5.4.3.1.24.2|2|21 +1.3.6.1.4.1.3375.2.2.5.4.3.1.24.3|2|19 +1.3.6.1.4.1.3375.2.2.5.4.3.1.25.1|2|5 +1.3.6.1.4.1.3375.2.2.5.4.3.1.25.2|2|29 +1.3.6.1.4.1.3375.2.2.5.4.3.1.25.3|2|7 +1.3.6.1.4.1.3375.2.2.5.4.3.1.26.1|2|16 +1.3.6.1.4.1.3375.2.2.5.4.3.1.26.2|2|0 +1.3.6.1.4.1.3375.2.2.5.4.3.1.26.3|2|14 +1.3.6.1.4.1.3375.2.2.5.4.3.1.27.1|70|54911224004933640 +1.3.6.1.4.1.3375.2.2.5.4.3.1.27.2|70|2959402702645471109 +1.3.6.1.4.1.3375.2.2.5.4.3.1.27.3|70|16889251434225586623 +1.3.6.1.4.1.3375.2.2.5.4.3.1.28.1|4x|6e6f646531 +1.3.6.1.4.1.3375.2.2.5.4.3.1.28.2|4x|6e6f646532 +1.3.6.1.4.1.3375.2.2.5.4.3.1.28.3|4x|6e6f646533 +1.3.6.1.4.1.3375.2.2.5.4.3.1.29.1|66|3469495677 +1.3.6.1.4.1.3375.2.2.5.4.3.1.29.2|66|1633506703 +1.3.6.1.4.1.3375.2.2.5.4.3.1.29.3|66|817635962 +1.3.6.1.4.1.3375.2.2.5.4.3.1.30.1|66|2354828424 +1.3.6.1.4.1.3375.2.2.5.4.3.1.30.2|66|2915755010 +1.3.6.1.4.1.3375.2.2.5.4.3.1.30.3|66|2415428730 +1.3.6.1.4.1.3375.2.2.5.4.3.1.31.1|66|1552461926 +1.3.6.1.4.1.3375.2.2.5.4.3.1.31.2|66|253721893 +1.3.6.1.4.1.3375.2.2.5.4.3.1.31.3|66|2223786572 +1.3.6.1.4.1.3375.2.2.5.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.5.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.1.0|2|7 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.12.47.67.111.109.109.111.110.47.108.100.97.112|4x|2f436f6d6d6f6e2f6c646170 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|4x|2f436f6d6d6f6e2f726164697573 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|4x|2f436f6d6d6f6e2f746163616373 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|4x|2f436f6d6d6f6e2f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|4x|2f436f6d6d6f6e2f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|4x|2f436f6d6d6f6e2f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.1.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|4x|2f436f6d6d6f6e2f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.12.47.67.111.109.109.111.110.47.108.100.97.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.2.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.12.47.67.111.109.109.111.110.47.108.100.97.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.3.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.12.47.67.111.109.109.111.110.47.108.100.97.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.4.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.12.47.67.111.109.109.111.110.47.108.100.97.112|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|2|4 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|2|3 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|2|6 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|2|7 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.5.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|2|2 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.12.47.67.111.109.109.111.110.47.108.100.97.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.6.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|2|1 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.12.47.67.111.109.109.111.110.47.108.100.97.112|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.7.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|2|0 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.12.47.67.111.109.109.111.110.47.108.100.97.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f6c646170 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|4x|2f436f6d6d6f6e2f5f7379735f617574685f726164697573 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|4x|2f436f6d6d6f6e2f5f7379735f617574685f746163616373 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|4| +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.8.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.12.47.67.111.109.109.111.110.47.108.100.97.112|66|300 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|66|300 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|66|300 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|66|300 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|66|300 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|66|300 +1.3.6.1.4.1.3375.2.2.6.1.1.2.1.9.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|66|300 +1.3.6.1.4.1.3375.2.2.6.1.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.1.2.2.0|2|7 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.12.47.67.111.109.109.111.110.47.108.100.97.112|4x|2f436f6d6d6f6e2f6c646170 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|4x|2f436f6d6d6f6e2f726164697573 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|4x|2f436f6d6d6f6e2f746163616373 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|4x|2f436f6d6d6f6e2f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|4x|2f436f6d6d6f6e2f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|4x|2f436f6d6d6f6e2f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.1.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|4x|2f436f6d6d6f6e2f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.12.47.67.111.109.109.111.110.47.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.2.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.12.47.67.111.109.109.111.110.47.108.100.97.112|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.3.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|66|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.12.47.67.111.109.109.111.110.47.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.4.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.12.47.67.111.109.109.111.110.47.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.5.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.12.47.67.111.109.109.111.110.47.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.6.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.12.47.67.111.109.109.111.110.47.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.7.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.12.47.67.111.109.109.111.110.47.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.14.47.67.111.109.109.111.110.47.114.97.100.105.117.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.14.47.67.111.109.109.111.110.47.116.97.99.97.99.115|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.16.47.67.111.109.109.111.110.47.115.115.108.95.111.99.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.17.47.67.111.109.109.111.110.47.115.115.108.95.99.114.108.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.19.47.67.111.109.109.111.110.47.107.114.98.100.101.108.101.103.97.116.101|70|0 +1.3.6.1.4.1.3375.2.2.6.1.2.3.1.8.19.47.67.111.109.109.111.110.47.115.115.108.95.99.99.95.108.100.97.112|70|0 +1.3.6.1.4.1.3375.2.2.6.2.1.1.0|2|6 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.1.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.1.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f636c69656e7473736c2d736563757265 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f776f6d2d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.1.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f636c69656e7473736c2d696e7365637572652d636f6d70617469626c65 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.1.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.1.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f63727970746f2d7365727665722d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.2.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.2.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.2.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.2.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.2.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.3.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.3.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.3.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.3.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.3.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.4.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.4.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.4.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.4.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.4.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.5.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.5.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.5.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.5.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.5.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.6.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.6.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.6.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.6.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.6.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.7.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.7.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.7.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.7.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.7.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.8.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.8.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.8.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.8.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.8.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.9.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.9.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.9.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.9.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.9.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.10.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.10.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.10.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.10.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.10.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.11.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.11.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|65636468653a7273613a2173736c76333a217263343a216578703a21646573 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.11.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|414c4c3a2144483a214144483a214544483a405350454544 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.11.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.11.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|4448452d5253412d4145533235362d47434d2d534841333834 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.12.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.12.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.12.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.12.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.12.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.13.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.13.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|8192 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.13.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|34816 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.13.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.13.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.14.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.14.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.14.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.14.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.14.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.15.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.15.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.15.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.15.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.15.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.16.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.16.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|3600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.16.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|3600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.16.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.16.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.17.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.17.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.17.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.17.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.17.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|21600 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.18.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.18.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.18.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.18.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.18.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.19.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.19.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.19.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.19.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.19.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.20.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.20.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.20.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.20.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.20.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.21.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.21.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.21.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.21.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.21.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.21.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.22.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.22.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.22.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.22.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.22.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.22.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.23.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.23.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.23.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.23.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.23.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.23.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.24.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.24.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|9 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.24.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.24.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|9 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.24.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.24.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.25.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.25.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.25.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.25.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.25.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.25.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.26.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.26.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.26.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.26.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.26.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.26.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.27.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.27.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.27.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.27.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.27.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.27.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.28.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.28.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.28.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.28.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.28.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.28.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.29.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.29.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.29.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.29.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.29.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.29.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.30.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.30.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.30.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.30.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.30.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.30.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.31.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.31.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.31.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.31.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.31.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.31.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.32.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.32.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.32.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.32.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.32.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.32.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.33.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|30 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.33.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|30 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.33.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|30 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.33.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|30 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.33.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|30 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.33.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|30 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.34.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|258 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.34.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|258 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.34.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|258 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.34.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|258 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.34.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|258 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.34.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|258 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.35.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.35.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.35.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.35.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.35.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.35.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.36.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.36.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.36.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.36.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.36.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.36.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.37.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.37.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.37.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.37.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.37.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.37.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.38.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.38.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.38.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.38.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.38.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.38.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.39.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.39.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.39.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.39.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.39.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.39.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.40.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.40.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.40.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.40.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.40.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.40.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.41.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.41.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.41.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.41.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.41.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.41.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.42.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.42.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.42.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.42.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.42.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.42.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.43.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.43.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.43.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.43.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.43.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.43.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.44.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.44.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.44.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.44.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.44.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.44.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.45.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.45.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.45.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.45.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.45.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.45.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.46.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.46.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.46.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.46.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.46.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.46.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.47.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.47.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.47.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.47.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.47.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.47.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.48.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|5 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.48.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|5 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.48.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|5 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.48.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|5 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.48.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|5 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.48.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|5 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.49.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.49.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.49.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.49.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.49.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.49.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.50.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.50.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.50.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.50.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.50.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.50.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.51.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.51.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.51.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.51.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.51.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.51.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.52.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.52.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.52.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.52.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.52.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.52.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.53.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.53.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.53.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.53.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.53.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.53.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.54.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.54.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.54.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.54.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.54.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.54.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.55.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|16384 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.55.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|16384 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.55.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|16384 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.55.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|16384 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.55.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|16384 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.55.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|16384 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.56.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.56.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.56.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.56.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.56.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.56.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.57.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.57.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.57.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.57.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.57.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.57.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.58.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.58.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.58.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.58.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.58.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.58.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.59.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.59.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.59.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.59.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.59.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.59.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.60.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.60.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.60.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.60.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.60.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.60.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.61.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.61.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.61.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.61.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.61.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.61.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.62.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.62.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.62.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.62.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.62.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.62.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.63.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.63.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.63.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.63.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.63.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.1.2.1.63.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.2.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.2.2.2.0|2|6 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.1.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.1.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f636c69656e7473736c2d736563757265 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f776f6d2d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.1.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f636c69656e7473736c2d696e7365637572652d636f6d70617469626c65 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.1.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.1.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f63727970746f2d7365727665722d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.2.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.2.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.2.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.2.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.2.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.3.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.3.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.3.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.3.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.3.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.4.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.4.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.4.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.4.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.4.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.5.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.5.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.5.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.5.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.5.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.6.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.6.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.6.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.6.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.6.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.7.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.7.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.7.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.7.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.7.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.8.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.8.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.8.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.8.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.8.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.9.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.9.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.9.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.9.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.9.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.10.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.10.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.10.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.10.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.10.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.11.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.11.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.11.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.11.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.11.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.12.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.12.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.12.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.12.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.12.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.13.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.13.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.13.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.13.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.13.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.14.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.14.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.14.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.14.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.14.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.15.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.15.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.15.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.15.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.15.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.16.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.16.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.16.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.16.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.16.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.17.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.17.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.17.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.17.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.17.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.18.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.18.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.18.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.18.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.18.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.19.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.19.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.19.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.19.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.19.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.20.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.20.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.20.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.20.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.20.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.21.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.21.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.21.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.21.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.21.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.21.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.22.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.22.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.22.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.22.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.22.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.22.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.23.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.23.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.23.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.23.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.23.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.23.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.24.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.24.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.24.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.24.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.24.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.24.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.25.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.25.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.25.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.25.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.25.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.25.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.26.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.26.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.26.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.26.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.26.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.26.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.27.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.27.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.27.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.27.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.27.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.27.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.28.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.28.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.28.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.28.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.28.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.28.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.29.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.29.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.29.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.29.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.29.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.29.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.30.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.30.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.30.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.30.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.30.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.30.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.31.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.31.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.31.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.31.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.31.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.31.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.32.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.32.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.32.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.32.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.32.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.32.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.33.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.33.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.33.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.33.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.33.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.33.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.34.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.34.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.34.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.34.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.34.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.34.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.35.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.35.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.35.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.35.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.35.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.35.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.36.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.36.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.36.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.36.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.36.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.36.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.37.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.37.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.37.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.37.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.37.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.37.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.38.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.38.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.38.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.38.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.38.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.38.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.39.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.39.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.39.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.39.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.39.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.39.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.40.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.40.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.40.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.40.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.40.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.40.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.41.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.41.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.41.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.41.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.41.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.41.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.42.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.42.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.42.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.42.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.42.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.42.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.43.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.43.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.43.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.43.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.43.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.43.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.44.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.44.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.44.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.44.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.44.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.44.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.45.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.45.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.45.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.45.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.45.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.45.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.46.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.46.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.46.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.46.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.46.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.46.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.47.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.47.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.47.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.47.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.47.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.47.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.48.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.48.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.48.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.48.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.48.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.48.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.49.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.49.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.49.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.49.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.49.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.49.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.50.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.50.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.50.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.50.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.50.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.50.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.51.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.51.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.51.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.51.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.51.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.51.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.52.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.52.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.52.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.52.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.52.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.52.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.53.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.53.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.53.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.53.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.53.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.53.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.54.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.54.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.54.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.54.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.54.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.54.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.55.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.55.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.55.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.55.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.55.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.55.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.56.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.56.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.56.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.56.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.56.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.56.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.57.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.57.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.57.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.57.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.57.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.57.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.58.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.58.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.58.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.58.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.58.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.58.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.59.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.59.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.59.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.59.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.59.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.59.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.60.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.60.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.60.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.60.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.60.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.60.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.61.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.61.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.61.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.61.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.61.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.61.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.62.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.62.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.62.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.62.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.62.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.62.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.63.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.63.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.63.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.63.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.63.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.63.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.64.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.64.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.64.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.64.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.64.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.64.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.65.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.65.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.65.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.65.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.65.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.65.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.66.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.66.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.66.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.66.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.66.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.66.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.67.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.67.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.67.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.67.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.67.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.67.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.68.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.68.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.68.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.68.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.68.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.68.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.69.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.69.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.69.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.69.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.69.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.69.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.70.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.70.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.70.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.70.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.70.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.70.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.71.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.71.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.71.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.71.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.71.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.71.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.72.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.72.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.72.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.72.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.72.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.72.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.73.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.73.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.73.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.73.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.73.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.73.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.74.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.74.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.74.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.74.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.74.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.74.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.75.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.75.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.75.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.75.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.75.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.75.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.76.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.76.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.76.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.76.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.76.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.76.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.77.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.77.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.77.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.77.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.77.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.77.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.78.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.78.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.78.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.78.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.78.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.78.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.79.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.79.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.79.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.79.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.79.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.79.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.80.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.80.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.80.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.80.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.80.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.80.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.81.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.81.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.81.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.81.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.81.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.81.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.82.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.82.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.82.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.82.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.82.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.82.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.83.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.83.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.83.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.83.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.83.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.83.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.84.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.84.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.84.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.84.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.84.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.84.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.85.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.85.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.85.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.85.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.85.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.85.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.86.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.86.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.86.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.86.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.86.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.86.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.87.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.87.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.87.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.87.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.87.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.87.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.88.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.88.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.88.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.88.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.88.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.88.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.89.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.89.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.89.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.89.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.89.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.89.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.90.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.90.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.90.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.90.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.90.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.90.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.91.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.91.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.91.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.91.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.91.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.91.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.92.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.92.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.92.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.92.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.92.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.92.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.93.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.93.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.93.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.93.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.93.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.93.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.94.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.94.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.94.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.94.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.94.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.94.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.95.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.95.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.95.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.95.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.95.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.95.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.96.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.96.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.96.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.96.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.96.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.96.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.97.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.97.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.97.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.97.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.97.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.97.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.98.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.98.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.98.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.98.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.98.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.98.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.99.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.99.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.99.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.99.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.99.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.99.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.100.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.100.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.100.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.100.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.100.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.100.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.101.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.101.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.101.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.101.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.101.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.101.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.102.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.102.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.102.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.102.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.102.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.102.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.103.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.103.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.103.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.103.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.103.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.103.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.104.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.104.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.104.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.104.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.104.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.104.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.105.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.105.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.105.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.105.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.105.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.105.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.106.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.106.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.106.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.106.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.106.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.106.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.107.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.107.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.107.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.107.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.107.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.107.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.108.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.108.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.108.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.108.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.108.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.108.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.109.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.109.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.109.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.109.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.109.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.109.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.110.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.110.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.110.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.110.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.110.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.110.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.111.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.111.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.111.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.111.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.111.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.111.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.112.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.112.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.112.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.112.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.112.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.112.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.113.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.113.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.113.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.113.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.113.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.113.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.114.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.114.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.114.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.114.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.114.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.114.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.115.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.115.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.115.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.115.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.115.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.115.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.117.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.117.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.117.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.117.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.117.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.117.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.118.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.118.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.118.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.118.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.118.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.118.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.119.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.119.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.119.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.119.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.119.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.119.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.120.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.120.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.120.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.120.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.120.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.120.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.121.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.121.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.121.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.121.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.121.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.121.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.122.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.122.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.122.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.122.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.122.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.122.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.123.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.123.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.123.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.123.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.123.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.123.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.124.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.124.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.124.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.124.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.124.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.124.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.125.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.125.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.125.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.125.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.125.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.2.3.1.125.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.2.3.1.0|2|6 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.1.7.100.101.102.97.117.108.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4|default +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.1.7.100.101.102.97.117.108.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4|default +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.1.7.100.101.102.97.117.108.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4|default +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.1.7.100.101.102.97.117.108.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4|default +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.1.7.100.101.102.97.117.108.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4|default +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.1.7.100.101.102.97.117.108.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4|default +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.2.7.100.101.102.97.117.108.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.2.7.100.101.102.97.117.108.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f636c69656e7473736c2d736563757265 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.2.7.100.101.102.97.117.108.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f776f6d2d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.2.7.100.101.102.97.117.108.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f636c69656e7473736c2d696e7365637572652d636f6d70617469626c65 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.2.7.100.101.102.97.117.108.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.2.7.100.101.102.97.117.108.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f63727970746f2d7365727665722d64656661756c742d636c69656e7473736c +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.3.7.100.101.102.97.117.108.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.3.7.100.101.102.97.117.108.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.3.7.100.101.102.97.117.108.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.3.7.100.101.102.97.117.108.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.3.7.100.101.102.97.117.108.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.3.7.100.101.102.97.117.108.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.4.7.100.101.102.97.117.108.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.4.7.100.101.102.97.117.108.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.4.7.100.101.102.97.117.108.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.4.7.100.101.102.97.117.108.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.4.7.100.101.102.97.117.108.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.4.7.100.101.102.97.117.108.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.5.7.100.101.102.97.117.108.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.5.7.100.101.102.97.117.108.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.5.7.100.101.102.97.117.108.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.5.7.100.101.102.97.117.108.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.5.7.100.101.102.97.117.108.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.5.7.100.101.102.97.117.108.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.6.7.100.101.102.97.117.108.116.17.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.6.7.100.101.102.97.117.108.116.24.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.6.7.100.101.102.97.117.108.116.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.6.7.100.101.102.97.117.108.116.37.47.67.111.109.109.111.110.47.99.108.105.101.110.116.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.6.7.100.101.102.97.117.108.116.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.2.3.2.1.6.7.100.101.102.97.117.108.116.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.115.101.114.118.101.114.45.100.101.102.97.117.108.116.45.99.108.105.101.110.116.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.1.0|2|8 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f73657276657273736c2d736563757265 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f61706d2d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f776f6d2d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f70636f69702d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f73657276657273736c2d696e7365637572652d636f6d70617469626c65 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.1.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f63727970746f2d636c69656e742d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.2.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.3.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.4.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e6b6579 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.5.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f64656661756c742e637274 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.6.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.7.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f63612d62756e646c652e637274 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.8.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.9.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|214558504f52543a2144483a5253412b5243343a5253412b4145533a5253412b4445533a5253412b334445533a45434448452b4145533a45434448452b334445533a405350454544 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4|DEFAULT +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.10.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|4448452d5253412d4145533235362d47434d2d534841333834 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.11.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|8192 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.12.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|34816 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.13.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.14.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.15.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.16.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.17.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.18.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|9 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.19.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.20.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.21.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.22.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|10 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.23.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|4294967295 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|262144 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.24.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.25.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|3600 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.26.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.27.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.28.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.29.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.30.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.31.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.32.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.33.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.34.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.35.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.36.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.37.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.38.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.39.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.40.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.41.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.42.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.43.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.44.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.45.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|24 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.46.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|402 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.1.2.1.47.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.3.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.3.2.2.0|2|8 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|4x|2f436f6d6d6f6e2f73657276657273736c2d736563757265 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f61706d2d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f776f6d2d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f70636f69702d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|4x|2f436f6d6d6f6e2f73657276657273736c2d696e7365637572652d636f6d70617469626c65 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.1.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|4x|2f436f6d6d6f6e2f63727970746f2d636c69656e742d64656661756c742d73657276657273736c +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.2.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.3.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.4.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.5.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.6.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.7.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.8.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.9.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.10.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.11.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.12.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.13.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.14.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.15.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.16.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.17.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.18.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.19.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.20.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.21.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.22.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.23.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.24.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.25.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.26.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.27.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.28.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.29.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.30.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.31.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.32.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.33.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.34.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.35.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.36.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.37.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.38.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.39.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.40.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.41.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.42.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.43.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.44.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.45.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.46.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.47.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.48.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.49.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.50.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.51.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.52.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.53.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.54.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.55.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.56.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.57.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.58.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.59.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.60.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.61.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.62.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.63.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.64.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.65.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.66.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.67.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.68.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.69.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.70.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.71.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.72.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.73.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.74.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.75.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.76.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.77.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.78.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.79.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.80.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.81.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.82.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.83.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.84.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|18446744073709551615 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.85.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.86.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.87.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.88.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.89.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.90.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.91.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.92.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.93.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.17.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.24.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.115.101.99.117.114.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.29.47.67.111.109.109.111.110.47.97.112.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.29.47.67.111.109.109.111.110.47.119.111.109.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.31.47.67.111.109.109.111.110.47.112.99.111.105.112.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.37.47.67.111.109.109.111.110.47.115.101.114.118.101.114.115.115.108.45.105.110.115.101.99.117.114.101.45.99.111.109.112.97.116.105.98.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.38.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.2.3.1.94.39.47.67.111.109.109.111.110.47.99.114.121.112.116.111.45.99.108.105.101.110.116.45.100.101.102.97.117.108.116.45.115.101.114.118.101.114.115.115.108|70|0 +1.3.6.1.4.1.3375.2.2.6.3.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.4.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.1.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|4x|2f436f6d6d6f6e2f6f6e65636f6e6e656374 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.2.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|2|1 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.3.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|4| +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.4.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|2|1 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.5.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|4x|00000000 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.6.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|10000 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.7.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|86400 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.8.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|1000 +1.3.6.1.4.1.3375.2.2.6.4.1.2.1.9.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|0 +1.3.6.1.4.1.3375.2.2.6.4.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.4.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.4.2.3.1.1.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|4x|2f436f6d6d6f6e2f6f6e65636f6e6e656374 +1.3.6.1.4.1.3375.2.2.6.4.2.3.1.2.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|0 +1.3.6.1.4.1.3375.2.2.6.4.2.3.1.3.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|0 +1.3.6.1.4.1.3375.2.2.6.4.2.3.1.4.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|0 +1.3.6.1.4.1.3375.2.2.6.4.2.3.1.5.18.47.67.111.109.109.111.110.47.111.110.101.99.111.110.110.101.99.116|66|0 +1.3.6.1.4.1.3375.2.2.6.5.1.1.0|2|3 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.1.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|4x|2f436f6d6d6f6e2f666173744c34 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.1.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f66756c6c2d616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.1.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|4x|2f436f6d6d6f6e2f61706d2d666f7277617264696e672d666173744c34 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.2.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|1 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.2.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.2.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|1 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.3.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|4| +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.3.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f666173744c34 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.3.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|4x|2f436f6d6d6f6e2f666173744c34 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.4.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|1 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.4.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.4.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|1 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.5.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.5.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.5.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.6.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|66|300 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.6.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|66|300 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.6.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|66|7200 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.7.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|66|5 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.7.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|66|5 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.7.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|66|5 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.8.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|66|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.8.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.8.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|66|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.9.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.9.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.9.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.10.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.10.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.10.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.11.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.11.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.11.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.12.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.12.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.12.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.13.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.13.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.13.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.14.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.14.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.14.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.15.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.15.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.15.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.16.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.16.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.16.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.17.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.17.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.17.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|65535 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.18.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.18.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.18.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.19.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.19.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.19.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.20.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|66|5 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.20.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|66|5 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.20.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|66|5 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.21.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.21.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.21.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.22.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.22.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.22.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.23.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.23.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.23.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.24.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.24.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.24.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.25.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.25.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.25.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.26.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.26.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.26.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.27.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|66|30 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.27.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|66|30 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.27.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|66|30 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.28.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.28.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.5.1.2.1.28.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|2|0 +1.3.6.1.4.1.3375.2.2.6.5.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.5.2.2.0|2|3 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.1.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|4x|2f436f6d6d6f6e2f666173744c34 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.1.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f66756c6c2d616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.1.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|4x|2f436f6d6d6f6e2f61706d2d666f7277617264696e672d666173744c34 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.2.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|66|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.2.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.2.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|66|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.3.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.3.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.3.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.4.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.4.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.4.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.5.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.5.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.5.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.6.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.6.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.6.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.7.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.7.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.7.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.8.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.8.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.8.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.9.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.9.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.9.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.10.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.10.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.10.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.11.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.11.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.11.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.12.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.12.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.12.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.13.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.13.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.13.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.14.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.14.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.14.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.15.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.15.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.15.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.16.14.47.67.111.109.109.111.110.47.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.16.25.47.67.111.109.109.111.110.47.102.117.108.108.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.5.2.3.1.16.29.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.102.97.115.116.76.52|70|0 +1.3.6.1.4.1.3375.2.2.6.6.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.1.11.47.67.111.109.109.111.110.47.102.116.112|4x|2f436f6d6d6f6e2f667470 +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.2.11.47.67.111.109.109.111.110.47.102.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.3.11.47.67.111.109.109.111.110.47.102.116.112|4| +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.4.11.47.67.111.109.109.111.110.47.102.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.5.11.47.67.111.109.109.111.110.47.102.116.112|66|20 +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.6.11.47.67.111.109.109.111.110.47.102.116.112|4| +1.3.6.1.4.1.3375.2.2.6.6.1.2.1.7.11.47.67.111.109.109.111.110.47.102.116.112|4| +1.3.6.1.4.1.3375.2.2.6.6.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.6.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.1.11.47.67.111.109.109.111.110.47.102.116.112|4x|2f436f6d6d6f6e2f667470 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.2.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.3.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.4.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.5.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.6.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.7.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.8.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.9.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.10.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.6.2.3.1.11.11.47.67.111.109.109.111.110.47.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.1.1.0|2|3 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.4.12.47.67.111.109.109.111.110.47.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.4.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.4.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.5.12.47.67.111.109.109.111.110.47.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.5.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.5.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.6.12.47.67.111.109.109.111.110.47.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.6.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.6.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.7.12.47.67.111.109.109.111.110.47.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.7.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.7.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.8.12.47.67.111.109.109.111.110.47.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.8.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.8.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.9.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.9.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.9.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.10.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.10.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.10.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.11.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.11.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.11.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.12.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.12.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.12.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.13.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.13.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.13.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.14.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.14.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.14.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.15.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.15.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.15.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.16.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.16.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.16.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.17.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.17.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.17.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.18.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.18.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.18.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.19.12.47.67.111.109.109.111.110.47.104.116.116.112|2|4 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.19.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|4 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.19.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|4 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.20.12.47.67.111.109.109.111.110.47.104.116.116.112|2|4 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.20.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|4 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.20.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|4 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.21.12.47.67.111.109.109.111.110.47.104.116.116.112|66|80 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.21.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|80 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.21.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|80 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.22.12.47.67.111.109.109.111.110.47.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.22.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.22.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.23.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.23.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.23.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.24.12.47.67.111.109.109.111.110.47.104.116.116.112|66|32768 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.24.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|32768 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.24.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|16384 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.25.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.25.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.25.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.26.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.26.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.26.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.27.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.27.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.27.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.28.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.28.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.28.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.29.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.29.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.29.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.30.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.30.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.30.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.31.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.31.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.31.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.32.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.32.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.32.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.33.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.33.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.33.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.34.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.34.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.34.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.35.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.35.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.35.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.36.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.36.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.36.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.37.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.37.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.37.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.38.12.47.67.111.109.109.111.110.47.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.38.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.38.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.39.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.39.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.39.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.40.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.40.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.40.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.41.12.47.67.111.109.109.111.110.47.104.116.116.112|4|BigIP +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.41.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4|BigIP +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.41.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4|BigIP +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.42.12.47.67.111.109.109.111.110.47.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.42.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.42.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.43.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.43.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.43.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.44.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.44.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.44.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.45.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.45.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.45.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.46.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.46.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.46.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.47.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.47.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.47.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.48.12.47.67.111.109.109.111.110.47.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.48.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.48.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.49.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.49.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.49.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.50.12.47.67.111.109.109.111.110.47.104.116.116.112|66|16070400 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.50.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|66|16070400 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.50.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|66|16070400 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.51.12.47.67.111.109.109.111.110.47.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.51.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.51.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.52.12.47.67.111.109.109.111.110.47.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.52.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.52.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.53.12.47.67.111.109.109.111.110.47.104.116.116.112|4x|32303020323036 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.53.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4x|32303020323036 +1.3.6.1.4.1.3375.2.2.6.7.1.2.1.53.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4x|32303020323036 +1.3.6.1.4.1.3375.2.2.6.7.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.6.2.0|2|3 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.4.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.4.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.4.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.5.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.5.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.5.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.6.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.6.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.6.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.7.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.7.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.7.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.8.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.8.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.8.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.9.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.9.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.9.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.10.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.10.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.10.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.11.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.11.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.11.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.12.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.12.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.12.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.13.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.13.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.13.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.14.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.14.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.14.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.15.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.15.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.15.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.16.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.16.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.16.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.17.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.17.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.17.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.18.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.18.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.18.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.19.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.19.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.19.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.20.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.20.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.20.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.21.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.21.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.21.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.22.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.22.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.22.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.23.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.23.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.23.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.24.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.24.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.24.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.25.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.25.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.25.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.26.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.26.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.26.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.27.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.27.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.27.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.28.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.28.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.28.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.29.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.29.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.29.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.30.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.30.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.30.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.31.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.31.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.31.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.32.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.32.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.32.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.33.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.33.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.33.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.34.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.34.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.34.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.35.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.35.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.35.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.36.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.36.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.36.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.37.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.37.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.37.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.38.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.38.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.38.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.39.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.39.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.39.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.40.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.40.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.40.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.41.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.41.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.41.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.42.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.42.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.42.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.43.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.43.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.43.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.44.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.44.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.44.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.45.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.45.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.45.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.46.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.46.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.46.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.47.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.47.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.47.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.48.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.48.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.48.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.49.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.49.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.49.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.50.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.50.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.50.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.51.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.51.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.51.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.52.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.52.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.52.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.53.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.53.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.53.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.54.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.54.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.54.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.55.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.55.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.55.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.56.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.56.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.56.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.57.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.57.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.57.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.58.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.58.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.58.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.59.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.59.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.59.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.60.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.60.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.60.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.61.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.61.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.61.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.62.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.62.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.62.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.63.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.63.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.63.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.64.12.47.67.111.109.109.111.110.47.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.64.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.6.3.1.64.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.7.7.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.8.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.9.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.10.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.11.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.12.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.7.13.1.0|2|33 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.1|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.2|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.3|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.4|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.5|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.6|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.7|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.8|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.9|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.10|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.12.47.67.111.109.109.111.110.47.104.116.116.112.11|4x|2f436f6d6d6f6e2f68747470 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.1|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.2|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.3|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.4|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.5|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.6|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.7|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.8|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.9|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.10|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.11|4x|2f436f6d6d6f6e2f687474702d6578706c69636974 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.1|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.2|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.3|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.4|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.5|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.6|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.7|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.8|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.9|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.10|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.1.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.11|4x|2f436f6d6d6f6e2f687474702d7472616e73706172656e74 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.1|2|1 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.2|2|2 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.3|2|3 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.4|2|4 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.5|2|5 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.6|2|6 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.7|2|7 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.8|2|8 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.9|2|9 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.10|2|10 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.12.47.67.111.109.109.111.110.47.104.116.116.112.11|2|11 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.1|2|1 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.2|2|2 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.3|2|3 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.4|2|4 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.5|2|5 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.6|2|6 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.7|2|7 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.8|2|8 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.9|2|9 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.10|2|10 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.11|2|11 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.1|2|1 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.2|2|2 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.3|2|3 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.4|2|4 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.5|2|5 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.6|2|6 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.7|2|7 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.8|2|8 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.9|2|9 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.10|2|10 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.2.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.11|2|11 +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.1|4|CONNECT +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.2|4|DELETE +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.3|4|GET +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.4|4|HEAD +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.5|4|LOCK +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.6|4|OPTIONS +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.7|4|POST +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.8|4|PROPFIND +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.9|4|PUT +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.10|4|TRACE +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.12.47.67.111.109.109.111.110.47.104.116.116.112.11|4|UNLOCK +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.1|4|CONNECT +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.2|4|DELETE +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.3|4|GET +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.4|4|HEAD +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.5|4|LOCK +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.6|4|OPTIONS +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.7|4|POST +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.8|4|PROPFIND +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.9|4|PUT +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.10|4|TRACE +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.21.47.67.111.109.109.111.110.47.104.116.116.112.45.101.120.112.108.105.99.105.116.11|4|UNLOCK +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.1|4|CONNECT +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.2|4|DELETE +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.3|4|GET +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.4|4|HEAD +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.5|4|LOCK +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.6|4|OPTIONS +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.7|4|POST +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.8|4|PROPFIND +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.9|4|PUT +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.10|4|TRACE +1.3.6.1.4.1.3375.2.2.6.7.13.2.1.3.24.47.67.111.109.109.111.110.47.104.116.116.112.45.116.114.97.110.115.112.97.114.101.110.116.11|4|UNLOCK +1.3.6.1.4.1.3375.2.2.6.8.1.1.0|2|9 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.11.47.67.111.109.109.111.110.47.115.115.108|4x|2f436f6d6d6f6e2f73736c +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.12.47.67.111.109.109.111.110.47.104.97.115.104|4x|2f436f6d6d6f6e2f68617368 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.12.47.67.111.109.109.111.110.47.104.111.115.116|4x|2f436f6d6d6f6e2f686f7374 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.13.47.67.111.109.109.111.110.47.109.115.114.100.112|4x|2f436f6d6d6f6e2f6d73726470 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|4x|2f436f6d6d6f6e2f636f6f6b6965 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|4x|2f436f6d6d6f6e2f7369705f696e666f +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|4x|2f436f6d6d6f6e2f646573745f61646472 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|4x|2f436f6d6d6f6e2f756e6976657273616c +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.1.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|4x|2f436f6d6d6f6e2f736f757263655f61646472 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.11.47.67.111.109.109.111.110.47.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.12.47.67.111.109.109.111.110.47.104.97.115.104|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.12.47.67.111.109.109.111.110.47.104.111.115.116|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.2.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.11.47.67.111.109.109.111.110.47.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.12.47.67.111.109.109.111.110.47.104.97.115.104|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.12.47.67.111.109.109.111.110.47.104.111.115.116|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.13.47.67.111.109.109.111.110.47.109.115.114.100.112|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.3.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.11.47.67.111.109.109.111.110.47.115.115.108|2|5 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.12.47.67.111.109.109.111.110.47.104.97.115.104|2|8 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.12.47.67.111.109.109.111.110.47.104.111.115.116|2|9 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|4 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|3 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|6 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|7 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.4.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.5.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.11.47.67.111.109.109.111.110.47.115.115.108|66|300 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.12.47.67.111.109.109.111.110.47.104.97.115.104|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.12.47.67.111.109.109.111.110.47.104.111.115.116|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.13.47.67.111.109.109.111.110.47.109.115.114.100.112|66|300 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.6.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|66|180 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.11.47.67.111.109.109.111.110.47.115.115.108|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.12.47.67.111.109.109.111.110.47.104.97.115.104|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.12.47.67.111.109.109.111.110.47.104.111.115.116|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.7.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|2 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.11.47.67.111.109.109.111.110.47.115.115.108|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.12.47.67.111.109.109.111.110.47.104.97.115.104|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.12.47.67.111.109.109.111.110.47.104.111.115.116|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.13.47.67.111.109.109.111.110.47.109.115.114.100.112|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.8.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.9.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.11.47.67.111.109.109.111.110.47.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.12.47.67.111.109.109.111.110.47.104.97.115.104|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.12.47.67.111.109.109.111.110.47.104.111.115.116|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.13.47.67.111.109.109.111.110.47.109.115.114.100.112|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.10.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.11.47.67.111.109.109.111.110.47.115.115.108|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.12.47.67.111.109.109.111.110.47.104.97.115.104|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.12.47.67.111.109.109.111.110.47.104.111.115.116|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.13.47.67.111.109.109.111.110.47.109.115.114.100.112|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.11.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|66|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.12.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.13.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.14.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.11.47.67.111.109.109.111.110.47.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.12.47.67.111.109.109.111.110.47.104.97.115.104|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.12.47.67.111.109.109.111.110.47.104.111.115.116|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.15.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.16.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.17.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.11.47.67.111.109.109.111.110.47.115.115.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.12.47.67.111.109.109.111.110.47.104.97.115.104|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.12.47.67.111.109.109.111.110.47.104.111.115.116|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.18.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|0 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.11.47.67.111.109.109.111.110.47.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.12.47.67.111.109.109.111.110.47.104.97.115.104|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.12.47.67.111.109.109.111.110.47.104.111.115.116|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.13.47.67.111.109.109.111.110.47.109.115.114.100.112|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.19.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.11.47.67.111.109.109.111.110.47.115.115.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.12.47.67.111.109.109.111.110.47.104.97.115.104|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.12.47.67.111.109.109.111.110.47.104.111.115.116|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.13.47.67.111.109.109.111.110.47.109.115.114.100.112|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.20.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|4| +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.11.47.67.111.109.109.111.110.47.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.12.47.67.111.109.109.111.110.47.104.97.115.104|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.12.47.67.111.109.109.111.110.47.104.111.115.116|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.21.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.11.47.67.111.109.109.111.110.47.115.115.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.12.47.67.111.109.109.111.110.47.104.97.115.104|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.12.47.67.111.109.109.111.110.47.104.111.115.116|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.13.47.67.111.109.109.111.110.47.109.115.114.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.14.47.67.111.109.109.111.110.47.99.111.111.107.105.101|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.16.47.67.111.109.109.111.110.47.115.105.112.95.105.110.102.111|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.17.47.67.111.109.109.111.110.47.100.101.115.116.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.17.47.67.111.109.109.111.110.47.117.110.105.118.101.114.115.97.108|2|1 +1.3.6.1.4.1.3375.2.2.6.8.1.2.1.22.19.47.67.111.109.109.111.110.47.115.111.117.114.99.101.95.97.100.100.114|2|1 +1.3.6.1.4.1.3375.2.2.6.9.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.9.1.2.1.1.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|4x|2f436f6d6d6f6e2f73747265616d +1.3.6.1.4.1.3375.2.2.6.9.1.2.1.2.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|2|1 +1.3.6.1.4.1.3375.2.2.6.9.1.2.1.3.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|4| +1.3.6.1.4.1.3375.2.2.6.9.1.2.1.4.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|4| +1.3.6.1.4.1.3375.2.2.6.9.1.2.1.5.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|4| +1.3.6.1.4.1.3375.2.2.6.9.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.9.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.9.2.3.1.1.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|4x|2f436f6d6d6f6e2f73747265616d +1.3.6.1.4.1.3375.2.2.6.9.2.3.1.2.14.47.67.111.109.109.111.110.47.115.116.114.101.97.109|70|0 +1.3.6.1.4.1.3375.2.2.6.10.1.1.0|2|17 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.11.47.67.111.109.109.111.110.47.116.99.112|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|4x|2f436f6d6d6f6e2f66352d7463702d6c616e +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|4x|2f436f6d6d6f6e2f66352d7463702d77616e +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|4x|2f436f6d6d6f6e2f66352d7463702d6d6f62696c65 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|4x|2f436f6d6d6f6e2f66352d7463702d70726f6772657373697665 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6d6f62696c652d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f77616d2d7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f77616d2d7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f776f6d2d7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f776f6d2d7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f6d707463702d6d6f62696c652d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|4x|2f436f6d6d6f6e2f61706d2d666f7277617264696e672d636c69656e742d746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.1.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|4x|2f436f6d6d6f6e2f61706d2d666f7277617264696e672d7365727665722d746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.2.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.11.47.67.111.109.109.111.110.47.116.99.112|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|4x|2f436f6d6d6f6e2f7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.3.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.4.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.5.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.6.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.7.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.8.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.11.47.67.111.109.109.111.110.47.116.99.112|66|32768 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|32768 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|196608 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|32768 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|196608 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|98304 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|196608 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|98304 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|98304 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|32768 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.9.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|32768 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.11.47.67.111.109.109.111.110.47.116.99.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|49152 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|196608 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|196608 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|196608 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|49152 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.10.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|49152 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.11.47.67.111.109.109.111.110.47.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.11.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.11.47.67.111.109.109.111.110.47.116.99.112|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.12.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|2000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.11.47.67.111.109.109.111.110.47.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.13.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.11.47.67.111.109.109.111.110.47.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.14.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.11.47.67.111.109.109.111.110.47.116.99.112|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|458752 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|458752 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|262144 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|458752 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.15.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.11.47.67.111.109.109.111.110.47.116.99.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|458752 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|131072 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|458752 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.16.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.11.47.67.111.109.109.111.110.47.116.99.112|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|1800 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|60 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.17.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|60 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.11.47.67.111.109.109.111.110.47.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.18.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.11.47.67.111.109.109.111.110.47.116.99.112|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.19.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.20.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.21.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.22.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.23.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.24.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.25.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.26.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.27.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.28.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|2 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|2 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|2 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.29.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.30.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.31.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.11.47.67.111.109.109.111.110.47.116.99.112|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.32.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|4| +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.33.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.11.47.67.111.109.109.111.110.47.116.99.112|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|7 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|7 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|7 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.34.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.35.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.36.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.37.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|10000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|10000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|10000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.38.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|8 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.39.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.11.47.67.111.109.109.111.110.47.116.99.112|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|300000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|300000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|300000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.40.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|20000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.11.47.67.111.109.109.111.110.47.116.99.112|66|10 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|10 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|10 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.41.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.11.47.67.111.109.109.111.110.47.116.99.112|66|10 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|10 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|10 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|16 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.42.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.43.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.11.47.67.111.109.109.111.110.47.116.99.112|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.44.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|3000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.45.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.11.47.67.111.109.109.111.110.47.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|200 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|500 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.46.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.47.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.48.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.49.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.50.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.51.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.52.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.11.47.67.111.109.109.111.110.47.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.53.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.54.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.11.47.67.111.109.109.111.110.47.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.55.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|5 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.11.47.67.111.109.109.111.110.47.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.56.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.11.47.67.111.109.109.111.110.47.116.99.112|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.57.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|6 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.58.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.11.47.67.111.109.109.111.110.47.116.99.112|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.59.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|3600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.60.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.61.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.62.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.63.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.64.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.65.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.11.47.67.111.109.109.111.110.47.116.99.112|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.66.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|21600 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.11.47.67.111.109.109.111.110.47.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.67.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|300 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.11.47.67.111.109.109.111.110.47.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.68.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.69.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.70.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.71.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.11.47.67.111.109.109.111.110.47.116.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|1 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.72.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.11.47.67.111.109.109.111.110.47.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|2|3 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.1.2.1.73.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.10.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.10.2.2.0|2|17 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.11.47.67.111.109.109.111.110.47.116.99.112|4x|2f436f6d6d6f6e2f746370 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|4x|2f436f6d6d6f6e2f66352d7463702d6c616e +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|4x|2f436f6d6d6f6e2f66352d7463702d77616e +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|4x|2f436f6d6d6f6e2f7463702d6c6567616379 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|4x|2f436f6d6d6f6e2f66352d7463702d6d6f62696c65 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|4x|2f436f6d6d6f6e2f66352d7463702d70726f6772657373697665 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f7463702d6d6f62696c652d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f77616d2d7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f77616d2d7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f776f6d2d7463702d6c616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f776f6d2d7463702d77616e2d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|4x|2f436f6d6d6f6e2f6d707463702d6d6f62696c652d6f7074696d697a6564 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|4x|2f436f6d6d6f6e2f73706c697473657373696f6e2d64656661756c742d746370 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|4x|2f436f6d6d6f6e2f61706d2d666f7277617264696e672d636c69656e742d746370 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.1.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|4x|2f436f6d6d6f6e2f61706d2d666f7277617264696e672d7365727665722d746370 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.2.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.3.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.4.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.5.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.6.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.7.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.8.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.9.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.10.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.11.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.12.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.13.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.14.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.15.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.16.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.17.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.18.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.11.47.67.111.109.109.111.110.47.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.19.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|70|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.11.47.67.111.109.109.111.110.47.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.108.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.18.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.119.97.110|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.18.47.67.111.109.109.111.110.47.116.99.112.45.108.101.103.97.99.121|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.21.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.109.111.98.105.108.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.25.47.67.111.109.109.111.110.47.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.25.47.67.111.109.109.111.110.47.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.26.47.67.111.109.109.111.110.47.102.53.45.116.99.112.45.112.114.111.103.114.101.115.115.105.118.101|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.28.47.67.111.109.109.111.110.47.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.29.47.67.111.109.109.111.110.47.119.97.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.108.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.29.47.67.111.109.109.111.110.47.119.111.109.45.116.99.112.45.119.97.110.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.30.47.67.111.109.109.111.110.47.109.112.116.99.112.45.109.111.98.105.108.101.45.111.112.116.105.109.105.122.101.100|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.32.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.45.100.101.102.97.117.108.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.99.108.105.101.110.116.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.10.2.3.1.20.33.47.67.111.109.109.111.110.47.97.112.109.45.102.111.114.119.97.114.100.105.110.103.45.115.101.114.118.101.114.45.116.99.112|66|0 +1.3.6.1.4.1.3375.2.2.6.11.1.1.0|2|4 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.1.11.47.67.111.109.109.111.110.47.117.100.112|4x|2f436f6d6d6f6e2f756470 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.1.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|4x|2f436f6d6d6f6e2f7564705f67746d5f646e73 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.1.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|4x|2f436f6d6d6f6e2f7564705f70726573657276655f74746c +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.1.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|4x|2f436f6d6d6f6e2f7564705f64656372656d656e745f74746c +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.2.11.47.67.111.109.109.111.110.47.117.100.112|2|1 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.2.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.2.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|2|1 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.2.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|2|1 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.3.11.47.67.111.109.109.111.110.47.117.100.112|4| +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.3.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|4x|2f436f6d6d6f6e2f756470 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.3.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|4x|2f436f6d6d6f6e2f756470 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.3.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|4x|2f436f6d6d6f6e2f756470 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.4.11.47.67.111.109.109.111.110.47.117.100.112|66|60 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.4.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|66|5 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.4.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|66|60 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.4.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|66|60 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.5.11.47.67.111.109.109.111.110.47.117.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.5.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.5.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.5.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.6.11.47.67.111.109.109.111.110.47.117.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.6.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.6.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.6.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.7.11.47.67.111.109.109.111.110.47.117.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.7.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.7.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.7.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.8.11.47.67.111.109.109.111.110.47.117.100.112|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.8.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.8.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.8.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|2|0 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.9.11.47.67.111.109.109.111.110.47.117.100.112|66|655350 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.9.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|66|655350 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.9.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|66|655350 +1.3.6.1.4.1.3375.2.2.6.11.1.2.1.9.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|66|655350 +1.3.6.1.4.1.3375.2.2.6.11.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.11.2.2.0|2|4 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.1.11.47.67.111.109.109.111.110.47.117.100.112|4x|2f436f6d6d6f6e2f756470 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.1.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|4x|2f436f6d6d6f6e2f7564705f67746d5f646e73 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.1.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|4x|2f436f6d6d6f6e2f7564705f70726573657276655f74746c +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.1.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|4x|2f436f6d6d6f6e2f7564705f64656372656d656e745f74746c +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.2.11.47.67.111.109.109.111.110.47.117.100.112|66|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.2.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|66|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.2.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|66|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.2.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|66|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.3.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.3.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.3.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.3.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.4.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.4.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.4.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.4.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.5.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.5.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.5.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.5.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.6.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.6.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.6.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.6.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.7.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.7.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.7.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.7.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.8.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.8.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.8.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.8.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.9.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.9.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.9.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.9.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.10.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.10.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.10.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.10.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.11.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.11.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.11.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.11.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.12.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.12.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.12.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.12.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.13.11.47.67.111.109.109.111.110.47.117.100.112|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.13.19.47.67.111.109.109.111.110.47.117.100.112.95.103.116.109.95.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.13.24.47.67.111.109.109.111.110.47.117.100.112.95.112.114.101.115.101.114.118.101.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.11.2.3.1.13.25.47.67.111.109.109.111.110.47.117.100.112.95.100.101.99.114.101.109.101.110.116.95.116.116.108|70|0 +1.3.6.1.4.1.3375.2.2.6.12.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.1.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|4x|2f436f6d6d6f6e2f6661737468747470 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.2.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.3.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.4.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.5.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|300 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.6.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.7.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|5 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.8.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|5 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.9.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|2048 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.10.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.11.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|4 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.12.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.13.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.14.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|32768 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.15.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.16.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.17.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.18.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|4| +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.19.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.20.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.21.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.12.1.2.1.22.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.12.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.12.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.1.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|4x|2f436f6d6d6f6e2f6661737468747470 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.2.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.3.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.4.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.5.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.6.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.7.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.8.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.9.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.10.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.11.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.12.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.13.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.14.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.15.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.16.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.17.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.18.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.19.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.20.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.21.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.22.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.23.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.12.2.3.1.24.16.47.67.111.109.109.111.110.47.102.97.115.116.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.13.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.13.1.2.1.1.11.47.67.111.109.109.111.110.47.120.109.108|4x|2f436f6d6d6f6e2f786d6c +1.3.6.1.4.1.3375.2.2.6.13.1.2.1.2.11.47.67.111.109.109.111.110.47.120.109.108|2|1 +1.3.6.1.4.1.3375.2.2.6.13.1.2.1.3.11.47.67.111.109.109.111.110.47.120.109.108|4| +1.3.6.1.4.1.3375.2.2.6.13.1.2.1.4.11.47.67.111.109.109.111.110.47.120.109.108|2|0 +1.3.6.1.4.1.3375.2.2.6.13.1.2.1.5.11.47.67.111.109.109.111.110.47.120.109.108|66|0 +1.3.6.1.4.1.3375.2.2.6.13.1.2.1.6.11.47.67.111.109.109.111.110.47.120.109.108|2|0 +1.3.6.1.4.1.3375.2.2.6.13.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.13.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.1.11.47.67.111.109.109.111.110.47.120.109.108|4x|2f436f6d6d6f6e2f786d6c +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.2.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.3.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.4.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.5.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.6.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.7.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.2.3.1.8.11.47.67.111.109.109.111.110.47.120.109.108|70|0 +1.3.6.1.4.1.3375.2.2.6.13.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.13.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.1.11.47.67.111.109.109.111.110.47.100.110.115|4x|2f436f6d6d6f6e2f646e73 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.2.11.47.67.111.109.109.111.110.47.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.3.11.47.67.111.109.109.111.110.47.100.110.115|4| +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.4.11.47.67.111.109.109.111.110.47.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.5.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.6.11.47.67.111.109.109.111.110.47.100.110.115|2|2 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.7.11.47.67.111.109.109.111.110.47.100.110.115|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.8.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.9.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.10.11.47.67.111.109.109.111.110.47.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.11.11.47.67.111.109.109.111.110.47.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.12.11.47.67.111.109.109.111.110.47.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.13.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.14.11.47.67.111.109.109.111.110.47.100.110.115|4| +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.15.11.47.67.111.109.109.111.110.47.100.110.115|2|1 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.16.11.47.67.111.109.109.111.110.47.100.110.115|66|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.17.11.47.67.111.109.109.111.110.47.100.110.115|4| +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.18.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.19.11.47.67.111.109.109.111.110.47.100.110.115|4| +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.20.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.21.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.22.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.1.2.1.23.11.47.67.111.109.109.111.110.47.100.110.115|2|0 +1.3.6.1.4.1.3375.2.2.6.14.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.14.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.1.11.47.67.111.109.109.111.110.47.100.110.115|4x|2f436f6d6d6f6e2f646e73 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.2.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.3.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.4.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.5.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.6.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.7.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.8.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.9.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.10.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.11.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.12.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.13.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.14.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.15.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.16.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.17.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.18.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.19.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.20.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.21.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.22.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.23.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.24.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.25.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.26.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.27.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.28.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.29.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.30.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.31.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.32.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.33.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.34.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.35.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.36.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.37.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.38.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.39.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.40.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.41.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.42.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.43.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.44.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.45.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.46.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.47.11.47.67.111.109.109.111.110.47.100.110.115|70|1000 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.48.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.49.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.50.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.51.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.52.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.53.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.54.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.55.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.56.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.57.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.58.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.59.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.60.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.61.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.62.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.63.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.64.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.65.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.66.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.67.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.68.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.14.2.3.1.69.11.47.67.111.109.109.111.110.47.100.110.115|70|0 +1.3.6.1.4.1.3375.2.2.6.15.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.15.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.15.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.15.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.15.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.15.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.15.6.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.17.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.1.12.47.67.111.109.109.111.110.47.114.116.115.112|4x|2f436f6d6d6f6e2f72747370 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.2.12.47.67.111.109.109.111.110.47.114.116.115.112|2|1 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.3.12.47.67.111.109.109.111.110.47.114.116.115.112|4| +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.4.12.47.67.111.109.109.111.110.47.114.116.115.112|66|300 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.5.12.47.67.111.109.109.111.110.47.114.116.115.112|66|4096 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.6.12.47.67.111.109.109.111.110.47.114.116.115.112|66|32768 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.7.12.47.67.111.109.109.111.110.47.114.116.115.112|2|0 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.8.12.47.67.111.109.109.111.110.47.114.116.115.112|2|0 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.9.12.47.67.111.109.109.111.110.47.114.116.115.112|2|0 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.10.12.47.67.111.109.109.111.110.47.114.116.115.112|2|1 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.11.12.47.67.111.109.109.111.110.47.114.116.115.112|2|0 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.12.12.47.67.111.109.109.111.110.47.114.116.115.112|4| +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.13.12.47.67.111.109.109.111.110.47.114.116.115.112|66|0 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.14.12.47.67.111.109.109.111.110.47.114.116.115.112|66|0 +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.15.12.47.67.111.109.109.111.110.47.114.116.115.112|4| +1.3.6.1.4.1.3375.2.2.6.17.1.2.1.16.12.47.67.111.109.109.111.110.47.114.116.115.112|4| +1.3.6.1.4.1.3375.2.2.6.17.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.17.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.17.2.3.1.1.12.47.67.111.109.109.111.110.47.114.116.115.112|4x|2f436f6d6d6f6e2f72747370 +1.3.6.1.4.1.3375.2.2.6.17.2.3.1.2.12.47.67.111.109.109.111.110.47.114.116.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.17.2.3.1.3.12.47.67.111.109.109.111.110.47.114.116.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.17.2.3.1.4.12.47.67.111.109.109.111.110.47.114.116.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.17.2.3.1.5.12.47.67.111.109.109.111.110.47.114.116.115.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.1.12.47.67.111.109.109.111.110.47.115.99.116.112|4x|2f436f6d6d6f6e2f73637470 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.2.12.47.67.111.109.109.111.110.47.115.99.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.3.12.47.67.111.109.109.111.110.47.115.99.116.112|4| +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.4.12.47.67.111.109.109.111.110.47.115.99.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.5.12.47.67.111.109.109.111.110.47.115.99.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.6.12.47.67.111.109.109.111.110.47.115.99.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.7.12.47.67.111.109.109.111.110.47.115.99.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.8.12.47.67.111.109.109.111.110.47.115.99.116.112|66|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.9.12.47.67.111.109.109.111.110.47.115.99.116.112|66|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.10.12.47.67.111.109.109.111.110.47.115.99.116.112|66|65536 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.11.12.47.67.111.109.109.111.110.47.115.99.116.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.12.12.47.67.111.109.109.111.110.47.115.99.116.112|66|256 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.13.12.47.67.111.109.109.111.110.47.115.99.116.112|66|256 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.14.12.47.67.111.109.109.111.110.47.115.99.116.112|66|60 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.15.12.47.67.111.109.109.111.110.47.115.99.116.112|66|8 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.16.12.47.67.111.109.109.111.110.47.115.99.116.112|66|10 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.17.12.47.67.111.109.109.111.110.47.115.99.116.112|66|4096 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.18.12.47.67.111.109.109.111.110.47.115.99.116.112|66|16384 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.19.12.47.67.111.109.109.111.110.47.115.99.116.112|66|300 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.20.12.47.67.111.109.109.111.110.47.115.99.116.112|66|30 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.21.12.47.67.111.109.109.111.110.47.115.99.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.22.12.47.67.111.109.109.111.110.47.115.99.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.23.12.47.67.111.109.109.111.110.47.115.99.116.112|4| +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.24.12.47.67.111.109.109.111.110.47.115.99.116.112|66|4 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.25.12.47.67.111.109.109.111.110.47.115.99.116.112|66|1 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.26.12.47.67.111.109.109.111.110.47.115.99.116.112|66|16 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.27.12.47.67.111.109.109.111.110.47.115.99.116.112|66|5 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.28.12.47.67.111.109.109.111.110.47.115.99.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.29.12.47.67.111.109.109.111.110.47.115.99.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.30.12.47.67.111.109.109.111.110.47.115.99.116.112|66|3000 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.31.12.47.67.111.109.109.111.110.47.115.99.116.112|66|1000 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.32.12.47.67.111.109.109.111.110.47.115.99.116.112|66|60000 +1.3.6.1.4.1.3375.2.2.6.18.1.2.1.33.12.47.67.111.109.109.111.110.47.115.99.116.112|66|200 +1.3.6.1.4.1.3375.2.2.6.18.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.18.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.1.12.47.67.111.109.109.111.110.47.115.99.116.112|4x|2f436f6d6d6f6e2f73637470 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.2.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.3.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.4.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.5.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.6.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.7.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.8.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.9.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.10.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.11.12.47.67.111.109.109.111.110.47.115.99.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.12.12.47.67.111.109.109.111.110.47.115.99.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.13.12.47.67.111.109.109.111.110.47.115.99.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.14.12.47.67.111.109.109.111.110.47.115.99.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.15.12.47.67.111.109.109.111.110.47.115.99.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.16.12.47.67.111.109.109.111.110.47.115.99.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.18.2.3.1.17.12.47.67.111.109.109.111.110.47.115.99.116.112|66|0 +1.3.6.1.4.1.3375.2.2.6.19.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.19.1.2.1.1.13.47.67.111.109.109.111.110.47.115.116.97.116.115|4x|2f436f6d6d6f6e2f7374617473 +1.3.6.1.4.1.3375.2.2.6.19.1.2.1.2.13.47.67.111.109.109.111.110.47.115.116.97.116.115|2|1 +1.3.6.1.4.1.3375.2.2.6.19.1.2.1.3.13.47.67.111.109.109.111.110.47.115.116.97.116.115|4| +1.3.6.1.4.1.3375.2.2.6.19.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.19.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.20.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.1.11.47.67.111.109.109.111.110.47.115.105.112|4x|2f436f6d6d6f6e2f736970 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.2.11.47.67.111.109.109.111.110.47.115.105.112|2|1 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.3.11.47.67.111.109.109.111.110.47.115.105.112|4| +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.4.11.47.67.111.109.109.111.110.47.115.105.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.5.11.47.67.111.109.109.111.110.47.115.105.112|2|1 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.6.11.47.67.111.109.109.111.110.47.115.105.112|2|0 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.7.11.47.67.111.109.109.111.110.47.115.105.112|2|0 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.8.11.47.67.111.109.109.111.110.47.115.105.112|2|0 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.9.11.47.67.111.109.109.111.110.47.115.105.112|2|0 +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.10.11.47.67.111.109.109.111.110.47.115.105.112|4| +1.3.6.1.4.1.3375.2.2.6.20.1.2.1.11.11.47.67.111.109.109.111.110.47.115.105.112|4| +1.3.6.1.4.1.3375.2.2.6.20.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.20.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.20.2.3.1.1.11.47.67.111.109.109.111.110.47.115.105.112|4x|2f436f6d6d6f6e2f736970 +1.3.6.1.4.1.3375.2.2.6.20.2.3.1.2.11.47.67.111.109.109.111.110.47.115.105.112|70|0 +1.3.6.1.4.1.3375.2.2.6.20.2.3.1.3.11.47.67.111.109.109.111.110.47.115.105.112|70|0 +1.3.6.1.4.1.3375.2.2.6.20.2.3.1.4.11.47.67.111.109.109.111.110.47.115.105.112|70|0 +1.3.6.1.4.1.3375.2.2.6.20.2.3.1.5.11.47.67.111.109.109.111.110.47.115.105.112|70|0 +1.3.6.1.4.1.3375.2.2.6.21.1.1.0|2|4 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.1.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f6973657373696f6e +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.1.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|4x|2f436f6d6d6f6e2f6973657373696f6e2d6d617069 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.1.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|4x|2f436f6d6d6f6e2f6973657373696f6e2d656e6372797074 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.1.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|4x|2f436f6d6d6f6e2f6973657373696f6e2d736f6674776f63 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.2.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.2.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.2.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.2.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.3.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.3.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.3.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.3.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.4.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.4.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.4.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.4.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.5.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.5.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.5.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.5.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.6.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.6.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.6.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.6.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.7.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.7.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.7.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.7.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.8.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.8.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.8.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.8.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.9.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.9.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.9.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.9.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.10.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|3 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.10.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|3 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.10.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|3 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.10.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|3 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.11.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.11.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|4| +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.11.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|4| +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.11.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|4| +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.12.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|66|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.12.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|66|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.12.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|66|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.12.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|66|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.13.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.13.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.13.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.13.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|0 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.14.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.14.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.14.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.14.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|2|1 +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.15.16.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110|4x|6465666c6174652c6c7a6f2c627a6970322c +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.15.21.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.109.97.112.105|4x|6465666c6174652c6c7a6f2c627a6970322c +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.15.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.101.110.99.114.121.112.116|4x|6465666c6174652c6c7a6f2c627a6970322c +1.3.6.1.4.1.3375.2.2.6.21.1.2.1.15.24.47.67.111.109.109.111.110.47.105.115.101.115.115.105.111.110.45.115.111.102.116.119.111.99|4x|6465666c6174652c6c7a6f2c627a6970322c +1.3.6.1.4.1.3375.2.2.6.21.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.21.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.1.0|2|2 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.1.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f68747470636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.1.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f77616e2d6f7074696d697a65642d636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.2.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.2.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.3.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.3.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f68747470636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.4.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.4.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.5.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|1024 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.5.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|1024 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.6.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|4096 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.6.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|131072 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.7.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.7.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.8.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.8.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.9.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|8192 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.9.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|16384 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.10.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|16384 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.10.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|65536 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.11.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.11.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.12.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.12.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.13.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.13.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.14.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.14.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.15.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|90 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.15.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|90 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.16.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|66|75 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.16.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|66|75 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.17.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.1.2.1.17.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.22.2.1.0|2|2 +1.3.6.1.4.1.3375.2.2.6.22.2.2.1.1.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.1|4x|2f436f6d6d6f6e2f68747470636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.2.2.1.1.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.1|4x|2f436f6d6d6f6e2f77616e2d6f7074696d697a65642d636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.2.2.1.2.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.1|2|1 +1.3.6.1.4.1.3375.2.2.6.22.2.2.1.2.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.1|2|1 +1.3.6.1.4.1.3375.2.2.6.22.2.2.1.3.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.1|4x|2e2a +1.3.6.1.4.1.3375.2.2.6.22.2.2.1.3.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.1|4x|2e2a +1.3.6.1.4.1.3375.2.2.6.22.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.22.4.1.0|2|4 +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.1.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.1|4x|2f436f6d6d6f6e2f68747470636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.1.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.2|4x|2f436f6d6d6f6e2f68747470636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.1.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.1|4x|2f436f6d6d6f6e2f77616e2d6f7074696d697a65642d636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.1.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.2|4x|2f436f6d6d6f6e2f77616e2d6f7074696d697a65642d636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.2.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.1|2|1 +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.2.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.2|2|2 +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.2.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.1|2|1 +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.2.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.2|2|2 +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.3.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.1|4x|746578742f +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.3.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110.2|4x|6170706c69636174696f6e2f28786d6c7c782d6a61766173637269707429 +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.3.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.1|4x|746578742f +1.3.6.1.4.1.3375.2.2.6.22.4.2.1.3.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110.2|4x|6170706c69636174696f6e2f28786d6c7c782d6a61766173637269707429 +1.3.6.1.4.1.3375.2.2.6.22.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.22.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.22.6.2.0|2|2 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.1.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f68747470636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.1.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f77616e2d6f7074696d697a65642d636f6d7072657373696f6e +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.2.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.2.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.3.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.3.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.4.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.4.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.5.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.5.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.6.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.6.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.7.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.7.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.8.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.8.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.9.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.9.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.10.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.10.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.11.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.11.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.12.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.12.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.13.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.13.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.14.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.14.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.15.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.15.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.16.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.16.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.17.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.17.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.18.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.18.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.19.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.19.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.20.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.20.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.21.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.21.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.22.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.22.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.23.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.23.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.24.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.24.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.25.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.25.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.26.23.47.67.111.109.109.111.110.47.104.116.116.112.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.22.6.3.1.26.33.47.67.111.109.109.111.110.47.119.97.110.45.111.112.116.105.109.105.122.101.100.45.99.111.109.112.114.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.1.1.0|2|4 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.1.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f776562616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.1.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|4x|2f436f6d6d6f6e2f6f7074696d697a65642d63616368696e67 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.1.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|4x|2f436f6d6d6f6e2f61706d2d656e64757365722d69662d6361636865 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.1.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f6f7074696d697a65642d616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.2.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.2.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.2.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.2.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.3.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.3.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|4x|2f436f6d6d6f6e2f776562616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.3.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|4x|2f436f6d6d6f6e2f776562616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.3.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f776562616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.4.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|66|100 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.4.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|66|10 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.4.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|66|50 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.4.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|66|6144 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.5.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|66|10000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.5.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|66|10000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.5.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|66|1000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.5.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|66|10000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.6.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|66|3600 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.6.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|66|86400 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.6.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|66|36000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.6.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|66|3600 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.7.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|66|500 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.7.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|66|0 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.7.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|66|5 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.7.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.8.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|66|50000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.8.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|66|2000000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.8.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|66|12000000 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.8.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|66|67108864 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.9.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|2|2 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.9.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|2|2 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.9.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|2|2 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.9.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|2|2 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.10.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|66|9 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.10.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|66|9 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.10.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|66|9 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.10.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|66|9 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.11.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.11.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.11.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|2|1 +1.3.6.1.4.1.3375.2.2.6.23.1.2.1.11.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.23.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.23.3.1.0|2|4 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.1.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110.1|4x|2f436f6d6d6f6e2f776562616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.1.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103.1|4x|2f436f6d6d6f6e2f6f7074696d697a65642d63616368696e67 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.1.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101.1|4x|2f436f6d6d6f6e2f61706d2d656e64757365722d69662d6361636865 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.1.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110.1|4x|2f436f6d6d6f6e2f6f7074696d697a65642d616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.2.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110.1|2|1 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.2.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103.1|2|1 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.2.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101.1|2|1 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.2.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110.1|2|1 +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.3.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110.1|4x|2e2a +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.3.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103.1|4x|2e2a +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.3.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101.1|4x|2e2a +1.3.6.1.4.1.3375.2.2.6.23.3.2.1.3.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110.1|4x|2e2a +1.3.6.1.4.1.3375.2.2.6.23.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.23.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.23.5.2.0|2|4 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.1.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f776562616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.1.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|4x|2f436f6d6d6f6e2f6f7074696d697a65642d63616368696e67 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.1.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|4x|2f436f6d6d6f6e2f61706d2d656e64757365722d69662d6361636865 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.1.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|4x|2f436f6d6d6f6e2f6f7074696d697a65642d616363656c65726174696f6e +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.2.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.2.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.2.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.2.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.3.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.3.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.3.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.3.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.4.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.4.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.4.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.4.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.5.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.5.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.5.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.5.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.6.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.6.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.6.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.6.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.7.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.7.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.7.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.7.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.8.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.8.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.8.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.8.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.9.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.9.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.9.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.9.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.10.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.10.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.10.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.10.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.11.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.11.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.11.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.11.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.12.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.12.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.12.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.12.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.13.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.13.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.13.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.13.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.14.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.14.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.14.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.14.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.15.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.15.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.15.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.15.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.16.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.16.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.16.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.16.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.17.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.17.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.17.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.17.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.18.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.18.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.18.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.18.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.19.23.47.67.111.109.109.111.110.47.119.101.98.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.19.25.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.99.97.99.104.105.110.103|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.19.28.47.67.111.109.109.111.110.47.97.112.109.45.101.110.100.117.115.101.114.45.105.102.45.99.97.99.104.101|70|0 +1.3.6.1.4.1.3375.2.2.6.23.5.3.1.19.30.47.67.111.109.109.111.110.47.111.112.116.105.109.105.122.101.100.45.97.99.99.101.108.101.114.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.23.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.24.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.24.1.2.1.1.11.47.67.111.109.109.111.110.47.100.111.115|4x|2f436f6d6d6f6e2f646f73 +1.3.6.1.4.1.3375.2.2.6.24.1.2.1.2.11.47.67.111.109.109.111.110.47.100.111.115|2|1 +1.3.6.1.4.1.3375.2.2.6.24.1.2.1.3.11.47.67.111.109.109.111.110.47.100.111.115|4| +1.3.6.1.4.1.3375.2.2.6.24.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.24.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.24.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.24.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.25.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.25.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.25.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.25.3.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.26.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.1.12.47.67.111.109.109.111.110.47.118.54.114.100|4x|2f436f6d6d6f6e2f76367264 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.2.12.47.67.111.109.109.111.110.47.118.54.114.100|2|1 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.3.12.47.67.111.109.109.111.110.47.118.54.114.100|4| +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.4.12.47.67.111.109.109.111.110.47.118.54.114.100|2|1 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.5.12.47.67.111.109.109.111.110.47.118.54.114.100|4x|00000000 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.6.12.47.67.111.109.109.111.110.47.118.54.114.100|66|0 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.7.12.47.67.111.109.109.111.110.47.118.54.114.100|2|2 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.8.12.47.67.111.109.109.111.110.47.118.54.114.100|4x|00000000000000000000000000000000 +1.3.6.1.4.1.3375.2.2.6.26.1.2.1.9.12.47.67.111.109.109.111.110.47.118.54.114.100|66|56 +1.3.6.1.4.1.3375.2.2.6.27.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.1.12.47.67.111.109.109.111.110.47.112.112.116.112|4x|2f436f6d6d6f6e2f70707470 +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.2.12.47.67.111.109.109.111.110.47.112.112.116.112|4| +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.3.12.47.67.111.109.109.111.110.47.112.112.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.4.12.47.67.111.109.109.111.110.47.112.112.116.112|4| +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.5.12.47.67.111.109.109.111.110.47.112.112.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.6.12.47.67.111.109.109.111.110.47.112.112.116.112|4| +1.3.6.1.4.1.3375.2.2.6.27.1.2.1.7.12.47.67.111.109.109.111.110.47.112.112.116.112|2|0 +1.3.6.1.4.1.3375.2.2.6.27.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.27.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.1.12.47.67.111.109.109.111.110.47.112.112.116.112|4x|2f436f6d6d6f6e2f70707470 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.2.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.3.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.4.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.5.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.6.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.7.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.8.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.9.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.10.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.11.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.12.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.13.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.14.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.15.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.27.2.3.1.16.12.47.67.111.109.109.111.110.47.112.112.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.28.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.28.2.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.1.11.47.67.111.109.109.111.110.47.112.99.112|4x|2f436f6d6d6f6e2f706370 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.2.11.47.67.111.109.109.111.110.47.112.99.112|2|1 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.3.11.47.67.111.109.109.111.110.47.112.99.112|4| +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.4.11.47.67.111.109.109.111.110.47.112.99.112|66|5351 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.5.11.47.67.111.109.109.111.110.47.112.99.112|66|5350 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.6.11.47.67.111.109.109.111.110.47.112.99.112|66|600 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.7.11.47.67.111.109.109.111.110.47.112.99.112|66|86400 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.8.11.47.67.111.109.109.111.110.47.112.99.112|66|60 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.9.11.47.67.111.109.109.111.110.47.112.99.112|66|65535 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.10.11.47.67.111.109.109.111.110.47.112.99.112|66|1 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.11.11.47.67.111.109.109.111.110.47.112.99.112|2|0 +1.3.6.1.4.1.3375.2.2.6.28.2.2.1.12.11.47.67.111.109.109.111.110.47.112.99.112|4| +1.3.6.1.4.1.3375.2.2.6.28.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.28.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.28.4.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.29.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.1.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|4x|2f436f6d6d6f6e2f616c675f6c6f675f70726f66696c65 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.2.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|4| +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.3.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.4.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|4| +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.5.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.6.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.7.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.8.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.9.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.29.1.2.1.10.23.47.67.111.109.109.111.110.47.97.108.103.95.108.111.103.95.112.114.111.102.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.29.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.29.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.29.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.29.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.30.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.1.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|4x|2f436f6d6d6f6e2f6c736e5f6c6f675f70726f66696c65 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.2.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|4| +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.3.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.4.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|4| +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.5.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.6.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.7.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|1 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.8.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.9.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.10.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|2 +1.3.6.1.4.1.3375.2.2.6.30.1.2.1.11.23.47.67.111.109.109.111.110.47.108.115.110.95.108.111.103.95.112.114.111.102.105.108.101|2|0 +1.3.6.1.4.1.3375.2.2.6.30.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.30.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.31.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.31.1.2.1.1.12.47.67.111.109.109.111.110.47.116.102.116.112|4x|2f436f6d6d6f6e2f74667470 +1.3.6.1.4.1.3375.2.2.6.31.1.2.1.2.12.47.67.111.109.109.111.110.47.116.102.116.112|2|1 +1.3.6.1.4.1.3375.2.2.6.31.1.2.1.3.12.47.67.111.109.109.111.110.47.116.102.116.112|4| +1.3.6.1.4.1.3375.2.2.6.31.1.2.1.4.12.47.67.111.109.109.111.110.47.116.102.116.112|66|30 +1.3.6.1.4.1.3375.2.2.6.31.1.2.1.5.12.47.67.111.109.109.111.110.47.116.102.116.112|4| +1.3.6.1.4.1.3375.2.2.6.31.1.2.1.6.12.47.67.111.109.109.111.110.47.116.102.116.112|4| +1.3.6.1.4.1.3375.2.2.6.31.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.31.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.31.2.3.1.1.12.47.67.111.109.109.111.110.47.116.102.116.112|4x|2f436f6d6d6f6e2f74667470 +1.3.6.1.4.1.3375.2.2.6.31.2.3.1.2.12.47.67.111.109.109.111.110.47.116.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.31.2.3.1.3.12.47.67.111.109.109.111.110.47.116.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.31.2.3.1.4.12.47.67.111.109.109.111.110.47.116.102.116.112|70|0 +1.3.6.1.4.1.3375.2.2.6.32.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.1.13.47.67.111.109.109.111.110.47.104.116.116.112.50|4x|2f436f6d6d6f6e2f6874747032 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.2.13.47.67.111.109.109.111.110.47.104.116.116.112.50|2|1 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.3.13.47.67.111.109.109.111.110.47.104.116.116.112.50|4| +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.4.13.47.67.111.109.109.111.110.47.104.116.116.112.50|2|0 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.5.13.47.67.111.109.109.111.110.47.104.116.116.112.50|4x|582d4854545032 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.6.13.47.67.111.109.109.111.110.47.104.116.116.112.50|66|10 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.7.13.47.67.111.109.109.111.110.47.104.116.116.112.50|66|300 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.8.13.47.67.111.109.109.111.110.47.104.116.116.112.50|66|32 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.9.13.47.67.111.109.109.111.110.47.104.116.116.112.50|66|2048 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.10.13.47.67.111.109.109.111.110.47.104.116.116.112.50|66|16384 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.11.13.47.67.111.109.109.111.110.47.104.116.116.112.50|66|4096 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.12.13.47.67.111.109.109.111.110.47.104.116.116.112.50|2|1 +1.3.6.1.4.1.3375.2.2.6.32.1.2.1.13.13.47.67.111.109.109.111.110.47.104.116.116.112.50|2|0 +1.3.6.1.4.1.3375.2.2.6.32.2.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.32.2.2.1.1.13.47.67.111.109.109.111.110.47.104.116.116.112.50.1|4x|2f436f6d6d6f6e2f6874747032 +1.3.6.1.4.1.3375.2.2.6.32.2.2.1.2.13.47.67.111.109.109.111.110.47.104.116.116.112.50.1|2|1 +1.3.6.1.4.1.3375.2.2.6.32.2.2.1.3.13.47.67.111.109.109.111.110.47.104.116.116.112.50.1|2|0 +1.3.6.1.4.1.3375.2.2.6.32.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.32.3.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.1.13.47.67.111.109.109.111.110.47.104.116.116.112.50|4x|2f436f6d6d6f6e2f6874747032 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.2.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.3.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.4.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.5.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.6.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.7.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.8.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.9.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.10.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.11.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.12.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.13.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.14.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.15.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.16.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.17.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.18.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.19.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.20.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.21.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.22.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.23.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.24.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.25.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.26.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.27.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.28.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.29.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.30.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.31.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.32.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.33.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.34.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.35.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.32.3.3.1.36.13.47.67.111.109.109.111.110.47.104.116.116.112.50|70|0 +1.3.6.1.4.1.3375.2.2.6.33.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.33.1.2.1.1.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|4x|2f436f6d6d6f6e2f776562736f636b6574 +1.3.6.1.4.1.3375.2.2.6.33.1.2.1.2.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|2|1 +1.3.6.1.4.1.3375.2.2.6.33.1.2.1.3.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|4| +1.3.6.1.4.1.3375.2.2.6.33.1.2.1.4.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|2|3 +1.3.6.1.4.1.3375.2.2.6.33.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.33.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.1.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|4x|2f436f6d6d6f6e2f776562736f636b6574 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.2.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.3.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.4.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.5.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.6.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.7.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.8.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.9.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.10.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.11.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.12.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.13.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.14.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.15.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.16.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.17.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.18.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.19.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.20.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.21.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.22.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.23.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.24.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.25.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.26.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.27.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.33.2.3.1.28.17.47.67.111.109.109.111.110.47.119.101.98.115.111.99.107.101.116|70|0 +1.3.6.1.4.1.3375.2.2.6.34.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.1.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|4x|2f436f6d6d6f6e2f7463702d616e616c7974696373 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.2.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.3.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|4| +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.4.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.5.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.6.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.7.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.8.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.9.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.10.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.11.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.12.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.13.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.14.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|1 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.15.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|2|0 +1.3.6.1.4.1.3375.2.2.6.34.1.2.1.16.21.47.67.111.109.109.111.110.47.116.99.112.45.97.110.97.108.121.116.105.99.115|4| +1.3.6.1.4.1.3375.2.2.6.35.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.1.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|4x|2f436f6d6d6f6e2f6970736563616c67 +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.2.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|2|1 +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.3.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|4| +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.4.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|66|3600 +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.5.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|66|5 +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.6.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|66|3 +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.7.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|4| +1.3.6.1.4.1.3375.2.2.6.35.1.2.1.8.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|4| +1.3.6.1.4.1.3375.2.2.6.35.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.35.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.35.2.3.1.1.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|4x|2f436f6d6d6f6e2f6970736563616c67 +1.3.6.1.4.1.3375.2.2.6.35.2.3.1.2.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|70|0 +1.3.6.1.4.1.3375.2.2.6.35.2.3.1.3.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|70|0 +1.3.6.1.4.1.3375.2.2.6.35.2.3.1.4.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|70|0 +1.3.6.1.4.1.3375.2.2.6.35.2.3.1.5.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|70|0 +1.3.6.1.4.1.3375.2.2.6.35.2.3.1.6.16.47.67.111.109.109.111.110.47.105.112.115.101.99.97.108.103|70|0 +1.3.6.1.4.1.3375.2.2.6.36.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.36.1.2.1.1.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|4x|2f436f6d6d6f6e2f73706c697473657373696f6e636c69656e74 +1.3.6.1.4.1.3375.2.2.6.36.1.2.1.2.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|2|1 +1.3.6.1.4.1.3375.2.2.6.36.1.2.1.3.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|4| +1.3.6.1.4.1.3375.2.2.6.36.1.2.1.4.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|2|0 +1.3.6.1.4.1.3375.2.2.6.36.1.2.1.5.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|66|0 +1.3.6.1.4.1.3375.2.2.6.36.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.36.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.1.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|4x|2f436f6d6d6f6e2f73706c697473657373696f6e636c69656e74 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.2.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.3.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.4.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.5.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.6.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.7.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.8.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.36.2.3.1.9.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.99.108.105.101.110.116|70|0 +1.3.6.1.4.1.3375.2.2.6.37.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.37.1.2.1.1.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|4x|2f436f6d6d6f6e2f73706c697473657373696f6e736572766572 +1.3.6.1.4.1.3375.2.2.6.37.1.2.1.2.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|2|1 +1.3.6.1.4.1.3375.2.2.6.37.1.2.1.3.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|4| +1.3.6.1.4.1.3375.2.2.6.37.1.2.1.4.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|2|0 +1.3.6.1.4.1.3375.2.2.6.37.1.2.1.5.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|66|0 +1.3.6.1.4.1.3375.2.2.6.37.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.37.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.1.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|4x|2f436f6d6d6f6e2f73706c697473657373696f6e736572766572 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.2.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.3.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.4.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.5.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.6.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.7.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.8.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.37.2.3.1.9.26.47.67.111.109.109.111.110.47.115.112.108.105.116.115.101.115.115.105.111.110.115.101.114.118.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.38.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.38.1.2.1.1.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|4x|2f436f6d6d6f6e2f687474702d70726f78792d636f6e6e656374 +1.3.6.1.4.1.3375.2.2.6.38.1.2.1.2.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|2|1 +1.3.6.1.4.1.3375.2.2.6.38.1.2.1.3.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|4| +1.3.6.1.4.1.3375.2.2.6.38.1.2.1.4.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|2|1 +1.3.6.1.4.1.3375.2.2.6.38.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.38.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.1.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|4x|2f436f6d6d6f6e2f687474702d70726f78792d636f6e6e656374 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.2.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.3.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.4.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.5.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.6.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.7.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.8.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.9.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.38.2.3.1.10.26.47.67.111.109.109.111.110.47.104.116.116.112.45.112.114.111.120.121.45.99.111.110.110.101.99.116|70|0 +1.3.6.1.4.1.3375.2.2.6.39.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.1.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f6469616d6574657273657373696f6e +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.2.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.3.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.4.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.5.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|10 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.6.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.7.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.8.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.9.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|5 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.10.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.11.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.12.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|1024 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.13.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|131072 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.14.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|90 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.15.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|60 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.16.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.17.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.18.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|30 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.19.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.20.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|1 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.21.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4x|53455353494f4e2d49445b305d +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.22.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|180 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.23.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.24.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.25.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.26.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.27.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.28.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.29.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.30.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|3375 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.31.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.32.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.33.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.34.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.35.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.36.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.37.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.38.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.39.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.40.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.41.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.42.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.43.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.44.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.45.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|2|0 +1.3.6.1.4.1.3375.2.2.6.39.1.2.1.46.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|66|300 +1.3.6.1.4.1.3375.2.2.6.39.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.39.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.1.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4x|2f436f6d6d6f6e2f6469616d6574657273657373696f6e +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.2.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|4| +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.3.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.4.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.5.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.6.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.7.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.8.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.9.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.10.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.11.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.12.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.13.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.14.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.15.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.16.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.17.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.18.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.19.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.20.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.21.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.22.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.23.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.24.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.25.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.26.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.27.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.28.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.29.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.30.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.31.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.32.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.33.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.34.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.35.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.36.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.37.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.38.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.39.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.40.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.41.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.42.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.43.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.44.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.45.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.46.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.39.2.3.1.47.23.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.115.101.115.115.105.111.110|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.1.0|2|1 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.1.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|4x|2f436f6d6d6f6e2f6469616d65746572726f75746572 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.2.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|2|1 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.3.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|4| +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.4.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.5.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|4x|2f436f6d6d6f6e2f747261666669632d67726f75702d31 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.6.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.7.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.8.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.9.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.10.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.11.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.12.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.13.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.14.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.15.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|2|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.16.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|2|0 +1.3.6.1.4.1.3375.2.2.6.40.1.2.1.17.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|2|0 +1.3.6.1.4.1.3375.2.2.6.40.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.40.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.1.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|4x|2f436f6d6d6f6e2f6469616d65746572726f75746572 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.2.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|4| +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.3.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.4.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.5.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.6.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.7.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.8.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.9.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.10.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.11.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.12.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.13.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.14.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.15.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.16.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.17.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.18.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.19.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.20.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.21.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.22.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.23.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.24.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.25.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.26.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.27.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.28.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.29.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.30.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.31.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.32.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.33.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.34.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.35.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.36.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.37.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|70|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.38.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|66|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.39.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|66|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.40.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|66|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.41.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|66|0 +1.3.6.1.4.1.3375.2.2.6.40.2.3.1.42.22.47.67.111.109.109.111.110.47.100.105.97.109.101.116.101.114.114.111.117.116.101.114|66|0 +1.3.6.1.4.1.3375.2.2.6.41.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.41.1.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.41.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.41.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.42.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.42.1.2.0|2|2 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.1.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|4x|2f436f6d6d6f6e2f73697073657373696f6e +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.1.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|4x|2f436f6d6d6f6e2f73697073657373696f6e2d616c67 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.2.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|4| +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.2.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|4| +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.3.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.3.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.4.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.4.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.5.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.5.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.6.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.6.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.7.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.7.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.8.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.8.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.9.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.9.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.10.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.10.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.11.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.11.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.12.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.12.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.13.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.13.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.14.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.14.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.15.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.15.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.16.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.16.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.17.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.17.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.18.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.18.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.19.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.19.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.20.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.20.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.21.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.21.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.22.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.22.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.23.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.23.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.24.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.24.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.25.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.25.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.26.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.26.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.27.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.27.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.28.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.28.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.29.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.29.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.30.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.30.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.31.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.31.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.32.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.32.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.33.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.33.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.34.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.34.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.35.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.35.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.36.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.36.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.37.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.37.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.38.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.38.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.39.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.39.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.40.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.40.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.41.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.41.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.42.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.42.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.43.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.43.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.44.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.44.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.45.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.45.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.46.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.46.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.47.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.47.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.48.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.48.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.49.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.49.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.50.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.50.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.51.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.51.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.52.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.52.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.53.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.53.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.54.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.54.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.55.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.55.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.56.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.56.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.57.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.57.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.58.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.58.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.59.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.59.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.60.18.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.0|70|0 +1.3.6.1.4.1.3375.2.2.6.42.1.3.1.60.22.47.67.111.109.109.111.110.47.115.105.112.115.101.115.115.105.111.110.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.43.1.2.0|2|2 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.1.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|4x|2f436f6d6d6f6e2f736970726f75746572 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.1.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|4x|2f436f6d6d6f6e2f736970726f757465722d616c67 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.2.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|4| +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.2.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|4| +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.3.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.3.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.4.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.4.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.5.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.5.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.6.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.6.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.7.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.7.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.8.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.8.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.9.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.9.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.10.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.10.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.11.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.11.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.12.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.12.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.13.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.13.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.14.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.14.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.15.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.15.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.16.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.16.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.17.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.17.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.18.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.18.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.19.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.19.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.20.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.20.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.21.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.21.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.22.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.22.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.23.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.23.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.24.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.24.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.25.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.25.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.26.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.26.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.27.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.27.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.28.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.28.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.29.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.29.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.30.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.30.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.31.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.31.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.32.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.32.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.33.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.33.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.34.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.34.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.35.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.35.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.36.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.36.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.37.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.37.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|70|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.38.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.38.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.39.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.39.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.40.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.40.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.41.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.41.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.42.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.42.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.43.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.43.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.44.17.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.0|66|0 +1.3.6.1.4.1.3375.2.2.6.43.1.3.1.44.21.47.67.111.109.109.111.110.47.115.105.112.114.111.117.116.101.114.45.97.108.103.0|66|0 +1.3.6.1.4.1.3375.2.2.6.44.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.44.1.2.0|2|0 +1.3.6.1.4.1.3375.2.2.6.44.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.6.44.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.7.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.7.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.7.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.8.1.1.0|2|15 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f6c646170 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115|4x|2f436f6d6d6f6e2f5f7379735f617574685f726164697573 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115|4x|2f436f6d6d6f6e2f5f7379735f617574685f746163616373 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116|4x|2f436f6d6d6f6e2f5f7379735f68747470735f7265646972656374 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f68656c706572 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.1.2.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104|4| +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104|2|1 +1.3.6.1.4.1.3375.2.2.8.1.2.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104|2|1 +1.3.6.1.4.1.3375.2.2.8.2.1.0|2|58 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6c646170 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6c646170 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f726164697573 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f726164697573 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f746163616373 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f746163616373 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f68747470735f7265646972656374 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f68656c706572 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f68656c706572 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|434c49454e5453534c5f48414e445348414b45 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|434c49454e5453534c5f434c49454e5443455254 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|434c49454e5453534c5f48414e445348414b45 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|434c49454e5453534c5f434c49454e5443455254 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|434c49454e5453534c5f48414e445348414b45 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|434c49454e5453534c5f434c49454e5443455254 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|4x|485454505f524553504f4e53455f44415441 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|4x|485454505f524551554553545f44415441 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|4x|4543415f524551554553545f44454e494544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|4x|4543415f524551554553545f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|4x|485454505f524553504f4e53455f52454c45415345 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.2.2.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4| +1.3.6.1.4.1.3375.2.2.8.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.8.3.2.0|2|58 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6c646170 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6c646170 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f726164697573 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f726164697573 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f746163616373 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f746163616373 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f6f637370 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f61637469766573796e63 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63726c6470 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f68747470735f7265646972656374 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f6b726264656c6567617465 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|2f436f6d6d6f6e2f5f7379735f617574685f73736c5f63635f6c646170 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f6d61696e +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f68656c706572 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f68656c706572 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4d535f4f66666963655f4f4642415f537570706f7274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f4f66666963653336355f53414d4c5f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f4e746c6d41757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.1.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|2f436f6d6d6f6e2f5f7379735f41504d5f45786368616e6765537570706f72745f4f415f426173696341757468 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|434c49454e5453534c5f48414e445348414b45 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|434c49454e5453534c5f434c49454e5443455254 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|434c49454e5453534c5f48414e445348414b45 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|434c49454e5453534c5f434c49454e5443455254 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|4x|415554485f524553554c54 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|4x|434c49454e5453534c5f48414e445348414b45 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|4x|434c49454e5453534c5f434c49454e5443455254 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|4x|485454505f524553504f4e53455f44415441 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|4x|485454505f524551554553545f44415441 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|4x|434c49454e545f4143434550544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|4x|485454505f524553504f4e5345 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|4x|4543415f524551554553545f44454e494544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|4x|4543415f524551554553545f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|4x|485454505f524553504f4e53455f52454c45415345 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|4x|52554c455f494e4954 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|4x|485454505f52455155455354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|4x|4143434553535f41434c5f414c4c4f574544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|4x|4143434553535f53455353494f4e5f53544152544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.2.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|4x|4143434553535f504f4c4943595f434f4d504c45544544 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.3.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|2|500 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.4.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.5.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|66|2 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|66|2 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|66|2 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|2 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|2 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|2 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.6.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|66|23274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|66|73498 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|66|18894 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|10988 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|49644 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|27400 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.7.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|66|23274 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|66|73498 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|66|18894 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|10988 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|49644 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|27400 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.8.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.22.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.108.100.97.112.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.114.97.100.105.117.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.24.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.116.97.99.97.99.115.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.26.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.111.99.115.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.9.82.85.76.69.95.73.78.73.84.500|66|14118 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.97.99.116.105.118.101.115.121.110.99.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.114.108.100.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.27.47.67.111.109.109.111.110.47.95.115.121.115.95.104.116.116.112.115.95.114.101.100.105.114.101.99.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.107.114.98.100.101.108.101.103.97.116.101.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.11.65.85.84.72.95.82.69.83.85.76.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.19.67.76.73.69.78.84.83.83.76.95.72.65.78.68.83.72.65.75.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.29.47.67.111.109.109.111.110.47.95.115.121.115.95.97.117.116.104.95.115.115.108.95.99.99.95.108.100.97.112.20.67.76.73.69.78.84.83.83.76.95.67.76.73.69.78.84.67.69.82.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.9.82.85.76.69.95.73.78.73.84.500|66|41056 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.18.72.84.84.80.95.82.69.83.80.79.78.83.69.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.37.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.109.97.105.110.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.104.101.108.112.101.114.17.72.84.84.80.95.82.69.81.85.69.83.84.95.68.65.84.65.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.9.82.85.76.69.95.73.78.73.84.500|66|15918 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.15.67.76.73.69.78.84.95.65.67.67.69.80.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.39.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.77.83.95.79.102.102.105.99.101.95.79.70.66.65.95.83.117.112.112.111.114.116.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|3342 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.13.72.84.84.80.95.82.69.83.80.79.78.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.41.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.79.102.102.105.99.101.51.54.53.95.83.65.77.76.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|33224 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.18.69.67.65.95.82.69.81.85.69.83.84.95.68.69.78.73.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.19.69.67.65.95.82.69.81.85.69.83.84.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.21.72.84.84.80.95.82.69.83.80.79.78.83.69.95.82.69.76.69.65.83.69.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.44.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.78.116.108.109.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.9.82.85.76.69.95.73.78.73.84.500|66|17354 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.12.72.84.84.80.95.82.69.81.85.69.83.84.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.18.65.67.67.69.83.83.95.65.67.76.95.65.76.76.79.87.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.22.65.67.67.69.83.83.95.83.69.83.83.73.79.78.95.83.84.65.82.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.8.3.3.1.9.45.47.67.111.109.109.111.110.47.95.115.121.115.95.65.80.77.95.69.120.99.104.97.110.103.101.83.117.112.112.111.114.116.95.79.65.95.66.97.115.105.99.65.117.116.104.23.65.67.67.69.83.83.95.80.79.76.73.67.89.95.67.79.77.80.76.69.84.69.68.500|66|0 +1.3.6.1.4.1.3375.2.2.9.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.9.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.6.2.0|2|0 +1.3.6.1.4.1.3375.2.2.9.7.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.8.1.0|2|0 +1.3.6.1.4.1.3375.2.2.9.8.2.0|2|0 +1.3.6.1.4.1.3375.2.2.9.9.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.1.1|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.1.1|4x|73657276657231 +1.3.6.1.4.1.3375.2.2.10.1.2.1.1.2|4x|73657276657232 +1.3.6.1.4.1.3375.2.2.10.1.2.1.1.3|4x|73657276657233 +1.3.6.1.4.1.3375.2.2.10.1.2.1.2.1|2|16 +1.3.6.1.4.1.3375.2.2.10.1.2.1.2.2|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.2.3|2|16 +1.3.6.1.4.1.3375.2.2.10.1.2.1.3.1|4x|4a61646564204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.3375.2.2.10.1.2.1.3.2|4x|7468656972206163746564206b657074206275742064726976696e67206b657074207a6f6d626965732064726976696e6720627574 +1.3.6.1.4.1.3375.2.2.10.1.2.1.3.3|4x|627574206b657074204a61646564207a6f6d62696573206275742061637465642074686569722064726976696e67 +1.3.6.1.4.1.3375.2.2.10.1.2.1.4.1|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.4.2|2|16 +1.3.6.1.4.1.3375.2.2.10.1.2.1.4.3|2|4 +1.3.6.1.4.1.3375.2.2.10.1.2.1.5.1|4x|64726976696e67207468656972206275742064726976696e67206b657074206163746564206275742064726976696e67 +1.3.6.1.4.1.3375.2.2.10.1.2.1.5.2|4x|717561696e746c79206163746564204a61646564206b65707420627574204a61646564206163746564207a6f6d62696573 +1.3.6.1.4.1.3375.2.2.10.1.2.1.5.3|4x|62757420666f7277617264206b6570742064726976696e67204a61646564206163746564207a6f6d6269657320616374656420627574 +1.3.6.1.4.1.3375.2.2.10.1.2.1.6.1|66|38658 +1.3.6.1.4.1.3375.2.2.10.1.2.1.6.2|66|3512 +1.3.6.1.4.1.3375.2.2.10.1.2.1.6.3|66|55345 +1.3.6.1.4.1.3375.2.2.10.1.2.1.7.1|2|24 +1.3.6.1.4.1.3375.2.2.10.1.2.1.7.2|2|20 +1.3.6.1.4.1.3375.2.2.10.1.2.1.7.3|2|20 +1.3.6.1.4.1.3375.2.2.10.1.2.1.8.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.8.2|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.8.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.9.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.9.2|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.9.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.10.1|2|27 +1.3.6.1.4.1.3375.2.2.10.1.2.1.10.2|2|15 +1.3.6.1.4.1.3375.2.2.10.1.2.1.10.3|2|16 +1.3.6.1.4.1.3375.2.2.10.1.2.1.11.1|4|their +1.3.6.1.4.1.3375.2.2.10.1.2.1.11.2|4x|7468656972206b65707420717561696e746c79 +1.3.6.1.4.1.3375.2.2.10.1.2.1.11.3|4x|6b657074204a61646564207a6f6d62696573206f78656e207a6f6d62696573206163746564206b657074206163746564204a61646564 +1.3.6.1.4.1.3375.2.2.10.1.2.1.12.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.12.2|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.12.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.13.1|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.13.2|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.13.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.14.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.14.2|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.14.3|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.15.1|2|5 +1.3.6.1.4.1.3375.2.2.10.1.2.1.15.2|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.15.3|2|2 +1.3.6.1.4.1.3375.2.2.10.1.2.1.16.1|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.16.2|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.16.3|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.17.1|4x|64726976696e6720666f727761726420666f7277617264206b65707420666f727761726420627574 +1.3.6.1.4.1.3375.2.2.10.1.2.1.17.2|4x|746865697220627574207a6f6d6269657320666f72776172642064726976696e67207a6f6d62696573206f78656e +1.3.6.1.4.1.3375.2.2.10.1.2.1.17.3|4|kept +1.3.6.1.4.1.3375.2.2.10.1.2.1.18.1|4x|6275742064726976696e6720746865697220666f7277617264 +1.3.6.1.4.1.3375.2.2.10.1.2.1.18.2|4x|6f78656e206163746564 +1.3.6.1.4.1.3375.2.2.10.1.2.1.18.3|4x|717561696e746c79206163746564206f78656e206b657074 +1.3.6.1.4.1.3375.2.2.10.1.2.1.19.1|4x|746865697220616374656420627574206b65707420627574206f78656e207a6f6d62696573204a61646564207468656972 +1.3.6.1.4.1.3375.2.2.10.1.2.1.19.2|4x|6f78656e20666f7277617264207468656972 +1.3.6.1.4.1.3375.2.2.10.1.2.1.19.3|4|their +1.3.6.1.4.1.3375.2.2.10.1.2.1.20.1|4|forward +1.3.6.1.4.1.3375.2.2.10.1.2.1.20.2|4x|4a6164656420717561696e746c79206b657074 +1.3.6.1.4.1.3375.2.2.10.1.2.1.20.3|4x|4a61646564206f78656e206b657074207468656972204a61646564206b657074206b657074206f78656e +1.3.6.1.4.1.3375.2.2.10.1.2.1.21.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.21.2|2|2 +1.3.6.1.4.1.3375.2.2.10.1.2.1.21.3|2|2 +1.3.6.1.4.1.3375.2.2.10.1.2.1.22.1|2|2 +1.3.6.1.4.1.3375.2.2.10.1.2.1.22.2|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.22.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.23.1|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.23.2|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.23.3|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.24.1|2|19 +1.3.6.1.4.1.3375.2.2.10.1.2.1.24.2|2|23 +1.3.6.1.4.1.3375.2.2.10.1.2.1.24.3|2|22 +1.3.6.1.4.1.3375.2.2.10.1.2.1.25.1|4x|746865697220717561696e746c79206b657074206275742064726976696e6720616374656420666f7277617264 +1.3.6.1.4.1.3375.2.2.10.1.2.1.25.2|4x|6f78656e20666f7277617264206b65707420717561696e746c7920746865697220666f727761726420627574 +1.3.6.1.4.1.3375.2.2.10.1.2.1.25.3|4x|64726976696e67206163746564206163746564 +1.3.6.1.4.1.3375.2.2.10.1.2.1.26.1|2|5 +1.3.6.1.4.1.3375.2.2.10.1.2.1.26.2|2|22 +1.3.6.1.4.1.3375.2.2.10.1.2.1.26.3|2|17 +1.3.6.1.4.1.3375.2.2.10.1.2.1.27.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.27.2|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.27.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.28.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.28.2|2|2 +1.3.6.1.4.1.3375.2.2.10.1.2.1.28.3|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.29.1|4x|717561696e746c792064726976696e67204a61646564 +1.3.6.1.4.1.3375.2.2.10.1.2.1.29.2|4x|616374656420666f727761726420717561696e746c7920666f7277617264 +1.3.6.1.4.1.3375.2.2.10.1.2.1.29.3|4x|4a6164656420616374656420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.3375.2.2.10.1.2.1.30.1|2|1 +1.3.6.1.4.1.3375.2.2.10.1.2.1.30.2|2|3 +1.3.6.1.4.1.3375.2.2.10.1.2.1.30.3|2|0 +1.3.6.1.4.1.3375.2.2.10.1.2.1.31.1|4x|666f727761726420717561696e746c79 +1.3.6.1.4.1.3375.2.2.10.1.2.1.31.2|4x|7a6f6d6269657320616374656420666f727761726420717561696e746c792064726976696e67206163746564204a61646564207a6f6d62696573204a61646564 +1.3.6.1.4.1.3375.2.2.10.1.2.1.31.3|4x|64726976696e67207a6f6d62696573 +1.3.6.1.4.1.3375.2.2.10.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.10.2.3.1.1.1|4x|73657276657231 +1.3.6.1.4.1.3375.2.2.10.2.3.1.1.2|4x|73657276657232 +1.3.6.1.4.1.3375.2.2.10.2.3.1.1.3|4x|73657276657233 +1.3.6.1.4.1.3375.2.2.10.2.3.1.2.1|70|2580586026032579311 +1.3.6.1.4.1.3375.2.2.10.2.3.1.2.2|70|11172384268660140173 +1.3.6.1.4.1.3375.2.2.10.2.3.1.2.3|70|2553084130791286975 +1.3.6.1.4.1.3375.2.2.10.2.3.1.3.1|70|15792062180538603785 +1.3.6.1.4.1.3375.2.2.10.2.3.1.3.2|70|15754815062660405643 +1.3.6.1.4.1.3375.2.2.10.2.3.1.3.3|70|12278313780530470535 +1.3.6.1.4.1.3375.2.2.10.2.3.1.4.1|70|5455173712922532263 +1.3.6.1.4.1.3375.2.2.10.2.3.1.4.2|70|8840963685073062340 +1.3.6.1.4.1.3375.2.2.10.2.3.1.4.3|70|5210751663333912746 +1.3.6.1.4.1.3375.2.2.10.2.3.1.5.1|70|1547624629512812205 +1.3.6.1.4.1.3375.2.2.10.2.3.1.5.2|70|5611498479154160049 +1.3.6.1.4.1.3375.2.2.10.2.3.1.5.3|70|7562156278071364496 +1.3.6.1.4.1.3375.2.2.10.2.3.1.6.1|70|11904678965118907281 +1.3.6.1.4.1.3375.2.2.10.2.3.1.6.2|70|12423310789449570600 +1.3.6.1.4.1.3375.2.2.10.2.3.1.6.3|70|9408615615154226361 +1.3.6.1.4.1.3375.2.2.10.2.3.1.7.1|70|11896327715836113592 +1.3.6.1.4.1.3375.2.2.10.2.3.1.7.2|70|10531590820499310087 +1.3.6.1.4.1.3375.2.2.10.2.3.1.7.3|70|3625339555017798429 +1.3.6.1.4.1.3375.2.2.10.2.3.1.8.1|70|6954252997748630202 +1.3.6.1.4.1.3375.2.2.10.2.3.1.8.2|70|1010745241446359894 +1.3.6.1.4.1.3375.2.2.10.2.3.1.8.3|70|13431017896535443743 +1.3.6.1.4.1.3375.2.2.10.2.3.1.9.1|70|1167353241621793737 +1.3.6.1.4.1.3375.2.2.10.2.3.1.9.2|70|12909311763102489665 +1.3.6.1.4.1.3375.2.2.10.2.3.1.9.3|70|16533040197473517198 +1.3.6.1.4.1.3375.2.2.10.2.3.1.10.1|70|10635963925216629400 +1.3.6.1.4.1.3375.2.2.10.2.3.1.10.2|70|8494103292982450244 +1.3.6.1.4.1.3375.2.2.10.2.3.1.10.3|70|8042290749796396792 +1.3.6.1.4.1.3375.2.2.10.2.3.1.11.1|70|6410999672064202998 +1.3.6.1.4.1.3375.2.2.10.2.3.1.11.2|70|3349618053620684874 +1.3.6.1.4.1.3375.2.2.10.2.3.1.11.3|70|2212534891855846905 +1.3.6.1.4.1.3375.2.2.10.2.3.1.12.1|66|3946087105 +1.3.6.1.4.1.3375.2.2.10.2.3.1.12.2|66|1436622959 +1.3.6.1.4.1.3375.2.2.10.2.3.1.12.3|66|3431368676 +1.3.6.1.4.1.3375.2.2.10.2.3.1.13.1|70|6853310783815423725 +1.3.6.1.4.1.3375.2.2.10.2.3.1.13.2|70|11831962685014470387 +1.3.6.1.4.1.3375.2.2.10.2.3.1.13.3|70|1099514653487860763 +1.3.6.1.4.1.3375.2.2.10.2.3.1.14.1|70|1563356245765348881 +1.3.6.1.4.1.3375.2.2.10.2.3.1.14.2|70|13293349144712173171 +1.3.6.1.4.1.3375.2.2.10.2.3.1.14.3|70|6796586915286827084 +1.3.6.1.4.1.3375.2.2.10.2.3.1.15.1|70|4216244675325337046 +1.3.6.1.4.1.3375.2.2.10.2.3.1.15.2|70|6760305275432328057 +1.3.6.1.4.1.3375.2.2.10.2.3.1.15.3|70|18295941540901000727 +1.3.6.1.4.1.3375.2.2.10.2.3.1.16.1|70|1856990584099225311 +1.3.6.1.4.1.3375.2.2.10.2.3.1.16.2|70|6745395210649643206 +1.3.6.1.4.1.3375.2.2.10.2.3.1.16.3|70|11905655143255909628 +1.3.6.1.4.1.3375.2.2.10.2.3.1.17.1|70|12196755595568264176 +1.3.6.1.4.1.3375.2.2.10.2.3.1.17.2|70|5457540154927269641 +1.3.6.1.4.1.3375.2.2.10.2.3.1.17.3|70|11074415824410376018 +1.3.6.1.4.1.3375.2.2.10.2.3.1.18.1|70|5898617446408699136 +1.3.6.1.4.1.3375.2.2.10.2.3.1.18.2|70|8041714224746929584 +1.3.6.1.4.1.3375.2.2.10.2.3.1.18.3|70|16182431002550700483 +1.3.6.1.4.1.3375.2.2.10.2.3.1.19.1|66|1857700894 +1.3.6.1.4.1.3375.2.2.10.2.3.1.19.2|66|2844129800 +1.3.6.1.4.1.3375.2.2.10.2.3.1.19.3|66|1038501472 +1.3.6.1.4.1.3375.2.2.10.2.3.1.20.1|70|2363576342980948065 +1.3.6.1.4.1.3375.2.2.10.2.3.1.20.2|70|11717927443651990072 +1.3.6.1.4.1.3375.2.2.10.2.3.1.20.3|70|6882134045911163708 +1.3.6.1.4.1.3375.2.2.10.2.3.1.21.1|70|13786017861635043472 +1.3.6.1.4.1.3375.2.2.10.2.3.1.21.2|70|7297620963115593822 +1.3.6.1.4.1.3375.2.2.10.2.3.1.21.3|70|1573870296780287764 +1.3.6.1.4.1.3375.2.2.10.2.3.1.22.1|70|18393328365973006250 +1.3.6.1.4.1.3375.2.2.10.2.3.1.22.2|70|17556577878145267364 +1.3.6.1.4.1.3375.2.2.10.2.3.1.22.3|70|12781457142813950719 +1.3.6.1.4.1.3375.2.2.10.2.3.1.23.1|70|17454088778896331207 +1.3.6.1.4.1.3375.2.2.10.2.3.1.23.2|70|9520194793073463464 +1.3.6.1.4.1.3375.2.2.10.2.3.1.23.3|70|6390989416270317085 +1.3.6.1.4.1.3375.2.2.10.2.3.1.24.1|70|18097926869262363750 +1.3.6.1.4.1.3375.2.2.10.2.3.1.24.2|70|10545995722585709224 +1.3.6.1.4.1.3375.2.2.10.2.3.1.24.3|70|16186099239249902953 +1.3.6.1.4.1.3375.2.2.10.2.3.1.25.1|70|9040310437613830590 +1.3.6.1.4.1.3375.2.2.10.2.3.1.25.2|70|13241652256958635623 +1.3.6.1.4.1.3375.2.2.10.2.3.1.25.3|70|15933946765037033473 +1.3.6.1.4.1.3375.2.2.10.2.3.1.26.1|66|1179249442 +1.3.6.1.4.1.3375.2.2.10.2.3.1.26.2|66|3999102161 +1.3.6.1.4.1.3375.2.2.10.2.3.1.26.3|66|3107383744 +1.3.6.1.4.1.3375.2.2.10.2.3.1.27.1|70|18051887574704858142 +1.3.6.1.4.1.3375.2.2.10.2.3.1.27.2|70|1472355937439517287 +1.3.6.1.4.1.3375.2.2.10.2.3.1.27.3|70|11519109541425045302 +1.3.6.1.4.1.3375.2.2.10.2.3.1.28.1|70|2351118743226345413 +1.3.6.1.4.1.3375.2.2.10.2.3.1.28.2|70|17339034100746590056 +1.3.6.1.4.1.3375.2.2.10.2.3.1.28.3|70|7894081204269303338 +1.3.6.1.4.1.3375.2.2.10.2.3.1.29.1|66|610210647 +1.3.6.1.4.1.3375.2.2.10.2.3.1.29.2|66|334284393 +1.3.6.1.4.1.3375.2.2.10.2.3.1.29.3|66|3223932671 +1.3.6.1.4.1.3375.2.2.10.2.3.1.30.1|70|3267903350213335055 +1.3.6.1.4.1.3375.2.2.10.2.3.1.30.2|70|8314689465581065799 +1.3.6.1.4.1.3375.2.2.10.2.3.1.30.3|70|3461167602433649282 +1.3.6.1.4.1.3375.2.2.10.2.3.1.31.1|66|1552348694 +1.3.6.1.4.1.3375.2.2.10.2.3.1.31.2|66|2791266744 +1.3.6.1.4.1.3375.2.2.10.2.3.1.31.3|66|2160004614 +1.3.6.1.4.1.3375.2.2.10.2.3.1.32.1|66|1313356533 +1.3.6.1.4.1.3375.2.2.10.2.3.1.32.2|66|161112621 +1.3.6.1.4.1.3375.2.2.10.2.3.1.32.3|66|2983257280 +1.3.6.1.4.1.3375.2.2.10.2.3.1.33.1|66|1271665 +1.3.6.1.4.1.3375.2.2.10.2.3.1.33.2|66|4279932656 +1.3.6.1.4.1.3375.2.2.10.2.3.1.33.3|66|3288475630 +1.3.6.1.4.1.3375.2.2.10.2.3.1.34.1|66|3431690411 +1.3.6.1.4.1.3375.2.2.10.2.3.1.34.2|66|3750787822 +1.3.6.1.4.1.3375.2.2.10.2.3.1.34.3|66|986384471 +1.3.6.1.4.1.3375.2.2.10.2.3.1.35.1|66|3549469545 +1.3.6.1.4.1.3375.2.2.10.2.3.1.35.2|66|2894852545 +1.3.6.1.4.1.3375.2.2.10.2.3.1.35.3|66|840685738 +1.3.6.1.4.1.3375.2.2.10.2.3.1.36.1|70|10486552149431810547 +1.3.6.1.4.1.3375.2.2.10.2.3.1.36.2|70|3711836186712418901 +1.3.6.1.4.1.3375.2.2.10.2.3.1.36.3|70|10641863315444780199 +1.3.6.1.4.1.3375.2.2.10.2.3.1.37.1|70|7376301973141724708 +1.3.6.1.4.1.3375.2.2.10.2.3.1.37.2|70|10274176580546164106 +1.3.6.1.4.1.3375.2.2.10.2.3.1.37.3|70|4564848346832334322 +1.3.6.1.4.1.3375.2.2.10.2.3.1.38.1|70|16193568503839840899 +1.3.6.1.4.1.3375.2.2.10.2.3.1.38.2|70|672041460910788479 +1.3.6.1.4.1.3375.2.2.10.2.3.1.38.3|70|705928104456245194 +1.3.6.1.4.1.3375.2.2.10.2.3.1.39.1|70|15084732081104670673 +1.3.6.1.4.1.3375.2.2.10.2.3.1.39.2|70|6864319675147449985 +1.3.6.1.4.1.3375.2.2.10.2.3.1.39.3|70|9626321255861958057 +1.3.6.1.4.1.3375.2.2.10.2.3.1.40.1|70|3426361594601433499 +1.3.6.1.4.1.3375.2.2.10.2.3.1.40.2|70|5214377143184129447 +1.3.6.1.4.1.3375.2.2.10.2.3.1.40.3|70|1517991149375241786 +1.3.6.1.4.1.3375.2.2.10.2.3.1.41.1|70|5003274961088843167 +1.3.6.1.4.1.3375.2.2.10.2.3.1.41.2|70|16215270448109783567 +1.3.6.1.4.1.3375.2.2.10.2.3.1.41.3|70|9591593966216159496 +1.3.6.1.4.1.3375.2.2.10.2.3.1.42.1|70|12185235582057905886 +1.3.6.1.4.1.3375.2.2.10.2.3.1.42.2|70|16854096751786027431 +1.3.6.1.4.1.3375.2.2.10.2.3.1.42.3|70|17691355834692394059 +1.3.6.1.4.1.3375.2.2.10.2.3.1.43.1|70|871171362435151199 +1.3.6.1.4.1.3375.2.2.10.2.3.1.43.2|70|4084164868006869894 +1.3.6.1.4.1.3375.2.2.10.2.3.1.43.3|70|5149252869214112432 +1.3.6.1.4.1.3375.2.2.10.2.3.1.44.1|70|16679303338660545854 +1.3.6.1.4.1.3375.2.2.10.2.3.1.44.2|70|18363262408418279750 +1.3.6.1.4.1.3375.2.2.10.2.3.1.44.3|70|4865543542526736536 +1.3.6.1.4.1.3375.2.2.10.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.7.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.8.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.9.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.10.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.11.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.11.2.0|2|0 +1.3.6.1.4.1.3375.2.2.10.12.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.13.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.14.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.15.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.16.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.16.2.0|2|0 +1.3.6.1.4.1.3375.2.2.10.17.1.0|2|0 +1.3.6.1.4.1.3375.2.2.10.17.2.0|2|0 +1.3.6.1.4.1.3375.2.2.11.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.11.1.2.0|2|3 +1.3.6.1.4.1.3375.2.2.11.1.3.1.1.1|2|1 +1.3.6.1.4.1.3375.2.2.11.1.3.1.1.2|2|2 +1.3.6.1.4.1.3375.2.2.11.1.3.1.1.3|2|3 +1.3.6.1.4.1.3375.2.2.11.1.3.1.2.1|4x|4e6f20666c6f7720666f756e6420666f722041434b +1.3.6.1.4.1.3375.2.2.11.1.3.1.2.2|4x|4e6f206c6f63616c206c697374656e6572 +1.3.6.1.4.1.3375.2.2.11.1.3.1.2.3|4x|544350205253542066726f6d2072656d6f74652073797374656d +1.3.6.1.4.1.3375.2.2.11.1.3.1.3.1|70|4 +1.3.6.1.4.1.3375.2.2.11.1.3.1.3.2|70|131 +1.3.6.1.4.1.3375.2.2.11.1.3.1.3.3|70|2 +1.3.6.1.4.1.3375.2.2.12.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.12.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.4.2.0|2|0 +1.3.6.1.4.1.3375.2.2.12.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.7.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.7.2.0|2|0 +1.3.6.1.4.1.3375.2.2.12.8.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.8.2.0|2|0 +1.3.6.1.4.1.3375.2.2.12.9.1.0|2|0 +1.3.6.1.4.1.3375.2.2.12.10.1.0|2|0 +1.3.6.1.4.1.3375.2.2.13.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.13.1.2.0|2|0 +1.3.6.1.4.1.3375.2.2.14.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.4.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.5.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.6.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.6.2.0|2|0 +1.3.6.1.4.1.3375.2.2.14.7.1.0|2|0 +1.3.6.1.4.1.3375.2.2.14.7.2.0|2|0 +1.3.6.1.4.1.3375.2.2.15.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.15.1.2.0|2|0 +1.3.6.1.4.1.3375.2.2.15.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.15.2.2.0|2|1 +1.3.6.1.4.1.3375.2.2.15.2.3.1.1.9.47.67.111.109.109.111.110.47.48|4x|2f436f6d6d6f6e2f30 +1.3.6.1.4.1.3375.2.2.15.2.3.1.2.9.47.67.111.109.109.111.110.47.48|66|0 +1.3.6.1.4.1.3375.2.2.15.2.3.1.3.9.47.67.111.109.109.111.110.47.48|70|0 +1.3.6.1.4.1.3375.2.2.15.2.3.1.4.9.47.67.111.109.109.111.110.47.48|70|479385 +1.3.6.1.4.1.3375.2.2.15.2.3.1.5.9.47.67.111.109.109.111.110.47.48|70|47074715 +1.3.6.1.4.1.3375.2.2.15.2.3.1.6.9.47.67.111.109.109.111.110.47.48|70|507385 +1.3.6.1.4.1.3375.2.2.15.2.3.1.7.9.47.67.111.109.109.111.110.47.48|70|366882150 +1.3.6.1.4.1.3375.2.2.15.2.3.1.8.9.47.67.111.109.109.111.110.47.48|70|32 +1.3.6.1.4.1.3375.2.2.15.2.3.1.9.9.47.67.111.109.109.111.110.47.48|70|59617 +1.3.6.1.4.1.3375.2.2.15.2.3.1.10.9.47.67.111.109.109.111.110.47.48|66|2 +1.3.6.1.4.1.3375.2.2.15.2.3.1.11.9.47.67.111.109.109.111.110.47.48|70|0 +1.3.6.1.4.1.3375.2.2.15.2.3.1.12.9.47.67.111.109.109.111.110.47.48|70|0 +1.3.6.1.4.1.3375.2.2.15.2.3.1.13.9.47.67.111.109.109.111.110.47.48|70|8121108 +1.3.6.1.4.1.3375.2.2.15.2.3.1.14.9.47.67.111.109.109.111.110.47.48|70|685758772 +1.3.6.1.4.1.3375.2.2.15.2.3.1.15.9.47.67.111.109.109.111.110.47.48|70|8085044 +1.3.6.1.4.1.3375.2.2.15.2.3.1.16.9.47.67.111.109.109.111.110.47.48|70|351315737 +1.3.6.1.4.1.3375.2.2.15.2.3.1.17.9.47.67.111.109.109.111.110.47.48|70|32 +1.3.6.1.4.1.3375.2.2.15.2.3.1.18.9.47.67.111.109.109.111.110.47.48|70|59617 +1.3.6.1.4.1.3375.2.2.15.2.3.1.19.9.47.67.111.109.109.111.110.47.48|66|2 +1.3.6.1.4.1.3375.2.2.15.2.3.1.20.9.47.67.111.109.109.111.110.47.48|70|0 +1.3.6.1.4.1.3375.2.2.15.2.3.1.21.9.47.67.111.109.109.111.110.47.48|70|0 +1.3.6.1.4.1.3375.2.2.16.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.16.1.2.0|2|0 +1.3.6.1.4.1.3375.2.2.16.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.17.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.18.1.1.0|2|0 +1.3.6.1.4.1.3375.2.2.18.2.1.0|2|0 +1.3.6.1.4.1.3375.2.2.18.2.2.0|2|0 +1.3.6.1.4.1.3375.2.2.18.3.1.0|2|0 +1.3.6.1.4.1.3375.2.2.18.3.2.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.2.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.3.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.4.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.5.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.6.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.7.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.8.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.9.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.10.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.11.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.12.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.13.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.14.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.15.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.16.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.17.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.18.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.19.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.20.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.21.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.22.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.23.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.24.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.25.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.26.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.27.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.28.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.29.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.30.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.31.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.32.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.33.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.34.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.35.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.36.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.37.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.38.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.39.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.40.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.41.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.42.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.43.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.44.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.45.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.46.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.47.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.48.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.49.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.50.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.51.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.52.0|4| +1.3.6.1.4.1.3375.2.3.1.1.1.53.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.54.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.55.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.56.0|2|0 +1.3.6.1.4.1.3375.2.3.1.1.1.57.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.58.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.59.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.60.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.61.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.62.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.1.63.0|66|0 +1.3.6.1.4.1.3375.2.3.1.1.2.1.0|2|1 +1.3.6.1.4.1.3375.2.3.1.1.2.2.1.1.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115.1|2|1 +1.3.6.1.4.1.3375.2.3.1.1.2.2.1.2.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115.1|2|0 +1.3.6.1.4.1.3375.2.3.1.1.2.2.1.3.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115.1|4x|2f436f6d6d6f6e2f67746d2d73657474696e6773 +1.3.6.1.4.1.3375.2.3.1.1.3.1.0|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.1.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.2.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.3.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.4.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.5.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.6.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.7.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.8.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.9.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.10.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|2 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.11.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.12.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.13.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.14.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.15.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|10000 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.16.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|25 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.17.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|10000 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.18.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|10000 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.19.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1000000 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.20.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.21.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|10 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.22.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.23.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|120 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.24.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|30 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.25.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|3600 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.26.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|12 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.27.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.28.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.29.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|2400 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.30.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|604800 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.31.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|2419200 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.32.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|604800 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.33.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|3 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.34.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|64 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.35.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|3 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.36.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|20 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.37.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|33434 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.38.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.39.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.40.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|95 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.41.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|90 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.42.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|95 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.43.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.44.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.45.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.46.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.47.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.48.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.49.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.50.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.51.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.52.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|4|default +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.53.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|180 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.54.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|300 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.55.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|10 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.56.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.57.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.58.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|32 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.59.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|128 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.60.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|1 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.61.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|10 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.62.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.63.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|66|0 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.64.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|4x|2f436f6d6d6f6e2f67746d2d73657474696e6773 +1.3.6.1.4.1.3375.2.3.1.1.3.2.1.65.20.47.67.111.109.109.111.110.47.103.116.109.45.115.101.116.116.105.110.103.115|2|0 +1.3.6.1.4.1.3375.2.3.1.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.1.2.1.2.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.3.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.4.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.5.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.6.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.7.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.8.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.9.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.10.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.11.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.12.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.13.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.14.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.15.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.16.0|66|0 +1.3.6.1.4.1.3375.2.3.1.2.1.17.0|66|0 +1.3.6.1.4.1.3375.2.3.1.2.1.18.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.19.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.20.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.1.21.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.1.2.2.2.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.3.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.4.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.5.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.6.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.7.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.8.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.9.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.10.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.11.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.12.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.13.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.14.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.15.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.16.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.17.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.18.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.19.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.20.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.21.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.22.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.23.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.24.0|70|0 +1.3.6.1.4.1.3375.2.3.1.2.2.25.0|70|0 +1.3.6.1.4.1.3375.2.3.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.2.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.2.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.2.4.1.0|2|0 +1.3.6.1.4.1.3375.2.3.2.5.1.0|2|0 +1.3.6.1.4.1.3375.2.3.3.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.3.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.3.2.2.0|2|0 +1.3.6.1.4.1.3375.2.3.3.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.4.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.2.2.0|2|0 +1.3.6.1.4.1.3375.2.3.6.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.4.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.5.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.6.1.0|2|0 +1.3.6.1.4.1.3375.2.3.6.6.2.0|2|0 +1.3.6.1.4.1.3375.2.3.6.7.1.0|2|0 +1.3.6.1.4.1.3375.2.3.7.1.1.0|2|12 +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.11.47.67.111.109.109.111.110.47.65.79.76|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.11.47.67.111.109.109.111.110.47.67.78.67|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67|4x|2f436f6d6d6f6e2f5368616e67686169434e43 +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.1.2.1.1.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.11.47.67.111.109.109.111.110.47.65.79.76|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.11.47.67.111.109.109.111.110.47.67.78.67|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109|2|2 +1.3.6.1.4.1.3375.2.3.7.1.2.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107|2|2 +1.3.6.1.4.1.3375.2.3.7.2.1.0|2|856 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.53.46.57.51.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.56.46.56.49.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.54.52.46.49.50.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.50.56.46.48.46.48.47.49.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.57.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.57.53.46.57.51.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.54.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.55.50.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.56.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.53.46.49.56.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.15.49.53.50.46.49.54.51.46.57.54.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.49.48.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.48.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.53.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.50.46.54.55.46.54.53.46.49.50.56.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.55.46.50.48.48.46.49.49.50.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.11.54.48.46.48.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.53.56.46.49.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.54.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.51.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.56.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.49.50.52.46.56.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.48.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.52.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.54.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.51.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.52.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.51.50.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.56.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.55.48.46.56.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.49.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.51.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.52.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.50.49.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.52.46.53.54.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.53.46.51.52.46.51.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.49.55.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.50.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.52.48.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.55.46.49.54.48.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.51.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.56.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.50.52.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.55.49.46.49.57.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.51.51.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.52.53.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.48.56.46.49.55.46.51.50.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.49.53.51.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.57.50.46.49.52.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.51.46.50.50.55.46.56.52.46.48.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.49.51.57.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.50.51.50.46.55.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.53.46.51.52.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.54.46.57.56.46.49.50.56.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.56.46.51.57.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.57.46.50.50.51.46.56.54.46.56.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.51.52.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.56.53.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.52.46.49.50.57.46.49.57.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.51.46.50.48.57.46.49.50.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.51.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.53.46.49.54.57.46.50.50.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.50.48.56.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.52.53.46.50.53.46.49.50.48.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.52.46.50.51.56.46.49.57.56.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.56.46.50.48.46.49.48.46.49.50.56.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.49.56.51.46.55.55.46.56.56.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.53.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.56.48.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.53.46.49.55.49.46.49.50.57.46.54.52.47.50.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.54.46.49.55.57.46.53.50.46.50.51.50.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.50.48.55.46.49.53.54.46.53.49.46.49.50.56.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.54.53.46.50.49.54.46.50.53.49.46.49.50.56.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.50.46.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.55.46.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.50.48.56.46.54.46.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.51.46.56.48.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.49.50.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.52.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.53.52.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.56.53.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.57.50.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.50.48.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.55.50.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.51.52.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.55.54.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.50.46.52.56.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.50.46.52.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.52.46.49.54.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.54.54.46.51.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.50.48.52.46.51.49.46.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.49.56.48.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.50.50.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.57.46.48.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.51.50.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.53.54.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.49.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.52.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.56.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.57.54.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.48.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.50.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.51.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.56.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.50.55.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.51.54.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.53.49.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.54.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.57.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.48.53.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.50.56.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.52.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.49.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.54.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.50.52.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.48.52.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.51.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.53.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.50.48.48.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.52.46.49.57.50.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.48.46.51.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.49.46.56.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.51.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.53.46.49.56.55.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.54.46.50.49.54.46.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.49.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.48.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.49.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.50.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.51.48.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.51.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.51.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.54.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.51.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.56.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.48.46.49.50.50.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.51.48.46.50.54.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.49.48.46.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.55.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.49.54.46.50.52.52.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.51.46.49.54.57.46.56.56.46.48.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.49.53.46.56.56.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.49.55.46.57.54.47.50.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.56.46.49.50.56.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.56.46.50.49.49.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.57.46.49.56.50.46.56.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.50.53.48.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.50.56.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.57.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.49.50.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.51.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.53.56.46.49.53.50.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.53.46.49.56.55.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.52.46.57.54.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.53.46.49.54.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.54.46.57.54.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.55.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.48.46.54.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.51.46.56.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.53.50.46.50.52.55.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.50.46.50.48.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.51.46.49.49.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.50.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.50.48.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.49.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.52.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.49.46.50.50.56.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.57.51.46.56.48.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.57.46.49.49.48.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.49.54.46.49.55.53.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.52.46.54.52.46.49.51.56.46.49.50.56.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.49.55.53.46.49.51.54.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.57.54.46.50.50.55.46.51.50.47.50.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.53.46.50.52.50.46.49.57.46.49.54.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.56.46.50.49.49.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.50.46.49.52.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.51.46.49.52.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.49.49.57.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.50.53.48.46.49.50.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.53.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.54.46.49.57.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.55.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.50.52.53.46.49.53.50.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.54.46.49.50.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.50.57.46.49.49.50.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.49.49.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.50.48.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.57.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.51.46.49.50.56.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.56.46.49.57.55.46.50.52.56.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.49.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.50.50.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.57.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.52.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.57.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.49.50.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.53.46.50.52.49.46.52.57.46.50.49.54.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.57.46.50.50.55.46.50.52.48.46.56.56.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.17.50.48.56.46.50.53.51.46.50.52.53.46.57.54.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.18.49.54.53.46.49.50.49.46.50.52.48.46.49.50.48.47.50.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.52.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.53.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.51.50.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.50.46.48.47.50.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.52.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.56.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.48.46.50.52.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.49.46.50.49.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.50.52.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.55.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.57.46.49.53.56.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.11.54.48.46.48.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.49.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.50.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.51.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.49.46.52.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.57.54.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.49.57.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.52.46.50.52.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.49.50.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.50.56.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.52.52.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.49.49.53.46.56.53.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.13.53.56.46.50.52.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.49.48.46.49.51.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.57.46.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.49.46.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.50.46.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.57.46.51.50.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.52.46.57.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.49.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.53.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.51.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.53.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.56.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.56.46.56.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.52.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.54.48.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.56.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.57.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.51.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.52.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.54.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.51.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.56.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.54.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.53.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.57.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.51.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.53.46.54.52.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.48.50.46.57.55.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.48.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.49.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.51.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.55.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.56.46.50.48.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.57.46.49.55.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.49.54.48.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.50.51.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.50.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.52.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.55.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.48.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.54.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.48.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.57.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.52.46.49.48.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.53.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.49.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.56.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.49.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.51.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.52.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.52.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.48.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.52.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.51.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.52.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.53.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.54.48.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.50.52.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.49.49.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.48.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.49.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.50.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.49.49.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.54.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.51.46.50.49.50.46.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.50.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.52.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.53.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.48.46.49.54.48.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.49.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.54.56.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.55.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.48.56.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.52.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.51.52.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.53.57.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.54.49.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.52.57.46.55.46.49.50.56.47.50.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.49.50.50.46.49.48.50.46.56.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.56.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.51.46.49.51.48.46.51.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.48.46.49.57.50.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.50.52.52.46.54.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.54.50.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.57.46.49.53.57.46.54.52.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.51.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.54.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.56.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.57.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.53.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.56.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.57.50.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.55.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.49.57.46.49.53.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.50.49.56.46.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.52.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.54.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.55.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.49.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.49.46.48.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.16.50.50.49.46.50.51.57.46.49.50.56.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.49.55.46.49.50.56.46.48.46.48.47.49.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.50.48.46.49.57.50.46.48.46.48.47.49.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.48.51.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.51.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.56.46.50.48.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.51.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.55.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.49.51.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.54.52.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.51.46.54.52.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.49.49.46.57.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.50.50.46.51.50.46.48.46.48.47.49.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.14.50.50.49.46.49.55.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.15.49.50.50.46.49.51.46.49.50.56.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.12.53.57.46.54.52.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.51.46.53.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.53.46.50.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.49.51.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.54.46.48.46.48.47.49.55|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.55.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.48.46.57.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.49.46.52.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.53.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.51.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.54.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.56.48.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.50.50.46.49.54.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.53.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.57.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.52.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.52.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.54.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.56.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.48.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.50.56.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.51.48.46.48.46.48.47.49.54|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.49.57.50.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.50.52.56.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.50.46.50.48.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.53.46.50.49.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.49.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.50.48.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.57.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.51.56.46.57.54.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.56.46.49.57.50.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.49.54.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.50.52.46.48.46.48.47.49.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.50.46.48.46.48.47.49.53|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.52.46.48.46.48.47.49.52|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.50.50.46.49.57.50.46.48.46.48.47.49.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.50.56.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.54.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.55.54.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.48.46.48.47.50.50|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.52.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.57.50.46.48.47.49.56|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.50.49.46.53.50.46.49.54.48.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.52.48.46.48.47.50.51|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.56.52.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.51.46.57.49.46.49.50.48.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.49.54.46.48.47.50.49|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.50.52.46.48.47.49.57|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.1.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.55.57.46.50.52.48.46.48.47.50.48|2|2 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.53.46.57.51.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.56.46.56.49.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.54.52.46.49.50.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.50.56.46.48.46.48.47.49.48|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.57.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.57.53.46.57.51.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.54.46.48.47.50.51|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.55.50.46.48.47.50.49|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.56.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.53.46.49.56.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.15.49.53.50.46.49.54.51.46.57.54.46.48.47.50.50|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.49.48.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.48.46.48.47.50.49|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.53.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.50.46.54.55.46.54.53.46.49.50.56.47.50.53|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.55.46.50.48.48.46.49.49.50.46.48.47.50.49|4x|2f436f6d6d6f6e2f414f4c +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.11.54.48.46.48.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.53.56.46.49.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.54.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.51.46.48.47.50.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.56.46.48.47.50.49|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.49.50.52.46.56.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.48.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.52.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.54.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.51.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.52.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.51.50.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.56.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.55.48.46.56.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.49.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.51.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.52.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.50.49.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.52.46.53.54.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.53.46.51.52.46.51.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.49.55.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.50.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.52.48.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.55.46.49.54.48.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.51.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.56.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.50.52.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.55.49.46.49.57.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.51.51.46.48.47.50.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.52.53.46.48.47.50.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.48.56.46.49.55.46.51.50.46.48.47.50.50|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.49.53.51.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.57.50.46.49.52.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.51.46.50.50.55.46.56.52.46.48.47.50.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.49.51.57.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.50.51.50.46.55.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.53.46.51.52.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.54.46.57.56.46.49.50.56.46.48.47.50.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.56.46.51.57.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.57.46.50.50.51.46.56.54.46.56.47.50.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.51.52.46.48.47.50.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.56.53.46.48.47.50.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.52.46.49.50.57.46.49.57.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.51.46.50.48.57.46.49.50.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.51.46.48.47.50.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.53.46.49.54.57.46.50.50.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.50.48.56.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.52.53.46.50.53.46.49.50.48.47.50.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.52.46.50.51.56.46.49.57.56.46.48.47.50.52|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.56.46.50.48.46.49.48.46.49.50.56.47.50.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.49.56.51.46.55.55.46.56.56.47.50.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.53.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.56.48.46.48.47.50.50|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.53.46.49.55.49.46.49.50.57.46.54.52.47.50.55|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.54.46.49.55.57.46.53.50.46.50.51.50.47.50.57|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.50.48.55.46.49.53.54.46.53.49.46.49.50.56.47.50.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.54.53.46.50.49.54.46.50.53.49.46.49.50.56.47.50.53|4x|2f436f6d6d6f6e2f436f6d63617374 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.50.46.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.55.46.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.50.48.56.46.54.46.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.51.46.56.48.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.49.50.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.52.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.53.52.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.56.53.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.57.50.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.50.48.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.55.50.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.51.52.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.55.54.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.50.46.52.56.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.50.46.52.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.52.46.49.54.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.54.54.46.51.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.50.48.52.46.51.49.46.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.49.56.48.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.50.50.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.57.46.48.47.50.53|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.51.50.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.53.54.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.49.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.52.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.56.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.57.54.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.48.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.50.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.51.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.56.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.50.55.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.51.54.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.53.49.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.54.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.57.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.48.53.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.50.56.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.52.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.49.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.54.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.50.52.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.48.52.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.51.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.53.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.50.48.48.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.52.46.49.57.50.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.48.46.51.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.49.46.56.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.51.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.53.46.49.56.55.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.54.46.50.49.54.46.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.49.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.48.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.49.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.50.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.51.48.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.51.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.51.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.54.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.51.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.56.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.48.46.49.50.50.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.51.48.46.50.54.46.48.47.50.51|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.49.48.46.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.55.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.49.54.46.50.52.52.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.51.46.49.54.57.46.56.56.46.48.47.50.53|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.49.53.46.56.56.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.49.55.46.57.54.47.50.55|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.56.46.49.50.56.47.50.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.56.46.50.49.49.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.57.46.49.56.50.46.56.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.50.53.48.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.50.56.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.57.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.49.50.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.51.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.53.56.46.49.53.50.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.53.46.49.56.55.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.52.46.57.54.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.53.46.49.54.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.54.46.57.54.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.55.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.48.46.54.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.51.46.56.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.53.50.46.50.52.55.46.48.47.50.52|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.50.46.50.48.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.51.46.49.49.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.50.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.50.48.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.49.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.52.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.49.46.50.50.56.46.48.47.50.50|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.57.51.46.56.48.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.57.46.49.49.48.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.49.54.46.49.55.53.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.52.46.54.52.46.49.51.56.46.49.50.56.47.50.53|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.49.55.53.46.49.51.54.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.57.54.46.50.50.55.46.51.50.47.50.56|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.53.46.50.52.50.46.49.57.46.49.54.47.50.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.56.46.50.49.49.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.50.46.49.52.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.51.46.49.52.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.49.49.57.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.50.53.48.46.49.50.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.53.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.54.46.49.57.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.55.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.50.52.53.46.49.53.50.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.54.46.49.50.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.50.57.46.49.49.50.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.49.49.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.50.48.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.57.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.51.46.49.50.56.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.56.46.49.57.55.46.50.52.56.46.48.47.50.49|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.49.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.50.50.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.57.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.52.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.57.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.49.50.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.53.46.50.52.49.46.52.57.46.50.49.54.47.50.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.57.46.50.50.55.46.50.52.48.46.56.56.47.50.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.17.50.48.56.46.50.53.51.46.50.52.53.46.57.54.47.50.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.18.49.54.53.46.49.50.49.46.50.52.48.46.49.50.48.47.50.57|4x|2f436f6d6d6f6e2f45617274686c696e6b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.52.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.53.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.51.50.46.48.47.50.49|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.50.46.48.47.50.52|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.52.46.48.47.50.50|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.56.46.48.47.50.48|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.48.46.50.52.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.49.46.50.49.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.50.52.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.55.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.57.46.49.53.56.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4265696a696e67434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.11.54.48.46.48.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.49.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.50.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.51.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.49.46.52.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.57.54.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.49.57.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.52.46.50.52.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.49.50.46.48.47.50.49|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.50.56.46.48.47.50.49|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.52.52.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.49.49.53.46.56.53.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61556e69636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.13.53.56.46.50.52.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e67686169434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.49.48.46.49.51.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f5368616e67686169434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f5368616e67686169434e43 +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.57.46.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.49.46.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.50.46.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.57.46.51.50.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.52.46.57.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.49.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.53.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.51.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.53.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.56.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.56.46.56.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.52.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.54.48.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.56.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.57.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.51.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.52.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.54.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.51.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.56.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.54.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.53.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.57.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.51.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.53.46.54.52.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.48.50.46.57.55.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.48.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.49.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.51.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.55.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.56.46.50.48.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.57.46.49.55.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.49.54.48.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.50.51.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.50.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.52.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.55.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.48.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.54.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.48.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.57.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.52.46.49.48.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.53.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.49.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.56.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.49.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.51.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.52.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.52.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.48.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.52.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.51.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.52.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.53.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.54.48.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.50.52.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.49.49.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.48.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.49.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.50.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.49.49.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.54.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.51.46.50.49.50.46.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.50.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.52.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.53.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.48.46.49.54.48.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.49.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.54.56.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.55.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.48.56.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.52.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.51.52.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.53.57.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.54.49.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.52.57.46.55.46.49.50.56.47.50.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.49.50.50.46.49.48.50.46.56.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.56.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.51.46.49.51.48.46.51.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.48.46.49.57.50.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.50.52.52.46.54.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.54.50.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.57.46.49.53.57.46.54.52.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.51.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.54.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.56.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.57.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.53.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.56.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.57.50.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.55.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.49.57.46.49.53.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e6154656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.50.49.56.46.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.52.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.54.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.55.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.49.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.49.46.48.46.48.47.49.56|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.16.50.50.49.46.50.51.57.46.49.50.56.46.48.47.49.55|4x|2f436f6d6d6f6e2f5368616e6768616954656c65636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.49.55.46.49.50.56.46.48.46.48.47.49.48|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.50.48.46.49.57.50.46.48.46.48.47.49.48|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.48.51.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.51.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.56.46.50.48.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.51.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.55.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e614d6f62696c4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.49.51.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.54.52.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.51.46.54.52.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.49.49.46.57.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.50.50.46.51.50.46.48.46.48.47.49.49|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.14.50.50.49.46.49.55.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.15.49.50.50.46.49.51.46.49.50.56.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e615261696c77617954656c636f6d +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.12.53.57.46.54.52.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.51.46.53.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.53.46.50.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.49.51.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.54.46.48.46.48.47.49.55|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.55.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.48.46.57.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.49.46.52.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.53.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.51.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.54.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.56.48.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.50.50.46.49.54.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.53.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.57.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.52.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.52.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.54.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.56.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.48.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.50.56.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.51.48.46.48.46.48.47.49.54|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.49.57.50.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.50.52.56.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.50.46.50.48.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.53.46.50.49.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.49.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.50.48.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.57.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.51.56.46.57.54.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.56.46.49.57.50.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.49.54.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.50.52.46.48.46.48.47.49.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.50.46.48.46.48.47.49.53|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.52.46.48.46.48.47.49.52|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.50.50.46.49.57.50.46.48.46.48.47.49.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.50.56.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.54.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.55.54.46.48.47.50.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.48.46.48.47.50.50|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.52.46.48.47.50.49|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.57.50.46.48.47.49.56|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.50.49.46.53.50.46.49.54.48.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.52.48.46.48.47.50.51|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.56.52.46.48.47.50.49|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.51.46.57.49.46.49.50.48.46.48.47.50.49|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.49.54.46.48.47.50.49|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.50.52.46.48.47.49.57|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.2.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.55.57.46.50.52.48.46.48.47.50.48|4x|2f436f6d6d6f6e2f4368696e61456475636174696f6e4e6574776f726b +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.53.46.57.51.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.56.46.56.49.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.54.52.46.49.50.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.50.56.46.48.46.48.47.49.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.57.53.46.57.51.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.54.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.55.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.53.46.49.56.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.15.49.53.50.46.49.54.51.46.57.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.49.48.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.53.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.50.46.54.55.46.54.53.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.55.46.50.48.48.46.49.49.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.11.54.48.46.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.53.56.46.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.54.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.49.50.52.46.56.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.52.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.55.48.46.56.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.49.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.52.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.50.49.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.52.46.53.54.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.53.46.51.52.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.49.55.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.50.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.52.48.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.55.46.49.54.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.56.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.55.49.46.49.57.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.51.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.52.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.48.56.46.49.55.46.51.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.49.53.51.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.57.50.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.51.46.50.50.55.46.56.52.46.48.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.49.51.57.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.50.51.50.46.55.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.53.46.51.52.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.54.46.57.56.46.49.50.56.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.56.46.51.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.57.46.50.50.51.46.56.54.46.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.51.52.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.56.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.52.46.49.50.57.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.51.46.50.48.57.46.49.50.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.53.46.49.54.57.46.50.50.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.50.48.56.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.52.53.46.50.53.46.49.50.48.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.52.46.50.51.56.46.49.57.56.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.56.46.50.48.46.49.48.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.49.56.51.46.55.55.46.56.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.53.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.56.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.53.46.49.55.49.46.49.50.57.46.54.52.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.54.46.49.55.57.46.53.50.46.50.51.50.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.50.48.55.46.49.53.54.46.53.49.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.54.53.46.50.49.54.46.50.53.49.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.50.46.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.55.46.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.50.48.56.46.54.46.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.51.46.56.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.49.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.52.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.53.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.56.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.57.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.50.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.55.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.51.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.55.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.50.46.52.56.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.50.46.52.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.52.46.49.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.54.54.46.51.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.50.48.52.46.51.49.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.49.56.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.50.50.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.57.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.51.50.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.53.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.49.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.52.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.56.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.57.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.48.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.50.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.51.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.56.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.50.55.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.51.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.53.49.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.54.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.57.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.48.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.50.56.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.52.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.49.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.50.52.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.48.52.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.50.48.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.52.46.49.57.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.48.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.49.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.51.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.53.46.49.56.55.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.54.46.50.49.54.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.49.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.48.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.49.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.50.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.51.48.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.51.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.54.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.48.46.49.50.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.51.48.46.50.54.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.49.48.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.55.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.49.54.46.50.52.52.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.51.46.49.54.57.46.56.56.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.49.53.46.56.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.49.55.46.57.54.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.56.46.49.50.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.56.46.50.49.49.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.57.46.49.56.50.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.50.53.48.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.51.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.53.56.46.49.53.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.53.46.49.56.55.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.52.46.57.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.53.46.49.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.54.46.57.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.55.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.48.46.54.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.51.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.53.50.46.50.52.55.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.50.46.50.48.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.51.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.50.48.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.49.46.50.50.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.57.51.46.56.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.57.46.49.49.48.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.49.54.46.49.55.53.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.52.46.54.52.46.49.51.56.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.49.55.53.46.49.51.54.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.57.54.46.50.50.55.46.51.50.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.53.46.50.52.50.46.49.57.46.49.54.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.56.46.50.49.49.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.50.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.51.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.49.49.57.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.50.53.48.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.53.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.54.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.55.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.50.52.53.46.49.53.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.54.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.50.57.46.49.49.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.50.48.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.51.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.56.46.49.57.55.46.50.52.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.50.50.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.53.46.50.52.49.46.52.57.46.50.49.54.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.57.46.50.50.55.46.50.52.48.46.56.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.17.50.48.56.46.50.53.51.46.50.52.53.46.57.54.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.18.49.54.53.46.49.50.49.46.50.52.48.46.49.50.48.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.53.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.51.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.50.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.48.46.50.52.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.49.46.50.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.50.52.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.55.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.57.46.49.53.56.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.11.54.48.46.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.49.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.50.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.49.46.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.57.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.49.57.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.52.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.49.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.50.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.49.49.53.46.56.53.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.13.53.56.46.50.52.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.49.48.46.49.51.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.57.46.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.49.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.50.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.57.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.52.46.57.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.51.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.53.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.56.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.56.46.56.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.52.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.54.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.56.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.57.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.51.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.52.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.54.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.51.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.53.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.48.50.46.57.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.49.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.56.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.57.46.49.55.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.49.54.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.50.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.50.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.52.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.57.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.52.46.49.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.56.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.51.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.52.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.52.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.54.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.50.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.48.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.49.49.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.54.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.51.46.50.49.50.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.52.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.48.46.49.54.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.49.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.54.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.55.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.52.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.51.52.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.53.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.54.49.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.52.57.46.55.46.49.50.56.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.49.50.50.46.49.48.50.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.56.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.51.46.49.51.48.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.48.46.49.57.50.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.50.52.52.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.54.50.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.57.46.49.53.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.51.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.54.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.56.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.57.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.53.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.56.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.49.57.46.49.53.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.50.49.56.46.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.52.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.55.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.49.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.16.50.50.49.46.50.51.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.49.55.46.49.50.56.46.48.46.48.47.49.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.50.48.46.49.57.50.46.48.46.48.47.49.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.48.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.56.46.50.48.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.55.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.49.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.51.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.49.49.46.57.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.50.50.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.14.50.50.49.46.49.55.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.15.49.50.50.46.49.51.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.12.53.57.46.54.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.51.46.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.53.46.50.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.48.46.57.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.49.46.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.51.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.54.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.50.50.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.48.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.50.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.51.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.50.46.50.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.53.46.50.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.50.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.51.56.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.56.46.49.57.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.50.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.50.50.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.55.54.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.52.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.50.49.46.53.50.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.52.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.56.52.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.51.46.57.49.46.49.50.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.49.54.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.3.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.55.57.46.50.52.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.53.46.57.51.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.56.46.56.49.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.54.52.46.49.50.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.50.56.46.48.46.48.47.49.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.57.53.46.57.51.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.54.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.55.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.53.46.49.56.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.15.49.53.50.46.49.54.51.46.57.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.49.48.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.53.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.50.46.54.55.46.54.53.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.55.46.50.48.48.46.49.49.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.11.54.48.46.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.53.56.46.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.54.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.49.50.52.46.56.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.52.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.55.48.46.56.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.49.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.52.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.50.49.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.52.46.53.54.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.53.46.51.52.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.49.55.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.50.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.52.48.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.55.46.49.54.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.56.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.55.49.46.49.57.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.51.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.52.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.48.56.46.49.55.46.51.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.49.53.51.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.57.50.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.51.46.50.50.55.46.56.52.46.48.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.49.51.57.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.50.51.50.46.55.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.53.46.51.52.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.54.46.57.56.46.49.50.56.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.56.46.51.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.57.46.50.50.51.46.56.54.46.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.51.52.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.56.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.52.46.49.50.57.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.51.46.50.48.57.46.49.50.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.53.46.49.54.57.46.50.50.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.50.48.56.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.52.53.46.50.53.46.49.50.48.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.52.46.50.51.56.46.49.57.56.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.56.46.50.48.46.49.48.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.49.56.51.46.55.55.46.56.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.53.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.56.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.53.46.49.55.49.46.49.50.57.46.54.52.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.54.46.49.55.57.46.53.50.46.50.51.50.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.50.48.55.46.49.53.54.46.53.49.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.54.53.46.50.49.54.46.50.53.49.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.50.46.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.55.46.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.50.48.56.46.54.46.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.51.46.56.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.49.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.52.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.53.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.56.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.57.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.50.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.55.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.51.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.55.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.50.46.52.56.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.50.46.52.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.52.46.49.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.54.54.46.51.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.50.48.52.46.51.49.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.49.56.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.50.50.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.57.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.51.50.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.53.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.49.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.52.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.56.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.57.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.48.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.50.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.51.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.56.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.50.55.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.51.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.53.49.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.54.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.57.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.48.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.50.56.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.52.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.49.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.54.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.50.52.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.48.52.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.51.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.53.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.50.48.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.52.46.49.57.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.48.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.49.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.51.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.53.46.49.56.55.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.54.46.50.49.54.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.49.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.48.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.49.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.50.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.51.48.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.51.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.54.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.51.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.48.46.49.50.50.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.51.48.46.50.54.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.49.48.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.55.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.49.54.46.50.52.52.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.51.46.49.54.57.46.56.56.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.49.53.46.56.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.49.55.46.57.54.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.56.46.49.50.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.56.46.50.49.49.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.57.46.49.56.50.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.50.53.48.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.51.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.53.56.46.49.53.50.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.53.46.49.56.55.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.52.46.57.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.53.46.49.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.54.46.57.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.55.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.48.46.54.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.51.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.53.50.46.50.52.55.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.50.46.50.48.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.51.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.50.48.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.49.46.50.50.56.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.57.51.46.56.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.57.46.49.49.48.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.49.54.46.49.55.53.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.52.46.54.52.46.49.51.56.46.49.50.56.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.49.55.53.46.49.51.54.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.57.54.46.50.50.55.46.51.50.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.53.46.50.52.50.46.49.57.46.49.54.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.56.46.50.49.49.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.50.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.51.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.49.49.57.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.50.53.48.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.53.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.54.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.55.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.50.52.53.46.49.53.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.54.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.50.57.46.49.49.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.50.48.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.51.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.56.46.49.57.55.46.50.52.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.49.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.50.50.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.49.50.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.53.46.50.52.49.46.52.57.46.50.49.54.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.57.46.50.50.55.46.50.52.48.46.56.56.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.17.50.48.56.46.50.53.51.46.50.52.53.46.57.54.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.18.49.54.53.46.49.50.49.46.50.52.48.46.49.50.48.47.50.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.53.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.51.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.50.46.48.47.50.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.52.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.56.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.48.46.50.52.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.49.46.50.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.50.52.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.55.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.57.46.49.53.56.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.11.54.48.46.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.49.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.50.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.49.46.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.57.54.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.49.57.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.52.46.50.52.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.49.50.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.50.56.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.52.52.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.49.49.53.46.56.53.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.13.53.56.46.50.52.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.49.48.46.49.51.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.57.46.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.49.46.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.50.46.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.57.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.52.46.57.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.51.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.53.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.56.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.56.46.56.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.52.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.54.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.56.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.57.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.51.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.52.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.54.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.56.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.54.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.57.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.51.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.53.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.48.50.46.57.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.49.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.56.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.57.46.49.55.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.49.54.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.50.51.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.50.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.52.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.55.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.54.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.48.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.57.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.52.46.49.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.56.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.51.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.52.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.52.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.52.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.53.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.54.48.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.50.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.48.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.49.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.50.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.49.49.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.54.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.51.46.50.49.50.46.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.50.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.52.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.53.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.48.46.49.54.48.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.49.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.54.56.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.55.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.48.56.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.52.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.51.52.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.53.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.54.49.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.52.57.46.55.46.49.50.56.47.50.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.49.50.50.46.49.48.50.46.56.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.56.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.51.46.49.51.48.46.51.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.48.46.49.57.50.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.50.52.52.46.54.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.54.50.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.57.46.49.53.57.46.54.52.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.51.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.54.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.56.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.57.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.53.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.56.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.57.50.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.55.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.49.57.46.49.53.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.50.49.56.46.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.52.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.54.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.55.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.49.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.49.46.48.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.16.50.50.49.46.50.51.57.46.49.50.56.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.49.55.46.49.50.56.46.48.46.48.47.49.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.50.48.46.49.57.50.46.48.46.48.47.49.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.48.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.51.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.56.46.50.48.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.51.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.55.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.49.51.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.51.46.54.52.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.49.49.46.57.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.50.50.46.51.50.46.48.46.48.47.49.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.14.50.50.49.46.49.55.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.15.49.50.50.46.49.51.46.49.50.56.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.12.53.57.46.54.52.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.51.46.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.53.46.50.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.49.51.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.54.46.48.46.48.47.49.55|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.55.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.48.46.57.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.49.46.52.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.53.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.51.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.54.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.56.48.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.50.50.46.49.54.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.52.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.52.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.54.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.56.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.48.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.50.56.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.51.48.46.48.46.48.47.49.54|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.49.57.50.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.50.52.56.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.50.46.50.48.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.53.46.50.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.49.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.50.48.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.51.56.46.57.54.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.56.46.49.57.50.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.49.54.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.50.52.46.48.46.48.47.49.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.50.46.48.46.48.47.49.53|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.52.46.48.46.48.47.49.52|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.50.50.46.49.57.50.46.48.46.48.47.49.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.50.56.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.54.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.55.54.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.48.46.48.47.50.50|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.52.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.57.50.46.48.47.49.56|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.50.49.46.53.50.46.49.54.48.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.52.48.46.48.47.50.51|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.56.52.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.51.46.57.49.46.49.50.48.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.49.54.46.48.47.50.49|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.50.52.46.48.47.49.57|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.4.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.55.57.46.50.52.48.46.48.47.50.48|2|0 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.53.46.57.51.46.48.46.48.47.49.56|4x|3139352e39332e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.49.57.56.46.56.49.46.48.46.48.47.49.57|4x|3139382e38312e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.13.54.52.46.49.50.46.57.54.46.48.47.49.57|4x|36342e31322e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.50.56.46.48.46.48.47.49.48|4x|3137322e3132382e302e302f3130 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.49.57.50.46.48.46.48.47.49.50|4x|3137322e3139322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.48.46.48.46.48.47.49.53|4x|3137322e3230302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.50.46.48.46.48.47.49.53|4x|3137322e3230322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.48.56.46.48.46.48.47.49.51|4x|3137322e3230382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.50.46.48.46.48.47.49.52|4x|3137322e3231322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.55.50.46.50.49.54.46.48.46.48.47.49.54|4x|3137322e3231362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.49.57.53.46.57.51.46.54.52.46.48.47.49.56|4x|3139352e39332e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.54.46.48.47.50.51|4x|3230322e36372e36362e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.54.56.46.48.47.50.50|4x|3230322e36372e36382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.55.50.46.48.47.50.49|4x|3230322e36372e37322e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.56.48.46.48.47.50.48|4x|3230322e36372e38302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.50.46.54.55.46.57.54.46.48.47.49.57|4x|3230322e36372e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.14.50.48.53.46.49.56.56.46.48.46.48.47.49.54|4x|3230352e3138382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.15.49.53.50.46.49.54.51.46.57.54.46.48.47.50.50|4x|3135322e3136332e39362e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.49.48.48.46.48.47.50.51|4x|3135322e3136332e3130302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.48.46.48.47.50.49|4x|3135322e3136332e3234302e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.52.56.46.48.47.50.50|4x|3135322e3136332e3234382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.49.53.50.46.49.54.51.46.50.53.50.46.48.47.50.51|4x|3135322e3136332e3235322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.50.46.54.55.46.54.53.46.49.50.56.47.50.53|4x|3230322e36372e36352e3132382f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.65.79.76.0.0.16.50.48.55.46.50.48.48.46.49.49.50.46.48.47.50.49|4x|3230372e3230302e3131322e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.11.54.48.46.48.46.48.46.48.47.49.49|4x|36302e302e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|4x|3131362e322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|4x|3131372e382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|4x|3131392e342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|4x|3132302e302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|4x|3132332e342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|4x|3132332e382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|4x|3231382e372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|4x|3231382e382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|4x|3232312e302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|4x|3232312e382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.53.56.46.49.54.46.48.46.48.47.49.51|4x|35382e31362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|4x|36302e35352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|4x|36312e34382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|4x|36312e34392e302e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|4x|36312e34392e342e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|4x|36312e34392e362e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|4x|36312e34392e372e302f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|4x|36312e34392e382e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|4x|36312e35302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.12.54.49.46.53.50.46.48.46.48.47.49.52|4x|36312e35322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|4x|3131362e39352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|4x|3131382e37322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|4x|3131382e38302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|4x|3131392e33362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|4x|3131392e33392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|4x|3131392e34382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|4x|3131392e36322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|4x|3132302e38302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|4x|3132312e31362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|4x|3132322e39362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|4x|3132342e36342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|4x|3132342e36362e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|4x|3132342e36372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.54|4x|3132342e38382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.56.57.46.48.46.48.47.49.56|4x|3132342e38392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.48.46.48.46.48.47.49.53|4x|3132342e39302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.52.46.57.50.46.48.46.48.47.49.52|4x|3132342e39322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|4x|3132352e33322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|4x|3230322e39362e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|4x|3230322e39382e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|4x|3230322e39392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|4x|3230332e39332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|4x|3231302e31322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|4x|3231302e31352e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|4x|3231302e32312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|4x|3231302e32322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|4x|3231302e35312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|4x|3231302e35322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|4x|3231302e37382e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|4x|3231302e38322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|4x|3231382e31322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|4x|3231382e32342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|4x|3231382e32382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|4x|3231382e35362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|4x|3231382e36302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|4x|3231382e36322e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|4x|3231382e36382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|4x|3232312e31322e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|4x|3232312e31332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|4x|3232312e31342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|4x|35382e3134342e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|4x|35382e3234302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|4x|36302e3230382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|4x|36312e3133332e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|4x|36312e3133352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|4x|36312e3133362e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|4x|36312e3133382e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|4x|36312e3134382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|4x|36312e3135362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|4x|36312e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|4x|36312e3135392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|4x|36312e3136312e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|4x|36312e3136322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|4x|36312e3136372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|4x|36312e3136382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|4x|36312e3137362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|4x|36312e3137392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|4x|36312e3138312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|4x|36312e3138322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|4x|36312e3138392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|4x|36312e34392e31362e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|4x|36312e34392e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|4x|36312e34392e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|4x|3131362e3131322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|4x|3131362e3131362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|4x|3131382e3231322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|4x|3131392e3130382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|4x|3131392e3131322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|4x|3131392e3136322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|4x|3131392e3136342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|4x|3131392e3137362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|4x|3131392e3234382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|4x|3132322e3133362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|4x|3132322e3135362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|4x|3132322e3139322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|4x|3132332e3131322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|4x|3132332e3132382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|4x|3132332e3133372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|4x|3132332e3133382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|4x|3132332e3134342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|4x|3132332e3134382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|4x|3132332e3135322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|4x|3132332e3138382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|4x|3132332e3233322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|4x|3132342e3132382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|4x|3132342e3136302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.54.52.46.48.47.50.48|4x|3132342e38392e36342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.48.46.48.47.50.51|4x|3132342e38392e38302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.51.46.48.47.50.52|4x|3132342e38392e38332e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.52.46.48.47.50.50|4x|3132342e38392e38342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.56.56.46.48.47.50.49|4x|3132342e38392e38382e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.52.46.56.57.46.57.54.46.48.47.49.57|4x|3132342e38392e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|4x|3132352e3231312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|4x|3230322e3130362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|4x|3230322e3130372e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|4x|3230322e3130382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|4x|3230322e3131302e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|4x|3230322e39362e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|4x|3231302e37342e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|4x|3231312e3134342e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|4x|3231312e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|4x|3231382e3130342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|4x|3231392e3135342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|4x|3231392e3135362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|4x|3231392e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|4x|3231392e3135392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|4x|3231392e3233322e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|4x|3232302e3234382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|4x|3232302e3235322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|4x|3232312e3133362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|4x|3232312e3139322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|4x|3232312e3139362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|4x|3232312e3139382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|4x|3232312e3139392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|4x|3232312e3230302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|4x|3232312e3230382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|4x|3232322e3132382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|4x|3232322e3136302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|4x|36312e3133342e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|4x|36312e34392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|4x|36312e34392e372e3134342f3238 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|4x|36312e34392e372e3136302f3237 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|4x|36312e34392e372e3139322f3236 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.49.50.52.46.56.57.46.49.50.56.46.48.47.49.55|4x|3132342e38392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|4x|3230322e39372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|4x|3231302e31342e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|4x|3231302e31342e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|4x|3231302e31352e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|4x|3231302e37342e3132382e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|4x|3231382e32312e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|4x|3231382e3234342e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|4x|3231382e36372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|4x|3231392e3233352e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|4x|3232312e31322e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|4x|36312e3133342e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|4x|36312e3133372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|4x|36312e3133382e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|4x|36312e3133392e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|4x|36312e3136312e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|4x|36312e3138302e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|4x|3230322e3130322e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|4x|3230322e3130322e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|4x|3230322e3131302e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|4x|3230322e3131312e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|4x|3230322e3133302e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|4x|3230332e3137352e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|4x|3231312e3135342e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|4x|3232312e3139392e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|4x|3232312e3139392e3139322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.11.47.67.111.109.109.111.110.47.67.78.67.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|4x|3232312e3139392e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.48.46.48.46.48.47.49.55|4x|32342e33302e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.51.52.46.48.46.48.47.49.54|4x|32342e33342e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.54.48.46.48.46.48.47.49.52|4x|32342e36302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.49.46.48.46.48.47.49.54|4x|32342e39312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.50.52.46.57.56.46.48.46.48.47.49.53|4x|32342e39382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.51.48.46.48.46.48.47.49.53|4x|36362e33302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.54.46.52.49.46.48.46.48.47.49.54|4x|36362e34312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.51.50.46.48.46.48.47.49.49|4x|36382e33322e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.54.56.46.56.48.46.48.46.48.47.49.51|4x|36382e38302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.12.55.48.46.56.56.46.48.46.48.47.49.53|4x|37302e38382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.49.56.46.48.46.48.47.49.54|4x|32342e3131382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.51.48.46.48.46.48.47.49.53|4x|32342e3133302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.49.52.55.46.48.46.48.47.49.54|4x|32342e3134372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.50.52.46.50.49.56.46.48.46.48.47.49.54|4x|32342e3231382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.52.46.53.54.46.51.50.46.48.47.49.57|4x|36342e35362e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.53.46.51.52.46.51.50.46.48.47.50.48|4x|36352e33342e33322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.49.55.54.46.48.46.48.47.49.53|4x|36362e3137362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.50.57.46.48.46.48.47.49.54|4x|36362e3232392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.54.46.50.52.48.46.48.46.48.47.49.56|4x|36362e3234302e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.55.46.49.54.48.46.48.46.48.47.49.49|4x|36372e3136302e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.51.54.46.48.46.48.47.49.51|4x|36392e3133362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.49.56.48.46.48.46.48.47.49.53|4x|36392e3138302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.54.57.46.50.52.48.46.48.46.48.47.49.50|4x|36392e3234302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.13.55.49.46.49.57.50.46.48.46.48.47.49.51|4x|37312e3139322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.51.51.46.48.47.50.52|4x|3139382e372e3133332e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.49.57.56.46.55.46.49.52.53.46.48.47.50.52|4x|3139382e372e3134352e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.48.56.46.49.55.46.51.50.46.48.47.50.50|4x|3230382e31372e33322e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.49.53.51.46.54.52.46.48.47.49.57|4x|32342e3135332e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.50.52.46.57.50.46.49.52.52.46.48.47.50.48|4x|32342e39322e3134342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.51.46.50.50.55.46.56.52.46.48.47.50.57|4x|36332e3232372e38342e302f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.49.51.57.46.54.52.46.48.47.49.57|4x|36342e3133392e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.52.46.50.51.50.46.55.50.46.48.47.50.51|4x|36342e3233322e37322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.14.54.53.46.51.52.46.49.50.56.46.48.47.49.55|4x|36352e33342e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.54.46.57.56.46.49.50.56.46.48.47.50.51|4x|3230362e39382e3132382e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.56.46.51.57.46.49.50.56.46.48.47.49.56|4x|3230382e33392e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.48.57.46.50.50.51.46.56.54.46.56.47.50.57|4x|3230392e3232332e38362e382f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.51.52.46.48.47.50.52|4x|3231362e3231362e33342e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.49.54.46.50.49.54.46.56.53.46.48.47.50.52|4x|3231362e3231362e38352e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.50.52.46.49.50.57.46.49.57.50.46.48.47.49.57|4x|32342e3132392e3139322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.51.46.50.48.57.46.49.50.56.46.48.47.50.50|4x|36332e3230392e3132382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.48.46.48.47.50.51|4x|36342e3233322e3232302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.52.46.50.51.50.46.50.50.51.46.48.47.50.52|4x|36342e3233322e3232332e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.53.46.49.54.57.46.50.50.52.46.48.47.50.48|4x|36352e3136392e3232342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.50.48.56.46.49.57.50.46.48.47.49.56|4x|36362e3230382e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.15.54.54.46.52.53.46.50.53.46.49.50.48.47.50.57|4x|36362e34352e32352e3132302f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.52.46.50.51.56.46.49.57.56.46.48.47.50.52|4x|3230342e3233382e3139382e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.56.46.50.48.46.49.48.46.49.50.56.47.50.53|4x|3230382e32302e31302e3132382f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.49.56.51.46.55.55.46.56.56.47.50.57|4x|3230392e3138332e37372e38382f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.53.48.46.48.47.50.51|4x|3230392e3231392e3135302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.50.48.57.46.50.49.57.46.49.56.48.46.48.47.50.50|4x|3230392e3231392e3138302e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.53.46.49.55.49.46.49.50.57.46.54.52.47.50.55|4x|36352e3137312e3132392e36342f3237 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.16.54.54.46.49.55.57.46.53.50.46.50.51.50.47.50.57|4x|36362e3137392e35322e3233322f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.50.48.55.46.49.53.54.46.53.49.46.49.50.56.47.50.53|4x|3230372e3135362e35312e3132382f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.15.47.67.111.109.109.111.110.47.67.111.109.99.97.115.116.0.0.17.54.53.46.50.49.54.46.50.53.49.46.49.50.56.47.50.53|4x|36352e3231362e3235312e3132382f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.50.46.48.46.48.47.50.51|4x|342e34322e302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.11.52.46.52.55.46.52.46.48.47.50.50|4x|342e34372e342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.50.48.56.46.54.46.56.46.48.47.50.50|4x|3230382e362e382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.51.46.56.48.46.48.47.50.49|4x|342e33332e38302e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.49.50.46.48.47.50.50|4x|342e33352e31322e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.52.52.46.48.47.50.50|4x|342e33352e34342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.53.52.46.48.47.50.51|4x|342e33352e35342e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.56.53.46.48.47.50.52|4x|342e33352e38352e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.51.53.46.57.50.46.48.47.50.50|4x|342e33352e39322e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.50.48.46.48.47.50.50|4x|342e34302e32302e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.48.46.55.50.46.48.47.50.50|4x|342e34302e37322e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.51.52.46.48.47.50.51|4x|342e34312e33342e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.49.46.55.54.46.48.47.50.50|4x|342e34312e37362e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.52.50.46.52.56.46.48.47.50.51|4x|342e34322e34382e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.50.46.52.52.46.48.47.50.50|4x|342e36322e34342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.52.46.54.52.46.49.54.46.48.47.50.50|4x|342e36342e31362e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.12.54.54.46.51.50.46.48.46.48.47.49.54|4x|36362e33322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.50.48.52.46.51.49.46.48.46.48.47.50.48|4x|3230342e33312e302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.49.56.48.46.48.47.50.50|4x|342e33332e3138302e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.51.46.50.50.50.46.48.47.50.51|4x|342e33332e3232322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.50.46.48.47.50.51|4x|342e33352e3131322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.49.57.46.48.47.50.53|4x|342e33352e3131392e302f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.51.50.46.48.47.50.52|4x|342e33352e3133322e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.53.54.46.48.47.50.52|4x|342e33352e3135362e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.49.46.48.47.50.52|4x|342e33352e3136312e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.54.52.46.48.47.50.52|4x|342e33352e3136342e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.56.56.46.48.47.50.50|4x|342e33352e3138382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.49.57.54.46.48.47.50.50|4x|342e33352e3139362e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.48.52.46.48.47.50.50|4x|342e33352e3230342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.51.53.46.50.50.56.46.48.47.50.50|4x|342e33352e3232382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.51.50.46.48.47.50.51|4x|342e34302e3133322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.48.46.49.56.52.46.48.47.50.50|4x|342e34302e3138342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.50.55.46.48.47.50.52|4x|342e34312e3132372e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.51.54.46.48.47.50.52|4x|342e34312e3133362e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.53.49.46.48.47.50.52|4x|342e34312e3135312e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.54.56.46.48.47.50.50|4x|342e34312e3136382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.49.57.48.46.48.47.50.51|4x|342e34312e3139302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.48.53.46.48.47.50.52|4x|342e34312e3230352e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.50.56.46.48.47.50.51|4x|342e34312e3232382e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.49.46.50.52.50.46.48.47.50.51|4x|342e34312e3234322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.49.46.48.47.50.52|4x|342e34332e3135312e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.49.53.54.46.48.47.50.50|4x|342e34332e3135362e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.52.51.46.50.52.48.46.48.47.50.48|4x|342e34332e3234302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.48.52.46.48.47.50.52|4x|342e36322e3130342e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.51.46.48.47.50.52|4x|342e36322e3131332e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.49.49.53.46.48.47.50.52|4x|342e36322e3131352e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.50.46.50.48.48.46.48.47.50.49|4x|342e36322e3230302e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.13.52.46.54.52.46.49.57.50.46.48.47.50.50|4x|342e36342e3139322e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.48.46.51.50.46.48.47.50.48|4x|3230342e33302e33322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.49.46.56.48.46.48.47.50.48|4x|3230342e33312e38302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.52.46.51.51.46.54.52.46.48.47.49.57|4x|3230342e33332e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.53.46.49.56.55.46.48.46.48.47.49.57|4x|3230352e3138372e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.54.46.50.49.54.46.48.46.48.47.50.48|4x|3230362e3231362e302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.49.55.46.48.46.48.47.49.54|4x|3230372e3231372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.48.46.48.46.48.47.49.57|4x|3230372e3232302e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.49.46.48.46.48.47.49.57|4x|3230372e3232312e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.50.50.50.46.48.46.48.47.49.56|4x|3230372e3232322e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.51.48.46.54.52.46.48.47.49.57|4x|3230372e33302e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.51.46.54.52.46.48.47.49.57|4x|3230372e39332e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.51.50.46.48.47.50.48|4x|3230372e39342e33322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.52.46.54.52.46.48.47.50.48|4x|3230372e39342e36342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.51.50.46.48.47.50.48|4x|3230372e39352e33322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.55.46.57.53.46.56.48.46.48.47.50.48|4x|3230372e39352e38302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.48.46.49.50.50.46.48.47.50.51|4x|3230382e302e3132322e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.56.46.51.48.46.50.54.46.48.47.50.51|4x|3230382e33302e32362e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.49.48.46.48.46.48.47.50.48|4x|3230392e3131302e302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.48.57.46.49.55.57.46.48.46.48.47.49.54|4x|3230392e3137392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.50.49.54.46.50.52.52.46.48.46.48.47.49.56|4x|3231362e3234342e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.51.46.49.54.57.46.56.56.46.48.47.50.53|4x|36332e3136392e38382e302f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.49.53.46.56.56.46.48.47.50.49|4x|36342e3231352e38382e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.49.55.46.57.54.47.50.55|4x|36342e32332e31372e39362f3237 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.14.54.52.46.50.51.46.56.46.49.50.56.47.50.57|4x|36342e32332e382e3132382f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.56.46.50.49.49.46.54.52.46.48.47.49.57|4x|3139382e3231312e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.49.57.57.46.49.56.50.46.56.48.46.48.47.50.48|4x|3139392e3138322e38302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.50.53.48.46.51.50.46.48.47.49.57|4x|3230342e3235302e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.50.56.46.48.47.49.57|4x|3230342e33312e3132382e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.49.46.49.57.50.46.48.47.49.57|4x|3230342e33312e3139322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.49.50.56.46.48.47.50.48|4x|3230342e33322e3132382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.50.46.50.50.52.46.48.47.49.57|4x|3230342e33322e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.51.51.46.49.54.48.46.48.47.50.48|4x|3230342e33332e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.52.46.53.56.46.49.53.50.46.48.47.50.50|4x|3230342e35382e3135322e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.53.46.49.56.55.46.57.54.46.48.47.49.57|4x|3230352e3138372e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.52.46.57.54.46.48.47.50.48|4x|3230362e3231342e39362e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.53.46.49.54.46.48.47.50.48|4x|3230362e3231352e31362e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.54.46.57.54.46.48.47.50.48|4x|3230362e3231362e39362e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.54.46.50.49.55.46.51.50.46.48.47.49.57|4x|3230362e3231372e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.48.46.54.52.46.48.47.50.48|4x|3230372e3232302e36342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.50.50.51.46.56.48.46.48.47.50.48|4x|3230372e3232332e38302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.53.50.46.50.52.55.46.48.47.50.52|4x|3230372e35322e3234372e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.50.46.50.48.56.46.48.47.50.48|4x|3230372e39322e3230382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.51.46.49.49.50.46.48.47.50.48|4x|3230372e39332e3131322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.50.56.46.48.47.50.48|4x|3230372e39342e3132382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.49.54.48.46.48.47.50.48|4x|3230372e39342e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.52.46.50.48.56.46.48.47.50.48|4x|3230372e39342e3230382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.49.50.46.48.47.50.48|4x|3230372e39352e3131322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.55.46.57.53.46.49.52.52.46.48.47.50.48|4x|3230372e39352e3134342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.49.46.50.50.56.46.48.47.50.50|4x|3230382e31312e3232382e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.56.46.49.57.51.46.56.48.46.48.47.50.49|4x|3230382e3139332e38302e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.48.57.46.49.49.48.46.54.52.46.48.47.49.57|4x|3230392e3131302e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.50.49.54.46.49.55.53.46.54.52.46.48.47.49.56|4x|3231362e3137352e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.52.46.54.52.46.49.51.56.46.49.50.56.47.50.53|4x|342e36342e3133382e3132382f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.49.55.53.46.49.51.54.46.48.47.50.49|4x|36332e3137352e3133362e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.51.46.57.54.46.50.50.55.46.51.50.47.50.56|4x|36332e39362e3232372e33322f3238 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.15.54.53.46.50.52.50.46.49.57.46.49.54.47.50.57|4x|36352e3234322e31392e31362f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.56.46.50.49.49.46.50.50.52.46.48.47.49.57|4x|3139382e3231312e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.50.46.49.52.52.46.48.47.50.48|4x|3139392e3138322e3134342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.49.57.57.46.49.56.51.46.49.52.52.46.48.47.50.48|4x|3139392e3138332e3134342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.49.49.57.46.49.54.48.46.48.47.49.57|4x|3230342e3131392e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.52.46.50.53.48.46.49.50.56.46.48.47.50.48|4x|3230342e3235302e3132382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.53.46.49.54.48.46.48.47.49.57|4x|3230352e3138352e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.54.46.49.57.50.46.48.47.50.48|4x|3230352e3138362e3139322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.49.56.55.46.49.54.48.46.48.47.50.48|4x|3230352e3138372e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.53.46.50.52.53.46.49.53.50.46.48.47.50.49|4x|3230352e3234352e3135322e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.54.46.49.50.56.46.48.47.50.48|4x|3230362e3231362e3132382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.49.54.48.46.48.47.49.57|4x|3230362e3231372e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.49.55.46.50.50.52.46.48.47.49.57|4x|3230362e3231372e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.54.46.50.50.57.46.49.49.50.46.48.47.50.49|4x|3230362e3232392e3131322e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.49.49.50.46.48.47.50.48|4x|3230372e3232302e3131322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.48.46.50.48.56.46.48.47.50.48|4x|3230372e3232302e3230382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.54.48.46.48.47.50.48|4x|3230372e3232322e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.50.46.49.57.50.46.48.47.49.57|4x|3230372e3232322e3139322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.55.46.50.50.51.46.49.50.56.46.48.47.49.57|4x|3230372e3232332e3132382e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.56.46.49.57.55.46.50.52.56.46.48.47.50.49|4x|3230382e3139372e3234382e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.49.50.46.48.47.50.48|4x|3230392e3130382e3131322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.49.54.48.46.48.47.50.48|4x|3230392e3130382e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.56.46.50.50.52.46.48.47.50.48|4x|3230392e3130382e3232342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.54.48.46.48.47.50.48|4x|3230392e3130392e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.48.57.46.49.57.50.46.48.47.49.57|4x|3230392e3130392e3139322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.52.52.46.48.47.50.48|4x|3230392e3131302e3134342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.48.46.49.57.50.46.48.47.50.48|4x|3230392e3131302e3139322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.49.50.56.46.48.47.50.48|4x|3230392e3131312e3132382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.50.48.57.46.49.49.49.46.50.50.52.46.48.47.49.57|4x|3230392e3131312e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.53.46.50.52.49.46.52.57.46.50.49.54.47.50.57|4x|36352e3234312e34392e3231362f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.16.54.57.46.50.50.55.46.50.52.48.46.56.56.47.50.57|4x|36392e3232372e3234302e38382f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.17.50.48.56.46.50.53.51.46.50.52.53.46.57.54.47.50.57|4x|3230382e3235332e3234352e39362f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.17.47.67.111.109.109.111.110.47.69.97.114.116.104.108.105.110.107.0.0.18.49.54.53.46.49.50.49.46.50.52.48.46.49.50.48.47.50.57|4x|3136352e3132312e3234302e3132302f3239 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.56.46.48.46.48.47.49.54|4x|36312e34382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.48.46.48.47.50.50|4x|36312e34392e302e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.52.46.48.47.50.51|4x|36312e34392e342e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.54.46.48.47.50.52|4x|36312e34392e362e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.55.46.48.47.50.53|4x|36312e34392e372e302f3235 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.52.57.46.56.46.48.47.50.49|4x|36312e34392e382e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.12.54.49.46.53.48.46.48.46.48.47.49.53|4x|36312e35302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|4x|3132342e36342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.51.46.48.46.48.47.49.54|4x|3132352e33332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.52.46.48.46.48.47.49.54|4x|3132352e33342e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.49.50.53.46.51.53.46.48.46.48.47.49.55|4x|3132352e33352e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.57|4x|3230322e39362e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.56|4x|3230322e39392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.55|4x|3231302e38322e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|4x|36312e3133352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|4x|36312e3134382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.49.54.46.48.47.50.48|4x|36312e34392e31362e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.51.50.46.48.47.49.57|4x|36312e34392e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.13.54.49.46.52.57.46.54.52.46.48.47.49.56|4x|36312e34392e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|4x|3132332e3131322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|4x|3230322e3130362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|4x|3230322e3130382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.51.50.46.48.47.50.49|4x|3230322e39362e33322e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.48.46.48.47.50.51|4x|3230322e39362e34302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.50.46.48.47.50.52|4x|3230322e39362e34322e302f3234 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.52.46.48.47.50.50|4x|3230322e39362e34342e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.48.50.46.57.54.46.52.56.46.48.47.50.48|4x|3230322e39362e34382e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|4x|3231312e3134342e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|4x|3231392e3233322e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.48.46.50.52.57.46.48.46.48.47.49.56|4x|3232302e3234392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.49.46.50.49.54.46.48.46.48.47.49.51|4x|3232312e3231362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.52|4x|3232322e3132382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.49.50.56.46.48.47.49.55|4x|36312e34392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.52.52.47.50.56|4x|36312e34392e372e3134342f3238 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.54.48.47.50.55|4x|36312e34392e372e3136302f3237 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.14.54.49.46.52.57.46.55.46.49.57.50.47.50.54|4x|36312e34392e372e3139322f3236 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|4x|3231382e3234342e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|4x|3231392e3233352e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|4x|3230322e3133302e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|4x|3231312e3135342e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.49.54.48.46.48.47.49.57|4x|3231382e3130362e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.54.46.50.52.48.46.48.47.50.48|4x|3231382e3130362e3234302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.56.46.49.48.55.46.49.50.56.46.48.47.49.56|4x|3231382e3130372e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.18.47.67.111.109.109.111.110.47.66.101.105.106.105.110.103.67.78.67.0.0.16.50.49.57.46.49.53.56.46.49.50.56.46.48.47.49.55|4x|3231392e3135382e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.11.54.48.46.48.46.48.46.48.47.49.49|4x|36302e302e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.48.46.48.46.48.47.49.51|4x|3131332e302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.51.46.56.46.48.46.48.47.49.53|4x|3131332e382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.54.46.50.46.48.46.48.47.49.53|4x|3131362e322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.55.46.56.46.48.46.48.47.49.51|4x|3131372e382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.49.57.46.52.46.48.46.48.47.49.52|4x|3131392e342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.48.46.48.46.48.46.48.47.49.50|4x|3132302e302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.52.46.48.46.48.47.49.52|4x|3132332e342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.49.50.51.46.56.46.48.46.48.47.49.51|4x|3132332e382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.55.46.48.46.48.47.49.54|4x|3231382e372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.49.56.46.56.46.48.46.48.47.49.52|4x|3231382e382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.48.46.48.46.48.47.49.51|4x|3232312e302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.50.50.49.46.56.46.48.46.48.47.49.52|4x|3232312e382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.49.54.46.48.46.48.47.49.52|4x|35382e31362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.48.46.48.46.48.47.49.53|4x|35382e32302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.50.46.48.46.48.47.49.56|4x|35382e32322e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.53.56.46.50.51.46.48.46.48.47.49.55|4x|35382e32332e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.48.46.53.53.46.48.46.48.47.49.54|4x|36302e35352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.12.54.49.46.52.56.46.48.46.48.47.49.51|4x|36312e34382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.54.46.48.46.48.47.49.53|4x|3131332e35362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.56.46.48.46.48.47.49.54|4x|3131332e35382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.51.46.53.57.46.48.46.48.47.49.55|4x|3131332e35392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.54.46.48.46.48.47.49.54|4x|3131352e34362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.53.46.52.56.46.48.46.48.47.49.50|4x|3131352e34382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.54.46.57.53.46.48.46.48.47.49.54|4x|3131362e39352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.55.50.46.48.46.48.47.49.51|4x|3131382e37322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.56.46.56.48.46.48.46.48.47.49.53|4x|3131382e38302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.54.46.48.46.48.47.49.54|4x|3131392e33362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.51.57.46.48.46.48.47.49.54|4x|3131392e33392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.52.56.46.48.46.48.47.49.51|4x|3131392e34382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.49.57.46.54.50.46.48.46.48.47.49.54|4x|3131392e36322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.48.46.56.48.46.48.46.48.47.49.51|4x|3132302e38302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.49.46.49.54.46.48.46.48.47.49.50|4x|3132312e31362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.50.46.57.54.46.48.46.48.47.49.53|4x|3132322e39362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.52.46.48.46.48.47.49.53|4x|3132342e36342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.54.46.48.46.48.47.49.55|4x|3132342e36362e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.54.55.46.48.46.48.47.49.54|4x|3132342e36372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.52.46.56.56.46.48.46.48.47.49.51|4x|3132342e38382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.49.50.53.46.51.50.46.48.46.48.47.49.50|4x|3132352e33322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.54.46.48.46.48.47.49.56|4x|3230322e39362e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.56.46.48.46.48.47.49.57|4x|3230322e39382e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.50.46.57.57.46.48.46.48.47.49.54|4x|3230322e39392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.48.51.46.57.51.46.48.46.48.47.49.54|4x|3230332e39332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.50.46.48.46.48.47.49.53|4x|3231302e31322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.49.53.46.48.46.48.47.49.55|4x|3231302e31352e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.49.46.48.46.48.47.49.54|4x|3231302e32312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.50.50.46.48.46.48.47.49.54|4x|3231302e32322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.49.46.48.46.48.47.49.54|4x|3231302e35312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.53.50.46.48.46.48.47.49.53|4x|3231302e35322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.55.56.46.48.46.48.47.49.57|4x|3231302e37382e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.48.46.56.50.46.48.46.48.47.49.53|4x|3231302e38322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.49.50.46.48.46.48.47.49.54|4x|3231382e31322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.52.46.48.46.48.47.49.52|4x|3231382e32342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.50.56.46.48.46.48.47.49.53|4x|3231382e32382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.53.54.46.48.46.48.47.49.52|4x|3231382e35362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.48.46.48.46.48.47.49.53|4x|3231382e36302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.50.46.48.46.48.47.49.55|4x|3231382e36322e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.49.56.46.54.56.46.48.46.48.47.49.53|4x|3231382e36382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.50.46.48.46.48.47.49.55|4x|3232312e31322e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.51.46.48.46.48.47.49.54|4x|3232312e31332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.50.50.49.46.49.52.46.48.46.48.47.49.53|4x|3232312e31342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.49.52.52.46.48.46.48.47.49.54|4x|35382e3134342e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.54.52.46.48.47.49.57|4x|35382e32322e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.50.46.57.54.46.48.47.50.48|4x|35382e32322e39362e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.53.56.46.50.52.48.46.48.46.48.47.49.50|4x|35382e3234302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.48.46.50.48.56.46.48.46.48.47.49.50|4x|36302e3230382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.51.46.48.46.48.47.49.55|4x|36312e3133332e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.53.46.48.46.48.47.49.54|4x|36312e3133352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.54.46.48.46.48.47.49.55|4x|36312e3133362e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.51.56.46.48.46.48.47.49.55|4x|36312e3133382e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.52.56.46.48.46.48.47.49.53|4x|36312e3134382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.54.46.48.46.48.47.49.54|4x|36312e3135362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.56.46.48.46.48.47.49.54|4x|36312e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.53.57.46.48.46.48.47.49.56|4x|36312e3135392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.49.46.48.46.48.47.49.56|4x|36312e3136312e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.50.46.48.46.48.47.49.53|4x|36312e3136322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.55.46.48.46.48.47.49.54|4x|36312e3136372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.54.56.46.48.46.48.47.49.54|4x|36312e3136382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.54.46.48.46.48.47.49.54|4x|36312e3137362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.55.57.46.48.46.48.47.49.54|4x|36312e3137392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.49.46.48.46.48.47.49.54|4x|36312e3138312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.50.46.48.46.48.47.49.54|4x|36312e3138322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.13.54.49.46.49.56.57.46.48.46.48.47.49.55|4x|36312e3138392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.49.57.52.46.48.46.48.47.49.53|4x|3131332e3139342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.48.46.48.46.48.47.49.53|4x|3131332e3230302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.48.52.46.48.46.48.47.49.52|4x|3131332e3230342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.51.46.50.50.52.46.48.46.48.47.49.50|4x|3131332e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.52.46.50.52.48.46.48.46.48.47.49.50|4x|3131342e3234302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.50.46.48.46.48.47.49.52|4x|3131362e3131322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.54.46.49.49.54.46.48.46.48.47.49.53|4x|3131362e3131362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.56.46.50.49.50.46.48.46.48.47.49.54|4x|3131382e3231322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.48.56.46.48.46.48.47.49.53|4x|3131392e3130382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.49.50.46.48.46.48.47.49.51|4x|3131392e3131322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.50.46.48.46.48.47.49.53|4x|3131392e3136322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.54.52.46.48.46.48.47.49.52|4x|3131392e3136342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.49.55.54.46.48.46.48.47.49.50|4x|3131392e3137362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.49.57.46.50.52.56.46.48.46.48.47.49.52|4x|3131392e3234382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.51.54.46.48.46.48.47.49.51|4x|3132322e3133362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.53.54.46.48.46.48.47.49.52|4x|3132322e3135362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.50.46.49.57.50.46.48.46.48.47.49.52|4x|3132322e3139322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.49.50.46.48.46.48.47.49.50|4x|3132332e3131322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.50.56.46.48.46.48.47.49.51|4x|3132332e3132382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.55.46.48.46.48.47.49.54|4x|3132332e3133372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.51.56.46.48.46.48.47.49.53|4x|3132332e3133382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.52.46.48.46.48.47.49.52|4x|3132332e3134342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.52.56.46.48.46.48.47.49.54|4x|3132332e3134382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.53.50.46.48.46.48.47.49.51|4x|3132332e3135322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.49.56.56.46.48.46.48.47.49.52|4x|3132332e3138382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.51.46.50.51.50.46.48.46.48.47.49.52|4x|3132332e3233322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.50.56.46.48.46.48.47.49.51|4x|3132342e3132382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.52.46.49.54.48.46.48.46.48.47.49.51|4x|3132342e3136302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.49.50.53.46.50.49.49.46.48.46.48.47.49.54|4x|3132352e3231312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.54.46.48.46.48.47.49.54|4x|3230322e3130362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.55.46.48.46.48.47.49.55|4x|3230322e3130372e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.48.56.46.48.46.48.47.49.54|4x|3230322e3130382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.49.49.48.46.48.46.48.47.49.55|4x|3230322e3131302e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.48.50.46.57.54.46.54.52.46.48.47.49.57|4x|3230322e39362e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.48.46.55.52.46.57.54.46.48.47.49.57|4x|3231302e37342e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.52.52.46.48.46.48.47.49.57|4x|3231312e3134342e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.49.46.49.53.56.46.48.46.48.47.49.54|4x|3231312e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.56.46.49.48.52.46.48.46.48.47.49.52|4x|3231382e3130342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.52.46.48.46.48.47.49.53|4x|3231392e3135342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.54.46.48.46.48.47.49.53|4x|3231392e3135362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.56.46.48.46.48.47.49.54|4x|3231392e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.49.53.57.46.48.46.48.47.49.56|4x|3231392e3135392e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.49.57.46.50.51.50.46.48.46.48.47.49.57|4x|3231392e3233322e302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.52|4x|3232302e3234382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.48.46.50.53.50.46.48.46.48.47.49.54|4x|3232302e3235322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.51.54.46.48.46.48.47.49.54|4x|3232312e3133362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.50.46.48.46.48.47.49.52|4x|3232312e3139322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.54.46.48.46.48.47.49.53|4x|3232312e3139362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.56.46.48.46.48.47.49.54|4x|3232312e3139382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.49.57.57.46.48.46.48.47.49.55|4x|3232312e3139392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.48.46.48.46.48.47.49.51|4x|3232312e3230302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.49.46.50.48.56.46.48.46.48.47.49.50|4x|3232312e3230382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.50.56.46.48.46.48.47.49.50|4x|3232322e3132382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.50.50.50.46.49.54.48.46.48.46.48.47.49.52|4x|3232322e3136302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.49.50.46.48.47.50.49|4x|35382e32322e3131322e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.50.46.49.50.56.46.48.47.49.55|4x|35382e32322e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.50.56.46.48.47.50.49|4x|35382e32332e3132382e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.52.52.46.48.47.50.48|4x|35382e32332e3134342e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.54.48.46.48.47.49.57|4x|35382e32332e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.53.56.46.50.51.46.49.57.50.46.48.47.49.56|4x|35382e32332e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.14.54.49.46.49.51.52.46.57.54.46.48.47.49.57|4x|36312e3133342e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.49.49.53.46.56.53.46.49.57.50.46.48.47.49.56|4x|3131352e38352e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.48.50.46.57.55.46.49.50.56.46.48.47.49.55|4x|3230322e39372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.54.48.46.48.47.49.57|4x|3231302e31342e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.52.46.49.57.50.46.48.47.49.56|4x|3231302e31342e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.49.53.46.49.50.56.46.48.47.49.56|4x|3231302e31352e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.48.46.55.52.46.49.50.56.46.48.47.49.57|4x|3231302e37342e3132382e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.49.46.49.50.56.46.48.47.49.55|4x|3231382e32312e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.50.52.52.46.51.50.46.48.47.49.57|4x|3231382e3234342e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.56.46.54.55.46.49.50.56.46.48.47.49.55|4x|3231382e36372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.49.57.46.50.51.53.46.51.50.46.48.47.49.57|4x|3231392e3233352e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.50.50.49.46.49.50.46.49.50.56.46.48.47.49.56|4x|3232312e31322e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.52.46.49.50.56.46.48.47.49.55|4x|36312e3133342e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.55.46.49.50.56.46.48.47.49.55|4x|36312e3133372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.56.46.49.50.56.46.48.47.49.56|4x|36312e3133382e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.51.57.46.49.50.56.46.48.47.49.56|4x|36312e3133392e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.54.49.46.49.50.56.46.48.47.49.55|4x|36312e3136312e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.15.54.49.46.49.56.48.46.49.50.56.46.48.47.49.55|4x|36312e3138302e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.50.56.46.48.47.49.56|4x|3230322e3130322e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.48.50.46.50.50.52.46.48.47.49.57|4x|3230322e3130322e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.57.50.46.48.47.49.56|4x|3230322e3131302e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.50.56.46.48.47.49.56|4x|3230322e3131312e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.50.46.49.51.48.46.50.50.52.46.48.47.49.57|4x|3230322e3133302e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.48.51.46.49.55.53.46.49.57.50.46.48.47.49.56|4x|3230332e3137352e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.49.49.46.49.53.52.46.49.57.50.46.48.47.49.56|4x|3231312e3135342e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.50.56.46.48.47.49.56|4x|3232312e3139392e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.49.57.50.46.48.47.50.48|4x|3232312e3139392e3139322e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.67.104.105.110.97.85.110.105.99.111.109.0.0.16.50.50.49.46.49.57.57.46.50.50.52.46.48.47.49.57|4x|3232312e3139392e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.13.53.56.46.50.52.54.46.48.46.48.47.49.53|4x|35382e3234362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.49.48.46.49.51.46.54.52.46.48.47.49.56|4x|3231302e31332e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.19.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.67.78.67.0.0.14.50.50.48.46.50.52.56.46.48.46.48.47.49.55|4x|3232302e3234382e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.49.46.48.46.48.47.49.54|4x|3131362e312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.52.46.48.46.48.47.49.52|4x|3131362e342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.54.46.56.46.48.46.48.47.49.52|4x|3131362e382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.49.57.46.48.46.48.46.48.47.49.53|4x|3131392e302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.49.46.56.46.48.46.48.47.49.51|4x|3132312e382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.49.50.50.46.52.46.48.46.48.47.49.52|4x|3132322e342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.48.46.48.46.48.47.49.52|4x|3231382e302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.52.46.48.46.48.47.49.53|4x|3231382e342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.50.49.56.46.54.46.48.46.48.47.49.54|4x|3231382e362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.49|4x|35382e33322e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.12.53.57.46.51.50.46.48.46.48.47.49.49|4x|35392e33322e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.52.46.57.54.46.48.46.48.47.49.51|4x|3131342e39362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.49.54.46.48.46.48.47.49.50|4x|3131362e31362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.54.46.53.50.46.48.46.48.47.49.52|4x|3131362e35322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.49.46.48.46.48.47.49.54|4x|3131372e32312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.50.46.48.46.48.47.49.53|4x|3131372e32322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.50.52.46.48.46.48.47.49.51|4x|3131372e32342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.51.50.46.48.46.48.47.49.51|4x|3131372e33322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.48.46.48.46.48.47.49.52|4x|3131372e34302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.52.52.46.48.46.48.47.49.53|4x|3131372e34342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.53.55.46.48.46.48.47.49.54|4x|3131372e35372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.48.46.48.46.48.47.49.52|4x|3131372e36302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.54.52.46.48.46.48.47.49.51|4x|3131372e36342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.55.46.56.48.46.48.46.48.47.49.50|4x|3131372e38302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.56.46.56.52.46.48.46.48.47.49.53|4x|3131382e38342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.52.49.46.48.46.48.47.49.54|4x|3131392e34312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.54.48.46.48.46.48.47.49.54|4x|3131392e36302e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.56.52.46.48.46.48.47.49.52|4x|3131392e38342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.49.57.46.57.54.46.48.46.48.47.49.51|4x|3131392e39362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.51.50.46.48.46.48.47.49.51|4x|3132302e33322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.52.48.46.48.46.48.47.49.52|4x|3132302e34302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.48.46.54.56.46.48.46.48.47.49.52|4x|3132302e36382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.51.50.46.48.46.48.47.49.52|4x|3132312e33322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.54.46.48.46.48.47.49.53|4x|3132312e35362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.56.46.48.46.48.47.49.55|4x|3132312e35382e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.53.57.46.48.46.48.47.49.54|4x|3132312e35392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.49.46.54.48.46.48.46.48.47.49.52|4x|3132312e36302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.53.50.46.48.46.48.47.49.52|4x|3132332e35322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.51.46.57.54.46.48.46.48.47.49.53|4x|3132332e39362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.51.49.46.48.46.48.47.49.54|4x|3132342e33312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.50.46.48.46.48.47.49.51|4x|3132342e37322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.49.50.53.46.54.52.46.48.46.48.47.49.49|4x|3132352e36342e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.48.50.46.57.55.46.48.46.48.47.49.55|4x|3230322e39372e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.51.46.48.46.48.47.49.54|4x|3231382e31332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.52.46.48.46.48.47.49.53|4x|3231382e31342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.49.54.46.48.46.48.47.49.52|4x|3231382e31362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.48.46.48.46.48.47.49.54|4x|3231382e32302e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.49.46.48.46.48.47.49.55|4x|3231382e32312e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.50.50.46.48.46.48.47.49.53|4x|3231382e32322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.51.48.46.48.46.48.47.49.53|4x|3231382e33302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.51.46.48.46.48.47.49.54|4x|3231382e36332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.52.46.48.46.48.47.49.53|4x|3231382e36342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.54.46.48.46.48.47.49.54|4x|3231382e36362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.54.55.46.48.46.48.47.49.55|4x|3231382e36372e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.48.46.48.46.48.47.49.53|4x|3231382e37302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.50.46.48.46.48.47.49.51|4x|3231382e37322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.50|4x|3231382e38302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.49|4x|3232322e36342e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.56.46.50.48.56.46.48.46.48.47.49.50|4x|35382e3230382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.53.57.46.49.55.50.46.48.46.48.47.49.52|4x|35392e3137322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.49.54.48.46.48.46.48.47.49.49|4x|36302e3136302e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.48.46.50.51.53.46.48.46.48.47.49.54|4x|36302e3233352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.50.56.46.48.46.48.47.49.52|4x|36312e3132382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.50.46.48.46.48.47.49.54|4x|36312e3133322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.52.46.48.46.48.47.49.56|4x|36312e3133342e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.55.46.48.46.48.47.49.55|4x|36312e3133372e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.51.57.46.48.46.48.47.49.55|4x|36312e3133392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.48.46.48.46.48.47.49.52|4x|36312e3134302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.52.52.46.48.46.48.47.49.52|4x|36312e3134342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.48.46.48.46.48.47.49.53|4x|36312e3135302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.52|4x|36312e3135322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.55.46.48.46.48.47.49.54|4x|36312e3135372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.48.46.48.46.48.47.49.54|4x|36312e3136302e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.52.46.48.46.48.47.49.53|4x|36312e3136342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.54.46.48.46.48.47.49.54|4x|36312e3136362e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|4x|36312e3136392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|4x|36312e3137302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.52|4x|36312e3137322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.55.46.48.46.48.47.49.54|4x|36312e3137372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.56.46.48.46.48.47.49.54|4x|36312e3137382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.48.46.48.46.48.47.49.55|4x|36312e3138302e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.51.46.48.46.48.47.49.54|4x|36312e3138332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.52.46.48.46.48.47.49.52|4x|36312e3138342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.56.56.46.48.46.48.47.49.54|4x|36312e3138382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.13.54.49.46.49.57.48.46.48.46.48.47.49.53|4x|36312e3139302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.52.46.49.48.52.46.48.46.48.47.49.52|4x|3131342e3130342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|4x|3131362e3139322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.55.46.48.46.48.47.49.54|4x|3131362e3230372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.48.56.46.48.46.48.47.49.52|4x|3131362e3230382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|4x|3131362e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|4x|3131362e3234362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.56.46.48.46.48.47.49.53|4x|3131362e3234382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.53.50.46.48.46.48.47.49.53|4x|3131362e3235322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.49.50.46.48.46.48.47.49.51|4x|3131382e3131322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.48.46.48.46.48.47.49.52|4x|3131382e3132302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.50.52.46.48.46.48.47.49.53|4x|3131382e3132342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.49.56.48.46.48.46.48.47.49.52|4x|3131382e3138302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.49.51.46.48.46.48.47.49.54|4x|3131382e3231332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.51.57.46.48.46.48.47.49.54|4x|3131382e3233392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.56.46.50.52.56.46.48.46.48.47.49.51|4x|3131382e3234382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.48.46.48.46.48.47.49.51|4x|3131392e3132302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.50.56.46.48.46.48.47.49.50|4x|3131392e3132382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.49.57.46.49.52.52.46.48.46.48.47.49.52|4x|3131392e3134342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.48.52.46.48.46.48.47.49.52|4x|3132312e3230342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.49.46.50.50.52.46.48.46.48.47.49.50|4x|3132312e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.50.52.46.48.46.48.47.49.50|4x|3132322e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.50.46.50.52.48.46.48.46.48.47.49.51|4x|3132322e3234302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.49.46.48.46.48.47.49.54|4x|3132332e3130312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.48.51.46.48.46.48.47.49.55|4x|3132332e3130332e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.52.57.46.48.46.48.47.49.54|4x|3132332e3134392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.53.48.46.48.46.48.47.49.53|4x|3132332e3135302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.54.48.46.48.46.48.47.49.50|4x|3132332e3136302e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.55.46.48.46.48.47.49.54|4x|3132332e3137372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.55.56.46.48.46.48.47.49.53|4x|3132332e3137382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.48.46.48.46.48.47.49.52|4x|3132332e3138302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.49.56.52.46.48.46.48.47.49.52|4x|3132332e3138342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.51.46.50.52.52.46.48.46.48.47.49.52|4x|3132332e3234342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.49.49.50.46.48.46.48.47.49.51|4x|3132342e3131322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.52.46.50.50.52.46.48.46.48.47.49.50|4x|3132342e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.48.52.46.48.46.48.47.49.51|4x|3132352e3130342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.49.50.53.46.49.49.50.46.48.46.48.47.49.50|4x|3132352e3131322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.48.46.48.46.48.47.49.53|4x|3230322e3130302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.50.46.48.46.48.47.49.55|4x|3230322e3130322e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.51.46.48.46.48.47.49.54|4x|3230322e3130332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.52.46.48.46.48.47.49.53|4x|3230322e3130342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.54|4x|3230322e3130392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.49.49.46.48.46.48.47.49.55|4x|3230322e3131312e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.54.46.57.54.46.48.47.49.57|4x|3230322e39362e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.51.50.46.48.47.49.57|4x|3230322e39382e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.50.46.57.56.46.54.52.46.48.47.49.56|4x|3230322e39382e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.48.51.46.50.49.50.46.48.46.48.47.50.48|4x|3230332e3231322e302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.50.56.46.48.46.48.47.49.50|4x|3231392e3132382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.52.52.46.48.46.48.47.49.51|4x|3231392e3134342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.49.57.46.49.53.50.46.48.46.48.47.49.53|4x|3231392e3135322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.48.46.49.54.48.46.48.46.48.47.49.49|4x|3232302e3136302e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.49.46.50.50.52.46.48.46.48.47.49.50|4x|3232312e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.54.56.46.48.46.48.47.49.51|4x|3232322e3136382e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.49.55.54.46.48.46.48.47.49.50|4x|3232322e3137362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.48.56.46.48.46.48.47.49.50|4x|3232322e3230382e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.50.50.50.46.50.52.48.46.48.46.48.47.49.51|4x|3232322e3234302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.51.52.46.54.52.46.48.47.49.57|4x|36312e3133342e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.53.57.46.54.52.46.48.47.49.56|4x|36312e3135392e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.49.54.49.46.54.52.46.48.47.49.56|4x|36312e3136312e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.14.54.49.46.52.57.46.55.46.49.50.56.47.50.56|4x|36312e34392e372e3132382f3238 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.49.50.50.46.49.48.50.46.56.48.46.48.47.50.48|4x|3132322e3130322e38302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.50.56.46.48.47.49.55|4x|3230322e39362e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.56.46.49.50.56.46.48.47.49.55|4x|3230322e39382e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.48.51.46.49.51.48.46.51.50.46.48.47.49.57|4x|3230332e3133302e33322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.48.46.49.57.50.46.57.54.46.48.47.49.57|4x|3231302e3139322e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.50.52.52.46.54.52.46.48.47.49.57|4x|3231382e3234342e36342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.56.46.54.50.46.49.50.56.46.48.47.49.55|4x|3231382e36322e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.50.49.57.46.49.53.57.46.54.52.46.48.47.49.56|4x|3231392e3135392e36342e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.51.46.49.50.56.46.48.47.49.55|4x|36312e3133332e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.54.46.49.50.56.46.48.47.49.55|4x|36312e3133362e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.56.46.49.57.50.46.48.47.49.56|4x|36312e3133382e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.51.57.46.49.57.50.46.48.47.49.56|4x|36312e3133392e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.53.57.46.49.50.56.46.48.47.49.55|4x|36312e3135392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.15.54.49.46.49.56.57.46.49.50.56.46.48.47.49.55|4x|36312e3138392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.50.46.49.57.50.46.48.47.49.57|4x|3230322e3130322e3139322e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.48.55.46.49.50.56.46.48.47.49.55|4x|3230322e3130372e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.48.46.49.50.56.46.48.47.49.56|4x|3230322e3131302e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.48.50.46.49.49.49.46.49.57.50.46.48.47.49.56|4x|3230322e3131312e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.20.47.67.111.109.109.111.110.47.67.104.105.110.97.84.101.108.101.99.111.109.0.0.16.50.49.57.46.49.53.57.46.49.50.56.46.48.47.49.55|4x|3231392e3135392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.50.49.56.46.49.46.48.46.48.47.49.54|4x|3231382e312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.51.50.46.48.46.48.47.49.51|4x|35382e33322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.12.53.56.46.52.48.46.48.46.48.47.49.53|4x|35382e34302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.52.46.48.46.48.47.49.53|4x|3132342e37342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.49.50.52.46.55.54.46.48.46.48.47.49.52|4x|3132342e37362e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.55.56.46.48.46.48.47.49.53|4x|3231382e37382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.49.56.46.56.48.46.48.46.48.47.49.52|4x|3231382e38302e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.54.52.46.48.46.48.47.49.51|4x|3232322e36342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.50.50.50.46.55.50.46.48.46.48.47.49.53|4x|3232322e37322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.49.46.48.46.48.47.49.54|4x|36312e3135312e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.53.50.46.48.46.48.47.49.54|4x|36312e3135322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.53.46.48.46.48.47.49.54|4x|36312e3136352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.54.57.46.48.46.48.47.49.54|4x|36312e3136392e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.48.46.48.46.48.47.49.53|4x|36312e3137302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.13.54.49.46.49.55.50.46.48.46.48.47.49.53|4x|36312e3137322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.49.57.50.46.48.46.48.47.49.54|4x|3131362e3139322e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.50.52.46.48.46.48.47.49.50|4x|3131362e3232342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.49.49.54.46.50.52.54.46.48.46.48.47.49.53|4x|3131362e3234362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.49.46.48.46.48.47.49.56|4x|3230322e3130312e302e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.14.50.48.50.46.49.48.57.46.48.46.48.47.49.55|4x|3230322e3130392e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.15.50.48.50.46.57.54.46.49.57.50.46.48.47.49.56|4x|3230322e39362e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.23.47.67.111.109.109.111.110.47.83.104.97.110.103.104.97.105.84.101.108.101.99.111.109.0.0.16.50.50.49.46.50.51.57.46.49.50.56.46.48.47.49.55|4x|3232312e3233392e3132382e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.49.55.46.49.50.56.46.48.46.48.47.49.48|4x|3131372e3132382e302e302f3130 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.49.50.48.46.49.57.50.46.48.46.48.47.49.48|4x|3132302e3139322e302e302f3130 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.48.51.46.48.46.48.47.49.55|4x|3231312e3130332e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.49.46.49.51.54.46.48.46.48.47.49.51|4x|3231312e3133362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.49.56.46.50.48.48.46.48.46.48.47.49.51|4x|3231382e3230302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.51.48.46.48.46.48.47.49.53|4x|3232312e3133302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.25.47.67.111.109.109.111.110.47.67.104.105.110.97.77.111.98.105.108.78.101.116.119.111.114.107.0.0.14.50.50.49.46.49.55.54.46.48.46.48.47.49.51|4x|3232312e3137362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.49.51.46.48.46.48.47.49.55|4x|3132322e31332e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.50.46.54.52.46.48.46.48.47.49.49|4x|3132322e36342e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.49.50.51.46.54.52.46.48.46.48.47.49.49|4x|3132332e36342e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.49.49.46.57.56.46.48.46.48.47.49.54|4x|3231312e39382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.50.50.50.46.51.50.46.48.46.48.47.49.49|4x|3232322e33322e302e302f3131 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.50.46.48.46.48.47.49.52|4x|36312e3233322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.13.54.49.46.50.51.54.46.48.46.48.47.49.53|4x|36312e3233362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.14.50.50.49.46.49.55.50.46.48.46.48.47.49.52|4x|3232312e3137322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.26.47.67.111.109.109.111.110.47.67.104.105.110.97.82.97.105.108.119.97.121.84.101.108.99.111.109.0.0.15.49.50.50.46.49.51.46.49.50.56.46.48.47.49.56|4x|3132322e31332e3132382e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.12.53.57.46.54.52.46.48.46.48.47.49.50|4x|35392e36342e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.51.46.53.52.46.48.46.48.47.49.53|4x|3131332e35342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.53.46.50.52.46.48.46.48.47.49.52|4x|3131352e32342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.49.51.46.48.46.48.47.49.54|4x|3131362e31332e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.54.46.48.46.48.47.49.55|4x|3131362e35362e302e302f3137 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.49.54.46.53.55.46.48.46.48.47.49.54|4x|3131362e35372e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.48.46.57.52.46.48.46.48.47.49.53|4x|3132302e39342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.49.50.49.46.52.56.46.48.46.48.47.49.53|4x|3132312e34382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.53.46.48.46.48.47.49.54|4x|3231302e32352e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.54.46.48.46.48.47.49.53|4x|3231302e32362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.50.56.46.48.46.48.47.49.52|4x|3231302e32382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.48.46.51.50.46.48.46.48.47.49.50|4x|3231302e33322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.54.52.46.48.46.48.47.49.51|4x|3231312e36342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.49.49.46.56.48.46.48.46.48.47.49.51|4x|3231312e38302e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.50.50.50.46.49.54.46.48.46.48.47.49.50|4x|3232322e31362e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.53.52.46.48.46.48.47.49.53|4x|35382e3135342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.13.53.56.46.49.57.50.46.48.46.48.47.49.50|4x|35382e3139322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.50.46.48.46.48.47.49.53|4x|3131342e3231322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.52.46.50.49.52.46.48.46.48.47.49.54|4x|3131342e3231342e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.52.46.48.46.48.47.49.53|4x|3131352e3135342e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.54.46.48.46.48.47.49.53|4x|3131352e3135362e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.53.46.49.53.56.46.48.46.48.47.49.54|4x|3131352e3135382e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.48.50.46.48.46.48.47.49.53|4x|3131382e3230322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.50.56.46.48.46.48.47.49.53|4x|3131382e3232382e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.49.56.46.50.51.48.46.48.46.48.47.49.54|4x|3131382e3233302e302e302f3136 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.49.57.50.46.48.46.48.47.49.52|4x|3132312e3139322e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.49.46.50.52.56.46.48.46.48.47.49.52|4x|3132312e3234382e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.50.46.50.48.52.46.48.46.48.47.49.52|4x|3132322e3230342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.49.50.53.46.50.49.54.46.48.46.48.47.49.51|4x|3132352e3231362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.49.50.46.48.46.48.47.49.51|4x|3230322e3131322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.50.48.46.48.46.48.47.49.53|4x|3230322e3132302e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.49.57.50.46.48.46.48.47.49.50|4x|3230322e3139322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.48.50.46.51.56.46.57.54.46.48.47.49.57|4x|3230322e33382e39362e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.56.46.49.57.50.46.48.46.48.47.49.51|4x|3231382e3139322e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.49.54.46.48.46.48.47.49.51|4x|3231392e3231362e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.50.52.46.48.46.48.47.49.51|4x|3231392e3232342e302e302f3133 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.50.46.48.46.48.47.49.53|4x|3231392e3234322e302e302f3135 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.49.57.46.50.52.52.46.48.46.48.47.49.52|4x|3231392e3234342e302e302f3134 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.14.50.50.50.46.49.57.50.46.48.46.48.47.49.50|4x|3232322e3139322e302e302f3132 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.50.56.46.48.47.49.57|4x|3131362e35362e3132382e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.54.48.46.48.47.50.48|4x|3131362e35362e3136302e302f3230 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.55.54.46.48.47.50.51|4x|3131362e35362e3137362e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.48.46.48.47.50.50|4x|3131362e35362e3138302e302f3232 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.56.52.46.48.47.50.49|4x|3131362e35362e3138342e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.49.54.46.53.54.46.49.57.50.46.48.47.49.56|4x|3131362e35362e3139322e302f3138 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.49.50.49.46.53.50.46.49.54.48.46.48.47.49.57|4x|3132312e35322e3136302e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.52.48.46.48.47.50.51|4x|3230322e33382e3134302e302f3233 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.50.46.51.56.46.49.56.52.46.48.47.50.49|4x|3230322e33382e3138342e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.15.50.48.51.46.57.49.46.49.50.48.46.48.47.50.49|4x|3230332e39312e3132302e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.49.54.46.48.47.50.49|4x|3230322e3132372e3231362e302f3231 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.50.55.46.50.50.52.46.48.47.49.57|4x|3230322e3132372e3232342e302f3139 +1.3.6.1.4.1.3375.2.3.7.2.2.1.5.2.29.47.67.111.109.109.111.110.47.67.104.105.110.97.69.100.117.99.97.116.105.111.110.78.101.116.119.111.114.107.0.0.16.50.48.50.46.49.55.57.46.50.52.48.46.48.47.50.48|4x|3230322e3137392e3234302e302f3230 +1.3.6.1.4.1.3375.2.3.8.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.8.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.8.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.8.3.2.0|2|0 +1.3.6.1.4.1.3375.2.3.9.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.9.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.9.2.2.0|2|0 +1.3.6.1.4.1.3375.2.3.9.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.9.4.1.0|2|0 +1.3.6.1.4.1.3375.2.3.9.4.2.0|2|0 +1.3.6.1.4.1.3375.2.3.10.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.11.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.11.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.11.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.11.3.2.0|2|0 +1.3.6.1.4.1.3375.2.3.11.4.1.0|2|0 +1.3.6.1.4.1.3375.2.3.12.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.12.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.12.2.2.0|2|0 +1.3.6.1.4.1.3375.2.3.12.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.12.4.1.0|2|0 +1.3.6.1.4.1.3375.2.3.12.5.1.0|2|0 +1.3.6.1.4.1.3375.2.3.12.6.1.0|2|0 +1.3.6.1.4.1.3375.2.3.13.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.13.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.13.2.2.0|2|0 +1.3.6.1.4.1.3375.2.3.13.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.13.4.1.0|2|0 +1.3.6.1.4.1.3375.2.3.13.5.1.0|2|0 +1.3.6.1.4.1.3375.2.3.13.5.2.0|2|0 +1.3.6.1.4.1.3375.2.3.13.6.1.0|2|0 +1.3.6.1.4.1.3375.2.3.14.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.14.1.2.0|2|0 +1.3.6.1.4.1.3375.2.3.15.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.15.2.1.0|2|0 +1.3.6.1.4.1.3375.2.3.15.2.2.0|2|0 +1.3.6.1.4.1.3375.2.3.15.3.1.0|2|0 +1.3.6.1.4.1.3375.2.3.16.1.1.0|2|0 +1.3.6.1.4.1.3375.2.3.17.1.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.1.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.1.2.0|2|4 +1.3.6.1.4.1.3375.2.6.1.1.3.1.1.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|4|access +1.3.6.1.4.1.3375.2.6.1.1.3.1.1.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|4x|5f746d6d5f61706d5f61636c +1.3.6.1.4.1.3375.2.6.1.1.3.1.1.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|4x|5f746d6d5f61706d5f61636c +1.3.6.1.4.1.3375.2.6.1.1.3.1.1.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|4x|2f436f6d6d6f6e2f616363657373 +1.3.6.1.4.1.3375.2.6.1.1.3.1.2.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.2.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.2.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.2.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.3.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.3.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.3.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.3.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.4.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.4.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.4.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.4.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.5.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.5.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.5.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.5.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.6.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.6.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.6.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.6.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.7.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.7.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.7.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.7.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.8.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.8.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.8.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.8.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.9.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.9.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.9.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.9.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.10.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.10.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.10.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.10.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.11.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.11.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.11.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.11.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.12.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.12.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.12.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.12.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.13.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.13.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.13.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.13.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.14.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.14.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.14.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.14.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.15.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.15.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.15.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.15.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.16.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.16.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.16.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.16.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.17.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.17.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.17.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.17.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.18.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.18.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.18.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.18.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.19.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.19.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.19.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.19.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.20.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.20.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.20.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.20.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.21.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.21.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.21.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.21.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.22.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.22.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.22.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.22.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.23.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.23.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.23.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.23.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.24.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.24.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.24.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.24.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.25.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.25.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.25.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.25.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.26.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.26.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.26.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.26.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.27.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.27.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.27.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.27.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.28.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.28.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.28.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.28.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.29.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.29.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.29.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.29.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.30.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.30.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.30.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.30.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.31.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.31.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.31.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.31.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.32.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.32.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.32.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.32.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.33.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.33.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.33.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.33.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.34.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.34.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.34.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.34.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.35.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.35.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.35.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.35.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.36.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.36.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.36.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.36.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.37.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.37.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.37.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.37.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.38.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.38.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.38.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.38.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.39.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.39.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.39.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.39.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.40.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.40.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.40.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.40.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.41.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.41.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.41.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.41.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.42.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.42.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.42.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.42.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.43.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.43.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.43.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.43.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.44.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.44.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.44.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.44.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.45.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.45.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.45.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.45.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.46.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.46.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.46.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.46.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.47.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.47.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.47.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.47.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.48.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.48.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.48.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.48.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.49.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.49.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.49.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.49.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.50.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.50.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.50.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.50.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.51.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.51.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.51.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.51.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.52.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.52.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.52.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.52.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.53.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.53.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.53.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.53.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.54.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.54.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.54.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.54.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.55.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.55.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.55.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.55.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.56.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.56.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.56.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.56.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.57.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.57.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.57.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.57.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.58.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.58.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.58.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.58.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.59.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.59.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.59.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.59.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.60.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.60.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.60.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.60.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.61.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.61.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.61.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.61.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.62.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.62.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.62.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.62.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.63.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.63.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.63.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.63.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.64.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.64.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.64.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.64.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.65.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.65.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.65.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.65.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.66.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.66.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.66.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.66.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.67.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.67.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.67.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.67.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.68.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.68.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.68.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.68.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.69.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.69.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.69.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.69.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.70.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.70.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.70.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.70.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.71.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.71.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.71.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.71.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.72.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.72.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.72.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.72.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.73.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.73.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.73.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.73.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.74.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.74.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.74.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.74.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.75.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.75.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.75.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.75.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.76.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.76.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.76.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.76.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.77.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.77.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.77.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.77.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.78.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.78.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.78.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.78.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.79.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.79.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.79.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.79.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.80.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.80.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.80.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.80.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.81.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.81.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.81.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.81.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.82.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.82.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.82.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.82.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.83.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.83.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.83.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.83.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.84.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.84.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.84.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.84.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.85.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.85.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.85.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.85.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.86.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.86.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.86.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.86.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.87.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.87.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.87.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.87.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.88.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.88.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.88.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.88.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.89.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.89.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.89.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.89.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.90.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.90.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.90.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.90.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.91.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.91.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.91.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.91.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.92.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.92.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.92.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.92.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.93.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.93.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.93.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.93.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.94.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.94.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.94.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.94.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.95.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.95.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.95.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.95.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.96.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.96.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.96.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.96.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.97.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.97.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.97.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.97.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.98.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.98.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.98.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.98.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.99.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.99.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.99.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.99.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.100.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.100.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.100.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.100.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.101.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.101.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.101.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.101.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.102.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.102.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.102.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.102.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.103.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.103.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.103.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.103.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.104.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.104.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.104.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.104.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.105.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.105.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.105.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.105.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.106.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.106.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.106.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.106.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.107.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.107.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.107.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.107.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.108.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.108.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.108.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.108.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.109.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.109.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.109.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.109.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.110.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.110.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.110.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.110.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.111.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.111.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.111.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.111.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.112.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.112.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.112.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.112.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.113.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.113.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.113.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.113.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.114.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.114.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.114.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.114.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.115.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.115.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.115.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.115.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.116.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.116.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.116.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.116.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.117.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.117.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.117.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.117.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.118.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.118.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.118.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.118.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.119.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.119.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.119.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.119.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.120.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.120.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.120.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.120.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.121.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.121.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.121.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.121.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.122.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.122.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.122.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.122.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.123.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.123.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.123.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.123.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.124.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.124.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.124.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.124.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.125.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.125.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.125.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.125.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.126.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.126.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.126.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.126.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.127.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.127.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.127.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.127.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.128.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.128.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.128.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.128.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.129.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.129.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.129.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.129.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.130.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.130.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.130.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.130.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.131.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.131.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.131.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.131.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.132.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.132.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.132.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.132.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.133.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.133.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.133.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.133.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.134.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.134.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.134.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.134.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.135.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.135.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.135.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.135.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.136.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.136.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.136.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.136.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.137.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.137.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.137.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.137.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.138.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.138.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.138.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.138.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.139.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.139.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.139.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.139.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.140.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.140.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.140.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.140.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.141.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.141.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.141.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.141.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.142.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.142.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.142.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.142.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.143.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.143.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.143.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.143.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.144.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.144.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.144.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.144.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.145.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.145.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.145.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.145.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.146.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.146.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.146.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.146.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.147.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.147.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.147.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.147.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.148.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.148.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.148.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.148.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.149.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.149.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.149.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.149.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.150.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.150.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.150.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.150.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.151.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.151.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.151.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.151.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.152.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.152.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.152.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.152.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.153.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.153.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.153.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.153.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.154.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.154.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.154.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.154.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.155.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.155.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.155.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.155.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.156.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.156.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.156.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.156.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.157.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.157.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.157.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.157.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.158.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.158.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.158.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.158.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.159.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.159.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.159.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.159.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.160.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.160.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.160.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.160.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.161.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.161.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.161.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.161.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.162.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.162.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.162.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.162.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.163.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.163.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.163.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.163.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.164.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.164.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.164.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.164.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.165.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.165.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.165.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.165.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.166.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.166.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.166.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.166.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.167.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.167.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.167.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.167.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.168.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.168.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.168.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.168.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.169.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.169.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.169.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.169.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.170.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.170.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.170.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.170.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.171.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.171.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.171.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.171.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.172.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.172.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.172.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.172.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.173.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.173.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.173.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.173.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.174.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.174.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.174.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.174.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.175.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.175.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.175.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.175.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.176.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.176.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.176.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.176.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.177.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.177.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.177.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.177.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.178.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.178.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.178.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.178.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.179.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.179.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.179.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.179.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.180.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.180.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.180.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.180.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.181.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.181.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.181.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.181.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.182.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.182.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.182.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.182.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.183.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.183.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.183.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.183.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.184.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.184.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.184.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.184.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.185.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.185.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.185.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.185.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.186.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.186.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.186.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.186.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.187.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.187.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.187.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.187.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.188.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.188.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.188.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.188.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.189.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.189.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.189.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.189.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.190.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.190.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.190.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.190.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.191.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.191.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.191.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.191.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.192.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.192.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.192.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.192.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.193.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.193.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.193.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.193.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.194.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.194.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.194.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.194.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.195.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.195.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.195.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.195.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.196.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.196.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.196.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.196.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.197.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.197.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.197.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.197.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.198.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.198.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.198.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.198.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.199.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.199.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.199.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.199.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.200.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.200.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.200.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.200.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.201.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.201.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.201.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.201.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.202.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.202.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.202.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.202.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.203.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.203.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.203.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.203.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.204.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.204.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.204.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.204.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.205.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.205.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.205.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.205.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.206.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.206.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.206.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.206.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.207.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.207.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.207.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.207.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.208.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.208.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.208.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.208.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.209.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.209.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.209.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.209.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.210.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.210.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.210.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.210.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.211.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.211.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.211.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.211.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.212.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.212.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.212.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.212.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.213.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.213.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.213.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.213.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.214.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.214.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.214.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.214.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.215.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.215.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.215.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.215.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.216.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.216.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.216.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.216.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.217.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.217.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.217.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.217.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.218.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.218.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.218.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.218.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.219.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.219.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.219.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.219.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.220.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.220.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.220.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.220.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.221.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.221.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.221.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.221.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.222.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.222.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.222.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.222.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.223.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.223.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.223.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.223.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.224.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.224.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.224.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.224.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.225.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.225.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.225.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.225.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.226.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.226.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.226.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.226.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.227.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|4x|5f6c697374656e6572 +1.3.6.1.4.1.3375.2.6.1.1.3.1.227.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|4x|5f746d6d5f61706d5f6677645f7669705f68747470 +1.3.6.1.4.1.3375.2.6.1.1.3.1.227.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|4x|5f746d6d5f61706d5f6677645f7669705f687474705f69707636 +1.3.6.1.4.1.3375.2.6.1.1.3.1.227.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|4x|5f6c697374656e6572 +1.3.6.1.4.1.3375.2.6.1.1.3.1.228.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.228.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.228.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.228.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.229.6.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.229.12.95.116.109.109.95.97.112.109.95.97.99.108.21.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.229.12.95.116.109.109.95.97.112.109.95.97.99.108.26.95.116.109.109.95.97.112.109.95.102.119.100.95.118.105.112.95.104.116.116.112.95.105.112.118.54|70|0 +1.3.6.1.4.1.3375.2.6.1.1.3.1.229.14.47.67.111.109.109.111.110.47.97.99.99.101.115.115.9.95.108.105.115.116.101.110.101.114|70|0 +1.3.6.1.4.1.3375.2.6.1.2.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.2.2.0|2|1 +1.3.6.1.4.1.3375.2.6.1.2.3.1.1.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|4x|2f436f6d6d6f6e2f636f6e6e6563746976697479 +1.3.6.1.4.1.3375.2.6.1.2.3.1.2.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.2.3.1.3.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.2.3.1.4.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.2.3.1.5.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.2.3.1.6.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.2.3.1.7.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.2.3.1.8.20.47.67.111.109.109.111.110.47.99.111.110.110.101.99.116.105.118.105.116.121|70|0 +1.3.6.1.4.1.3375.2.6.1.3.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.3.2.0|2|3 +1.3.6.1.4.1.3375.2.6.1.3.3.1.1.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|4x|2f436f6d6d6f6e2f72657772697465 +1.3.6.1.4.1.3375.2.6.1.3.3.1.1.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|4x|2f436f6d6d6f6e2f726577726974652d706f7274616c +1.3.6.1.4.1.3375.2.6.1.3.3.1.1.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|4x|2f436f6d6d6f6e2f726577726974652d7572692d7472616e736c6174696f6e +1.3.6.1.4.1.3375.2.6.1.3.3.1.2.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.2.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.2.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.3.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.3.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.3.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.4.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.4.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.4.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.5.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.5.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.5.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.6.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.6.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.6.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.7.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.7.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.7.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.8.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.8.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.8.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.9.15.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.9.22.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.112.111.114.116.97.108|70|0 +1.3.6.1.4.1.3375.2.6.1.3.3.1.9.31.47.67.111.109.109.111.110.47.114.101.119.114.105.116.101.45.117.114.105.45.116.114.97.110.115.108.97.116.105.111.110|70|0 +1.3.6.1.4.1.3375.2.6.1.4.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.4.2.0|66|0 +1.3.6.1.4.1.3375.2.6.1.4.3.0|66|0 +1.3.6.1.4.1.3375.2.6.1.4.4.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.5.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.6.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.7.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.8.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.9.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.10.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.11.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.12.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.13.0|70|0 +1.3.6.1.4.1.3375.2.6.1.4.14.0|70|0 +1.3.6.1.4.1.3375.2.6.1.5.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.5.2.0|70|0 +1.3.6.1.4.1.3375.2.6.1.5.3.0|66|0 +1.3.6.1.4.1.3375.2.6.1.5.4.0|70|0 +1.3.6.1.4.1.3375.2.6.1.5.5.0|70|0 +1.3.6.1.4.1.3375.2.6.1.5.6.0|70|0 +1.3.6.1.4.1.3375.2.6.1.5.7.0|70|0 +1.3.6.1.4.1.3375.2.6.1.5.8.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.6.2.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.3.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.4.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.5.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.6.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.7.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.8.0|70|0 +1.3.6.1.4.1.3375.2.6.1.6.9.0|70|0 +1.3.6.1.4.1.3375.2.6.1.7.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.7.2.0|2|0 +1.3.6.1.4.1.3375.2.6.1.8.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.8.2.0|2|0 +1.3.6.1.4.1.3375.2.6.1.9.1.0|2|0 +1.3.6.1.4.1.3375.2.6.1.9.2.0|66|10 +1.3.6.1.4.1.3375.2.6.1.9.3.0|66|10 +1.3.6.1.4.1.3375.2.6.1.9.4.0|66|0 +1.3.6.1.4.1.3375.2.6.1.9.5.0|66|10 +1.3.6.1.4.1.3375.2.6.2.1.1.0|2|0 +1.3.6.1.4.1.3375.2.6.2.1.2.0|2|0 +1.3.6.1.4.1.3375.2.6.3.1.1.0|2|0 +1.3.6.1.4.1.3375.2.6.3.1.2.0|2|0 +1.3.6.1.4.1.3375.2.6.4.1.1.0|2|0 +1.3.6.1.4.1.3375.2.6.4.1.2.0|2|0 +1.3.6.1.4.1.8072.1.3.2.1.0|2|0 +1.3.6.1.4.1.14706.1.1.1|4x|312e333b4635204e6574776f726b733b312e3000 +1.3.6.1.4.1.14706.1.1.2|2|1 +1.3.6.1.4.1.14706.1.1.3|4x|7f000001 +1.3.6.1.4.1.14706.1.1.4.1.1.1|2|1 +1.3.6.1.4.1.14706.1.1.4.1.1.2|2|2 +1.3.6.1.4.1.14706.1.1.4.1.1.3|2|3 +1.3.6.1.4.1.14706.1.1.4.1.1.4|2|4 +1.3.6.1.4.1.14706.1.1.4.1.1.5|2|5 +1.3.6.1.4.1.14706.1.1.4.1.1.6|2|6 +1.3.6.1.4.1.14706.1.1.4.1.1.7|2|7 +1.3.6.1.4.1.14706.1.1.4.1.1.8|2|8 +1.3.6.1.4.1.14706.1.1.4.1.1.9|2|9 +1.3.6.1.4.1.14706.1.1.4.1.1.10|2|10 +1.3.6.1.4.1.14706.1.1.4.1.2.1|4| +1.3.6.1.4.1.14706.1.1.4.1.2.2|4| +1.3.6.1.4.1.14706.1.1.4.1.2.3|4| +1.3.6.1.4.1.14706.1.1.4.1.2.4|4| +1.3.6.1.4.1.14706.1.1.4.1.2.5|4| +1.3.6.1.4.1.14706.1.1.4.1.2.6|4| +1.3.6.1.4.1.14706.1.1.4.1.2.7|4| +1.3.6.1.4.1.14706.1.1.4.1.2.8|4| +1.3.6.1.4.1.14706.1.1.4.1.2.9|4| +1.3.6.1.4.1.14706.1.1.4.1.2.10|4| +1.3.6.1.4.1.14706.1.1.4.1.3.1|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.2|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.3|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.4|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.5|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.6|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.7|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.8|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.9|2|0 +1.3.6.1.4.1.14706.1.1.4.1.3.10|2|0 +1.3.6.1.4.1.14706.1.1.4.1.4.1|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.2|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.3|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.4|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.5|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.6|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.7|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.8|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.9|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.4.10|2|1400 +1.3.6.1.4.1.14706.1.1.4.1.5.1|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.2|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.3|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.4|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.5|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.6|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.7|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.8|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.9|2|1 +1.3.6.1.4.1.14706.1.1.4.1.5.10|2|1 +1.3.6.1.4.1.14706.1.1.4.1.6.1|4| +1.3.6.1.4.1.14706.1.1.4.1.6.2|4| +1.3.6.1.4.1.14706.1.1.4.1.6.3|4| +1.3.6.1.4.1.14706.1.1.4.1.6.4|4| +1.3.6.1.4.1.14706.1.1.4.1.6.5|4| +1.3.6.1.4.1.14706.1.1.4.1.6.6|4| +1.3.6.1.4.1.14706.1.1.4.1.6.7|4| +1.3.6.1.4.1.14706.1.1.4.1.6.8|4| +1.3.6.1.4.1.14706.1.1.4.1.6.9|4| +1.3.6.1.4.1.14706.1.1.4.1.6.10|4| +1.3.6.1.4.1.14706.1.1.4.1.7.1|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.2|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.3|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.4|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.5|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.6|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.7|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.8|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.9|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.7.10|2|6343 +1.3.6.1.4.1.14706.1.1.4.1.8.1|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.2|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.3|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.4|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.5|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.6|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.7|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.8|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.9|2|5 +1.3.6.1.4.1.14706.1.1.4.1.8.10|2|5 +1.3.6.1.6.3.1.1.6.1.0|2|697276497 +1.3.6.1.6.3.10.2.1.1.0|4x|80001f88804a49c41225c7915d +1.3.6.1.6.3.10.2.1.2.0|2|31 +1.3.6.1.6.3.10.2.1.3.0|2|1813186 +1.3.6.1.6.3.10.2.1.4.0|2|1500 +1.3.6.1.6.3.11.2.1.1.0|65|0 +1.3.6.1.6.3.11.2.1.2.0|65|0 +1.3.6.1.6.3.11.2.1.3.0|65|0 +1.3.6.1.6.3.12.1.1.0|2|0 +1.3.6.1.6.3.12.1.4.0|65|0 +1.3.6.1.6.3.12.1.5.0|65|0 +1.3.6.1.6.3.15.1.1.1.0|65|0 +1.3.6.1.6.3.15.1.1.2.0|65|0 +1.3.6.1.6.3.15.1.1.3.0|65|0 +1.3.6.1.6.3.15.1.1.4.0|65|97 +1.3.6.1.6.3.15.1.1.5.0|65|0 +1.3.6.1.6.3.15.1.1.6.0|65|0 +1.3.6.1.6.3.15.1.2.1.0|2|0 +1.3.6.1.6.3.15.1.2.2.1.3.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|4|datadog +1.3.6.1.6.3.15.1.2.2.1.4.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|6|0.0 +1.3.6.1.6.3.15.1.2.2.1.5.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|6|1.3.6.1.6.3.10.1.1.3 +1.3.6.1.6.3.15.1.2.2.1.6.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|4| +1.3.6.1.6.3.15.1.2.2.1.7.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|4| +1.3.6.1.6.3.15.1.2.2.1.8.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|6|1.3.6.1.6.3.10.1.2.4 +1.3.6.1.6.3.15.1.2.2.1.9.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|4| +1.3.6.1.6.3.15.1.2.2.1.10.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|4| +1.3.6.1.6.3.15.1.2.2.1.11.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|4| +1.3.6.1.6.3.15.1.2.2.1.12.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|2|3 +1.3.6.1.6.3.15.1.2.2.1.13.13.128.0.31.136.128.74.73.196.18.37.199.145.93.7.100.97.116.97.100.111.103|2|1 +1.3.6.1.6.3.16.1.1.1.1.0|4| +1.3.6.1.6.3.16.1.2.1.3.1.6.99.111.109.109.53.56|4|grpcomm58 +1.3.6.1.6.3.16.1.2.1.3.2.6.99.111.109.109.53.56|4|grpcomm58 +1.3.6.1.6.3.16.1.2.1.3.3.7.100.97.116.97.100.111.103|4|grpdatadog +1.3.6.1.6.3.16.1.2.1.4.1.6.99.111.109.109.53.56|2|4 +1.3.6.1.6.3.16.1.2.1.4.2.6.99.111.109.109.53.56|2|4 +1.3.6.1.6.3.16.1.2.1.4.3.7.100.97.116.97.100.111.103|2|4 +1.3.6.1.6.3.16.1.2.1.5.1.6.99.111.109.109.53.56|2|1 +1.3.6.1.6.3.16.1.2.1.5.2.6.99.111.109.109.53.56|2|1 +1.3.6.1.6.3.16.1.2.1.5.3.7.100.97.116.97.100.111.103|2|1 +1.3.6.1.6.3.16.1.4.1.4.9.103.114.112.99.111.109.109.53.56.0.0.1|2|2 +1.3.6.1.6.3.16.1.4.1.4.10.103.114.112.100.97.116.97.100.111.103.0.3.3|2|2 +1.3.6.1.6.3.16.1.4.1.5.9.103.114.112.99.111.109.109.53.56.0.0.1|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.5.10.103.114.112.100.97.116.97.100.111.103.0.3.3|4|viewUSM59 +1.3.6.1.6.3.16.1.4.1.6.9.103.114.112.99.111.109.109.53.56.0.0.1|4|none +1.3.6.1.6.3.16.1.4.1.6.10.103.114.112.100.97.116.97.100.111.103.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.7.9.103.114.112.99.111.109.109.53.56.0.0.1|4|none +1.3.6.1.6.3.16.1.4.1.7.10.103.114.112.100.97.116.97.100.111.103.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.8.9.103.114.112.99.111.109.109.53.56.0.0.1|2|4 +1.3.6.1.6.3.16.1.4.1.8.10.103.114.112.100.97.116.97.100.111.103.0.3.3|2|4 +1.3.6.1.6.3.16.1.4.1.9.9.103.114.112.99.111.109.109.53.56.0.0.1|2|1 +1.3.6.1.6.3.16.1.4.1.9.10.103.114.112.100.97.116.97.100.111.103.0.3.3|2|1 +1.3.6.1.6.3.16.1.5.1.0|2|0 +1.3.6.1.6.3.16.1.5.2.1.3.5.95.97.108.108.95.1.0|4| +1.3.6.1.6.3.16.1.5.2.1.3.5.95.97.108.108.95.1.1|4| +1.3.6.1.6.3.16.1.5.2.1.3.5.95.97.108.108.95.1.2|4| +1.3.6.1.6.3.16.1.5.2.1.3.6.95.110.111.110.101.95.1.0|4| +1.3.6.1.6.3.16.1.5.2.1.3.6.95.110.111.110.101.95.1.1|4| +1.3.6.1.6.3.16.1.5.2.1.3.6.95.110.111.110.101.95.1.2|4| +1.3.6.1.6.3.16.1.5.2.1.3.9.118.105.101.119.85.83.77.53.57.4.1.3.6.1|4| +1.3.6.1.6.3.16.1.5.2.1.4.5.95.97.108.108.95.1.0|2|1 +1.3.6.1.6.3.16.1.5.2.1.4.5.95.97.108.108.95.1.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.4.5.95.97.108.108.95.1.2|2|1 +1.3.6.1.6.3.16.1.5.2.1.4.6.95.110.111.110.101.95.1.0|2|2 +1.3.6.1.6.3.16.1.5.2.1.4.6.95.110.111.110.101.95.1.1|2|2 +1.3.6.1.6.3.16.1.5.2.1.4.6.95.110.111.110.101.95.1.2|2|2 +1.3.6.1.6.3.16.1.5.2.1.4.9.118.105.101.119.85.83.77.53.57.4.1.3.6.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.5.5.95.97.108.108.95.1.0|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.5.95.97.108.108.95.1.1|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.5.95.97.108.108.95.1.2|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.6.95.110.111.110.101.95.1.0|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.6.95.110.111.110.101.95.1.1|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.6.95.110.111.110.101.95.1.2|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.9.118.105.101.119.85.83.77.53.57.4.1.3.6.1|2|4 +1.3.6.1.6.3.16.1.5.2.1.6.5.95.97.108.108.95.1.0|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.5.95.97.108.108.95.1.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.5.95.97.108.108.95.1.2|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.0|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.2|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.9.118.105.101.119.85.83.77.53.57.4.1.3.6.1|2|1 diff --git a/test/new-e2e/ndm/snmp/compose/data/fortinet-fortigate.snmprec b/test/new-e2e/ndm/snmp/compose/data/fortinet-fortigate.snmprec new file mode 100644 index 0000000000000..88f44b005c890 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/fortinet-fortigate.snmprec @@ -0,0 +1,77 @@ +1.3.6.1.2.1.1.2.0|4|1.3.6.1.4.1.12356.101.1.1 +1.3.6.1.2.1.47.1.1.1.1.2.1|4|Fortinet FGT_501E, HW Serial#: FG5H1E5110000000 +1.3.6.1.2.1.47.1.1.1.1.3.1|6|1.3.6.1.4.1.12356.5006.5006.0 +1.3.6.1.2.1.47.1.1.1.1.4.1|2|0 +1.3.6.1.2.1.47.1.1.1.1.5.1|2|3 +1.3.6.1.2.1.47.1.1.1.1.6.1|2|-1 +1.3.6.1.2.1.47.1.1.1.1.7.1|4|FGT_501E +1.3.6.1.2.1.47.1.1.1.1.8.1|4| +1.3.6.1.2.1.47.1.1.1.1.9.1|4| +1.3.6.1.2.1.47.1.1.1.1.10.1|4|FortiGate-501E v5.6.4,build1575b1575,180425 (GA) +1.3.6.1.2.1.47.1.1.1.1.11.1|4|FG5H1E5110000000 +1.3.6.1.2.1.47.1.1.1.1.12.1|4|Fortinet +1.3.6.1.2.1.47.1.1.1.1.13.1|4|FGT_501E +1.3.6.1.2.1.47.1.1.1.1.14.1|4| +1.3.6.1.2.1.47.1.1.1.1.15.1|4| +1.3.6.1.2.1.47.1.1.1.1.16.1|2|1 +1.3.6.1.2.1.47.1.1.1.1.17.1|4| +1.3.6.1.2.1.47.1.1.1.1.18.1|4| +1.3.6.1.4.1.12356.101.3.1.1.0|2|26 +1.3.6.1.4.1.12356.101.3.1.2.0|2|4 +1.3.6.1.4.1.12356.101.3.1.3.0|2|2 +1.3.6.1.4.1.12356.101.3.2.1.1.1.4|2|4 +1.3.6.1.4.1.12356.101.3.2.1.1.2.4|4x|7468656972206f78656e20717561696e746c79 +1.3.6.1.4.1.12356.101.3.2.1.1.3.4|2|1 +1.3.6.1.4.1.12356.101.3.2.1.1.4.4|2|2 +1.3.6.1.4.1.12356.101.3.2.1.1.5.4|66|42 +1.3.6.1.4.1.12356.101.3.2.1.1.6.4|66|33 +1.3.6.1.4.1.12356.101.3.2.1.1.7.4|66|2989472966 +1.3.6.1.4.1.12356.101.3.2.1.1.8.4|66|1080381326 +1.3.6.1.4.1.12356.101.4.1.1.0|4|v5.6.4,build1575b1575,180425 (GA) +1.3.6.1.4.1.12356.101.4.1.2.0|2|26 +1.3.6.1.4.1.12356.101.4.1.3.0|66|10 +1.3.6.1.4.1.12356.101.4.1.4.0|66|29 +1.3.6.1.4.1.12356.101.4.1.5.0|66|2289080295 +1.3.6.1.4.1.12356.101.4.1.6.0|66|1268728682 +1.3.6.1.4.1.12356.101.4.1.7.0|66|4157079948 +1.3.6.1.4.1.12356.101.4.1.8.0|66|2483533213 +1.3.6.1.4.1.12356.101.4.1.9.0|66|38 +1.3.6.1.4.1.12356.101.4.1.10.0|66|4005490351 +1.3.6.1.4.1.12356.101.4.1.11.0|66|721053226 +1.3.6.1.4.1.12356.101.4.1.12.0|66|4201127826 +1.3.6.1.4.1.12356.101.4.1.13.0|66|285761508 +1.3.6.1.4.1.12356.101.4.1.14.0|66|1305300731 +1.3.6.1.4.1.12356.101.4.1.15.0|66|3930350334 +1.3.6.1.4.1.12356.101.4.1.16.0|66|490490644 +1.3.6.1.4.1.12356.101.4.1.17.0|66|3157833604 +1.3.6.1.4.1.12356.101.4.1.18.0|66|3500286743 +1.3.6.1.4.1.12356.101.4.1.19.0|66|1959290694 +1.3.6.1.4.1.12356.101.4.1.20.0|70|14789083134851123033 +1.3.6.1.4.1.12356.101.4.4.2.1.1.12|2|12 +1.3.6.1.4.1.12356.101.4.4.2.1.2.12|66|44 +1.3.6.1.4.1.12356.101.4.4.2.1.6.12|70|6053432544510993268 +1.3.6.1.4.1.12356.101.4.4.2.1.7.12|70|4558642640541757871 +1.3.6.1.4.1.12356.101.4.4.2.1.8.12|70|18335276119483080244 +1.3.6.1.4.1.12356.101.4.4.2.1.9.12|66|91 +1.3.6.1.4.1.12356.101.4.4.2.1.10.12|66|20 +1.3.6.1.4.1.12356.101.5.1.2.1.1.1.2.22|2|22 +1.3.6.1.4.1.12356.101.5.1.2.1.1.2.2.22|65|3921966751 +1.3.6.1.4.1.12356.101.5.1.2.1.1.3.2.22|65|59854764 +1.3.6.1.4.1.12356.101.5.1.2.1.1.4.2.22|4x|4a6164656420666f72776172642064726976696e6720746865697220717561696e746c7920717561696e746c79206b657074206b657074 +1.3.6.1.4.1.12356.101.5.1.2.1.1.5.2.22|70|10146562834102172440 +1.3.6.1.4.1.12356.101.5.1.2.1.1.6.2.22|70|4417853499527088953 +1.3.6.1.4.1.12356.101.5.1.2.2.1.1.5.29|2|29 +1.3.6.1.4.1.12356.101.5.1.2.2.1.2.5.29|70|13218909809640136190 +1.3.6.1.4.1.12356.101.5.1.2.2.1.3.5.29|70|9058397767704808189 +1.3.6.1.4.1.12356.101.5.1.2.2.1.4.5.29|4x|4a61646564204a61646564 +1.3.6.1.4.1.12356.101.7.2.1.1.1.1|2|19 +1.3.6.1.4.1.12356.101.10.100.4.0|66|25504 +1.3.6.1.4.1.12356.101.10.100.5.0|66|817 +1.3.6.1.4.1.12356.101.12.2.2.1.2.1|4|ESMAO-Lomtec +1.3.6.1.4.1.12356.101.12.2.2.1.2.2|4|ESMAO +1.3.6.1.4.1.12356.101.12.2.2.1.18.1|70|3896031866066683889 +1.3.6.1.4.1.12356.101.12.2.2.1.18.2|70|13218909809640136190 +1.3.6.1.4.1.12356.101.12.2.2.1.19.1|70|3518073560493506800 +1.3.6.1.4.1.12356.101.12.2.2.1.19.2|70|9058397767704808189 +1.3.6.1.4.1.12356.101.12.2.2.1.20.1|2|2 +1.3.6.1.4.1.12356.101.12.2.2.1.20.2|2|1 diff --git a/test/new-e2e/ndm/snmp/compose/data/generic-router.snmprec b/test/new-e2e/ndm/snmp/compose/data/generic-router.snmprec new file mode 100644 index 0000000000000..93f6cf7f4a30a --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/generic-router.snmprec @@ -0,0 +1,1008 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.1.2.1.3.4 +1.3.6.1.2.1.2.1.0|2|2 +1.3.6.1.2.1.2.2.1.1.13|2|13 +1.3.6.1.2.1.2.2.1.1.15|2|15 +1.3.6.1.2.1.2.2.1.2.13|4x|65746830 +1.3.6.1.2.1.2.2.1.2.15|4x|65746831 +1.3.6.1.2.1.2.2.1.3.13|2|1 +1.3.6.1.2.1.2.2.1.3.15|2|25 +1.3.6.1.2.1.2.2.1.4.13|2|6 +1.3.6.1.2.1.2.2.1.4.15|2|17 +1.3.6.1.2.1.2.2.1.5.13|66|2331660664 +1.3.6.1.2.1.2.2.1.5.15|66|4163430592 +1.3.6.1.2.1.2.2.1.6.13|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.15|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.7.13|2|1 +1.3.6.1.2.1.2.2.1.7.15|2|3 +1.3.6.1.2.1.2.2.1.8.13|2|6 +1.3.6.1.2.1.2.2.1.8.15|2|4 +1.3.6.1.2.1.2.2.1.9.13|67|3458704566 +1.3.6.1.2.1.2.2.1.9.15|67|808281843 +1.3.6.1.2.1.2.2.1.10.13|65|1341952665 +1.3.6.1.2.1.2.2.1.10.15|65|4089479451 +1.3.6.1.2.1.2.2.1.11.13|65|2423700286 +1.3.6.1.2.1.2.2.1.11.15|65|3105545509 +1.3.6.1.2.1.2.2.1.12.13|65|2909048034 +1.3.6.1.2.1.2.2.1.12.15|65|3800287858 +1.3.6.1.2.1.2.2.1.13.13|65|3469490196 +1.3.6.1.2.1.2.2.1.13.15|65|1207715996 +1.3.6.1.2.1.2.2.1.14.13|65|3036907431 +1.3.6.1.2.1.2.2.1.14.15|65|2271913528 +1.3.6.1.2.1.2.2.1.15.13|65|1147964703 +1.3.6.1.2.1.2.2.1.15.15|65|32911865 +1.3.6.1.2.1.2.2.1.16.13|65|2182933189 +1.3.6.1.2.1.2.2.1.16.15|65|2122506434 +1.3.6.1.2.1.2.2.1.17.13|65|2459418639 +1.3.6.1.2.1.2.2.1.17.15|65|368059933 +1.3.6.1.2.1.2.2.1.18.13|65|4265068773 +1.3.6.1.2.1.2.2.1.18.15|65|1888961269 +1.3.6.1.2.1.2.2.1.19.13|65|883454404 +1.3.6.1.2.1.2.2.1.19.15|65|3019639136 +1.3.6.1.2.1.2.2.1.20.13|65|796620246 +1.3.6.1.2.1.2.2.1.20.15|65|265866093 +1.3.6.1.2.1.2.2.1.21.13|66|937466031 +1.3.6.1.2.1.2.2.1.21.15|66|2221236799 +1.3.6.1.2.1.2.2.1.22.13|6|1.3.6.1.3.107.152 +1.3.6.1.2.1.2.2.1.22.15|6|1.3.6.1.3.246.10.85.214 +1.3.6.1.2.1.4.1.0|2|2 +1.3.6.1.2.1.4.2.0|2|8 +1.3.6.1.2.1.4.3.0|65|3546637224 +1.3.6.1.2.1.4.4.0|65|2130923619 +1.3.6.1.2.1.4.5.0|65|1742824739 +1.3.6.1.2.1.4.6.0|65|1458658850 +1.3.6.1.2.1.4.7.0|65|1114590264 +1.3.6.1.2.1.4.8.0|65|3069832299 +1.3.6.1.2.1.4.9.0|65|2515896620 +1.3.6.1.2.1.4.10.0|65|3192933475 +1.3.6.1.2.1.4.11.0|65|1635654711 +1.3.6.1.2.1.4.12.0|65|158382596 +1.3.6.1.2.1.4.13.0|2|22 +1.3.6.1.2.1.4.14.0|65|128210379 +1.3.6.1.2.1.4.15.0|65|4215753440 +1.3.6.1.2.1.4.16.0|65|410770522 +1.3.6.1.2.1.4.17.0|65|443515482 +1.3.6.1.2.1.4.18.0|65|3687632801 +1.3.6.1.2.1.4.19.0|65|3948711557 +1.3.6.1.2.1.4.20.1.1.9.208.150.23|64x|09d09617 +1.3.6.1.2.1.4.20.1.1.200.11.80.108|64x|c80b506c +1.3.6.1.2.1.4.20.1.1.223.237.133.97|64x|dfed8561 +1.3.6.1.2.1.4.20.1.1.246.244.204.67|64x|f6f4cc43 +1.3.6.1.2.1.4.20.1.2.9.208.150.23|2|30 +1.3.6.1.2.1.4.20.1.2.200.11.80.108|2|1 +1.3.6.1.2.1.4.20.1.2.223.237.133.97|2|16 +1.3.6.1.2.1.4.20.1.2.246.244.204.67|2|28 +1.3.6.1.2.1.4.20.1.3.9.208.150.23|64x|4a909350 +1.3.6.1.2.1.4.20.1.3.200.11.80.108|64x|32a8da55 +1.3.6.1.2.1.4.20.1.3.223.237.133.97|64x|840e95c2 +1.3.6.1.2.1.4.20.1.3.246.244.204.67|64x|c0dc2c8d +1.3.6.1.2.1.4.20.1.4.9.208.150.23|2|1 +1.3.6.1.2.1.4.20.1.4.200.11.80.108|2|1 +1.3.6.1.2.1.4.20.1.4.223.237.133.97|2|1 +1.3.6.1.2.1.4.20.1.4.246.244.204.67|2|0 +1.3.6.1.2.1.4.20.1.5.9.208.150.23|2|1 +1.3.6.1.2.1.4.20.1.5.200.11.80.108|2|12 +1.3.6.1.2.1.4.20.1.5.223.237.133.97|2|7 +1.3.6.1.2.1.4.20.1.5.246.244.204.67|2|2 +1.3.6.1.2.1.4.22.1.1.6.169.28.142.191|2|6 +1.3.6.1.2.1.4.22.1.1.8.175.113.74.135|2|8 +1.3.6.1.2.1.4.22.1.1.25.126.182.179.115|2|25 +1.3.6.1.2.1.4.22.1.1.29.225.213.228.189|2|29 +1.3.6.1.2.1.4.22.1.2.6.169.28.142.191|4x|42010aa40033 +1.3.6.1.2.1.4.22.1.2.8.175.113.74.135|4x|42010aa40033 +1.3.6.1.2.1.4.22.1.2.25.126.182.179.115|4x|42010aa40033 +1.3.6.1.2.1.4.22.1.2.29.225.213.228.189|4x|42010aa40033 +1.3.6.1.2.1.4.22.1.3.6.169.28.142.191|64x|a91c8ebf +1.3.6.1.2.1.4.22.1.3.8.175.113.74.135|64x|af714a87 +1.3.6.1.2.1.4.22.1.3.25.126.182.179.115|64x|7eb6b373 +1.3.6.1.2.1.4.22.1.3.29.225.213.228.189|64x|e1d5e4bd +1.3.6.1.2.1.4.22.1.4.6.169.28.142.191|2|1 +1.3.6.1.2.1.4.22.1.4.8.175.113.74.135|2|2 +1.3.6.1.2.1.4.22.1.4.25.126.182.179.115|2|4 +1.3.6.1.2.1.4.22.1.4.29.225.213.228.189|2|2 +1.3.6.1.2.1.4.23.0|65|136816428 +1.3.6.1.2.1.4.25.0|2|2 +1.3.6.1.2.1.4.26.0|2|24 +1.3.6.1.2.1.4.27.0|67|3761728971 +1.3.6.1.2.1.4.28.1.1.1|2|1 +1.3.6.1.2.1.4.28.1.1.4|2|4 +1.3.6.1.2.1.4.28.1.1.8|2|8 +1.3.6.1.2.1.4.28.1.1.17|2|17 +1.3.6.1.2.1.4.28.1.2.1|2|21 +1.3.6.1.2.1.4.28.1.2.4|2|26 +1.3.6.1.2.1.4.28.1.2.8|2|28 +1.3.6.1.2.1.4.28.1.2.17|2|21 +1.3.6.1.2.1.4.28.1.3.1|2|2 +1.3.6.1.2.1.4.28.1.3.4|2|1 +1.3.6.1.2.1.4.28.1.3.8|2|2 +1.3.6.1.2.1.4.28.1.3.17|2|1 +1.3.6.1.2.1.4.28.1.4.1|66|812 +1.3.6.1.2.1.4.28.1.4.4|66|64486 +1.3.6.1.2.1.4.28.1.4.8|66|54467 +1.3.6.1.2.1.4.28.1.4.17|66|48432 +1.3.6.1.2.1.4.29.0|67|2362973703 +1.3.6.1.2.1.4.30.1.1.2|2|2 +1.3.6.1.2.1.4.30.1.1.17|2|17 +1.3.6.1.2.1.4.30.1.1.20|2|20 +1.3.6.1.2.1.4.30.1.1.22|2|22 +1.3.6.1.2.1.4.30.1.2.2|66|54933 +1.3.6.1.2.1.4.30.1.2.17|66|8984 +1.3.6.1.2.1.4.30.1.2.20|66|31294 +1.3.6.1.2.1.4.30.1.2.22|66|6797 +1.3.6.1.2.1.4.30.1.3.2|4x|a6b458008bf2baec +1.3.6.1.2.1.4.30.1.3.17|4x|a6b458008bf2baec +1.3.6.1.2.1.4.30.1.3.20|4x|a6b458008bf2baec +1.3.6.1.2.1.4.30.1.3.22|4x|a6b458008bf2baec +1.3.6.1.2.1.4.30.1.5.2|2|2 +1.3.6.1.2.1.4.30.1.5.17|2|1 +1.3.6.1.2.1.4.30.1.5.20|2|2 +1.3.6.1.2.1.4.30.1.5.22|2|1 +1.3.6.1.2.1.4.30.1.6.2|66|47619 +1.3.6.1.2.1.4.30.1.6.17|66|51660 +1.3.6.1.2.1.4.30.1.6.20|66|38999 +1.3.6.1.2.1.4.30.1.6.22|66|39635 +1.3.6.1.2.1.4.30.1.7.2|66|54160 +1.3.6.1.2.1.4.30.1.7.17|66|50062 +1.3.6.1.2.1.4.30.1.7.20|66|39585 +1.3.6.1.2.1.4.30.1.7.22|66|2062 +1.3.6.1.2.1.4.30.1.8.2|2|2 +1.3.6.1.2.1.4.30.1.8.17|2|1 +1.3.6.1.2.1.4.30.1.8.20|2|2 +1.3.6.1.2.1.4.30.1.8.22|2|1 +1.3.6.1.2.1.4.31.1.1.1.1|2|0 +1.3.6.1.2.1.4.31.1.1.1.2|2|1 +1.3.6.1.2.1.4.31.1.1.3.1|65|1282316752 +1.3.6.1.2.1.4.31.1.1.3.2|65|2931163933 +1.3.6.1.2.1.4.31.1.1.4.1|70|5783600227374381282 +1.3.6.1.2.1.4.31.1.1.4.2|70|7878841687722285205 +1.3.6.1.2.1.4.31.1.1.5.1|65|934018851 +1.3.6.1.2.1.4.31.1.1.5.2|65|1505478027 +1.3.6.1.2.1.4.31.1.1.6.1|70|3466652958807352799 +1.3.6.1.2.1.4.31.1.1.6.2|70|6846704842227960036 +1.3.6.1.2.1.4.31.1.1.7.1|65|3870134036 +1.3.6.1.2.1.4.31.1.1.7.2|65|603776157 +1.3.6.1.2.1.4.31.1.1.8.1|65|719375178 +1.3.6.1.2.1.4.31.1.1.8.2|65|3328353201 +1.3.6.1.2.1.4.31.1.1.9.1|65|3623879979 +1.3.6.1.2.1.4.31.1.1.9.2|65|1742598367 +1.3.6.1.2.1.4.31.1.1.10.1|65|3469512894 +1.3.6.1.2.1.4.31.1.1.10.2|65|4030917231 +1.3.6.1.2.1.4.31.1.1.11.1|65|3721065773 +1.3.6.1.2.1.4.31.1.1.11.2|65|3220804402 +1.3.6.1.2.1.4.31.1.1.12.1|65|2228913071 +1.3.6.1.2.1.4.31.1.1.12.2|65|506134763 +1.3.6.1.2.1.4.31.1.1.13.1|70|4072318956505567616 +1.3.6.1.2.1.4.31.1.1.13.2|70|16703760251682054234 +1.3.6.1.2.1.4.31.1.1.14.1|65|2629821608 +1.3.6.1.2.1.4.31.1.1.14.2|65|421955199 +1.3.6.1.2.1.4.31.1.1.15.1|65|2527685245 +1.3.6.1.2.1.4.31.1.1.15.2|65|1798858343 +1.3.6.1.2.1.4.31.1.1.16.1|65|1894065316 +1.3.6.1.2.1.4.31.1.1.16.2|65|1403953109 +1.3.6.1.2.1.4.31.1.1.17.1|65|1554498388 +1.3.6.1.2.1.4.31.1.1.17.2|65|194570689 +1.3.6.1.2.1.4.31.1.1.18.1|65|4086797048 +1.3.6.1.2.1.4.31.1.1.18.2|65|3394299994 +1.3.6.1.2.1.4.31.1.1.19.1|70|17920373517856541850 +1.3.6.1.2.1.4.31.1.1.19.2|70|4037738900336282162 +1.3.6.1.2.1.4.31.1.1.20.1|65|659216537 +1.3.6.1.2.1.4.31.1.1.20.2|65|2634142429 +1.3.6.1.2.1.4.31.1.1.21.1|70|17177900121309884840 +1.3.6.1.2.1.4.31.1.1.21.2|70|7492613728617028549 +1.3.6.1.2.1.4.31.1.1.22.1|65|2528551998 +1.3.6.1.2.1.4.31.1.1.22.2|65|892992587 +1.3.6.1.2.1.4.31.1.1.23.1|65|3481624357 +1.3.6.1.2.1.4.31.1.1.23.2|65|1680014673 +1.3.6.1.2.1.4.31.1.1.24.1|70|12177179272038917674 +1.3.6.1.2.1.4.31.1.1.24.2|70|9731262886757879750 +1.3.6.1.2.1.4.31.1.1.25.1|65|2358025353 +1.3.6.1.2.1.4.31.1.1.25.2|65|3917562466 +1.3.6.1.2.1.4.31.1.1.26.1|65|3747667050 +1.3.6.1.2.1.4.31.1.1.26.2|65|2310235615 +1.3.6.1.2.1.4.31.1.1.27.1|65|1890373924 +1.3.6.1.2.1.4.31.1.1.27.2|65|2255127251 +1.3.6.1.2.1.4.31.1.1.28.1|65|2860300133 +1.3.6.1.2.1.4.31.1.1.28.2|65|1458494545 +1.3.6.1.2.1.4.31.1.1.29.1|65|203139220 +1.3.6.1.2.1.4.31.1.1.29.2|65|1495544614 +1.3.6.1.2.1.4.31.1.1.30.1|65|3187405495 +1.3.6.1.2.1.4.31.1.1.30.2|65|2498299266 +1.3.6.1.2.1.4.31.1.1.31.1|70|14364224325252552480 +1.3.6.1.2.1.4.31.1.1.31.2|70|15579562295200870655 +1.3.6.1.2.1.4.31.1.1.32.1|65|1817172532 +1.3.6.1.2.1.4.31.1.1.32.2|65|3221638580 +1.3.6.1.2.1.4.31.1.1.33.1|70|17295591865016486147 +1.3.6.1.2.1.4.31.1.1.33.2|70|11593645523890791195 +1.3.6.1.2.1.4.31.1.1.34.1|65|3642660893 +1.3.6.1.2.1.4.31.1.1.34.2|65|2824375432 +1.3.6.1.2.1.4.31.1.1.35.1|70|1059496062163332352 +1.3.6.1.2.1.4.31.1.1.35.2|70|6779561539692407913 +1.3.6.1.2.1.4.31.1.1.36.1|65|1370217103 +1.3.6.1.2.1.4.31.1.1.36.2|65|414101783 +1.3.6.1.2.1.4.31.1.1.37.1|70|11808146763629487163 +1.3.6.1.2.1.4.31.1.1.37.2|70|199221492791940521 +1.3.6.1.2.1.4.31.1.1.38.1|65|3100959593 +1.3.6.1.2.1.4.31.1.1.38.2|65|1607946655 +1.3.6.1.2.1.4.31.1.1.39.1|70|5311911265536100817 +1.3.6.1.2.1.4.31.1.1.39.2|70|5796034691120619031 +1.3.6.1.2.1.4.31.1.1.40.1|65|727614759 +1.3.6.1.2.1.4.31.1.1.40.2|65|243788076 +1.3.6.1.2.1.4.31.1.1.41.1|70|10886034670150832037 +1.3.6.1.2.1.4.31.1.1.41.2|70|18081706296441551909 +1.3.6.1.2.1.4.31.1.1.42.1|65|2597626393 +1.3.6.1.2.1.4.31.1.1.42.2|65|1756902403 +1.3.6.1.2.1.4.31.1.1.43.1|70|3624977684937512266 +1.3.6.1.2.1.4.31.1.1.43.2|70|14241477518255792672 +1.3.6.1.2.1.4.31.1.1.44.1|65|1431813500 +1.3.6.1.2.1.4.31.1.1.44.2|65|822060041 +1.3.6.1.2.1.4.31.1.1.45.1|70|2377465159522396553 +1.3.6.1.2.1.4.31.1.1.45.2|70|17278067538447676831 +1.3.6.1.2.1.4.31.1.1.46.1|67|223104120 +1.3.6.1.2.1.4.31.1.1.46.2|67|2342974234 +1.3.6.1.2.1.4.31.1.1.47.1|66|38480 +1.3.6.1.2.1.4.31.1.1.47.2|66|40748 +1.3.6.1.2.1.4.31.2.0|67|1227405340 +1.3.6.1.2.1.4.31.3.1.1.1.17|2|0 +1.3.6.1.2.1.4.31.3.1.1.1.21|2|0 +1.3.6.1.2.1.4.31.3.1.1.2.17|2|1 +1.3.6.1.2.1.4.31.3.1.1.2.21|2|2 +1.3.6.1.2.1.4.31.3.1.2.1.17|2|17 +1.3.6.1.2.1.4.31.3.1.2.1.21|2|21 +1.3.6.1.2.1.4.31.3.1.2.2.17|2|27 +1.3.6.1.2.1.4.31.3.1.2.2.21|2|25 +1.3.6.1.2.1.4.31.3.1.3.1.17|65|866613297 +1.3.6.1.2.1.4.31.3.1.3.1.21|65|882617529 +1.3.6.1.2.1.4.31.3.1.3.2.17|65|4023831017 +1.3.6.1.2.1.4.31.3.1.3.2.21|65|2525818421 +1.3.6.1.2.1.4.31.3.1.4.1.17|70|16541259019565922139 +1.3.6.1.2.1.4.31.3.1.4.1.21|70|6488693863013666655 +1.3.6.1.2.1.4.31.3.1.4.2.17|70|17283542088757438702 +1.3.6.1.2.1.4.31.3.1.4.2.21|70|460141854202718217 +1.3.6.1.2.1.4.31.3.1.5.1.17|65|1351252213 +1.3.6.1.2.1.4.31.3.1.5.1.21|65|200152718 +1.3.6.1.2.1.4.31.3.1.5.2.17|65|2436057504 +1.3.6.1.2.1.4.31.3.1.5.2.21|65|2320669464 +1.3.6.1.2.1.4.31.3.1.6.1.17|70|6687352077047466084 +1.3.6.1.2.1.4.31.3.1.6.1.21|70|17902872121324216713 +1.3.6.1.2.1.4.31.3.1.6.2.17|70|18086586042523373768 +1.3.6.1.2.1.4.31.3.1.6.2.21|70|5918210585844939369 +1.3.6.1.2.1.4.31.3.1.7.1.17|65|828939801 +1.3.6.1.2.1.4.31.3.1.7.1.21|65|827041496 +1.3.6.1.2.1.4.31.3.1.7.2.17|65|2403042140 +1.3.6.1.2.1.4.31.3.1.7.2.21|65|2614144146 +1.3.6.1.2.1.4.31.3.1.8.1.17|65|3170610705 +1.3.6.1.2.1.4.31.3.1.8.1.21|65|2515427367 +1.3.6.1.2.1.4.31.3.1.8.2.17|65|1137784412 +1.3.6.1.2.1.4.31.3.1.8.2.21|65|1100196722 +1.3.6.1.2.1.4.31.3.1.9.1.17|65|2481076163 +1.3.6.1.2.1.4.31.3.1.9.1.21|65|3641344774 +1.3.6.1.2.1.4.31.3.1.9.2.17|65|2911509488 +1.3.6.1.2.1.4.31.3.1.9.2.21|65|3405124399 +1.3.6.1.2.1.4.31.3.1.10.1.17|65|1769506743 +1.3.6.1.2.1.4.31.3.1.10.1.21|65|1248224023 +1.3.6.1.2.1.4.31.3.1.10.2.17|65|3422838435 +1.3.6.1.2.1.4.31.3.1.10.2.21|65|3489136745 +1.3.6.1.2.1.4.31.3.1.11.1.17|65|3862632055 +1.3.6.1.2.1.4.31.3.1.11.1.21|65|2713908093 +1.3.6.1.2.1.4.31.3.1.11.2.17|65|476218303 +1.3.6.1.2.1.4.31.3.1.11.2.21|65|3698961401 +1.3.6.1.2.1.4.31.3.1.12.1.17|65|1359782321 +1.3.6.1.2.1.4.31.3.1.12.1.21|65|2241879983 +1.3.6.1.2.1.4.31.3.1.12.2.17|65|1183691998 +1.3.6.1.2.1.4.31.3.1.12.2.21|65|2063959814 +1.3.6.1.2.1.4.31.3.1.13.1.17|70|14347482721867749163 +1.3.6.1.2.1.4.31.3.1.13.1.21|70|7213536290436404267 +1.3.6.1.2.1.4.31.3.1.13.2.17|70|14469382783700684034 +1.3.6.1.2.1.4.31.3.1.13.2.21|70|1366907728168162104 +1.3.6.1.2.1.4.31.3.1.14.1.17|65|3317037142 +1.3.6.1.2.1.4.31.3.1.14.1.21|65|2862227008 +1.3.6.1.2.1.4.31.3.1.14.2.17|65|3323994287 +1.3.6.1.2.1.4.31.3.1.14.2.21|65|966431424 +1.3.6.1.2.1.4.31.3.1.15.1.17|65|2280556394 +1.3.6.1.2.1.4.31.3.1.15.1.21|65|3928591306 +1.3.6.1.2.1.4.31.3.1.15.2.17|65|2385065673 +1.3.6.1.2.1.4.31.3.1.15.2.21|65|1850469751 +1.3.6.1.2.1.4.31.3.1.16.1.17|65|1866916822 +1.3.6.1.2.1.4.31.3.1.16.1.21|65|647473452 +1.3.6.1.2.1.4.31.3.1.16.2.17|65|3661063266 +1.3.6.1.2.1.4.31.3.1.16.2.21|65|236639870 +1.3.6.1.2.1.4.31.3.1.17.1.17|65|3032320662 +1.3.6.1.2.1.4.31.3.1.17.1.21|65|678453899 +1.3.6.1.2.1.4.31.3.1.17.2.17|65|3967478828 +1.3.6.1.2.1.4.31.3.1.17.2.21|65|3875826723 +1.3.6.1.2.1.4.31.3.1.18.1.17|65|927115845 +1.3.6.1.2.1.4.31.3.1.18.1.21|65|3257624983 +1.3.6.1.2.1.4.31.3.1.18.2.17|65|3458426296 +1.3.6.1.2.1.4.31.3.1.18.2.21|65|2271164228 +1.3.6.1.2.1.4.31.3.1.19.1.17|70|7612831344874359679 +1.3.6.1.2.1.4.31.3.1.19.1.21|70|1029183689104183616 +1.3.6.1.2.1.4.31.3.1.19.2.17|70|6504169741601734200 +1.3.6.1.2.1.4.31.3.1.19.2.21|70|18010845534396597428 +1.3.6.1.2.1.4.31.3.1.20.1.17|65|2749255035 +1.3.6.1.2.1.4.31.3.1.20.1.21|65|289352940 +1.3.6.1.2.1.4.31.3.1.20.2.17|65|2642737967 +1.3.6.1.2.1.4.31.3.1.20.2.21|65|3817593854 +1.3.6.1.2.1.4.31.3.1.21.1.17|70|15554355085868323793 +1.3.6.1.2.1.4.31.3.1.21.1.21|70|753449946982882745 +1.3.6.1.2.1.4.31.3.1.21.2.17|70|5497439711304978459 +1.3.6.1.2.1.4.31.3.1.21.2.21|70|9375898839017839190 +1.3.6.1.2.1.4.31.3.1.23.1.17|65|1575381088 +1.3.6.1.2.1.4.31.3.1.23.1.21|65|303245646 +1.3.6.1.2.1.4.31.3.1.23.2.17|65|3378776420 +1.3.6.1.2.1.4.31.3.1.23.2.21|65|4127224866 +1.3.6.1.2.1.4.31.3.1.24.1.17|70|14237474042437363011 +1.3.6.1.2.1.4.31.3.1.24.1.21|70|18055252329989805762 +1.3.6.1.2.1.4.31.3.1.24.2.17|70|1899935865156339542 +1.3.6.1.2.1.4.31.3.1.24.2.21|70|8756817980611927920 +1.3.6.1.2.1.4.31.3.1.25.1.17|65|4145705697 +1.3.6.1.2.1.4.31.3.1.25.1.21|65|4284781511 +1.3.6.1.2.1.4.31.3.1.25.2.17|65|3138789772 +1.3.6.1.2.1.4.31.3.1.25.2.21|65|530428315 +1.3.6.1.2.1.4.31.3.1.26.1.17|65|756294558 +1.3.6.1.2.1.4.31.3.1.26.1.21|65|4068526151 +1.3.6.1.2.1.4.31.3.1.26.2.17|65|1358324308 +1.3.6.1.2.1.4.31.3.1.26.2.21|65|1093114005 +1.3.6.1.2.1.4.31.3.1.27.1.17|65|693160369 +1.3.6.1.2.1.4.31.3.1.27.1.21|65|1186174909 +1.3.6.1.2.1.4.31.3.1.27.2.17|65|957138868 +1.3.6.1.2.1.4.31.3.1.27.2.21|65|3062672417 +1.3.6.1.2.1.4.31.3.1.28.1.17|65|3201371121 +1.3.6.1.2.1.4.31.3.1.28.1.21|65|811270852 +1.3.6.1.2.1.4.31.3.1.28.2.17|65|2596548835 +1.3.6.1.2.1.4.31.3.1.28.2.21|65|3968817600 +1.3.6.1.2.1.4.31.3.1.29.1.17|65|1725960779 +1.3.6.1.2.1.4.31.3.1.29.1.21|65|836262327 +1.3.6.1.2.1.4.31.3.1.29.2.17|65|2090302675 +1.3.6.1.2.1.4.31.3.1.29.2.21|65|3056437053 +1.3.6.1.2.1.4.31.3.1.30.1.17|65|2462307539 +1.3.6.1.2.1.4.31.3.1.30.1.21|65|143447607 +1.3.6.1.2.1.4.31.3.1.30.2.17|65|979940532 +1.3.6.1.2.1.4.31.3.1.30.2.21|65|3759901776 +1.3.6.1.2.1.4.31.3.1.31.1.17|70|18386935594506712267 +1.3.6.1.2.1.4.31.3.1.31.1.21|70|10826640097040292960 +1.3.6.1.2.1.4.31.3.1.31.2.17|70|9098136257097188203 +1.3.6.1.2.1.4.31.3.1.31.2.21|70|8600810305645325346 +1.3.6.1.2.1.4.31.3.1.32.1.17|65|3155164358 +1.3.6.1.2.1.4.31.3.1.32.1.21|65|2960527631 +1.3.6.1.2.1.4.31.3.1.32.2.17|65|1940354889 +1.3.6.1.2.1.4.31.3.1.32.2.21|65|851907630 +1.3.6.1.2.1.4.31.3.1.33.1.17|70|7264860876229858683 +1.3.6.1.2.1.4.31.3.1.33.1.21|70|17313919040021973387 +1.3.6.1.2.1.4.31.3.1.33.2.17|70|13590379289280784730 +1.3.6.1.2.1.4.31.3.1.33.2.21|70|17707827503540412829 +1.3.6.1.2.1.4.31.3.1.34.1.17|65|655242562 +1.3.6.1.2.1.4.31.3.1.34.1.21|65|1288301790 +1.3.6.1.2.1.4.31.3.1.34.2.17|65|1849410165 +1.3.6.1.2.1.4.31.3.1.34.2.21|65|1279242570 +1.3.6.1.2.1.4.31.3.1.35.1.17|70|13853431729452045643 +1.3.6.1.2.1.4.31.3.1.35.1.21|70|12175899719023875618 +1.3.6.1.2.1.4.31.3.1.35.2.17|70|5746076581242596522 +1.3.6.1.2.1.4.31.3.1.35.2.21|70|11270454824911170838 +1.3.6.1.2.1.4.31.3.1.36.1.17|65|3609901991 +1.3.6.1.2.1.4.31.3.1.36.1.21|65|3366624678 +1.3.6.1.2.1.4.31.3.1.36.2.17|65|1920324642 +1.3.6.1.2.1.4.31.3.1.36.2.21|65|4209011130 +1.3.6.1.2.1.4.31.3.1.37.1.17|70|7895653252070651268 +1.3.6.1.2.1.4.31.3.1.37.1.21|70|12394260431406653224 +1.3.6.1.2.1.4.31.3.1.37.2.17|70|15299594081869997980 +1.3.6.1.2.1.4.31.3.1.37.2.21|70|5207569687615871054 +1.3.6.1.2.1.4.31.3.1.38.1.17|65|52943236 +1.3.6.1.2.1.4.31.3.1.38.1.21|65|3625273341 +1.3.6.1.2.1.4.31.3.1.38.2.17|65|2093962244 +1.3.6.1.2.1.4.31.3.1.38.2.21|65|2570094859 +1.3.6.1.2.1.4.31.3.1.39.1.17|70|12882822983962882497 +1.3.6.1.2.1.4.31.3.1.39.1.21|70|8407178083230479565 +1.3.6.1.2.1.4.31.3.1.39.2.17|70|18336009361507838044 +1.3.6.1.2.1.4.31.3.1.39.2.21|70|11666341087131274654 +1.3.6.1.2.1.4.31.3.1.40.1.17|65|2112237646 +1.3.6.1.2.1.4.31.3.1.40.1.21|65|1029360032 +1.3.6.1.2.1.4.31.3.1.40.2.17|65|735826687 +1.3.6.1.2.1.4.31.3.1.40.2.21|65|669567614 +1.3.6.1.2.1.4.31.3.1.41.1.17|70|15334443937769666109 +1.3.6.1.2.1.4.31.3.1.41.1.21|70|866200030929373579 +1.3.6.1.2.1.4.31.3.1.41.2.17|70|6052996953017774683 +1.3.6.1.2.1.4.31.3.1.41.2.21|70|8716473514490114253 +1.3.6.1.2.1.4.31.3.1.42.1.17|65|2322814508 +1.3.6.1.2.1.4.31.3.1.42.1.21|65|3327247243 +1.3.6.1.2.1.4.31.3.1.42.2.17|65|2727298329 +1.3.6.1.2.1.4.31.3.1.42.2.21|65|3246577319 +1.3.6.1.2.1.4.31.3.1.43.1.17|70|2034420164050050816 +1.3.6.1.2.1.4.31.3.1.43.1.21|70|13950647551966877873 +1.3.6.1.2.1.4.31.3.1.43.2.17|70|17473187917807218064 +1.3.6.1.2.1.4.31.3.1.43.2.21|70|14148731617561528442 +1.3.6.1.2.1.4.31.3.1.44.1.17|65|3367170860 +1.3.6.1.2.1.4.31.3.1.44.1.21|65|1801660866 +1.3.6.1.2.1.4.31.3.1.44.2.17|65|922612589 +1.3.6.1.2.1.4.31.3.1.44.2.21|65|886729780 +1.3.6.1.2.1.4.31.3.1.45.1.17|70|607792112682508330 +1.3.6.1.2.1.4.31.3.1.45.1.21|70|6397386343954789607 +1.3.6.1.2.1.4.31.3.1.45.2.17|70|2366567357642059143 +1.3.6.1.2.1.4.31.3.1.45.2.21|70|13236325206057337924 +1.3.6.1.2.1.4.31.3.1.46.1.17|67|1761560959 +1.3.6.1.2.1.4.31.3.1.46.1.21|67|2188904331 +1.3.6.1.2.1.4.31.3.1.46.2.17|67|3084605396 +1.3.6.1.2.1.4.31.3.1.46.2.21|67|3709080479 +1.3.6.1.2.1.4.31.3.1.47.1.17|66|36433 +1.3.6.1.2.1.4.31.3.1.47.1.21|66|6826 +1.3.6.1.2.1.4.31.3.1.47.2.17|66|61176 +1.3.6.1.2.1.4.31.3.1.47.2.21|66|15570 +1.3.6.1.2.1.4.32.1.1.2.2.7.122.111.109.98.105.101.115.912|2|2 +1.3.6.1.2.1.4.32.1.1.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|2|13 +1.3.6.1.2.1.4.32.1.1.19.4.7.102.111.114.119.97.114.100.1523|2|19 +1.3.6.1.2.1.4.32.1.1.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|2|29 +1.3.6.1.2.1.4.32.1.2.2.2.7.122.111.109.98.105.101.115.912|2|2 +1.3.6.1.2.1.4.32.1.2.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|2|1 +1.3.6.1.2.1.4.32.1.2.19.4.7.102.111.114.119.97.114.100.1523|2|4 +1.3.6.1.2.1.4.32.1.2.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|2|2 +1.3.6.1.2.1.4.32.1.3.2.2.7.122.111.109.98.105.101.115.912|4|zombies +1.3.6.1.2.1.4.32.1.3.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|4x|6f78656e206b65707420666f727761726420717561696e746c79 +1.3.6.1.2.1.4.32.1.3.19.4.7.102.111.114.119.97.114.100.1523|4|forward +1.3.6.1.2.1.4.32.1.3.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|4x|4a6164656420746865697220616374656420666f7277617264 +1.3.6.1.2.1.4.32.1.4.2.2.7.122.111.109.98.105.101.115.912|66|912 +1.3.6.1.2.1.4.32.1.4.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|66|1974 +1.3.6.1.2.1.4.32.1.4.19.4.7.102.111.114.119.97.114.100.1523|66|1523 +1.3.6.1.2.1.4.32.1.4.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|66|95 +1.3.6.1.2.1.4.32.1.5.2.2.7.122.111.109.98.105.101.115.912|2|3 +1.3.6.1.2.1.4.32.1.5.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|2|1 +1.3.6.1.2.1.4.32.1.5.19.4.7.102.111.114.119.97.114.100.1523|2|2 +1.3.6.1.2.1.4.32.1.5.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|2|2 +1.3.6.1.2.1.4.32.1.6.2.2.7.122.111.109.98.105.101.115.912|2|1 +1.3.6.1.2.1.4.32.1.6.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|2|2 +1.3.6.1.2.1.4.32.1.6.19.4.7.102.111.114.119.97.114.100.1523|2|1 +1.3.6.1.2.1.4.32.1.6.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|2|2 +1.3.6.1.2.1.4.32.1.7.2.2.7.122.111.109.98.105.101.115.912|2|2 +1.3.6.1.2.1.4.32.1.7.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|2|1 +1.3.6.1.2.1.4.32.1.7.19.4.7.102.111.114.119.97.114.100.1523|2|2 +1.3.6.1.2.1.4.32.1.7.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|2|2 +1.3.6.1.2.1.4.32.1.8.2.2.7.122.111.109.98.105.101.115.912|66|40358 +1.3.6.1.2.1.4.32.1.8.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|66|27032 +1.3.6.1.2.1.4.32.1.8.19.4.7.102.111.114.119.97.114.100.1523|66|425 +1.3.6.1.2.1.4.32.1.8.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|66|22520 +1.3.6.1.2.1.4.32.1.9.2.2.7.122.111.109.98.105.101.115.912|66|55055 +1.3.6.1.2.1.4.32.1.9.13.1.26.111.120.101.110.32.107.101.112.116.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.1974|66|45400 +1.3.6.1.2.1.4.32.1.9.19.4.7.102.111.114.119.97.114.100.1523|66|33958 +1.3.6.1.2.1.4.32.1.9.29.2.25.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.102.111.114.119.97.114.100.95|66|4822 +1.3.6.1.2.1.4.33.0|2|3 +1.3.6.1.2.1.4.34.1.1.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|1 +1.3.6.1.2.1.4.34.1.1.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|1 +1.3.6.1.2.1.4.34.1.1.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|2 +1.3.6.1.2.1.4.34.1.1.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|4 +1.3.6.1.2.1.4.34.1.2.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|4x|74686569722064726976696e67206f78656e +1.3.6.1.2.1.4.34.1.2.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|4x|627574207a6f6d62696573206163746564206b657074206f78656e +1.3.6.1.2.1.4.34.1.2.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|4x|6b65707420627574206b657074 +1.3.6.1.2.1.4.34.1.2.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|4x|7a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.2.1.4.34.1.3.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|4 +1.3.6.1.2.1.4.34.1.3.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|6 +1.3.6.1.2.1.4.34.1.3.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|13 +1.3.6.1.2.1.4.34.1.3.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|9 +1.3.6.1.2.1.4.34.1.4.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|1 +1.3.6.1.2.1.4.34.1.4.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|1 +1.3.6.1.2.1.4.34.1.4.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|3 +1.3.6.1.2.1.4.34.1.4.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|2 +1.3.6.1.2.1.4.34.1.5.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|6|1.3.6.1.3.192.97.56 +1.3.6.1.2.1.4.34.1.5.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|6|1.3.6.1.3.129.102.69.143.94.120.130.215 +1.3.6.1.2.1.4.34.1.5.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|6|1.3.6.1.3.238.149.98.96.109.170.231.221.192 +1.3.6.1.2.1.4.34.1.5.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|6|1.3.6.1.3.115.35.24 +1.3.6.1.2.1.4.34.1.6.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|1 +1.3.6.1.2.1.4.34.1.6.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|2 +1.3.6.1.2.1.4.34.1.6.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|6 +1.3.6.1.2.1.4.34.1.6.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|6 +1.3.6.1.2.1.4.34.1.7.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|7 +1.3.6.1.2.1.4.34.1.7.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|1 +1.3.6.1.2.1.4.34.1.7.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|3 +1.3.6.1.2.1.4.34.1.7.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|4 +1.3.6.1.2.1.4.34.1.8.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|67|4284183605 +1.3.6.1.2.1.4.34.1.8.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|67|4250460302 +1.3.6.1.2.1.4.34.1.8.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|67|147328146 +1.3.6.1.2.1.4.34.1.8.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|67|1025249295 +1.3.6.1.2.1.4.34.1.9.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|67|1279593731 +1.3.6.1.2.1.4.34.1.9.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|67|453203599 +1.3.6.1.2.1.4.34.1.9.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|67|3431328629 +1.3.6.1.2.1.4.34.1.9.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|67|2803136066 +1.3.6.1.2.1.4.34.1.10.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|5 +1.3.6.1.2.1.4.34.1.10.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|5 +1.3.6.1.2.1.4.34.1.10.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|5 +1.3.6.1.2.1.4.34.1.10.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|4 +1.3.6.1.2.1.4.34.1.11.1.18.116.104.101.105.114.32.100.114.105.118.105.110.103.32.111.120.101.110|2|4 +1.3.6.1.2.1.4.34.1.11.1.27.98.117.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.107.101.112.116.32.111.120.101.110|2|5 +1.3.6.1.2.1.4.34.1.11.2.13.107.101.112.116.32.98.117.116.32.107.101.112.116|2|5 +1.3.6.1.2.1.4.34.1.11.4.21.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114|2|3 +1.3.6.1.2.1.4.35.1.1.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|2|5 +1.3.6.1.2.1.4.35.1.1.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|2|9 +1.3.6.1.2.1.4.35.1.1.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|2|19 +1.3.6.1.2.1.4.35.1.1.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|2|27 +1.3.6.1.2.1.4.35.1.2.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|2|2 +1.3.6.1.2.1.4.35.1.2.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|2|1 +1.3.6.1.2.1.4.35.1.2.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|2|1 +1.3.6.1.2.1.4.35.1.2.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|2|3 +1.3.6.1.2.1.4.35.1.3.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|4x|6f78656e204a61646564207a6f6d626965732064726976696e67204a61646564207a6f6d62696573206163746564207468656972 +1.3.6.1.2.1.4.35.1.3.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|4x|666f727761726420666f7277617264206b65707420627574206163746564 +1.3.6.1.2.1.4.35.1.3.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|4x|666f7277617264206275742074686569722064726976696e6720616374656420627574206b657074 +1.3.6.1.2.1.4.35.1.3.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|4x|616374656420717561696e746c79206b65707420666f727761726420627574 +1.3.6.1.2.1.4.35.1.4.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.4.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.4.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.4.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.5.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|67|970411781 +1.3.6.1.2.1.4.35.1.5.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|67|2506166029 +1.3.6.1.2.1.4.35.1.5.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|67|2466243180 +1.3.6.1.2.1.4.35.1.5.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|67|2114863065 +1.3.6.1.2.1.4.35.1.6.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|2|4 +1.3.6.1.2.1.4.35.1.6.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|2|5 +1.3.6.1.2.1.4.35.1.6.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|2|5 +1.3.6.1.2.1.4.35.1.6.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|2|5 +1.3.6.1.2.1.4.35.1.7.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|2|2 +1.3.6.1.2.1.4.35.1.7.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|2|4 +1.3.6.1.2.1.4.35.1.7.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|2|6 +1.3.6.1.2.1.4.35.1.7.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|2|2 +1.3.6.1.2.1.4.35.1.8.5.2.52.111.120.101.110.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.116.104.101.105.114|2|3 +1.3.6.1.2.1.4.35.1.8.9.1.30.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100|2|0 +1.3.6.1.2.1.4.35.1.8.19.1.40.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116|2|1 +1.3.6.1.2.1.4.35.1.8.27.3.31.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.102.111.114.119.97.114.100.32.98.117.116|2|2 +1.3.6.1.2.1.4.36.1.1.8|2|8 +1.3.6.1.2.1.4.36.1.1.11|2|11 +1.3.6.1.2.1.4.36.1.1.20|2|20 +1.3.6.1.2.1.4.36.1.1.23|2|23 +1.3.6.1.2.1.4.36.1.2.8|66|46355 +1.3.6.1.2.1.4.36.1.2.11|66|33267 +1.3.6.1.2.1.4.36.1.2.20|66|4839 +1.3.6.1.2.1.4.36.1.2.23|66|18 +1.3.6.1.2.1.4.36.1.3.8|66|12673 +1.3.6.1.2.1.4.36.1.3.11|66|46131 +1.3.6.1.2.1.4.36.1.3.20|66|1766 +1.3.6.1.2.1.4.36.1.3.23|66|57440 +1.3.6.1.2.1.4.36.1.4.8|66|15959 +1.3.6.1.2.1.4.36.1.4.11|66|40181 +1.3.6.1.2.1.4.36.1.4.20|66|11336 +1.3.6.1.2.1.4.36.1.4.23|66|23089 +1.3.6.1.2.1.4.36.1.5.8|66|10931 +1.3.6.1.2.1.4.36.1.5.11|66|5993 +1.3.6.1.2.1.4.36.1.5.20|66|20691 +1.3.6.1.2.1.4.36.1.5.23|66|30858 +1.3.6.1.2.1.4.36.1.6.8|66|25985 +1.3.6.1.2.1.4.36.1.6.11|66|24530 +1.3.6.1.2.1.4.36.1.6.20|66|6596 +1.3.6.1.2.1.4.36.1.6.23|66|19709 +1.3.6.1.2.1.4.36.1.7.8|66|56123 +1.3.6.1.2.1.4.36.1.7.11|66|29478 +1.3.6.1.2.1.4.36.1.7.20|66|60446 +1.3.6.1.2.1.4.36.1.7.23|66|45630 +1.3.6.1.2.1.4.36.1.8.8|66|6069 +1.3.6.1.2.1.4.36.1.8.11|66|33112 +1.3.6.1.2.1.4.36.1.8.20|66|37457 +1.3.6.1.2.1.4.36.1.8.23|66|11865 +1.3.6.1.2.1.4.36.1.9.8|66|31725 +1.3.6.1.2.1.4.36.1.9.11|66|13443 +1.3.6.1.2.1.4.36.1.9.20|66|44693 +1.3.6.1.2.1.4.36.1.9.23|66|43828 +1.3.6.1.2.1.4.36.1.10.8|66|51518 +1.3.6.1.2.1.4.36.1.10.11|66|25876 +1.3.6.1.2.1.4.36.1.10.20|66|26205 +1.3.6.1.2.1.4.36.1.10.23|66|63806 +1.3.6.1.2.1.4.36.1.11.8|66|64872 +1.3.6.1.2.1.4.36.1.11.11|66|38030 +1.3.6.1.2.1.4.36.1.11.20|66|40853 +1.3.6.1.2.1.4.36.1.11.23|66|25121 +1.3.6.1.2.1.4.36.1.12.8|66|60347 +1.3.6.1.2.1.4.36.1.12.11|66|12589 +1.3.6.1.2.1.4.36.1.12.20|66|55062 +1.3.6.1.2.1.4.36.1.12.23|66|49810 +1.3.6.1.2.1.4.36.1.13.8|66|38497 +1.3.6.1.2.1.4.36.1.13.11|66|46531 +1.3.6.1.2.1.4.36.1.13.20|66|1050 +1.3.6.1.2.1.4.36.1.13.23|66|23528 +1.3.6.1.2.1.4.37.1.1.0.17.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.31|2|0 +1.3.6.1.2.1.4.37.1.1.0.23.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.98.117.116.26|2|0 +1.3.6.1.2.1.4.37.1.1.0.41.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.27|2|0 +1.3.6.1.2.1.4.37.1.1.2.39.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.97.99.116.101.100.25|2|2 +1.3.6.1.2.1.4.37.1.2.0.17.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.31|4x|64726976696e67206f78656e206f78656e +1.3.6.1.2.1.4.37.1.2.0.23.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.98.117.116.26|4x|7a6f6d626965732062757420666f727761726420627574 +1.3.6.1.2.1.4.37.1.2.0.41.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.27|4x|7a6f6d626965732062757420717561696e746c7920616374656420616374656420717561696e746c79 +1.3.6.1.2.1.4.37.1.2.2.39.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.97.99.116.101.100.25|4x|666f727761726420627574207468656972207a6f6d626965732064726976696e67206163746564 +1.3.6.1.2.1.4.37.1.3.0.17.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.31|2|31 +1.3.6.1.2.1.4.37.1.3.0.23.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.98.117.116.26|2|26 +1.3.6.1.2.1.4.37.1.3.0.41.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.27|2|27 +1.3.6.1.2.1.4.37.1.3.2.39.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.97.99.116.101.100.25|2|25 +1.3.6.1.2.1.4.37.1.4.0.17.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.31|66|50687 +1.3.6.1.2.1.4.37.1.4.0.23.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.98.117.116.26|66|39157 +1.3.6.1.2.1.4.37.1.4.0.41.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.27|66|28911 +1.3.6.1.2.1.4.37.1.4.2.39.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.97.99.116.101.100.25|66|42738 +1.3.6.1.2.1.4.37.1.5.0.17.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.31|2|1 +1.3.6.1.2.1.4.37.1.5.0.23.122.111.109.98.105.101.115.32.98.117.116.32.102.111.114.119.97.114.100.32.98.117.116.26|2|0 +1.3.6.1.2.1.4.37.1.5.0.41.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.27|2|1 +1.3.6.1.2.1.4.37.1.5.2.39.102.111.114.119.97.114.100.32.98.117.116.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.97.99.116.101.100.25|2|0 +1.3.6.1.2.1.4.38.0|2|14 +1.3.6.1.2.1.4.39.1.1.3|2|3 +1.3.6.1.2.1.4.39.1.1.25|2|25 +1.3.6.1.2.1.4.39.1.2.3|2|2 +1.3.6.1.2.1.4.39.1.2.25|2|1 +1.3.6.1.2.1.4.39.1.3.3|66|913 +1.3.6.1.2.1.4.39.1.3.25|66|159 +1.3.6.1.2.1.4.39.1.4.3|66|853 +1.3.6.1.2.1.4.39.1.4.25|66|535 +1.3.6.1.2.1.4.39.1.5.3|2|1 +1.3.6.1.2.1.4.39.1.5.25|2|1 +1.3.6.1.2.1.4.39.1.6.3|2|2 +1.3.6.1.2.1.4.39.1.6.25|2|1 +1.3.6.1.2.1.4.39.1.7.3|66|52744 +1.3.6.1.2.1.4.39.1.7.25|66|37458 +1.3.6.1.2.1.4.39.1.8.3|66|1293 +1.3.6.1.2.1.4.39.1.8.25|66|17539 +1.3.6.1.2.1.4.39.1.9.3|66|47304 +1.3.6.1.2.1.4.39.1.9.25|66|495 +1.3.6.1.2.1.4.39.1.10.3|66|79 +1.3.6.1.2.1.4.39.1.10.25|66|62 +1.3.6.1.2.1.4.39.1.11.3|66|4877 +1.3.6.1.2.1.4.39.1.11.25|66|7874 +1.3.6.1.2.1.4.39.1.12.3|2|2 +1.3.6.1.2.1.4.39.1.12.25|2|1 +1.3.6.1.2.1.5.1.0|65|1492856794 +1.3.6.1.2.1.5.2.0|65|2680995039 +1.3.6.1.2.1.5.3.0|65|4140306666 +1.3.6.1.2.1.5.4.0|65|1455566903 +1.3.6.1.2.1.5.5.0|65|2923454834 +1.3.6.1.2.1.5.6.0|65|1765992285 +1.3.6.1.2.1.5.7.0|65|1458479575 +1.3.6.1.2.1.5.8.0|65|2868435403 +1.3.6.1.2.1.5.9.0|65|4079796073 +1.3.6.1.2.1.5.10.0|65|2637296057 +1.3.6.1.2.1.5.11.0|65|5459634 +1.3.6.1.2.1.5.12.0|65|829577661 +1.3.6.1.2.1.5.13.0|65|2226230237 +1.3.6.1.2.1.5.14.0|65|1208803990 +1.3.6.1.2.1.5.15.0|65|3986845943 +1.3.6.1.2.1.5.16.0|65|949279005 +1.3.6.1.2.1.5.17.0|65|558282089 +1.3.6.1.2.1.5.18.0|65|1890280040 +1.3.6.1.2.1.5.19.0|65|3593610629 +1.3.6.1.2.1.5.20.0|65|4209164054 +1.3.6.1.2.1.5.21.0|65|3450068052 +1.3.6.1.2.1.5.22.0|65|2076087352 +1.3.6.1.2.1.5.23.0|65|3945747872 +1.3.6.1.2.1.5.24.0|65|632957643 +1.3.6.1.2.1.5.25.0|65|1204976869 +1.3.6.1.2.1.5.26.0|65|3140552997 +1.3.6.1.2.1.5.29.1.1.0|2|0 +1.3.6.1.2.1.5.29.1.1.1|2|1 +1.3.6.1.2.1.5.29.1.2.0|65|964293789 +1.3.6.1.2.1.5.29.1.2.1|65|2959992059 +1.3.6.1.2.1.5.29.1.3.0|65|3562961320 +1.3.6.1.2.1.5.29.1.3.1|65|106025386 +1.3.6.1.2.1.5.29.1.4.0|65|3373096760 +1.3.6.1.2.1.5.29.1.4.1|65|114575088 +1.3.6.1.2.1.5.29.1.5.0|65|898661729 +1.3.6.1.2.1.5.29.1.5.1|65|3292995448 +1.3.6.1.2.1.5.30.1.1.0.7|2|0 +1.3.6.1.2.1.5.30.1.1.0.17|2|0 +1.3.6.1.2.1.5.30.1.1.2.6|2|2 +1.3.6.1.2.1.5.30.1.1.2.27|2|2 +1.3.6.1.2.1.5.30.1.2.0.7|2|7 +1.3.6.1.2.1.5.30.1.2.0.17|2|17 +1.3.6.1.2.1.5.30.1.2.2.6|2|6 +1.3.6.1.2.1.5.30.1.2.2.27|2|27 +1.3.6.1.2.1.5.30.1.3.0.7|65|2352636915 +1.3.6.1.2.1.5.30.1.3.0.17|65|297958128 +1.3.6.1.2.1.5.30.1.3.2.6|65|1839598222 +1.3.6.1.2.1.5.30.1.3.2.27|65|3555647664 +1.3.6.1.2.1.5.30.1.4.0.7|65|3608497094 +1.3.6.1.2.1.5.30.1.4.0.17|65|1630529615 +1.3.6.1.2.1.5.30.1.4.2.6|65|1437666952 +1.3.6.1.2.1.5.30.1.4.2.27|65|59772725 +1.3.6.1.2.1.6.1.0|2|5 +1.3.6.1.2.1.6.2.0|2|16 +1.3.6.1.2.1.6.3.0|2|15 +1.3.6.1.2.1.6.4.0|2|28 +1.3.6.1.2.1.6.5.0|65|65107228 +1.3.6.1.2.1.6.6.0|65|354971360 +1.3.6.1.2.1.6.7.0|65|3488211961 +1.3.6.1.2.1.6.8.0|65|3041227831 +1.3.6.1.2.1.6.9.0|66|3592371136 +1.3.6.1.2.1.6.10.0|65|2361355713 +1.3.6.1.2.1.6.11.0|65|1760250163 +1.3.6.1.2.1.6.12.0|65|3042947677 +1.3.6.1.2.1.6.13.1.1.56.87.155.48.25.56.13.181.134.10|2|8 +1.3.6.1.2.1.6.13.1.1.90.39.59.76.19.137.38.75.85.25|2|9 +1.3.6.1.2.1.6.13.1.1.92.87.203.150.31.64.252.45.189.14|2|11 +1.3.6.1.2.1.6.13.1.1.168.203.239.172.19.157.238.68.132.0|2|12 +1.3.6.1.2.1.6.13.1.1.180.226.46.184.24.239.9.226.80.27|2|2 +1.3.6.1.2.1.6.13.1.1.253.76.143.199.1.33.205.58.31.16|2|8 +1.3.6.1.2.1.6.13.1.2.56.87.155.48.25.56.13.181.134.10|64x|38579b30 +1.3.6.1.2.1.6.13.1.2.90.39.59.76.19.137.38.75.85.25|64x|5a273b4c +1.3.6.1.2.1.6.13.1.2.92.87.203.150.31.64.252.45.189.14|64x|5c57cb96 +1.3.6.1.2.1.6.13.1.2.168.203.239.172.19.157.238.68.132.0|64x|a8cbefac +1.3.6.1.2.1.6.13.1.2.180.226.46.184.24.239.9.226.80.27|64x|b4e22eb8 +1.3.6.1.2.1.6.13.1.2.253.76.143.199.1.33.205.58.31.16|64x|fd4c8fc7 +1.3.6.1.2.1.6.13.1.3.56.87.155.48.25.56.13.181.134.10|2|25 +1.3.6.1.2.1.6.13.1.3.90.39.59.76.19.137.38.75.85.25|2|19 +1.3.6.1.2.1.6.13.1.3.92.87.203.150.31.64.252.45.189.14|2|31 +1.3.6.1.2.1.6.13.1.3.168.203.239.172.19.157.238.68.132.0|2|19 +1.3.6.1.2.1.6.13.1.3.180.226.46.184.24.239.9.226.80.27|2|24 +1.3.6.1.2.1.6.13.1.3.253.76.143.199.1.33.205.58.31.16|2|1 +1.3.6.1.2.1.6.13.1.4.56.87.155.48.25.56.13.181.134.10|64x|380db586 +1.3.6.1.2.1.6.13.1.4.90.39.59.76.19.137.38.75.85.25|64x|89264b55 +1.3.6.1.2.1.6.13.1.4.92.87.203.150.31.64.252.45.189.14|64x|40fc2dbd +1.3.6.1.2.1.6.13.1.4.168.203.239.172.19.157.238.68.132.0|64x|9dee4484 +1.3.6.1.2.1.6.13.1.4.180.226.46.184.24.239.9.226.80.27|64x|ef09e250 +1.3.6.1.2.1.6.13.1.4.253.76.143.199.1.33.205.58.31.16|64x|21cd3a1f +1.3.6.1.2.1.6.13.1.5.56.87.155.48.25.56.13.181.134.10|2|10 +1.3.6.1.2.1.6.13.1.5.90.39.59.76.19.137.38.75.85.25|2|25 +1.3.6.1.2.1.6.13.1.5.92.87.203.150.31.64.252.45.189.14|2|14 +1.3.6.1.2.1.6.13.1.5.168.203.239.172.19.157.238.68.132.0|2|0 +1.3.6.1.2.1.6.13.1.5.180.226.46.184.24.239.9.226.80.27|2|27 +1.3.6.1.2.1.6.13.1.5.253.76.143.199.1.33.205.58.31.16|2|16 +1.3.6.1.2.1.6.14.0|65|3550559180 +1.3.6.1.2.1.6.15.0|65|122443261 +1.3.6.1.2.1.6.17.0|70|1739996722140638720 +1.3.6.1.2.1.6.18.0|70|11290994777553824436 +1.3.6.1.2.1.6.19.1.1.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|2|2 +1.3.6.1.2.1.6.19.1.1.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|2|2 +1.3.6.1.2.1.6.19.1.1.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|2|3 +1.3.6.1.2.1.6.19.1.1.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|2|4 +1.3.6.1.2.1.6.19.1.1.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|2|4 +1.3.6.1.2.1.6.19.1.1.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|2|16 +1.3.6.1.2.1.6.19.1.2.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|4x|6f78656e207a6f6d62696573207a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.2.1.6.19.1.2.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|4x|627574206b657074206b65707420717561696e746c79206f78656e207468656972207468656972207a6f6d6269657320666f7277617264 +1.3.6.1.2.1.6.19.1.2.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|4x|6163746564206275742064726976696e672064726976696e67206b657074206b657074206b657074206f78656e206f78656e +1.3.6.1.2.1.6.19.1.2.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|4|forward +1.3.6.1.2.1.6.19.1.2.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|4x|7468656972204a61646564206f78656e +1.3.6.1.2.1.6.19.1.2.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|4x|6f78656e20717561696e746c7920717561696e746c79206b657074207468656972 +1.3.6.1.2.1.6.19.1.3.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|66|15678 +1.3.6.1.2.1.6.19.1.3.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|66|64360 +1.3.6.1.2.1.6.19.1.3.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|66|54616 +1.3.6.1.2.1.6.19.1.3.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|66|42226 +1.3.6.1.2.1.6.19.1.3.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|66|19020 +1.3.6.1.2.1.6.19.1.3.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|66|52621 +1.3.6.1.2.1.6.19.1.4.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|2|16 +1.3.6.1.2.1.6.19.1.4.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|2|4 +1.3.6.1.2.1.6.19.1.4.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|2|4 +1.3.6.1.2.1.6.19.1.4.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|2|1 +1.3.6.1.2.1.6.19.1.4.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|2|1 +1.3.6.1.2.1.6.19.1.4.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|2|3 +1.3.6.1.2.1.6.19.1.5.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|4x|616374656420746865697220717561696e746c79207468656972207468656972206163746564204a61646564206f78656e +1.3.6.1.2.1.6.19.1.5.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|4x|6b6570742062757420666f7277617264206163746564204a6164656420627574206b657074207468656972 +1.3.6.1.2.1.6.19.1.5.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|4|Jaded +1.3.6.1.2.1.6.19.1.5.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|4x|6f78656e20627574204a616465642064726976696e672064726976696e67206f78656e206f78656e +1.3.6.1.2.1.6.19.1.5.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|4x|7468656972207468656972206b657074206163746564207468656972206b657074 +1.3.6.1.2.1.6.19.1.5.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|4x|7a6f6d6269657320717561696e746c79206b657074206f78656e20666f7277617264 +1.3.6.1.2.1.6.19.1.6.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|66|50024 +1.3.6.1.2.1.6.19.1.6.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|66|25342 +1.3.6.1.2.1.6.19.1.6.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|66|29164 +1.3.6.1.2.1.6.19.1.6.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|66|14011 +1.3.6.1.2.1.6.19.1.6.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|66|64259 +1.3.6.1.2.1.6.19.1.6.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|66|54864 +1.3.6.1.2.1.6.19.1.7.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|2|10 +1.3.6.1.2.1.6.19.1.7.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|2|3 +1.3.6.1.2.1.6.19.1.7.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|2|2 +1.3.6.1.2.1.6.19.1.7.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|2|1 +1.3.6.1.2.1.6.19.1.7.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|2|12 +1.3.6.1.2.1.6.19.1.7.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|2|8 +1.3.6.1.2.1.6.19.1.8.2.34.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.116.104.101.105.114.15678.16.49.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114.32.97.99.116.101.100.32.74.97.100.101.100.32.111.120.101.110.50024|66|6608 +1.3.6.1.2.1.6.19.1.8.2.55.98.117.116.32.107.101.112.116.32.107.101.112.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.116.104.101.105.114.32.116.104.101.105.114.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.64360.4.43.107.101.112.116.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.74.97.100.101.100.32.98.117.116.32.107.101.112.116.32.116.104.101.105.114.25342|66|24034 +1.3.6.1.2.1.6.19.1.8.3.50.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.107.101.112.116.32.107.101.112.116.32.107.101.112.116.32.111.120.101.110.32.111.120.101.110.54616.4.5.74.97.100.101.100.29164|66|63973 +1.3.6.1.2.1.6.19.1.8.4.7.102.111.114.119.97.114.100.42226.1.40.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.14011|66|16267 +1.3.6.1.2.1.6.19.1.8.4.16.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.19020.1.33.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.64259|66|6939 +1.3.6.1.2.1.6.19.1.8.16.33.111.120.101.110.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.116.104.101.105.114.52621.3.34.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.32.102.111.114.119.97.114.100.54864|66|12988 +1.3.6.1.2.1.6.20.1.1.0.20.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.21667|2|0 +1.3.6.1.2.1.6.20.1.1.0.42.116.104.101.105.114.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.3844|2|0 +1.3.6.1.2.1.6.20.1.1.2.22.113.117.97.105.110.116.108.121.32.111.120.101.110.32.107.101.112.116.32.98.117.116.27758|2|2 +1.3.6.1.2.1.6.20.1.1.2.32.97.99.116.101.100.32.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.25987|2|2 +1.3.6.1.2.1.6.20.1.1.3.48.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.111.120.101.110.55501|2|3 +1.3.6.1.2.1.6.20.1.1.4.36.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.55651|2|4 +1.3.6.1.2.1.6.20.1.2.0.20.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.21667|4x|7a6f6d626965732064726976696e67206f78656e +1.3.6.1.2.1.6.20.1.2.0.42.116.104.101.105.114.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.3844|4x|74686569722064726976696e67207a6f6d6269657320666f727761726420717561696e746c7920627574 +1.3.6.1.2.1.6.20.1.2.2.22.113.117.97.105.110.116.108.121.32.111.120.101.110.32.107.101.112.116.32.98.117.116.27758|4x|717561696e746c79206f78656e206b65707420627574 +1.3.6.1.2.1.6.20.1.2.2.32.97.99.116.101.100.32.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.25987|4x|6163746564206f78656e20666f7277617264207a6f6d62696573206163746564 +1.3.6.1.2.1.6.20.1.2.3.48.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.111.120.101.110.55501|4x|7a6f6d626965732064726976696e67206b65707420627574206f78656e207a6f6d62696573206163746564206f78656e +1.3.6.1.2.1.6.20.1.2.4.36.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.55651|4x|6f78656e20666f727761726420666f727761726420666f7277617264207a6f6d62696573 +1.3.6.1.2.1.6.20.1.3.0.20.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.21667|66|21667 +1.3.6.1.2.1.6.20.1.3.0.42.116.104.101.105.114.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.3844|66|3844 +1.3.6.1.2.1.6.20.1.3.2.22.113.117.97.105.110.116.108.121.32.111.120.101.110.32.107.101.112.116.32.98.117.116.27758|66|27758 +1.3.6.1.2.1.6.20.1.3.2.32.97.99.116.101.100.32.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.25987|66|25987 +1.3.6.1.2.1.6.20.1.3.3.48.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.111.120.101.110.55501|66|55501 +1.3.6.1.2.1.6.20.1.3.4.36.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.55651|66|55651 +1.3.6.1.2.1.6.20.1.4.0.20.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.21667|66|64651 +1.3.6.1.2.1.6.20.1.4.0.42.116.104.101.105.114.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.3844|66|25473 +1.3.6.1.2.1.6.20.1.4.2.22.113.117.97.105.110.116.108.121.32.111.120.101.110.32.107.101.112.116.32.98.117.116.27758|66|64116 +1.3.6.1.2.1.6.20.1.4.2.32.97.99.116.101.100.32.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.25987|66|40949 +1.3.6.1.2.1.6.20.1.4.3.48.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.111.120.101.110.55501|66|25088 +1.3.6.1.2.1.6.20.1.4.4.36.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.55651|66|49948 +1.3.6.1.2.1.7.1.0|65|845058143 +1.3.6.1.2.1.7.2.0|65|322177604 +1.3.6.1.2.1.7.3.0|65|888170439 +1.3.6.1.2.1.7.4.0|65|1931566481 +1.3.6.1.2.1.7.5.1.1.56.151.103.243.2|64x|389767f3 +1.3.6.1.2.1.7.5.1.1.60.14.226.162.25|64x|3c0ee2a2 +1.3.6.1.2.1.7.5.1.1.65.194.4.114.11|64x|41c20472 +1.3.6.1.2.1.7.5.1.1.78.73.170.170.30|64x|4e49aaaa +1.3.6.1.2.1.7.5.1.1.99.17.223.45.2|64x|6311df2d +1.3.6.1.2.1.7.5.1.1.115.62.84.34.16|64x|733e5422 +1.3.6.1.2.1.7.5.1.1.134.174.114.176.0|64x|86ae72b0 +1.3.6.1.2.1.7.5.1.1.249.27.252.28.28|64x|f91bfc1c +1.3.6.1.2.1.7.5.1.2.56.151.103.243.2|2|2 +1.3.6.1.2.1.7.5.1.2.60.14.226.162.25|2|25 +1.3.6.1.2.1.7.5.1.2.65.194.4.114.11|2|11 +1.3.6.1.2.1.7.5.1.2.78.73.170.170.30|2|30 +1.3.6.1.2.1.7.5.1.2.99.17.223.45.2|2|2 +1.3.6.1.2.1.7.5.1.2.115.62.84.34.16|2|16 +1.3.6.1.2.1.7.5.1.2.134.174.114.176.0|2|0 +1.3.6.1.2.1.7.5.1.2.249.27.252.28.28|2|28 +1.3.6.1.2.1.7.7.1.1.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|2|0 +1.3.6.1.2.1.7.7.1.1.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|2|0 +1.3.6.1.2.1.7.7.1.1.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|2|1 +1.3.6.1.2.1.7.7.1.1.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|2|2 +1.3.6.1.2.1.7.7.1.1.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|2|3 +1.3.6.1.2.1.7.7.1.1.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|2|3 +1.3.6.1.2.1.7.7.1.1.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|2|3 +1.3.6.1.2.1.7.7.1.1.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|2|16 +1.3.6.1.2.1.7.7.1.2.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|4x|64726976696e672062757420666f7277617264 +1.3.6.1.2.1.7.7.1.2.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|4x|4a6164656420717561696e746c792074686569722064726976696e67206b65707420627574 +1.3.6.1.2.1.7.7.1.2.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|4x|6f78656e204a6164656420627574204a61646564206b65707420616374656420616374656420666f7277617264206163746564 +1.3.6.1.2.1.7.7.1.2.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|4x|666f7277617264204a61646564204a61646564206f78656e +1.3.6.1.2.1.7.7.1.2.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|4x|717561696e746c79206163746564207468656972206f78656e206163746564207468656972206b657074206b657074 +1.3.6.1.2.1.7.7.1.2.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|4x|627574206f78656e20627574204a6164656420666f727761726420666f727761726420666f727761726420627574206f78656e +1.3.6.1.2.1.7.7.1.2.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|4x|74686569722062757420616374656420616374656420666f727761726420717561696e746c792062757420717561696e746c79 +1.3.6.1.2.1.7.7.1.2.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|4|forward +1.3.6.1.2.1.7.7.1.3.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|66|43479 +1.3.6.1.2.1.7.7.1.3.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|66|9177 +1.3.6.1.2.1.7.7.1.3.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|66|63959 +1.3.6.1.2.1.7.7.1.3.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|66|8739 +1.3.6.1.2.1.7.7.1.3.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|66|49559 +1.3.6.1.2.1.7.7.1.3.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|66|12291 +1.3.6.1.2.1.7.7.1.3.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|66|35917 +1.3.6.1.2.1.7.7.1.3.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|66|54117 +1.3.6.1.2.1.7.7.1.4.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|2|2 +1.3.6.1.2.1.7.7.1.4.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|2|16 +1.3.6.1.2.1.7.7.1.4.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|2|3 +1.3.6.1.2.1.7.7.1.4.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|2|1 +1.3.6.1.2.1.7.7.1.4.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|2|1 +1.3.6.1.2.1.7.7.1.4.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|2|0 +1.3.6.1.2.1.7.7.1.4.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|2|0 +1.3.6.1.2.1.7.7.1.4.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|2|4 +1.3.6.1.2.1.7.7.1.5.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|4x|717561696e746c79206163746564206b65707420666f727761726420666f72776172642061637465642074686569722064726976696e67 +1.3.6.1.2.1.7.7.1.5.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|4x|4a61646564207a6f6d6269657320717561696e746c7920717561696e746c79206f78656e +1.3.6.1.2.1.7.7.1.5.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|4x|6163746564206f78656e20746865697220627574206b65707420627574207a6f6d62696573204a616465642064726976696e67 +1.3.6.1.2.1.7.7.1.5.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|4x|717561696e746c79206b657074206f78656e +1.3.6.1.2.1.7.7.1.5.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|4x|6f78656e20666f7277617264207a6f6d6269657320746865697220666f7277617264 +1.3.6.1.2.1.7.7.1.5.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|4x|7a6f6d62696573207a6f6d6269657320717561696e746c79207a6f6d62696573206f78656e +1.3.6.1.2.1.7.7.1.5.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|4|zombies +1.3.6.1.2.1.7.7.1.5.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|4x|717561696e746c79207a6f6d626965732064726976696e67206b657074204a616465642074686569722062757420627574 +1.3.6.1.2.1.7.7.1.6.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|66|1099 +1.3.6.1.2.1.7.7.1.6.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|66|30932 +1.3.6.1.2.1.7.7.1.6.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|66|32156 +1.3.6.1.2.1.7.7.1.6.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|66|23534 +1.3.6.1.2.1.7.7.1.6.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|66|48206 +1.3.6.1.2.1.7.7.1.6.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|66|56288 +1.3.6.1.2.1.7.7.1.6.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|66|4644 +1.3.6.1.2.1.7.7.1.6.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|66|17063 +1.3.6.1.2.1.7.7.1.7.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|66|47038 +1.3.6.1.2.1.7.7.1.7.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|66|60990 +1.3.6.1.2.1.7.7.1.7.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|66|7068 +1.3.6.1.2.1.7.7.1.7.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|66|29002 +1.3.6.1.2.1.7.7.1.7.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|66|28034 +1.3.6.1.2.1.7.7.1.7.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|66|53199 +1.3.6.1.2.1.7.7.1.7.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|66|43859 +1.3.6.1.2.1.7.7.1.7.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|66|62790 +1.3.6.1.2.1.7.7.1.8.0.19.100.114.105.118.105.110.103.32.98.117.116.32.102.111.114.119.97.114.100.43479.2.55.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.107.101.112.116.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.116.104.101.105.114.32.100.114.105.118.105.110.103.1099.47038|66|46841 +1.3.6.1.2.1.7.7.1.8.0.37.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.98.117.116.9177.16.36.74.97.100.101.100.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.30932.60990|66|9924 +1.3.6.1.2.1.7.7.1.8.1.51.111.120.101.110.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.32.107.101.112.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.63959.3.51.97.99.116.101.100.32.111.120.101.110.32.116.104.101.105.114.32.98.117.116.32.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32156.7068|66|7810 +1.3.6.1.2.1.7.7.1.8.2.24.102.111.114.119.97.114.100.32.74.97.100.101.100.32.74.97.100.101.100.32.111.120.101.110.8739.1.18.113.117.97.105.110.116.108.121.32.107.101.112.116.32.111.120.101.110.23534.29002|66|22718 +1.3.6.1.2.1.7.7.1.8.3.47.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114.32.111.120.101.110.32.97.99.116.101.100.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.49559.1.34.111.120.101.110.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.32.102.111.114.119.97.114.100.48206.28034|66|60675 +1.3.6.1.2.1.7.7.1.8.3.51.98.117.116.32.111.120.101.110.32.98.117.116.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.12291.0.37.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.56288.53199|66|18503 +1.3.6.1.2.1.7.7.1.8.3.51.116.104.101.105.114.32.98.117.116.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.113.117.97.105.110.116.108.121.35917.0.7.122.111.109.98.105.101.115.4644.43859|66|41523 +1.3.6.1.2.1.7.7.1.8.16.7.102.111.114.119.97.114.100.54117.4.49.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.98.117.116.32.98.117.116.17063.62790|66|3422 +1.3.6.1.2.1.7.8.0|70|18443080796267782135 +1.3.6.1.2.1.7.9.0|70|8016143063445322732 +1.3.6.1.2.1.11.1.0|65|1026848053 +1.3.6.1.2.1.11.2.0|65|1559503192 +1.3.6.1.2.1.11.3.0|65|1661364527 +1.3.6.1.2.1.11.4.0|65|3728874342 +1.3.6.1.2.1.11.5.0|65|2559226521 +1.3.6.1.2.1.11.6.0|65|1650806427 +1.3.6.1.2.1.11.8.0|65|1632315785 +1.3.6.1.2.1.11.9.0|65|2621823096 +1.3.6.1.2.1.11.10.0|65|1506245205 +1.3.6.1.2.1.11.11.0|65|899705927 +1.3.6.1.2.1.11.12.0|65|4133118796 +1.3.6.1.2.1.11.13.0|65|3111667111 +1.3.6.1.2.1.11.14.0|65|3837227648 +1.3.6.1.2.1.11.15.0|65|2418795793 +1.3.6.1.2.1.11.16.0|65|941621899 +1.3.6.1.2.1.11.17.0|65|1388409920 +1.3.6.1.2.1.11.18.0|65|334684494 +1.3.6.1.2.1.11.19.0|65|2144129908 +1.3.6.1.2.1.11.20.0|65|945572706 +1.3.6.1.2.1.11.21.0|65|2412259253 +1.3.6.1.2.1.11.22.0|65|709453491 +1.3.6.1.2.1.11.24.0|65|3109654399 +1.3.6.1.2.1.11.25.0|65|1068667305 +1.3.6.1.2.1.11.26.0|65|1115168412 +1.3.6.1.2.1.11.27.0|65|3358419166 +1.3.6.1.2.1.11.28.0|65|2284249196 +1.3.6.1.2.1.11.29.0|65|2255620041 +1.3.6.1.2.1.11.30.0|2|1 +1.3.6.1.2.1.11.31.0|65|2713209622 +1.3.6.1.2.1.11.32.0|65|2594822087 +1.3.6.1.2.1.31.1.1.1.1.13|4x|65746830 +1.3.6.1.2.1.31.1.1.1.1.15|4x|65746831 +1.3.6.1.2.1.31.1.1.1.2.13|65|2347007850 +1.3.6.1.2.1.31.1.1.1.2.15|65|4169364536 +1.3.6.1.2.1.31.1.1.1.3.13|65|3298152181 +1.3.6.1.2.1.31.1.1.1.3.15|65|3102500179 +1.3.6.1.2.1.31.1.1.1.4.13|65|2449589239 +1.3.6.1.2.1.31.1.1.1.4.15|65|3449771470 +1.3.6.1.2.1.31.1.1.1.5.13|65|524348469 +1.3.6.1.2.1.31.1.1.1.5.15|65|2158749102 +1.3.6.1.2.1.31.1.1.1.6.13|70|7712298674287165259 +1.3.6.1.2.1.31.1.1.1.6.15|70|10691602997682554953 +1.3.6.1.2.1.31.1.1.1.7.13|70|13754656808550877804 +1.3.6.1.2.1.31.1.1.1.7.15|70|7002517873966062570 +1.3.6.1.2.1.31.1.1.1.8.13|70|6632351660760469095 +1.3.6.1.2.1.31.1.1.1.8.15|70|4169664613546665387 +1.3.6.1.2.1.31.1.1.1.9.13|70|18165497535063818545 +1.3.6.1.2.1.31.1.1.1.9.15|70|3187083131619716718 +1.3.6.1.2.1.31.1.1.1.10.13|70|1421691080720476747 +1.3.6.1.2.1.31.1.1.1.10.15|70|3299757516212389613 +1.3.6.1.2.1.31.1.1.1.11.13|70|1227125767479954888 +1.3.6.1.2.1.31.1.1.1.11.15|70|414502565558156005 +1.3.6.1.2.1.31.1.1.1.12.13|70|12372197000804879586 +1.3.6.1.2.1.31.1.1.1.12.15|70|11728336340868252858 +1.3.6.1.2.1.31.1.1.1.13.13|70|3009057718220303987 +1.3.6.1.2.1.31.1.1.1.13.15|70|14360471847414061181 +1.3.6.1.2.1.31.1.1.1.14.13|2|2 +1.3.6.1.2.1.31.1.1.1.14.15|2|2 +1.3.6.1.2.1.31.1.1.1.15.13|66|1199310033 +1.3.6.1.2.1.31.1.1.1.15.15|66|120344731 +1.3.6.1.2.1.31.1.1.1.16.13|2|1 +1.3.6.1.2.1.31.1.1.1.16.15|2|1 +1.3.6.1.2.1.31.1.1.1.17.13|2|2 +1.3.6.1.2.1.31.1.1.1.17.15|2|2 +1.3.6.1.2.1.31.1.1.1.18.13|4|kept +1.3.6.1.2.1.31.1.1.1.18.15|4x|746865697220666f7277617264206f78656e +1.3.6.1.2.1.31.1.1.1.19.13|67|2492542845 +1.3.6.1.2.1.31.1.1.1.19.15|67|4100437878 +1.3.6.1.2.1.31.1.2.1.1.4.24|2|4 +1.3.6.1.2.1.31.1.2.1.1.6.25|2|6 +1.3.6.1.2.1.31.1.2.1.1.22.27|2|22 +1.3.6.1.2.1.31.1.2.1.1.26.19|2|26 +1.3.6.1.2.1.31.1.2.1.2.4.24|2|24 +1.3.6.1.2.1.31.1.2.1.2.6.25|2|25 +1.3.6.1.2.1.31.1.2.1.2.22.27|2|27 +1.3.6.1.2.1.31.1.2.1.2.26.19|2|19 +1.3.6.1.2.1.31.1.2.1.3.4.24|2|5 +1.3.6.1.2.1.31.1.2.1.3.6.25|2|3 +1.3.6.1.2.1.31.1.2.1.3.22.27|2|3 +1.3.6.1.2.1.31.1.2.1.3.26.19|2|4 +1.3.6.1.2.1.31.1.3.1.1.5|2|19 +1.3.6.1.2.1.31.1.3.1.1.6|2|17 +1.3.6.1.2.1.31.1.3.1.1.12|2|28 +1.3.6.1.2.1.31.1.3.1.2.5|2|2 +1.3.6.1.2.1.31.1.3.1.2.6|2|1 +1.3.6.1.2.1.31.1.3.1.2.12|2|2 +1.3.6.1.2.1.31.1.3.1.3.5|6|1.3.6.1.3.252.112.82.19.228 +1.3.6.1.2.1.31.1.3.1.3.6|6|1.3.6.1.3 +1.3.6.1.2.1.31.1.3.1.3.12|6|1.3.6.1.3.97.56.245.210.158.169.23.245 +1.3.6.1.2.1.31.1.3.1.4.5|2|1 +1.3.6.1.2.1.31.1.3.1.4.6|2|4 +1.3.6.1.2.1.31.1.3.1.4.12|2|7 +1.3.6.1.2.1.31.1.3.1.5.5|6|1.3.6.1.3.158.188.89.49.224.153.67.151.160 +1.3.6.1.2.1.31.1.3.1.5.6|6|1.3.6.1.3.17 +1.3.6.1.2.1.31.1.3.1.5.12|6|1.3.6.1.3.205.195.64 +1.3.6.1.2.1.31.1.3.1.6.5|4x|746865697220717561696e746c79 +1.3.6.1.2.1.31.1.3.1.6.6|4x|7a6f6d626965732061637465642064726976696e67206f78656e206b65707420746865697220717561696e746c79 +1.3.6.1.2.1.31.1.3.1.6.12|4|zombies +1.3.6.1.2.1.31.1.4.1.1.9.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.11.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.14.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.1.29.6.66.1.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.31.1.4.1.2.9.6.66.1.10.164.0.51|2|2 +1.3.6.1.2.1.31.1.4.1.2.11.6.66.1.10.164.0.51|2|6 +1.3.6.1.2.1.31.1.4.1.2.14.6.66.1.10.164.0.51|2|3 +1.3.6.1.2.1.31.1.4.1.2.29.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.9.6.66.1.10.164.0.51|2|2 +1.3.6.1.2.1.31.1.4.1.3.11.6.66.1.10.164.0.51|2|1 +1.3.6.1.2.1.31.1.4.1.3.14.6.66.1.10.164.0.51|2|2 +1.3.6.1.2.1.31.1.4.1.3.29.6.66.1.10.164.0.51|2|2 +1.3.6.1.2.1.31.1.5.0|67|1984347925 +1.3.6.1.2.1.31.1.6.0|67|3494995519 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.67.64 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.103.223.118.130.119.59.10.58 +1.3.6.1.6.3.1.1.6.1.0|2|7 diff --git a/test/new-e2e/ndm/snmp/compose/data/generic_host.snmprec b/test/new-e2e/ndm/snmp/compose/data/generic_host.snmprec new file mode 100644 index 0000000000000..71337465cb866 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/generic_host.snmprec @@ -0,0 +1,23 @@ +1.3.6.1.2.1.25.1.1.0|67|803137913 +1.3.6.1.2.1.25.1.5.0|66|3964612068 +1.3.6.1.2.1.25.1.6.0|66|658239218 +1.3.6.1.2.1.25.1.7.0|2|6 +1.3.6.1.2.1.25.2.2.0|2|28 +1.3.6.1.2.1.25.2.3.1.1.3|2|3 +1.3.6.1.2.1.25.2.3.1.1.16|2|16 +1.3.6.1.2.1.25.2.3.1.2.3|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.16|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.3.3|4x|6f78656e2074686569722064726976696e6720666f727761726420717561696e746c79 +1.3.6.1.2.1.25.2.3.1.3.16|4x|717561696e746c792064726976696e67204a6164656420666f727761726420746865697220717561696e746c79207a6f6d62696573 +1.3.6.1.2.1.25.2.3.1.4.3|2|16 +1.3.6.1.2.1.25.2.3.1.4.16|2|4 +1.3.6.1.2.1.25.2.3.1.5.3|2|12 +1.3.6.1.2.1.25.2.3.1.5.16|2|3 +1.3.6.1.2.1.25.2.3.1.6.3|2|29 +1.3.6.1.2.1.25.2.3.1.6.16|2|20 +1.3.6.1.2.1.25.2.3.1.7.3|65|1361509700 +1.3.6.1.2.1.25.2.3.1.7.16|65|2158537353 +1.3.6.1.2.1.25.3.3.1.1.5|6|1.3.6.1.3.81.16 +1.3.6.1.2.1.25.3.3.1.1.10|6|1.3.6.1.3.95.73.140.186.121.144.199 +1.3.6.1.2.1.25.3.3.1.2.5|2|6 +1.3.6.1.2.1.25.3.3.1.2.10|2|2 diff --git a/test/new-e2e/ndm/snmp/compose/data/hp-ilo4.snmprec b/test/new-e2e/ndm/snmp/compose/data/hp-ilo4.snmprec new file mode 100644 index 0000000000000..ee9a9913ab6df --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/hp-ilo4.snmprec @@ -0,0 +1,891 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.232.9.4.10 +1.3.6.1.2.1.1.5.0|4|hp-ilo4.example +1.3.6.1.4.1.232.1.2.6.1|4|A04-08/12/2018 +1.3.6.1.4.1.232.2.2.2.1|4|dXPEdPBE5yKtjW9xx3 +1.3.6.1.4.1.232.3.2.5.1.1.1.0.2|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.1.0.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.1.8.31|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.1.9.24|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.1.9.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.1.10.17|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.1.11.4|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.1.12.20|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.1.18.22|2|18 +1.3.6.1.4.1.232.3.2.5.1.1.1.23.2|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.2.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.2.0.28|2|28 +1.3.6.1.4.1.232.3.2.5.1.1.2.8.31|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.2.9.24|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.2.9.28|2|28 +1.3.6.1.4.1.232.3.2.5.1.1.2.10.17|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.2.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.2.12.20|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.2.18.22|2|22 +1.3.6.1.4.1.232.3.2.5.1.1.2.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.3.0.2|4|but +1.3.6.1.4.1.232.3.2.5.1.1.3.0.28|4x|64726976696e67207a6f6d6269657320717561696e746c79207a6f6d62696573206b657074206b65707420627574206f78656e204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.3.8.31|4x|6b657074206f78656e20717561696e746c79206f78656e207a6f6d62696573 +1.3.6.1.4.1.232.3.2.5.1.1.3.9.24|4x|627574204a61646564206f78656e206163746564206163746564207468656972206163746564 +1.3.6.1.4.1.232.3.2.5.1.1.3.9.28|4x|717561696e746c79207468656972204a6164656420746865697220717561696e746c79207468656972 +1.3.6.1.4.1.232.3.2.5.1.1.3.10.17|4x|6163746564204a616465642062757420666f7277617264207468656972 +1.3.6.1.4.1.232.3.2.5.1.1.3.11.4|4|zombies +1.3.6.1.4.1.232.3.2.5.1.1.3.12.20|4x|666f7277617264206f78656e2064726976696e672064726976696e67 +1.3.6.1.4.1.232.3.2.5.1.1.3.18.22|4x|64726976696e672064726976696e67 +1.3.6.1.4.1.232.3.2.5.1.1.3.23.2|4|Jaded +1.3.6.1.4.1.232.3.2.5.1.1.4.0.2|4x|6b65707420627574 +1.3.6.1.4.1.232.3.2.5.1.1.4.0.28|4|Jaded +1.3.6.1.4.1.232.3.2.5.1.1.4.8.31|4|their +1.3.6.1.4.1.232.3.2.5.1.1.4.9.24|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.4.9.28|4|forward +1.3.6.1.4.1.232.3.2.5.1.1.4.10.17|4|driving +1.3.6.1.4.1.232.3.2.5.1.1.4.11.4|4|kept +1.3.6.1.4.1.232.3.2.5.1.1.4.12.20|4|Jaded +1.3.6.1.4.1.232.3.2.5.1.1.4.18.22|4|forward +1.3.6.1.4.1.232.3.2.5.1.1.4.23.2|4|forward +1.3.6.1.4.1.232.3.2.5.1.1.5.0.2|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.5.0.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.5.8.31|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.5.9.24|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.5.9.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.5.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.5.11.4|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.5.12.20|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.5.18.22|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.5.23.2|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.6.0.2|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.6.0.28|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.8.31|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.9.24|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.9.28|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.10.17|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.6.11.4|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.6.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.6.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.6.23.2|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.7.0.2|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.7.0.28|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.7.8.31|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.7.9.24|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.7.9.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.7.10.17|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.7.11.4|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.7.12.20|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.7.18.22|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.7.23.2|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.8.0.2|65|546389013 +1.3.6.1.4.1.232.3.2.5.1.1.8.0.28|65|2306609150 +1.3.6.1.4.1.232.3.2.5.1.1.8.8.31|65|1183142468 +1.3.6.1.4.1.232.3.2.5.1.1.8.9.24|65|1524544657 +1.3.6.1.4.1.232.3.2.5.1.1.8.9.28|65|1257847199 +1.3.6.1.4.1.232.3.2.5.1.1.8.10.17|65|4186257677 +1.3.6.1.4.1.232.3.2.5.1.1.8.11.4|65|75536387 +1.3.6.1.4.1.232.3.2.5.1.1.8.12.20|65|3025977095 +1.3.6.1.4.1.232.3.2.5.1.1.8.18.22|65|3599100832 +1.3.6.1.4.1.232.3.2.5.1.1.8.23.2|65|3165071379 +1.3.6.1.4.1.232.3.2.5.1.1.9.0.2|65|3922822364 +1.3.6.1.4.1.232.3.2.5.1.1.9.0.28|65|3234904649 +1.3.6.1.4.1.232.3.2.5.1.1.9.8.31|65|1901171918 +1.3.6.1.4.1.232.3.2.5.1.1.9.9.24|65|2263188134 +1.3.6.1.4.1.232.3.2.5.1.1.9.9.28|65|2061135672 +1.3.6.1.4.1.232.3.2.5.1.1.9.10.17|65|398777741 +1.3.6.1.4.1.232.3.2.5.1.1.9.11.4|65|1272452264 +1.3.6.1.4.1.232.3.2.5.1.1.9.12.20|65|622055389 +1.3.6.1.4.1.232.3.2.5.1.1.9.18.22|65|4131783907 +1.3.6.1.4.1.232.3.2.5.1.1.9.23.2|65|2234487753 +1.3.6.1.4.1.232.3.2.5.1.1.10.0.2|65|1741338020 +1.3.6.1.4.1.232.3.2.5.1.1.10.0.28|65|3759438885 +1.3.6.1.4.1.232.3.2.5.1.1.10.8.31|65|282836214 +1.3.6.1.4.1.232.3.2.5.1.1.10.9.24|65|2190162781 +1.3.6.1.4.1.232.3.2.5.1.1.10.9.28|65|517385251 +1.3.6.1.4.1.232.3.2.5.1.1.10.10.17|65|3377639315 +1.3.6.1.4.1.232.3.2.5.1.1.10.11.4|65|479612 +1.3.6.1.4.1.232.3.2.5.1.1.10.12.20|65|2364763386 +1.3.6.1.4.1.232.3.2.5.1.1.10.18.22|65|1540422714 +1.3.6.1.4.1.232.3.2.5.1.1.10.23.2|65|3133475512 +1.3.6.1.4.1.232.3.2.5.1.1.11.0.2|65|1181504081 +1.3.6.1.4.1.232.3.2.5.1.1.11.0.28|65|2491173497 +1.3.6.1.4.1.232.3.2.5.1.1.11.8.31|65|3042764446 +1.3.6.1.4.1.232.3.2.5.1.1.11.9.24|65|121116179 +1.3.6.1.4.1.232.3.2.5.1.1.11.9.28|65|2585114004 +1.3.6.1.4.1.232.3.2.5.1.1.11.10.17|65|715864194 +1.3.6.1.4.1.232.3.2.5.1.1.11.11.4|65|218650245 +1.3.6.1.4.1.232.3.2.5.1.1.11.12.20|65|598167615 +1.3.6.1.4.1.232.3.2.5.1.1.11.18.22|65|1149109305 +1.3.6.1.4.1.232.3.2.5.1.1.11.23.2|65|75304400 +1.3.6.1.4.1.232.3.2.5.1.1.12.0.2|65|221444980 +1.3.6.1.4.1.232.3.2.5.1.1.12.0.28|65|1337358939 +1.3.6.1.4.1.232.3.2.5.1.1.12.8.31|65|2463188951 +1.3.6.1.4.1.232.3.2.5.1.1.12.9.24|65|2136256124 +1.3.6.1.4.1.232.3.2.5.1.1.12.9.28|65|598517409 +1.3.6.1.4.1.232.3.2.5.1.1.12.10.17|65|2109086161 +1.3.6.1.4.1.232.3.2.5.1.1.12.11.4|65|2106962369 +1.3.6.1.4.1.232.3.2.5.1.1.12.12.20|65|17908343 +1.3.6.1.4.1.232.3.2.5.1.1.12.18.22|65|3202247013 +1.3.6.1.4.1.232.3.2.5.1.1.12.23.2|65|1937432163 +1.3.6.1.4.1.232.3.2.5.1.1.13.0.2|65|1734902147 +1.3.6.1.4.1.232.3.2.5.1.1.13.0.28|65|2411164755 +1.3.6.1.4.1.232.3.2.5.1.1.13.8.31|65|1781992790 +1.3.6.1.4.1.232.3.2.5.1.1.13.9.24|65|1981586934 +1.3.6.1.4.1.232.3.2.5.1.1.13.9.28|65|2050290019 +1.3.6.1.4.1.232.3.2.5.1.1.13.10.17|65|54796801 +1.3.6.1.4.1.232.3.2.5.1.1.13.11.4|65|2725543544 +1.3.6.1.4.1.232.3.2.5.1.1.13.12.20|65|3858302419 +1.3.6.1.4.1.232.3.2.5.1.1.13.18.22|65|2732286636 +1.3.6.1.4.1.232.3.2.5.1.1.13.23.2|65|2945232736 +1.3.6.1.4.1.232.3.2.5.1.1.14.0.2|65|2713126212 +1.3.6.1.4.1.232.3.2.5.1.1.14.0.28|65|4022715091 +1.3.6.1.4.1.232.3.2.5.1.1.14.8.31|65|198579111 +1.3.6.1.4.1.232.3.2.5.1.1.14.9.24|65|3580970404 +1.3.6.1.4.1.232.3.2.5.1.1.14.9.28|65|2999485097 +1.3.6.1.4.1.232.3.2.5.1.1.14.10.17|65|2324402321 +1.3.6.1.4.1.232.3.2.5.1.1.14.11.4|65|2167827525 +1.3.6.1.4.1.232.3.2.5.1.1.14.12.20|65|1503274929 +1.3.6.1.4.1.232.3.2.5.1.1.14.18.22|65|26779464 +1.3.6.1.4.1.232.3.2.5.1.1.14.23.2|65|1752319260 +1.3.6.1.4.1.232.3.2.5.1.1.15.0.2|65|1062892646 +1.3.6.1.4.1.232.3.2.5.1.1.15.0.28|65|2137439866 +1.3.6.1.4.1.232.3.2.5.1.1.15.8.31|65|213350178 +1.3.6.1.4.1.232.3.2.5.1.1.15.9.24|65|4098083155 +1.3.6.1.4.1.232.3.2.5.1.1.15.9.28|65|985304361 +1.3.6.1.4.1.232.3.2.5.1.1.15.10.17|65|3136387282 +1.3.6.1.4.1.232.3.2.5.1.1.15.11.4|65|1635061208 +1.3.6.1.4.1.232.3.2.5.1.1.15.12.20|65|3105090698 +1.3.6.1.4.1.232.3.2.5.1.1.15.18.22|65|3840894212 +1.3.6.1.4.1.232.3.2.5.1.1.15.23.2|65|3123363785 +1.3.6.1.4.1.232.3.2.5.1.1.16.0.2|65|2747324891 +1.3.6.1.4.1.232.3.2.5.1.1.16.0.28|65|3044303644 +1.3.6.1.4.1.232.3.2.5.1.1.16.8.31|65|3215286354 +1.3.6.1.4.1.232.3.2.5.1.1.16.9.24|65|329453703 +1.3.6.1.4.1.232.3.2.5.1.1.16.9.28|65|355147129 +1.3.6.1.4.1.232.3.2.5.1.1.16.10.17|65|3578386746 +1.3.6.1.4.1.232.3.2.5.1.1.16.11.4|65|1151157210 +1.3.6.1.4.1.232.3.2.5.1.1.16.12.20|65|2541753754 +1.3.6.1.4.1.232.3.2.5.1.1.16.18.22|65|3280239987 +1.3.6.1.4.1.232.3.2.5.1.1.16.23.2|65|171855281 +1.3.6.1.4.1.232.3.2.5.1.1.17.0.2|65|881428009 +1.3.6.1.4.1.232.3.2.5.1.1.17.0.28|65|2765906854 +1.3.6.1.4.1.232.3.2.5.1.1.17.8.31|65|2123221895 +1.3.6.1.4.1.232.3.2.5.1.1.17.9.24|65|3245302703 +1.3.6.1.4.1.232.3.2.5.1.1.17.9.28|65|1306227086 +1.3.6.1.4.1.232.3.2.5.1.1.17.10.17|65|3453715456 +1.3.6.1.4.1.232.3.2.5.1.1.17.11.4|65|214914874 +1.3.6.1.4.1.232.3.2.5.1.1.17.12.20|65|1195947737 +1.3.6.1.4.1.232.3.2.5.1.1.17.18.22|65|1182048622 +1.3.6.1.4.1.232.3.2.5.1.1.17.23.2|65|523297749 +1.3.6.1.4.1.232.3.2.5.1.1.18.0.2|65|1332352920 +1.3.6.1.4.1.232.3.2.5.1.1.18.0.28|65|2533263787 +1.3.6.1.4.1.232.3.2.5.1.1.18.8.31|65|1720285197 +1.3.6.1.4.1.232.3.2.5.1.1.18.9.24|65|4245380544 +1.3.6.1.4.1.232.3.2.5.1.1.18.9.28|65|1910909181 +1.3.6.1.4.1.232.3.2.5.1.1.18.10.17|65|2245241934 +1.3.6.1.4.1.232.3.2.5.1.1.18.11.4|65|3205736251 +1.3.6.1.4.1.232.3.2.5.1.1.18.12.20|65|803739619 +1.3.6.1.4.1.232.3.2.5.1.1.18.18.22|65|1158056501 +1.3.6.1.4.1.232.3.2.5.1.1.18.23.2|65|916346018 +1.3.6.1.4.1.232.3.2.5.1.1.19.0.2|65|2610456196 +1.3.6.1.4.1.232.3.2.5.1.1.19.0.28|65|40996530 +1.3.6.1.4.1.232.3.2.5.1.1.19.8.31|65|2048619498 +1.3.6.1.4.1.232.3.2.5.1.1.19.9.24|65|1201236747 +1.3.6.1.4.1.232.3.2.5.1.1.19.9.28|65|2887398693 +1.3.6.1.4.1.232.3.2.5.1.1.19.10.17|65|2142351834 +1.3.6.1.4.1.232.3.2.5.1.1.19.11.4|65|4024458378 +1.3.6.1.4.1.232.3.2.5.1.1.19.12.20|65|566543450 +1.3.6.1.4.1.232.3.2.5.1.1.19.18.22|65|3519743513 +1.3.6.1.4.1.232.3.2.5.1.1.19.23.2|65|3459523029 +1.3.6.1.4.1.232.3.2.5.1.1.20.0.2|65|43264877 +1.3.6.1.4.1.232.3.2.5.1.1.20.0.28|65|3981252740 +1.3.6.1.4.1.232.3.2.5.1.1.20.8.31|65|2390762949 +1.3.6.1.4.1.232.3.2.5.1.1.20.9.24|65|3181479601 +1.3.6.1.4.1.232.3.2.5.1.1.20.9.28|65|3311503997 +1.3.6.1.4.1.232.3.2.5.1.1.20.10.17|65|2897038505 +1.3.6.1.4.1.232.3.2.5.1.1.20.11.4|65|165941602 +1.3.6.1.4.1.232.3.2.5.1.1.20.12.20|65|953987731 +1.3.6.1.4.1.232.3.2.5.1.1.20.18.22|65|1795341671 +1.3.6.1.4.1.232.3.2.5.1.1.20.23.2|65|2277575523 +1.3.6.1.4.1.232.3.2.5.1.1.21.0.2|65|1316077395 +1.3.6.1.4.1.232.3.2.5.1.1.21.0.28|65|3677820263 +1.3.6.1.4.1.232.3.2.5.1.1.21.8.31|65|2612770528 +1.3.6.1.4.1.232.3.2.5.1.1.21.9.24|65|1027709744 +1.3.6.1.4.1.232.3.2.5.1.1.21.9.28|65|3051589898 +1.3.6.1.4.1.232.3.2.5.1.1.21.10.17|65|2370106598 +1.3.6.1.4.1.232.3.2.5.1.1.21.11.4|65|671178955 +1.3.6.1.4.1.232.3.2.5.1.1.21.12.20|65|1481115055 +1.3.6.1.4.1.232.3.2.5.1.1.21.18.22|65|908153265 +1.3.6.1.4.1.232.3.2.5.1.1.21.23.2|65|2033546701 +1.3.6.1.4.1.232.3.2.5.1.1.22.0.2|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.22.0.28|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.22.8.31|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.22.9.24|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.22.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.22.10.17|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.22.11.4|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.22.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.22.18.22|2|18 +1.3.6.1.4.1.232.3.2.5.1.1.22.23.2|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.23.0.2|66|2272833932 +1.3.6.1.4.1.232.3.2.5.1.1.23.0.28|66|238315886 +1.3.6.1.4.1.232.3.2.5.1.1.23.8.31|66|2332345108 +1.3.6.1.4.1.232.3.2.5.1.1.23.9.24|66|1722467098 +1.3.6.1.4.1.232.3.2.5.1.1.23.9.28|66|3365552990 +1.3.6.1.4.1.232.3.2.5.1.1.23.10.17|66|814295671 +1.3.6.1.4.1.232.3.2.5.1.1.23.11.4|66|2798738056 +1.3.6.1.4.1.232.3.2.5.1.1.23.12.20|66|3016608692 +1.3.6.1.4.1.232.3.2.5.1.1.23.18.22|66|2609823405 +1.3.6.1.4.1.232.3.2.5.1.1.23.23.2|66|2243357455 +1.3.6.1.4.1.232.3.2.5.1.1.24.0.2|66|1195544543 +1.3.6.1.4.1.232.3.2.5.1.1.24.0.28|66|1262729680 +1.3.6.1.4.1.232.3.2.5.1.1.24.8.31|66|1186252601 +1.3.6.1.4.1.232.3.2.5.1.1.24.9.24|66|1166010901 +1.3.6.1.4.1.232.3.2.5.1.1.24.9.28|66|2981821918 +1.3.6.1.4.1.232.3.2.5.1.1.24.10.17|66|1339371079 +1.3.6.1.4.1.232.3.2.5.1.1.24.11.4|66|1286022879 +1.3.6.1.4.1.232.3.2.5.1.1.24.12.20|66|3351053968 +1.3.6.1.4.1.232.3.2.5.1.1.24.18.22|66|2312438865 +1.3.6.1.4.1.232.3.2.5.1.1.24.23.2|66|4073921079 +1.3.6.1.4.1.232.3.2.5.1.1.25.0.2|66|1571443607 +1.3.6.1.4.1.232.3.2.5.1.1.25.0.28|66|3747927012 +1.3.6.1.4.1.232.3.2.5.1.1.25.8.31|66|3027271760 +1.3.6.1.4.1.232.3.2.5.1.1.25.9.24|66|3819076816 +1.3.6.1.4.1.232.3.2.5.1.1.25.9.28|66|2709190369 +1.3.6.1.4.1.232.3.2.5.1.1.25.10.17|66|3112461002 +1.3.6.1.4.1.232.3.2.5.1.1.25.11.4|66|2804238793 +1.3.6.1.4.1.232.3.2.5.1.1.25.12.20|66|2746010765 +1.3.6.1.4.1.232.3.2.5.1.1.25.18.22|66|1131305182 +1.3.6.1.4.1.232.3.2.5.1.1.25.23.2|66|630061036 +1.3.6.1.4.1.232.3.2.5.1.1.26.0.2|65|2089481769 +1.3.6.1.4.1.232.3.2.5.1.1.26.0.28|65|810038908 +1.3.6.1.4.1.232.3.2.5.1.1.26.8.31|65|1068878315 +1.3.6.1.4.1.232.3.2.5.1.1.26.9.24|65|103961563 +1.3.6.1.4.1.232.3.2.5.1.1.26.9.28|65|2013639362 +1.3.6.1.4.1.232.3.2.5.1.1.26.10.17|65|2951245451 +1.3.6.1.4.1.232.3.2.5.1.1.26.11.4|65|186230100 +1.3.6.1.4.1.232.3.2.5.1.1.26.12.20|65|4182707117 +1.3.6.1.4.1.232.3.2.5.1.1.26.18.22|65|3028338343 +1.3.6.1.4.1.232.3.2.5.1.1.26.23.2|65|168329345 +1.3.6.1.4.1.232.3.2.5.1.1.27.0.2|65|374054158 +1.3.6.1.4.1.232.3.2.5.1.1.27.0.28|65|2567904399 +1.3.6.1.4.1.232.3.2.5.1.1.27.8.31|65|522893109 +1.3.6.1.4.1.232.3.2.5.1.1.27.9.24|65|119532592 +1.3.6.1.4.1.232.3.2.5.1.1.27.9.28|65|2471496068 +1.3.6.1.4.1.232.3.2.5.1.1.27.10.17|65|2594363310 +1.3.6.1.4.1.232.3.2.5.1.1.27.11.4|65|3944959901 +1.3.6.1.4.1.232.3.2.5.1.1.27.12.20|65|4164483098 +1.3.6.1.4.1.232.3.2.5.1.1.27.18.22|65|2883751910 +1.3.6.1.4.1.232.3.2.5.1.1.27.23.2|65|2206974357 +1.3.6.1.4.1.232.3.2.5.1.1.28.0.2|65|3925445605 +1.3.6.1.4.1.232.3.2.5.1.1.28.0.28|65|1713645649 +1.3.6.1.4.1.232.3.2.5.1.1.28.8.31|65|559394300 +1.3.6.1.4.1.232.3.2.5.1.1.28.9.24|65|3885486446 +1.3.6.1.4.1.232.3.2.5.1.1.28.9.28|65|4210915605 +1.3.6.1.4.1.232.3.2.5.1.1.28.10.17|65|220092674 +1.3.6.1.4.1.232.3.2.5.1.1.28.11.4|65|3868626828 +1.3.6.1.4.1.232.3.2.5.1.1.28.12.20|65|3239804722 +1.3.6.1.4.1.232.3.2.5.1.1.28.18.22|65|2585992683 +1.3.6.1.4.1.232.3.2.5.1.1.28.23.2|65|4160128227 +1.3.6.1.4.1.232.3.2.5.1.1.29.0.2|65|3584995123 +1.3.6.1.4.1.232.3.2.5.1.1.29.0.28|65|3107079286 +1.3.6.1.4.1.232.3.2.5.1.1.29.8.31|65|2508263122 +1.3.6.1.4.1.232.3.2.5.1.1.29.9.24|65|3981942807 +1.3.6.1.4.1.232.3.2.5.1.1.29.9.28|65|3550107921 +1.3.6.1.4.1.232.3.2.5.1.1.29.10.17|65|176899773 +1.3.6.1.4.1.232.3.2.5.1.1.29.11.4|65|1648399595 +1.3.6.1.4.1.232.3.2.5.1.1.29.12.20|65|3297067055 +1.3.6.1.4.1.232.3.2.5.1.1.29.18.22|65|3445404027 +1.3.6.1.4.1.232.3.2.5.1.1.29.23.2|65|2016773999 +1.3.6.1.4.1.232.3.2.5.1.1.30.0.2|65|2989537942 +1.3.6.1.4.1.232.3.2.5.1.1.30.0.28|65|3934222433 +1.3.6.1.4.1.232.3.2.5.1.1.30.8.31|65|2477940641 +1.3.6.1.4.1.232.3.2.5.1.1.30.9.24|65|4200705038 +1.3.6.1.4.1.232.3.2.5.1.1.30.9.28|65|3858528366 +1.3.6.1.4.1.232.3.2.5.1.1.30.10.17|65|3986228859 +1.3.6.1.4.1.232.3.2.5.1.1.30.11.4|65|2662203714 +1.3.6.1.4.1.232.3.2.5.1.1.30.12.20|65|3761701964 +1.3.6.1.4.1.232.3.2.5.1.1.30.18.22|65|1418961513 +1.3.6.1.4.1.232.3.2.5.1.1.30.23.2|65|2750812238 +1.3.6.1.4.1.232.3.2.5.1.1.31.0.2|65|916231198 +1.3.6.1.4.1.232.3.2.5.1.1.31.0.28|65|2146594321 +1.3.6.1.4.1.232.3.2.5.1.1.31.8.31|65|995962026 +1.3.6.1.4.1.232.3.2.5.1.1.31.9.24|65|3587479373 +1.3.6.1.4.1.232.3.2.5.1.1.31.9.28|65|4232069374 +1.3.6.1.4.1.232.3.2.5.1.1.31.10.17|65|2353390047 +1.3.6.1.4.1.232.3.2.5.1.1.31.11.4|65|3388648852 +1.3.6.1.4.1.232.3.2.5.1.1.31.12.20|65|3669696917 +1.3.6.1.4.1.232.3.2.5.1.1.31.18.22|65|2817308627 +1.3.6.1.4.1.232.3.2.5.1.1.31.23.2|65|1972361499 +1.3.6.1.4.1.232.3.2.5.1.1.32.0.2|65|296578155 +1.3.6.1.4.1.232.3.2.5.1.1.32.0.28|65|3928100633 +1.3.6.1.4.1.232.3.2.5.1.1.32.8.31|65|2321027611 +1.3.6.1.4.1.232.3.2.5.1.1.32.9.24|65|2503792394 +1.3.6.1.4.1.232.3.2.5.1.1.32.9.28|65|3554487951 +1.3.6.1.4.1.232.3.2.5.1.1.32.10.17|65|1128696502 +1.3.6.1.4.1.232.3.2.5.1.1.32.11.4|65|1115663679 +1.3.6.1.4.1.232.3.2.5.1.1.32.12.20|65|1925210987 +1.3.6.1.4.1.232.3.2.5.1.1.32.18.22|65|2145808767 +1.3.6.1.4.1.232.3.2.5.1.1.32.23.2|65|723298107 +1.3.6.1.4.1.232.3.2.5.1.1.33.0.2|65|4232763688 +1.3.6.1.4.1.232.3.2.5.1.1.33.0.28|65|2515648724 +1.3.6.1.4.1.232.3.2.5.1.1.33.8.31|65|1905715607 +1.3.6.1.4.1.232.3.2.5.1.1.33.9.24|65|1573221775 +1.3.6.1.4.1.232.3.2.5.1.1.33.9.28|65|2178293335 +1.3.6.1.4.1.232.3.2.5.1.1.33.10.17|65|1373042557 +1.3.6.1.4.1.232.3.2.5.1.1.33.11.4|65|324493681 +1.3.6.1.4.1.232.3.2.5.1.1.33.12.20|65|863366144 +1.3.6.1.4.1.232.3.2.5.1.1.33.18.22|65|2834520456 +1.3.6.1.4.1.232.3.2.5.1.1.33.23.2|65|660770811 +1.3.6.1.4.1.232.3.2.5.1.1.34.0.2|65|895977516 +1.3.6.1.4.1.232.3.2.5.1.1.34.0.28|65|3912491867 +1.3.6.1.4.1.232.3.2.5.1.1.34.8.31|65|2935708564 +1.3.6.1.4.1.232.3.2.5.1.1.34.9.24|65|613479510 +1.3.6.1.4.1.232.3.2.5.1.1.34.9.28|65|353982695 +1.3.6.1.4.1.232.3.2.5.1.1.34.10.17|65|1719422533 +1.3.6.1.4.1.232.3.2.5.1.1.34.11.4|65|2753507707 +1.3.6.1.4.1.232.3.2.5.1.1.34.12.20|65|2531058768 +1.3.6.1.4.1.232.3.2.5.1.1.34.18.22|65|1738463797 +1.3.6.1.4.1.232.3.2.5.1.1.34.23.2|65|230339965 +1.3.6.1.4.1.232.3.2.5.1.1.35.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.35.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.35.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.35.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.12.20|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.37.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.37.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.37.8.31|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.37.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.37.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.37.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.37.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.37.12.20|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.37.18.22|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.37.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.38.0.2|65|695149768 +1.3.6.1.4.1.232.3.2.5.1.1.38.0.28|65|3356476138 +1.3.6.1.4.1.232.3.2.5.1.1.38.8.31|65|10938476 +1.3.6.1.4.1.232.3.2.5.1.1.38.9.24|65|3824347234 +1.3.6.1.4.1.232.3.2.5.1.1.38.9.28|65|2299135820 +1.3.6.1.4.1.232.3.2.5.1.1.38.10.17|65|3127782166 +1.3.6.1.4.1.232.3.2.5.1.1.38.11.4|65|650087465 +1.3.6.1.4.1.232.3.2.5.1.1.38.12.20|65|1126275168 +1.3.6.1.4.1.232.3.2.5.1.1.38.18.22|65|292840402 +1.3.6.1.4.1.232.3.2.5.1.1.38.23.2|65|833195757 +1.3.6.1.4.1.232.3.2.5.1.1.39.0.2|65|273708010 +1.3.6.1.4.1.232.3.2.5.1.1.39.0.28|65|2930543340 +1.3.6.1.4.1.232.3.2.5.1.1.39.8.31|65|1360991038 +1.3.6.1.4.1.232.3.2.5.1.1.39.9.24|65|360503215 +1.3.6.1.4.1.232.3.2.5.1.1.39.9.28|65|4180016804 +1.3.6.1.4.1.232.3.2.5.1.1.39.10.17|65|3091053534 +1.3.6.1.4.1.232.3.2.5.1.1.39.11.4|65|3927959624 +1.3.6.1.4.1.232.3.2.5.1.1.39.12.20|65|3019266957 +1.3.6.1.4.1.232.3.2.5.1.1.39.18.22|65|1783253281 +1.3.6.1.4.1.232.3.2.5.1.1.39.23.2|65|3451792479 +1.3.6.1.4.1.232.3.2.5.1.1.40.0.2|65|2074093460 +1.3.6.1.4.1.232.3.2.5.1.1.40.0.28|65|1245631859 +1.3.6.1.4.1.232.3.2.5.1.1.40.8.31|65|2278547273 +1.3.6.1.4.1.232.3.2.5.1.1.40.9.24|65|262900694 +1.3.6.1.4.1.232.3.2.5.1.1.40.9.28|65|3929997821 +1.3.6.1.4.1.232.3.2.5.1.1.40.10.17|65|3399525625 +1.3.6.1.4.1.232.3.2.5.1.1.40.11.4|65|3375585056 +1.3.6.1.4.1.232.3.2.5.1.1.40.12.20|65|2460123296 +1.3.6.1.4.1.232.3.2.5.1.1.40.18.22|65|1661289605 +1.3.6.1.4.1.232.3.2.5.1.1.40.23.2|65|4099258745 +1.3.6.1.4.1.232.3.2.5.1.1.41.0.2|65|67819348 +1.3.6.1.4.1.232.3.2.5.1.1.41.0.28|65|4025257665 +1.3.6.1.4.1.232.3.2.5.1.1.41.8.31|65|778931221 +1.3.6.1.4.1.232.3.2.5.1.1.41.9.24|65|3973425930 +1.3.6.1.4.1.232.3.2.5.1.1.41.9.28|65|683938656 +1.3.6.1.4.1.232.3.2.5.1.1.41.10.17|65|3311880823 +1.3.6.1.4.1.232.3.2.5.1.1.41.11.4|65|3358020460 +1.3.6.1.4.1.232.3.2.5.1.1.41.12.20|65|1507642352 +1.3.6.1.4.1.232.3.2.5.1.1.41.18.22|65|3032576586 +1.3.6.1.4.1.232.3.2.5.1.1.41.23.2|65|1081195094 +1.3.6.1.4.1.232.3.2.5.1.1.42.0.2|65|2958829949 +1.3.6.1.4.1.232.3.2.5.1.1.42.0.28|65|3881154002 +1.3.6.1.4.1.232.3.2.5.1.1.42.8.31|65|868131005 +1.3.6.1.4.1.232.3.2.5.1.1.42.9.24|65|3507732127 +1.3.6.1.4.1.232.3.2.5.1.1.42.9.28|65|2408249280 +1.3.6.1.4.1.232.3.2.5.1.1.42.10.17|65|3661936369 +1.3.6.1.4.1.232.3.2.5.1.1.42.11.4|65|83913712 +1.3.6.1.4.1.232.3.2.5.1.1.42.12.20|65|1692536119 +1.3.6.1.4.1.232.3.2.5.1.1.42.18.22|65|83128752 +1.3.6.1.4.1.232.3.2.5.1.1.42.23.2|65|271214931 +1.3.6.1.4.1.232.3.2.5.1.1.43.0.2|65|3379400009 +1.3.6.1.4.1.232.3.2.5.1.1.43.0.28|65|2113936975 +1.3.6.1.4.1.232.3.2.5.1.1.43.8.31|65|4269595898 +1.3.6.1.4.1.232.3.2.5.1.1.43.9.24|65|2636068769 +1.3.6.1.4.1.232.3.2.5.1.1.43.9.28|65|3509528056 +1.3.6.1.4.1.232.3.2.5.1.1.43.10.17|65|2019075204 +1.3.6.1.4.1.232.3.2.5.1.1.43.11.4|65|3241766477 +1.3.6.1.4.1.232.3.2.5.1.1.43.12.20|65|1716200504 +1.3.6.1.4.1.232.3.2.5.1.1.43.18.22|65|1957275437 +1.3.6.1.4.1.232.3.2.5.1.1.43.23.2|65|2456872217 +1.3.6.1.4.1.232.3.2.5.1.1.44.0.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.44.0.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.44.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.44.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.44.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.44.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.45.0.2|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.45.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.45.8.31|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.45.9.24|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.45.9.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.45.10.17|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.45.11.4|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.45.12.20|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.45.18.22|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.45.23.2|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.46.0.2|65|3561272272 +1.3.6.1.4.1.232.3.2.5.1.1.46.0.28|65|4174662596 +1.3.6.1.4.1.232.3.2.5.1.1.46.8.31|65|689811778 +1.3.6.1.4.1.232.3.2.5.1.1.46.9.24|65|1530456354 +1.3.6.1.4.1.232.3.2.5.1.1.46.9.28|65|20151350 +1.3.6.1.4.1.232.3.2.5.1.1.46.10.17|65|1335195536 +1.3.6.1.4.1.232.3.2.5.1.1.46.11.4|65|3704812105 +1.3.6.1.4.1.232.3.2.5.1.1.46.12.20|65|1550626120 +1.3.6.1.4.1.232.3.2.5.1.1.46.18.22|65|3138673084 +1.3.6.1.4.1.232.3.2.5.1.1.46.23.2|65|655955111 +1.3.6.1.4.1.232.3.2.5.1.1.47.0.2|65|1839069213 +1.3.6.1.4.1.232.3.2.5.1.1.47.0.28|65|174038400 +1.3.6.1.4.1.232.3.2.5.1.1.47.8.31|65|3244003037 +1.3.6.1.4.1.232.3.2.5.1.1.47.9.24|65|1347107392 +1.3.6.1.4.1.232.3.2.5.1.1.47.9.28|65|1186660290 +1.3.6.1.4.1.232.3.2.5.1.1.47.10.17|65|1395461969 +1.3.6.1.4.1.232.3.2.5.1.1.47.11.4|65|4027008497 +1.3.6.1.4.1.232.3.2.5.1.1.47.12.20|65|1547161558 +1.3.6.1.4.1.232.3.2.5.1.1.47.18.22|65|1118166193 +1.3.6.1.4.1.232.3.2.5.1.1.47.23.2|65|4220984397 +1.3.6.1.4.1.232.3.2.5.1.1.48.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.48.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.48.8.31|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.48.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.48.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.48.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.48.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.48.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.48.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.48.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.49.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.12.20|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.49.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.50.0.2|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.50.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.50.8.31|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.50.9.24|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.50.9.28|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.50.10.17|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.50.11.4|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.50.12.20|2|22 +1.3.6.1.4.1.232.3.2.5.1.1.50.18.22|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.50.23.2|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.51.0.2|4x|7a6f6d6269657320627574207468656972206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.51.0.28|4x|627574207468656972206f78656e207468656972 +1.3.6.1.4.1.232.3.2.5.1.1.51.8.31|4x|4a61646564206f78656e206163746564 +1.3.6.1.4.1.232.3.2.5.1.1.51.9.24|4|but +1.3.6.1.4.1.232.3.2.5.1.1.51.9.28|4x|7a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.232.3.2.5.1.1.51.10.17|4x|627574206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.51.11.4|4x|6f78656e204a61646564206b65707420627574206b657074207a6f6d62696573 +1.3.6.1.4.1.232.3.2.5.1.1.51.12.20|4x|746865697220616374656420717561696e746c7920717561696e746c79206163746564 +1.3.6.1.4.1.232.3.2.5.1.1.51.18.22|4|but +1.3.6.1.4.1.232.3.2.5.1.1.51.23.2|4x|627574206f78656e204a6164656420666f7277617264204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.52.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.52.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.52.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.52.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.52.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.52.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.53.0.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.53.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.53.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.53.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.53.10.17|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.53.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.54.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.54.10.17|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.54.11.4|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.54.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.54.18.22|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.54.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.55.0.2|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.55.0.28|2|26 +1.3.6.1.4.1.232.3.2.5.1.1.55.8.31|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.55.9.24|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.55.9.28|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.55.10.17|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.55.11.4|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.55.12.20|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.55.18.22|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.55.23.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.56.0.2|65|2949968298 +1.3.6.1.4.1.232.3.2.5.1.1.56.0.28|65|2491218975 +1.3.6.1.4.1.232.3.2.5.1.1.56.8.31|65|233525739 +1.3.6.1.4.1.232.3.2.5.1.1.56.9.24|65|336628689 +1.3.6.1.4.1.232.3.2.5.1.1.56.9.28|65|2014596717 +1.3.6.1.4.1.232.3.2.5.1.1.56.10.17|65|4222268319 +1.3.6.1.4.1.232.3.2.5.1.1.56.11.4|65|2071508675 +1.3.6.1.4.1.232.3.2.5.1.1.56.12.20|65|1261145831 +1.3.6.1.4.1.232.3.2.5.1.1.56.18.22|65|1296062476 +1.3.6.1.4.1.232.3.2.5.1.1.56.23.2|65|1252664383 +1.3.6.1.4.1.232.3.2.5.1.1.57.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.57.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.57.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.57.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.57.9.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.57.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.57.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.57.12.20|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.57.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.57.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.58.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.10.17|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.58.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.59.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.0.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.59.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.59.9.24|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.59.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.59.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.18.22|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.59.23.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.60.0.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.60.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.60.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.60.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.60.12.20|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.60.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.0.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.61.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.61.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.61.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.61.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.61.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.61.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.62.0.2|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.0.28|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.8.31|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.9.24|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.9.28|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.10.17|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.11.4|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.12.20|4|kept +1.3.6.1.4.1.232.3.2.5.1.1.62.18.22|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.23.2|4|kept +1.3.6.1.4.1.232.3.2.5.1.1.63.0.2|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.63.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.63.8.31|2|26 +1.3.6.1.4.1.232.3.2.5.1.1.63.9.24|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.63.9.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.63.10.17|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.63.11.4|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.63.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.63.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.63.23.2|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.64.0.2|4x|627574207468656972206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.64.0.28|4x|64726976696e672064726976696e67206f78656e204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.64.8.31|4x|6163746564204a61646564207a6f6d62696573207468656972206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.232.3.2.5.1.1.64.9.24|4x|6163746564204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.64.9.28|4|acted +1.3.6.1.4.1.232.3.2.5.1.1.64.10.17|4x|666f72776172642062757420717561696e746c7920666f7277617264207a6f6d6269657320666f7277617264206b657074207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.232.3.2.5.1.1.64.11.4|4x|64726976696e67206275742074686569722064726976696e67204a61646564207a6f6d62696573206f78656e2062757420627574 +1.3.6.1.4.1.232.3.2.5.1.1.64.12.20|4x|746865697220666f7277617264204a6164656420717561696e746c79 +1.3.6.1.4.1.232.3.2.5.1.1.64.18.22|4x|746865697220717561696e746c792064726976696e672064726976696e67206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.64.23.2|4x|7a6f6d62696573207a6f6d626965732064726976696e6720666f7277617264 +1.3.6.1.4.1.232.3.2.5.1.1.65.0.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.65.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.65.9.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.65.10.17|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.65.11.4|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.65.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.66.0.2|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.66.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.66.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.66.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.66.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.66.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.66.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.66.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.66.18.22|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.66.23.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.67.0.2|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.67.0.28|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.67.8.31|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.67.9.24|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.67.9.28|2|28 +1.3.6.1.4.1.232.3.2.5.1.1.67.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.67.11.4|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.67.12.20|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.67.18.22|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.67.23.2|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.68.0.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.0.28|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.68.8.31|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.68.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.68.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.10.17|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.68.12.20|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.68.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.23.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.69.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.69.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.8.31|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.69.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.69.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.69.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.70.0.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.70.0.28|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.70.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.70.9.24|2|22 +1.3.6.1.4.1.232.3.2.5.1.1.70.9.28|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.70.10.17|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.70.11.4|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.70.12.20|2|30 +1.3.6.1.4.1.232.3.2.5.1.1.70.18.22|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.70.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.71.0.2|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.71.0.28|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.71.8.31|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.71.9.24|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.71.9.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.71.10.17|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.71.11.4|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.71.12.20|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.71.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.71.23.2|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.72.0.2|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.72.0.28|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.72.8.31|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.72.9.24|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.72.9.28|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.72.10.17|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.72.11.4|2|29 +1.3.6.1.4.1.232.3.2.5.1.1.72.12.20|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.72.18.22|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.72.23.2|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.73.0.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.73.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.73.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.73.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.18.22|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.73.23.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.74.0.2|65|2908799926 +1.3.6.1.4.1.232.3.2.5.1.1.74.0.28|65|2490380324 +1.3.6.1.4.1.232.3.2.5.1.1.74.8.31|65|2597785093 +1.3.6.1.4.1.232.3.2.5.1.1.74.9.24|65|4254200557 +1.3.6.1.4.1.232.3.2.5.1.1.74.9.28|65|696408854 +1.3.6.1.4.1.232.3.2.5.1.1.74.10.17|65|165954175 +1.3.6.1.4.1.232.3.2.5.1.1.74.11.4|65|404169227 +1.3.6.1.4.1.232.3.2.5.1.1.74.12.20|65|368625461 +1.3.6.1.4.1.232.3.2.5.1.1.74.18.22|65|2141670018 +1.3.6.1.4.1.232.3.2.5.1.1.74.23.2|65|3382161332 +1.3.6.1.4.1.232.3.2.5.1.1.75.0.2|66|2380887083 +1.3.6.1.4.1.232.3.2.5.1.1.75.0.28|66|1128640721 +1.3.6.1.4.1.232.3.2.5.1.1.75.8.31|66|3386410156 +1.3.6.1.4.1.232.3.2.5.1.1.75.9.24|66|46631455 +1.3.6.1.4.1.232.3.2.5.1.1.75.9.28|66|1683028466 +1.3.6.1.4.1.232.3.2.5.1.1.75.10.17|66|2663962912 +1.3.6.1.4.1.232.3.2.5.1.1.75.11.4|66|1693199007 +1.3.6.1.4.1.232.3.2.5.1.1.75.12.20|66|3786879383 +1.3.6.1.4.1.232.3.2.5.1.1.75.18.22|66|873327295 +1.3.6.1.4.1.232.3.2.5.1.1.75.23.2|66|1558173398 +1.3.6.1.4.1.232.3.2.5.1.1.76.0.2|65|2103006361 +1.3.6.1.4.1.232.3.2.5.1.1.76.0.28|65|1426172609 +1.3.6.1.4.1.232.3.2.5.1.1.76.8.31|65|991215997 +1.3.6.1.4.1.232.3.2.5.1.1.76.9.24|65|2962747034 +1.3.6.1.4.1.232.3.2.5.1.1.76.9.28|65|2527741665 +1.3.6.1.4.1.232.3.2.5.1.1.76.10.17|65|2054720417 +1.3.6.1.4.1.232.3.2.5.1.1.76.11.4|65|2600139724 +1.3.6.1.4.1.232.3.2.5.1.1.76.12.20|65|999271546 +1.3.6.1.4.1.232.3.2.5.1.1.76.18.22|65|388628255 +1.3.6.1.4.1.232.3.2.5.1.1.76.23.2|65|457008923 +1.3.6.1.4.1.232.3.2.5.1.1.77.0.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.77.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.77.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.77.9.24|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.77.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.77.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.77.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.77.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.77.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.77.23.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.78.0.2|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.78.0.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.78.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.78.9.24|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.78.9.28|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.78.10.17|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.78.11.4|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.78.12.20|2|30 +1.3.6.1.4.1.232.3.2.5.1.1.78.18.22|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.78.23.2|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.79.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.79.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.79.8.31|2|26 +1.3.6.1.4.1.232.3.2.5.1.1.79.9.24|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.79.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.79.10.17|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.79.11.4|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.79.12.20|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.79.18.22|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.79.23.2|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.80.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.80.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.80.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.80.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.80.23.2|2|1 +1.3.6.1.4.1.232.6.2.2.2.0|2|2 +1.3.6.1.4.1.232.6.2.3.1.0|2|4 +1.3.6.1.4.1.232.6.2.3.2.0|2|2 +1.3.6.1.4.1.232.6.2.3.3.0|2|1234 +1.3.6.1.4.1.232.6.2.5.1.0|2|4 +1.3.6.1.4.1.232.6.2.5.6.0|2|3 +1.3.6.1.4.1.232.6.2.5.10.0|2|5 +1.3.6.1.4.1.232.6.2.5.17.0|2|4 +1.3.6.1.4.1.232.6.2.5.21.0|2|3 +1.3.6.1.4.1.232.6.2.6.1.0|2|2 +1.3.6.1.4.1.232.6.2.6.3.0|2|2 +1.3.6.1.4.1.232.6.2.6.4.0|2|2 +1.3.6.1.4.1.232.6.2.6.5.0|2|2 +1.3.6.1.4.1.232.6.2.6.8.1.3.0|2|1 +1.3.6.1.4.1.232.6.2.6.8.1.3.1|2|13 +1.3.6.1.4.1.232.6.2.6.8.1.3.2|2|28 +1.3.6.1.4.1.232.6.2.6.8.1.4.0|2|40 +1.3.6.1.4.1.232.6.2.6.8.1.4.1|2|45 +1.3.6.1.4.1.232.6.2.6.8.1.4.2|2|55 +1.3.6.1.4.1.232.6.2.6.8.1.6.0|2|2 +1.3.6.1.4.1.232.6.2.6.8.1.6.1|2|2 +1.3.6.1.4.1.232.6.2.6.8.1.6.2|2|3 +1.3.6.1.4.1.232.6.2.8.1.0|2|1051200 +1.3.6.1.4.1.232.6.2.8.2.0|2|42 +1.3.6.1.4.1.232.6.2.15.3.0|2|82 +1.3.6.1.4.1.232.6.2.17.2.1.2.0|2|1 +1.3.6.1.4.1.232.6.2.17.2.1.2.1|2|3 +1.3.6.1.4.1.232.6.2.17.2.1.2.2|2|4 +1.3.6.1.4.1.232.6.2.17.2.1.2.3|2|5 +1.3.6.1.4.1.232.6.2.17.2.1.4.0|2|2 +1.3.6.1.4.1.232.6.2.17.2.1.4.1|2|2 +1.3.6.1.4.1.232.6.2.17.2.1.4.2|2|2 +1.3.6.1.4.1.232.6.2.17.2.1.4.3|2|4 +1.3.6.1.4.1.232.6.2.17.2.1.5.0|2|1 +1.3.6.1.4.1.232.6.2.17.2.1.5.1|2|1 +1.3.6.1.4.1.232.6.2.17.2.1.5.2|2|1 +1.3.6.1.4.1.232.6.2.17.2.1.5.3|2|12 +1.3.6.1.4.1.232.9.2.2.5|2|2 +1.3.6.1.4.1.232.9.2.2.6|2|89 +1.3.6.1.4.1.232.9.2.2.9|2|0 +1.3.6.1.4.1.232.9.2.2.16|2|2 +1.3.6.1.4.1.232.9.2.2.17|2|2 +1.3.6.1.4.1.232.9.2.2.32|2|3 +1.3.6.1.4.1.232.9.2.3.1|2|10 +1.3.6.1.4.1.232.9.2.5.2.1.1.0|2|2 +1.3.6.1.4.1.232.9.2.5.2.1.1.1|2|3 +1.3.6.1.4.1.232.9.2.5.2.1.2.0|65|2048000 +1.3.6.1.4.1.232.9.2.5.2.1.2.1|65|4096000 +1.3.6.1.4.1.232.9.2.5.2.1.3.0|65|2000 +1.3.6.1.4.1.232.9.2.5.2.1.3.1|65|4000 +1.3.6.1.4.1.232.9.2.5.2.1.6.0|65|10 +1.3.6.1.4.1.232.9.2.5.2.1.6.1|65|42 +1.3.6.1.4.1.232.9.2.5.2.1.7.0|65|0 +1.3.6.1.4.1.232.9.2.5.2.1.7.1|65|3 +1.3.6.1.4.1.232.9.2.5.2.1.8.0|65|200 +1.3.6.1.4.1.232.9.2.5.2.1.8.1|65|800 +1.3.6.1.4.1.232.9.2.5.2.1.9.0|65|1024000 +1.3.6.1.4.1.232.9.2.5.2.1.9.1|65|3072000 +1.3.6.1.4.1.232.9.2.5.2.1.10.0|65|1000 +1.3.6.1.4.1.232.9.2.5.2.1.10.1|65|3000 +1.3.6.1.4.1.232.9.2.5.2.1.13.0|65|30 +1.3.6.1.4.1.232.9.2.5.2.1.13.1|65|15 +1.3.6.1.4.1.232.9.2.5.2.1.14.0|65|2 +1.3.6.1.4.1.232.9.2.5.2.1.14.1|65|9 +1.3.6.1.4.1.232.9.2.5.2.1.15.0|65|0 +1.3.6.1.4.1.232.9.2.5.2.1.15.1|65|17 +1.3.6.1.4.1.232.11.2.2.1|4|RHEL +1.3.6.1.4.1.232.11.2.2.2|4|3.10.0-862.14.4.el7.ve.x86_64 +1.3.6.1.4.1.232.18.2.3.1.1.16.0|65|2000 +1.3.6.1.4.1.232.18.2.3.1.1.16.1|65|2500 +1.3.6.1.4.1.232.18.2.3.1.1.17.0|65|9000 +1.3.6.1.4.1.232.18.2.3.1.1.17.1|65|7600 +1.3.6.1.4.1.232.18.2.3.1.1.18.0|65|10 +1.3.6.1.4.1.232.18.2.3.1.1.18.1|65|0 +1.3.6.1.4.1.232.18.2.3.1.1.19.0|65|143 +1.3.6.1.4.1.232.18.2.3.1.1.19.1|65|25 +1.3.6.1.4.1.232.18.2.3.1.1.33.0|66|65536 +1.3.6.1.4.1.232.18.2.3.1.1.33.1|66|0 +1.3.6.1.4.1.232.18.2.3.1.1.36.0|66|1 +1.3.6.1.4.1.232.18.2.3.1.1.36.1|66|260 +1.3.6.1.4.1.232.18.2.3.1.1.37.0|65|16000 +1.3.6.1.4.1.232.18.2.3.1.1.37.1|65|20000 +1.3.6.1.4.1.232.18.2.3.1.1.38.0|65|72000 +1.3.6.1.4.1.232.18.2.3.1.1.38.1|65|60800 +1.3.6.1.4.1.232.18.2.3.1.1.39.0|4x|65746830 +1.3.6.1.4.1.232.18.2.3.1.1.39.1|4x|656e31 +1.3.6.1.4.1.232.18.2.5.3|2|1 diff --git a/test/new-e2e/ndm/snmp/compose/data/hpe-proliant.snmprec b/test/new-e2e/ndm/snmp/compose/data/hpe-proliant.snmprec new file mode 100644 index 0000000000000..67677848dd007 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/hpe-proliant.snmprec @@ -0,0 +1,1857 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.232.1.2 +1.3.6.1.2.1.1.5.0|4|hpe-proliant.example +1.3.6.1.2.1.2.2.1.1.3|2|3 +1.3.6.1.2.1.2.2.1.1.4|2|4 +1.3.6.1.2.1.2.2.1.2.3|4x|65746830 +1.3.6.1.2.1.2.2.1.2.4|4x|65746831 +1.3.6.1.2.1.2.2.1.3.3|2|13 +1.3.6.1.2.1.2.2.1.3.4|2|22 +1.3.6.1.2.1.2.2.1.4.3|2|20 +1.3.6.1.2.1.2.2.1.4.4|2|30 +1.3.6.1.2.1.2.2.1.5.3|66|1967830453 +1.3.6.1.2.1.2.2.1.5.4|66|561506485 +1.3.6.1.2.1.2.2.1.6.3|4x|12 +1.3.6.1.2.1.2.2.1.6.4|4x|13 +1.3.6.1.2.1.2.2.1.7.3|2|3 +1.3.6.1.2.1.2.2.1.7.4|2|3 +1.3.6.1.2.1.2.2.1.8.3|2|6 +1.3.6.1.2.1.2.2.1.8.4|2|1 +1.3.6.1.2.1.2.2.1.9.3|67|2922247544 +1.3.6.1.2.1.2.2.1.9.4|67|3503289067 +1.3.6.1.2.1.2.2.1.10.3|65|799330449 +1.3.6.1.2.1.2.2.1.10.4|65|1416546150 +1.3.6.1.2.1.2.2.1.11.3|65|1806496968 +1.3.6.1.2.1.2.2.1.11.4|65|1711866985 +1.3.6.1.2.1.2.2.1.12.3|65|2615824481 +1.3.6.1.2.1.2.2.1.12.4|65|422208764 +1.3.6.1.2.1.2.2.1.13.3|65|2637156982 +1.3.6.1.2.1.2.2.1.13.4|65|129617886 +1.3.6.1.2.1.2.2.1.14.3|65|2546706536 +1.3.6.1.2.1.2.2.1.14.4|65|1748404057 +1.3.6.1.2.1.2.2.1.15.3|65|937833439 +1.3.6.1.2.1.2.2.1.15.4|65|3384258657 +1.3.6.1.2.1.2.2.1.16.3|65|2607613508 +1.3.6.1.2.1.2.2.1.16.4|65|2163750849 +1.3.6.1.2.1.2.2.1.17.3|65|2602890644 +1.3.6.1.2.1.2.2.1.17.4|65|1298958925 +1.3.6.1.2.1.2.2.1.18.3|65|3795297761 +1.3.6.1.2.1.2.2.1.18.4|65|2855930861 +1.3.6.1.2.1.2.2.1.19.3|65|2638101636 +1.3.6.1.2.1.2.2.1.19.4|65|3850269903 +1.3.6.1.2.1.2.2.1.20.3|65|326043151 +1.3.6.1.2.1.2.2.1.20.4|65|3081566249 +1.3.6.1.2.1.2.2.1.21.3|66|3998170831 +1.3.6.1.2.1.2.2.1.21.4|66|434375459 +1.3.6.1.2.1.2.2.1.22.3|6|1.3.6.1.3.5.4.43.202.207.71.55.5 +1.3.6.1.2.1.2.2.1.22.4|6|1.3.6.1.3.143.146.10.194.182 +1.3.6.1.2.1.6.1.0|2|2 +1.3.6.1.2.1.6.2.0|2|31 +1.3.6.1.2.1.6.3.0|2|30 +1.3.6.1.2.1.6.4.0|2|3 +1.3.6.1.2.1.6.5.0|65|367405707 +1.3.6.1.2.1.6.5.0|65|1071906652 +1.3.6.1.2.1.6.6.0|65|2249397619 +1.3.6.1.2.1.6.7.0|65|229905265 +1.3.6.1.2.1.6.8.0|65|709655049 +1.3.6.1.2.1.6.9.0|66|1339955166 +1.3.6.1.2.1.6.10.0|65|3505452597 +1.3.6.1.2.1.6.11.0|65|2690927269 +1.3.6.1.2.1.6.12.0|65|45677298 +1.3.6.1.2.1.6.13.1.1.22.55.14.96.20.135.21.168.43.24|2|3 +1.3.6.1.2.1.6.13.1.1.23.243.83.56.2.196.169.135.95.14|2|9 +1.3.6.1.2.1.6.13.1.1.28.216.195.9.22.46.178.52.213.4|2|7 +1.3.6.1.2.1.6.13.1.1.43.76.18.58.15.224.141.246.4.27|2|8 +1.3.6.1.2.1.6.13.1.1.145.66.33.17.28.244.53.43.227.6|2|3 +1.3.6.1.2.1.6.13.1.1.146.120.186.130.16.98.210.88.42.17|2|10 +1.3.6.1.2.1.6.13.1.1.200.47.131.115.19.70.225.50.24.27|2|11 +1.3.6.1.2.1.6.13.1.1.208.140.201.179.0.77.6.20.15.27|2|1 +1.3.6.1.2.1.6.13.1.1.229.170.50.158.28.94.133.71.139.5|2|4 +1.3.6.1.2.1.6.13.1.1.232.107.202.10.4.181.247.252.98.9|2|12 +1.3.6.1.2.1.6.13.1.2.22.55.14.96.20.135.21.168.43.24|64x|16370e60 +1.3.6.1.2.1.6.13.1.2.23.243.83.56.2.196.169.135.95.14|64x|17f35338 +1.3.6.1.2.1.6.13.1.2.28.216.195.9.22.46.178.52.213.4|64x|1cd8c309 +1.3.6.1.2.1.6.13.1.2.43.76.18.58.15.224.141.246.4.27|64x|2b4c123a +1.3.6.1.2.1.6.13.1.2.145.66.33.17.28.244.53.43.227.6|64x|91422111 +1.3.6.1.2.1.6.13.1.2.146.120.186.130.16.98.210.88.42.17|64x|9278ba82 +1.3.6.1.2.1.6.13.1.2.200.47.131.115.19.70.225.50.24.27|64x|c82f8373 +1.3.6.1.2.1.6.13.1.2.208.140.201.179.0.77.6.20.15.27|64x|d08cc9b3 +1.3.6.1.2.1.6.13.1.2.229.170.50.158.28.94.133.71.139.5|64x|e5aa329e +1.3.6.1.2.1.6.13.1.2.232.107.202.10.4.181.247.252.98.9|64x|e86bca0a +1.3.6.1.2.1.6.13.1.3.22.55.14.96.20.135.21.168.43.24|2|20 +1.3.6.1.2.1.6.13.1.3.23.243.83.56.2.196.169.135.95.14|2|2 +1.3.6.1.2.1.6.13.1.3.28.216.195.9.22.46.178.52.213.4|2|22 +1.3.6.1.2.1.6.13.1.3.43.76.18.58.15.224.141.246.4.27|2|15 +1.3.6.1.2.1.6.13.1.3.145.66.33.17.28.244.53.43.227.6|2|28 +1.3.6.1.2.1.6.13.1.3.146.120.186.130.16.98.210.88.42.17|2|16 +1.3.6.1.2.1.6.13.1.3.200.47.131.115.19.70.225.50.24.27|2|19 +1.3.6.1.2.1.6.13.1.3.208.140.201.179.0.77.6.20.15.27|2|0 +1.3.6.1.2.1.6.13.1.3.229.170.50.158.28.94.133.71.139.5|2|28 +1.3.6.1.2.1.6.13.1.3.232.107.202.10.4.181.247.252.98.9|2|4 +1.3.6.1.2.1.6.13.1.4.22.55.14.96.20.135.21.168.43.24|64x|8715a82b +1.3.6.1.2.1.6.13.1.4.23.243.83.56.2.196.169.135.95.14|64x|c4a9875f +1.3.6.1.2.1.6.13.1.4.28.216.195.9.22.46.178.52.213.4|64x|2eb234d5 +1.3.6.1.2.1.6.13.1.4.43.76.18.58.15.224.141.246.4.27|64x|e08df604 +1.3.6.1.2.1.6.13.1.4.145.66.33.17.28.244.53.43.227.6|64x|f4352be3 +1.3.6.1.2.1.6.13.1.4.146.120.186.130.16.98.210.88.42.17|64x|62d2582a +1.3.6.1.2.1.6.13.1.4.200.47.131.115.19.70.225.50.24.27|64x|46e13218 +1.3.6.1.2.1.6.13.1.4.208.140.201.179.0.77.6.20.15.27|64x|4d06140f +1.3.6.1.2.1.6.13.1.4.229.170.50.158.28.94.133.71.139.5|64x|5e85478b +1.3.6.1.2.1.6.13.1.4.232.107.202.10.4.181.247.252.98.9|64x|b5f7fc62 +1.3.6.1.2.1.6.13.1.5.22.55.14.96.20.135.21.168.43.24|2|24 +1.3.6.1.2.1.6.13.1.5.23.243.83.56.2.196.169.135.95.14|2|14 +1.3.6.1.2.1.6.13.1.5.28.216.195.9.22.46.178.52.213.4|2|4 +1.3.6.1.2.1.6.13.1.5.43.76.18.58.15.224.141.246.4.27|2|27 +1.3.6.1.2.1.6.13.1.5.145.66.33.17.28.244.53.43.227.6|2|6 +1.3.6.1.2.1.6.13.1.5.146.120.186.130.16.98.210.88.42.17|2|17 +1.3.6.1.2.1.6.13.1.5.200.47.131.115.19.70.225.50.24.27|2|27 +1.3.6.1.2.1.6.13.1.5.208.140.201.179.0.77.6.20.15.27|2|27 +1.3.6.1.2.1.6.13.1.5.229.170.50.158.28.94.133.71.139.5|2|5 +1.3.6.1.2.1.6.13.1.5.232.107.202.10.4.181.247.252.98.9|2|9 +1.3.6.1.2.1.6.14.0|65|269154440 +1.3.6.1.2.1.6.15.0|65|590887849 +1.3.6.1.2.1.6.17.0|70|7667457467363787060 +1.3.6.1.2.1.6.18.0|70|13855100236040073709 +1.3.6.1.2.1.6.19.1.1.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|2|0 +1.3.6.1.2.1.6.19.1.1.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|2|1 +1.3.6.1.2.1.6.19.1.1.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|2|1 +1.3.6.1.2.1.6.19.1.1.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|2|1 +1.3.6.1.2.1.6.19.1.1.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|2|2 +1.3.6.1.2.1.6.19.1.1.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|2|2 +1.3.6.1.2.1.6.19.1.1.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|2|2 +1.3.6.1.2.1.6.19.1.1.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|2|4 +1.3.6.1.2.1.6.19.1.1.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|2|4 +1.3.6.1.2.1.6.19.1.1.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|2|4 +1.3.6.1.2.1.6.19.1.2.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|4|but +1.3.6.1.2.1.6.19.1.2.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|4x|7468656972206163746564 +1.3.6.1.2.1.6.19.1.2.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|4x|6f78656e20627574206163746564206f78656e207a6f6d62696573 +1.3.6.1.2.1.6.19.1.2.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|4x|64726976696e67206f78656e206b6570742074686569722064726976696e67 +1.3.6.1.2.1.6.19.1.2.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|4x|6f78656e20666f7277617264 +1.3.6.1.2.1.6.19.1.2.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|4x|6f78656e206b657074206b6570742064726976696e672064726976696e67204a61646564 +1.3.6.1.2.1.6.19.1.2.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|4x|666f7277617264204a616465642064726976696e672064726976696e6720666f7277617264204a6164656420717561696e746c79 +1.3.6.1.2.1.6.19.1.2.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|4x|4a616465642064726976696e672064726976696e67 +1.3.6.1.2.1.6.19.1.2.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|4x|74686569722062757420746865697220616374656420717561696e746c7920627574206163746564 +1.3.6.1.2.1.6.19.1.2.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|4x|6f78656e207a6f6d62696573207a6f6d6269657320717561696e746c792064726976696e672064726976696e67 +1.3.6.1.2.1.6.19.1.3.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|66|59124 +1.3.6.1.2.1.6.19.1.3.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|66|5673 +1.3.6.1.2.1.6.19.1.3.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|66|40692 +1.3.6.1.2.1.6.19.1.3.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|66|44170 +1.3.6.1.2.1.6.19.1.3.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|66|30404 +1.3.6.1.2.1.6.19.1.3.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|66|21906 +1.3.6.1.2.1.6.19.1.3.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|66|27283 +1.3.6.1.2.1.6.19.1.3.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|66|8280 +1.3.6.1.2.1.6.19.1.3.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|66|42462 +1.3.6.1.2.1.6.19.1.3.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|66|32639 +1.3.6.1.2.1.6.19.1.4.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|2|3 +1.3.6.1.2.1.6.19.1.4.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|2|2 +1.3.6.1.2.1.6.19.1.4.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|2|2 +1.3.6.1.2.1.6.19.1.4.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|2|16 +1.3.6.1.2.1.6.19.1.4.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|2|4 +1.3.6.1.2.1.6.19.1.4.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|2|1 +1.3.6.1.2.1.6.19.1.4.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|2|0 +1.3.6.1.2.1.6.19.1.4.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|2|2 +1.3.6.1.2.1.6.19.1.4.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|2|2 +1.3.6.1.2.1.6.19.1.4.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|2|3 +1.3.6.1.2.1.6.19.1.5.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|4x|64726976696e6720717561696e746c79204a6164656420717561696e746c79206b657074206b657074206163746564206275742064726976696e67 +1.3.6.1.2.1.6.19.1.5.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|4x|746865697220717561696e746c79206163746564207a6f6d62696573 +1.3.6.1.2.1.6.19.1.5.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|4|but +1.3.6.1.2.1.6.19.1.5.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|4x|6f78656e20616374656420616374656420746865697220666f7277617264206f78656e206f78656e2064726976696e67206f78656e +1.3.6.1.2.1.6.19.1.5.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|4|forward +1.3.6.1.2.1.6.19.1.5.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|4x|6b657074207468656972 +1.3.6.1.2.1.6.19.1.5.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|4x|6f78656e20666f727761726420666f727761726420666f7277617264 +1.3.6.1.2.1.6.19.1.5.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|4x|6275742061637465642064726976696e67206163746564206b657074204a6164656420627574207a6f6d62696573 +1.3.6.1.2.1.6.19.1.5.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|4x|666f7277617264204a6164656420627574204a61646564 +1.3.6.1.2.1.6.19.1.5.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|4x|627574206f78656e207a6f6d6269657320616374656420627574206b657074 +1.3.6.1.2.1.6.19.1.6.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|66|998 +1.3.6.1.2.1.6.19.1.6.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|66|29086 +1.3.6.1.2.1.6.19.1.6.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|66|20022 +1.3.6.1.2.1.6.19.1.6.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|66|51612 +1.3.6.1.2.1.6.19.1.6.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|66|53695 +1.3.6.1.2.1.6.19.1.6.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|66|23746 +1.3.6.1.2.1.6.19.1.6.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|66|31727 +1.3.6.1.2.1.6.19.1.6.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|66|7268 +1.3.6.1.2.1.6.19.1.6.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|66|59241 +1.3.6.1.2.1.6.19.1.6.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|66|29754 +1.3.6.1.2.1.6.19.1.7.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|2|6 +1.3.6.1.2.1.6.19.1.7.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|2|8 +1.3.6.1.2.1.6.19.1.7.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|2|6 +1.3.6.1.2.1.6.19.1.7.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|2|12 +1.3.6.1.2.1.6.19.1.7.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|2|3 +1.3.6.1.2.1.6.19.1.7.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|2|8 +1.3.6.1.2.1.6.19.1.7.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|2|9 +1.3.6.1.2.1.6.19.1.7.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|2|11 +1.3.6.1.2.1.6.19.1.7.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|2|12 +1.3.6.1.2.1.6.19.1.7.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|2|8 +1.3.6.1.2.1.6.19.1.8.0.3.98.117.116.59124.3.59.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.32.100.114.105.118.105.110.103.998|66|22017 +1.3.6.1.2.1.6.19.1.8.1.11.116.104.101.105.114.32.97.99.116.101.100.5673.2.28.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.122.111.109.98.105.101.115.29086|66|19736 +1.3.6.1.2.1.6.19.1.8.1.27.111.120.101.110.32.98.117.116.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.40692.2.3.98.117.116.20022|66|42634 +1.3.6.1.2.1.6.19.1.8.1.31.100.114.105.118.105.110.103.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.44170.16.53.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.100.114.105.118.105.110.103.32.111.120.101.110.51612|66|2416 +1.3.6.1.2.1.6.19.1.8.2.12.111.120.101.110.32.102.111.114.119.97.114.100.30404.4.7.102.111.114.119.97.114.100.53695|66|47463 +1.3.6.1.2.1.6.19.1.8.2.36.111.120.101.110.32.107.101.112.116.32.107.101.112.116.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.21906.1.10.107.101.112.116.32.116.104.101.105.114.23746|66|26014 +1.3.6.1.2.1.6.19.1.8.2.52.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.27283.0.28.111.120.101.110.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.31727|66|60912 +1.3.6.1.2.1.6.19.1.8.4.21.74.97.100.101.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.8280.2.46.98.117.116.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.107.101.112.116.32.74.97.100.101.100.32.98.117.116.32.122.111.109.98.105.101.115.7268|66|42192 +1.3.6.1.2.1.6.19.1.8.4.40.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.97.99.116.101.100.42462.2.23.102.111.114.119.97.114.100.32.74.97.100.101.100.32.98.117.116.32.74.97.100.101.100.59241|66|30088 +1.3.6.1.2.1.6.19.1.8.4.45.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32639.3.31.98.117.116.32.111.120.101.110.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.98.117.116.32.107.101.112.116.29754|66|60074 +1.3.6.1.2.1.6.20.1.1.1.23.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.49596|2|1 +1.3.6.1.2.1.6.20.1.1.1.39.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.21167|2|1 +1.3.6.1.2.1.6.20.1.1.1.49.102.111.114.119.97.114.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.102.111.114.119.97.114.100.42037|2|1 +1.3.6.1.2.1.6.20.1.1.2.23.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.34510|2|2 +1.3.6.1.2.1.6.20.1.1.3.36.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.32.107.101.112.116.32.98.117.116.46667|2|3 +1.3.6.1.2.1.6.20.1.1.3.37.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.3720|2|3 +1.3.6.1.2.1.6.20.1.1.3.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.44254|2|3 +1.3.6.1.2.1.6.20.1.1.4.37.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.27424|2|4 +1.3.6.1.2.1.6.20.1.1.4.59.107.101.112.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.64001|2|4 +1.3.6.1.2.1.6.20.1.1.16.11.116.104.101.105.114.32.97.99.116.101.100.6814|2|16 +1.3.6.1.2.1.6.20.1.2.1.23.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.49596|4x|717561696e746c79206b65707420616374656420627574 +1.3.6.1.2.1.6.20.1.2.1.39.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.21167|4x|717561696e746c7920666f7277617264207468656972204a61646564206f78656e204a61646564 +1.3.6.1.2.1.6.20.1.2.1.49.102.111.114.119.97.114.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.102.111.114.119.97.114.100.42037|4x|666f727761726420746865697220717561696e746c792074686569722064726976696e67206b65707420666f7277617264 +1.3.6.1.2.1.6.20.1.2.2.23.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.34510|4x|7a6f6d6269657320666f72776172642064726976696e67 +1.3.6.1.2.1.6.20.1.2.3.36.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.32.107.101.112.116.32.98.117.116.46667|4x|717561696e746c79207468656972206f78656e207a6f6d62696573206b65707420627574 +1.3.6.1.2.1.6.20.1.2.3.37.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.3720|4x|666f727761726420627574206f78656e20746865697220717561696e746c79204a61646564 +1.3.6.1.2.1.6.20.1.2.3.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.44254|4x|74686569722062757420746865697220616374656420746865697220717561696e746c792064726976696e67 +1.3.6.1.2.1.6.20.1.2.4.37.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.27424|4x|746865697220666f727761726420717561696e746c7920627574206f78656e207468656972 +1.3.6.1.2.1.6.20.1.2.4.59.107.101.112.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.64001|4x|6b6570742064726976696e6720717561696e746c79207468656972206b657074206f78656e20616374656420666f7277617264207a6f6d62696573 +1.3.6.1.2.1.6.20.1.2.16.11.116.104.101.105.114.32.97.99.116.101.100.6814|4x|7468656972206163746564 +1.3.6.1.2.1.6.20.1.3.1.23.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.49596|66|49596 +1.3.6.1.2.1.6.20.1.3.1.39.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.21167|66|21167 +1.3.6.1.2.1.6.20.1.3.1.49.102.111.114.119.97.114.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.102.111.114.119.97.114.100.42037|66|42037 +1.3.6.1.2.1.6.20.1.3.2.23.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.34510|66|34510 +1.3.6.1.2.1.6.20.1.3.3.36.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.32.107.101.112.116.32.98.117.116.46667|66|46667 +1.3.6.1.2.1.6.20.1.3.3.37.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.3720|66|3720 +1.3.6.1.2.1.6.20.1.3.3.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.44254|66|44254 +1.3.6.1.2.1.6.20.1.3.4.37.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.27424|66|27424 +1.3.6.1.2.1.6.20.1.3.4.59.107.101.112.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.64001|66|64001 +1.3.6.1.2.1.6.20.1.3.16.11.116.104.101.105.114.32.97.99.116.101.100.6814|66|6814 +1.3.6.1.2.1.6.20.1.4.1.23.113.117.97.105.110.116.108.121.32.107.101.112.116.32.97.99.116.101.100.32.98.117.116.49596|66|9402 +1.3.6.1.2.1.6.20.1.4.1.39.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.116.104.101.105.114.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.21167|66|32606 +1.3.6.1.2.1.6.20.1.4.1.49.102.111.114.119.97.114.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.107.101.112.116.32.102.111.114.119.97.114.100.42037|66|65236 +1.3.6.1.2.1.6.20.1.4.2.23.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.34510|66|15018 +1.3.6.1.2.1.6.20.1.4.3.36.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.32.107.101.112.116.32.98.117.116.46667|66|24578 +1.3.6.1.2.1.6.20.1.4.3.37.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.3720|66|8642 +1.3.6.1.2.1.6.20.1.4.3.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.97.99.116.101.100.32.116.104.101.105.114.32.113.117.97.105.110.116.108.121.32.100.114.105.118.105.110.103.44254|66|19609 +1.3.6.1.2.1.6.20.1.4.4.37.116.104.101.105.114.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.111.120.101.110.32.116.104.101.105.114.27424|66|36255 +1.3.6.1.2.1.6.20.1.4.4.59.107.101.112.116.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.107.101.112.116.32.111.120.101.110.32.97.99.116.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.64001|66|4556 +1.3.6.1.2.1.6.20.1.4.16.11.116.104.101.105.114.32.97.99.116.101.100.6814|66|46638 +1.3.6.1.2.1.7.1.0|65|285090006 +1.3.6.1.2.1.7.2.0|65|2893774938 +1.3.6.1.2.1.7.3.0|65|774341875 +1.3.6.1.2.1.7.4.0|65|14512478 +1.3.6.1.2.1.7.5.1.1.26.210.35.174.5|64x|1ad223ae +1.3.6.1.2.1.7.5.1.1.58.118.81.108.24|64x|3a76516c +1.3.6.1.2.1.7.5.1.1.83.10.223.125.17|64x|530adf7d +1.3.6.1.2.1.7.5.1.1.129.115.70.221.12|64x|817346dd +1.3.6.1.2.1.7.5.1.1.135.101.156.213.29|64x|87659cd5 +1.3.6.1.2.1.7.5.1.1.142.172.168.114.18|64x|8eaca872 +1.3.6.1.2.1.7.5.1.1.177.77.74.252.23|64x|b14d4afc +1.3.6.1.2.1.7.5.1.1.215.232.16.205.26|64x|d7e810cd +1.3.6.1.2.1.7.5.1.1.215.246.105.236.4|64x|d7f669ec +1.3.6.1.2.1.7.5.1.1.253.23.205.128.28|64x|fd17cd80 +1.3.6.1.2.1.7.5.1.2.26.210.35.174.5|2|5 +1.3.6.1.2.1.7.5.1.2.58.118.81.108.24|2|24 +1.3.6.1.2.1.7.5.1.2.83.10.223.125.17|2|17 +1.3.6.1.2.1.7.5.1.2.129.115.70.221.12|2|12 +1.3.6.1.2.1.7.5.1.2.135.101.156.213.29|2|29 +1.3.6.1.2.1.7.5.1.2.142.172.168.114.18|2|18 +1.3.6.1.2.1.7.5.1.2.177.77.74.252.23|2|23 +1.3.6.1.2.1.7.5.1.2.215.232.16.205.26|2|26 +1.3.6.1.2.1.7.5.1.2.215.246.105.236.4|2|4 +1.3.6.1.2.1.7.5.1.2.253.23.205.128.28|2|28 +1.3.6.1.2.1.7.7.1.1.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|2|0 +1.3.6.1.2.1.7.7.1.1.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|2|1 +1.3.6.1.2.1.7.7.1.1.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|2|1 +1.3.6.1.2.1.7.7.1.1.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|2|1 +1.3.6.1.2.1.7.7.1.1.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|2|1 +1.3.6.1.2.1.7.7.1.1.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|2|2 +1.3.6.1.2.1.7.7.1.1.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|2|2 +1.3.6.1.2.1.7.7.1.1.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|2|3 +1.3.6.1.2.1.7.7.1.1.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|2|4 +1.3.6.1.2.1.7.7.1.1.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|2|4 +1.3.6.1.2.1.7.7.1.2.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|4x|7a6f6d6269657320717561696e746c7920666f72776172642064726976696e67207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|4|zombies +1.3.6.1.2.1.7.7.1.2.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|4x|717561696e746c79204a61646564206f78656e +1.3.6.1.2.1.7.7.1.2.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|4x|666f7277617264206f78656e206f78656e20666f7277617264 +1.3.6.1.2.1.7.7.1.2.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|4x|717561696e746c7920717561696e746c79206f78656e204a61646564204a61646564206163746564 +1.3.6.1.2.1.7.7.1.2.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|4x|74686569722062757420746865697220666f7277617264206f78656e207a6f6d62696573207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|4x|64726976696e67206b65707420746865697220746865697220666f7277617264207a6f6d62696573207468656972 +1.3.6.1.2.1.7.7.1.2.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|4|oxen +1.3.6.1.2.1.7.7.1.2.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|4x|6b657074207a6f6d626965732062757420717561696e746c79207468656972206f78656e207a6f6d62696573 +1.3.6.1.2.1.7.7.1.2.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|4x|7468656972206f78656e2062757420717561696e746c79204a61646564207468656972206163746564206f78656e207a6f6d62696573 +1.3.6.1.2.1.7.7.1.3.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|66|1715 +1.3.6.1.2.1.7.7.1.3.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|66|65034 +1.3.6.1.2.1.7.7.1.3.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|66|42170 +1.3.6.1.2.1.7.7.1.3.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|66|21651 +1.3.6.1.2.1.7.7.1.3.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|66|65393 +1.3.6.1.2.1.7.7.1.3.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|66|1355 +1.3.6.1.2.1.7.7.1.3.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|66|22282 +1.3.6.1.2.1.7.7.1.3.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|66|60321 +1.3.6.1.2.1.7.7.1.3.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|66|65225 +1.3.6.1.2.1.7.7.1.3.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|66|45774 +1.3.6.1.2.1.7.7.1.4.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|2|2 +1.3.6.1.2.1.7.7.1.4.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|2|1 +1.3.6.1.2.1.7.7.1.4.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|2|0 +1.3.6.1.2.1.7.7.1.4.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|2|16 +1.3.6.1.2.1.7.7.1.4.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|2|1 +1.3.6.1.2.1.7.7.1.4.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|2|4 +1.3.6.1.2.1.7.7.1.4.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|2|1 +1.3.6.1.2.1.7.7.1.4.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|2|3 +1.3.6.1.2.1.7.7.1.4.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|2|0 +1.3.6.1.2.1.7.7.1.4.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|2|0 +1.3.6.1.2.1.7.7.1.5.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|4x|717561696e746c7920717561696e746c79 +1.3.6.1.2.1.7.7.1.5.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|4|their +1.3.6.1.2.1.7.7.1.5.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|4|quaintly +1.3.6.1.2.1.7.7.1.5.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|4x|7a6f6d626965732064726976696e67 +1.3.6.1.2.1.7.7.1.5.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|4x|6b657074204a61646564207a6f6d626965732062757420746865697220666f727761726420627574 +1.3.6.1.2.1.7.7.1.5.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|4x|7a6f6d6269657320666f727761726420717561696e746c79206b657074204a61646564206163746564206163746564 +1.3.6.1.2.1.7.7.1.5.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|4x|6163746564207468656972 +1.3.6.1.2.1.7.7.1.5.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|4x|7468656972207a6f6d6269657320627574 +1.3.6.1.2.1.7.7.1.5.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|4x|6f78656e20717561696e746c79206275742074686569722062757420666f7277617264206b657074 +1.3.6.1.2.1.7.7.1.5.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|4x|6f78656e207a6f6d62696573 +1.3.6.1.2.1.7.7.1.6.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|66|12566 +1.3.6.1.2.1.7.7.1.6.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|66|15814 +1.3.6.1.2.1.7.7.1.6.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|66|54083 +1.3.6.1.2.1.7.7.1.6.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|66|47644 +1.3.6.1.2.1.7.7.1.6.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|66|24133 +1.3.6.1.2.1.7.7.1.6.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|66|41439 +1.3.6.1.2.1.7.7.1.6.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|66|17304 +1.3.6.1.2.1.7.7.1.6.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|66|38725 +1.3.6.1.2.1.7.7.1.6.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|66|12376 +1.3.6.1.2.1.7.7.1.6.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|66|186 +1.3.6.1.2.1.7.7.1.7.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|66|28428 +1.3.6.1.2.1.7.7.1.7.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|66|8857 +1.3.6.1.2.1.7.7.1.7.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|66|13191 +1.3.6.1.2.1.7.7.1.7.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|66|33055 +1.3.6.1.2.1.7.7.1.7.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|66|46225 +1.3.6.1.2.1.7.7.1.7.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|66|13974 +1.3.6.1.2.1.7.7.1.7.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|66|43555 +1.3.6.1.2.1.7.7.1.7.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|66|28192 +1.3.6.1.2.1.7.7.1.7.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|66|54947 +1.3.6.1.2.1.7.7.1.7.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|66|51238 +1.3.6.1.2.1.7.7.1.8.0.40.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.1715.2.17.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.12566.28428|66|25599 +1.3.6.1.2.1.7.7.1.8.1.7.122.111.109.98.105.101.115.65034.1.5.116.104.101.105.114.15814.8857|66|11555 +1.3.6.1.2.1.7.7.1.8.1.19.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.111.120.101.110.42170.0.8.113.117.97.105.110.116.108.121.54083.13191|66|53574 +1.3.6.1.2.1.7.7.1.8.1.25.102.111.114.119.97.114.100.32.111.120.101.110.32.111.120.101.110.32.102.111.114.119.97.114.100.21651.16.15.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.47644.33055|66|59807 +1.3.6.1.2.1.7.7.1.8.1.40.113.117.97.105.110.116.108.121.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100.32.74.97.100.101.100.32.97.99.116.101.100.65393.1.40.107.101.112.116.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.98.117.116.24133.46225|66|27804 +1.3.6.1.2.1.7.7.1.8.2.44.116.104.101.105.114.32.98.117.116.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.111.120.101.110.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.1355.4.47.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100.32.113.117.97.105.110.116.108.121.32.107.101.112.116.32.74.97.100.101.100.32.97.99.116.101.100.32.97.99.116.101.100.41439.13974|66|41056 +1.3.6.1.2.1.7.7.1.8.2.46.100.114.105.118.105.110.103.32.107.101.112.116.32.116.104.101.105.114.32.116.104.101.105.114.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.116.104.101.105.114.22282.1.11.97.99.116.101.100.32.116.104.101.105.114.17304.43555|66|36759 +1.3.6.1.2.1.7.7.1.8.3.4.111.120.101.110.60321.3.17.116.104.101.105.114.32.122.111.109.98.105.101.115.32.98.117.116.38725.28192|66|14424 +1.3.6.1.2.1.7.7.1.8.4.44.107.101.112.116.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.111.120.101.110.32.122.111.109.98.105.101.115.65225.0.40.111.120.101.110.32.113.117.97.105.110.116.108.121.32.98.117.116.32.116.104.101.105.114.32.98.117.116.32.102.111.114.119.97.114.100.32.107.101.112.116.12376.54947|66|25820 +1.3.6.1.2.1.7.7.1.8.4.54.116.104.101.105.114.32.111.120.101.110.32.98.117.116.32.113.117.97.105.110.116.108.121.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110.32.122.111.109.98.105.101.115.45774.0.12.111.120.101.110.32.122.111.109.98.105.101.115.186.51238|66|17972 +1.3.6.1.2.1.7.8.0|70|16186554651938255883 +1.3.6.1.2.1.7.9.0|70|12715263144235706931 +1.3.6.1.2.1.31.1.1.1.1.3|4x|65746830 +1.3.6.1.2.1.31.1.1.1.1.4|4x|65746831 +1.3.6.1.2.1.31.1.1.1.2.3|65|2073885201 +1.3.6.1.2.1.31.1.1.1.2.4|63|680735109 +1.3.6.1.2.1.31.1.1.1.3.3|65|2360598543 +1.3.6.1.2.1.31.1.1.1.3.4|63|1379245347 +1.3.6.1.2.1.31.1.1.1.4.3|65|3057530867 +1.3.6.1.2.1.31.1.1.1.4.4|63|3465094787 +1.3.6.1.2.1.31.1.1.1.5.3|65|2179882173 +1.3.6.1.2.1.31.1.1.1.5.4|63|2382544032 +1.3.6.1.2.1.31.1.1.1.6.3|70|1651315884051108360 +1.3.6.1.2.1.31.1.1.1.6.4|70|17802351026037375626 +1.3.6.1.2.1.31.1.1.1.7.3|70|4118331899856360821 +1.3.6.1.2.1.31.1.1.1.7.4|70|5035543605001113801 +1.3.6.1.2.1.31.1.1.1.8.3|70|11202384861768477444 +1.3.6.1.2.1.31.1.1.1.8.4|70|15115622675597428561 +1.3.6.1.2.1.31.1.1.1.9.3|70|13724057965262453488 +1.3.6.1.2.1.31.1.1.1.9.4|70|16118377523421981439 +1.3.6.1.2.1.31.1.1.1.10.3|70|9166794218122954960 +1.3.6.1.2.1.31.1.1.1.10.4|70|6581757051419162038 +1.3.6.1.2.1.31.1.1.1.11.3|70|2439612559439460994 +1.3.6.1.2.1.31.1.1.1.11.4|70|16302330143146664801 +1.3.6.1.2.1.31.1.1.1.12.3|70|17878080564905640091 +1.3.6.1.2.1.31.1.1.1.12.4|70|11809060028680131634 +1.3.6.1.2.1.31.1.1.1.13.3|70|12770683221480416955 +1.3.6.1.2.1.31.1.1.1.13.4|70|14541210036993170957 +1.3.6.1.2.1.31.1.1.1.14.3|2|1 +1.3.6.1.2.1.31.1.1.1.14.4|2|2 +1.3.6.1.2.1.31.1.1.1.15.3|66|524857806 +1.3.6.1.2.1.31.1.1.1.15.4|66|2640575967 +1.3.6.1.2.1.31.1.1.1.16.3|2|1 +1.3.6.1.2.1.31.1.1.1.16.4|2|1 +1.3.6.1.2.1.31.1.1.1.17.3|2|2 +1.3.6.1.2.1.31.1.1.1.17.4|2|2 +1.3.6.1.2.1.31.1.1.1.18.3|4x|717561696e746c79207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.2.1.31.1.1.1.18.4|4x|717561696e746c792062757420717561696e746c7920717561696e746c79 +1.3.6.1.2.1.31.1.1.1.19.3|64|1534827809 +1.3.6.1.2.1.31.1.1.1.19.4|67|3250977542 +1.3.6.1.2.1.31.1.2.1.1.0.15|2|0 +1.3.6.1.2.1.31.1.2.1.1.6.12|2|6 +1.3.6.1.2.1.31.1.2.1.1.11.12|2|11 +1.3.6.1.2.1.31.1.2.1.1.15.3|2|15 +1.3.6.1.2.1.31.1.2.1.1.15.30|2|15 +1.3.6.1.2.1.31.1.2.1.1.20.25|2|20 +1.3.6.1.2.1.31.1.2.1.1.20.30|2|20 +1.3.6.1.2.1.31.1.2.1.1.24.3|2|24 +1.3.6.1.2.1.31.1.2.1.1.24.8|2|24 +1.3.6.1.2.1.31.1.2.1.1.28.22|2|28 +1.3.6.1.2.1.31.1.2.1.2.0.15|2|15 +1.3.6.1.2.1.31.1.2.1.2.6.12|2|12 +1.3.6.1.2.1.31.1.2.1.2.11.12|2|12 +1.3.6.1.2.1.31.1.2.1.2.15.3|2|3 +1.3.6.1.2.1.31.1.2.1.2.15.30|2|30 +1.3.6.1.2.1.31.1.2.1.2.20.25|2|25 +1.3.6.1.2.1.31.1.2.1.2.20.30|2|30 +1.3.6.1.2.1.31.1.2.1.2.24.3|2|3 +1.3.6.1.2.1.31.1.2.1.2.24.8|2|8 +1.3.6.1.2.1.31.1.2.1.2.28.22|2|22 +1.3.6.1.2.1.31.1.2.1.3.0.15|2|2 +1.3.6.1.2.1.31.1.2.1.3.6.12|2|5 +1.3.6.1.2.1.31.1.2.1.3.11.12|2|0 +1.3.6.1.2.1.31.1.2.1.3.15.3|2|4 +1.3.6.1.2.1.31.1.2.1.3.15.30|2|2 +1.3.6.1.2.1.31.1.2.1.3.20.25|2|0 +1.3.6.1.2.1.31.1.2.1.3.20.30|2|3 +1.3.6.1.2.1.31.1.2.1.3.24.3|2|3 +1.3.6.1.2.1.31.1.2.1.3.24.8|2|4 +1.3.6.1.2.1.31.1.2.1.3.28.22|2|5 +1.3.6.1.2.1.31.1.3.1.1.2|2|22 +1.3.6.1.2.1.31.1.3.1.1.5|2|5 +1.3.6.1.2.1.31.1.3.1.1.7|2|11 +1.3.6.1.2.1.31.1.3.1.1.8|2|28 +1.3.6.1.2.1.31.1.3.1.1.14|2|17 +1.3.6.1.2.1.31.1.3.1.1.20|2|2 +1.3.6.1.2.1.31.1.3.1.1.25|2|25 +1.3.6.1.2.1.31.1.3.1.2.2|2|1 +1.3.6.1.2.1.31.1.3.1.2.5|2|2 +1.3.6.1.2.1.31.1.3.1.2.7|2|1 +1.3.6.1.2.1.31.1.3.1.2.8|2|1 +1.3.6.1.2.1.31.1.3.1.2.14|2|2 +1.3.6.1.2.1.31.1.3.1.2.20|2|2 +1.3.6.1.2.1.31.1.3.1.2.25|2|2 +1.3.6.1.2.1.31.1.3.1.3.2|6|1.3.6.1.3.3.221.250.215.141.41.14.244.67 +1.3.6.1.2.1.31.1.3.1.3.5|6|1.3.6.1.3 +1.3.6.1.2.1.31.1.3.1.3.7|6|1.3.6.1.3.82.193.48.87.252.209.114.44.241 +1.3.6.1.2.1.31.1.3.1.3.8|6|1.3.6.1.3.242.187.192.66.211.66.188.244.254 +1.3.6.1.2.1.31.1.3.1.3.14|6|1.3.6.1.3.151.19.40.38.149.190.56.39 +1.3.6.1.2.1.31.1.3.1.3.20|6|1.3.6.1.3.82.216.166.94.141.155.222.104.111 +1.3.6.1.2.1.31.1.3.1.3.25|6|1.3.6.1.3.13.142.130.103 +1.3.6.1.2.1.31.1.3.1.4.2|2|6 +1.3.6.1.2.1.31.1.3.1.4.5|2|2 +1.3.6.1.2.1.31.1.3.1.4.7|2|7 +1.3.6.1.2.1.31.1.3.1.4.8|2|5 +1.3.6.1.2.1.31.1.3.1.4.14|2|4 +1.3.6.1.2.1.31.1.3.1.4.20|2|6 +1.3.6.1.2.1.31.1.3.1.4.25|2|7 +1.3.6.1.2.1.31.1.3.1.5.2|6|1.3.6.1.3.202.124.40.237.7 +1.3.6.1.2.1.31.1.3.1.5.5|6|1.3.6.1.3.245.108.45.208.100 +1.3.6.1.2.1.31.1.3.1.5.7|6|1.3.6.1.3.106.175.178.15.71.109.161.186.237 +1.3.6.1.2.1.31.1.3.1.5.8|6|1.3.6.1.3.97 +1.3.6.1.2.1.31.1.3.1.5.14|6|1.3.6.1.3.127.247 +1.3.6.1.2.1.31.1.3.1.5.20|6|1.3.6.1.3.200.248.87.51.234.190 +1.3.6.1.2.1.31.1.3.1.5.25|6|1.3.6.1.3.197.5.93.155 +1.3.6.1.2.1.31.1.3.1.6.2|4x|4a6164656420717561696e746c792064726976696e67 +1.3.6.1.2.1.31.1.3.1.6.5|4x|6f78656e207468656972207a6f6d6269657320627574 +1.3.6.1.2.1.31.1.3.1.6.7|4x|6275742062757420666f727761726420666f72776172642064726976696e67 +1.3.6.1.2.1.31.1.3.1.6.8|4x|6f78656e2064726976696e6720717561696e746c79206b657074206b657074207a6f6d6269657320717561696e746c79 +1.3.6.1.2.1.31.1.3.1.6.14|4x|717561696e746c79207468656972206b657074204a61646564 +1.3.6.1.2.1.31.1.3.1.6.20|4x|666f72776172642064726976696e67206b657074207468656972206b657074206b65707420616374656420627574207a6f6d62696573 +1.3.6.1.2.1.31.1.3.1.6.25|4x|666f727761726420746865697220627574206b65707420666f7277617264206f78656e204a61646564206163746564 +1.3.6.1.2.1.31.1.4.1.1.1.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.2.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.3.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.7.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.14.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.15.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.23.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.27.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.29.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.1.31.1.18|4x|12 +1.3.6.1.2.1.31.1.4.1.2.1.1.18|2|3 +1.3.6.1.2.1.31.1.4.1.2.2.1.18|2|6 +1.3.6.1.2.1.31.1.4.1.2.3.1.18|2|0 +1.3.6.1.2.1.31.1.4.1.2.7.1.18|2|1 +1.3.6.1.2.1.31.1.4.1.2.14.1.18|2|1 +1.3.6.1.2.1.31.1.4.1.2.15.1.18|2|1 +1.3.6.1.2.1.31.1.4.1.2.23.1.18|2|0 +1.3.6.1.2.1.31.1.4.1.2.27.1.18|2|2 +1.3.6.1.2.1.31.1.4.1.2.29.1.18|2|4 +1.3.6.1.2.1.31.1.4.1.2.31.1.18|2|4 +1.3.6.1.2.1.31.1.4.1.3.1.1.18|2|2 +1.3.6.1.2.1.31.1.4.1.3.2.1.18|2|3 +1.3.6.1.2.1.31.1.4.1.3.3.1.18|2|3 +1.3.6.1.2.1.31.1.4.1.3.7.1.18|2|1 +1.3.6.1.2.1.31.1.4.1.3.14.1.18|2|2 +1.3.6.1.2.1.31.1.4.1.3.15.1.18|2|2 +1.3.6.1.2.1.31.1.4.1.3.23.1.18|2|3 +1.3.6.1.2.1.31.1.4.1.3.27.1.18|2|1 +1.3.6.1.2.1.31.1.4.1.3.29.1.18|2|2 +1.3.6.1.2.1.31.1.4.1.3.31.1.18|2|2 +1.3.6.1.2.1.31.1.5.0|67|1551611145 +1.3.6.1.2.1.31.1.6.0|67|2088517883 +1.3.6.1.4.1.232.1.2.2.1.1.1.0|2|0 +1.3.6.1.4.1.232.1.2.2.1.1.1.4|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.1.6|2|6 +1.3.6.1.4.1.232.1.2.2.1.1.1.8|2|8 +1.3.6.1.4.1.232.1.2.2.1.1.1.13|2|13 +1.3.6.1.4.1.232.1.2.2.1.1.1.15|2|15 +1.3.6.1.4.1.232.1.2.2.1.1.1.26|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.1.27|2|27 +1.3.6.1.4.1.232.1.2.2.1.1.2.0|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.2.4|2|28 +1.3.6.1.4.1.232.1.2.2.1.1.2.6|2|28 +1.3.6.1.4.1.232.1.2.2.1.1.2.8|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.2.13|2|6 +1.3.6.1.4.1.232.1.2.2.1.1.2.15|2|5 +1.3.6.1.4.1.232.1.2.2.1.1.2.26|2|7 +1.3.6.1.4.1.232.1.2.2.1.1.2.27|2|0 +1.3.6.1.4.1.232.1.2.2.1.1.3.0|4x|6b657074206f78656e207a6f6d62696573206b657074207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.3.4|4x|6163746564207a6f6d62696573206b657074206f78656e20717561696e746c792064726976696e6720616374656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.3.6|4x|666f7277617264206f78656e207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.3.8|4x|6b657074207468656972204a61646564206b657074206163746564206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.3.13|4|but +1.3.6.1.4.1.232.1.2.2.1.1.3.15|4x|4a61646564207a6f6d62696573206f78656e2062757420666f7277617264 +1.3.6.1.4.1.232.1.2.2.1.1.3.26|4x|666f7277617264204a61646564206b65707420666f72776172642064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.3.27|4x|746865697220627574206163746564206b657074206f78656e2061637465642064726976696e67206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.4.0|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.4.4|2|27 +1.3.6.1.4.1.232.1.2.2.1.1.4.6|2|30 +1.3.6.1.4.1.232.1.2.2.1.1.4.8|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.4.13|2|0 +1.3.6.1.4.1.232.1.2.2.1.1.4.15|2|13 +1.3.6.1.4.1.232.1.2.2.1.1.4.26|2|10 +1.3.6.1.4.1.232.1.2.2.1.1.4.27|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.5.0|2|22 +1.3.6.1.4.1.232.1.2.2.1.1.5.4|2|29 +1.3.6.1.4.1.232.1.2.2.1.1.5.6|2|31 +1.3.6.1.4.1.232.1.2.2.1.1.5.8|2|13 +1.3.6.1.4.1.232.1.2.2.1.1.5.13|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.5.15|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.5.26|2|21 +1.3.6.1.4.1.232.1.2.2.1.1.5.27|2|31 +1.3.6.1.4.1.232.1.2.2.1.1.6.0|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.6.4|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.6.6|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.6.8|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.6.13|2|5 +1.3.6.1.4.1.232.1.2.2.1.1.6.15|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.6.26|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.6.27|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.7.0|2|18 +1.3.6.1.4.1.232.1.2.2.1.1.7.4|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.7.6|2|24 +1.3.6.1.4.1.232.1.2.2.1.1.7.8|2|28 +1.3.6.1.4.1.232.1.2.2.1.1.7.13|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.7.15|2|23 +1.3.6.1.4.1.232.1.2.2.1.1.7.26|2|30 +1.3.6.1.4.1.232.1.2.2.1.1.7.27|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.8.0|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.8.4|2|7 +1.3.6.1.4.1.232.1.2.2.1.1.8.6|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.8.8|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.8.13|2|5 +1.3.6.1.4.1.232.1.2.2.1.1.8.15|2|10 +1.3.6.1.4.1.232.1.2.2.1.1.8.26|2|8 +1.3.6.1.4.1.232.1.2.2.1.1.8.27|2|10 +1.3.6.1.4.1.232.1.2.2.1.1.9.0|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.9.4|2|7 +1.3.6.1.4.1.232.1.2.2.1.1.9.6|2|5 +1.3.6.1.4.1.232.1.2.2.1.1.9.8|2|10 +1.3.6.1.4.1.232.1.2.2.1.1.9.13|2|7 +1.3.6.1.4.1.232.1.2.2.1.1.9.15|2|18 +1.3.6.1.4.1.232.1.2.2.1.1.9.26|2|12 +1.3.6.1.4.1.232.1.2.2.1.1.9.27|2|25 +1.3.6.1.4.1.232.1.2.2.1.1.10.0|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.10.4|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.10.6|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.10.8|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.10.13|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.10.15|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.10.26|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.10.27|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.11.0|4|their +1.3.6.1.4.1.232.1.2.2.1.1.11.4|4x|666f727761726420627574206f78656e204a61646564206b657074206f78656e2064726976696e67206163746564207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.11.6|4x|6b657074206f78656e20666f727761726420717561696e746c79 +1.3.6.1.4.1.232.1.2.2.1.1.11.8|4x|666f727761726420616374656420717561696e746c7920746865697220627574207a6f6d62696573207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.11.13|4x|6275742062757420666f72776172642062757420717561696e746c79207468656972207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.11.15|4x|627574206b6570742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.11.26|4|oxen +1.3.6.1.4.1.232.1.2.2.1.1.11.27|4x|6b657074206275742064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.12.0|2|5 +1.3.6.1.4.1.232.1.2.2.1.1.12.4|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.12.6|2|6 +1.3.6.1.4.1.232.1.2.2.1.1.12.8|2|14 +1.3.6.1.4.1.232.1.2.2.1.1.12.13|2|14 +1.3.6.1.4.1.232.1.2.2.1.1.12.15|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.12.26|2|12 +1.3.6.1.4.1.232.1.2.2.1.1.12.27|2|9 +1.3.6.1.4.1.232.1.2.2.1.1.13.0|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.13.4|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.13.6|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.13.8|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.13.13|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.13.15|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.13.26|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.13.27|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.14.0|4x|6f78656e206b657074206b65707420666f7277617264207468656972204a6164656420717561696e746c7920616374656420627574 +1.3.6.1.4.1.232.1.2.2.1.1.14.4|4x|64726976696e672064726976696e67204a6164656420666f7277617264204a61646564207a6f6d626965732064726976696e67207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.14.6|4x|627574207a6f6d6269657320666f7277617264206f78656e204a6164656420666f7277617264206f78656e +1.3.6.1.4.1.232.1.2.2.1.1.14.8|4x|4a6164656420666f7277617264206f78656e20627574206b6570742064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.14.13|4x|746865697220627574206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.14.15|4x|717561696e746c7920746865697220717561696e746c79204a61646564 +1.3.6.1.4.1.232.1.2.2.1.1.14.26|4x|6b657074207a6f6d62696573207a6f6d62696573206275742064726976696e672061637465642062757420627574206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.14.27|4x|717561696e746c79204a61646564207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.15.0|2|0 +1.3.6.1.4.1.232.1.2.2.1.1.15.4|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.15.6|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.15.8|2|27 +1.3.6.1.4.1.232.1.2.2.1.1.15.13|2|21 +1.3.6.1.4.1.232.1.2.2.1.1.15.15|2|17 +1.3.6.1.4.1.232.1.2.2.1.1.15.26|2|28 +1.3.6.1.4.1.232.1.2.2.1.1.15.27|2|17 +1.3.6.1.4.1.232.1.2.2.1.1.16.0|4x|666f727761726420666f7277617264204a61646564206b6570742064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.16.4|4x|7468656972204a61646564206b657074207468656972207a6f6d626965732064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.16.6|4x|666f7277617264207a6f6d62696573206163746564204a6164656420666f7277617264 +1.3.6.1.4.1.232.1.2.2.1.1.16.8|4x|627574206f78656e206163746564204a616465642064726976696e6720666f72776172642061637465642064726976696e67207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.16.13|4x|6b657074207a6f6d62696573207a6f6d626965732064726976696e672064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.16.15|4x|7468656972207468656972204a61646564 +1.3.6.1.4.1.232.1.2.2.1.1.16.26|4x|746865697220666f7277617264206f78656e20717561696e746c79 +1.3.6.1.4.1.232.1.2.2.1.1.16.27|4x|666f727761726420717561696e746c79206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.17.0|4x|6b65707420717561696e746c79 +1.3.6.1.4.1.232.1.2.2.1.1.17.4|4x|627574207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.17.6|4x|64726976696e67204a61646564206b65707420666f727761726420717561696e746c79206f78656e207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.17.8|4x|64726976696e6720616374656420627574 +1.3.6.1.4.1.232.1.2.2.1.1.17.13|4x|7a6f6d62696573206b65707420717561696e746c7920717561696e746c79206163746564204a61646564206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.17.15|4x|717561696e746c79204a6164656420666f7277617264 +1.3.6.1.4.1.232.1.2.2.1.1.17.26|4x|6f78656e20746865697220627574206275742074686569722064726976696e67206b657074207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.17.27|4x|7468656972206b6570742064726976696e67204a61646564207a6f6d6269657320627574 +1.3.6.1.4.1.232.1.2.2.1.1.18.0|4x|7a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.18.4|4x|746865697220746865697220616374656420627574207a6f6d62696573207a6f6d6269657320666f727761726420717561696e746c79 +1.3.6.1.4.1.232.1.2.2.1.1.18.6|4x|4a61646564204a6164656420717561696e746c79206f78656e207468656972206163746564207a6f6d6269657320666f7277617264207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.18.8|4x|6f78656e206b65707420666f7277617264206b6570742064726976696e67206163746564206f78656e206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.18.13|4x|4a61646564204a61646564207468656972207468656972206b6570742064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.18.15|4|forward +1.3.6.1.4.1.232.1.2.2.1.1.18.26|4x|627574206163746564207468656972207a6f6d62696573207468656972206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.18.27|4x|7468656972206f78656e20616374656420627574204a616465642064726976696e67207a6f6d6269657320627574 +1.3.6.1.4.1.232.1.2.2.1.1.19.0|4|quaintly +1.3.6.1.4.1.232.1.2.2.1.1.19.4|4x|627574204a61646564 +1.3.6.1.4.1.232.1.2.2.1.1.19.6|4x|7a6f6d626965732074686569722064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.19.8|4x|717561696e746c792064726976696e67206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.19.13|4x|4a616465642064726976696e6720627574206f78656e206b6570742062757420627574 +1.3.6.1.4.1.232.1.2.2.1.1.19.15|4x|6f78656e207a6f6d62696573206163746564207a6f6d62696573204a6164656420627574 +1.3.6.1.4.1.232.1.2.2.1.1.19.26|4x|4a6164656420666f727761726420717561696e746c7920666f7277617264 +1.3.6.1.4.1.232.1.2.2.1.1.19.27|4x|64726976696e672064726976696e672062757420627574206f78656e207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.20.0|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.20.4|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.20.6|2|21 +1.3.6.1.4.1.232.1.2.2.1.1.20.8|2|5 +1.3.6.1.4.1.232.1.2.2.1.1.20.13|2|8 +1.3.6.1.4.1.232.1.2.2.1.1.20.15|2|18 +1.3.6.1.4.1.232.1.2.2.1.1.20.26|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.20.27|2|8 +1.3.6.1.4.1.232.1.2.2.1.1.21.0|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.21.4|2|22 +1.3.6.1.4.1.232.1.2.2.1.1.21.6|2|7 +1.3.6.1.4.1.232.1.2.2.1.1.21.8|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.21.13|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.21.15|2|17 +1.3.6.1.4.1.232.1.2.2.1.1.21.26|2|16 +1.3.6.1.4.1.232.1.2.2.1.1.21.27|2|30 +1.3.6.1.4.1.232.1.2.2.1.1.22.0|2|12 +1.3.6.1.4.1.232.1.2.2.1.1.22.4|2|28 +1.3.6.1.4.1.232.1.2.2.1.1.22.6|2|24 +1.3.6.1.4.1.232.1.2.2.1.1.22.8|2|9 +1.3.6.1.4.1.232.1.2.2.1.1.22.13|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.22.15|2|25 +1.3.6.1.4.1.232.1.2.2.1.1.22.26|2|25 +1.3.6.1.4.1.232.1.2.2.1.1.22.27|2|18 +1.3.6.1.4.1.232.1.2.2.1.1.23.0|4x|6b657074206f78656e207a6f6d62696573206b657074207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.23.4|4x|717561696e746c79206b6570742064726976696e67206163746564206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.23.6|4x|6163746564207468656972206b65707420666f7277617264206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.23.8|4x|7a6f6d62696573206b657074206f78656e206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.23.13|4x|4a61646564207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.23.15|4x|64726976696e6720717561696e746c79206f78656e206b657074207468656972206f78656e206f78656e204a61646564 +1.3.6.1.4.1.232.1.2.2.1.1.23.26|4x|6b657074206b6570742064726976696e6720627574207a6f6d6269657320627574 +1.3.6.1.4.1.232.1.2.2.1.1.23.27|4x|6f78656e207a6f6d62696573207a6f6d62696573206163746564 +1.3.6.1.4.1.232.1.2.2.1.1.24.0|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.24.4|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.24.6|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.24.8|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.24.13|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.24.15|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.24.26|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.24.27|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.25.0|2|10 +1.3.6.1.4.1.232.1.2.2.1.1.25.4|2|15 +1.3.6.1.4.1.232.1.2.2.1.1.25.6|2|24 +1.3.6.1.4.1.232.1.2.2.1.1.25.8|2|28 +1.3.6.1.4.1.232.1.2.2.1.1.25.13|2|31 +1.3.6.1.4.1.232.1.2.2.1.1.25.15|2|24 +1.3.6.1.4.1.232.1.2.2.1.1.25.26|2|25 +1.3.6.1.4.1.232.1.2.2.1.1.25.27|2|21 +1.3.6.1.4.1.232.1.2.2.1.1.26.0|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.26.4|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.26.6|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.26.8|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.26.13|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.26.15|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.26.26|2|4 +1.3.6.1.4.1.232.1.2.2.1.1.26.27|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.27.0|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.27.4|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.27.6|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.27.8|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.27.13|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.27.15|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.27.26|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.27.27|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.28.0|4x|6b657074206163746564204a61646564207a6f6d62696573 +1.3.6.1.4.1.232.1.2.2.1.1.28.4|4x|7468656972207468656972 +1.3.6.1.4.1.232.1.2.2.1.1.28.6|4x|4a61646564207a6f6d6269657320717561696e746c7920666f7277617264206b657074207a6f6d62696573204a616465642064726976696e67 +1.3.6.1.4.1.232.1.2.2.1.1.28.8|4|forward +1.3.6.1.4.1.232.1.2.2.1.1.28.13|4x|4a61646564207a6f6d62696573207a6f6d62696573204a6164656420616374656420666f7277617264206b6570742064726976696e67204a61646564 +1.3.6.1.4.1.232.1.2.2.1.1.28.15|4x|666f7277617264207a6f6d62696573206f78656e20666f7277617264 +1.3.6.1.4.1.232.1.2.2.1.1.28.26|4x|627574206275742062757420717561696e746c79207a6f6d62696573207468656972206b657074 +1.3.6.1.4.1.232.1.2.2.1.1.28.27|4x|7468656972206f78656e20666f72776172642064726976696e6720717561696e746c79 +1.3.6.1.4.1.232.1.2.2.1.1.29.0|2|31 +1.3.6.1.4.1.232.1.2.2.1.1.29.4|2|30 +1.3.6.1.4.1.232.1.2.2.1.1.29.6|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.29.8|2|1 +1.3.6.1.4.1.232.1.2.2.1.1.29.13|2|13 +1.3.6.1.4.1.232.1.2.2.1.1.29.15|2|17 +1.3.6.1.4.1.232.1.2.2.1.1.29.26|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.29.27|2|15 +1.3.6.1.4.1.232.1.2.2.1.1.30.0|2|26 +1.3.6.1.4.1.232.1.2.2.1.1.30.4|2|9 +1.3.6.1.4.1.232.1.2.2.1.1.30.6|2|16 +1.3.6.1.4.1.232.1.2.2.1.1.30.8|2|16 +1.3.6.1.4.1.232.1.2.2.1.1.30.13|2|19 +1.3.6.1.4.1.232.1.2.2.1.1.30.15|2|18 +1.3.6.1.4.1.232.1.2.2.1.1.30.26|2|2 +1.3.6.1.4.1.232.1.2.2.1.1.30.27|2|14 +1.3.6.1.4.1.232.1.2.2.1.1.31.0|2|10 +1.3.6.1.4.1.232.1.2.2.1.1.31.4|2|11 +1.3.6.1.4.1.232.1.2.2.1.1.31.6|2|22 +1.3.6.1.4.1.232.1.2.2.1.1.31.8|2|7 +1.3.6.1.4.1.232.1.2.2.1.1.31.13|2|25 +1.3.6.1.4.1.232.1.2.2.1.1.31.15|2|3 +1.3.6.1.4.1.232.1.2.2.1.1.31.26|2|18 +1.3.6.1.4.1.232.1.2.2.1.1.31.27|2|27 +1.3.6.1.4.1.232.1.2.6.1|4|A04-08/12/2019 +1.3.6.1.4.1.232.2.2.2.1|4|dLPEdPBE5yKtjW9xx3 +1.3.6.1.4.1.232.2.2.4.2|4|ProLiant BL35p G1 +1.3.6.1.4.1.232.2.2.4.5.1.1.6.16|2|6 +1.3.6.1.4.1.232.2.2.4.5.1.1.7.17|2|7 +1.3.6.1.4.1.232.2.2.4.5.1.1.7.30|2|7 +1.3.6.1.4.1.232.2.2.4.5.1.1.8.20|2|8 +1.3.6.1.4.1.232.2.2.4.5.1.1.10.4|2|10 +1.3.6.1.4.1.232.2.2.4.5.1.1.15.27|2|15 +1.3.6.1.4.1.232.2.2.4.5.1.1.20.14|2|20 +1.3.6.1.4.1.232.2.2.4.5.1.1.21.14|2|21 +1.3.6.1.4.1.232.2.2.4.5.1.1.23.0|2|23 +1.3.6.1.4.1.232.2.2.4.5.1.1.28.20|2|28 +1.3.6.1.4.1.232.2.2.4.5.1.2.6.16|2|16 +1.3.6.1.4.1.232.2.2.4.5.1.2.7.17|2|17 +1.3.6.1.4.1.232.2.2.4.5.1.2.7.30|2|30 +1.3.6.1.4.1.232.2.2.4.5.1.2.8.20|2|20 +1.3.6.1.4.1.232.2.2.4.5.1.2.10.4|2|4 +1.3.6.1.4.1.232.2.2.4.5.1.2.15.27|2|27 +1.3.6.1.4.1.232.2.2.4.5.1.2.20.14|2|14 +1.3.6.1.4.1.232.2.2.4.5.1.2.21.14|2|14 +1.3.6.1.4.1.232.2.2.4.5.1.2.23.0|2|0 +1.3.6.1.4.1.232.2.2.4.5.1.2.28.20|2|20 +1.3.6.1.4.1.232.2.2.4.5.1.3.6.16|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.3.7.17|2|30 +1.3.6.1.4.1.232.2.2.4.5.1.3.7.30|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.3.8.20|2|25 +1.3.6.1.4.1.232.2.2.4.5.1.3.10.4|2|12 +1.3.6.1.4.1.232.2.2.4.5.1.3.15.27|2|13 +1.3.6.1.4.1.232.2.2.4.5.1.3.20.14|2|20 +1.3.6.1.4.1.232.2.2.4.5.1.3.21.14|2|0 +1.3.6.1.4.1.232.2.2.4.5.1.3.23.0|2|27 +1.3.6.1.4.1.232.2.2.4.5.1.3.28.20|2|23 +1.3.6.1.4.1.232.2.2.4.5.1.4.6.16|2|9 +1.3.6.1.4.1.232.2.2.4.5.1.4.7.17|2|9 +1.3.6.1.4.1.232.2.2.4.5.1.4.7.30|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.4.8.20|2|11 +1.3.6.1.4.1.232.2.2.4.5.1.4.10.4|2|7 +1.3.6.1.4.1.232.2.2.4.5.1.4.15.27|2|4 +1.3.6.1.4.1.232.2.2.4.5.1.4.20.14|2|10 +1.3.6.1.4.1.232.2.2.4.5.1.4.21.14|2|12 +1.3.6.1.4.1.232.2.2.4.5.1.4.23.0|2|6 +1.3.6.1.4.1.232.2.2.4.5.1.4.28.20|2|4 +1.3.6.1.4.1.232.2.2.4.5.1.5.6.16|2|15 +1.3.6.1.4.1.232.2.2.4.5.1.5.7.17|2|10 +1.3.6.1.4.1.232.2.2.4.5.1.5.7.30|2|2 +1.3.6.1.4.1.232.2.2.4.5.1.5.8.20|2|19 +1.3.6.1.4.1.232.2.2.4.5.1.5.10.4|2|31 +1.3.6.1.4.1.232.2.2.4.5.1.5.15.27|2|5 +1.3.6.1.4.1.232.2.2.4.5.1.5.20.14|2|6 +1.3.6.1.4.1.232.2.2.4.5.1.5.21.14|2|7 +1.3.6.1.4.1.232.2.2.4.5.1.5.23.0|2|8 +1.3.6.1.4.1.232.2.2.4.5.1.5.28.20|2|12 +1.3.6.1.4.1.232.2.2.4.5.1.6.6.16|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.6.7.17|2|5 +1.3.6.1.4.1.232.2.2.4.5.1.6.7.30|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.6.8.20|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.6.10.4|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.6.15.27|2|6 +1.3.6.1.4.1.232.2.2.4.5.1.6.20.14|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.6.21.14|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.6.23.0|2|4 +1.3.6.1.4.1.232.2.2.4.5.1.6.28.20|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.7.6.16|4x|64726976696e672064726976696e67204a616465642062757420616374656420627574207a6f6d6269657320666f7277617264206f78656e +1.3.6.1.4.1.232.2.2.4.5.1.7.7.17|4x|6f78656e20717561696e746c79204a6164656420746865697220666f7277617264 +1.3.6.1.4.1.232.2.2.4.5.1.7.7.30|4x|62757420717561696e746c79207a6f6d6269657320666f727761726420746865697220627574207a6f6d6269657320627574 +1.3.6.1.4.1.232.2.2.4.5.1.7.8.20|4x|64726976696e6720666f727761726420616374656420666f727761726420717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.7.10.4|4x|7a6f6d626965732064726976696e67206163746564204a616465642062757420627574 +1.3.6.1.4.1.232.2.2.4.5.1.7.15.27|4x|64726976696e6720717561696e746c79207a6f6d62696573206f78656e +1.3.6.1.4.1.232.2.2.4.5.1.7.20.14|4x|4a61646564206b657074206163746564207468656972 +1.3.6.1.4.1.232.2.2.4.5.1.7.21.14|4x|717561696e746c7920666f727761726420717561696e746c79206f78656e20717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.7.23.0|4x|627574204a61646564206b6570742064726976696e67 +1.3.6.1.4.1.232.2.2.4.5.1.7.28.20|4x|666f727761726420717561696e746c7920666f7277617264207a6f6d62696573206163746564 +1.3.6.1.4.1.232.2.2.4.5.1.8.6.16|4|Jaded +1.3.6.1.4.1.232.2.2.4.5.1.8.7.17|4x|616374656420717561696e746c79207468656972206163746564206b657074 +1.3.6.1.4.1.232.2.2.4.5.1.8.7.30|4x|717561696e746c79207468656972 +1.3.6.1.4.1.232.2.2.4.5.1.8.8.20|4x|64726976696e67206b65707420717561696e746c7920717561696e746c79204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.8.10.4|4x|7a6f6d62696573207468656972206f78656e204a616465642064726976696e67206b65707420627574206b657074206163746564 +1.3.6.1.4.1.232.2.2.4.5.1.8.15.27|4x|64726976696e67206163746564 +1.3.6.1.4.1.232.2.2.4.5.1.8.20.14|4x|666f7277617264206f78656e2064726976696e67206f78656e20666f7277617264204a6164656420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.232.2.2.4.5.1.8.21.14|4x|627574206f78656e2064726976696e67204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.8.23.0|4x|717561696e746c7920627574206b65707420746865697220746865697220666f7277617264206b657074 +1.3.6.1.4.1.232.2.2.4.5.1.8.28.20|4x|746865697220666f727761726420666f727761726420717561696e746c792064726976696e67206f78656e2064726976696e67 +1.3.6.1.4.1.232.2.2.4.5.1.9.6.16|4|zombies +1.3.6.1.4.1.232.2.2.4.5.1.9.7.17|4|driving +1.3.6.1.4.1.232.2.2.4.5.1.9.7.30|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.9.8.20|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.9.10.4|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.9.15.27|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.9.20.14|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.9.21.14|4|zombies +1.3.6.1.4.1.232.2.2.4.5.1.9.23.0|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.9.28.20|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.10.6.16|4x|6b6570742064726976696e67206b657074207468656972204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.10.7.17|4x|6f78656e20616374656420717561696e746c7920717561696e746c79206275742061637465642064726976696e67 +1.3.6.1.4.1.232.2.2.4.5.1.10.7.30|4x|7a6f6d62696573207468656972206b657074 +1.3.6.1.4.1.232.2.2.4.5.1.10.8.20|4x|7a6f6d62696573204a61646564207a6f6d62696573 +1.3.6.1.4.1.232.2.2.4.5.1.10.10.4|4x|64726976696e6720627574207468656972207a6f6d6269657320666f7277617264206b65707420666f7277617264 +1.3.6.1.4.1.232.2.2.4.5.1.10.15.27|4|Jaded +1.3.6.1.4.1.232.2.2.4.5.1.10.20.14|4x|62757420627574204a61646564206163746564 +1.3.6.1.4.1.232.2.2.4.5.1.10.21.14|4x|4a6164656420627574207468656972204a61646564206f78656e204a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.10.23.0|4x|6f78656e20717561696e746c79204a6164656420746865697220666f7277617264 +1.3.6.1.4.1.232.2.2.4.5.1.10.28.20|4x|666f7277617264206f78656e204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.232.2.2.4.5.1.11.6.16|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.11.7.17|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.11.7.30|2|2 +1.3.6.1.4.1.232.2.2.4.5.1.11.8.20|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.11.10.4|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.11.15.27|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.11.20.14|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.11.21.14|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.11.23.0|2|2 +1.3.6.1.4.1.232.2.2.4.5.1.11.28.20|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.12.6.16|4|but +1.3.6.1.4.1.232.2.2.4.5.1.12.7.17|4x|666f727761726420717561696e746c7920666f7277617264204a61646564206b6570742062757420666f7277617264204a6164656420717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.12.7.30|4|forward +1.3.6.1.4.1.232.2.2.4.5.1.12.8.20|4x|6f78656e204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.12.10.4|4x|627574204a6164656420666f72776172642061637465642064726976696e67 +1.3.6.1.4.1.232.2.2.4.5.1.12.15.27|4x|717561696e746c79204a6164656420616374656420717561696e746c79206f78656e20717561696e746c792064726976696e67207468656972206b657074 +1.3.6.1.4.1.232.2.2.4.5.1.12.20.14|4x|666f7277617264207a6f6d62696573204a6164656420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.232.2.2.4.5.1.12.21.14|4x|6b657074206b657074206f78656e207468656972206163746564206b657074206b65707420717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.12.23.0|4x|666f7277617264207a6f6d626965732064726976696e672074686569722064726976696e67204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.12.28.20|4|Jaded +1.3.6.1.4.1.232.2.2.4.5.1.13.6.16|2|24 +1.3.6.1.4.1.232.2.2.4.5.1.13.7.17|2|31 +1.3.6.1.4.1.232.2.2.4.5.1.13.7.30|2|10 +1.3.6.1.4.1.232.2.2.4.5.1.13.8.20|2|9 +1.3.6.1.4.1.232.2.2.4.5.1.13.10.4|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.13.15.27|2|23 +1.3.6.1.4.1.232.2.2.4.5.1.13.20.14|2|27 +1.3.6.1.4.1.232.2.2.4.5.1.13.21.14|2|8 +1.3.6.1.4.1.232.2.2.4.5.1.13.23.0|2|2 +1.3.6.1.4.1.232.2.2.4.5.1.13.28.20|2|20 +1.3.6.1.4.1.232.2.2.4.5.1.14.6.16|2|8 +1.3.6.1.4.1.232.2.2.4.5.1.14.7.17|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.14.7.30|2|13 +1.3.6.1.4.1.232.2.2.4.5.1.14.8.20|2|4 +1.3.6.1.4.1.232.2.2.4.5.1.14.10.4|2|4 +1.3.6.1.4.1.232.2.2.4.5.1.14.15.27|2|0 +1.3.6.1.4.1.232.2.2.4.5.1.14.20.14|2|11 +1.3.6.1.4.1.232.2.2.4.5.1.14.21.14|2|15 +1.3.6.1.4.1.232.2.2.4.5.1.14.23.0|2|11 +1.3.6.1.4.1.232.2.2.4.5.1.14.28.20|2|6 +1.3.6.1.4.1.232.2.2.4.5.1.15.6.16|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.15.7.17|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.15.7.30|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.15.8.20|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.15.10.4|2|2 +1.3.6.1.4.1.232.2.2.4.5.1.15.15.27|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.15.20.14|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.15.21.14|2|2 +1.3.6.1.4.1.232.2.2.4.5.1.15.23.0|2|3 +1.3.6.1.4.1.232.2.2.4.5.1.15.28.20|2|1 +1.3.6.1.4.1.232.2.2.4.5.1.16.6.16|4x|6f78656e20717561696e746c792062757420717561696e746c79206163746564 +1.3.6.1.4.1.232.2.2.4.5.1.16.7.17|4x|717561696e746c7920717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.16.7.30|4x|4a616465642064726976696e6720717561696e746c792064726976696e6720717561696e746c7920717561696e746c7920627574 +1.3.6.1.4.1.232.2.2.4.5.1.16.8.20|4x|717561696e746c7920666f72776172642062757420627574 +1.3.6.1.4.1.232.2.2.4.5.1.16.10.4|4x|7a6f6d62696573206b65707420666f7277617264204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.16.15.27|4x|6b65707420616374656420627574207468656972207a6f6d62696573204a6164656420616374656420666f727761726420666f7277617264 +1.3.6.1.4.1.232.2.2.4.5.1.16.20.14|4x|627574206f78656e20717561696e746c79206b657074206b65707420666f7277617264206f78656e20717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.16.21.14|4x|627574207468656972206b657074207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.232.2.2.4.5.1.16.23.0|4x|6b65707420717561696e746c7920666f7277617264207a6f6d6269657320717561696e746c792064726976696e67206f78656e206f78656e20717561696e746c79 +1.3.6.1.4.1.232.2.2.4.5.1.16.28.20|4x|7a6f6d62696573206b65707420627574 +1.3.6.1.4.1.232.2.2.4.5.1.17.6.16|4x|6f78656e2062757420717561696e746c79206b657074 +1.3.6.1.4.1.232.2.2.4.5.1.17.7.17|4x|616374656420616374656420666f7277617264206163746564206b65707420666f7277617264207a6f6d62696573 +1.3.6.1.4.1.232.2.2.4.5.1.17.7.30|4x|746865697220627574 +1.3.6.1.4.1.232.2.2.4.5.1.17.8.20|4x|62757420627574207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.4.1.232.2.2.4.5.1.17.10.4|4x|4a616465642064726976696e6720666f7277617264206b657074 +1.3.6.1.4.1.232.2.2.4.5.1.17.15.27|4x|6f78656e20746865697220666f7277617264204a61646564207468656972204a61646564 +1.3.6.1.4.1.232.2.2.4.5.1.17.20.14|4|acted +1.3.6.1.4.1.232.2.2.4.5.1.17.21.14|4x|4a61646564206f78656e207a6f6d62696573 +1.3.6.1.4.1.232.2.2.4.5.1.17.23.0|4x|6b657074206163746564206163746564207a6f6d62696573207a6f6d6269657320666f7277617264206f78656e +1.3.6.1.4.1.232.2.2.4.5.1.17.28.20|4x|666f7277617264207a6f6d62696573207a6f6d62696573206f78656e20666f7277617264207a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.232.2.2.4.6.0|2|27 +1.3.6.1.4.1.232.3.2.2.1.1.1.3|2|3 +1.3.6.1.4.1.232.3.2.2.1.1.2.3|2|29 +1.3.6.1.4.1.232.3.2.2.1.1.3.3|4|kept +1.3.6.1.4.1.232.3.2.2.1.1.4.3|2|4 +1.3.6.1.4.1.232.3.2.2.1.1.5.3|2|18 +1.3.6.1.4.1.232.3.2.2.1.1.6.3|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.1.0.2|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.1.0.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.1.8.31|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.1.9.24|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.1.9.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.1.10.17|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.1.11.4|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.1.12.20|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.1.18.22|2|18 +1.3.6.1.4.1.232.3.2.5.1.1.1.23.2|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.2.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.2.0.28|2|28 +1.3.6.1.4.1.232.3.2.5.1.1.2.8.31|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.2.9.24|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.2.9.28|2|28 +1.3.6.1.4.1.232.3.2.5.1.1.2.10.17|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.2.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.2.12.20|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.2.18.22|2|22 +1.3.6.1.4.1.232.3.2.5.1.1.2.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.3.0.2|4|but +1.3.6.1.4.1.232.3.2.5.1.1.3.0.28|4x|64726976696e67207a6f6d6269657320717561696e746c79207a6f6d62696573206b657074206b65707420627574206f78656e204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.3.8.31|4x|6b657074206f78656e20717561696e746c79206f78656e207a6f6d62696573 +1.3.6.1.4.1.232.3.2.5.1.1.3.9.24|4x|627574204a61646564206f78656e206163746564206163746564207468656972206163746564 +1.3.6.1.4.1.232.3.2.5.1.1.3.9.28|4x|717561696e746c79207468656972204a6164656420746865697220717561696e746c79207468656972 +1.3.6.1.4.1.232.3.2.5.1.1.3.10.17|4x|6163746564204a616465642062757420666f7277617264207468656972 +1.3.6.1.4.1.232.3.2.5.1.1.3.11.4|4|zombies +1.3.6.1.4.1.232.3.2.5.1.1.3.12.20|4x|666f7277617264206f78656e2064726976696e672064726976696e67 +1.3.6.1.4.1.232.3.2.5.1.1.3.18.22|4x|64726976696e672064726976696e67 +1.3.6.1.4.1.232.3.2.5.1.1.3.23.2|4|Jaded +1.3.6.1.4.1.232.3.2.5.1.1.4.0.2|4x|6b65707420627574 +1.3.6.1.4.1.232.3.2.5.1.1.4.0.28|4|Jaded +1.3.6.1.4.1.232.3.2.5.1.1.4.8.31|4|their +1.3.6.1.4.1.232.3.2.5.1.1.4.9.24|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.4.9.28|4|forward +1.3.6.1.4.1.232.3.2.5.1.1.4.10.17|4|driving +1.3.6.1.4.1.232.3.2.5.1.1.4.11.4|4|kept +1.3.6.1.4.1.232.3.2.5.1.1.4.12.20|4|Jaded +1.3.6.1.4.1.232.3.2.5.1.1.4.18.22|4|forward +1.3.6.1.4.1.232.3.2.5.1.1.4.23.2|4|forward +1.3.6.1.4.1.232.3.2.5.1.1.5.0.2|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.5.0.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.5.8.31|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.5.9.24|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.5.9.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.5.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.5.11.4|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.5.12.20|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.5.18.22|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.5.23.2|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.6.0.2|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.6.0.28|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.8.31|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.9.24|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.9.28|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.6.10.17|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.6.11.4|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.6.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.6.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.6.23.2|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.7.0.2|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.7.0.28|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.7.8.31|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.7.9.24|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.7.9.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.7.10.17|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.7.11.4|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.7.12.20|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.7.18.22|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.7.23.2|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.8.0.2|65|546389013 +1.3.6.1.4.1.232.3.2.5.1.1.8.0.28|65|2306609150 +1.3.6.1.4.1.232.3.2.5.1.1.8.8.31|65|1183142468 +1.3.6.1.4.1.232.3.2.5.1.1.8.9.24|65|1524544657 +1.3.6.1.4.1.232.3.2.5.1.1.8.9.28|65|1257847199 +1.3.6.1.4.1.232.3.2.5.1.1.8.10.17|65|4186257677 +1.3.6.1.4.1.232.3.2.5.1.1.8.11.4|65|75536387 +1.3.6.1.4.1.232.3.2.5.1.1.8.12.20|65|3025977095 +1.3.6.1.4.1.232.3.2.5.1.1.8.18.22|65|3599100832 +1.3.6.1.4.1.232.3.2.5.1.1.8.23.2|65|3165071379 +1.3.6.1.4.1.232.3.2.5.1.1.9.0.2|65|3922822364 +1.3.6.1.4.1.232.3.2.5.1.1.9.0.28|65|3234904649 +1.3.6.1.4.1.232.3.2.5.1.1.9.8.31|65|1901171918 +1.3.6.1.4.1.232.3.2.5.1.1.9.9.24|65|2263188134 +1.3.6.1.4.1.232.3.2.5.1.1.9.9.28|65|2061135672 +1.3.6.1.4.1.232.3.2.5.1.1.9.10.17|65|398777741 +1.3.6.1.4.1.232.3.2.5.1.1.9.11.4|65|1272452264 +1.3.6.1.4.1.232.3.2.5.1.1.9.12.20|65|622055389 +1.3.6.1.4.1.232.3.2.5.1.1.9.18.22|65|4131783907 +1.3.6.1.4.1.232.3.2.5.1.1.9.23.2|65|2234487753 +1.3.6.1.4.1.232.3.2.5.1.1.10.0.2|65|1741338020 +1.3.6.1.4.1.232.3.2.5.1.1.10.0.28|65|3759438885 +1.3.6.1.4.1.232.3.2.5.1.1.10.8.31|65|282836214 +1.3.6.1.4.1.232.3.2.5.1.1.10.9.24|65|2190162781 +1.3.6.1.4.1.232.3.2.5.1.1.10.9.28|65|517385251 +1.3.6.1.4.1.232.3.2.5.1.1.10.10.17|65|3377639315 +1.3.6.1.4.1.232.3.2.5.1.1.10.11.4|65|479612 +1.3.6.1.4.1.232.3.2.5.1.1.10.12.20|65|2364763386 +1.3.6.1.4.1.232.3.2.5.1.1.10.18.22|65|1540422714 +1.3.6.1.4.1.232.3.2.5.1.1.10.23.2|65|3133475512 +1.3.6.1.4.1.232.3.2.5.1.1.11.0.2|65|1181504081 +1.3.6.1.4.1.232.3.2.5.1.1.11.0.28|65|2491173497 +1.3.6.1.4.1.232.3.2.5.1.1.11.8.31|65|3042764446 +1.3.6.1.4.1.232.3.2.5.1.1.11.9.24|65|121116179 +1.3.6.1.4.1.232.3.2.5.1.1.11.9.28|65|2585114004 +1.3.6.1.4.1.232.3.2.5.1.1.11.10.17|65|715864194 +1.3.6.1.4.1.232.3.2.5.1.1.11.11.4|65|218650245 +1.3.6.1.4.1.232.3.2.5.1.1.11.12.20|65|598167615 +1.3.6.1.4.1.232.3.2.5.1.1.11.18.22|65|1149109305 +1.3.6.1.4.1.232.3.2.5.1.1.11.23.2|65|75304400 +1.3.6.1.4.1.232.3.2.5.1.1.12.0.2|65|221444980 +1.3.6.1.4.1.232.3.2.5.1.1.12.0.28|65|1337358939 +1.3.6.1.4.1.232.3.2.5.1.1.12.8.31|65|2463188951 +1.3.6.1.4.1.232.3.2.5.1.1.12.9.24|65|2136256124 +1.3.6.1.4.1.232.3.2.5.1.1.12.9.28|65|598517409 +1.3.6.1.4.1.232.3.2.5.1.1.12.10.17|65|2109086161 +1.3.6.1.4.1.232.3.2.5.1.1.12.11.4|65|2106962369 +1.3.6.1.4.1.232.3.2.5.1.1.12.12.20|65|17908343 +1.3.6.1.4.1.232.3.2.5.1.1.12.18.22|65|3202247013 +1.3.6.1.4.1.232.3.2.5.1.1.12.23.2|65|1937432163 +1.3.6.1.4.1.232.3.2.5.1.1.13.0.2|65|1734902147 +1.3.6.1.4.1.232.3.2.5.1.1.13.0.28|65|2411164755 +1.3.6.1.4.1.232.3.2.5.1.1.13.8.31|65|1781992790 +1.3.6.1.4.1.232.3.2.5.1.1.13.9.24|65|1981586934 +1.3.6.1.4.1.232.3.2.5.1.1.13.9.28|65|2050290019 +1.3.6.1.4.1.232.3.2.5.1.1.13.10.17|65|54796801 +1.3.6.1.4.1.232.3.2.5.1.1.13.11.4|65|2725543544 +1.3.6.1.4.1.232.3.2.5.1.1.13.12.20|65|3858302419 +1.3.6.1.4.1.232.3.2.5.1.1.13.18.22|65|2732286636 +1.3.6.1.4.1.232.3.2.5.1.1.13.23.2|65|2945232736 +1.3.6.1.4.1.232.3.2.5.1.1.14.0.2|65|2713126212 +1.3.6.1.4.1.232.3.2.5.1.1.14.0.28|65|4022715091 +1.3.6.1.4.1.232.3.2.5.1.1.14.8.31|65|198579111 +1.3.6.1.4.1.232.3.2.5.1.1.14.9.24|65|3580970404 +1.3.6.1.4.1.232.3.2.5.1.1.14.9.28|65|2999485097 +1.3.6.1.4.1.232.3.2.5.1.1.14.10.17|65|2324402321 +1.3.6.1.4.1.232.3.2.5.1.1.14.11.4|65|2167827525 +1.3.6.1.4.1.232.3.2.5.1.1.14.12.20|65|1503274929 +1.3.6.1.4.1.232.3.2.5.1.1.14.18.22|65|26779464 +1.3.6.1.4.1.232.3.2.5.1.1.14.23.2|65|1752319260 +1.3.6.1.4.1.232.3.2.5.1.1.15.0.2|65|1062892646 +1.3.6.1.4.1.232.3.2.5.1.1.15.0.28|65|2137439866 +1.3.6.1.4.1.232.3.2.5.1.1.15.8.31|65|213350178 +1.3.6.1.4.1.232.3.2.5.1.1.15.9.24|65|4098083155 +1.3.6.1.4.1.232.3.2.5.1.1.15.9.28|65|985304361 +1.3.6.1.4.1.232.3.2.5.1.1.15.10.17|65|3136387282 +1.3.6.1.4.1.232.3.2.5.1.1.15.11.4|65|1635061208 +1.3.6.1.4.1.232.3.2.5.1.1.15.12.20|65|3105090698 +1.3.6.1.4.1.232.3.2.5.1.1.15.18.22|65|3840894212 +1.3.6.1.4.1.232.3.2.5.1.1.15.23.2|65|3123363785 +1.3.6.1.4.1.232.3.2.5.1.1.16.0.2|65|2747324891 +1.3.6.1.4.1.232.3.2.5.1.1.16.0.28|65|3044303644 +1.3.6.1.4.1.232.3.2.5.1.1.16.8.31|65|3215286354 +1.3.6.1.4.1.232.3.2.5.1.1.16.9.24|65|329453703 +1.3.6.1.4.1.232.3.2.5.1.1.16.9.28|65|355147129 +1.3.6.1.4.1.232.3.2.5.1.1.16.10.17|65|3578386746 +1.3.6.1.4.1.232.3.2.5.1.1.16.11.4|65|1151157210 +1.3.6.1.4.1.232.3.2.5.1.1.16.12.20|65|2541753754 +1.3.6.1.4.1.232.3.2.5.1.1.16.18.22|65|3280239987 +1.3.6.1.4.1.232.3.2.5.1.1.16.23.2|65|171855281 +1.3.6.1.4.1.232.3.2.5.1.1.17.0.2|65|881428009 +1.3.6.1.4.1.232.3.2.5.1.1.17.0.28|65|2765906854 +1.3.6.1.4.1.232.3.2.5.1.1.17.8.31|65|2123221895 +1.3.6.1.4.1.232.3.2.5.1.1.17.9.24|65|3245302703 +1.3.6.1.4.1.232.3.2.5.1.1.17.9.28|65|1306227086 +1.3.6.1.4.1.232.3.2.5.1.1.17.10.17|65|3453715456 +1.3.6.1.4.1.232.3.2.5.1.1.17.11.4|65|214914874 +1.3.6.1.4.1.232.3.2.5.1.1.17.12.20|65|1195947737 +1.3.6.1.4.1.232.3.2.5.1.1.17.18.22|65|1182048622 +1.3.6.1.4.1.232.3.2.5.1.1.17.23.2|65|523297749 +1.3.6.1.4.1.232.3.2.5.1.1.18.0.2|65|1332352920 +1.3.6.1.4.1.232.3.2.5.1.1.18.0.28|65|2533263787 +1.3.6.1.4.1.232.3.2.5.1.1.18.8.31|65|1720285197 +1.3.6.1.4.1.232.3.2.5.1.1.18.9.24|65|4245380544 +1.3.6.1.4.1.232.3.2.5.1.1.18.9.28|65|1910909181 +1.3.6.1.4.1.232.3.2.5.1.1.18.10.17|65|2245241934 +1.3.6.1.4.1.232.3.2.5.1.1.18.11.4|65|3205736251 +1.3.6.1.4.1.232.3.2.5.1.1.18.12.20|65|803739619 +1.3.6.1.4.1.232.3.2.5.1.1.18.18.22|65|1158056501 +1.3.6.1.4.1.232.3.2.5.1.1.18.23.2|65|916346018 +1.3.6.1.4.1.232.3.2.5.1.1.19.0.2|65|2610456196 +1.3.6.1.4.1.232.3.2.5.1.1.19.0.28|65|40996530 +1.3.6.1.4.1.232.3.2.5.1.1.19.8.31|65|2048619498 +1.3.6.1.4.1.232.3.2.5.1.1.19.9.24|65|1201236747 +1.3.6.1.4.1.232.3.2.5.1.1.19.9.28|65|2887398693 +1.3.6.1.4.1.232.3.2.5.1.1.19.10.17|65|2142351834 +1.3.6.1.4.1.232.3.2.5.1.1.19.11.4|65|4024458378 +1.3.6.1.4.1.232.3.2.5.1.1.19.12.20|65|566543450 +1.3.6.1.4.1.232.3.2.5.1.1.19.18.22|65|3519743513 +1.3.6.1.4.1.232.3.2.5.1.1.19.23.2|65|3459523029 +1.3.6.1.4.1.232.3.2.5.1.1.20.0.2|65|43264877 +1.3.6.1.4.1.232.3.2.5.1.1.20.0.28|65|3981252740 +1.3.6.1.4.1.232.3.2.5.1.1.20.8.31|65|2390762949 +1.3.6.1.4.1.232.3.2.5.1.1.20.9.24|65|3181479601 +1.3.6.1.4.1.232.3.2.5.1.1.20.9.28|65|3311503997 +1.3.6.1.4.1.232.3.2.5.1.1.20.10.17|65|2897038505 +1.3.6.1.4.1.232.3.2.5.1.1.20.11.4|65|165941602 +1.3.6.1.4.1.232.3.2.5.1.1.20.12.20|65|953987731 +1.3.6.1.4.1.232.3.2.5.1.1.20.18.22|65|1795341671 +1.3.6.1.4.1.232.3.2.5.1.1.20.23.2|65|2277575523 +1.3.6.1.4.1.232.3.2.5.1.1.21.0.2|65|1316077395 +1.3.6.1.4.1.232.3.2.5.1.1.21.0.28|65|3677820263 +1.3.6.1.4.1.232.3.2.5.1.1.21.8.31|65|2612770528 +1.3.6.1.4.1.232.3.2.5.1.1.21.9.24|65|1027709744 +1.3.6.1.4.1.232.3.2.5.1.1.21.9.28|65|3051589898 +1.3.6.1.4.1.232.3.2.5.1.1.21.10.17|65|2370106598 +1.3.6.1.4.1.232.3.2.5.1.1.21.11.4|65|671178955 +1.3.6.1.4.1.232.3.2.5.1.1.21.12.20|65|1481115055 +1.3.6.1.4.1.232.3.2.5.1.1.21.18.22|65|908153265 +1.3.6.1.4.1.232.3.2.5.1.1.21.23.2|65|2033546701 +1.3.6.1.4.1.232.3.2.5.1.1.22.0.2|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.22.0.28|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.22.8.31|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.22.9.24|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.22.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.22.10.17|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.22.11.4|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.22.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.22.18.22|2|18 +1.3.6.1.4.1.232.3.2.5.1.1.22.23.2|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.23.0.2|66|2272833932 +1.3.6.1.4.1.232.3.2.5.1.1.23.0.28|66|238315886 +1.3.6.1.4.1.232.3.2.5.1.1.23.8.31|66|2332345108 +1.3.6.1.4.1.232.3.2.5.1.1.23.9.24|66|1722467098 +1.3.6.1.4.1.232.3.2.5.1.1.23.9.28|66|3365552990 +1.3.6.1.4.1.232.3.2.5.1.1.23.10.17|66|814295671 +1.3.6.1.4.1.232.3.2.5.1.1.23.11.4|66|2798738056 +1.3.6.1.4.1.232.3.2.5.1.1.23.12.20|66|3016608692 +1.3.6.1.4.1.232.3.2.5.1.1.23.18.22|66|2609823405 +1.3.6.1.4.1.232.3.2.5.1.1.23.23.2|66|2243357455 +1.3.6.1.4.1.232.3.2.5.1.1.24.0.2|66|1195544543 +1.3.6.1.4.1.232.3.2.5.1.1.24.0.28|66|1262729680 +1.3.6.1.4.1.232.3.2.5.1.1.24.8.31|66|1186252601 +1.3.6.1.4.1.232.3.2.5.1.1.24.9.24|66|1166010901 +1.3.6.1.4.1.232.3.2.5.1.1.24.9.28|66|2981821918 +1.3.6.1.4.1.232.3.2.5.1.1.24.10.17|66|1339371079 +1.3.6.1.4.1.232.3.2.5.1.1.24.11.4|66|1286022879 +1.3.6.1.4.1.232.3.2.5.1.1.24.12.20|66|3351053968 +1.3.6.1.4.1.232.3.2.5.1.1.24.18.22|66|2312438865 +1.3.6.1.4.1.232.3.2.5.1.1.24.23.2|66|4073921079 +1.3.6.1.4.1.232.3.2.5.1.1.25.0.2|66|1571443607 +1.3.6.1.4.1.232.3.2.5.1.1.25.0.28|66|3747927012 +1.3.6.1.4.1.232.3.2.5.1.1.25.8.31|66|3027271760 +1.3.6.1.4.1.232.3.2.5.1.1.25.9.24|66|3819076816 +1.3.6.1.4.1.232.3.2.5.1.1.25.9.28|66|2709190369 +1.3.6.1.4.1.232.3.2.5.1.1.25.10.17|66|3112461002 +1.3.6.1.4.1.232.3.2.5.1.1.25.11.4|66|2804238793 +1.3.6.1.4.1.232.3.2.5.1.1.25.12.20|66|2746010765 +1.3.6.1.4.1.232.3.2.5.1.1.25.18.22|66|1131305182 +1.3.6.1.4.1.232.3.2.5.1.1.25.23.2|66|630061036 +1.3.6.1.4.1.232.3.2.5.1.1.26.0.2|65|2089481769 +1.3.6.1.4.1.232.3.2.5.1.1.26.0.28|65|810038908 +1.3.6.1.4.1.232.3.2.5.1.1.26.8.31|65|1068878315 +1.3.6.1.4.1.232.3.2.5.1.1.26.9.24|65|103961563 +1.3.6.1.4.1.232.3.2.5.1.1.26.9.28|65|2013639362 +1.3.6.1.4.1.232.3.2.5.1.1.26.10.17|65|2951245451 +1.3.6.1.4.1.232.3.2.5.1.1.26.11.4|65|186230100 +1.3.6.1.4.1.232.3.2.5.1.1.26.12.20|65|4182707117 +1.3.6.1.4.1.232.3.2.5.1.1.26.18.22|65|3028338343 +1.3.6.1.4.1.232.3.2.5.1.1.26.23.2|65|168329345 +1.3.6.1.4.1.232.3.2.5.1.1.27.0.2|65|374054158 +1.3.6.1.4.1.232.3.2.5.1.1.27.0.28|65|2567904399 +1.3.6.1.4.1.232.3.2.5.1.1.27.8.31|65|522893109 +1.3.6.1.4.1.232.3.2.5.1.1.27.9.24|65|119532592 +1.3.6.1.4.1.232.3.2.5.1.1.27.9.28|65|2471496068 +1.3.6.1.4.1.232.3.2.5.1.1.27.10.17|65|2594363310 +1.3.6.1.4.1.232.3.2.5.1.1.27.11.4|65|3944959901 +1.3.6.1.4.1.232.3.2.5.1.1.27.12.20|65|4164483098 +1.3.6.1.4.1.232.3.2.5.1.1.27.18.22|65|2883751910 +1.3.6.1.4.1.232.3.2.5.1.1.27.23.2|65|2206974357 +1.3.6.1.4.1.232.3.2.5.1.1.28.0.2|65|3925445605 +1.3.6.1.4.1.232.3.2.5.1.1.28.0.28|65|1713645649 +1.3.6.1.4.1.232.3.2.5.1.1.28.8.31|65|559394300 +1.3.6.1.4.1.232.3.2.5.1.1.28.9.24|65|3885486446 +1.3.6.1.4.1.232.3.2.5.1.1.28.9.28|65|4210915605 +1.3.6.1.4.1.232.3.2.5.1.1.28.10.17|65|220092674 +1.3.6.1.4.1.232.3.2.5.1.1.28.11.4|65|3868626828 +1.3.6.1.4.1.232.3.2.5.1.1.28.12.20|65|3239804722 +1.3.6.1.4.1.232.3.2.5.1.1.28.18.22|65|2585992683 +1.3.6.1.4.1.232.3.2.5.1.1.28.23.2|65|4160128227 +1.3.6.1.4.1.232.3.2.5.1.1.29.0.2|65|3584995123 +1.3.6.1.4.1.232.3.2.5.1.1.29.0.28|65|3107079286 +1.3.6.1.4.1.232.3.2.5.1.1.29.8.31|65|2508263122 +1.3.6.1.4.1.232.3.2.5.1.1.29.9.24|65|3981942807 +1.3.6.1.4.1.232.3.2.5.1.1.29.9.28|65|3550107921 +1.3.6.1.4.1.232.3.2.5.1.1.29.10.17|65|176899773 +1.3.6.1.4.1.232.3.2.5.1.1.29.11.4|65|1648399595 +1.3.6.1.4.1.232.3.2.5.1.1.29.12.20|65|3297067055 +1.3.6.1.4.1.232.3.2.5.1.1.29.18.22|65|3445404027 +1.3.6.1.4.1.232.3.2.5.1.1.29.23.2|65|2016773999 +1.3.6.1.4.1.232.3.2.5.1.1.30.0.2|65|2989537942 +1.3.6.1.4.1.232.3.2.5.1.1.30.0.28|65|3934222433 +1.3.6.1.4.1.232.3.2.5.1.1.30.8.31|65|2477940641 +1.3.6.1.4.1.232.3.2.5.1.1.30.9.24|65|4200705038 +1.3.6.1.4.1.232.3.2.5.1.1.30.9.28|65|3858528366 +1.3.6.1.4.1.232.3.2.5.1.1.30.10.17|65|3986228859 +1.3.6.1.4.1.232.3.2.5.1.1.30.11.4|65|2662203714 +1.3.6.1.4.1.232.3.2.5.1.1.30.12.20|65|3761701964 +1.3.6.1.4.1.232.3.2.5.1.1.30.18.22|65|1418961513 +1.3.6.1.4.1.232.3.2.5.1.1.30.23.2|65|2750812238 +1.3.6.1.4.1.232.3.2.5.1.1.31.0.2|65|916231198 +1.3.6.1.4.1.232.3.2.5.1.1.31.0.28|65|2146594321 +1.3.6.1.4.1.232.3.2.5.1.1.31.8.31|65|995962026 +1.3.6.1.4.1.232.3.2.5.1.1.31.9.24|65|3587479373 +1.3.6.1.4.1.232.3.2.5.1.1.31.9.28|65|4232069374 +1.3.6.1.4.1.232.3.2.5.1.1.31.10.17|65|2353390047 +1.3.6.1.4.1.232.3.2.5.1.1.31.11.4|65|3388648852 +1.3.6.1.4.1.232.3.2.5.1.1.31.12.20|65|3669696917 +1.3.6.1.4.1.232.3.2.5.1.1.31.18.22|65|2817308627 +1.3.6.1.4.1.232.3.2.5.1.1.31.23.2|65|1972361499 +1.3.6.1.4.1.232.3.2.5.1.1.32.0.2|65|296578155 +1.3.6.1.4.1.232.3.2.5.1.1.32.0.28|65|3928100633 +1.3.6.1.4.1.232.3.2.5.1.1.32.8.31|65|2321027611 +1.3.6.1.4.1.232.3.2.5.1.1.32.9.24|65|2503792394 +1.3.6.1.4.1.232.3.2.5.1.1.32.9.28|65|3554487951 +1.3.6.1.4.1.232.3.2.5.1.1.32.10.17|65|1128696502 +1.3.6.1.4.1.232.3.2.5.1.1.32.11.4|65|1115663679 +1.3.6.1.4.1.232.3.2.5.1.1.32.12.20|65|1925210987 +1.3.6.1.4.1.232.3.2.5.1.1.32.18.22|65|2145808767 +1.3.6.1.4.1.232.3.2.5.1.1.32.23.2|65|723298107 +1.3.6.1.4.1.232.3.2.5.1.1.33.0.2|65|4232763688 +1.3.6.1.4.1.232.3.2.5.1.1.33.0.28|65|2515648724 +1.3.6.1.4.1.232.3.2.5.1.1.33.8.31|65|1905715607 +1.3.6.1.4.1.232.3.2.5.1.1.33.9.24|65|1573221775 +1.3.6.1.4.1.232.3.2.5.1.1.33.9.28|65|2178293335 +1.3.6.1.4.1.232.3.2.5.1.1.33.10.17|65|1373042557 +1.3.6.1.4.1.232.3.2.5.1.1.33.11.4|65|324493681 +1.3.6.1.4.1.232.3.2.5.1.1.33.12.20|65|863366144 +1.3.6.1.4.1.232.3.2.5.1.1.33.18.22|65|2834520456 +1.3.6.1.4.1.232.3.2.5.1.1.33.23.2|65|660770811 +1.3.6.1.4.1.232.3.2.5.1.1.34.0.2|65|895977516 +1.3.6.1.4.1.232.3.2.5.1.1.34.0.28|65|3912491867 +1.3.6.1.4.1.232.3.2.5.1.1.34.8.31|65|2935708564 +1.3.6.1.4.1.232.3.2.5.1.1.34.9.24|65|613479510 +1.3.6.1.4.1.232.3.2.5.1.1.34.9.28|65|353982695 +1.3.6.1.4.1.232.3.2.5.1.1.34.10.17|65|1719422533 +1.3.6.1.4.1.232.3.2.5.1.1.34.11.4|65|2753507707 +1.3.6.1.4.1.232.3.2.5.1.1.34.12.20|65|2531058768 +1.3.6.1.4.1.232.3.2.5.1.1.34.18.22|65|1738463797 +1.3.6.1.4.1.232.3.2.5.1.1.34.23.2|65|230339965 +1.3.6.1.4.1.232.3.2.5.1.1.35.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.35.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.35.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.35.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.35.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.36.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.12.20|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.36.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.37.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.37.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.37.8.31|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.37.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.37.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.37.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.37.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.37.12.20|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.37.18.22|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.37.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.38.0.2|65|695149768 +1.3.6.1.4.1.232.3.2.5.1.1.38.0.28|65|3356476138 +1.3.6.1.4.1.232.3.2.5.1.1.38.8.31|65|10938476 +1.3.6.1.4.1.232.3.2.5.1.1.38.9.24|65|3824347234 +1.3.6.1.4.1.232.3.2.5.1.1.38.9.28|65|2299135820 +1.3.6.1.4.1.232.3.2.5.1.1.38.10.17|65|3127782166 +1.3.6.1.4.1.232.3.2.5.1.1.38.11.4|65|650087465 +1.3.6.1.4.1.232.3.2.5.1.1.38.12.20|65|1126275168 +1.3.6.1.4.1.232.3.2.5.1.1.38.18.22|65|292840402 +1.3.6.1.4.1.232.3.2.5.1.1.38.23.2|65|833195757 +1.3.6.1.4.1.232.3.2.5.1.1.39.0.2|65|273708010 +1.3.6.1.4.1.232.3.2.5.1.1.39.0.28|65|2930543340 +1.3.6.1.4.1.232.3.2.5.1.1.39.8.31|65|1360991038 +1.3.6.1.4.1.232.3.2.5.1.1.39.9.24|65|360503215 +1.3.6.1.4.1.232.3.2.5.1.1.39.9.28|65|4180016804 +1.3.6.1.4.1.232.3.2.5.1.1.39.10.17|65|3091053534 +1.3.6.1.4.1.232.3.2.5.1.1.39.11.4|65|3927959624 +1.3.6.1.4.1.232.3.2.5.1.1.39.12.20|65|3019266957 +1.3.6.1.4.1.232.3.2.5.1.1.39.18.22|65|1783253281 +1.3.6.1.4.1.232.3.2.5.1.1.39.23.2|65|3451792479 +1.3.6.1.4.1.232.3.2.5.1.1.40.0.2|65|2074093460 +1.3.6.1.4.1.232.3.2.5.1.1.40.0.28|65|1245631859 +1.3.6.1.4.1.232.3.2.5.1.1.40.8.31|65|2278547273 +1.3.6.1.4.1.232.3.2.5.1.1.40.9.24|65|262900694 +1.3.6.1.4.1.232.3.2.5.1.1.40.9.28|65|3929997821 +1.3.6.1.4.1.232.3.2.5.1.1.40.10.17|65|3399525625 +1.3.6.1.4.1.232.3.2.5.1.1.40.11.4|65|3375585056 +1.3.6.1.4.1.232.3.2.5.1.1.40.12.20|65|2460123296 +1.3.6.1.4.1.232.3.2.5.1.1.40.18.22|65|1661289605 +1.3.6.1.4.1.232.3.2.5.1.1.40.23.2|65|4099258745 +1.3.6.1.4.1.232.3.2.5.1.1.41.0.2|65|67819348 +1.3.6.1.4.1.232.3.2.5.1.1.41.0.28|65|4025257665 +1.3.6.1.4.1.232.3.2.5.1.1.41.8.31|65|778931221 +1.3.6.1.4.1.232.3.2.5.1.1.41.9.24|65|3973425930 +1.3.6.1.4.1.232.3.2.5.1.1.41.9.28|65|683938656 +1.3.6.1.4.1.232.3.2.5.1.1.41.10.17|65|3311880823 +1.3.6.1.4.1.232.3.2.5.1.1.41.11.4|65|3358020460 +1.3.6.1.4.1.232.3.2.5.1.1.41.12.20|65|1507642352 +1.3.6.1.4.1.232.3.2.5.1.1.41.18.22|65|3032576586 +1.3.6.1.4.1.232.3.2.5.1.1.41.23.2|65|1081195094 +1.3.6.1.4.1.232.3.2.5.1.1.42.0.2|65|2958829949 +1.3.6.1.4.1.232.3.2.5.1.1.42.0.28|65|3881154002 +1.3.6.1.4.1.232.3.2.5.1.1.42.8.31|65|868131005 +1.3.6.1.4.1.232.3.2.5.1.1.42.9.24|65|3507732127 +1.3.6.1.4.1.232.3.2.5.1.1.42.9.28|65|2408249280 +1.3.6.1.4.1.232.3.2.5.1.1.42.10.17|65|3661936369 +1.3.6.1.4.1.232.3.2.5.1.1.42.11.4|65|83913712 +1.3.6.1.4.1.232.3.2.5.1.1.42.12.20|65|1692536119 +1.3.6.1.4.1.232.3.2.5.1.1.42.18.22|65|83128752 +1.3.6.1.4.1.232.3.2.5.1.1.42.23.2|65|271214931 +1.3.6.1.4.1.232.3.2.5.1.1.43.0.2|65|3379400009 +1.3.6.1.4.1.232.3.2.5.1.1.43.0.28|65|2113936975 +1.3.6.1.4.1.232.3.2.5.1.1.43.8.31|65|4269595898 +1.3.6.1.4.1.232.3.2.5.1.1.43.9.24|65|2636068769 +1.3.6.1.4.1.232.3.2.5.1.1.43.9.28|65|3509528056 +1.3.6.1.4.1.232.3.2.5.1.1.43.10.17|65|2019075204 +1.3.6.1.4.1.232.3.2.5.1.1.43.11.4|65|3241766477 +1.3.6.1.4.1.232.3.2.5.1.1.43.12.20|65|1716200504 +1.3.6.1.4.1.232.3.2.5.1.1.43.18.22|65|1957275437 +1.3.6.1.4.1.232.3.2.5.1.1.43.23.2|65|2456872217 +1.3.6.1.4.1.232.3.2.5.1.1.44.0.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.44.0.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.44.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.44.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.44.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.44.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.44.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.45.0.2|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.45.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.45.8.31|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.45.9.24|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.45.9.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.45.10.17|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.45.11.4|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.45.12.20|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.45.18.22|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.45.23.2|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.46.0.2|65|3561272272 +1.3.6.1.4.1.232.3.2.5.1.1.46.0.28|65|4174662596 +1.3.6.1.4.1.232.3.2.5.1.1.46.8.31|65|689811778 +1.3.6.1.4.1.232.3.2.5.1.1.46.9.24|65|1530456354 +1.3.6.1.4.1.232.3.2.5.1.1.46.9.28|65|20151350 +1.3.6.1.4.1.232.3.2.5.1.1.46.10.17|65|1335195536 +1.3.6.1.4.1.232.3.2.5.1.1.46.11.4|65|3704812105 +1.3.6.1.4.1.232.3.2.5.1.1.46.12.20|65|1550626120 +1.3.6.1.4.1.232.3.2.5.1.1.46.18.22|65|3138673084 +1.3.6.1.4.1.232.3.2.5.1.1.46.23.2|65|655955111 +1.3.6.1.4.1.232.3.2.5.1.1.47.0.2|65|1839069213 +1.3.6.1.4.1.232.3.2.5.1.1.47.0.28|65|174038400 +1.3.6.1.4.1.232.3.2.5.1.1.47.8.31|65|3244003037 +1.3.6.1.4.1.232.3.2.5.1.1.47.9.24|65|1347107392 +1.3.6.1.4.1.232.3.2.5.1.1.47.9.28|65|1186660290 +1.3.6.1.4.1.232.3.2.5.1.1.47.10.17|65|1395461969 +1.3.6.1.4.1.232.3.2.5.1.1.47.11.4|65|4027008497 +1.3.6.1.4.1.232.3.2.5.1.1.47.12.20|65|1547161558 +1.3.6.1.4.1.232.3.2.5.1.1.47.18.22|65|1118166193 +1.3.6.1.4.1.232.3.2.5.1.1.47.23.2|65|4220984397 +1.3.6.1.4.1.232.3.2.5.1.1.48.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.48.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.48.8.31|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.48.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.48.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.48.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.48.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.48.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.48.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.48.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.49.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.49.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.12.20|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.49.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.49.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.50.0.2|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.50.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.50.8.31|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.50.9.24|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.50.9.28|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.50.10.17|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.50.11.4|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.50.12.20|2|22 +1.3.6.1.4.1.232.3.2.5.1.1.50.18.22|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.50.23.2|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.51.0.2|4x|7a6f6d6269657320627574207468656972206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.51.0.28|4x|627574207468656972206f78656e207468656972 +1.3.6.1.4.1.232.3.2.5.1.1.51.8.31|4x|4a61646564206f78656e206163746564 +1.3.6.1.4.1.232.3.2.5.1.1.51.9.24|4|but +1.3.6.1.4.1.232.3.2.5.1.1.51.9.28|4x|7a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.232.3.2.5.1.1.51.10.17|4x|627574206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.51.11.4|4x|6f78656e204a61646564206b65707420627574206b657074207a6f6d62696573 +1.3.6.1.4.1.232.3.2.5.1.1.51.12.20|4x|746865697220616374656420717561696e746c7920717561696e746c79206163746564 +1.3.6.1.4.1.232.3.2.5.1.1.51.18.22|4|but +1.3.6.1.4.1.232.3.2.5.1.1.51.23.2|4x|627574206f78656e204a6164656420666f7277617264204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.52.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.52.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.52.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.52.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.52.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.52.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.52.23.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.53.0.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.53.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.53.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.53.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.53.10.17|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.53.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.53.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.54.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.54.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.54.10.17|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.54.11.4|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.54.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.54.18.22|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.54.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.55.0.2|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.55.0.28|2|26 +1.3.6.1.4.1.232.3.2.5.1.1.55.8.31|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.55.9.24|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.55.9.28|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.55.10.17|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.55.11.4|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.55.12.20|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.55.18.22|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.55.23.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.56.0.2|65|2949968298 +1.3.6.1.4.1.232.3.2.5.1.1.56.0.28|65|2491218975 +1.3.6.1.4.1.232.3.2.5.1.1.56.8.31|65|233525739 +1.3.6.1.4.1.232.3.2.5.1.1.56.9.24|65|336628689 +1.3.6.1.4.1.232.3.2.5.1.1.56.9.28|65|2014596717 +1.3.6.1.4.1.232.3.2.5.1.1.56.10.17|65|4222268319 +1.3.6.1.4.1.232.3.2.5.1.1.56.11.4|65|2071508675 +1.3.6.1.4.1.232.3.2.5.1.1.56.12.20|65|1261145831 +1.3.6.1.4.1.232.3.2.5.1.1.56.18.22|65|1296062476 +1.3.6.1.4.1.232.3.2.5.1.1.56.23.2|65|1252664383 +1.3.6.1.4.1.232.3.2.5.1.1.57.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.57.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.57.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.57.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.57.9.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.57.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.57.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.57.12.20|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.57.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.57.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.9.24|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.58.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.10.17|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.58.11.4|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.58.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.58.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.59.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.0.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.59.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.59.9.24|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.59.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.59.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.59.18.22|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.59.23.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.60.0.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.60.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.60.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.60.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.60.12.20|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.60.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.60.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.0.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.61.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.61.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.61.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.61.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.61.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.61.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.61.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.62.0.2|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.0.28|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.8.31|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.9.24|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.9.28|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.10.17|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.11.4|4|oxen +1.3.6.1.4.1.232.3.2.5.1.1.62.12.20|4|kept +1.3.6.1.4.1.232.3.2.5.1.1.62.18.22|4|but +1.3.6.1.4.1.232.3.2.5.1.1.62.23.2|4|kept +1.3.6.1.4.1.232.3.2.5.1.1.63.0.2|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.63.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.63.8.31|2|26 +1.3.6.1.4.1.232.3.2.5.1.1.63.9.24|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.63.9.28|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.63.10.17|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.63.11.4|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.63.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.63.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.63.23.2|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.64.0.2|4x|627574207468656972206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.64.0.28|4x|64726976696e672064726976696e67206f78656e204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.64.8.31|4x|6163746564204a61646564207a6f6d62696573207468656972206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.232.3.2.5.1.1.64.9.24|4x|6163746564204a61646564 +1.3.6.1.4.1.232.3.2.5.1.1.64.9.28|4|acted +1.3.6.1.4.1.232.3.2.5.1.1.64.10.17|4x|666f72776172642062757420717561696e746c7920666f7277617264207a6f6d6269657320666f7277617264206b657074207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.232.3.2.5.1.1.64.11.4|4x|64726976696e67206275742074686569722064726976696e67204a61646564207a6f6d62696573206f78656e2062757420627574 +1.3.6.1.4.1.232.3.2.5.1.1.64.12.20|4x|746865697220666f7277617264204a6164656420717561696e746c79 +1.3.6.1.4.1.232.3.2.5.1.1.64.18.22|4x|746865697220717561696e746c792064726976696e672064726976696e67206b657074 +1.3.6.1.4.1.232.3.2.5.1.1.64.23.2|4x|7a6f6d62696573207a6f6d626965732064726976696e6720666f7277617264 +1.3.6.1.4.1.232.3.2.5.1.1.65.0.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.65.0.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.65.9.28|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.65.10.17|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.65.11.4|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.65.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.65.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.66.0.2|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.66.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.66.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.66.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.66.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.66.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.66.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.66.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.66.18.22|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.66.23.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.67.0.2|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.67.0.28|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.67.8.31|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.67.9.24|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.67.9.28|2|28 +1.3.6.1.4.1.232.3.2.5.1.1.67.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.67.11.4|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.67.12.20|2|25 +1.3.6.1.4.1.232.3.2.5.1.1.67.18.22|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.67.23.2|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.68.0.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.0.28|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.68.8.31|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.68.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.68.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.10.17|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.68.12.20|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.68.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.68.23.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.69.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.69.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.8.31|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.9.24|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.69.9.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.69.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.69.18.22|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.69.23.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.70.0.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.70.0.28|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.70.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.70.9.24|2|22 +1.3.6.1.4.1.232.3.2.5.1.1.70.9.28|2|7 +1.3.6.1.4.1.232.3.2.5.1.1.70.10.17|2|14 +1.3.6.1.4.1.232.3.2.5.1.1.70.11.4|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.70.12.20|2|30 +1.3.6.1.4.1.232.3.2.5.1.1.70.18.22|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.70.23.2|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.71.0.2|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.71.0.28|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.71.8.31|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.71.9.24|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.71.9.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.71.10.17|2|8 +1.3.6.1.4.1.232.3.2.5.1.1.71.11.4|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.71.12.20|2|16 +1.3.6.1.4.1.232.3.2.5.1.1.71.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.71.23.2|2|10 +1.3.6.1.4.1.232.3.2.5.1.1.72.0.2|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.72.0.28|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.72.8.31|2|21 +1.3.6.1.4.1.232.3.2.5.1.1.72.9.24|2|9 +1.3.6.1.4.1.232.3.2.5.1.1.72.9.28|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.72.10.17|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.72.11.4|2|29 +1.3.6.1.4.1.232.3.2.5.1.1.72.12.20|2|17 +1.3.6.1.4.1.232.3.2.5.1.1.72.18.22|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.72.23.2|2|23 +1.3.6.1.4.1.232.3.2.5.1.1.73.0.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.73.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.73.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.9.28|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.10.17|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.73.11.4|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.73.18.22|2|5 +1.3.6.1.4.1.232.3.2.5.1.1.73.23.2|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.74.0.2|65|2908799926 +1.3.6.1.4.1.232.3.2.5.1.1.74.0.28|65|2490380324 +1.3.6.1.4.1.232.3.2.5.1.1.74.8.31|65|2597785093 +1.3.6.1.4.1.232.3.2.5.1.1.74.9.24|65|4254200557 +1.3.6.1.4.1.232.3.2.5.1.1.74.9.28|65|696408854 +1.3.6.1.4.1.232.3.2.5.1.1.74.10.17|65|165954175 +1.3.6.1.4.1.232.3.2.5.1.1.74.11.4|65|404169227 +1.3.6.1.4.1.232.3.2.5.1.1.74.12.20|65|368625461 +1.3.6.1.4.1.232.3.2.5.1.1.74.18.22|65|2141670018 +1.3.6.1.4.1.232.3.2.5.1.1.74.23.2|65|3382161332 +1.3.6.1.4.1.232.3.2.5.1.1.75.0.2|66|2380887083 +1.3.6.1.4.1.232.3.2.5.1.1.75.0.28|66|1128640721 +1.3.6.1.4.1.232.3.2.5.1.1.75.8.31|66|3386410156 +1.3.6.1.4.1.232.3.2.5.1.1.75.9.24|66|46631455 +1.3.6.1.4.1.232.3.2.5.1.1.75.9.28|66|1683028466 +1.3.6.1.4.1.232.3.2.5.1.1.75.10.17|66|2663962912 +1.3.6.1.4.1.232.3.2.5.1.1.75.11.4|66|1693199007 +1.3.6.1.4.1.232.3.2.5.1.1.75.12.20|66|3786879383 +1.3.6.1.4.1.232.3.2.5.1.1.75.18.22|66|873327295 +1.3.6.1.4.1.232.3.2.5.1.1.75.23.2|66|1558173398 +1.3.6.1.4.1.232.3.2.5.1.1.76.0.2|65|2103006361 +1.3.6.1.4.1.232.3.2.5.1.1.76.0.28|65|1426172609 +1.3.6.1.4.1.232.3.2.5.1.1.76.8.31|65|991215997 +1.3.6.1.4.1.232.3.2.5.1.1.76.9.24|65|2962747034 +1.3.6.1.4.1.232.3.2.5.1.1.76.9.28|65|2527741665 +1.3.6.1.4.1.232.3.2.5.1.1.76.10.17|65|2054720417 +1.3.6.1.4.1.232.3.2.5.1.1.76.11.4|65|2600139724 +1.3.6.1.4.1.232.3.2.5.1.1.76.12.20|65|999271546 +1.3.6.1.4.1.232.3.2.5.1.1.76.18.22|65|388628255 +1.3.6.1.4.1.232.3.2.5.1.1.76.23.2|65|457008923 +1.3.6.1.4.1.232.3.2.5.1.1.77.0.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.77.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.77.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.77.9.24|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.77.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.77.10.17|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.77.11.4|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.77.12.20|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.77.18.22|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.77.23.2|2|4 +1.3.6.1.4.1.232.3.2.5.1.1.78.0.2|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.78.0.28|2|0 +1.3.6.1.4.1.232.3.2.5.1.1.78.8.31|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.78.9.24|2|6 +1.3.6.1.4.1.232.3.2.5.1.1.78.9.28|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.78.10.17|2|31 +1.3.6.1.4.1.232.3.2.5.1.1.78.11.4|2|24 +1.3.6.1.4.1.232.3.2.5.1.1.78.12.20|2|30 +1.3.6.1.4.1.232.3.2.5.1.1.78.18.22|2|20 +1.3.6.1.4.1.232.3.2.5.1.1.78.23.2|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.79.0.2|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.79.0.28|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.79.8.31|2|26 +1.3.6.1.4.1.232.3.2.5.1.1.79.9.24|2|15 +1.3.6.1.4.1.232.3.2.5.1.1.79.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.79.10.17|2|13 +1.3.6.1.4.1.232.3.2.5.1.1.79.11.4|2|27 +1.3.6.1.4.1.232.3.2.5.1.1.79.12.20|2|19 +1.3.6.1.4.1.232.3.2.5.1.1.79.18.22|2|12 +1.3.6.1.4.1.232.3.2.5.1.1.79.23.2|2|11 +1.3.6.1.4.1.232.3.2.5.1.1.80.0.2|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.0.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.8.31|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.9.24|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.80.9.28|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.10.17|2|2 +1.3.6.1.4.1.232.3.2.5.1.1.80.11.4|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.80.12.20|2|3 +1.3.6.1.4.1.232.3.2.5.1.1.80.18.22|2|1 +1.3.6.1.4.1.232.3.2.5.1.1.80.23.2|2|1 +1.3.6.1.4.1.232.6.2.6.1.0|2|3 +1.3.6.1.4.1.232.6.2.8.1.0|2|4 +1.3.6.1.4.1.232.6.2.9.2.0|2|5 +1.3.6.1.4.1.232.6.2.9.3.1.1.30.3|2|30 +1.3.6.1.4.1.232.6.2.9.3.1.2.30.3|2|3 +1.3.6.1.4.1.232.6.2.9.3.1.3.30.3|2|1 +1.3.6.1.4.1.232.6.2.9.3.1.4.30.3|2|4 +1.3.6.1.4.1.232.6.2.9.3.1.5.30.3|2|3 +1.3.6.1.4.1.232.6.2.9.3.1.6.30.3|2|26 +1.3.6.1.4.1.232.6.2.9.3.1.7.30.3|2|15 +1.3.6.1.4.1.232.6.2.9.3.1.8.30.3|2|24 +1.3.6.1.4.1.232.6.2.14.13.1.1.24|2|24 +1.3.6.1.4.1.232.6.2.14.13.1.2.24|2|12 +1.3.6.1.4.1.232.6.2.14.13.1.3.24|2|3 +1.3.6.1.4.1.232.6.2.14.13.1.4.24|2|2 +1.3.6.1.4.1.232.6.2.14.13.1.5.24|2|5 +1.3.6.1.4.1.232.6.2.14.13.1.6.24|2|15 +1.3.6.1.4.1.232.6.2.14.13.1.7.24|2|9 +1.3.6.1.4.1.232.6.2.14.13.1.8.24|2|9 +1.3.6.1.4.1.232.6.2.14.13.1.9.24|4x|7a6f6d62696573207a6f6d626965732064726976696e67206b657074 +1.3.6.1.4.1.232.6.2.14.13.1.10.24|4x|616374656420717561696e746c792062757420666f7277617264206275742064726976696e67206b657074207a6f6d62696573 +1.3.6.1.4.1.232.6.2.14.13.1.11.24|4x|62757420627574 +1.3.6.1.4.1.232.6.2.14.13.1.12.24|4x|666f7277617264207a6f6d62696573206b657074206b657074204a6164656420627574206f78656e20627574206163746564 +1.3.6.1.4.1.232.6.2.14.13.1.13.24|4x|666f7277617264207a6f6d62696573 +1.3.6.1.4.1.232.6.2.14.13.1.14.24|2|24 +1.3.6.1.4.1.232.6.2.14.13.1.15.24|2|12 +1.3.6.1.4.1.232.6.2.14.13.1.15.25|2|11 +1.3.6.1.4.1.232.6.2.14.13.1.16.24|2|2 +1.3.6.1.4.1.232.6.2.14.13.1.17.24|4x|6b65707420746865697220717561696e746c79206b657074 +1.3.6.1.4.1.232.6.2.14.13.1.18.24|4x|6f78656e204a61646564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.232.6.2.14.13.1.19.24|2|1 +1.3.6.1.4.1.232.6.2.14.13.1.20.24|2|2 +1.3.6.1.4.1.232.6.2.14.13.1.20.25|2|3 +1.3.6.1.4.1.232.11.2.2.1|4|RHEL +1.3.6.1.4.1.232.11.2.2.2|4|3.10.0-862.15.4.el7.ve.x86_64 +1.3.6.1.4.1.232.11.2.3.1.1.1.4|2|4 +1.3.6.1.4.1.232.11.2.3.1.1.1.7|2|7 +1.3.6.1.4.1.232.11.2.3.1.1.1.13|2|13 +1.3.6.1.4.1.232.11.2.3.1.1.1.20|2|20 +1.3.6.1.4.1.232.11.2.3.1.1.1.22|2|22 +1.3.6.1.4.1.232.11.2.3.1.1.1.23|2|23 +1.3.6.1.4.1.232.11.2.3.1.1.1.29|2|29 +1.3.6.1.4.1.232.11.2.3.1.1.2.4|2|9 +1.3.6.1.4.1.232.11.2.3.1.1.2.7|2|30 +1.3.6.1.4.1.232.11.2.3.1.1.2.13|2|15 +1.3.6.1.4.1.232.11.2.3.1.1.2.20|2|27 +1.3.6.1.4.1.232.11.2.3.1.1.2.22|2|6 +1.3.6.1.4.1.232.11.2.3.1.1.2.23|2|21 +1.3.6.1.4.1.232.11.2.3.1.1.2.29|2|17 +1.3.6.1.4.1.232.11.2.3.1.1.3.4|2|17 +1.3.6.1.4.1.232.11.2.3.1.1.3.7|2|1 +1.3.6.1.4.1.232.11.2.3.1.1.3.13|2|15 +1.3.6.1.4.1.232.11.2.3.1.1.3.20|2|3 +1.3.6.1.4.1.232.11.2.3.1.1.3.22|2|1 +1.3.6.1.4.1.232.11.2.3.1.1.3.23|2|30 +1.3.6.1.4.1.232.11.2.3.1.1.3.29|2|16 +1.3.6.1.4.1.232.11.2.3.1.1.4.4|2|6 +1.3.6.1.4.1.232.11.2.3.1.1.4.7|2|11 +1.3.6.1.4.1.232.11.2.3.1.1.4.13|2|5 +1.3.6.1.4.1.232.11.2.3.1.1.4.20|2|1 +1.3.6.1.4.1.232.11.2.3.1.1.4.22|2|10 +1.3.6.1.4.1.232.11.2.3.1.1.4.23|2|29 +1.3.6.1.4.1.232.11.2.3.1.1.4.29|2|19 +1.3.6.1.4.1.232.11.2.3.1.1.5.4|2|28 +1.3.6.1.4.1.232.11.2.3.1.1.5.7|2|19 +1.3.6.1.4.1.232.11.2.3.1.1.5.13|2|4 +1.3.6.1.4.1.232.11.2.3.1.1.5.20|2|25 +1.3.6.1.4.1.232.11.2.3.1.1.5.22|2|27 +1.3.6.1.4.1.232.11.2.3.1.1.5.23|2|21 +1.3.6.1.4.1.232.11.2.3.1.1.5.29|2|5 +1.3.6.1.4.1.232.11.2.3.1.1.6.4|4x|616374656420627574206f78656e204a61646564 +1.3.6.1.4.1.232.11.2.3.1.1.6.7|4x|4a61646564206f78656e +1.3.6.1.4.1.232.11.2.3.1.1.6.13|4x|6275742061637465642061637465642064726976696e67204a61646564 +1.3.6.1.4.1.232.11.2.3.1.1.6.20|4x|7a6f6d6269657320717561696e746c792064726976696e67 +1.3.6.1.4.1.232.11.2.3.1.1.6.22|4x|627574206f78656e207a6f6d626965732064726976696e67206163746564207a6f6d62696573204a61646564207468656972 +1.3.6.1.4.1.232.11.2.3.1.1.6.23|4x|64726976696e67206163746564204a61646564204a61646564207a6f6d62696573207a6f6d6269657320717561696e746c792064726976696e67207a6f6d62696573 +1.3.6.1.4.1.232.11.2.3.1.1.6.29|4|quaintly +1.3.6.1.4.1.232.11.2.4.1.1.1.5|2|5 +1.3.6.1.4.1.232.11.2.4.1.1.1.8|2|8 +1.3.6.1.4.1.232.11.2.4.1.1.1.11|2|11 +1.3.6.1.4.1.232.11.2.4.1.1.1.15|2|15 +1.3.6.1.4.1.232.11.2.4.1.1.1.19|2|19 +1.3.6.1.4.1.232.11.2.4.1.1.1.21|2|21 +1.3.6.1.4.1.232.11.2.4.1.1.1.28|2|28 +1.3.6.1.4.1.232.11.2.4.1.1.1.30|2|30 +1.3.6.1.4.1.232.11.2.4.1.1.2.5|4x|6163746564206275742064726976696e67204a616465642064726976696e67206f78656e2061637465642064726976696e67206b657074 +1.3.6.1.4.1.232.11.2.4.1.1.2.8|4x|666f7277617264206f78656e206b657074206b657074206f78656e +1.3.6.1.4.1.232.11.2.4.1.1.2.11|4x|64726976696e67204a61646564 +1.3.6.1.4.1.232.11.2.4.1.1.2.15|4x|746865697220717561696e746c7920627574206275742064726976696e672064726976696e67204a61646564204a61646564 +1.3.6.1.4.1.232.11.2.4.1.1.2.19|4x|7468656972206f78656e20666f7277617264204a61646564206b65707420717561696e746c792064726976696e67204a61646564 +1.3.6.1.4.1.232.11.2.4.1.1.2.21|4x|74686569722074686569722064726976696e67207a6f6d62696573207468656972207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.232.11.2.4.1.1.2.28|4x|6163746564206163746564206f78656e206f78656e207a6f6d62696573206b657074204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.232.11.2.4.1.1.2.30|4x|4a6164656420746865697220666f727761726420746865697220746865697220666f7277617264 +1.3.6.1.4.1.232.11.2.4.1.1.3.5|2|25 +1.3.6.1.4.1.232.11.2.4.1.1.3.8|2|2 +1.3.6.1.4.1.232.11.2.4.1.1.3.11|2|16 +1.3.6.1.4.1.232.11.2.4.1.1.3.15|2|25 +1.3.6.1.4.1.232.11.2.4.1.1.3.19|2|19 +1.3.6.1.4.1.232.11.2.4.1.1.3.21|2|22 +1.3.6.1.4.1.232.11.2.4.1.1.3.28|2|17 +1.3.6.1.4.1.232.11.2.4.1.1.3.30|2|10 +1.3.6.1.4.1.232.11.2.4.1.1.4.5|2|25 +1.3.6.1.4.1.232.11.2.4.1.1.4.8|2|13 +1.3.6.1.4.1.232.11.2.4.1.1.4.11|2|20 +1.3.6.1.4.1.232.11.2.4.1.1.4.15|2|29 +1.3.6.1.4.1.232.11.2.4.1.1.4.19|2|13 +1.3.6.1.4.1.232.11.2.4.1.1.4.21|2|7 +1.3.6.1.4.1.232.11.2.4.1.1.4.28|2|3 +1.3.6.1.4.1.232.11.2.4.1.1.4.30|2|0 +1.3.6.1.4.1.232.11.2.4.1.1.5.5|2|25 +1.3.6.1.4.1.232.11.2.4.1.1.5.8|2|5 +1.3.6.1.4.1.232.11.2.4.1.1.5.11|2|10 +1.3.6.1.4.1.232.11.2.4.1.1.5.15|2|31 +1.3.6.1.4.1.232.11.2.4.1.1.5.19|2|15 +1.3.6.1.4.1.232.11.2.4.1.1.5.21|2|26 +1.3.6.1.4.1.232.11.2.4.1.1.5.28|2|1 +1.3.6.1.4.1.232.11.2.4.1.1.5.30|2|23 +1.3.6.1.4.1.232.11.2.4.1.1.6.5|2|16 +1.3.6.1.4.1.232.11.2.4.1.1.6.8|2|16 +1.3.6.1.4.1.232.11.2.4.1.1.6.11|2|12 +1.3.6.1.4.1.232.11.2.4.1.1.6.15|2|9 +1.3.6.1.4.1.232.11.2.4.1.1.6.19|2|0 +1.3.6.1.4.1.232.11.2.4.1.1.6.21|2|12 +1.3.6.1.4.1.232.11.2.4.1.1.6.28|2|16 +1.3.6.1.4.1.232.11.2.4.1.1.6.30|2|20 +1.3.6.1.4.1.232.11.2.4.1.1.7.5|2|20 +1.3.6.1.4.1.232.11.2.4.1.1.7.8|2|23 +1.3.6.1.4.1.232.11.2.4.1.1.7.11|2|25 +1.3.6.1.4.1.232.11.2.4.1.1.7.15|2|21 +1.3.6.1.4.1.232.11.2.4.1.1.7.19|2|16 +1.3.6.1.4.1.232.11.2.4.1.1.7.21|2|1 +1.3.6.1.4.1.232.11.2.4.1.1.7.28|2|20 +1.3.6.1.4.1.232.11.2.4.1.1.7.30|2|23 +1.3.6.1.4.1.232.11.2.4.1.1.8.5|2|3 +1.3.6.1.4.1.232.11.2.4.1.1.8.8|2|2 +1.3.6.1.4.1.232.11.2.4.1.1.8.11|2|1 +1.3.6.1.4.1.232.11.2.4.1.1.8.15|2|2 +1.3.6.1.4.1.232.11.2.4.1.1.8.19|2|4 +1.3.6.1.4.1.232.11.2.4.1.1.8.21|2|3 +1.3.6.1.4.1.232.11.2.4.1.1.8.28|2|4 +1.3.6.1.4.1.232.11.2.4.1.1.8.30|2|1 +1.3.6.1.4.1.232.11.2.4.2.0|2|4 +1.3.6.1.4.1.232.18.2.3.1.1.4.0|4|mac +1.3.6.1.4.1.232.18.2.3.1.1.13.0|2|5 +1.3.6.1.4.1.232.18.2.3.1.1.14.0|2|3 +1.3.6.1.4.1.232.18.2.3.1.1.39.0|4|adapter +1.3.6.1.4.1.232.18.2.3.1.2.13.0|2|4 +1.3.6.1.4.1.232.18.2.3.1.2.14.0|2|2 diff --git a/test/new-e2e/ndm/snmp/compose/data/idrac.snmprec b/test/new-e2e/ndm/snmp/compose/data/idrac.snmprec new file mode 100644 index 0000000000000..61e337c9ef646 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/idrac.snmprec @@ -0,0 +1,1207 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.674.10892.2 +1.3.6.1.4.1.343.2.7.2.1.1.0|4|kept +1.3.6.1.4.1.343.2.7.2.1.2.0|4x|7a6f6d6269657320717561696e746c792061637465642064726976696e6720627574 +1.3.6.1.4.1.343.2.7.2.1.3.0|4x|666f727761726420717561696e746c79206f78656e206163746564 +1.3.6.1.4.1.343.2.7.2.1.4.0|4x|62757420666f727761726420627574 +1.3.6.1.4.1.343.2.7.2.1.5.0|4x|64726976696e67206b657074204a61646564 +1.3.6.1.4.1.343.2.7.2.1.6.0|4x|666f7277617264204a61646564207468656972206b657074 +1.3.6.1.4.1.343.2.7.2.1.7.0|2|1 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.1.8|2|8 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.1.18|2|18 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.2.8|4x|65746830 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.2.18|4x|656e31 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.3.8|2|1 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.3.18|2|2 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.4.8|2|1 +1.3.6.1.4.1.343.2.7.2.2.1.1.1.4.18|2|0 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.1.18|4x|666f7277617264207a6f6d62696573207468656972 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.1.22|4x|717561696e746c79204a61646564206f78656e207a6f6d62696573206f78656e2064726976696e67206f78656e +1.3.6.1.4.1.343.2.7.2.2.1.2.1.2.18|4x|4a61646564207a6f6d62696573206f78656e207468656972206b6570742064726976696e67206163746564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.2.22|4x|61637465642064726976696e6720666f7277617264206163746564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.3.18|4x|6b657074206163746564204a61646564204a6164656420746865697220666f7277617264207a6f6d62696573 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.3.22|4x|6f78656e206163746564204a6164656420717561696e746c79206163746564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.4.18|4x|627574206f78656e207468656972206f78656e206b6570742064726976696e672064726976696e6720627574 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.4.22|4x|717561696e746c79206f78656e2062757420717561696e746c792064726976696e67207a6f6d62696573206f78656e204a61646564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.5.18|4x|4a61646564206f78656e +1.3.6.1.4.1.343.2.7.2.2.1.2.1.5.22|4x|717561696e746c792074686569722064726976696e67207a6f6d62696573 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.6.18|4x|6b657074204a61646564 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.6.22|4|driving +1.3.6.1.4.1.343.2.7.2.2.1.2.1.7.18|4x|4a616465642064726976696e67206b657074207468656972206f78656e20627574 +1.3.6.1.4.1.343.2.7.2.2.1.2.1.7.22|4x|4a616465642064726976696e67206b65707420627574 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.1.8|65|26212581 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.1.18|65|918782676 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.2.8|65|2561191324 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.2.18|65|4290482129 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.3.8|65|3900533769 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.3.18|65|564767165 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.4.8|65|3058685355 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.4.18|65|3837029910 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.5.8|65|1958861748 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.5.18|65|2421785564 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.6.8|65|2377289710 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.6.18|65|4015875170 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.7.8|65|4079823523 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.7.18|65|577740315 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.8.8|65|3885573357 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.8.18|65|1559311203 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.9.8|65|1208244969 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.9.18|65|736603272 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.10.8|65|1397338420 +1.3.6.1.4.1.343.2.7.2.2.1.3.1.10.18|65|3150855068 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.1.4|2|4 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.1.29|2|29 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.2.4|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.2.29|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.3.4|65|1467360873 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.3.29|65|3891936190 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.4.4|66|1428003748 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.4.29|66|3467694198 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.5.4|2|2 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.5.29|2|2 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.6.4|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.6.29|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.7.4|2|9 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.7.29|2|29 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.8.4|2|13 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.8.29|2|28 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.9.4|2|15 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.9.29|2|24 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.10.4|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.10.29|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.11.4|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.11.29|4x|42010aa40033 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.12.4|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.12.29|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.13.4|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.13.29|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.14.4|2|13 +1.3.6.1.4.1.343.2.7.2.2.2.1.1.14.29|2|30 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.1.3|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.1.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.2.3|65|906870219 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.2.11|65|3854133097 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.3.3|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.3.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.4.3|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.4.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.5.3|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.5.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.6.3|2|1 +1.3.6.1.4.1.343.2.7.2.2.2.2.1.6.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.1.2|2|2 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.1.11|2|11 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.2.2|2|11 +1.3.6.1.4.1.343.2.7.2.2.3.1.1.2.11|2|22 +1.3.6.1.4.1.343.2.7.2.2.3.2.1.1.7|2|0 +1.3.6.1.4.1.343.2.7.2.2.3.2.1.1.23|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.1.22|2|22 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.1.30|2|30 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.2.22|2|29 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.2.30|2|19 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.3.22|2|16 +1.3.6.1.4.1.343.2.7.2.2.4.1.1.3.30|2|12 +1.3.6.1.4.1.343.2.7.2.2.4.2.1.1.7|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.1.5|4x|6f78656e2061637465642064726976696e6720666f72776172642064726976696e67 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.1.11|4x|4a61646564206163746564 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.2.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.2.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.3.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.3.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.4.5|66|1949733254 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.4.11|66|2070885352 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.5.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.5.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.6.5|2|2 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.6.11|2|2 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.7.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.7.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.8.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.8.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.9.5|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.9.11|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.10.5|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.10.11|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.11.5|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.11.11|2|-1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.12.5|65|2997670242 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.12.11|65|2131631262 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.13.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.13.11|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.14.5|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.14.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.15.5|2|0 +1.3.6.1.4.1.343.2.7.2.2.4.3.1.15.11|2|1 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.1.26|2|26 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.1.27|2|27 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.2.26|2|15 +1.3.6.1.4.1.343.2.7.2.2.5.1.1.2.27|2|1 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.1.19|2|3 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.1.31|2|2 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.2.19|65|706719367 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.2.31|65|1306335671 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.3.19|2|2 +1.3.6.1.4.1.343.2.7.2.2.5.2.1.3.31|2|2 +1.3.6.1.4.1.343.2.7.2.3.1.2.0|2|0 +1.3.6.1.4.1.343.2.7.2.3.1.3.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.1.4.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.2.2.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.3.2.0|2|1 +1.3.6.1.4.1.343.2.7.2.3.4.2.0|2|0 +1.3.6.1.4.1.674.10892.2.2.1.0|2|4 +1.3.6.1.4.1.674.10892.2.3.1.1.0|2|4 +1.3.6.1.4.1.674.10892.2.3.1.4.0|2|4 +1.3.6.1.4.1.674.10892.2.3.1.5.0|2|4 +1.3.6.1.4.1.674.10892.2.3.1.9.0|2|3 +1.3.6.1.4.1.674.10892.2.4.1.1.1.1|2|2 +1.3.6.1.4.1.674.10892.2.4.1.1.1.2|2|83 +1.3.6.1.4.1.674.10892.2.4.1.1.6.1|2|2803 +1.3.6.1.4.1.674.10892.2.4.1.1.6.2|2|191739 +1.3.6.1.4.1.674.10892.2.4.1.1.13.1|2|1219 +1.3.6.1.4.1.674.10892.2.4.1.1.13.2|2|113 +1.3.6.1.4.1.674.10892.2.4.1.1.14.1|2|111 +1.3.6.1.4.1.674.10892.2.4.1.1.14.2|2|827 +1.3.6.1.4.1.674.10892.2.4.2.1.2.1|2|27 +1.3.6.1.4.1.674.10892.2.4.2.1.2.2|2|86 +1.3.6.1.4.1.674.10892.5.1.1.1.0|4x|717561696e746c79204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.1.1.2.0|4|acted +1.3.6.1.4.1.674.10892.5.1.1.3.0|4x|6f78656e204a61646564206275742064726976696e67206163746564206f78656e +1.3.6.1.4.1.674.10892.5.1.1.4.0|4x|6163746564207a6f6d62696573207a6f6d6269657320717561696e746c792064726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.1.1.5.0|4x|7a6f6d62696573206b65707420616374656420627574207468656972204a61646564 +1.3.6.1.4.1.674.10892.5.1.1.6.0|4x|717561696e746c79206f78656e2062757420746865697220666f727761726420627574 +1.3.6.1.4.1.674.10892.5.1.1.7.0|2|17 +1.3.6.1.4.1.674.10892.5.1.1.8.0|4x|616374656420666f7277617264206f78656e20717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.1.2.1.0|4x|7468656972206163746564206b65707420627574204a61646564 +1.3.6.1.4.1.674.10892.5.1.2.2.0|4x|6f78656e206163746564206b657074204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.1.2.3.0|4x|746865697220666f727761726420666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.1.3.1.0|4|custom.hostname +1.3.6.1.4.1.674.10892.5.1.3.2.0|4x|616374656420717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.5.1.3.3.0|4x|7468656972206b657074207468656972206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.1.3.4.0|4x|62757420627574 +1.3.6.1.4.1.674.10892.5.1.3.5.0|4|forward +1.3.6.1.4.1.674.10892.5.1.3.6.0|4|Ubuntu +1.3.6.1.4.1.674.10892.5.1.3.7.0|2|3 +1.3.6.1.4.1.674.10892.5.1.3.8.0|4x|4a6164656420666f727761726420717561696e746c79204a61646564206f78656e204a6164656420627574206f78656e +1.3.6.1.4.1.674.10892.5.1.3.9.0|4x|6163746564206163746564 +1.3.6.1.4.1.674.10892.5.1.3.10.0|4x|6f78656e206b6570742064726976696e67206163746564206b657074206b657074206163746564 +1.3.6.1.4.1.674.10892.5.1.3.11.0|4x|7468656972207a6f6d62696573204a6164656420666f7277617264206f78656e207a6f6d62696573206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.1.3.12.0|4|PowerEdge customFooVersion +1.3.6.1.4.1.674.10892.5.1.3.13.0|2|20 +1.3.6.1.4.1.674.10892.5.1.3.14.0|4|18.04.3 LTS (Bionic Beaver) +1.3.6.1.4.1.674.10892.5.1.3.15.0|4x|4a6164656420627574207468656972 +1.3.6.1.4.1.674.10892.5.1.3.16.0|2|28 +1.3.6.1.4.1.674.10892.5.1.3.17.0|2|9 +1.3.6.1.4.1.674.10892.5.1.3.18.0|4x|6163746564207468656972206163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.2.1.0|2|1 +1.3.6.1.4.1.674.10892.5.2.2.0|2|2 +1.3.6.1.4.1.674.10892.5.2.3.0|2|6 +1.3.6.1.4.1.674.10892.5.2.4.0|2|4 +1.3.6.1.4.1.674.10892.5.2.5.0|2|21 +1.3.6.1.4.1.674.10892.5.3.1.1.0|4|driving +1.3.6.1.4.1.674.10892.5.3.1.2.0|4x|6f78656e206b657074206163746564206f78656e207a6f6d62696573206f78656e +1.3.6.1.4.1.674.10892.5.3.1.3.0|2|1 +1.3.6.1.4.1.674.10892.5.3.1.4.0|4x|7468656972206b657074206f78656e +1.3.6.1.4.1.674.10892.5.3.1.5.0|4x|717561696e746c79206b65707420616374656420666f7277617264206f78656e206f78656e206b657074206b657074 +1.3.6.1.4.1.674.10892.5.3.1.6.0|4x|717561696e746c792064726976696e67206f78656e20666f7277617264207a6f6d62696573206f78656e206f78656e20717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.5.3.1.7.0|4x|616374656420616374656420746865697220666f7277617264 +1.3.6.1.4.1.674.10892.5.3.1.8.0|4x|666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.3.1.9.0|4|Jaded +1.3.6.1.4.1.674.10892.5.3.1.10.0|4x|6163746564207a6f6d62696573207468656972206f78656e207a6f6d6269657320666f7277617264206b657074204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.3.1.11.0|4x|627574204a6164656420746865697220666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1.1.0|2|15 +1.3.6.1.4.1.674.10892.5.4.1.2.0|2|20 +1.3.6.1.4.1.674.10892.5.4.1.3.0|2|12 +1.3.6.1.4.1.674.10892.5.4.200.10.1.1.26|2|26 +1.3.6.1.4.1.674.10892.5.4.200.10.1.1.29|2|29 +1.3.6.1.4.1.674.10892.5.4.200.10.1.2.26|2|3 +1.3.6.1.4.1.674.10892.5.4.200.10.1.2.29|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.3.26|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.3.29|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.4.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.4.29|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.5.26|4x|7a6f6d62696573206f78656e206b657074206b657074206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.200.10.1.5.29|4x|6275742062757420746865697220666f7277617264207a6f6d62696573206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.200.10.1.6.26|2|4 +1.3.6.1.4.1.674.10892.5.4.200.10.1.6.29|2|4 +1.3.6.1.4.1.674.10892.5.4.200.10.1.7.26|4x|64726976696e67206b65707420616374656420627574 +1.3.6.1.4.1.674.10892.5.4.200.10.1.7.29|4|kept +1.3.6.1.4.1.674.10892.5.4.200.10.1.8.26|4x|6b65707420627574207a6f6d6269657320666f7277617264204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.200.10.1.8.29|4|zombies +1.3.6.1.4.1.674.10892.5.4.200.10.1.9.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.9.29|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.10.26|4x|6b657074206163746564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.10.29|4x|666f727761726420717561696e746c79204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.200.10.1.11.26|4x|666f7277617264204a61646564206f78656e20666f7277617264207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.200.10.1.11.29|4x|64726976696e6720666f727761726420666f727761726420717561696e746c79207a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.5.4.200.10.1.12.26|2|6 +1.3.6.1.4.1.674.10892.5.4.200.10.1.12.29|2|6 +1.3.6.1.4.1.674.10892.5.4.200.10.1.13.26|4x|4a6164656420666f7277617264207a6f6d6269657320746865697220717561696e746c79207468656972204a61646564206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.200.10.1.13.29|4x|717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.4.200.10.1.14.26|4x|6163746564207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.14.29|4x|6b657074206163746564206b65707420666f7277617264207a6f6d6269657320717561696e746c7920746865697220666f7277617264 +1.3.6.1.4.1.674.10892.5.4.200.10.1.15.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.15.29|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.16.26|4x|666f7277617264204a6164656420717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.5.4.200.10.1.16.29|4|quaintly +1.3.6.1.4.1.674.10892.5.4.200.10.1.17.26|4x|627574207468656972206b65707420717561696e746c7920717561696e746c7920746865697220666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.17.29|4x|64726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.18.26|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.18.29|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.19.26|4x|6f78656e207468656972206f78656e +1.3.6.1.4.1.674.10892.5.4.200.10.1.19.29|4x|717561696e746c7920717561696e746c79206f78656e204a61646564206f78656e +1.3.6.1.4.1.674.10892.5.4.200.10.1.20.26|4x|6b65707420666f72776172642074686569722062757420627574 +1.3.6.1.4.1.674.10892.5.4.200.10.1.20.29|4x|6b65707420746865697220717561696e746c792064726976696e67207a6f6d62696573204a6164656420627574 +1.3.6.1.4.1.674.10892.5.4.200.10.1.21.26|2|1 +1.3.6.1.4.1.674.10892.5.4.200.10.1.21.29|2|1 +1.3.6.1.4.1.674.10892.5.4.200.10.1.22.26|4x|6b6570742062757420717561696e746c79206f78656e20717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.200.10.1.22.29|4x|61637465642074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.200.10.1.23.26|4|acted +1.3.6.1.4.1.674.10892.5.4.200.10.1.23.29|4|their +1.3.6.1.4.1.674.10892.5.4.200.10.1.24.26|2|3 +1.3.6.1.4.1.674.10892.5.4.200.10.1.24.29|2|3 +1.3.6.1.4.1.674.10892.5.4.200.10.1.25.26|4x|616374656420666f72776172642061637465642064726976696e672064726976696e6720746865697220627574204a61646564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.25.29|4x|62757420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.200.10.1.26.26|4x|6f78656e206f78656e207a6f6d62696573207a6f6d62696573204a61646564206163746564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.26.29|4x|666f72776172642064726976696e6720666f7277617264206b657074207a6f6d62696573204a6164656420627574206163746564206b657074 +1.3.6.1.4.1.674.10892.5.4.200.10.1.27.26|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.27.29|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.28.26|4x|7a6f6d6269657320746865697220717561696e746c79206163746564206b657074207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.28.29|4x|4a61646564207a6f6d62696573206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.200.10.1.29.26|4x|746865697220666f7277617264206b6570742064726976696e6720717561696e746c79206163746564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.29.29|4x|64726976696e6720666f727761726420627574206163746564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.30.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.30.29|2|6 +1.3.6.1.4.1.674.10892.5.4.200.10.1.31.26|4x|627574206f78656e207468656972206f78656e2064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.4.200.10.1.31.29|4|acted +1.3.6.1.4.1.674.10892.5.4.200.10.1.42.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.42.29|2|4 +1.3.6.1.4.1.674.10892.5.4.200.10.1.43.26|4x|627574207a6f6d6269657320666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.43.29|4x|64726976696e6720616374656420666f727761726420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.200.10.1.44.26|2|1 +1.3.6.1.4.1.674.10892.5.4.200.10.1.44.29|2|1 +1.3.6.1.4.1.674.10892.5.4.200.10.1.45.26|4x|6f78656e20666f7277617264207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.45.29|4x|6f78656e206b657074206b657074 +1.3.6.1.4.1.674.10892.5.4.200.10.1.50.26|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.50.29|2|4 +1.3.6.1.4.1.674.10892.5.4.200.10.1.51.26|4x|7a6f6d62696573206b657074206b65707420616374656420627574 +1.3.6.1.4.1.674.10892.5.4.200.10.1.51.29|4x|666f727761726420666f7277617264207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.52.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.52.29|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.53.26|4x|7a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.674.10892.5.4.200.10.1.53.29|4x|7468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.200.10.1.54.26|2|1 +1.3.6.1.4.1.674.10892.5.4.200.10.1.54.29|2|6 +1.3.6.1.4.1.674.10892.5.4.200.10.1.55.26|4x|64726976696e6720627574206f78656e204a61646564206275742074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.200.10.1.55.29|4x|64726976696e672074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.200.10.1.56.26|2|6 +1.3.6.1.4.1.674.10892.5.4.200.10.1.56.29|2|4 +1.3.6.1.4.1.674.10892.5.4.200.10.1.57.26|4x|717561696e746c792064726976696e6720746865697220616374656420666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.200.10.1.57.29|4x|717561696e746c7920717561696e746c79206b65707420666f7277617264206275742064726976696e67206b657074207468656972207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.58.26|2|5 +1.3.6.1.4.1.674.10892.5.4.200.10.1.58.29|2|3 +1.3.6.1.4.1.674.10892.5.4.200.10.1.59.26|4x|6f78656e2074686569722064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.200.10.1.59.29|4x|4a61646564206163746564207468656972206163746564207a6f6d62696573206f78656e207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.60.26|2|1 +1.3.6.1.4.1.674.10892.5.4.200.10.1.60.29|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.61.26|4x|6b657074207a6f6d62696573206163746564207a6f6d62696573207a6f6d6269657320616374656420746865697220627574207468656972 +1.3.6.1.4.1.674.10892.5.4.200.10.1.61.29|4x|666f7277617264207a6f6d6269657320717561696e746c7920717561696e746c79204a6164656420627574204a61646564206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.5.4.200.10.1.62.26|4x|7468656972207a6f6d62696573204a61646564204a61646564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.62.29|4x|4a6164656420666f7277617264206b6570742064726976696e67206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.4.200.10.1.63.26|2|2 +1.3.6.1.4.1.674.10892.5.4.200.10.1.63.29|2|6 +1.3.6.1.4.1.674.10892.5.4.200.10.1.64.26|4x|6163746564206b657074204a61646564206f78656e +1.3.6.1.4.1.674.10892.5.4.200.10.1.64.29|4x|4a616465642064726976696e6720717561696e746c79206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.1.0|2|17 +1.3.6.1.4.1.674.10892.5.4.300.2.0|2|19 +1.3.6.1.4.1.674.10892.5.4.300.10.1.1.22|2|22 +1.3.6.1.4.1.674.10892.5.4.300.10.1.1.28|2|28 +1.3.6.1.4.1.674.10892.5.4.300.10.1.2.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.2.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.3.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.3.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.4.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.4.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.5.22|2|3 +1.3.6.1.4.1.674.10892.5.4.300.10.1.5.28|2|21 +1.3.6.1.4.1.674.10892.5.4.300.10.1.6.22|2|23 +1.3.6.1.4.1.674.10892.5.4.300.10.1.6.28|2|17 +1.3.6.1.4.1.674.10892.5.4.300.10.1.7.22|4x|6163746564207468656972207468656972207a6f6d6269657320666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.10.1.7.28|4|their +1.3.6.1.4.1.674.10892.5.4.300.10.1.8.22|4x|6b657074206b657074206f78656e +1.3.6.1.4.1.674.10892.5.4.300.10.1.8.28|4x|7a6f6d6269657320616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.10.1.9.22|4x|666f727761726420746865697220666f7277617264207468656972206f78656e206275742064726976696e67206f78656e +1.3.6.1.4.1.674.10892.5.4.300.10.1.9.28|4x|64726976696e67207468656972204a61646564206f78656e2064726976696e67207a6f6d62696573204a616465642064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.10.1.10.22|4x|6f78656e204a61646564 +1.3.6.1.4.1.674.10892.5.4.300.10.1.10.28|4|driving +1.3.6.1.4.1.674.10892.5.4.300.10.1.11.22|4|kept +1.3.6.1.4.1.674.10892.5.4.300.10.1.11.28|4|acted +1.3.6.1.4.1.674.10892.5.4.300.10.1.12.22|2|18 +1.3.6.1.4.1.674.10892.5.4.300.10.1.12.28|2|18 +1.3.6.1.4.1.674.10892.5.4.300.10.1.13.22|2|27 +1.3.6.1.4.1.674.10892.5.4.300.10.1.13.28|2|14 +1.3.6.1.4.1.674.10892.5.4.300.10.1.14.22|2|7 +1.3.6.1.4.1.674.10892.5.4.300.10.1.14.28|2|5 +1.3.6.1.4.1.674.10892.5.4.300.10.1.15.22|4|oxen +1.3.6.1.4.1.674.10892.5.4.300.10.1.15.28|4|but +1.3.6.1.4.1.674.10892.5.4.300.10.1.24.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.24.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.25.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.25.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.28.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.28.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.29.22|2|10 +1.3.6.1.4.1.674.10892.5.4.300.10.1.29.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.30.22|2|0 +1.3.6.1.4.1.674.10892.5.4.300.10.1.30.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.31.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.31.28|2|8 +1.3.6.1.4.1.674.10892.5.4.300.10.1.32.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.32.28|2|9 +1.3.6.1.4.1.674.10892.5.4.300.10.1.33.22|2|31 +1.3.6.1.4.1.674.10892.5.4.300.10.1.33.28|2|16 +1.3.6.1.4.1.674.10892.5.4.300.10.1.34.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.34.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.35.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.35.28|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.36.22|2|19 +1.3.6.1.4.1.674.10892.5.4.300.10.1.36.28|2|25 +1.3.6.1.4.1.674.10892.5.4.300.10.1.38.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.38.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.39.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.10.1.39.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.44.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.44.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.45.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.45.28|2|2 +1.3.6.1.4.1.674.10892.5.4.300.10.1.46.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.46.28|2|1 +1.3.6.1.4.1.674.10892.5.4.300.10.1.47.22|2|22 +1.3.6.1.4.1.674.10892.5.4.300.10.1.47.28|2|18 +1.3.6.1.4.1.674.10892.5.4.300.10.1.48.22|4x|7468656972206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.4.300.10.1.48.28|4x|6b657074204a61646564207468656972206163746564 +1.3.6.1.4.1.674.10892.5.4.300.10.1.49.22|4x|7a6f6d62696573207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.10.1.49.28|4x|616374656420627574204a61646564207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.5.4.300.40.1.1.10.22|2|10 +1.3.6.1.4.1.674.10892.5.4.300.40.1.1.16.20|2|16 +1.3.6.1.4.1.674.10892.5.4.300.40.1.2.10.22|2|22 +1.3.6.1.4.1.674.10892.5.4.300.40.1.2.16.20|2|20 +1.3.6.1.4.1.674.10892.5.4.300.40.1.3.10.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.40.1.3.16.20|2|8 +1.3.6.1.4.1.674.10892.5.4.300.40.1.4.10.22|2|4 +1.3.6.1.4.1.674.10892.5.4.300.40.1.4.16.20|2|8 +1.3.6.1.4.1.674.10892.5.4.300.40.1.5.10.22|4x|666f7277617264204a616465642064726976696e672061637465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.40.1.5.16.20|4x|717561696e746c792064726976696e67204a6164656420717561696e746c79206163746564206b657074207a6f6d62696573207a6f6d6269657320627574 +1.3.6.1.4.1.674.10892.5.4.300.40.1.6.10.22|2|1 +1.3.6.1.4.1.674.10892.5.4.300.40.1.6.16.20|2|1 +1.3.6.1.4.1.674.10892.5.4.300.40.1.7.10.22|2|2 +1.3.6.1.4.1.674.10892.5.4.300.40.1.7.16.20|2|4 +1.3.6.1.4.1.674.10892.5.4.300.40.1.8.10.22|4x|4a616465642074686569722074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.300.40.1.8.16.20|4x|62757420627574206b6570742062757420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.300.50.1.1.3.26|2|3 +1.3.6.1.4.1.674.10892.5.4.300.50.1.1.31.19|2|31 +1.3.6.1.4.1.674.10892.5.4.300.50.1.2.3.26|2|26 +1.3.6.1.4.1.674.10892.5.4.300.50.1.2.31.19|2|19 +1.3.6.1.4.1.674.10892.5.4.300.50.1.3.3.26|2|2 +1.3.6.1.4.1.674.10892.5.4.300.50.1.3.31.19|2|6 +1.3.6.1.4.1.674.10892.5.4.300.50.1.4.3.26|2|4 +1.3.6.1.4.1.674.10892.5.4.300.50.1.4.31.19|2|1 +1.3.6.1.4.1.674.10892.5.4.300.50.1.5.3.26|2|6 +1.3.6.1.4.1.674.10892.5.4.300.50.1.5.31.19|2|4 +1.3.6.1.4.1.674.10892.5.4.300.50.1.7.3.26|4x|61637465642061637465642064726976696e67206163746564 +1.3.6.1.4.1.674.10892.5.4.300.50.1.7.31.19|4x|666f7277617264207a6f6d62696573206b657074206b657074 +1.3.6.1.4.1.674.10892.5.4.300.50.1.8.1.1|4|2.5.4 +1.3.6.1.4.1.674.10892.5.4.300.50.1.8.3.26|4x|6f78656e206163746564204a6164656420666f7277617264207a6f6d626965732064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.50.1.8.31.19|4x|666f7277617264206b657074206f78656e +1.3.6.1.4.1.674.10892.5.4.300.50.1.11.3.26|4x|6f78656e2064726976696e6720717561696e746c79204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.4.300.50.1.11.31.19|4x|64726976696e6720666f7277617264207a6f6d62696573204a61646564206b657074206b657074204a61646564204a61646564204a61646564 +1.3.6.1.4.1.674.10892.5.4.300.60.1.1.3.10|2|3 +1.3.6.1.4.1.674.10892.5.4.300.60.1.1.23.26|2|23 +1.3.6.1.4.1.674.10892.5.4.300.60.1.2.3.10|2|10 +1.3.6.1.4.1.674.10892.5.4.300.60.1.2.23.26|2|26 +1.3.6.1.4.1.674.10892.5.4.300.60.1.3.3.10|2|6 +1.3.6.1.4.1.674.10892.5.4.300.60.1.3.23.26|2|1 +1.3.6.1.4.1.674.10892.5.4.300.60.1.4.3.10|2|4 +1.3.6.1.4.1.674.10892.5.4.300.60.1.4.23.26|2|6 +1.3.6.1.4.1.674.10892.5.4.300.60.1.5.3.10|2|4 +1.3.6.1.4.1.674.10892.5.4.300.60.1.5.23.26|2|5 +1.3.6.1.4.1.674.10892.5.4.300.60.1.6.3.10|2|14 +1.3.6.1.4.1.674.10892.5.4.300.60.1.6.23.26|2|4 +1.3.6.1.4.1.674.10892.5.4.300.60.1.7.3.10|2|21 +1.3.6.1.4.1.674.10892.5.4.300.60.1.7.23.26|2|22 +1.3.6.1.4.1.674.10892.5.4.300.60.1.8.3.10|4x|6163746564206163746564204a61646564206f78656e206f78656e207a6f6d6269657320627574206b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.60.1.8.23.26|4x|64726976696e67207468656972206163746564207468656972206f78656e20666f7277617264204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.300.60.1.9.3.10|2|1 +1.3.6.1.4.1.674.10892.5.4.300.60.1.9.23.26|2|26 +1.3.6.1.4.1.674.10892.5.4.300.60.1.11.3.10|4x|616374656420616374656420746865697220717561696e746c79206f78656e207a6f6d626965732064726976696e67206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.60.1.11.23.26|4x|746865697220627574206163746564206f78656e20627574206b657074 +1.3.6.1.4.1.674.10892.5.4.300.70.1.1.18.23|2|18 +1.3.6.1.4.1.674.10892.5.4.300.70.1.1.29.21|2|29 +1.3.6.1.4.1.674.10892.5.4.300.70.1.2.18.23|2|23 +1.3.6.1.4.1.674.10892.5.4.300.70.1.2.29.21|2|21 +1.3.6.1.4.1.674.10892.5.4.300.70.1.3.18.23|2|1 +1.3.6.1.4.1.674.10892.5.4.300.70.1.3.29.21|2|4 +1.3.6.1.4.1.674.10892.5.4.300.70.1.4.18.23|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.4.29.21|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.5.18.23|2|4 +1.3.6.1.4.1.674.10892.5.4.300.70.1.5.29.21|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.6.18.23|2|3 +1.3.6.1.4.1.674.10892.5.4.300.70.1.6.29.21|2|1 +1.3.6.1.4.1.674.10892.5.4.300.70.1.7.18.23|2|2 +1.3.6.1.4.1.674.10892.5.4.300.70.1.7.29.21|2|1 +1.3.6.1.4.1.674.10892.5.4.300.70.1.8.18.23|4x|4a61646564206f78656e2064726976696e67207a6f6d62696573206163746564206f78656e +1.3.6.1.4.1.674.10892.5.4.300.70.1.8.29.21|4x|6b657074207a6f6d62696573206f78656e206b6570742064726976696e6720666f7277617264206f78656e +1.3.6.1.4.1.674.10892.5.4.300.90.1.1.2.16|2|2 +1.3.6.1.4.1.674.10892.5.4.300.90.1.1.6.30|2|6 +1.3.6.1.4.1.674.10892.5.4.300.90.1.2.2.16|2|16 +1.3.6.1.4.1.674.10892.5.4.300.90.1.2.6.30|2|30 +1.3.6.1.4.1.674.10892.5.4.300.90.1.3.2.16|2|10 +1.3.6.1.4.1.674.10892.5.4.300.90.1.3.6.30|2|13 +1.3.6.1.4.1.674.10892.5.4.300.90.1.4.2.16|2|2 +1.3.6.1.4.1.674.10892.5.4.300.90.1.4.6.30|2|3 +1.3.6.1.4.1.674.10892.5.4.300.90.1.5.2.16|2|3 +1.3.6.1.4.1.674.10892.5.4.300.90.1.5.6.30|2|2 +1.3.6.1.4.1.674.10892.5.4.300.90.1.6.2.16|4x|74686569722061637465642064726976696e67204a61646564 +1.3.6.1.4.1.674.10892.5.4.300.90.1.6.6.30|4x|717561696e746c7920717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.5.4.300.90.1.7.2.16|4x|746865697220666f7277617264206b657074206163746564 +1.3.6.1.4.1.674.10892.5.4.300.90.1.7.6.30|4x|7468656972206f78656e206b65707420746865697220627574206163746564 +1.3.6.1.4.1.674.10892.5.4.300.90.1.8.2.16|4|their +1.3.6.1.4.1.674.10892.5.4.300.90.1.8.6.30|4|Jaded +1.3.6.1.4.1.674.10892.5.4.300.90.1.9.2.16|4x|4a61646564206f78656e204a6164656420717561696e746c7920627574207468656972206275742064726976696e67207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.300.90.1.9.6.30|4x|4a61646564206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.4.300.90.1.10.2.16|4x|616374656420627574 +1.3.6.1.4.1.674.10892.5.4.300.90.1.10.6.30|4x|666f72776172642064726976696e67204a61646564206b657074207468656972206b6570742062757420627574206b657074 +1.3.6.1.4.1.674.10892.5.4.300.90.1.11.2.16|4|kept +1.3.6.1.4.1.674.10892.5.4.300.90.1.11.6.30|4x|6b657074206b65707420666f7277617264207a6f6d6269657320666f7277617264206b657074204a61646564206163746564206b657074 +1.3.6.1.4.1.674.10892.5.4.300.90.1.12.2.16|4x|7a6f6d62696573206b657074207a6f6d62696573207a6f6d6269657320616374656420627574207468656972 +1.3.6.1.4.1.674.10892.5.4.300.90.1.12.6.30|4|their +1.3.6.1.4.1.674.10892.5.4.600.10.1.1.5.22|2|5 +1.3.6.1.4.1.674.10892.5.4.600.10.1.1.26.20|2|26 +1.3.6.1.4.1.674.10892.5.4.600.10.1.2.5.22|2|22 +1.3.6.1.4.1.674.10892.5.4.600.10.1.2.26.20|2|20 +1.3.6.1.4.1.674.10892.5.4.600.10.1.3.5.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.10.1.3.26.20|2|4 +1.3.6.1.4.1.674.10892.5.4.600.10.1.4.5.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.10.1.4.26.20|2|1 +1.3.6.1.4.1.674.10892.5.4.600.10.1.5.5.22|2|5 +1.3.6.1.4.1.674.10892.5.4.600.10.1.5.26.20|2|6 +1.3.6.1.4.1.674.10892.5.4.600.10.1.6.5.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.10.1.6.26.20|2|9 +1.3.6.1.4.1.674.10892.5.4.600.10.1.7.5.22|4x|717561696e746c7920717561696e746c79206f78656e206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.600.10.1.7.26.20|4x|6b657074207a6f6d62696573204a616465642064726976696e67207a6f6d62696573204a61646564204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.600.10.1.8.5.22|2|4 +1.3.6.1.4.1.674.10892.5.4.600.10.1.8.26.20|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.1.16.26|2|16 +1.3.6.1.4.1.674.10892.5.4.600.12.1.1.17.15|2|17 +1.3.6.1.4.1.674.10892.5.4.600.12.1.2.16.26|2|26 +1.3.6.1.4.1.674.10892.5.4.600.12.1.2.17.15|2|15 +1.3.6.1.4.1.674.10892.5.4.600.12.1.3.16.26|2|4 +1.3.6.1.4.1.674.10892.5.4.600.12.1.3.17.15|2|2 +1.3.6.1.4.1.674.10892.5.4.600.12.1.4.16.26|2|10 +1.3.6.1.4.1.674.10892.5.4.600.12.1.4.17.15|2|10 +1.3.6.1.4.1.674.10892.5.4.600.12.1.5.16.26|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.5.17.15|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.6.16.26|2|7 +1.3.6.1.4.1.674.10892.5.4.600.12.1.6.17.15|2|4 +1.3.6.1.4.1.674.10892.5.4.600.12.1.7.16.26|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.7.17.15|2|1 +1.3.6.1.4.1.674.10892.5.4.600.12.1.8.16.26|4x|7a6f6d626965732064726976696e672064726976696e67206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.4.600.12.1.8.17.15|4x|7a6f6d62696573207468656972207a6f6d62696573207468656972206163746564204a61646564204a61646564 +1.3.6.1.4.1.674.10892.5.4.600.12.1.9.16.26|2|26 +1.3.6.1.4.1.674.10892.5.4.600.12.1.9.17.15|2|19 +1.3.6.1.4.1.674.10892.5.4.600.12.1.10.16.26|2|6 +1.3.6.1.4.1.674.10892.5.4.600.12.1.10.17.15|2|11 +1.3.6.1.4.1.674.10892.5.4.600.12.1.11.16.26|2|16 +1.3.6.1.4.1.674.10892.5.4.600.12.1.11.17.15|2|2 +1.3.6.1.4.1.674.10892.5.4.600.12.1.12.16.26|2|1 +1.3.6.1.4.1.674.10892.5.4.600.12.1.12.17.15|2|3 +1.3.6.1.4.1.674.10892.5.4.600.12.1.13.16.26|2|0 +1.3.6.1.4.1.674.10892.5.4.600.12.1.13.17.15|2|1 +1.3.6.1.4.1.674.10892.5.4.600.12.1.14.16.26|2|2 +1.3.6.1.4.1.674.10892.5.4.600.12.1.14.17.15|2|4 +1.3.6.1.4.1.674.10892.5.4.600.12.1.15.16.26|4x|7a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.12.1.15.17.15|4|zombies +1.3.6.1.4.1.674.10892.5.4.600.12.1.16.16.26|2|19 +1.3.6.1.4.1.674.10892.5.4.600.12.1.16.17.15|2|12 +1.3.6.1.4.1.674.10892.5.4.600.20.1.1.12.15|2|12 +1.3.6.1.4.1.674.10892.5.4.600.20.1.1.22.19|2|22 +1.3.6.1.4.1.674.10892.5.4.600.20.1.2.12.15|2|15 +1.3.6.1.4.1.674.10892.5.4.600.20.1.2.22.19|2|19 +1.3.6.1.4.1.674.10892.5.4.600.20.1.3.12.15|2|6 +1.3.6.1.4.1.674.10892.5.4.600.20.1.3.22.19|2|2 +1.3.6.1.4.1.674.10892.5.4.600.20.1.4.12.15|2|1 +1.3.6.1.4.1.674.10892.5.4.600.20.1.4.22.19|2|1 +1.3.6.1.4.1.674.10892.5.4.600.20.1.5.12.15|2|5 +1.3.6.1.4.1.674.10892.5.4.600.20.1.5.22.19|2|6 +1.3.6.1.4.1.674.10892.5.4.600.20.1.6.12.15|2|19 +1.3.6.1.4.1.674.10892.5.4.600.20.1.6.22.19|2|29 +1.3.6.1.4.1.674.10892.5.4.600.20.1.7.12.15|2|6 +1.3.6.1.4.1.674.10892.5.4.600.20.1.7.22.19|2|3 +1.3.6.1.4.1.674.10892.5.4.600.20.1.8.12.15|4x|6275742064726976696e6720616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.600.20.1.8.22.19|4x|4a61646564206275742062757420717561696e746c79206f78656e204a61646564206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.20.1.9.12.15|2|0 +1.3.6.1.4.1.674.10892.5.4.600.20.1.9.22.19|2|11 +1.3.6.1.4.1.674.10892.5.4.600.20.1.10.12.15|2|25 +1.3.6.1.4.1.674.10892.5.4.600.20.1.10.22.19|2|21 +1.3.6.1.4.1.674.10892.5.4.600.20.1.11.12.15|2|6 +1.3.6.1.4.1.674.10892.5.4.600.20.1.11.22.19|2|11 +1.3.6.1.4.1.674.10892.5.4.600.20.1.12.12.15|2|10 +1.3.6.1.4.1.674.10892.5.4.600.20.1.12.22.19|2|1 +1.3.6.1.4.1.674.10892.5.4.600.20.1.13.12.15|2|25 +1.3.6.1.4.1.674.10892.5.4.600.20.1.13.22.19|2|21 +1.3.6.1.4.1.674.10892.5.4.600.20.1.14.12.15|2|22 +1.3.6.1.4.1.674.10892.5.4.600.20.1.14.22.19|2|15 +1.3.6.1.4.1.674.10892.5.4.600.20.1.15.12.15|2|4 +1.3.6.1.4.1.674.10892.5.4.600.20.1.15.22.19|2|8 +1.3.6.1.4.1.674.10892.5.4.600.20.1.16.12.15|2|2 +1.3.6.1.4.1.674.10892.5.4.600.20.1.16.22.19|2|2 +1.3.6.1.4.1.674.10892.5.4.600.30.1.1.9.28|2|9 +1.3.6.1.4.1.674.10892.5.4.600.30.1.1.18.4|2|18 +1.3.6.1.4.1.674.10892.5.4.600.30.1.2.9.28|2|28 +1.3.6.1.4.1.674.10892.5.4.600.30.1.2.18.4|2|4 +1.3.6.1.4.1.674.10892.5.4.600.30.1.3.9.28|2|6 +1.3.6.1.4.1.674.10892.5.4.600.30.1.3.18.4|2|1 +1.3.6.1.4.1.674.10892.5.4.600.30.1.4.9.28|2|1 +1.3.6.1.4.1.674.10892.5.4.600.30.1.4.18.4|2|6 +1.3.6.1.4.1.674.10892.5.4.600.30.1.5.9.28|2|2 +1.3.6.1.4.1.674.10892.5.4.600.30.1.5.18.4|2|5 +1.3.6.1.4.1.674.10892.5.4.600.30.1.6.9.28|2|16 +1.3.6.1.4.1.674.10892.5.4.600.30.1.6.18.4|2|10 +1.3.6.1.4.1.674.10892.5.4.600.30.1.7.9.28|2|26 +1.3.6.1.4.1.674.10892.5.4.600.30.1.7.18.4|2|26 +1.3.6.1.4.1.674.10892.5.4.600.30.1.8.9.28|4x|64726976696e67207a6f6d626965732064726976696e6720717561696e746c7920717561696e746c79206b657074206163746564 +1.3.6.1.4.1.674.10892.5.4.600.30.1.8.18.4|4x|4a61646564206b6570742062757420666f7277617264206163746564204a6164656420666f7277617264206b657074207468656972 +1.3.6.1.4.1.674.10892.5.4.600.30.1.9.9.28|2|1 +1.3.6.1.4.1.674.10892.5.4.600.30.1.9.18.4|2|14 +1.3.6.1.4.1.674.10892.5.4.600.30.1.10.9.28|2|2 +1.3.6.1.4.1.674.10892.5.4.600.30.1.10.18.4|2|19 +1.3.6.1.4.1.674.10892.5.4.600.30.1.11.9.28|2|25 +1.3.6.1.4.1.674.10892.5.4.600.30.1.11.18.4|2|13 +1.3.6.1.4.1.674.10892.5.4.600.30.1.12.9.28|2|12 +1.3.6.1.4.1.674.10892.5.4.600.30.1.12.18.4|2|10 +1.3.6.1.4.1.674.10892.5.4.600.30.1.13.9.28|2|19 +1.3.6.1.4.1.674.10892.5.4.600.30.1.13.18.4|2|19 +1.3.6.1.4.1.674.10892.5.4.600.30.1.14.9.28|2|31 +1.3.6.1.4.1.674.10892.5.4.600.30.1.14.18.4|2|23 +1.3.6.1.4.1.674.10892.5.4.600.30.1.15.9.28|2|8 +1.3.6.1.4.1.674.10892.5.4.600.30.1.15.18.4|2|8 +1.3.6.1.4.1.674.10892.5.4.600.30.1.16.9.28|2|2 +1.3.6.1.4.1.674.10892.5.4.600.30.1.16.18.4|2|1 +1.3.6.1.4.1.674.10892.5.4.600.50.1.1.20.31|2|20 +1.3.6.1.4.1.674.10892.5.4.600.50.1.1.21.13|2|21 +1.3.6.1.4.1.674.10892.5.4.600.50.1.2.20.31|2|31 +1.3.6.1.4.1.674.10892.5.4.600.50.1.2.21.13|2|13 +1.3.6.1.4.1.674.10892.5.4.600.50.1.3.20.31|2|1 +1.3.6.1.4.1.674.10892.5.4.600.50.1.3.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.4.20.31|2|6 +1.3.6.1.4.1.674.10892.5.4.600.50.1.4.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.5.20.31|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.5.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.6.20.31|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.6.21.13|2|4 +1.3.6.1.4.1.674.10892.5.4.600.50.1.7.20.31|4x|717561696e746c7920627574206f78656e204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.50.1.7.21.13|4x|6b657074206b6570742074686569722062757420717561696e746c79206b65707420717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.60.1.1.12.14|2|12 +1.3.6.1.4.1.674.10892.5.4.600.60.1.1.22.22|2|22 +1.3.6.1.4.1.674.10892.5.4.600.60.1.2.12.14|2|14 +1.3.6.1.4.1.674.10892.5.4.600.60.1.2.22.22|2|22 +1.3.6.1.4.1.674.10892.5.4.600.60.1.3.12.14|2|2 +1.3.6.1.4.1.674.10892.5.4.600.60.1.3.22.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.60.1.4.12.14|2|6 +1.3.6.1.4.1.674.10892.5.4.600.60.1.4.22.22|2|6 +1.3.6.1.4.1.674.10892.5.4.600.60.1.5.12.14|2|4 +1.3.6.1.4.1.674.10892.5.4.600.60.1.5.22.22|2|3 +1.3.6.1.4.1.674.10892.5.4.600.60.1.6.12.14|4x|7a6f6d6269657320717561696e746c7920666f727761726420616374656420717561696e746c79206163746564204a61646564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.600.60.1.6.22.22|4x|616374656420717561696e746c79207468656972204a61646564206f78656e20666f727761726420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.600.60.1.7.12.14|2|20 +1.3.6.1.4.1.674.10892.5.4.600.60.1.7.22.22|2|7 +1.3.6.1.4.1.674.10892.5.4.600.60.1.8.12.14|4x|717561696e746c79206163746564206163746564206f78656e +1.3.6.1.4.1.674.10892.5.4.600.60.1.8.22.22|4x|746865697220717561696e746c79206b657074207468656972 +1.3.6.1.4.1.674.10892.5.4.600.60.1.9.12.14|2|15 +1.3.6.1.4.1.674.10892.5.4.600.60.1.9.22.22|2|26 +1.3.6.1.4.1.674.10892.5.4.600.60.1.10.12.14|4x|717561696e746c7920717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.600.60.1.10.22.22|4x|627574206f78656e20717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.60.1.11.12.14|4x|7a6f6d62696573206b657074206f78656e2064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.60.1.11.22.22|4x|6b657074206b657074206b657074207468656972206f78656e +1.3.6.1.4.1.674.10892.5.4.600.60.1.12.12.14|2|21 +1.3.6.1.4.1.674.10892.5.4.600.60.1.12.22.22|2|29 +1.3.6.1.4.1.674.10892.5.4.600.60.1.13.12.14|4x|7468656972207a6f6d62696573206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.60.1.13.22.22|4x|64726976696e672064726976696e67204a6164656420627574 +1.3.6.1.4.1.674.10892.5.4.600.60.1.14.12.14|4x|717561696e746c7920717561696e746c792064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.60.1.14.22.22|4x|6163746564207468656972204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.600.60.1.15.12.14|2|6 +1.3.6.1.4.1.674.10892.5.4.600.60.1.15.22.22|2|2 +1.3.6.1.4.1.674.10892.5.4.600.60.1.16.12.14|2|4 +1.3.6.1.4.1.674.10892.5.4.600.60.1.16.22.22|2|1 +1.3.6.1.4.1.674.10892.5.4.600.60.1.17.12.14|2|1 +1.3.6.1.4.1.674.10892.5.4.600.60.1.17.22.22|2|1 +1.3.6.1.4.1.674.10892.5.4.600.60.1.18.12.14|2|1 +1.3.6.1.4.1.674.10892.5.4.600.60.1.18.22.22|2|1 +1.3.6.1.4.1.674.10892.5.4.600.60.1.19.12.14|2|21 +1.3.6.1.4.1.674.10892.5.4.600.60.1.19.22.22|2|0 +1.3.6.1.4.1.674.10892.5.4.600.60.1.20.12.14|2|25 +1.3.6.1.4.1.674.10892.5.4.600.60.1.20.22.22|2|14 +1.3.6.1.4.1.674.10892.5.4.600.60.1.21.12.14|2|10 +1.3.6.1.4.1.674.10892.5.4.600.60.1.21.22.22|2|8 +1.3.6.1.4.1.674.10892.5.4.700.10.1.1.1.19|2|1 +1.3.6.1.4.1.674.10892.5.4.700.10.1.1.6.31|2|6 +1.3.6.1.4.1.674.10892.5.4.700.10.1.2.1.19|2|19 +1.3.6.1.4.1.674.10892.5.4.700.10.1.2.6.31|2|31 +1.3.6.1.4.1.674.10892.5.4.700.10.1.3.1.19|2|2 +1.3.6.1.4.1.674.10892.5.4.700.10.1.3.6.31|2|1 +1.3.6.1.4.1.674.10892.5.4.700.10.1.4.1.19|2|6 +1.3.6.1.4.1.674.10892.5.4.700.10.1.4.6.31|2|4 +1.3.6.1.4.1.674.10892.5.4.700.10.1.5.1.19|2|4 +1.3.6.1.4.1.674.10892.5.4.700.10.1.5.6.31|2|7 +1.3.6.1.4.1.674.10892.5.4.700.10.1.6.1.19|2|6 +1.3.6.1.4.1.674.10892.5.4.700.10.1.6.6.31|2|29 +1.3.6.1.4.1.674.10892.5.4.700.10.1.7.1.19|4x|64726976696e67206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.5.4.700.10.1.7.6.31|4x|7468656972204a6164656420717561696e746c79206275742062757420746865697220717561696e746c79206b657074206163746564 +1.3.6.1.4.1.674.10892.5.4.700.10.1.8.1.19|2|3 +1.3.6.1.4.1.674.10892.5.4.700.10.1.8.6.31|2|6 +1.3.6.1.4.1.674.10892.5.4.700.12.1.1.8.11|2|8 +1.3.6.1.4.1.674.10892.5.4.700.12.1.1.19.3|2|19 +1.3.6.1.4.1.674.10892.5.4.700.12.1.2.8.11|2|11 +1.3.6.1.4.1.674.10892.5.4.700.12.1.2.19.3|2|3 +1.3.6.1.4.1.674.10892.5.4.700.12.1.3.8.11|2|2 +1.3.6.1.4.1.674.10892.5.4.700.12.1.3.19.3|2|1 +1.3.6.1.4.1.674.10892.5.4.700.12.1.4.8.11|2|2 +1.3.6.1.4.1.674.10892.5.4.700.12.1.4.19.3|2|1 +1.3.6.1.4.1.674.10892.5.4.700.12.1.5.8.11|2|2 +1.3.6.1.4.1.674.10892.5.4.700.12.1.5.19.3|2|5 +1.3.6.1.4.1.674.10892.5.4.700.12.1.6.8.11|2|11 +1.3.6.1.4.1.674.10892.5.4.700.12.1.6.19.3|2|21 +1.3.6.1.4.1.674.10892.5.4.700.12.1.7.8.11|2|9 +1.3.6.1.4.1.674.10892.5.4.700.12.1.7.19.3|2|10 +1.3.6.1.4.1.674.10892.5.4.700.12.1.8.8.11|4|acted +1.3.6.1.4.1.674.10892.5.4.700.12.1.8.19.3|4x|6163746564206f78656e20627574207a6f6d626965732064726976696e67206163746564204a61646564 +1.3.6.1.4.1.674.10892.5.4.700.12.1.9.8.11|2|23 +1.3.6.1.4.1.674.10892.5.4.700.12.1.9.19.3|2|18 +1.3.6.1.4.1.674.10892.5.4.700.12.1.10.8.11|2|3 +1.3.6.1.4.1.674.10892.5.4.700.12.1.10.19.3|2|26 +1.3.6.1.4.1.674.10892.5.4.700.12.1.11.8.11|2|13 +1.3.6.1.4.1.674.10892.5.4.700.12.1.11.19.3|2|18 +1.3.6.1.4.1.674.10892.5.4.700.12.1.12.8.11|2|7 +1.3.6.1.4.1.674.10892.5.4.700.12.1.12.19.3|2|17 +1.3.6.1.4.1.674.10892.5.4.700.12.1.13.8.11|2|21 +1.3.6.1.4.1.674.10892.5.4.700.12.1.13.19.3|2|7 +1.3.6.1.4.1.674.10892.5.4.700.12.1.14.8.11|2|7 +1.3.6.1.4.1.674.10892.5.4.700.12.1.14.19.3|2|30 +1.3.6.1.4.1.674.10892.5.4.700.12.1.15.8.11|2|11 +1.3.6.1.4.1.674.10892.5.4.700.12.1.15.19.3|2|4 +1.3.6.1.4.1.674.10892.5.4.700.12.1.16.8.11|2|4 +1.3.6.1.4.1.674.10892.5.4.700.12.1.16.19.3|2|2 +1.3.6.1.4.1.674.10892.5.4.700.12.1.17.8.11|2|8 +1.3.6.1.4.1.674.10892.5.4.700.12.1.17.19.3|2|2 +1.3.6.1.4.1.674.10892.5.4.700.12.1.18.8.11|2|1 +1.3.6.1.4.1.674.10892.5.4.700.12.1.18.19.3|2|1 +1.3.6.1.4.1.674.10892.5.4.700.12.1.19.8.11|4|acted +1.3.6.1.4.1.674.10892.5.4.700.12.1.19.19.3|4x|717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.5.4.700.20.1.1.7.28|2|7 +1.3.6.1.4.1.674.10892.5.4.700.20.1.1.15.28|2|15 +1.3.6.1.4.1.674.10892.5.4.700.20.1.2.7.28|2|28 +1.3.6.1.4.1.674.10892.5.4.700.20.1.2.15.28|2|28 +1.3.6.1.4.1.674.10892.5.4.700.20.1.3.7.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.3.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.4.7.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.4.15.28|2|6 +1.3.6.1.4.1.674.10892.5.4.700.20.1.5.7.28|2|6 +1.3.6.1.4.1.674.10892.5.4.700.20.1.5.15.28|2|3 +1.3.6.1.4.1.674.10892.5.4.700.20.1.6.7.28|2|12 +1.3.6.1.4.1.674.10892.5.4.700.20.1.6.15.28|2|14 +1.3.6.1.4.1.674.10892.5.4.700.20.1.7.7.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.7.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.8.7.28|4x|717561696e746c792074686569722062757420666f7277617264206163746564206163746564206b657074204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.700.20.1.8.15.28|4x|6275742064726976696e6720717561696e746c79206b657074204a61646564 +1.3.6.1.4.1.674.10892.5.4.700.20.1.9.7.28|2|9 +1.3.6.1.4.1.674.10892.5.4.700.20.1.9.15.28|2|24 +1.3.6.1.4.1.674.10892.5.4.700.20.1.10.7.28|2|14 +1.3.6.1.4.1.674.10892.5.4.700.20.1.10.15.28|2|22 +1.3.6.1.4.1.674.10892.5.4.700.20.1.11.7.28|2|27 +1.3.6.1.4.1.674.10892.5.4.700.20.1.11.15.28|2|1 +1.3.6.1.4.1.674.10892.5.4.700.20.1.12.7.28|2|12 +1.3.6.1.4.1.674.10892.5.4.700.20.1.12.15.28|2|25 +1.3.6.1.4.1.674.10892.5.4.700.20.1.13.7.28|2|24 +1.3.6.1.4.1.674.10892.5.4.700.20.1.13.15.28|2|7 +1.3.6.1.4.1.674.10892.5.4.700.20.1.14.7.28|2|31 +1.3.6.1.4.1.674.10892.5.4.700.20.1.14.15.28|2|22 +1.3.6.1.4.1.674.10892.5.4.700.20.1.15.7.28|2|4 +1.3.6.1.4.1.674.10892.5.4.700.20.1.15.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.700.20.1.16.7.28|2|1 +1.3.6.1.4.1.674.10892.5.4.700.20.1.16.15.28|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.1.4.24|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.1.19.1|2|19 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.2.4.24|2|24 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.2.19.1|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.3.4.24|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.3.19.1|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.4.4.24|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.4.19.1|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.5.4.24|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.5.19.1|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.7.4.24|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.7.19.1|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.8.4.24|4x|4a61646564206b6570742064726976696e672064726976696e6720666f7277617264207468656972206163746564 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.8.19.1|4|driving +1.3.6.1.4.1.674.10892.5.4.1100.30.1.9.4.24|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.9.19.1|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.10.4.24|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.10.19.1|2|18 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.11.4.24|2|27 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.11.19.1|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.12.4.24|2|20 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.12.19.1|2|9 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.13.4.24|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.13.19.1|2|0 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.14.4.24|2|15 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.14.19.1|2|7 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.16.4.24|4x|7a6f6d6269657320717561696e746c792064726976696e6720717561696e746c7920666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.16.19.1|4x|717561696e746c7920627574206b657074 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.17.4.24|2|25 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.17.19.1|2|30 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.18.4.24|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.18.19.1|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.19.4.24|2|19 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.19.19.1|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.20.4.24|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.20.19.1|2|29 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.21.4.24|2|8 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.21.19.1|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.22.4.24|2|19 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.22.19.1|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.23.4.24|4x|627574206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.23.19.1|4x|6275742064726976696e67206f78656e206275742064726976696e67206f78656e206f78656e206f78656e20666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.30.1.26.4.24|4x|746865697220666f7277617264206f78656e +1.3.6.1.4.1.674.10892.5.4.1100.30.1.26.19.1|4x|7a6f6d6269657320717561696e746c79204a6164656420627574204a616465642064726976696e6720616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.1.3.11|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.1.18.21|2|18 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.2.3.11|2|11 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.2.18.21|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.3.3.11|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.3.18.21|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.4.3.11|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.4.18.21|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.5.3.11|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.5.18.21|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.6.3.11|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.6.18.21|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.7.3.11|4x|64726976696e67207a6f6d62696573206f78656e2064726976696e67206b657074204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.32.1.7.18.21|4x|6b657074206b657074 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.1.22.21|2|22 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.1.29.4|2|29 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.2.22.21|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.2.29.4|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.3.22.21|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.3.29.4|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.4.22.21|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.4.29.4|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.5.22.21|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.5.29.4|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.7.22.21|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.7.29.4|2|26 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.8.22.21|4x|717561696e746c7920666f72776172642074686569722064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.8.29.4|4x|6b657074207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.10.22.21|4|forward +1.3.6.1.4.1.674.10892.5.4.1100.50.1.10.29.4|4x|6f78656e207468656972204a61646564 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.14.22.21|2|7 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.14.29.4|2|28 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.15.22.21|2|30 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.15.29.4|2|30 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.21.22.21|4x|666f7277617264207a6f6d62696573204a61646564206b65707420717561696e746c79206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.21.29.4|4|driving +1.3.6.1.4.1.674.10892.5.4.1100.50.1.22.22.21|4x|4a61646564206163746564207468656972204a61646564207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.22.29.4|4x|7468656972206f78656e20666f727761726420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.23.22.21|4x|6163746564204a61646564206163746564206f78656e2061637465642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.23.29.4|4x|4a61646564207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.26.22.21|4x|6f78656e20627574206163746564207468656972206f78656e206b6570742061637465642064726976696e67204a61646564 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.26.29.4|4|kept +1.3.6.1.4.1.674.10892.5.4.1100.50.1.27.22.21|2|17 +1.3.6.1.4.1.674.10892.5.4.1100.50.1.27.29.4|2|23 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.1.10.9|2|10 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.1.20.20|2|20 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.2.10.9|2|9 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.2.20.20|2|20 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.3.10.9|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.3.20.20|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.4.10.9|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.4.20.20|2|2 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.5.10.9|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.5.20.20|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.7.10.9|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.7.20.20|2|10 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.8.10.9|4|acted +1.3.6.1.4.1.674.10892.5.4.1100.80.1.8.20.20|4x|4a61646564204a61646564204a61646564206b657074204a61646564 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.9.10.9|4|device1 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.9.20.20|4|device2 +1.3.6.1.4.1.674.10892.5.4.1100.80.1.12.10.9|4|kept +1.3.6.1.4.1.674.10892.5.4.1100.80.1.12.20.20|4x|7468656972206b6570742064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.1.3.23|2|3 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.1.29.25|2|29 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.2.3.23|2|23 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.2.29.25|2|25 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.3.3.23|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.3.29.25|2|5 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.4.3.23|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.4.29.25|2|11 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.6.3.23|4x|7a6f6d62696573207468656972207a6f6d62696573206163746564206163746564207468656972206275742062757420627574 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.6.29.25|4x|7468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.7.3.23|4x|7a6f6d626965732064726976696e67206f78656e +1.3.6.1.4.1.674.10892.5.4.1100.90.1.7.29.25|4x|7468656972206b657074206b657074207468656972206b657074204a6164656420666f727761726420616374656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.15.3.23|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.15.29.25|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.16.3.23|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.16.29.25|4x|9e00e0291401 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.17.3.23|2|6 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.17.29.25|2|22 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.18.3.23|2|4 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.18.29.25|2|22 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.19.3.23|2|12 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.19.29.25|2|21 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.23.3.23|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.23.29.25|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.27.3.23|2|16 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.27.29.25|2|1 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.28.3.23|2|0 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.28.29.25|2|0 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.29.3.23|2|8 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.29.29.25|2|8 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.30.3.23|4|device1 +1.3.6.1.4.1.674.10892.5.4.1100.90.1.30.29.25|4|device2 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.1.19.17|2|19 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.1.21.21|2|21 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.2.19.17|2|17 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.2.21.21|2|21 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.3.19.17|2|4 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.3.21.21|2|2 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.4.19.17|2|2 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.4.21.21|2|8 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.5.19.17|2|3 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.5.21.21|2|1 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.6.19.17|2|1 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.6.21.21|2|1 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.7.19.17|2|13 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.7.21.21|2|10 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.8.19.17|4|slot1 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.8.21.21|4|slot2 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.11.19.17|2|5 +1.3.6.1.4.1.674.10892.5.4.1200.10.1.11.21.21|2|3 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.1.2.11|2|2 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.1.8.3|2|8 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.2.2.11|2|11 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.2.8.3|2|3 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.3.2.11|2|1 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.3.8.3|2|2 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.6.2.11|4x|666f7277617264206b6570742062757420717561696e746c79206b657074207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.6.8.3|4x|6b657074204a61646564 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.7.2.11|4x|6f78656e20717561696e746c79204a61646564207a6f6d6269657320627574207468656972 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.7.8.3|4x|6f78656e2064726976696e67206b657074207a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.8.2.11|4x|627574207a6f6d6269657320627574206f78656e206163746564206163746564 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.8.8.3|4x|666f727761726420666f72776172642061637465642064726976696e67206b6570742064726976696e672064726976696e67204a61646564206f78656e +1.3.6.1.4.1.674.10892.5.4.2000.10.1.9.2.11|4x|666f72776172642062757420746865697220627574207a6f6d6269657320717561696e746c79207a6f6d62696573204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.9.8.3|4x|7468656972207468656972204a6164656420627574206163746564204a6164656420616374656420666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.12.2.11|4x|627574206b657074204a61646564 +1.3.6.1.4.1.674.10892.5.4.2000.10.1.12.8.3|4x|717561696e746c7920717561696e746c79206f78656e206f78656e206b657074206b65707420746865697220616374656420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.1.4|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.1.21|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.2.4|4|controller1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.2.21|4|controller2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.7.4|2|10 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.7.21|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.8.4|4x|616374656420627574206b65707420717561696e746c79206f78656e207a6f6d6269657320717561696e746c7920666f7277617264206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.8.21|4x|6f78656e206b6570742064726976696e6720746865697220616374656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.9.4|2|20 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.9.21|2|30 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.37.4|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.37.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.38.4|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.38.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.41.4|4x|6b657074207a6f6d62696573207468656972207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.41.21|4x|4a61646564206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.42.4|4x|717561696e746c79206b65707420616374656420616374656420627574206163746564207a6f6d6269657320717561696e746c7920666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.42.21|4|acted +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.48.4|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.48.21|2|20 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.49.4|2|22 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.49.21|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.50.4|2|18 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.50.21|2|27 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.51.4|2|23 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.51.21|2|22 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.52.4|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.52.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.53.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.53.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.59.4|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.59.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.60.4|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.60.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.61.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.61.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.62.4|2|31 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.62.21|2|31 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.69.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.69.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.70.4|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.70.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.71.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.71.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.72.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.72.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.73.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.73.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.74.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.74.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.75.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.75.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.76.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.76.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.77.4|4x|717561696e746c79206f78656e2064726976696e6720717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.77.21|4x|4a6164656420666f7277617264204a6164656420717561696e746c79206f78656e207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.78.4|4x|717561696e746c79207a6f6d626965732061637465642064726976696e67206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.78.21|4x|64726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.79.4|4x|6b65707420717561696e746c792064726976696e672064726976696e6720627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.79.21|4x|717561696e746c7920717561696e746c79207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.80.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.80.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.81.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.81.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.82.4|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.82.21|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.83.4|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.83.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.84.4|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.1.1.84.21|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.1.7|2|7 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.1.26|2|26 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.2.7|4x|717561696e746c7920717561696e746c79207a6f6d6269657320666f727761726420616374656420717561696e746c79206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.2.26|4x|666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.4.7|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.4.26|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.8.7|4|their +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.8.26|4|Jaded +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.9.7|4x|6f78656e20627574206b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.9.26|4x|6b65707420627574206b657074206f78656e207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.19.7|4|kept +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.19.26|4x|6b657074207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.23.7|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.23.26|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.24.7|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.24.26|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.26.7|4x|4a616465642064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.26.26|4x|4a61646564206f78656e2064726976696e67204a6164656420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.30.7|4x|666f7277617264207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.30.26|4x|6f78656e206f78656e2064726976696e67206275742064726976696e67207468656972206f78656e207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.31.7|2|15 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.31.26|2|23 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.32.7|2|28 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.32.26|2|28 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.40.7|4x|7468656972206f78656e207468656972206163746564204a6164656420666f727761726420666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.40.26|4x|6275742074686569722074686569722062757420666f72776172642062757420616374656420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.41.7|4x|6163746564207468656972207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.41.26|4x|717561696e746c79207a6f6d6269657320717561696e746c79204a61646564206f78656e2064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.42.7|4x|666f7277617264204a61646564206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.42.26|4x|64726976696e67206b65707420717561696e746c79204a616465642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.43.7|4x|7468656972206f78656e20666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.43.26|4x|6b657074206b65707420627574206b657074206b657074206f78656e206b65707420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.44.7|4x|666f7277617264204a6164656420717561696e746c7920666f72776172642061637465642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.44.26|4x|61637465642074686569722064726976696e67206b6570742064726976696e67206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.45.7|4x|64726976696e6720717561696e746c792064726976696e6720627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.45.26|4x|717561696e746c79204a61646564206275742064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.46.7|4|acted +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.46.26|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.47.7|4|their +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.47.26|4x|6b65707420666f7277617264204a6164656420666f7277617264206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.48.7|4x|7468656972204a61646564206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.48.26|4x|64726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.49.7|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.3.1.49.26|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.1.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.1.21|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.2.8|4x|6469736b31 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.2.21|4x|6469736b32 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.3.8|4x|4a61646564204a61646564206f78656e204a61646564206b657074206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.3.21|4x|666f7277617264206f78656e2062757420627574204a6164656420666f7277617264 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.4.21|2|9 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.6.8|4x|717561696e746c7920717561696e746c79206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.6.21|4x|6163746564206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.7.8|4x|666f727761726420616374656420616374656420666f7277617264207a6f6d62696573206163746564206f78656e207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.7.21|4x|6b65707420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.8.8|4|driving +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.8.21|4x|627574206b657074204a61646564207a6f6d6269657320616374656420627574206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.11.8|2|20 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.11.21|2|9 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.17.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.17.21|2|14 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.19.8|2|30 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.19.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.21.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.21.21|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.22.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.22.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.24.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.24.21|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.27.8|4x|74686569722064726976696e67206f78656e207a6f6d6269657320746865697220666f727761726420746865697220717561696e746c7920717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.27.21|4x|666f727761726420666f7277617264207a6f6d62696573206b65707420717561696e746c79206f78656e207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.28.8|4x|6f78656e206163746564204a6164656420717561696e746c79207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.28.21|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.29.8|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.29.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.30.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.30.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.31.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.31.21|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.32.8|4x|64726976696e67206f78656e206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.32.21|4x|717561696e746c7920666f727761726420746865697220627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.33.8|4|forward +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.33.21|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.34.8|4x|4a61646564206f78656e206f78656e206163746564204a61646564207a6f6d62696573206275742062757420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.34.21|4x|717561696e746c792064726976696e6720666f7277617264207a6f6d62696573206b657074207a6f6d62696573206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.35.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.35.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.42.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.42.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.49.8|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.49.21|2|19 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.50.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.50.21|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.51.8|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.51.21|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.52.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.52.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.53.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.53.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.54.8|4x|666f7277617264206f78656e206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.54.21|4x|6b657074206f78656e206f78656e2064726976696e67206163746564204a61646564207a6f6d62696573206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.55.8|4x|6f78656e20666f7277617264206f78656e206f78656e20666f727761726420627574207a6f6d62696573207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.55.21|4x|627574207a6f6d626965732062757420746865697220717561696e746c7920746865697220717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.57.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.57.21|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.58.8|2|29 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.58.21|2|9 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.59.8|4x|666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.59.21|4|acted +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.60.8|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.60.21|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.61.8|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.4.1.61.21|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.1.19|2|19 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.1.24|2|24 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.2.19|4x|64726976696e6720717561696e746c792062757420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.2.24|4|their +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.4.19|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.4.24|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.11.19|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.11.24|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.15.19|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.15.24|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.20.19|4|zombies +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.20.24|4|but +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.21.19|4|driving +1.3.6.1.4.1.674.10892.5.5.1.20.130.7.1.21.24|4x|666f7277617264207468656972207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.1.13|2|13 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.1.16|2|16 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.2.13|4x|737570706c7931 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.2.16|4x|737570706c7932 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.4.13|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.4.16|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.7.13|4x|7468656972206275742064726976696e67207a6f6d62696573206b65707420666f727761726420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.7.16|4x|717561696e746c7920717561696e746c7920666f72776172642074686569722064726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.9.13|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.9.16|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.15.13|4x|666f7277617264207468656972206f78656e206163746564206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.15.16|4x|717561696e746c7920627574206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.16.13|4x|4a6164656420627574206b65707420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.9.1.16.16|4x|62757420717561696e746c7920627574207a6f6d62696573204a61646564206163746564207468656972204a6164656420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.1.6|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.1.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.2.6|4x|7a6f6d62696573206b657074204a61646564206f78656e2064726976696e67207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.2.8|4x|6b65707420627574207a6f6d626965732061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.4.6|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.4.8|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.7.6|2|24 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.7.8|2|25 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.8.6|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.8.8|2|22 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.9.6|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.9.8|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.10.6|2|21 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.10.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.11.6|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.11.8|2|14 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.13.6|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.13.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.15.6|4|Jaded +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.15.8|4x|64726976696e6720717561696e746c79204a6164656420717561696e746c79206f78656e20717561696e746c7920627574207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.16.6|4x|7a6f6d626965732064726976696e67204a6164656420616374656420717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.11.1.16.8|4x|6b657074204a6164656420627574207a6f6d626965732064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.1.14|2|14 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.1.30|2|30 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.2.14|4x|6163746564207a6f6d62696573 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.2.30|4x|6b657074204a616465642064726976696e67204a61646564207a6f6d62696573206f78656e20627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.4.14|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.4.30|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.6.14|4x|64726976696e67204a616465642062757420627574206163746564204a6164656420717561696e746c7920627574 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.6.30|4x|666f7277617264206163746564206f78656e20666f7277617264204a6164656420666f727761726420666f72776172642064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.8.14|4x|6f78656e2064726976696e672062757420717561696e746c79206f78656e204a6164656420666f7277617264206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.8.30|4x|4a6164656420616374656420627574206b657074206b6570742064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.11.14|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.11.30|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.15.14|4x|717561696e746c79207a6f6d626965732061637465642064726976696e6720717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.15.30|4x|746865697220627574206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.16.14|4x|7a6f6d626965732064726976696e67207468656972204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.13.1.16.30|4|zombies +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.1.17|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.1.18|2|18 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.4.17|2|6 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.4.18|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.6.17|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.6.18|2|4 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.10.17|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.10.18|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.20.17|4x|627574206275742061637465642064726976696e672064726976696e67 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.20.18|4x|6f78656e206163746564204a6164656420717561696e746c79206b65707420666f727761726420717561696e746c7920666f7277617264204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.21.17|4|battery1 +1.3.6.1.4.1.674.10892.5.5.1.20.130.15.1.21.18|4|battery2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.1.2|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.1.8|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.2.2|4x|64726976696e6720717561696e746c79206b657074204a6164656420666f72776172642062757420666f7277617264206b657074 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.2.8|4x|7a6f6d6269657320717561696e746c79206b657074206b6570742062757420717561696e746c7920666f727761726420717561696e746c79206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.4.2|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.4.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.6.2|2|8 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.6.8|2|25 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.10.2|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.10.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.11.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.11.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.13.2|2|7 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.13.8|2|10 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.14.2|2|11 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.14.8|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.20.2|2|5 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.20.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.23.2|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.23.8|2|0 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.24.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.24.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.25.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.25.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.26.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.26.8|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.30.2|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.30.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.31.2|2|12 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.31.8|2|17 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.32.2|4x|4a6164656420717561696e746c7920717561696e746c792064726976696e67206b657074207468656972206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.32.8|4x|6f78656e206b6570742064726976696e6720717561696e746c79207a6f6d62696573204a61646564 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.33.2|4x|6f78656e2064726976696e67204a61646564206f78656e206f78656e204a61646564204a616465642062757420717561696e746c79 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.33.8|4x|62757420746865697220666f7277617264206b65707420627574 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.34.2|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.34.8|2|2 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.35.2|4x|4a6164656420627574204a61646564207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.35.8|4x|6f78656e20616374656420746865697220746865697220666f727761726420627574204a61646564207a6f6d62696573206f78656e +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.36.2|4x|6163746564206f78656e206163746564 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.36.8|4x|4a61646564207468656972207468656972 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.37.2|2|3 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.37.8|2|1 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.38.2|2|31 +1.3.6.1.4.1.674.10892.5.5.1.20.140.1.1.38.8|2|27 diff --git a/test/new-e2e/ndm/snmp/compose/data/if.snmprec b/test/new-e2e/ndm/snmp/compose/data/if.snmprec new file mode 100644 index 0000000000000..d8dddc43c8eb3 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/if.snmprec @@ -0,0 +1,2364 @@ +1.3.6.1.2.1.1.1.0|4x|4249472d4950205669727475616c2045646974696f6e203a204c696e757820332e31302e302d3836322e31342e342e656c372e76652e7838365f3634203a204249472d495020736f6674776172652072656c656173652031352e302e312c206275696c6420302e302e3131 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.3375.2.1.3.4.43 +1.3.6.1.2.1.1.3.0|67|181753721 +1.3.6.1.2.1.1.4.0|4x|437573746f6d6572204e616d65203c61646d696e40637573746f6d65722e636f6d3e +1.3.6.1.2.1.1.5.0|4x|66352d6269672d69702d6164632d676f6f642d62796f6c2d312d766d2e632e64617461646f672d696e746567726174696f6e732d6c61622e696e7465726e616c +1.3.6.1.2.1.1.6.0|4x|4e6574776f726b20436c6f7365742031 +1.3.6.1.2.1.1.7.0|2|78 +1.3.6.1.2.1.1.8.0|67|8266 +1.3.6.1.2.1.1.9.1.2.1|6|1.3.6.1.6.3.11.3.1.1 +1.3.6.1.2.1.1.9.1.2.2|6|1.3.6.1.6.3.15.2.1.1 +1.3.6.1.2.1.1.9.1.2.3|6|1.3.6.1.6.3.10.3.1.1 +1.3.6.1.2.1.1.9.1.2.4|6|1.3.6.1.6.3.1 +1.3.6.1.2.1.1.9.1.2.5|6|1.3.6.1.6.3.16.2.2.1 +1.3.6.1.2.1.1.9.1.2.6|6|1.3.6.1.6.3.13.3.1.3 +1.3.6.1.2.1.1.9.1.2.7|6|1.3.6.1.2.1.92 +1.3.6.1.2.1.1.9.1.2.8|6|1.3.6.1.2.1.31 +1.3.6.1.2.1.1.9.1.2.9|6|1.3.6.1.2.1.48 +1.3.6.1.2.1.1.9.1.3.1|4x|546865204d494220666f72204d6573736167652050726f63657373696e6720616e64204469737061746368696e672e +1.3.6.1.2.1.1.9.1.3.2|4x|546865206d616e6167656d656e7420696e666f726d6174696f6e20646566696e6974696f6e7320666f722074686520534e4d5020557365722d6261736564205365637572697479204d6f64656c2e +1.3.6.1.2.1.1.9.1.3.3|4x|54686520534e4d50204d616e6167656d656e7420417263686974656374757265204d49422e +1.3.6.1.2.1.1.9.1.3.4|4x|546865204d4942206d6f64756c6520666f7220534e4d50763220656e746974696573 +1.3.6.1.2.1.1.9.1.3.5|4x|566965772d62617365642041636365737320436f6e74726f6c204d6f64656c20666f7220534e4d502e +1.3.6.1.2.1.1.9.1.3.6|4x|546865204d4942206d6f64756c657320666f72206d616e6167696e6720534e4d50204e6f74696669636174696f6e2c20706c75732066696c746572696e672e +1.3.6.1.2.1.1.9.1.3.7|4x|546865204d4942206d6f64756c6520666f72206c6f6767696e6720534e4d50204e6f74696669636174696f6e732e +1.3.6.1.2.1.1.9.1.3.8|4x|546865204d4942206d6f64756c6520746f2064657363726962652067656e65726963206f626a6563747320666f72206e6574776f726b20696e74657266616365207375622d6c6179657273 +1.3.6.1.2.1.1.9.1.3.9|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e6720495020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.4.1|67|92 +1.3.6.1.2.1.1.9.1.4.2|67|92 +1.3.6.1.2.1.1.9.1.4.3|67|92 +1.3.6.1.2.1.1.9.1.4.4|67|96 +1.3.6.1.2.1.1.9.1.4.5|67|96 +1.3.6.1.2.1.1.9.1.4.6|67|108 +1.3.6.1.2.1.1.9.1.4.7|67|108 +1.3.6.1.2.1.1.9.1.4.8|67|8261 +1.3.6.1.2.1.1.9.1.4.9|67|8266 +1.3.6.1.2.1.2.1.0|2|5 +1.3.6.1.2.1.2.2.1.1.32|2|32 +1.3.6.1.2.1.2.2.1.1.48|2|48 +1.3.6.1.2.1.2.2.1.1.80|2|80 +1.3.6.1.2.1.2.2.1.1.96|2|96 +1.3.6.1.2.1.2.2.1.1.112|2|112 +1.3.6.1.2.1.2.2.1.2.32|4|mgmt +1.3.6.1.2.1.2.2.1.2.48|4x|312e30 +1.3.6.1.2.1.2.2.1.2.80|4x|2f436f6d6d6f6e2f687474702d74756e6e656c +1.3.6.1.2.1.2.2.1.2.96|4x|2f436f6d6d6f6e2f736f636b732d74756e6e656c +1.3.6.1.2.1.2.2.1.2.112|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.2.1.2.2.1.3.32|2|6 +1.3.6.1.2.1.2.2.1.3.48|2|6 +1.3.6.1.2.1.2.2.1.3.80|2|0 +1.3.6.1.2.1.2.2.1.3.96|2|0 +1.3.6.1.2.1.2.2.1.3.112|2|6 +1.3.6.1.2.1.2.2.1.4.32|2|1460 +1.3.6.1.2.1.2.2.1.4.48|2|1460 +1.3.6.1.2.1.2.2.1.4.80|2|0 +1.3.6.1.2.1.2.2.1.4.96|2|0 +1.3.6.1.2.1.2.2.1.4.112|2|1460 +1.3.6.1.2.1.2.2.1.5.32|66|100000000 +1.3.6.1.2.1.2.2.1.5.48|66|4294967295 +1.3.6.1.2.1.2.2.1.5.80|66|0 +1.3.6.1.2.1.2.2.1.5.96|66|0 +1.3.6.1.2.1.2.2.1.5.112|66|4294967295 +1.3.6.1.2.1.2.2.1.6.32|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.48|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.6.80|4x|42010aa40034 +1.3.6.1.2.1.2.2.1.6.96|4x|42010aa40034 +1.3.6.1.2.1.2.2.1.6.112|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.7.32|2|1 +1.3.6.1.2.1.2.2.1.7.48|2|1 +1.3.6.1.2.1.2.2.1.7.80|2|1 +1.3.6.1.2.1.2.2.1.7.96|2|1 +1.3.6.1.2.1.2.2.1.7.112|2|1 +1.3.6.1.2.1.2.2.1.8.32|2|1 +1.3.6.1.2.1.2.2.1.8.48|2|1 +1.3.6.1.2.1.2.2.1.8.80|2|4 +1.3.6.1.2.1.2.2.1.8.96|2|4 +1.3.6.1.2.1.2.2.1.8.112|2|1 +1.3.6.1.2.1.2.2.1.9.32|67|0 +1.3.6.1.2.1.2.2.1.9.48|67|0 +1.3.6.1.2.1.2.2.1.9.80|67|0 +1.3.6.1.2.1.2.2.1.9.96|67|0 +1.3.6.1.2.1.2.2.1.9.112|67|0 +1.3.6.1.2.1.2.2.1.10.32|65|461436066 +1.3.6.1.2.1.2.2.1.10.48|65|605861862 +1.3.6.1.2.1.2.2.1.10.80|65|0 +1.3.6.1.2.1.2.2.1.10.96|65|0 +1.3.6.1.2.1.2.2.1.10.112|65|396657417 +1.3.6.1.2.1.2.2.1.11.32|65|928558 +1.3.6.1.2.1.2.2.1.11.48|65|797516 +1.3.6.1.2.1.2.2.1.11.80|65|0 +1.3.6.1.2.1.2.2.1.11.96|65|0 +1.3.6.1.2.1.2.2.1.11.112|65|896960 +1.3.6.1.2.1.2.2.1.12.32|65|0 +1.3.6.1.2.1.2.2.1.12.48|65|0 +1.3.6.1.2.1.2.2.1.12.80|65|0 +1.3.6.1.2.1.2.2.1.12.96|65|0 +1.3.6.1.2.1.2.2.1.12.112|65|0 +1.3.6.1.2.1.2.2.1.13.32|65|0 +1.3.6.1.2.1.2.2.1.13.48|65|0 +1.3.6.1.2.1.2.2.1.13.80|65|0 +1.3.6.1.2.1.2.2.1.13.96|65|0 +1.3.6.1.2.1.2.2.1.13.112|65|226244 +1.3.6.1.2.1.2.2.1.14.32|65|0 +1.3.6.1.2.1.2.2.1.14.48|65|0 +1.3.6.1.2.1.2.2.1.14.80|65|0 +1.3.6.1.2.1.2.2.1.14.96|65|0 +1.3.6.1.2.1.2.2.1.14.112|65|0 +1.3.6.1.2.1.2.2.1.15.32|65|0 +1.3.6.1.2.1.2.2.1.15.48|65|0 +1.3.6.1.2.1.2.2.1.15.80|65|0 +1.3.6.1.2.1.2.2.1.15.96|65|0 +1.3.6.1.2.1.2.2.1.15.112|65|0 +1.3.6.1.2.1.2.2.1.16.32|65|311840645 +1.3.6.1.2.1.2.2.1.16.48|65|67333343 +1.3.6.1.2.1.2.2.1.16.80|65|0 +1.3.6.1.2.1.2.2.1.16.96|65|0 +1.3.6.1.2.1.2.2.1.16.112|65|405970846 +1.3.6.1.2.1.2.2.1.17.32|65|771556 +1.3.6.1.2.1.2.2.1.17.48|65|521981 +1.3.6.1.2.1.2.2.1.17.80|65|0 +1.3.6.1.2.1.2.2.1.17.96|65|0 +1.3.6.1.2.1.2.2.1.17.112|65|878067 +1.3.6.1.2.1.2.2.1.18.32|65|0 +1.3.6.1.2.1.2.2.1.18.48|65|0 +1.3.6.1.2.1.2.2.1.18.80|65|0 +1.3.6.1.2.1.2.2.1.18.96|65|0 +1.3.6.1.2.1.2.2.1.18.112|65|0 +1.3.6.1.2.1.2.2.1.19.32|65|0 +1.3.6.1.2.1.2.2.1.19.48|65|0 +1.3.6.1.2.1.2.2.1.19.80|65|0 +1.3.6.1.2.1.2.2.1.19.96|65|0 +1.3.6.1.2.1.2.2.1.19.112|65|0 +1.3.6.1.2.1.2.2.1.20.32|65|0 +1.3.6.1.2.1.2.2.1.20.48|65|0 +1.3.6.1.2.1.2.2.1.20.80|65|0 +1.3.6.1.2.1.2.2.1.20.96|65|0 +1.3.6.1.2.1.2.2.1.20.112|65|0 +1.3.6.1.2.1.2.2.1.21.32|66|0 +1.3.6.1.2.1.2.2.1.21.48|66|0 +1.3.6.1.2.1.2.2.1.21.80|66|0 +1.3.6.1.2.1.2.2.1.21.96|66|0 +1.3.6.1.2.1.2.2.1.21.112|66|0 +1.3.6.1.2.1.2.2.1.22.32|6|0.0 +1.3.6.1.2.1.2.2.1.22.48|6|0.0 +1.3.6.1.2.1.2.2.1.22.80|6|0.0 +1.3.6.1.2.1.2.2.1.22.96|6|0.0 +1.3.6.1.2.1.2.2.1.22.112|6|0.0 +1.3.6.1.2.1.4.1.0|2|2 +1.3.6.1.2.1.4.2.0|2|64 +1.3.6.1.2.1.4.13.0|2|30 +1.3.6.1.2.1.4.20.1.1.10.164.0.51|64x|0aa40033 +1.3.6.1.2.1.4.20.1.2.10.164.0.51|2|32 +1.3.6.1.2.1.4.20.1.3.10.164.0.51|64x|ffffffff +1.3.6.1.2.1.4.20.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.25.0|2|2 +1.3.6.1.2.1.4.26.0|2|64 +1.3.6.1.2.1.4.31.1.1.1.1|2|1 +1.3.6.1.2.1.4.31.1.1.1.2|2|2 +1.3.6.1.2.1.4.31.1.1.3.1|65|8634962 +1.3.6.1.2.1.4.31.1.1.3.2|65|15145 +1.3.6.1.2.1.4.31.1.1.4.1|70|8634962 +1.3.6.1.2.1.4.31.1.1.4.2|70|15145 +1.3.6.1.2.1.4.31.1.1.7.1|65|0 +1.3.6.1.2.1.4.31.1.1.7.2|65|0 +1.3.6.1.2.1.4.31.1.1.14.1|65|0 +1.3.6.1.2.1.4.31.1.1.14.2|65|0 +1.3.6.1.2.1.4.31.1.1.16.1|65|0 +1.3.6.1.2.1.4.31.1.1.16.2|65|0 +1.3.6.1.2.1.4.31.1.1.26.1|65|0 +1.3.6.1.2.1.4.31.1.1.26.2|65|0 +1.3.6.1.2.1.4.31.1.1.28.1|65|0 +1.3.6.1.2.1.4.31.1.1.28.2|65|0 +1.3.6.1.2.1.4.31.1.1.30.1|65|8624653 +1.3.6.1.2.1.4.31.1.1.30.2|65|0 +1.3.6.1.2.1.4.31.1.1.31.1|70|8624653 +1.3.6.1.2.1.4.31.1.1.31.2|70|0 +1.3.6.1.2.1.4.31.1.1.34.1|65|0 +1.3.6.1.2.1.4.31.1.1.34.2|65|15145 +1.3.6.1.2.1.4.31.1.1.35.1|70|0 +1.3.6.1.2.1.4.31.1.1.35.2|70|15145 +1.3.6.1.2.1.4.31.1.1.38.1|65|0 +1.3.6.1.2.1.4.31.1.1.38.2|65|0 +1.3.6.1.2.1.4.31.1.1.39.1|70|0 +1.3.6.1.2.1.4.31.1.1.39.2|70|0 +1.3.6.1.2.1.4.31.1.1.47.1|66|2000 +1.3.6.1.2.1.4.31.1.1.47.2|66|2000 +1.3.6.1.2.1.4.32.1.5.32.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.5.112.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.6.32.1.4.10.164.0.51.32|2|1 +1.3.6.1.2.1.4.32.1.6.112.1.4.10.164.0.51.32|2|1 +1.3.6.1.2.1.4.32.1.7.32.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.7.112.1.4.10.164.0.51.32|2|2 +1.3.6.1.2.1.4.32.1.8.32.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.32.1.8.112.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.32.1.9.32.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.32.1.9.112.1.4.10.164.0.51.32|66|4294967295 +1.3.6.1.2.1.4.33.0|2|459515095 +1.3.6.1.2.1.4.34.1.3.1.4.10.164.0.51|2|32 +1.3.6.1.2.1.4.34.1.4.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.34.1.5.1.4.10.164.0.51|6|1.3.6.1.2.1.4.32.1.5.32.1.4.10.164.0.51.32 +1.3.6.1.2.1.4.34.1.6.1.4.10.164.0.51|2|2 +1.3.6.1.2.1.4.34.1.7.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.34.1.8.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.34.1.9.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.34.1.10.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.34.1.11.1.4.10.164.0.51|2|3 +1.3.6.1.2.1.4.35.1.4.32.1.4.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.4.112.1.4.10.164.0.51|4x|42010aa40033 +1.3.6.1.2.1.4.35.1.5.32.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.35.1.5.112.1.4.10.164.0.51|67|0 +1.3.6.1.2.1.4.35.1.6.32.1.4.10.164.0.51|2|4 +1.3.6.1.2.1.4.35.1.6.112.1.4.10.164.0.51|2|4 +1.3.6.1.2.1.4.35.1.7.32.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.35.1.7.112.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.35.1.8.32.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.4.35.1.8.112.1.4.10.164.0.51|2|1 +1.3.6.1.2.1.5.29.1.2.1|65|0 +1.3.6.1.2.1.5.29.1.2.2|65|15 +1.3.6.1.2.1.5.29.1.3.1|65|0 +1.3.6.1.2.1.5.29.1.3.2|65|35 +1.3.6.1.2.1.5.29.1.4.1|65|0 +1.3.6.1.2.1.5.29.1.4.2|65|30 +1.3.6.1.2.1.5.29.1.5.1|65|0 +1.3.6.1.2.1.5.29.1.5.2|65|0 +1.3.6.1.2.1.11.1.0|65|174703 +1.3.6.1.2.1.11.2.0|65|174606 +1.3.6.1.2.1.11.3.0|65|0 +1.3.6.1.2.1.11.4.0|65|0 +1.3.6.1.2.1.11.5.0|65|0 +1.3.6.1.2.1.11.6.0|65|0 +1.3.6.1.2.1.11.8.0|65|0 +1.3.6.1.2.1.11.9.0|65|0 +1.3.6.1.2.1.11.10.0|65|0 +1.3.6.1.2.1.11.11.0|65|0 +1.3.6.1.2.1.11.12.0|65|0 +1.3.6.1.2.1.11.13.0|65|795265 +1.3.6.1.2.1.11.14.0|65|0 +1.3.6.1.2.1.11.15.0|65|5815 +1.3.6.1.2.1.11.16.0|65|147446 +1.3.6.1.2.1.11.17.0|65|0 +1.3.6.1.2.1.11.18.0|65|0 +1.3.6.1.2.1.11.19.0|65|0 +1.3.6.1.2.1.11.20.0|65|0 +1.3.6.1.2.1.11.21.0|65|0 +1.3.6.1.2.1.11.22.0|65|0 +1.3.6.1.2.1.11.24.0|65|0 +1.3.6.1.2.1.11.25.0|65|0 +1.3.6.1.2.1.11.26.0|65|0 +1.3.6.1.2.1.11.27.0|65|0 +1.3.6.1.2.1.11.28.0|65|174630 +1.3.6.1.2.1.11.29.0|65|0 +1.3.6.1.2.1.11.30.0|2|2 +1.3.6.1.2.1.11.31.0|65|0 +1.3.6.1.2.1.11.32.0|65|0 +1.3.6.1.2.1.25.1.1.0|67|182098229 +1.3.6.1.2.1.25.1.2.0|4x|07e30a1504001d002d0700 +1.3.6.1.2.1.25.1.3.0|2|393216 +1.3.6.1.2.1.25.1.4.0|4x|726f20726f6f743d555549443d37313463316461302d646562372d346230332d383830642d34636564383531313965333520636f6e736f6c653d747479302020636f6e736f6c653d74747953302070616e69633d3120706c6174666f726d3d5a3130302064656661756c745f6370755f6f726465722071756965740a +1.3.6.1.2.1.25.1.5.0|66|0 +1.3.6.1.2.1.25.1.6.0|66|190 +1.3.6.1.2.1.25.1.7.0|2|0 +1.3.6.1.2.1.25.2.2.0|2|7660752 +1.3.6.1.2.1.25.2.3.1.1.1|2|1 +1.3.6.1.2.1.25.2.3.1.1.3|2|3 +1.3.6.1.2.1.25.2.3.1.1.6|2|6 +1.3.6.1.2.1.25.2.3.1.1.7|2|7 +1.3.6.1.2.1.25.2.3.1.1.8|2|8 +1.3.6.1.2.1.25.2.3.1.1.10|2|10 +1.3.6.1.2.1.25.2.3.1.1.31|2|31 +1.3.6.1.2.1.25.2.3.1.1.32|2|32 +1.3.6.1.2.1.25.2.3.1.1.37|2|37 +1.3.6.1.2.1.25.2.3.1.1.39|2|39 +1.3.6.1.2.1.25.2.3.1.1.40|2|40 +1.3.6.1.2.1.25.2.3.1.1.44|2|44 +1.3.6.1.2.1.25.2.3.1.1.50|2|50 +1.3.6.1.2.1.25.2.3.1.1.51|2|51 +1.3.6.1.2.1.25.2.3.1.1.52|2|52 +1.3.6.1.2.1.25.2.3.1.1.53|2|53 +1.3.6.1.2.1.25.2.3.1.1.54|2|54 +1.3.6.1.2.1.25.2.3.1.1.55|2|55 +1.3.6.1.2.1.25.2.3.1.1.56|2|56 +1.3.6.1.2.1.25.2.3.1.1.57|2|57 +1.3.6.1.2.1.25.2.3.1.1.58|2|58 +1.3.6.1.2.1.25.2.3.1.1.59|2|59 +1.3.6.1.2.1.25.2.3.1.2.1|6|1.3.6.1.2.1.25.2.1.2 +1.3.6.1.2.1.25.2.3.1.2.3|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.6|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.7|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.8|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.10|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.31|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.32|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.37|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.39|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.40|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.44|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.50|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.51|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.52|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.53|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.54|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.55|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.56|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.57|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.58|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.59|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.3.1|4x|506879736963616c206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.3|4x|5669727475616c206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.6|4x|4d656d6f72792062756666657273 +1.3.6.1.2.1.25.2.3.1.3.7|4x|436163686564206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.8|4x|536861726564206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.10|4x|53776170207370616365 +1.3.6.1.2.1.25.2.3.1.3.31|4x|2f +1.3.6.1.2.1.25.2.3.1.3.32|4x|2f766172 +1.3.6.1.2.1.25.2.3.1.3.37|4x|2f6465762f73686d +1.3.6.1.2.1.25.2.3.1.3.39|4x|2f72756e +1.3.6.1.2.1.25.2.3.1.3.40|4x|2f7379732f66732f6367726f7570 +1.3.6.1.2.1.25.2.3.1.3.44|4x|2f757372 +1.3.6.1.2.1.25.2.3.1.3.50|4x|2f736861726564 +1.3.6.1.2.1.25.2.3.1.3.51|4x|2f7368617265642f7272642e312e32 +1.3.6.1.2.1.25.2.3.1.3.52|4x|2f61707064617461 +1.3.6.1.2.1.25.2.3.1.3.53|4x|2f636f6e666967 +1.3.6.1.2.1.25.2.3.1.3.54|4x|2f7661722f70726f6d7074 +1.3.6.1.2.1.25.2.3.1.3.55|4x|2f7661722f746d73746174 +1.3.6.1.2.1.25.2.3.1.3.56|4x|2f7661722f6c6f67 +1.3.6.1.2.1.25.2.3.1.3.57|4x|2f7661722f6c6f697063 +1.3.6.1.2.1.25.2.3.1.3.58|4x|2f72756e2f757365722f3931 +1.3.6.1.2.1.25.2.3.1.3.59|4x|2f7661722f6e616d65642f6c6962 +1.3.6.1.2.1.25.2.3.1.4.1|2|1024 +1.3.6.1.2.1.25.2.3.1.4.3|2|1024 +1.3.6.1.2.1.25.2.3.1.4.6|2|1024 +1.3.6.1.2.1.25.2.3.1.4.7|2|1024 +1.3.6.1.2.1.25.2.3.1.4.8|2|1024 +1.3.6.1.2.1.25.2.3.1.4.10|2|1024 +1.3.6.1.2.1.25.2.3.1.4.31|2|1024 +1.3.6.1.2.1.25.2.3.1.4.32|2|4096 +1.3.6.1.2.1.25.2.3.1.4.37|2|4096 +1.3.6.1.2.1.25.2.3.1.4.39|2|4096 +1.3.6.1.2.1.25.2.3.1.4.40|2|4096 +1.3.6.1.2.1.25.2.3.1.4.44|2|4096 +1.3.6.1.2.1.25.2.3.1.4.50|2|4096 +1.3.6.1.2.1.25.2.3.1.4.51|2|4096 +1.3.6.1.2.1.25.2.3.1.4.52|2|1024 +1.3.6.1.2.1.25.2.3.1.4.53|2|1024 +1.3.6.1.2.1.25.2.3.1.4.54|2|4096 +1.3.6.1.2.1.25.2.3.1.4.55|2|4096 +1.3.6.1.2.1.25.2.3.1.4.56|2|4096 +1.3.6.1.2.1.25.2.3.1.4.57|2|4096 +1.3.6.1.2.1.25.2.3.1.4.58|2|4096 +1.3.6.1.2.1.25.2.3.1.4.59|2|4096 +1.3.6.1.2.1.25.2.3.1.5.1|2|7660752 +1.3.6.1.2.1.25.2.3.1.5.3|2|8684748 +1.3.6.1.2.1.25.2.3.1.5.6|2|7660752 +1.3.6.1.2.1.25.2.3.1.5.7|2|431048 +1.3.6.1.2.1.25.2.3.1.5.8|2|54064 +1.3.6.1.2.1.25.2.3.1.5.10|2|1023996 +1.3.6.1.2.1.25.2.3.1.5.31|2|428150 +1.3.6.1.2.1.25.2.3.1.5.32|2|235782 +1.3.6.1.2.1.25.2.3.1.5.37|2|957594 +1.3.6.1.2.1.25.2.3.1.5.39|2|957594 +1.3.6.1.2.1.25.2.3.1.5.40|2|957594 +1.3.6.1.2.1.25.2.3.1.5.44|2|1296662 +1.3.6.1.2.1.25.2.3.1.5.50|2|3837692 +1.3.6.1.2.1.25.2.3.1.5.51|2|957594 +1.3.6.1.2.1.25.2.3.1.5.52|2|31729 +1.3.6.1.2.1.25.2.3.1.5.53|2|479716 +1.3.6.1.2.1.25.2.3.1.5.54|2|1024 +1.3.6.1.2.1.25.2.3.1.5.55|2|957594 +1.3.6.1.2.1.25.2.3.1.5.56|2|247878 +1.3.6.1.2.1.25.2.3.1.5.57|2|957594 +1.3.6.1.2.1.25.2.3.1.5.58|2|191519 +1.3.6.1.2.1.25.2.3.1.5.59|2|235782 +1.3.6.1.2.1.25.2.3.1.6.1|2|7551356 +1.3.6.1.2.1.25.2.3.1.6.3|2|8012156 +1.3.6.1.2.1.25.2.3.1.6.6|2|42564 +1.3.6.1.2.1.25.2.3.1.6.7|2|431048 +1.3.6.1.2.1.25.2.3.1.6.8|2|54064 +1.3.6.1.2.1.25.2.3.1.6.10|2|460800 +1.3.6.1.2.1.25.2.3.1.6.31|2|78704 +1.3.6.1.2.1.25.2.3.1.6.32|2|90615 +1.3.6.1.2.1.25.2.3.1.6.37|2|569 +1.3.6.1.2.1.25.2.3.1.6.39|2|511 +1.3.6.1.2.1.25.2.3.1.6.40|2|0 +1.3.6.1.2.1.25.2.3.1.6.44|2|1040421 +1.3.6.1.2.1.25.2.3.1.6.50|2|43169 +1.3.6.1.2.1.25.2.3.1.6.51|2|7937 +1.3.6.1.2.1.25.2.3.1.6.52|2|4516 +1.3.6.1.2.1.25.2.3.1.6.53|2|14722 +1.3.6.1.2.1.25.2.3.1.6.54|2|7 +1.3.6.1.2.1.25.2.3.1.6.55|2|4360 +1.3.6.1.2.1.25.2.3.1.6.56|2|104596 +1.3.6.1.2.1.25.2.3.1.6.57|2|0 +1.3.6.1.2.1.25.2.3.1.6.58|2|0 +1.3.6.1.2.1.25.2.3.1.6.59|2|90615 +1.3.6.1.2.1.25.3.2.1.1.196608|2|196608 +1.3.6.1.2.1.25.3.2.1.1.196609|2|196609 +1.3.6.1.2.1.25.3.2.1.1.786432|2|786432 +1.3.6.1.2.1.25.3.2.1.2.196608|6|1.3.6.1.2.1.25.3.1.3 +1.3.6.1.2.1.25.3.2.1.2.196609|6|1.3.6.1.2.1.25.3.1.3 +1.3.6.1.2.1.25.3.2.1.2.786432|6|1.3.6.1.2.1.25.3.1.12 +1.3.6.1.2.1.25.3.2.1.3.196608|4x|47656e75696e65496e74656c3a20496e74656c2852292058656f6e28522920435055204020322e303047487a +1.3.6.1.2.1.25.3.2.1.3.196609|4x|47656e75696e65496e74656c3a20496e74656c2852292058656f6e28522920435055204020322e303047487a +1.3.6.1.2.1.25.3.2.1.3.786432|4x|4775657373696e6720746861742074686572652773206120666c6f6174696e6720706f696e7420636f2d70726f636573736f72 +1.3.6.1.2.1.25.3.2.1.4.196608|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.196609|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.786432|6|0.0 +1.3.6.1.2.1.25.3.2.1.5.196608|2|2 +1.3.6.1.2.1.25.3.2.1.5.196609|2|2 +1.3.6.1.2.1.25.3.3.1.1.196608|6|0.0 +1.3.6.1.2.1.25.3.3.1.1.196609|6|0.0 +1.3.6.1.2.1.25.3.3.1.2.196608|2|8 +1.3.6.1.2.1.25.3.3.1.2.196609|2|9 +1.3.6.1.2.1.25.3.8.1.1.1|2|1 +1.3.6.1.2.1.25.3.8.1.1.2|2|2 +1.3.6.1.2.1.25.3.8.1.1.7|2|7 +1.3.6.1.2.1.25.3.8.1.1.9|2|9 +1.3.6.1.2.1.25.3.8.1.1.10|2|10 +1.3.6.1.2.1.25.3.8.1.1.14|2|14 +1.3.6.1.2.1.25.3.8.1.1.20|2|20 +1.3.6.1.2.1.25.3.8.1.1.21|2|21 +1.3.6.1.2.1.25.3.8.1.1.22|2|22 +1.3.6.1.2.1.25.3.8.1.1.23|2|23 +1.3.6.1.2.1.25.3.8.1.1.24|2|24 +1.3.6.1.2.1.25.3.8.1.1.25|2|25 +1.3.6.1.2.1.25.3.8.1.1.26|2|26 +1.3.6.1.2.1.25.3.8.1.1.27|2|27 +1.3.6.1.2.1.25.3.8.1.1.28|2|28 +1.3.6.1.2.1.25.3.8.1.1.29|2|29 +1.3.6.1.2.1.25.3.8.1.2.1|4x|2f +1.3.6.1.2.1.25.3.8.1.2.2|4x|2f766172 +1.3.6.1.2.1.25.3.8.1.2.7|4x|2f6465762f73686d +1.3.6.1.2.1.25.3.8.1.2.9|4x|2f72756e +1.3.6.1.2.1.25.3.8.1.2.10|4x|2f7379732f66732f6367726f7570 +1.3.6.1.2.1.25.3.8.1.2.14|4x|2f757372 +1.3.6.1.2.1.25.3.8.1.2.20|4x|2f736861726564 +1.3.6.1.2.1.25.3.8.1.2.21|4x|2f7368617265642f7272642e312e32 +1.3.6.1.2.1.25.3.8.1.2.22|4x|2f61707064617461 +1.3.6.1.2.1.25.3.8.1.2.23|4x|2f636f6e666967 +1.3.6.1.2.1.25.3.8.1.2.24|4x|2f7661722f70726f6d7074 +1.3.6.1.2.1.25.3.8.1.2.25|4x|2f7661722f746d73746174 +1.3.6.1.2.1.25.3.8.1.2.26|4x|2f7661722f6c6f67 +1.3.6.1.2.1.25.3.8.1.2.27|4x|2f7661722f6c6f697063 +1.3.6.1.2.1.25.3.8.1.2.28|4x|2f72756e2f757365722f3931 +1.3.6.1.2.1.25.3.8.1.2.29|4x|2f7661722f6e616d65642f6c6962 +1.3.6.1.2.1.25.3.8.1.3.1|4| +1.3.6.1.2.1.25.3.8.1.3.2|4| +1.3.6.1.2.1.25.3.8.1.3.7|4| +1.3.6.1.2.1.25.3.8.1.3.9|4| +1.3.6.1.2.1.25.3.8.1.3.10|4| +1.3.6.1.2.1.25.3.8.1.3.14|4| +1.3.6.1.2.1.25.3.8.1.3.20|4| +1.3.6.1.2.1.25.3.8.1.3.21|4| +1.3.6.1.2.1.25.3.8.1.3.22|4| +1.3.6.1.2.1.25.3.8.1.3.23|4| +1.3.6.1.2.1.25.3.8.1.3.24|4| +1.3.6.1.2.1.25.3.8.1.3.25|4| +1.3.6.1.2.1.25.3.8.1.3.26|4| +1.3.6.1.2.1.25.3.8.1.3.27|4| +1.3.6.1.2.1.25.3.8.1.3.28|4| +1.3.6.1.2.1.25.3.8.1.3.29|4| +1.3.6.1.2.1.25.3.8.1.4.1|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.2|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.7|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.9|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.10|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.14|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.20|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.21|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.22|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.23|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.24|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.25|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.26|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.27|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.28|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.29|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.5.1|2|1 +1.3.6.1.2.1.25.3.8.1.5.2|2|1 +1.3.6.1.2.1.25.3.8.1.5.7|2|1 +1.3.6.1.2.1.25.3.8.1.5.9|2|1 +1.3.6.1.2.1.25.3.8.1.5.10|2|2 +1.3.6.1.2.1.25.3.8.1.5.14|2|2 +1.3.6.1.2.1.25.3.8.1.5.20|2|1 +1.3.6.1.2.1.25.3.8.1.5.21|2|1 +1.3.6.1.2.1.25.3.8.1.5.22|2|1 +1.3.6.1.2.1.25.3.8.1.5.23|2|1 +1.3.6.1.2.1.25.3.8.1.5.24|2|1 +1.3.6.1.2.1.25.3.8.1.5.25|2|1 +1.3.6.1.2.1.25.3.8.1.5.26|2|1 +1.3.6.1.2.1.25.3.8.1.5.27|2|1 +1.3.6.1.2.1.25.3.8.1.5.28|2|1 +1.3.6.1.2.1.25.3.8.1.5.29|2|1 +1.3.6.1.2.1.25.3.8.1.6.1|2|1 +1.3.6.1.2.1.25.3.8.1.6.2|2|2 +1.3.6.1.2.1.25.3.8.1.6.7|2|2 +1.3.6.1.2.1.25.3.8.1.6.9|2|2 +1.3.6.1.2.1.25.3.8.1.6.10|2|2 +1.3.6.1.2.1.25.3.8.1.6.14|2|2 +1.3.6.1.2.1.25.3.8.1.6.20|2|2 +1.3.6.1.2.1.25.3.8.1.6.21|2|2 +1.3.6.1.2.1.25.3.8.1.6.22|2|2 +1.3.6.1.2.1.25.3.8.1.6.23|2|2 +1.3.6.1.2.1.25.3.8.1.6.24|2|2 +1.3.6.1.2.1.25.3.8.1.6.25|2|2 +1.3.6.1.2.1.25.3.8.1.6.26|2|2 +1.3.6.1.2.1.25.3.8.1.6.27|2|2 +1.3.6.1.2.1.25.3.8.1.6.28|2|2 +1.3.6.1.2.1.25.3.8.1.6.29|2|2 +1.3.6.1.2.1.25.3.8.1.7.1|2|31 +1.3.6.1.2.1.25.3.8.1.7.2|2|32 +1.3.6.1.2.1.25.3.8.1.7.7|2|37 +1.3.6.1.2.1.25.3.8.1.7.9|2|39 +1.3.6.1.2.1.25.3.8.1.7.10|2|40 +1.3.6.1.2.1.25.3.8.1.7.14|2|44 +1.3.6.1.2.1.25.3.8.1.7.20|2|50 +1.3.6.1.2.1.25.3.8.1.7.21|2|51 +1.3.6.1.2.1.25.3.8.1.7.22|2|52 +1.3.6.1.2.1.25.3.8.1.7.23|2|53 +1.3.6.1.2.1.25.3.8.1.7.24|2|54 +1.3.6.1.2.1.25.3.8.1.7.25|2|55 +1.3.6.1.2.1.25.3.8.1.7.26|2|56 +1.3.6.1.2.1.25.3.8.1.7.27|2|57 +1.3.6.1.2.1.25.3.8.1.7.28|2|58 +1.3.6.1.2.1.25.3.8.1.7.29|2|59 +1.3.6.1.2.1.25.3.8.1.8.1|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.2|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.7|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.9|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.10|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.14|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.20|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.21|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.22|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.23|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.24|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.25|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.26|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.27|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.28|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.8.29|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.1|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.2|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.7|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.9|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.10|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.14|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.20|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.21|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.22|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.23|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.24|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.25|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.26|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.27|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.28|4x|0000010100000000 +1.3.6.1.2.1.25.3.8.1.9.29|4x|0000010100000000 +1.3.6.1.2.1.25.4.2.1.1.1|2|1 +1.3.6.1.2.1.25.4.2.1.1.415|2|415 +1.3.6.1.2.1.25.4.2.1.1.440|2|440 +1.3.6.1.2.1.25.4.2.1.1.447|2|447 +1.3.6.1.2.1.25.4.2.1.1.921|2|921 +1.3.6.1.2.1.25.4.2.1.1.951|2|951 +1.3.6.1.2.1.25.4.2.1.1.977|2|977 +1.3.6.1.2.1.25.4.2.1.1.979|2|979 +1.3.6.1.2.1.25.4.2.1.1.982|2|982 +1.3.6.1.2.1.25.4.2.1.1.984|2|984 +1.3.6.1.2.1.25.4.2.1.1.1038|2|1038 +1.3.6.1.2.1.25.4.2.1.1.1826|2|1826 +1.3.6.1.2.1.25.4.2.1.1.2851|2|2851 +1.3.6.1.2.1.25.4.2.1.1.2852|2|2852 +1.3.6.1.2.1.25.4.2.1.1.2919|2|2919 +1.3.6.1.2.1.25.4.2.1.1.3773|2|3773 +1.3.6.1.2.1.25.4.2.1.1.4068|2|4068 +1.3.6.1.2.1.25.4.2.1.1.4085|2|4085 +1.3.6.1.2.1.25.4.2.1.1.4119|2|4119 +1.3.6.1.2.1.25.4.2.1.1.4122|2|4122 +1.3.6.1.2.1.25.4.2.1.1.4212|2|4212 +1.3.6.1.2.1.25.4.2.1.1.4213|2|4213 +1.3.6.1.2.1.25.4.2.1.1.4214|2|4214 +1.3.6.1.2.1.25.4.2.1.1.4215|2|4215 +1.3.6.1.2.1.25.4.2.1.1.4216|2|4216 +1.3.6.1.2.1.25.4.2.1.1.4217|2|4217 +1.3.6.1.2.1.25.4.2.1.1.4218|2|4218 +1.3.6.1.2.1.25.4.2.1.1.4219|2|4219 +1.3.6.1.2.1.25.4.2.1.1.4220|2|4220 +1.3.6.1.2.1.25.4.2.1.1.4221|2|4221 +1.3.6.1.2.1.25.4.2.1.1.4222|2|4222 +1.3.6.1.2.1.25.4.2.1.1.4224|2|4224 +1.3.6.1.2.1.25.4.2.1.1.4226|2|4226 +1.3.6.1.2.1.25.4.2.1.1.4434|2|4434 +1.3.6.1.2.1.25.4.2.1.1.4435|2|4435 +1.3.6.1.2.1.25.4.2.1.1.4436|2|4436 +1.3.6.1.2.1.25.4.2.1.1.4437|2|4437 +1.3.6.1.2.1.25.4.2.1.1.4438|2|4438 +1.3.6.1.2.1.25.4.2.1.1.4439|2|4439 +1.3.6.1.2.1.25.4.2.1.1.4440|2|4440 +1.3.6.1.2.1.25.4.2.1.1.4441|2|4441 +1.3.6.1.2.1.25.4.2.1.1.4442|2|4442 +1.3.6.1.2.1.25.4.2.1.1.4443|2|4443 +1.3.6.1.2.1.25.4.2.1.1.4451|2|4451 +1.3.6.1.2.1.25.4.2.1.1.4773|2|4773 +1.3.6.1.2.1.25.4.2.1.1.4774|2|4774 +1.3.6.1.2.1.25.4.2.1.1.4775|2|4775 +1.3.6.1.2.1.25.4.2.1.1.4776|2|4776 +1.3.6.1.2.1.25.4.2.1.1.4777|2|4777 +1.3.6.1.2.1.25.4.2.1.1.4778|2|4778 +1.3.6.1.2.1.25.4.2.1.1.4779|2|4779 +1.3.6.1.2.1.25.4.2.1.1.4780|2|4780 +1.3.6.1.2.1.25.4.2.1.1.4781|2|4781 +1.3.6.1.2.1.25.4.2.1.1.4782|2|4782 +1.3.6.1.2.1.25.4.2.1.1.4784|2|4784 +1.3.6.1.2.1.25.4.2.1.1.4786|2|4786 +1.3.6.1.2.1.25.4.2.1.1.4787|2|4787 +1.3.6.1.2.1.25.4.2.1.1.5137|2|5137 +1.3.6.1.2.1.25.4.2.1.1.5138|2|5138 +1.3.6.1.2.1.25.4.2.1.1.5139|2|5139 +1.3.6.1.2.1.25.4.2.1.1.5140|2|5140 +1.3.6.1.2.1.25.4.2.1.1.5141|2|5141 +1.3.6.1.2.1.25.4.2.1.1.5142|2|5142 +1.3.6.1.2.1.25.4.2.1.1.5143|2|5143 +1.3.6.1.2.1.25.4.2.1.1.5144|2|5144 +1.3.6.1.2.1.25.4.2.1.1.5145|2|5145 +1.3.6.1.2.1.25.4.2.1.1.5146|2|5146 +1.3.6.1.2.1.25.4.2.1.1.5148|2|5148 +1.3.6.1.2.1.25.4.2.1.1.5151|2|5151 +1.3.6.1.2.1.25.4.2.1.1.5155|2|5155 +1.3.6.1.2.1.25.4.2.1.1.5159|2|5159 +1.3.6.1.2.1.25.4.2.1.1.5501|2|5501 +1.3.6.1.2.1.25.4.2.1.1.5502|2|5502 +1.3.6.1.2.1.25.4.2.1.1.5503|2|5503 +1.3.6.1.2.1.25.4.2.1.1.5504|2|5504 +1.3.6.1.2.1.25.4.2.1.1.5505|2|5505 +1.3.6.1.2.1.25.4.2.1.1.5506|2|5506 +1.3.6.1.2.1.25.4.2.1.1.5507|2|5507 +1.3.6.1.2.1.25.4.2.1.1.5508|2|5508 +1.3.6.1.2.1.25.4.2.1.1.5509|2|5509 +1.3.6.1.2.1.25.4.2.1.1.5510|2|5510 +1.3.6.1.2.1.25.4.2.1.1.5516|2|5516 +1.3.6.1.2.1.25.4.2.1.1.5522|2|5522 +1.3.6.1.2.1.25.4.2.1.1.5861|2|5861 +1.3.6.1.2.1.25.4.2.1.1.5862|2|5862 +1.3.6.1.2.1.25.4.2.1.1.5863|2|5863 +1.3.6.1.2.1.25.4.2.1.1.5864|2|5864 +1.3.6.1.2.1.25.4.2.1.1.5865|2|5865 +1.3.6.1.2.1.25.4.2.1.1.5866|2|5866 +1.3.6.1.2.1.25.4.2.1.1.5867|2|5867 +1.3.6.1.2.1.25.4.2.1.1.5868|2|5868 +1.3.6.1.2.1.25.4.2.1.1.5869|2|5869 +1.3.6.1.2.1.25.4.2.1.1.5870|2|5870 +1.3.6.1.2.1.25.4.2.1.1.5872|2|5872 +1.3.6.1.2.1.25.4.2.1.1.5875|2|5875 +1.3.6.1.2.1.25.4.2.1.1.5878|2|5878 +1.3.6.1.2.1.25.4.2.1.1.5879|2|5879 +1.3.6.1.2.1.25.4.2.1.1.5884|2|5884 +1.3.6.1.2.1.25.4.2.1.1.6344|2|6344 +1.3.6.1.2.1.25.4.2.1.1.6345|2|6345 +1.3.6.1.2.1.25.4.2.1.1.6346|2|6346 +1.3.6.1.2.1.25.4.2.1.1.6347|2|6347 +1.3.6.1.2.1.25.4.2.1.1.6348|2|6348 +1.3.6.1.2.1.25.4.2.1.1.6349|2|6349 +1.3.6.1.2.1.25.4.2.1.1.6350|2|6350 +1.3.6.1.2.1.25.4.2.1.1.6351|2|6351 +1.3.6.1.2.1.25.4.2.1.1.6352|2|6352 +1.3.6.1.2.1.25.4.2.1.1.6353|2|6353 +1.3.6.1.2.1.25.4.2.1.1.6358|2|6358 +1.3.6.1.2.1.25.4.2.1.1.6366|2|6366 +1.3.6.1.2.1.25.4.2.1.1.6763|2|6763 +1.3.6.1.2.1.25.4.2.1.1.6764|2|6764 +1.3.6.1.2.1.25.4.2.1.1.6765|2|6765 +1.3.6.1.2.1.25.4.2.1.1.6766|2|6766 +1.3.6.1.2.1.25.4.2.1.1.6767|2|6767 +1.3.6.1.2.1.25.4.2.1.1.6768|2|6768 +1.3.6.1.2.1.25.4.2.1.1.6769|2|6769 +1.3.6.1.2.1.25.4.2.1.1.6770|2|6770 +1.3.6.1.2.1.25.4.2.1.1.6771|2|6771 +1.3.6.1.2.1.25.4.2.1.1.6772|2|6772 +1.3.6.1.2.1.25.4.2.1.1.6782|2|6782 +1.3.6.1.2.1.25.4.2.1.1.6784|2|6784 +1.3.6.1.2.1.25.4.2.1.1.7174|2|7174 +1.3.6.1.2.1.25.4.2.1.1.7175|2|7175 +1.3.6.1.2.1.25.4.2.1.1.7176|2|7176 +1.3.6.1.2.1.25.4.2.1.1.7177|2|7177 +1.3.6.1.2.1.25.4.2.1.1.7178|2|7178 +1.3.6.1.2.1.25.4.2.1.1.7179|2|7179 +1.3.6.1.2.1.25.4.2.1.1.7180|2|7180 +1.3.6.1.2.1.25.4.2.1.1.7181|2|7181 +1.3.6.1.2.1.25.4.2.1.1.7182|2|7182 +1.3.6.1.2.1.25.4.2.1.1.7183|2|7183 +1.3.6.1.2.1.25.4.2.1.1.7188|2|7188 +1.3.6.1.2.1.25.4.2.1.1.7192|2|7192 +1.3.6.1.2.1.25.4.2.1.1.7194|2|7194 +1.3.6.1.2.1.25.4.2.1.1.7196|2|7196 +1.3.6.1.2.1.25.4.2.1.1.7523|2|7523 +1.3.6.1.2.1.25.4.2.1.1.7524|2|7524 +1.3.6.1.2.1.25.4.2.1.1.7525|2|7525 +1.3.6.1.2.1.25.4.2.1.1.7526|2|7526 +1.3.6.1.2.1.25.4.2.1.1.7527|2|7527 +1.3.6.1.2.1.25.4.2.1.1.7528|2|7528 +1.3.6.1.2.1.25.4.2.1.1.7529|2|7529 +1.3.6.1.2.1.25.4.2.1.1.7530|2|7530 +1.3.6.1.2.1.25.4.2.1.1.7531|2|7531 +1.3.6.1.2.1.25.4.2.1.1.7532|2|7532 +1.3.6.1.2.1.25.4.2.1.1.7535|2|7535 +1.3.6.1.2.1.25.4.2.1.1.7539|2|7539 +1.3.6.1.2.1.25.4.2.1.1.7543|2|7543 +1.3.6.1.2.1.25.4.2.1.1.7544|2|7544 +1.3.6.1.2.1.25.4.2.1.1.7949|2|7949 +1.3.6.1.2.1.25.4.2.1.1.7950|2|7950 +1.3.6.1.2.1.25.4.2.1.1.7951|2|7951 +1.3.6.1.2.1.25.4.2.1.1.7952|2|7952 +1.3.6.1.2.1.25.4.2.1.1.7953|2|7953 +1.3.6.1.2.1.25.4.2.1.1.7954|2|7954 +1.3.6.1.2.1.25.4.2.1.1.9526|2|9526 +1.3.6.1.2.1.25.4.2.1.1.9602|2|9602 +1.3.6.1.2.1.25.4.2.1.1.11784|2|11784 +1.3.6.1.2.1.25.4.2.1.1.13563|2|13563 +1.3.6.1.2.1.25.4.2.1.1.13565|2|13565 +1.3.6.1.2.1.25.4.2.1.1.13566|2|13566 +1.3.6.1.2.1.25.4.2.1.1.15387|2|15387 +1.3.6.1.2.1.25.4.2.1.1.15921|2|15921 +1.3.6.1.2.1.25.4.2.1.1.16645|2|16645 +1.3.6.1.2.1.25.4.2.1.1.16646|2|16646 +1.3.6.1.2.1.25.4.2.1.1.16648|2|16648 +1.3.6.1.2.1.25.4.2.1.1.16651|2|16651 +1.3.6.1.2.1.25.4.2.1.1.16652|2|16652 +1.3.6.1.2.1.25.4.2.1.1.16653|2|16653 +1.3.6.1.2.1.25.4.2.1.1.16654|2|16654 +1.3.6.1.2.1.25.4.2.1.1.17900|2|17900 +1.3.6.1.2.1.25.4.2.1.1.18651|2|18651 +1.3.6.1.2.1.25.4.2.1.1.23175|2|23175 +1.3.6.1.2.1.25.4.2.1.1.23330|2|23330 +1.3.6.1.2.1.25.4.2.1.1.25514|2|25514 +1.3.6.1.2.1.25.4.2.1.1.25517|2|25517 +1.3.6.1.2.1.25.4.2.1.1.25518|2|25518 +1.3.6.1.2.1.25.4.2.1.1.25522|2|25522 +1.3.6.1.2.1.25.4.2.1.1.25524|2|25524 +1.3.6.1.2.1.25.4.2.1.1.25531|2|25531 +1.3.6.1.2.1.25.4.2.1.1.25946|2|25946 +1.3.6.1.2.1.25.4.2.1.1.27567|2|27567 +1.3.6.1.2.1.25.4.2.1.1.29431|2|29431 +1.3.6.1.2.1.25.4.2.1.1.29439|2|29439 +1.3.6.1.2.1.25.4.2.1.1.29440|2|29440 +1.3.6.1.2.1.25.4.2.1.1.30092|2|30092 +1.3.6.1.2.1.25.4.2.1.1.30120|2|30120 +1.3.6.1.2.1.25.4.2.1.1.30180|2|30180 +1.3.6.1.2.1.25.4.2.1.1.32031|2|32031 +1.3.6.1.2.1.25.4.2.1.2.1|4|systemd +1.3.6.1.2.1.25.4.2.1.2.415|4x|73797374656d642d6a6f75726e616c +1.3.6.1.2.1.25.4.2.1.2.440|4|lvmetad +1.3.6.1.2.1.25.4.2.1.2.447|4x|73797374656d642d7564657664 +1.3.6.1.2.1.25.4.2.1.2.921|4x|6a6974746572656e74726f70792d72 +1.3.6.1.2.1.25.4.2.1.2.951|4|auditd +1.3.6.1.2.1.25.4.2.1.2.977|4x|646275732d6461656d6f6e +1.3.6.1.2.1.25.4.2.1.2.979|4|acpid +1.3.6.1.2.1.25.4.2.1.2.982|4|irqbalance +1.3.6.1.2.1.25.4.2.1.2.984|4x|73797374656d642d6c6f67696e64 +1.3.6.1.2.1.25.4.2.1.2.1038|4x|696e6372656173655f656e74726f70 +1.3.6.1.2.1.25.4.2.1.2.1826|4x|7379736c6f672d6e67 +1.3.6.1.2.1.25.4.2.1.2.2851|4|crond +1.3.6.1.2.1.25.4.2.1.2.2852|4|promptstatusd +1.3.6.1.2.1.25.4.2.1.2.2919|4|overdog +1.3.6.1.2.1.25.4.2.1.2.3773|4|sshd +1.3.6.1.2.1.25.4.2.1.2.4068|4|httpd +1.3.6.1.2.1.25.4.2.1.2.4085|4|runsvdir +1.3.6.1.2.1.25.4.2.1.2.4119|4|agetty +1.3.6.1.2.1.25.4.2.1.2.4122|4|agetty +1.3.6.1.2.1.25.4.2.1.2.4212|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4213|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4214|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4215|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4216|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4217|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4218|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4219|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4220|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4221|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4222|4|eventd +1.3.6.1.2.1.25.4.2.1.2.4224|4x|72756e736d315f6e616d6564 +1.3.6.1.2.1.25.4.2.1.2.4226|4|wccpd +1.3.6.1.2.1.25.4.2.1.2.4434|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4435|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4436|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4437|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4438|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4439|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4440|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4441|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4442|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4443|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4451|4|scriptd +1.3.6.1.2.1.25.4.2.1.2.4773|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4774|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4775|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4776|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4777|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4778|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4779|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4780|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4781|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4782|4|runsv +1.3.6.1.2.1.25.4.2.1.2.4784|4|tmrouted +1.3.6.1.2.1.25.4.2.1.2.4786|4|tamd +1.3.6.1.2.1.25.4.2.1.2.4787|4|alertd +1.3.6.1.2.1.25.4.2.1.2.5137|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5138|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5139|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5140|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5141|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5142|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5143|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5144|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5145|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5146|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5148|4|evrouted +1.3.6.1.2.1.25.4.2.1.2.5151|4|big3d +1.3.6.1.2.1.25.4.2.1.2.5155|4|csyncd +1.3.6.1.2.1.25.4.2.1.2.5159|4|syscalld +1.3.6.1.2.1.25.4.2.1.2.5501|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5502|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5503|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5504|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5505|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5506|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5507|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5508|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5509|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5510|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5516|4|errdefsd +1.3.6.1.2.1.25.4.2.1.2.5522|4|logstatd +1.3.6.1.2.1.25.4.2.1.2.5861|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5862|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5863|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5864|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5865|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5866|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5867|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5868|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5869|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5870|4|runsv +1.3.6.1.2.1.25.4.2.1.2.5872|4|chmand +1.3.6.1.2.1.25.4.2.1.2.5875|4x|6963725f6576656e7464 +1.3.6.1.2.1.25.4.2.1.2.5878|4|mcpd +1.3.6.1.2.1.25.4.2.1.2.5879|4|statsd +1.3.6.1.2.1.25.4.2.1.2.5884|4|zxfrd +1.3.6.1.2.1.25.4.2.1.2.6344|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6345|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6346|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6347|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6348|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6349|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6350|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6351|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6352|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6353|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6358|4|merged +1.3.6.1.2.1.25.4.2.1.2.6366|4|dynconfd +1.3.6.1.2.1.25.4.2.1.2.6763|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6764|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6765|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6766|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6767|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6768|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6769|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6770|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6771|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6772|4|runsv +1.3.6.1.2.1.25.4.2.1.2.6782|4x|676f6f676c655f6163636f756e7473 +1.3.6.1.2.1.25.4.2.1.2.6784|4|keymgmtd +1.3.6.1.2.1.25.4.2.1.2.7174|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7175|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7176|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7177|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7178|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7179|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7180|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7181|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7182|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7183|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7188|4|java +1.3.6.1.2.1.25.4.2.1.2.7192|4|lacpd +1.3.6.1.2.1.25.4.2.1.2.7194|4|devmgmtd +1.3.6.1.2.1.25.4.2.1.2.7196|4|cbrd +1.3.6.1.2.1.25.4.2.1.2.7523|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7524|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7525|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7526|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7527|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7528|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7529|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7530|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7531|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7532|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7535|4|lind +1.3.6.1.2.1.25.4.2.1.2.7539|4|sod +1.3.6.1.2.1.25.4.2.1.2.7543|4x|73666c6f775f6167656e74 +1.3.6.1.2.1.25.4.2.1.2.7544|4x|66352d726573742d6e6f6465 +1.3.6.1.2.1.25.4.2.1.2.7949|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7950|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7951|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7952|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7953|4|runsv +1.3.6.1.2.1.25.4.2.1.2.7954|4|runsv +1.3.6.1.2.1.25.4.2.1.2.9526|4|dhclient +1.3.6.1.2.1.25.4.2.1.2.9602|4|dhclient +1.3.6.1.2.1.25.4.2.1.2.11784|4|su +1.3.6.1.2.1.25.4.2.1.2.13563|4|httpd +1.3.6.1.2.1.25.4.2.1.2.13565|4|httpd +1.3.6.1.2.1.25.4.2.1.2.13566|4|httpd +1.3.6.1.2.1.25.4.2.1.2.15387|4|ntpd +1.3.6.1.2.1.25.4.2.1.2.15921|4|java +1.3.6.1.2.1.25.4.2.1.2.16645|4|logger +1.3.6.1.2.1.25.4.2.1.2.16646|4|logger +1.3.6.1.2.1.25.4.2.1.2.16648|4|httpd +1.3.6.1.2.1.25.4.2.1.2.16651|4|mcpq +1.3.6.1.2.1.25.4.2.1.2.16652|4|rrdstats +1.3.6.1.2.1.25.4.2.1.2.16653|4|rtstats +1.3.6.1.2.1.25.4.2.1.2.16654|4x|69436f6e74726f6c506f7274616c2e +1.3.6.1.2.1.25.4.2.1.2.17900|4|named +1.3.6.1.2.1.25.4.2.1.2.18651|4x|696372645f6368696c64 +1.3.6.1.2.1.25.4.2.1.2.23175|4|rrdshim +1.3.6.1.2.1.25.4.2.1.2.23330|4|snmpd +1.3.6.1.2.1.25.4.2.1.2.25514|4|pccd +1.3.6.1.2.1.25.4.2.1.2.25517|4|tmipsecd +1.3.6.1.2.1.25.4.2.1.2.25518|4x|746d6d2e7374617274 +1.3.6.1.2.1.25.4.2.1.2.25522|4x|6d676d745f61636c64 +1.3.6.1.2.1.25.4.2.1.2.25524|4|vxland +1.3.6.1.2.1.25.4.2.1.2.25531|4|iprepd +1.3.6.1.2.1.25.4.2.1.2.25946|4|bigd +1.3.6.1.2.1.25.4.2.1.2.27567|4|ntlmconnpool +1.3.6.1.2.1.25.4.2.1.2.29431|4|httpd +1.3.6.1.2.1.25.4.2.1.2.29439|4|httpd +1.3.6.1.2.1.25.4.2.1.2.29440|4|httpd +1.3.6.1.2.1.25.4.2.1.2.30092|4x|746d6d2e30 +1.3.6.1.2.1.25.4.2.1.2.30120|4|racoon +1.3.6.1.2.1.25.4.2.1.2.30180|4x|61756469745f666f72776172646572 +1.3.6.1.2.1.25.4.2.1.2.32031|4|agetty +1.3.6.1.2.1.25.4.2.1.3.1|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.415|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.440|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.447|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.921|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.951|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.977|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.979|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.982|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.984|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.1038|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.1826|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.2851|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.2852|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.2919|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.3773|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4068|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4085|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4119|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4122|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4212|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4213|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4214|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4215|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4216|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4217|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4218|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4219|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4220|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4221|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4222|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4224|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4226|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4434|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4435|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4436|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4437|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4438|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4439|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4440|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4441|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4442|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4443|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4451|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4773|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4774|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4775|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4776|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4777|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4778|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4779|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4780|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4781|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4782|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4784|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4786|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.4787|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5137|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5138|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5139|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5140|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5141|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5142|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5143|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5144|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5145|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5146|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5148|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5151|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5155|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5159|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5501|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5502|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5503|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5504|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5505|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5506|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5507|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5508|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5509|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5510|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5516|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5522|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5861|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5862|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5863|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5864|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5865|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5866|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5867|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5868|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5869|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5870|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5872|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5875|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5878|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5879|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.5884|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6344|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6345|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6346|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6347|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6348|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6349|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6350|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6351|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6352|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6353|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6358|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6366|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6763|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6764|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6765|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6766|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6767|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6768|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6769|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6770|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6771|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6772|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6782|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6784|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7174|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7175|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7176|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7177|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7178|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7179|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7180|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7181|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7182|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7183|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7188|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7192|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7194|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7196|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7523|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7524|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7525|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7526|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7527|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7528|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7529|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7530|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7531|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7532|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7535|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7539|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7543|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7544|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7949|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7950|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7951|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7952|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7953|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.7954|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.9526|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.9602|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.11784|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.13563|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.13565|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.13566|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.15387|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.15921|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16645|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16646|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16648|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16651|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16652|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16653|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.16654|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.17900|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.18651|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.23175|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.23330|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25514|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25517|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25518|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25522|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25524|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25531|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.25946|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.27567|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.29431|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.29439|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.29440|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.30092|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.30120|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.30180|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.32031|6|0.0 +1.3.6.1.2.1.25.4.2.1.4.1|4x|2f7573722f6c69622f73797374656d642f73797374656d64 +1.3.6.1.2.1.25.4.2.1.4.415|4x|2f7573722f6c69622f73797374656d642f73797374656d642d6a6f75726e616c64 +1.3.6.1.2.1.25.4.2.1.4.440|4x|2f7573722f7362696e2f6c766d65746164 +1.3.6.1.2.1.25.4.2.1.4.447|4x|2f7573722f6c69622f73797374656d642f73797374656d642d7564657664 +1.3.6.1.2.1.25.4.2.1.4.921|4x|2f7573722f7362696e2f6a6974746572656e74726f70792d726e6764 +1.3.6.1.2.1.25.4.2.1.4.951|4x|2f7362696e2f617564697464 +1.3.6.1.2.1.25.4.2.1.4.977|4x|2f62696e2f646275732d6461656d6f6e +1.3.6.1.2.1.25.4.2.1.4.979|4x|2f7573722f7362696e2f6163706964 +1.3.6.1.2.1.25.4.2.1.4.982|4x|2f7573722f7362696e2f69727162616c616e6365 +1.3.6.1.2.1.25.4.2.1.4.984|4x|2f7573722f6c69622f73797374656d642f73797374656d642d6c6f67696e64 +1.3.6.1.2.1.25.4.2.1.4.1038|4x|696e6372656173655f656e74726f7079 +1.3.6.1.2.1.25.4.2.1.4.1826|4x|2f7573722f7362696e2f7379736c6f672d6e67 +1.3.6.1.2.1.25.4.2.1.4.2851|4x|2f7573722f7362696e2f63726f6e64 +1.3.6.1.2.1.25.4.2.1.4.2852|4x|2f62696e2f70726f6d707473746174757364 +1.3.6.1.2.1.25.4.2.1.4.2919|4x|2f7573722f62696e2f6f766572646f67 +1.3.6.1.2.1.25.4.2.1.4.3773|4x|2f7573722f7362696e2f73736864 +1.3.6.1.2.1.25.4.2.1.4.4068|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.4085|4|runsvdir +1.3.6.1.2.1.25.4.2.1.4.4119|4x|2f7362696e2f616765747479 +1.3.6.1.2.1.25.4.2.1.4.4122|4x|2f7362696e2f616765747479 +1.3.6.1.2.1.25.4.2.1.4.4212|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4213|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4214|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4215|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4216|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4217|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4218|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4219|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4220|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4221|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4222|4x|2f7573722f62696e2f6576656e7464 +1.3.6.1.2.1.25.4.2.1.4.4224|4x|2f7362696e2f72756e736d315f6e616d6564 +1.3.6.1.2.1.25.4.2.1.4.4226|4x|2f7573722f62696e2f7763637064 +1.3.6.1.2.1.25.4.2.1.4.4434|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4435|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4436|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4437|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4438|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4439|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4440|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4441|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4442|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4443|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4451|4x|2f7573722f62696e2f73637269707464 +1.3.6.1.2.1.25.4.2.1.4.4773|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4774|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4775|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4776|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4777|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4778|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4779|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4780|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4781|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4782|4|runsv +1.3.6.1.2.1.25.4.2.1.4.4784|4x|2f7573722f62696e2f746d726f75746564 +1.3.6.1.2.1.25.4.2.1.4.4786|4x|2f7573722f62696e2f74616d64 +1.3.6.1.2.1.25.4.2.1.4.4787|4x|2f7573722f7362696e2f616c65727464 +1.3.6.1.2.1.25.4.2.1.4.5137|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5138|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5139|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5140|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5141|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5142|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5143|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5144|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5145|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5146|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5148|4x|2f7573722f62696e2f6576726f75746564 +1.3.6.1.2.1.25.4.2.1.4.5151|4x|2f7368617265642f62696e2f6269673364 +1.3.6.1.2.1.25.4.2.1.4.5155|4x|2f7573722f62696e2f6373796e6364 +1.3.6.1.2.1.25.4.2.1.4.5159|4x|2f7573722f62696e2f73797363616c6c64 +1.3.6.1.2.1.25.4.2.1.4.5501|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5502|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5503|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5504|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5505|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5506|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5507|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5508|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5509|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5510|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5516|4x|2f7573722f62696e2f6572726465667364 +1.3.6.1.2.1.25.4.2.1.4.5522|4x|2f7573722f7362696e2f6c6f677374617464 +1.3.6.1.2.1.25.4.2.1.4.5861|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5862|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5863|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5864|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5865|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5866|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5867|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5868|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5869|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5870|4|runsv +1.3.6.1.2.1.25.4.2.1.4.5872|4x|2f7573722f62696e2f63686d616e64 +1.3.6.1.2.1.25.4.2.1.4.5875|4x|2f7573722f62696e2f6963725f6576656e7464 +1.3.6.1.2.1.25.4.2.1.4.5878|4x|2f7573722f62696e2f6d637064 +1.3.6.1.2.1.25.4.2.1.4.5879|4x|2f7573722f62696e2f737461747364 +1.3.6.1.2.1.25.4.2.1.4.5884|4x|2f7573722f62696e2f7a78667264 +1.3.6.1.2.1.25.4.2.1.4.6344|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6345|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6346|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6347|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6348|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6349|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6350|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6351|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6352|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6353|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6358|4x|2f7573722f62696e2f6d6572676564 +1.3.6.1.2.1.25.4.2.1.4.6366|4x|2f7573722f62696e2f64796e636f6e6664 +1.3.6.1.2.1.25.4.2.1.4.6763|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6764|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6765|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6766|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6767|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6768|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6769|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6770|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6771|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6772|4|runsv +1.3.6.1.2.1.25.4.2.1.4.6782|4x|2f7573722f62696e2f707974686f6e +1.3.6.1.2.1.25.4.2.1.4.6784|4x|2f7573722f62696e2f6b65796d676d7464 +1.3.6.1.2.1.25.4.2.1.4.7174|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7175|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7176|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7177|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7178|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7179|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7180|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7181|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7182|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7183|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7188|4x|2f7573722f6c69622f6a766d2f6a72652f62696e2f6a617661 +1.3.6.1.2.1.25.4.2.1.4.7192|4x|2f7573722f62696e2f6c61637064 +1.3.6.1.2.1.25.4.2.1.4.7194|4x|2f7573722f62696e2f6465766d676d7464 +1.3.6.1.2.1.25.4.2.1.4.7196|4x|2f7573722f73686172652f6362722f62696e2f63627264 +1.3.6.1.2.1.25.4.2.1.4.7523|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7524|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7525|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7526|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7527|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7528|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7529|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7530|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7531|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7532|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7535|4x|2f7573722f62696e2f6c696e64 +1.3.6.1.2.1.25.4.2.1.4.7539|4x|2f7573722f62696e2f736f64 +1.3.6.1.2.1.25.4.2.1.4.7543|4x|2f7573722f7362696e2f73666c6f775f6167656e74 +1.3.6.1.2.1.25.4.2.1.4.7544|4x|2f7573722f62696e2f66352d726573742d6e6f6465 +1.3.6.1.2.1.25.4.2.1.4.7949|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7950|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7951|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7952|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7953|4|runsv +1.3.6.1.2.1.25.4.2.1.4.7954|4|runsv +1.3.6.1.2.1.25.4.2.1.4.9526|4x|2f7362696e2f6468636c69656e74 +1.3.6.1.2.1.25.4.2.1.4.9602|4x|2f7362696e2f6468636c69656e74 +1.3.6.1.2.1.25.4.2.1.4.11784|4|su +1.3.6.1.2.1.25.4.2.1.4.13563|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.13565|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.13566|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.15387|4|ntpd +1.3.6.1.2.1.25.4.2.1.4.15921|4x|2f7573722f6c69622f6a766d2f6a72652f62696e2f6a617661 +1.3.6.1.2.1.25.4.2.1.4.16645|4x|2f7573722f62696e2f6c6f67676572 +1.3.6.1.2.1.25.4.2.1.4.16646|4x|2f7573722f62696e2f6c6f67676572 +1.3.6.1.2.1.25.4.2.1.4.16648|4x|2f7573722f7362696e2f666367692d +1.3.6.1.2.1.25.4.2.1.4.16651|4x|2f7573722f6c6f63616c2f7777772f6d6370712f6d637071 +1.3.6.1.2.1.25.4.2.1.4.16652|4x|2f7573722f6c6f63616c2f7777772f72726473746174732f7272647374617473 +1.3.6.1.2.1.25.4.2.1.4.16653|4x|2f7573722f6c6f63616c2f7777772f727473746174732f72747374617473 +1.3.6.1.2.1.25.4.2.1.4.16654|4x|2f7573722f6c6f63616c2f7777772f69436f6e74726f6c2f69436f6e74726f6c506f7274616c2e636769 +1.3.6.1.2.1.25.4.2.1.4.17900|4x|2f7573722f7362696e2f6e616d6564 +1.3.6.1.2.1.25.4.2.1.4.18651|4x|696372645f6368696c64 +1.3.6.1.2.1.25.4.2.1.4.23175|4x|2f7573722f7362696e2f7272647368696d +1.3.6.1.2.1.25.4.2.1.4.23330|4x|2f7573722f7362696e2f736e6d7064 +1.3.6.1.2.1.25.4.2.1.4.25514|4x|2f7573722f62696e2f70636364 +1.3.6.1.2.1.25.4.2.1.4.25517|4x|2f7573722f62696e2f746d697073656364 +1.3.6.1.2.1.25.4.2.1.4.25518|4x|2f6574632f62696773746172742f736372697074732f746d6d2e7374617274 +1.3.6.1.2.1.25.4.2.1.4.25522|4x|2f7573722f62696e2f6d676d745f61636c64 +1.3.6.1.2.1.25.4.2.1.4.25524|4x|2f7573722f62696e2f76786c616e64 +1.3.6.1.2.1.25.4.2.1.4.25531|4x|2f7573722f73686172652f6970726570642f62696e2f697072657064 +1.3.6.1.2.1.25.4.2.1.4.25946|4|bigd +1.3.6.1.2.1.25.4.2.1.4.27567|4x|2f7573722f7362696e2f6e746c6d636f6e6e706f6f6c +1.3.6.1.2.1.25.4.2.1.4.29431|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.29439|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.29440|4x|2f7573722f7362696e2f6874747064 +1.3.6.1.2.1.25.4.2.1.4.30092|4x|746d6d2e30 +1.3.6.1.2.1.25.4.2.1.4.30120|4x|2f7573722f7362696e2f7261636f6f6e +1.3.6.1.2.1.25.4.2.1.4.30180|4x|2f7573722f62696e2f61756469745f666f72776172646572 +1.3.6.1.2.1.25.4.2.1.4.32031|4x|2f7362696e2f616765747479 +1.3.6.1.2.1.25.4.2.1.5.1|4x|2d2d73776974636865642d726f6f74202d2d73797374656d202d2d646573657269616c697a65203230 +1.3.6.1.2.1.25.4.2.1.5.415|4| +1.3.6.1.2.1.25.4.2.1.5.440|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.447|4| +1.3.6.1.2.1.25.4.2.1.5.921|4| +1.3.6.1.2.1.25.4.2.1.5.951|4x|2d6e +1.3.6.1.2.1.25.4.2.1.5.977|4x|2d2d73797374656d202d2d616464726573733d73797374656d643a202d2d6e6f666f726b202d2d6e6f70696466696c65202d2d73797374656d642d61637469766174696f6e +1.3.6.1.2.1.25.4.2.1.5.979|4| +1.3.6.1.2.1.25.4.2.1.5.982|4x|2d2d666f726567726f756e64 +1.3.6.1.2.1.25.4.2.1.5.984|4| +1.3.6.1.2.1.25.4.2.1.5.1038|4x|2d64202d652034303030202d72202d712038 +1.3.6.1.2.1.25.4.2.1.5.1826|4x|2d46202d70202f7661722f72756e2f7379736c6f67642e706964 +1.3.6.1.2.1.25.4.2.1.5.2851|4x|2d6e +1.3.6.1.2.1.25.4.2.1.5.2852|4| +1.3.6.1.2.1.25.4.2.1.5.2919|4| +1.3.6.1.2.1.25.4.2.1.5.3773|4x|2d44 +1.3.6.1.2.1.25.4.2.1.5.4068|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.4085|4x|2f7661722f73657276696365206c6f673a202e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e +1.3.6.1.2.1.25.4.2.1.5.4119|4x|2d2d6e6f636c6561722074747931206c696e7578 +1.3.6.1.2.1.25.4.2.1.5.4122|4x|2d2d6b6565702d62617564203131353230302c33383430302c39363030207474795330207674323230 +1.3.6.1.2.1.25.4.2.1.5.4212|4|datastor +1.3.6.1.2.1.25.4.2.1.5.4213|4|eventd +1.3.6.1.2.1.25.4.2.1.5.4214|4|named +1.3.6.1.2.1.25.4.2.1.5.4215|4|sdmd +1.3.6.1.2.1.25.4.2.1.5.4216|4x|6f767364622d736572766572 +1.3.6.1.2.1.25.4.2.1.5.4217|4|wocd +1.3.6.1.2.1.25.4.2.1.5.4218|4|nlad +1.3.6.1.2.1.25.4.2.1.5.4219|4|wccpd +1.3.6.1.2.1.25.4.2.1.5.4220|4|dnscached +1.3.6.1.2.1.25.4.2.1.5.4221|4|rba +1.3.6.1.2.1.25.4.2.1.5.4222|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.4224|4x|2f7573722f7362696e2f6e616d6564202d66202d74202f7661722f6e616d6564202d75206e616d6564202d63202f636f6e6669672f6e616d65642e636f6e66202d6e2031 +1.3.6.1.2.1.25.4.2.1.5.4226|4| +1.3.6.1.2.1.25.4.2.1.5.4434|4|tmipsecd +1.3.6.1.2.1.25.4.2.1.5.4435|4|ntlmconnpool +1.3.6.1.2.1.25.4.2.1.5.4436|4|pgadmind +1.3.6.1.2.1.25.4.2.1.5.4437|4|antserver +1.3.6.1.2.1.25.4.2.1.5.4438|4x|64656475705f61646d696e +1.3.6.1.2.1.25.4.2.1.5.4439|4x|61706d5f77656273736f +1.3.6.1.2.1.25.4.2.1.5.4440|4|samlidpd +1.3.6.1.2.1.25.4.2.1.5.4441|4|eca +1.3.6.1.2.1.25.4.2.1.5.4442|4|autodosd +1.3.6.1.2.1.25.4.2.1.5.4443|4|scriptd +1.3.6.1.2.1.25.4.2.1.5.4451|4| +1.3.6.1.2.1.25.4.2.1.5.4773|4|tmrouted +1.3.6.1.2.1.25.4.2.1.5.4774|4|vdi +1.3.6.1.2.1.25.4.2.1.5.4775|4|alertd +1.3.6.1.2.1.25.4.2.1.5.4776|4|fpuserd +1.3.6.1.2.1.25.4.2.1.5.4777|4|bdosd +1.3.6.1.2.1.25.4.2.1.5.4778|4|pccd +1.3.6.1.2.1.25.4.2.1.5.4779|4|asm +1.3.6.1.2.1.25.4.2.1.5.4780|4|eam +1.3.6.1.2.1.25.4.2.1.5.4781|4|tamd +1.3.6.1.2.1.25.4.2.1.5.4782|4|rtconfd +1.3.6.1.2.1.25.4.2.1.5.4784|4x|2d642030202d6f202f7661722f746d702f746d726f757465642e6f7574 +1.3.6.1.2.1.25.4.2.1.5.4786|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.4787|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.5137|4|evrouted +1.3.6.1.2.1.25.4.2.1.5.5138|4|syscalld +1.3.6.1.2.1.25.4.2.1.5.5139|4|csyncd +1.3.6.1.2.1.25.4.2.1.5.5140|4|natstatsd +1.3.6.1.2.1.25.4.2.1.5.5141|4x|6d676d745f61636c64 +1.3.6.1.2.1.25.4.2.1.5.5142|4x|616466735f70726f7879 +1.3.6.1.2.1.25.4.2.1.5.5143|4|rewrite +1.3.6.1.2.1.25.4.2.1.5.5144|4|big3d +1.3.6.1.2.1.25.4.2.1.5.5145|4|omapd +1.3.6.1.2.1.25.4.2.1.5.5146|4|updated +1.3.6.1.2.1.25.4.2.1.5.5148|4| +1.3.6.1.2.1.25.4.2.1.5.5151|4x|2d746c7320544c537631202d636970686572732041455347434d3a4145533a214144483a2141454344483a2150534b3a2161454344483a214453533a2145434453413a214145533132383a2d534841313a4145533235362d534841202d72656e6567203836343030 +1.3.6.1.2.1.25.4.2.1.5.5155|4| +1.3.6.1.2.1.25.4.2.1.5.5159|4| +1.3.6.1.2.1.25.4.2.1.5.5501|4|botd +1.3.6.1.2.1.25.4.2.1.5.5502|4|clusterd +1.3.6.1.2.1.25.4.2.1.5.5503|4|bigd +1.3.6.1.2.1.25.4.2.1.5.5504|4|urldb +1.3.6.1.2.1.25.4.2.1.5.5505|4|logstatd +1.3.6.1.2.1.25.4.2.1.5.5506|4|errdefsd +1.3.6.1.2.1.25.4.2.1.5.5507|4|mysql +1.3.6.1.2.1.25.4.2.1.5.5508|4|logmysqld +1.3.6.1.2.1.25.4.2.1.5.5509|4|flowspecd +1.3.6.1.2.1.25.4.2.1.5.5510|4|ecmd +1.3.6.1.2.1.25.4.2.1.5.5516|4| +1.3.6.1.2.1.25.4.2.1.5.5522|4| +1.3.6.1.2.1.25.4.2.1.5.5861|4x|6963725f6576656e7464 +1.3.6.1.2.1.25.4.2.1.5.5862|4|debugd +1.3.6.1.2.1.25.4.2.1.5.5863|4|statsd +1.3.6.1.2.1.25.4.2.1.5.5864|4|mcpd +1.3.6.1.2.1.25.4.2.1.5.5865|4|zxfrd +1.3.6.1.2.1.25.4.2.1.5.5866|4x|646f736c37645f61747461636b5f6d6f6e69746f72 +1.3.6.1.2.1.25.4.2.1.5.5867|4|chmand +1.3.6.1.2.1.25.4.2.1.5.5868|4|autodiscd +1.3.6.1.2.1.25.4.2.1.5.5869|4|mdmsyncmgr +1.3.6.1.2.1.25.4.2.1.5.5870|4|apmd +1.3.6.1.2.1.25.4.2.1.5.5872|4x|2d66202d2d76617269616e7420316e6963 +1.3.6.1.2.1.25.4.2.1.5.5875|4| +1.3.6.1.2.1.25.4.2.1.5.5878|4x|2d64626d656d20353132202d6c697374656e203132372e302e302e31202d666f7263656c6f6164202d66 +1.3.6.1.2.1.25.4.2.1.5.5879|4x|2d532030202d66 +1.3.6.1.2.1.25.4.2.1.5.5884|4| +1.3.6.1.2.1.25.4.2.1.5.6344|4|gtmd +1.3.6.1.2.1.25.4.2.1.5.6345|4|dynconfd +1.3.6.1.2.1.25.4.2.1.5.6346|4|sshplugin +1.3.6.1.2.1.25.4.2.1.5.6347|4|tmm +1.3.6.1.2.1.25.4.2.1.5.6348|4|avrd +1.3.6.1.2.1.25.4.2.1.5.6349|4x|70696e675f6163636573735f6167656e74 +1.3.6.1.2.1.25.4.2.1.5.6350|4|dwbld +1.3.6.1.2.1.25.4.2.1.5.6351|4|merged +1.3.6.1.2.1.25.4.2.1.5.6352|4|wamd +1.3.6.1.2.1.25.4.2.1.5.6353|4|tomcat +1.3.6.1.2.1.25.4.2.1.5.6358|4x|2d532030202d66 +1.3.6.1.2.1.25.4.2.1.5.6366|4x|2d66 +1.3.6.1.2.1.25.4.2.1.5.6763|4|vxland +1.3.6.1.2.1.25.4.2.1.5.6764|4|hwpd +1.3.6.1.2.1.25.4.2.1.5.6765|4|tasd +1.3.6.1.2.1.25.4.2.1.5.6766|4|pkcs11d +1.3.6.1.2.1.25.4.2.1.5.6767|4|admd +1.3.6.1.2.1.25.4.2.1.5.6768|4|iprepd +1.3.6.1.2.1.25.4.2.1.5.6769|4x|676f6f676c655f6163636f756e74735f6461656d6f6e +1.3.6.1.2.1.25.4.2.1.5.6770|4|snmpd +1.3.6.1.2.1.25.4.2.1.5.6771|4|keymgmtd +1.3.6.1.2.1.25.4.2.1.5.6772|4|oauth +1.3.6.1.2.1.25.4.2.1.5.6782|4x|2f7573722f62696e2f676f6f676c655f6163636f756e74735f6461656d6f6e +1.3.6.1.2.1.25.4.2.1.5.6784|4| +1.3.6.1.2.1.25.4.2.1.5.7174|4|captured +1.3.6.1.2.1.25.4.2.1.5.7175|4|cbrd +1.3.6.1.2.1.25.4.2.1.5.7176|4|zrd +1.3.6.1.2.1.25.4.2.1.5.7177|4|lacpd +1.3.6.1.2.1.25.4.2.1.5.7178|4|monpd +1.3.6.1.2.1.25.4.2.1.5.7179|4|restjavad +1.3.6.1.2.1.25.4.2.1.5.7180|4|shmmapd +1.3.6.1.2.1.25.4.2.1.5.7181|4|websso +1.3.6.1.2.1.25.4.2.1.5.7182|4|devmgmtd +1.3.6.1.2.1.25.4.2.1.5.7183|4x|68747470645f61706d +1.3.6.1.2.1.25.4.2.1.5.7188|4x|2d446a6176612e7574696c2e6c6f6767696e672e6d616e616765723d636f6d2e66352e726573742e636f6d6d6f6e2e526573744c6f674d616e61676572202d446a6176612e7574696c2e6c6f6767696e672e636f6e6669672e66696c653d2f6574632f726573746a617661642e6c6f672e636f6e66202d446c6f67346a2e6465 +1.3.6.1.2.1.25.4.2.1.5.7192|4| +1.3.6.1.2.1.25.4.2.1.5.7194|4x|2d6c206e6f74696365 +1.3.6.1.2.1.25.4.2.1.5.7196|4x|2d2d746872656164733d32202d2d686f73742d6d656d6f72793d343032363533313834202d2d756d755f7468726573686f6c643d3930202d2d70656e64696e675f7472616e733d35303030202d2d726571756573745f73697a653d3130323430202d2d6269675f726571756573745f73697a652031303438353736202d2d6d61 +1.3.6.1.2.1.25.4.2.1.5.7523|4|sod +1.3.6.1.2.1.25.4.2.1.5.7524|4|wocplugin +1.3.6.1.2.1.25.4.2.1.5.7525|4x|73666c6f775f6167656e74 +1.3.6.1.2.1.25.4.2.1.5.7526|4|urldbmgrd +1.3.6.1.2.1.25.4.2.1.5.7527|4x|66355f7570646174655f636865636b6572 +1.3.6.1.2.1.25.4.2.1.5.7528|4|nsyncd +1.3.6.1.2.1.25.4.2.1.5.7529|4|lind +1.3.6.1.2.1.25.4.2.1.5.7530|4|aced +1.3.6.1.2.1.25.4.2.1.5.7531|4|restnoded +1.3.6.1.2.1.25.4.2.1.5.7532|4|datasyncd +1.3.6.1.2.1.25.4.2.1.5.7535|4| +1.3.6.1.2.1.25.4.2.1.5.7539|4| +1.3.6.1.2.1.25.4.2.1.5.7543|4x|2d66202d4c462035202f7661722f6c6f672f73666c6f775f6167656e742e6c6f67 +1.3.6.1.2.1.25.4.2.1.5.7544|4x|2f7573722f73686172652f726573742f6e6f64652f7372632f726573746e6f64652e6a73202d702038313035202d2d6c6f674c6576656c2066696e657374202d69202f7661722f6c6f672f726573746e6f6465642f726573746e6f6465642e6c6f67202d73206e6f6e65 +1.3.6.1.2.1.25.4.2.1.5.7949|4|fslogd +1.3.6.1.2.1.25.4.2.1.5.7950|4|ipsd +1.3.6.1.2.1.25.4.2.1.5.7951|4|nokiasnmpd +1.3.6.1.2.1.25.4.2.1.5.7952|4|dosl7d +1.3.6.1.2.1.25.4.2.1.5.7953|4|localdbmgr +1.3.6.1.2.1.25.4.2.1.5.7954|4x|77725f75726c646264 +1.3.6.1.2.1.25.4.2.1.5.9526|4x|2d6e77206d676d74202d6366202f6574632f6468636c69656e742e636f6e66202d6c66202f7661722f6c69622f6468636c69656e742f6468636c69656e742e6c6561736573202d7066202f7661722f72756e2f6468636c69656e742e706964 +1.3.6.1.2.1.25.4.2.1.5.9602|4x|2d36202d6e77206d676d74202d6366202f6574632f6468636c69656e742e636f6e66202d6c66202f7661722f6c69622f6468636c69656e742f6468636c69656e74362d6d676d742e6c6561736573202d7066202f7661722f72756e2f6468636c69656e74362d6d676d742e706964 +1.3.6.1.2.1.25.4.2.1.5.11784|4x|746f6d636174202d73202f62696e2f62617368202d63206578706f7274204a4156415f4f5054533d272d4468747470732e70726f746f636f6c733d544c5376312e312c544c5376312e32202d44707974686f6e2e63616368656469723d2f7661722f746d70202d446a6176612e6c6962726172792e706174683d2f7573722f6c +1.3.6.1.2.1.25.4.2.1.5.13563|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.13565|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.13566|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.15387|4x|2d67 +1.3.6.1.2.1.25.4.2.1.5.15921|4x|2d4468747470732e70726f746f636f6c733d544c5376312e312c544c5376312e32202d44707974686f6e2e63616368656469723d2f7661722f746d70202d446a6176612e6c6962726172792e706174683d2f7573722f6c6962202d4466696c652e656e636f64696e673d5554462d38202d636c69656e74202d586d783133306d +1.3.6.1.2.1.25.4.2.1.5.16645|4x|2d70206c6f63616c362e696e666f +1.3.6.1.2.1.25.4.2.1.5.16646|4x|2d70206c6f63616c362e696e666f +1.3.6.1.2.1.25.4.2.1.5.16648|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.16651|4| +1.3.6.1.2.1.25.4.2.1.5.16652|4| +1.3.6.1.2.1.25.4.2.1.5.16653|4| +1.3.6.1.2.1.25.4.2.1.5.16654|4| +1.3.6.1.2.1.25.4.2.1.5.17900|4x|2d66202d74202f7661722f6e616d6564202d75206e616d6564202d63202f636f6e6669672f6e616d65642e636f6e66202d6e2031 +1.3.6.1.2.1.25.4.2.1.5.18651|4x|2d702038313030202d6c2032202d692034343038353361662d376362352d346530302d393631632d373133303033336265613235 +1.3.6.1.2.1.25.4.2.1.5.23175|4| +1.3.6.1.2.1.25.4.2.1.5.23330|4x|2d66202d63202f636f6e6669672f736e6d702f736e6d70642e636f6e66202d4c7364202d4c462036202f7661722f6c6f672f736e6d70642e6c6f67202d70202f7661722f72756e2f736e6d70642e706964 +1.3.6.1.2.1.25.4.2.1.5.25514|4| +1.3.6.1.2.1.25.4.2.1.5.25517|4x|2d2d746d6d636f756e742032 +1.3.6.1.2.1.25.4.2.1.5.25518|4x|2f7661722f72756e203220322030202d2d706c6174666f726d205a313030202d6d202d732035393434 +1.3.6.1.2.1.25.4.2.1.5.25522|4| +1.3.6.1.2.1.25.4.2.1.5.25524|4| +1.3.6.1.2.1.25.4.2.1.5.25531|4| +1.3.6.1.2.1.25.4.2.1.5.25946|4x|2d53 +1.3.6.1.2.1.25.4.2.1.5.27567|4x|2d63206d656d3a2f2f6e746c6d +1.3.6.1.2.1.25.4.2.1.5.29431|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.29439|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.29440|4x|2d4454726166666963536869656c64202d444156525549202d44576562416363656c657261746f72202d4453414d +1.3.6.1.2.1.25.4.2.1.5.30092|4x|2d542032202d2d746d69642030202d2d6e7075732032202d2d706c6174666f726d205a313030202d6d202d732035393434 +1.3.6.1.2.1.25.4.2.1.5.30120|4x|2d6c202f7661722f6c6f672f7261636f6f6e2e6c6f67202d66202f6574632f7261636f6f6e2f7261636f6f6e2e636f6e66 +1.3.6.1.2.1.25.4.2.1.5.30180|4| +1.3.6.1.2.1.25.4.2.1.5.32066|4x|2d2d6e6f636c6561722074747930207474795330207674323230 +1.3.6.1.2.1.25.4.2.1.6.1|2|4 +1.3.6.1.2.1.25.4.2.1.6.415|2|4 +1.3.6.1.2.1.25.4.2.1.6.440|2|4 +1.3.6.1.2.1.25.4.2.1.6.447|2|4 +1.3.6.1.2.1.25.4.2.1.6.921|2|4 +1.3.6.1.2.1.25.4.2.1.6.951|2|4 +1.3.6.1.2.1.25.4.2.1.6.977|2|4 +1.3.6.1.2.1.25.4.2.1.6.979|2|4 +1.3.6.1.2.1.25.4.2.1.6.982|2|4 +1.3.6.1.2.1.25.4.2.1.6.984|2|4 +1.3.6.1.2.1.25.4.2.1.6.1038|2|4 +1.3.6.1.2.1.25.4.2.1.6.1826|2|4 +1.3.6.1.2.1.25.4.2.1.6.2851|2|4 +1.3.6.1.2.1.25.4.2.1.6.2852|2|4 +1.3.6.1.2.1.25.4.2.1.6.2919|2|4 +1.3.6.1.2.1.25.4.2.1.6.3773|2|4 +1.3.6.1.2.1.25.4.2.1.6.4068|2|4 +1.3.6.1.2.1.25.4.2.1.6.4085|2|4 +1.3.6.1.2.1.25.4.2.1.6.4119|2|4 +1.3.6.1.2.1.25.4.2.1.6.4122|2|4 +1.3.6.1.2.1.25.4.2.1.6.4212|2|4 +1.3.6.1.2.1.25.4.2.1.6.4213|2|4 +1.3.6.1.2.1.25.4.2.1.6.4214|2|4 +1.3.6.1.2.1.25.4.2.1.6.4215|2|4 +1.3.6.1.2.1.25.4.2.1.6.4216|2|4 +1.3.6.1.2.1.25.4.2.1.6.4217|2|4 +1.3.6.1.2.1.25.4.2.1.6.4218|2|4 +1.3.6.1.2.1.25.4.2.1.6.4219|2|4 +1.3.6.1.2.1.25.4.2.1.6.4220|2|4 +1.3.6.1.2.1.25.4.2.1.6.4221|2|4 +1.3.6.1.2.1.25.4.2.1.6.4222|2|4 +1.3.6.1.2.1.25.4.2.1.6.4224|2|4 +1.3.6.1.2.1.25.4.2.1.6.4226|2|4 +1.3.6.1.2.1.25.4.2.1.6.4434|2|4 +1.3.6.1.2.1.25.4.2.1.6.4435|2|4 +1.3.6.1.2.1.25.4.2.1.6.4436|2|4 +1.3.6.1.2.1.25.4.2.1.6.4437|2|4 +1.3.6.1.2.1.25.4.2.1.6.4438|2|4 +1.3.6.1.2.1.25.4.2.1.6.4439|2|4 +1.3.6.1.2.1.25.4.2.1.6.4440|2|4 +1.3.6.1.2.1.25.4.2.1.6.4441|2|4 +1.3.6.1.2.1.25.4.2.1.6.4442|2|4 +1.3.6.1.2.1.25.4.2.1.6.4443|2|4 +1.3.6.1.2.1.25.4.2.1.6.4451|2|4 +1.3.6.1.2.1.25.4.2.1.6.4773|2|4 +1.3.6.1.2.1.25.4.2.1.6.4774|2|4 +1.3.6.1.2.1.25.4.2.1.6.4775|2|4 +1.3.6.1.2.1.25.4.2.1.6.4776|2|4 +1.3.6.1.2.1.25.4.2.1.6.4777|2|4 +1.3.6.1.2.1.25.4.2.1.6.4778|2|4 +1.3.6.1.2.1.25.4.2.1.6.4779|2|4 +1.3.6.1.2.1.25.4.2.1.6.4780|2|4 +1.3.6.1.2.1.25.4.2.1.6.4781|2|4 +1.3.6.1.2.1.25.4.2.1.6.4782|2|4 +1.3.6.1.2.1.25.4.2.1.6.4784|2|4 +1.3.6.1.2.1.25.4.2.1.6.4786|2|4 +1.3.6.1.2.1.25.4.2.1.6.4787|2|4 +1.3.6.1.2.1.25.4.2.1.6.5137|2|4 +1.3.6.1.2.1.25.4.2.1.6.5138|2|4 +1.3.6.1.2.1.25.4.2.1.6.5139|2|4 +1.3.6.1.2.1.25.4.2.1.6.5140|2|4 +1.3.6.1.2.1.25.4.2.1.6.5141|2|4 +1.3.6.1.2.1.25.4.2.1.6.5142|2|4 +1.3.6.1.2.1.25.4.2.1.6.5143|2|4 +1.3.6.1.2.1.25.4.2.1.6.5144|2|4 +1.3.6.1.2.1.25.4.2.1.6.5145|2|4 +1.3.6.1.2.1.25.4.2.1.6.5146|2|4 +1.3.6.1.2.1.25.4.2.1.6.5148|2|4 +1.3.6.1.2.1.25.4.2.1.6.5151|2|4 +1.3.6.1.2.1.25.4.2.1.6.5155|2|4 +1.3.6.1.2.1.25.4.2.1.6.5159|2|4 +1.3.6.1.2.1.25.4.2.1.6.5501|2|4 +1.3.6.1.2.1.25.4.2.1.6.5502|2|4 +1.3.6.1.2.1.25.4.2.1.6.5503|2|4 +1.3.6.1.2.1.25.4.2.1.6.5504|2|4 +1.3.6.1.2.1.25.4.2.1.6.5505|2|4 +1.3.6.1.2.1.25.4.2.1.6.5506|2|4 +1.3.6.1.2.1.25.4.2.1.6.5507|2|4 +1.3.6.1.2.1.25.4.2.1.6.5508|2|4 +1.3.6.1.2.1.25.4.2.1.6.5509|2|4 +1.3.6.1.2.1.25.4.2.1.6.5510|2|4 +1.3.6.1.2.1.25.4.2.1.6.5516|2|4 +1.3.6.1.2.1.25.4.2.1.6.5522|2|4 +1.3.6.1.2.1.25.4.2.1.6.5861|2|4 +1.3.6.1.2.1.25.4.2.1.6.5862|2|4 +1.3.6.1.2.1.25.4.2.1.6.5863|2|4 +1.3.6.1.2.1.25.4.2.1.6.5864|2|4 +1.3.6.1.2.1.25.4.2.1.6.5865|2|4 +1.3.6.1.2.1.25.4.2.1.6.5866|2|4 +1.3.6.1.2.1.25.4.2.1.6.5867|2|4 +1.3.6.1.2.1.25.4.2.1.6.5868|2|4 +1.3.6.1.2.1.25.4.2.1.6.5869|2|4 +1.3.6.1.2.1.25.4.2.1.6.5870|2|4 +1.3.6.1.2.1.25.4.2.1.6.5872|2|4 +1.3.6.1.2.1.25.4.2.1.6.5875|2|4 +1.3.6.1.2.1.25.4.2.1.6.5878|2|4 +1.3.6.1.2.1.25.4.2.1.6.5879|2|4 +1.3.6.1.2.1.25.4.2.1.6.5884|2|4 +1.3.6.1.2.1.25.4.2.1.6.6344|2|4 +1.3.6.1.2.1.25.4.2.1.6.6345|2|4 +1.3.6.1.2.1.25.4.2.1.6.6346|2|4 +1.3.6.1.2.1.25.4.2.1.6.6347|2|4 +1.3.6.1.2.1.25.4.2.1.6.6348|2|4 +1.3.6.1.2.1.25.4.2.1.6.6349|2|4 +1.3.6.1.2.1.25.4.2.1.6.6350|2|4 +1.3.6.1.2.1.25.4.2.1.6.6351|2|4 +1.3.6.1.2.1.25.4.2.1.6.6352|2|4 +1.3.6.1.2.1.25.4.2.1.6.6353|2|4 +1.3.6.1.2.1.25.4.2.1.6.6358|2|4 +1.3.6.1.2.1.25.4.2.1.6.6366|2|4 +1.3.6.1.2.1.25.4.2.1.6.6763|2|4 +1.3.6.1.2.1.25.4.2.1.6.6764|2|4 +1.3.6.1.2.1.25.4.2.1.6.6765|2|4 +1.3.6.1.2.1.25.4.2.1.6.6766|2|4 +1.3.6.1.2.1.25.4.2.1.6.6767|2|4 +1.3.6.1.2.1.25.4.2.1.6.6768|2|4 +1.3.6.1.2.1.25.4.2.1.6.6769|2|4 +1.3.6.1.2.1.25.4.2.1.6.6770|2|4 +1.3.6.1.2.1.25.4.2.1.6.6771|2|4 +1.3.6.1.2.1.25.4.2.1.6.6772|2|4 +1.3.6.1.2.1.25.4.2.1.6.6782|2|4 +1.3.6.1.2.1.25.4.2.1.6.6784|2|4 +1.3.6.1.2.1.25.4.2.1.6.7174|2|4 +1.3.6.1.2.1.25.4.2.1.6.7175|2|4 +1.3.6.1.2.1.25.4.2.1.6.7176|2|4 +1.3.6.1.2.1.25.4.2.1.6.7177|2|4 +1.3.6.1.2.1.25.4.2.1.6.7178|2|4 +1.3.6.1.2.1.25.4.2.1.6.7179|2|4 +1.3.6.1.2.1.25.4.2.1.6.7180|2|4 +1.3.6.1.2.1.25.4.2.1.6.7181|2|4 +1.3.6.1.2.1.25.4.2.1.6.7182|2|4 +1.3.6.1.2.1.25.4.2.1.6.7183|2|4 +1.3.6.1.2.1.25.4.2.1.6.7188|2|4 +1.3.6.1.2.1.25.4.2.1.6.7192|2|4 +1.3.6.1.2.1.25.4.2.1.6.7194|2|4 +1.3.6.1.2.1.25.4.2.1.6.7196|2|4 +1.3.6.1.2.1.25.4.2.1.6.7523|2|4 +1.3.6.1.2.1.25.4.2.1.6.7524|2|4 +1.3.6.1.2.1.25.4.2.1.6.7525|2|4 +1.3.6.1.2.1.25.4.2.1.6.7526|2|4 +1.3.6.1.2.1.25.4.2.1.6.7527|2|4 +1.3.6.1.2.1.25.4.2.1.6.7528|2|4 +1.3.6.1.2.1.25.4.2.1.6.7529|2|4 +1.3.6.1.2.1.25.4.2.1.6.7530|2|4 +1.3.6.1.2.1.25.4.2.1.6.7531|2|4 +1.3.6.1.2.1.25.4.2.1.6.7532|2|4 +1.3.6.1.2.1.25.4.2.1.6.7535|2|4 +1.3.6.1.2.1.25.4.2.1.6.7539|2|4 +1.3.6.1.2.1.25.4.2.1.6.7543|2|4 +1.3.6.1.2.1.25.4.2.1.6.7544|2|4 +1.3.6.1.2.1.25.4.2.1.6.7949|2|4 +1.3.6.1.2.1.25.4.2.1.6.7950|2|4 +1.3.6.1.2.1.25.4.2.1.6.7951|2|4 +1.3.6.1.2.1.25.4.2.1.6.7952|2|4 +1.3.6.1.2.1.25.4.2.1.6.7953|2|4 +1.3.6.1.2.1.25.4.2.1.6.7954|2|4 +1.3.6.1.2.1.25.4.2.1.6.9526|2|4 +1.3.6.1.2.1.25.4.2.1.6.9602|2|4 +1.3.6.1.2.1.25.4.2.1.6.11784|2|4 +1.3.6.1.2.1.25.4.2.1.6.13563|2|4 +1.3.6.1.2.1.25.4.2.1.6.13565|2|4 +1.3.6.1.2.1.25.4.2.1.6.13566|2|4 +1.3.6.1.2.1.25.4.2.1.6.15387|2|4 +1.3.6.1.2.1.25.4.2.1.6.15921|2|4 +1.3.6.1.2.1.25.4.2.1.6.16645|2|4 +1.3.6.1.2.1.25.4.2.1.6.16646|2|4 +1.3.6.1.2.1.25.4.2.1.6.16648|2|4 +1.3.6.1.2.1.25.4.2.1.6.16651|2|4 +1.3.6.1.2.1.25.4.2.1.6.16652|2|4 +1.3.6.1.2.1.25.4.2.1.6.16653|2|4 +1.3.6.1.2.1.25.4.2.1.6.16654|2|4 +1.3.6.1.2.1.25.4.2.1.6.17900|2|4 +1.3.6.1.2.1.25.4.2.1.6.18651|2|4 +1.3.6.1.2.1.25.4.2.1.6.23175|2|4 +1.3.6.1.2.1.25.4.2.1.6.23330|2|4 +1.3.6.1.2.1.25.4.2.1.6.25514|2|4 +1.3.6.1.2.1.25.4.2.1.6.25517|2|4 +1.3.6.1.2.1.25.4.2.1.6.25518|2|4 +1.3.6.1.2.1.25.4.2.1.6.25522|2|4 +1.3.6.1.2.1.25.4.2.1.6.25524|2|4 +1.3.6.1.2.1.25.4.2.1.6.25531|2|4 +1.3.6.1.2.1.25.4.2.1.6.25946|2|4 +1.3.6.1.2.1.25.4.2.1.6.27567|2|4 +1.3.6.1.2.1.25.4.2.1.6.29431|2|4 +1.3.6.1.2.1.25.4.2.1.6.29439|2|4 +1.3.6.1.2.1.25.4.2.1.6.29440|2|4 +1.3.6.1.2.1.25.4.2.1.6.30092|2|4 +1.3.6.1.2.1.25.4.2.1.6.30120|2|4 +1.3.6.1.2.1.25.4.2.1.6.30180|2|4 +1.3.6.1.2.1.25.4.2.1.6.32066|2|4 +1.3.6.1.2.1.25.4.2.1.7.1|2|2 +1.3.6.1.2.1.25.4.2.1.7.415|2|2 +1.3.6.1.2.1.25.4.2.1.7.440|2|2 +1.3.6.1.2.1.25.4.2.1.7.447|2|2 +1.3.6.1.2.1.25.4.2.1.7.921|2|2 +1.3.6.1.2.1.25.4.2.1.7.951|2|2 +1.3.6.1.2.1.25.4.2.1.7.977|2|2 +1.3.6.1.2.1.25.4.2.1.7.979|2|2 +1.3.6.1.2.1.25.4.2.1.7.982|2|2 +1.3.6.1.2.1.25.4.2.1.7.984|2|2 +1.3.6.1.2.1.25.4.2.1.7.1038|2|2 +1.3.6.1.2.1.25.4.2.1.7.1826|2|2 +1.3.6.1.2.1.25.4.2.1.7.2851|2|2 +1.3.6.1.2.1.25.4.2.1.7.2852|2|2 +1.3.6.1.2.1.25.4.2.1.7.2919|2|2 +1.3.6.1.2.1.25.4.2.1.7.3773|2|2 +1.3.6.1.2.1.25.4.2.1.7.4068|2|2 +1.3.6.1.2.1.25.4.2.1.7.4085|2|2 +1.3.6.1.2.1.25.4.2.1.7.4119|2|2 +1.3.6.1.2.1.25.4.2.1.7.4122|2|2 +1.3.6.1.2.1.25.4.2.1.7.4212|2|2 +1.3.6.1.2.1.25.4.2.1.7.4213|2|2 +1.3.6.1.2.1.25.4.2.1.7.4214|2|2 +1.3.6.1.2.1.25.4.2.1.7.4215|2|2 +1.3.6.1.2.1.25.4.2.1.7.4216|2|2 +1.3.6.1.2.1.25.4.2.1.7.4217|2|2 +1.3.6.1.2.1.25.4.2.1.7.4218|2|2 +1.3.6.1.2.1.25.4.2.1.7.4219|2|2 +1.3.6.1.2.1.25.4.2.1.7.4220|2|2 +1.3.6.1.2.1.25.4.2.1.7.4221|2|2 +1.3.6.1.2.1.25.4.2.1.7.4222|2|2 +1.3.6.1.2.1.25.4.2.1.7.4224|2|2 +1.3.6.1.2.1.25.4.2.1.7.4226|2|2 +1.3.6.1.2.1.25.4.2.1.7.4434|2|2 +1.3.6.1.2.1.25.4.2.1.7.4435|2|2 +1.3.6.1.2.1.25.4.2.1.7.4436|2|2 +1.3.6.1.2.1.25.4.2.1.7.4437|2|2 +1.3.6.1.2.1.25.4.2.1.7.4438|2|2 +1.3.6.1.2.1.25.4.2.1.7.4439|2|2 +1.3.6.1.2.1.25.4.2.1.7.4440|2|2 +1.3.6.1.2.1.25.4.2.1.7.4441|2|2 +1.3.6.1.2.1.25.4.2.1.7.4442|2|2 +1.3.6.1.2.1.25.4.2.1.7.4443|2|2 +1.3.6.1.2.1.25.4.2.1.7.4451|2|2 +1.3.6.1.2.1.25.4.2.1.7.4773|2|2 +1.3.6.1.2.1.25.4.2.1.7.4774|2|2 +1.3.6.1.2.1.25.4.2.1.7.4775|2|2 +1.3.6.1.2.1.25.4.2.1.7.4776|2|2 +1.3.6.1.2.1.25.4.2.1.7.4777|2|2 +1.3.6.1.2.1.25.4.2.1.7.4778|2|2 +1.3.6.1.2.1.25.4.2.1.7.4779|2|2 +1.3.6.1.2.1.25.4.2.1.7.4780|2|2 +1.3.6.1.2.1.25.4.2.1.7.4781|2|2 +1.3.6.1.2.1.25.4.2.1.7.4782|2|2 +1.3.6.1.2.1.25.4.2.1.7.4784|2|2 +1.3.6.1.2.1.25.4.2.1.7.4786|2|2 +1.3.6.1.2.1.25.4.2.1.7.4787|2|2 +1.3.6.1.2.1.25.4.2.1.7.5137|2|2 +1.3.6.1.2.1.25.4.2.1.7.5138|2|2 +1.3.6.1.2.1.25.4.2.1.7.5139|2|2 +1.3.6.1.2.1.25.4.2.1.7.5140|2|2 +1.3.6.1.2.1.25.4.2.1.7.5141|2|2 +1.3.6.1.2.1.25.4.2.1.7.5142|2|2 +1.3.6.1.2.1.25.4.2.1.7.5143|2|2 +1.3.6.1.2.1.25.4.2.1.7.5144|2|2 +1.3.6.1.2.1.25.4.2.1.7.5145|2|2 +1.3.6.1.2.1.25.4.2.1.7.5146|2|2 +1.3.6.1.2.1.25.4.2.1.7.5148|2|2 +1.3.6.1.2.1.25.4.2.1.7.5151|2|2 +1.3.6.1.2.1.25.4.2.1.7.5155|2|2 +1.3.6.1.2.1.25.4.2.1.7.5159|2|2 +1.3.6.1.2.1.25.4.2.1.7.5501|2|2 +1.3.6.1.2.1.25.4.2.1.7.5502|2|2 +1.3.6.1.2.1.25.4.2.1.7.5503|2|2 +1.3.6.1.2.1.25.4.2.1.7.5504|2|2 +1.3.6.1.2.1.25.4.2.1.7.5505|2|2 +1.3.6.1.2.1.25.4.2.1.7.5506|2|2 +1.3.6.1.2.1.25.4.2.1.7.5507|2|2 +1.3.6.1.2.1.25.4.2.1.7.5508|2|2 +1.3.6.1.2.1.25.4.2.1.7.5509|2|2 +1.3.6.1.2.1.25.4.2.1.7.5510|2|2 +1.3.6.1.2.1.25.4.2.1.7.5516|2|2 +1.3.6.1.2.1.25.4.2.1.7.5522|2|2 +1.3.6.1.2.1.25.4.2.1.7.5861|2|2 +1.3.6.1.2.1.25.4.2.1.7.5862|2|2 +1.3.6.1.2.1.25.4.2.1.7.5863|2|2 +1.3.6.1.2.1.25.4.2.1.7.5864|2|2 +1.3.6.1.2.1.25.4.2.1.7.5865|2|2 +1.3.6.1.2.1.25.4.2.1.7.5866|2|2 +1.3.6.1.2.1.25.4.2.1.7.5867|2|2 +1.3.6.1.2.1.25.4.2.1.7.5868|2|2 +1.3.6.1.2.1.25.4.2.1.7.5869|2|2 +1.3.6.1.2.1.25.4.2.1.7.5870|2|2 +1.3.6.1.2.1.25.4.2.1.7.5872|2|2 +1.3.6.1.2.1.25.4.2.1.7.5875|2|2 +1.3.6.1.2.1.25.4.2.1.7.5878|2|2 +1.3.6.1.2.1.25.4.2.1.7.5879|2|2 +1.3.6.1.2.1.25.4.2.1.7.5884|2|2 +1.3.6.1.2.1.25.4.2.1.7.6344|2|2 +1.3.6.1.2.1.25.4.2.1.7.6345|2|2 +1.3.6.1.2.1.25.4.2.1.7.6346|2|2 +1.3.6.1.2.1.25.4.2.1.7.6347|2|2 +1.3.6.1.2.1.25.4.2.1.7.6348|2|2 +1.3.6.1.2.1.25.4.2.1.7.6349|2|2 +1.3.6.1.2.1.25.4.2.1.7.6350|2|2 +1.3.6.1.2.1.25.4.2.1.7.6351|2|2 +1.3.6.1.2.1.25.4.2.1.7.6352|2|2 +1.3.6.1.2.1.25.4.2.1.7.6353|2|2 +1.3.6.1.2.1.25.4.2.1.7.6358|2|2 +1.3.6.1.2.1.25.4.2.1.7.6366|2|2 +1.3.6.1.2.1.25.4.2.1.7.6763|2|2 +1.3.6.1.2.1.25.4.2.1.7.6764|2|2 +1.3.6.1.2.1.25.4.2.1.7.6765|2|2 +1.3.6.1.2.1.25.4.2.1.7.6766|2|2 +1.3.6.1.2.1.25.4.2.1.7.6767|2|2 +1.3.6.1.2.1.25.4.2.1.7.6768|2|2 +1.3.6.1.2.1.25.4.2.1.7.6769|2|2 +1.3.6.1.2.1.25.4.2.1.7.6770|2|2 +1.3.6.1.2.1.25.4.2.1.7.6771|2|2 +1.3.6.1.2.1.25.4.2.1.7.6772|2|2 +1.3.6.1.2.1.25.4.2.1.7.6782|2|2 +1.3.6.1.2.1.25.4.2.1.7.6784|2|2 +1.3.6.1.2.1.25.4.2.1.7.7174|2|2 +1.3.6.1.2.1.25.4.2.1.7.7175|2|2 +1.3.6.1.2.1.25.4.2.1.7.7176|2|2 +1.3.6.1.2.1.25.4.2.1.7.7177|2|2 +1.3.6.1.2.1.25.4.2.1.7.7178|2|2 +1.3.6.1.2.1.25.4.2.1.7.7179|2|2 +1.3.6.1.2.1.25.4.2.1.7.7180|2|2 +1.3.6.1.2.1.25.4.2.1.7.7181|2|2 +1.3.6.1.2.1.25.4.2.1.7.7182|2|2 +1.3.6.1.2.1.25.4.2.1.7.7183|2|2 +1.3.6.1.2.1.25.4.2.1.7.7188|2|2 +1.3.6.1.2.1.25.4.2.1.7.7192|2|2 +1.3.6.1.2.1.25.4.2.1.7.7194|2|2 +1.3.6.1.2.1.25.4.2.1.7.7196|2|2 +1.3.6.1.2.1.25.4.2.1.7.7523|2|2 +1.3.6.1.2.1.25.4.2.1.7.7524|2|2 +1.3.6.1.2.1.25.4.2.1.7.7525|2|2 +1.3.6.1.2.1.25.4.2.1.7.7526|2|2 +1.3.6.1.2.1.25.4.2.1.7.7527|2|2 +1.3.6.1.2.1.25.4.2.1.7.7528|2|2 +1.3.6.1.2.1.25.4.2.1.7.7529|2|2 +1.3.6.1.2.1.25.4.2.1.7.7530|2|2 +1.3.6.1.2.1.25.4.2.1.7.7531|2|2 +1.3.6.1.2.1.25.4.2.1.7.7532|2|2 +1.3.6.1.2.1.25.4.2.1.7.7535|2|2 +1.3.6.1.2.1.25.4.2.1.7.7539|2|2 +1.3.6.1.2.1.25.4.2.1.7.7543|2|2 +1.3.6.1.2.1.25.4.2.1.7.7544|2|2 +1.3.6.1.2.1.25.4.2.1.7.7949|2|2 +1.3.6.1.2.1.25.4.2.1.7.7950|2|2 +1.3.6.1.2.1.25.4.2.1.7.7951|2|2 +1.3.6.1.2.1.25.4.2.1.7.7952|2|2 +1.3.6.1.2.1.25.4.2.1.7.7953|2|2 +1.3.6.1.2.1.25.4.2.1.7.7954|2|2 +1.3.6.1.2.1.25.4.2.1.7.9526|2|2 +1.3.6.1.2.1.25.4.2.1.7.9602|2|2 +1.3.6.1.2.1.25.4.2.1.7.11784|2|2 +1.3.6.1.2.1.25.4.2.1.7.13563|2|2 +1.3.6.1.2.1.25.4.2.1.7.13565|2|2 +1.3.6.1.2.1.25.4.2.1.7.13566|2|2 +1.3.6.1.2.1.25.4.2.1.7.15387|2|2 +1.3.6.1.2.1.25.4.2.1.7.15921|2|2 +1.3.6.1.2.1.25.4.2.1.7.16645|2|2 +1.3.6.1.2.1.25.4.2.1.7.16646|2|2 +1.3.6.1.2.1.25.4.2.1.7.16648|2|2 +1.3.6.1.2.1.25.4.2.1.7.16651|2|2 +1.3.6.1.2.1.25.4.2.1.7.16652|2|2 +1.3.6.1.2.1.25.4.2.1.7.16653|2|2 +1.3.6.1.2.1.25.4.2.1.7.16654|2|2 +1.3.6.1.2.1.25.4.2.1.7.17900|2|2 +1.3.6.1.2.1.25.4.2.1.7.18651|2|2 +1.3.6.1.2.1.25.4.2.1.7.23175|2|2 +1.3.6.1.2.1.25.4.2.1.7.23330|2|1 +1.3.6.1.2.1.25.4.2.1.7.25514|2|2 +1.3.6.1.2.1.25.4.2.1.7.25517|2|2 +1.3.6.1.2.1.25.4.2.1.7.25518|2|2 +1.3.6.1.2.1.25.4.2.1.7.25522|2|2 +1.3.6.1.2.1.25.4.2.1.7.25524|2|2 +1.3.6.1.2.1.25.4.2.1.7.25531|2|2 +1.3.6.1.2.1.25.4.2.1.7.25946|2|2 +1.3.6.1.2.1.25.4.2.1.7.27567|2|2 +1.3.6.1.2.1.25.4.2.1.7.29431|2|2 +1.3.6.1.2.1.25.4.2.1.7.29439|2|2 +1.3.6.1.2.1.25.4.2.1.7.29440|2|2 +1.3.6.1.2.1.25.4.2.1.7.30092|2|2 +1.3.6.1.2.1.25.4.2.1.7.30120|2|2 +1.3.6.1.2.1.25.4.2.1.7.30180|2|2 +1.3.6.1.2.1.25.4.2.1.7.32066|2|2 +1.3.6.1.2.1.25.5.1.1.1.1|2|165262 +1.3.6.1.2.1.25.5.1.1.1.415|2|61390 +1.3.6.1.2.1.25.5.1.1.1.440|2|4 +1.3.6.1.2.1.25.5.1.1.1.447|2|39 +1.3.6.1.2.1.25.5.1.1.1.921|2|30333 +1.3.6.1.2.1.25.5.1.1.1.951|2|5692 +1.3.6.1.2.1.25.5.1.1.1.977|2|40480 +1.3.6.1.2.1.25.5.1.1.1.979|2|0 +1.3.6.1.2.1.25.5.1.1.1.982|2|12218 +1.3.6.1.2.1.25.5.1.1.1.984|2|25789 +1.3.6.1.2.1.25.5.1.1.1.1038|2|4465 +1.3.6.1.2.1.25.5.1.1.1.1826|2|48202 +1.3.6.1.2.1.25.5.1.1.1.2851|2|7058 +1.3.6.1.2.1.25.5.1.1.1.2852|2|17967 +1.3.6.1.2.1.25.5.1.1.1.2919|2|42261 +1.3.6.1.2.1.25.5.1.1.1.3773|2|6 +1.3.6.1.2.1.25.5.1.1.1.4068|2|8841 +1.3.6.1.2.1.25.5.1.1.1.4085|2|7824 +1.3.6.1.2.1.25.5.1.1.1.4119|2|1 +1.3.6.1.2.1.25.5.1.1.1.4122|2|0 +1.3.6.1.2.1.25.5.1.1.1.4212|2|8 +1.3.6.1.2.1.25.5.1.1.1.4213|2|7 +1.3.6.1.2.1.25.5.1.1.1.4214|2|6 +1.3.6.1.2.1.25.5.1.1.1.4215|2|7 +1.3.6.1.2.1.25.5.1.1.1.4216|2|13 +1.3.6.1.2.1.25.5.1.1.1.4217|2|7 +1.3.6.1.2.1.25.5.1.1.1.4218|2|7 +1.3.6.1.2.1.25.5.1.1.1.4219|2|6 +1.3.6.1.2.1.25.5.1.1.1.4220|2|6 +1.3.6.1.2.1.25.5.1.1.1.4221|2|6 +1.3.6.1.2.1.25.5.1.1.1.4222|2|6290 +1.3.6.1.2.1.25.5.1.1.1.4224|2|5535 +1.3.6.1.2.1.25.5.1.1.1.4226|2|7801 +1.3.6.1.2.1.25.5.1.1.1.4434|2|6 +1.3.6.1.2.1.25.5.1.1.1.4435|2|5 +1.3.6.1.2.1.25.5.1.1.1.4436|2|7 +1.3.6.1.2.1.25.5.1.1.1.4437|2|7 +1.3.6.1.2.1.25.5.1.1.1.4438|2|7 +1.3.6.1.2.1.25.5.1.1.1.4439|2|6 +1.3.6.1.2.1.25.5.1.1.1.4440|2|6 +1.3.6.1.2.1.25.5.1.1.1.4441|2|6 +1.3.6.1.2.1.25.5.1.1.1.4442|2|9 +1.3.6.1.2.1.25.5.1.1.1.4443|2|7 +1.3.6.1.2.1.25.5.1.1.1.4451|2|5345 +1.3.6.1.2.1.25.5.1.1.1.4773|2|6 +1.3.6.1.2.1.25.5.1.1.1.4774|2|6 +1.3.6.1.2.1.25.5.1.1.1.4775|2|14 +1.3.6.1.2.1.25.5.1.1.1.4776|2|6 +1.3.6.1.2.1.25.5.1.1.1.4777|2|6 +1.3.6.1.2.1.25.5.1.1.1.4778|2|8 +1.3.6.1.2.1.25.5.1.1.1.4779|2|10 +1.3.6.1.2.1.25.5.1.1.1.4780|2|6 +1.3.6.1.2.1.25.5.1.1.1.4781|2|6 +1.3.6.1.2.1.25.5.1.1.1.4782|2|6 +1.3.6.1.2.1.25.5.1.1.1.4784|2|25 +1.3.6.1.2.1.25.5.1.1.1.4786|2|6114 +1.3.6.1.2.1.25.5.1.1.1.4787|2|18170 +1.3.6.1.2.1.25.5.1.1.1.5137|2|8 +1.3.6.1.2.1.25.5.1.1.1.5138|2|6 +1.3.6.1.2.1.25.5.1.1.1.5139|2|290 +1.3.6.1.2.1.25.5.1.1.1.5140|2|8 +1.3.6.1.2.1.25.5.1.1.1.5141|2|6 +1.3.6.1.2.1.25.5.1.1.1.5142|2|7 +1.3.6.1.2.1.25.5.1.1.1.5143|2|7 +1.3.6.1.2.1.25.5.1.1.1.5144|2|232 +1.3.6.1.2.1.25.5.1.1.1.5145|2|6 +1.3.6.1.2.1.25.5.1.1.1.5146|2|6 +1.3.6.1.2.1.25.5.1.1.1.5148|2|10704 +1.3.6.1.2.1.25.5.1.1.1.5151|2|766 +1.3.6.1.2.1.25.5.1.1.1.5155|2|249218 +1.3.6.1.2.1.25.5.1.1.1.5159|2|19 +1.3.6.1.2.1.25.5.1.1.1.5501|2|7 +1.3.6.1.2.1.25.5.1.1.1.5502|2|6 +1.3.6.1.2.1.25.5.1.1.1.5503|2|253 +1.3.6.1.2.1.25.5.1.1.1.5504|2|6 +1.3.6.1.2.1.25.5.1.1.1.5505|2|6 +1.3.6.1.2.1.25.5.1.1.1.5506|2|232 +1.3.6.1.2.1.25.5.1.1.1.5507|2|7 +1.3.6.1.2.1.25.5.1.1.1.5508|2|6 +1.3.6.1.2.1.25.5.1.1.1.5509|2|6 +1.3.6.1.2.1.25.5.1.1.1.5510|2|5 +1.3.6.1.2.1.25.5.1.1.1.5516|2|6706 +1.3.6.1.2.1.25.5.1.1.1.5522|2|9313 +1.3.6.1.2.1.25.5.1.1.1.5861|2|7 +1.3.6.1.2.1.25.5.1.1.1.5862|2|7 +1.3.6.1.2.1.25.5.1.1.1.5863|2|6 +1.3.6.1.2.1.25.5.1.1.1.5864|2|254 +1.3.6.1.2.1.25.5.1.1.1.5865|2|255 +1.3.6.1.2.1.25.5.1.1.1.5866|2|6 +1.3.6.1.2.1.25.5.1.1.1.5867|2|8 +1.3.6.1.2.1.25.5.1.1.1.5868|2|8 +1.3.6.1.2.1.25.5.1.1.1.5869|2|6 +1.3.6.1.2.1.25.5.1.1.1.5870|2|6 +1.3.6.1.2.1.25.5.1.1.1.5872|2|89111 +1.3.6.1.2.1.25.5.1.1.1.5875|2|1578 +1.3.6.1.2.1.25.5.1.1.1.5878|2|315974 +1.3.6.1.2.1.25.5.1.1.1.5879|2|135920 +1.3.6.1.2.1.25.5.1.1.1.5884|2|125 +1.3.6.1.2.1.25.5.1.1.1.6344|2|8 +1.3.6.1.2.1.25.5.1.1.1.6345|2|226 +1.3.6.1.2.1.25.5.1.1.1.6346|2|7 +1.3.6.1.2.1.25.5.1.1.1.6347|2|7 +1.3.6.1.2.1.25.5.1.1.1.6348|2|6 +1.3.6.1.2.1.25.5.1.1.1.6349|2|6 +1.3.6.1.2.1.25.5.1.1.1.6350|2|7 +1.3.6.1.2.1.25.5.1.1.1.6351|2|7 +1.3.6.1.2.1.25.5.1.1.1.6352|2|6 +1.3.6.1.2.1.25.5.1.1.1.6353|2|6 +1.3.6.1.2.1.25.5.1.1.1.6358|2|1124348 +1.3.6.1.2.1.25.5.1.1.1.6366|2|24875 +1.3.6.1.2.1.25.5.1.1.1.6763|2|7 +1.3.6.1.2.1.25.5.1.1.1.6764|2|6 +1.3.6.1.2.1.25.5.1.1.1.6765|2|7 +1.3.6.1.2.1.25.5.1.1.1.6766|2|9 +1.3.6.1.2.1.25.5.1.1.1.6767|2|6 +1.3.6.1.2.1.25.5.1.1.1.6768|2|8 +1.3.6.1.2.1.25.5.1.1.1.6769|2|6 +1.3.6.1.2.1.25.5.1.1.1.6770|2|279 +1.3.6.1.2.1.25.5.1.1.1.6771|2|6 +1.3.6.1.2.1.25.5.1.1.1.6772|2|6 +1.3.6.1.2.1.25.5.1.1.1.6782|2|16931 +1.3.6.1.2.1.25.5.1.1.1.6784|2|13643 +1.3.6.1.2.1.25.5.1.1.1.7174|2|7 +1.3.6.1.2.1.25.5.1.1.1.7175|2|248 +1.3.6.1.2.1.25.5.1.1.1.7176|2|6 +1.3.6.1.2.1.25.5.1.1.1.7177|2|6 +1.3.6.1.2.1.25.5.1.1.1.7178|2|7 +1.3.6.1.2.1.25.5.1.1.1.7179|2|7 +1.3.6.1.2.1.25.5.1.1.1.7180|2|11 +1.3.6.1.2.1.25.5.1.1.1.7181|2|7 +1.3.6.1.2.1.25.5.1.1.1.7182|2|231 +1.3.6.1.2.1.25.5.1.1.1.7183|2|6 +1.3.6.1.2.1.25.5.1.1.1.7188|2|444388 +1.3.6.1.2.1.25.5.1.1.1.7192|2|58233 +1.3.6.1.2.1.25.5.1.1.1.7194|2|375 +1.3.6.1.2.1.25.5.1.1.1.7196|2|19748 +1.3.6.1.2.1.25.5.1.1.1.7523|2|26 +1.3.6.1.2.1.25.5.1.1.1.7524|2|7 +1.3.6.1.2.1.25.5.1.1.1.7525|2|5 +1.3.6.1.2.1.25.5.1.1.1.7526|2|9 +1.3.6.1.2.1.25.5.1.1.1.7527|2|6 +1.3.6.1.2.1.25.5.1.1.1.7528|2|7 +1.3.6.1.2.1.25.5.1.1.1.7529|2|7 +1.3.6.1.2.1.25.5.1.1.1.7530|2|6 +1.3.6.1.2.1.25.5.1.1.1.7531|2|7 +1.3.6.1.2.1.25.5.1.1.1.7532|2|6 +1.3.6.1.2.1.25.5.1.1.1.7535|2|12645 +1.3.6.1.2.1.25.5.1.1.1.7539|2|250095 +1.3.6.1.2.1.25.5.1.1.1.7543|2|1623 +1.3.6.1.2.1.25.5.1.1.1.7544|2|464 +1.3.6.1.2.1.25.5.1.1.1.7949|2|6 +1.3.6.1.2.1.25.5.1.1.1.7950|2|6 +1.3.6.1.2.1.25.5.1.1.1.7951|2|6 +1.3.6.1.2.1.25.5.1.1.1.7952|2|6 +1.3.6.1.2.1.25.5.1.1.1.7953|2|6 +1.3.6.1.2.1.25.5.1.1.1.7954|2|8 +1.3.6.1.2.1.25.5.1.1.1.9526|2|19 +1.3.6.1.2.1.25.5.1.1.1.9602|2|2907 +1.3.6.1.2.1.25.5.1.1.1.11784|2|5 +1.3.6.1.2.1.25.5.1.1.1.13563|2|9 +1.3.6.1.2.1.25.5.1.1.1.13565|2|19 +1.3.6.1.2.1.25.5.1.1.1.13566|2|165 +1.3.6.1.2.1.25.5.1.1.1.15387|2|1377 +1.3.6.1.2.1.25.5.1.1.1.15921|2|2408518 +1.3.6.1.2.1.25.5.1.1.1.16645|2|553 +1.3.6.1.2.1.25.5.1.1.1.16646|2|353 +1.3.6.1.2.1.25.5.1.1.1.16648|2|23 +1.3.6.1.2.1.25.5.1.1.1.16651|2|372 +1.3.6.1.2.1.25.5.1.1.1.16652|2|1145 +1.3.6.1.2.1.25.5.1.1.1.16653|2|4450 +1.3.6.1.2.1.25.5.1.1.1.16654|2|75 +1.3.6.1.2.1.25.5.1.1.1.17900|2|78 +1.3.6.1.2.1.25.5.1.1.1.18651|2|169141 +1.3.6.1.2.1.25.5.1.1.1.23175|2|39960 +1.3.6.1.2.1.25.5.1.1.1.23330|2|34970 +1.3.6.1.2.1.25.5.1.1.1.25514|2|214 +1.3.6.1.2.1.25.5.1.1.1.25517|2|1974 +1.3.6.1.2.1.25.5.1.1.1.25518|2|4 +1.3.6.1.2.1.25.5.1.1.1.25522|2|55110 +1.3.6.1.2.1.25.5.1.1.1.25524|2|1527 +1.3.6.1.2.1.25.5.1.1.1.25531|2|6703 +1.3.6.1.2.1.25.5.1.1.1.25946|2|105695 +1.3.6.1.2.1.25.5.1.1.1.27567|2|1 +1.3.6.1.2.1.25.5.1.1.1.29431|2|390 +1.3.6.1.2.1.25.5.1.1.1.29439|2|397 +1.3.6.1.2.1.25.5.1.1.1.29440|2|562 +1.3.6.1.2.1.25.5.1.1.1.30092|2|30725875 +1.3.6.1.2.1.25.5.1.1.1.30120|2|502 +1.3.6.1.2.1.25.5.1.1.1.30180|2|17 +1.3.6.1.2.1.25.5.1.1.1.32066|2|0 +1.3.6.1.2.1.25.5.1.1.2.1|2|4500 +1.3.6.1.2.1.25.5.1.1.2.415|2|1948 +1.3.6.1.2.1.25.5.1.1.2.440|2|220 +1.3.6.1.2.1.25.5.1.1.2.447|2|144 +1.3.6.1.2.1.25.5.1.1.2.921|2|40 +1.3.6.1.2.1.25.5.1.1.2.951|2|492 +1.3.6.1.2.1.25.5.1.1.2.977|2|1040 +1.3.6.1.2.1.25.5.1.1.2.979|2|48 +1.3.6.1.2.1.25.5.1.1.2.982|2|444 +1.3.6.1.2.1.25.5.1.1.2.984|2|1108 +1.3.6.1.2.1.25.5.1.1.2.1038|2|16 +1.3.6.1.2.1.25.5.1.1.2.1826|2|5652 +1.3.6.1.2.1.25.5.1.1.2.2851|2|436 +1.3.6.1.2.1.25.5.1.1.2.2852|2|15216 +1.3.6.1.2.1.25.5.1.1.2.2919|2|89012 +1.3.6.1.2.1.25.5.1.1.2.3773|2|140 +1.3.6.1.2.1.25.5.1.1.2.4068|2|6820 +1.3.6.1.2.1.25.5.1.1.2.4085|2|188 +1.3.6.1.2.1.25.5.1.1.2.4119|2|48 +1.3.6.1.2.1.25.5.1.1.2.4122|2|44 +1.3.6.1.2.1.25.5.1.1.2.4212|2|212 +1.3.6.1.2.1.25.5.1.1.2.4213|2|152 +1.3.6.1.2.1.25.5.1.1.2.4214|2|172 +1.3.6.1.2.1.25.5.1.1.2.4215|2|336 +1.3.6.1.2.1.25.5.1.1.2.4216|2|304 +1.3.6.1.2.1.25.5.1.1.2.4217|2|312 +1.3.6.1.2.1.25.5.1.1.2.4218|2|276 +1.3.6.1.2.1.25.5.1.1.2.4219|2|172 +1.3.6.1.2.1.25.5.1.1.2.4220|2|296 +1.3.6.1.2.1.25.5.1.1.2.4221|2|276 +1.3.6.1.2.1.25.5.1.1.2.4222|2|15716 +1.3.6.1.2.1.25.5.1.1.2.4224|2|2548 +1.3.6.1.2.1.25.5.1.1.2.4226|2|4060 +1.3.6.1.2.1.25.5.1.1.2.4434|2|312 +1.3.6.1.2.1.25.5.1.1.2.4435|2|348 +1.3.6.1.2.1.25.5.1.1.2.4436|2|280 +1.3.6.1.2.1.25.5.1.1.2.4437|2|304 +1.3.6.1.2.1.25.5.1.1.2.4438|2|272 +1.3.6.1.2.1.25.5.1.1.2.4439|2|296 +1.3.6.1.2.1.25.5.1.1.2.4440|2|296 +1.3.6.1.2.1.25.5.1.1.2.4441|2|280 +1.3.6.1.2.1.25.5.1.1.2.4442|2|300 +1.3.6.1.2.1.25.5.1.1.2.4443|2|164 +1.3.6.1.2.1.25.5.1.1.2.4451|2|16160 +1.3.6.1.2.1.25.5.1.1.2.4773|2|152 +1.3.6.1.2.1.25.5.1.1.2.4774|2|348 +1.3.6.1.2.1.25.5.1.1.2.4775|2|380 +1.3.6.1.2.1.25.5.1.1.2.4776|2|348 +1.3.6.1.2.1.25.5.1.1.2.4777|2|292 +1.3.6.1.2.1.25.5.1.1.2.4778|2|308 +1.3.6.1.2.1.25.5.1.1.2.4779|2|256 +1.3.6.1.2.1.25.5.1.1.2.4780|2|264 +1.3.6.1.2.1.25.5.1.1.2.4781|2|172 +1.3.6.1.2.1.25.5.1.1.2.4782|2|364 +1.3.6.1.2.1.25.5.1.1.2.4784|2|760 +1.3.6.1.2.1.25.5.1.1.2.4786|2|3064 +1.3.6.1.2.1.25.5.1.1.2.4787|2|5052 +1.3.6.1.2.1.25.5.1.1.2.5137|2|176 +1.3.6.1.2.1.25.5.1.1.2.5138|2|176 +1.3.6.1.2.1.25.5.1.1.2.5139|2|164 +1.3.6.1.2.1.25.5.1.1.2.5140|2|324 +1.3.6.1.2.1.25.5.1.1.2.5141|2|356 +1.3.6.1.2.1.25.5.1.1.2.5142|2|332 +1.3.6.1.2.1.25.5.1.1.2.5143|2|296 +1.3.6.1.2.1.25.5.1.1.2.5144|2|176 +1.3.6.1.2.1.25.5.1.1.2.5145|2|280 +1.3.6.1.2.1.25.5.1.1.2.5146|2|300 +1.3.6.1.2.1.25.5.1.1.2.5148|2|16600 +1.3.6.1.2.1.25.5.1.1.2.5151|2|1032 +1.3.6.1.2.1.25.5.1.1.2.5155|2|16436 +1.3.6.1.2.1.25.5.1.1.2.5159|2|16788 +1.3.6.1.2.1.25.5.1.1.2.5501|2|324 +1.3.6.1.2.1.25.5.1.1.2.5502|2|348 +1.3.6.1.2.1.25.5.1.1.2.5503|2|256 +1.3.6.1.2.1.25.5.1.1.2.5504|2|284 +1.3.6.1.2.1.25.5.1.1.2.5505|2|152 +1.3.6.1.2.1.25.5.1.1.2.5506|2|176 +1.3.6.1.2.1.25.5.1.1.2.5507|2|296 +1.3.6.1.2.1.25.5.1.1.2.5508|2|304 +1.3.6.1.2.1.25.5.1.1.2.5509|2|284 +1.3.6.1.2.1.25.5.1.1.2.5510|2|304 +1.3.6.1.2.1.25.5.1.1.2.5516|2|4252 +1.3.6.1.2.1.25.5.1.1.2.5522|2|4436 +1.3.6.1.2.1.25.5.1.1.2.5861|2|144 +1.3.6.1.2.1.25.5.1.1.2.5862|2|324 +1.3.6.1.2.1.25.5.1.1.2.5863|2|144 +1.3.6.1.2.1.25.5.1.1.2.5864|2|140 +1.3.6.1.2.1.25.5.1.1.2.5865|2|392 +1.3.6.1.2.1.25.5.1.1.2.5866|2|308 +1.3.6.1.2.1.25.5.1.1.2.5867|2|384 +1.3.6.1.2.1.25.5.1.1.2.5868|2|324 +1.3.6.1.2.1.25.5.1.1.2.5869|2|268 +1.3.6.1.2.1.25.5.1.1.2.5870|2|284 +1.3.6.1.2.1.25.5.1.1.2.5872|2|21036 +1.3.6.1.2.1.25.5.1.1.2.5875|2|17260 +1.3.6.1.2.1.25.5.1.1.2.5878|2|93932 +1.3.6.1.2.1.25.5.1.1.2.5879|2|22224 +1.3.6.1.2.1.25.5.1.1.2.5884|2|384 +1.3.6.1.2.1.25.5.1.1.2.6344|2|328 +1.3.6.1.2.1.25.5.1.1.2.6345|2|144 +1.3.6.1.2.1.25.5.1.1.2.6346|2|280 +1.3.6.1.2.1.25.5.1.1.2.6347|2|300 +1.3.6.1.2.1.25.5.1.1.2.6348|2|280 +1.3.6.1.2.1.25.5.1.1.2.6349|2|280 +1.3.6.1.2.1.25.5.1.1.2.6350|2|296 +1.3.6.1.2.1.25.5.1.1.2.6351|2|144 +1.3.6.1.2.1.25.5.1.1.2.6352|2|280 +1.3.6.1.2.1.25.5.1.1.2.6353|2|388 +1.3.6.1.2.1.25.5.1.1.2.6358|2|14944 +1.3.6.1.2.1.25.5.1.1.2.6366|2|832 +1.3.6.1.2.1.25.5.1.1.2.6763|2|328 +1.3.6.1.2.1.25.5.1.1.2.6764|2|356 +1.3.6.1.2.1.25.5.1.1.2.6765|2|268 +1.3.6.1.2.1.25.5.1.1.2.6766|2|356 +1.3.6.1.2.1.25.5.1.1.2.6767|2|268 +1.3.6.1.2.1.25.5.1.1.2.6768|2|320 +1.3.6.1.2.1.25.5.1.1.2.6769|2|144 +1.3.6.1.2.1.25.5.1.1.2.6770|2|340 +1.3.6.1.2.1.25.5.1.1.2.6771|2|144 +1.3.6.1.2.1.25.5.1.1.2.6772|2|296 +1.3.6.1.2.1.25.5.1.1.2.6782|2|7868 +1.3.6.1.2.1.25.5.1.1.2.6784|2|17968 +1.3.6.1.2.1.25.5.1.1.2.7174|2|292 +1.3.6.1.2.1.25.5.1.1.2.7175|2|144 +1.3.6.1.2.1.25.5.1.1.2.7176|2|332 +1.3.6.1.2.1.25.5.1.1.2.7177|2|144 +1.3.6.1.2.1.25.5.1.1.2.7178|2|332 +1.3.6.1.2.1.25.5.1.1.2.7179|2|144 +1.3.6.1.2.1.25.5.1.1.2.7180|2|320 +1.3.6.1.2.1.25.5.1.1.2.7181|2|268 +1.3.6.1.2.1.25.5.1.1.2.7182|2|136 +1.3.6.1.2.1.25.5.1.1.2.7183|2|292 +1.3.6.1.2.1.25.5.1.1.2.7188|2|171088 +1.3.6.1.2.1.25.5.1.1.2.7192|2|32956 +1.3.6.1.2.1.25.5.1.1.2.7194|2|17216 +1.3.6.1.2.1.25.5.1.1.2.7196|2|14212 +1.3.6.1.2.1.25.5.1.1.2.7523|2|140 +1.3.6.1.2.1.25.5.1.1.2.7524|2|300 +1.3.6.1.2.1.25.5.1.1.2.7525|2|144 +1.3.6.1.2.1.25.5.1.1.2.7526|2|280 +1.3.6.1.2.1.25.5.1.1.2.7527|2|336 +1.3.6.1.2.1.25.5.1.1.2.7528|2|288 +1.3.6.1.2.1.25.5.1.1.2.7529|2|136 +1.3.6.1.2.1.25.5.1.1.2.7530|2|296 +1.3.6.1.2.1.25.5.1.1.2.7531|2|144 +1.3.6.1.2.1.25.5.1.1.2.7532|2|276 +1.3.6.1.2.1.25.5.1.1.2.7535|2|15752 +1.3.6.1.2.1.25.5.1.1.2.7539|2|81804 +1.3.6.1.2.1.25.5.1.1.2.7543|2|1900 +1.3.6.1.2.1.25.5.1.1.2.7544|2|19704 +1.3.6.1.2.1.25.5.1.1.2.7949|2|288 +1.3.6.1.2.1.25.5.1.1.2.7950|2|284 +1.3.6.1.2.1.25.5.1.1.2.7951|2|280 +1.3.6.1.2.1.25.5.1.1.2.7952|2|276 +1.3.6.1.2.1.25.5.1.1.2.7953|2|284 +1.3.6.1.2.1.25.5.1.1.2.7954|2|328 +1.3.6.1.2.1.25.5.1.1.2.9526|2|896 +1.3.6.1.2.1.25.5.1.1.2.9602|2|560 +1.3.6.1.2.1.25.5.1.1.2.11784|2|68 +1.3.6.1.2.1.25.5.1.1.2.13563|2|5956 +1.3.6.1.2.1.25.5.1.1.2.13565|2|5788 +1.3.6.1.2.1.25.5.1.1.2.13566|2|5064 +1.3.6.1.2.1.25.5.1.1.2.15387|2|1948 +1.3.6.1.2.1.25.5.1.1.2.15921|2|226040 +1.3.6.1.2.1.25.5.1.1.2.16645|2|272 +1.3.6.1.2.1.25.5.1.1.2.16646|2|300 +1.3.6.1.2.1.25.5.1.1.2.16648|2|3144 +1.3.6.1.2.1.25.5.1.1.2.16651|2|18536 +1.3.6.1.2.1.25.5.1.1.2.16652|2|1256 +1.3.6.1.2.1.25.5.1.1.2.16653|2|1440 +1.3.6.1.2.1.25.5.1.1.2.16654|2|17096 +1.3.6.1.2.1.25.5.1.1.2.17900|2|1416 +1.3.6.1.2.1.25.5.1.1.2.18651|2|93160 +1.3.6.1.2.1.25.5.1.1.2.23175|2|1200 +1.3.6.1.2.1.25.5.1.1.2.23330|2|36220 +1.3.6.1.2.1.25.5.1.1.2.25514|2|21768 +1.3.6.1.2.1.25.5.1.1.2.25517|2|25124 +1.3.6.1.2.1.25.5.1.1.2.25518|2|584 +1.3.6.1.2.1.25.5.1.1.2.25522|2|25256 +1.3.6.1.2.1.25.5.1.1.2.25524|2|25460 +1.3.6.1.2.1.25.5.1.1.2.25531|2|25184 +1.3.6.1.2.1.25.5.1.1.2.25946|2|25848 +1.3.6.1.2.1.25.5.1.1.2.27567|2|1228 +1.3.6.1.2.1.25.5.1.1.2.29431|2|14544 +1.3.6.1.2.1.25.5.1.1.2.29439|2|8036 +1.3.6.1.2.1.25.5.1.1.2.29440|2|8220 +1.3.6.1.2.1.25.5.1.1.2.30092|2|108020 +1.3.6.1.2.1.25.5.1.1.2.30120|2|1128 +1.3.6.1.2.1.25.5.1.1.2.30180|2|23888 +1.3.6.1.2.1.25.5.1.1.2.32066|2|840 +1.3.6.1.2.1.31.1.1.1.1.32|4|mgmt +1.3.6.1.2.1.31.1.1.1.1.48|4x|312e30 +1.3.6.1.2.1.31.1.1.1.1.80|4x|2f436f6d6d6f6e2f687474702d74756e6e656c +1.3.6.1.2.1.31.1.1.1.1.96|4x|2f436f6d6d6f6e2f736f636b732d74756e6e656c +1.3.6.1.2.1.31.1.1.1.1.112|4x|2f436f6d6d6f6e2f696e7465726e616c +1.3.6.1.2.1.31.1.1.1.2.32|65|0 +1.3.6.1.2.1.31.1.1.1.2.48|65|0 +1.3.6.1.2.1.31.1.1.1.2.80|65|0 +1.3.6.1.2.1.31.1.1.1.2.96|65|0 +1.3.6.1.2.1.31.1.1.1.2.112|65|15131 +1.3.6.1.2.1.31.1.1.1.3.32|65|0 +1.3.6.1.2.1.31.1.1.1.3.48|65|0 +1.3.6.1.2.1.31.1.1.1.3.80|65|0 +1.3.6.1.2.1.31.1.1.1.3.96|65|0 +1.3.6.1.2.1.31.1.1.1.3.112|65|2923 +1.3.6.1.2.1.31.1.1.1.4.32|65|0 +1.3.6.1.2.1.31.1.1.1.4.48|65|0 +1.3.6.1.2.1.31.1.1.1.4.80|65|0 +1.3.6.1.2.1.31.1.1.1.4.96|65|0 +1.3.6.1.2.1.31.1.1.1.4.112|65|15146 +1.3.6.1.2.1.31.1.1.1.5.32|65|0 +1.3.6.1.2.1.31.1.1.1.5.48|65|0 +1.3.6.1.2.1.31.1.1.1.5.80|65|0 +1.3.6.1.2.1.31.1.1.1.5.96|65|0 +1.3.6.1.2.1.31.1.1.1.5.112|65|609 +1.3.6.1.2.1.31.1.1.1.6.32|70|461638459 +1.3.6.1.2.1.31.1.1.1.6.48|70|606070952 +1.3.6.1.2.1.31.1.1.1.6.80|70|0 +1.3.6.1.2.1.31.1.1.1.6.96|70|0 +1.3.6.1.2.1.31.1.1.1.6.112|70|396870497 +1.3.6.1.2.1.31.1.1.1.7.32|70|930864 +1.3.6.1.2.1.31.1.1.1.7.48|70|799796 +1.3.6.1.2.1.31.1.1.1.7.80|70|0 +1.3.6.1.2.1.31.1.1.1.7.96|70|0 +1.3.6.1.2.1.31.1.1.1.7.112|70|899250 +1.3.6.1.2.1.31.1.1.1.8.32|70|0 +1.3.6.1.2.1.31.1.1.1.8.48|70|0 +1.3.6.1.2.1.31.1.1.1.8.80|70|0 +1.3.6.1.2.1.31.1.1.1.8.96|70|0 +1.3.6.1.2.1.31.1.1.1.8.112|70|15131 +1.3.6.1.2.1.31.1.1.1.9.32|70|0 +1.3.6.1.2.1.31.1.1.1.9.48|70|0 +1.3.6.1.2.1.31.1.1.1.9.80|70|0 +1.3.6.1.2.1.31.1.1.1.9.96|70|0 +1.3.6.1.2.1.31.1.1.1.9.112|70|2923 +1.3.6.1.2.1.31.1.1.1.10.32|70|312056025 +1.3.6.1.2.1.31.1.1.1.10.48|70|67545566 +1.3.6.1.2.1.31.1.1.1.10.80|70|0 +1.3.6.1.2.1.31.1.1.1.10.96|70|0 +1.3.6.1.2.1.31.1.1.1.10.112|70|406193723 +1.3.6.1.2.1.31.1.1.1.11.32|70|773861 +1.3.6.1.2.1.31.1.1.1.11.48|70|524259 +1.3.6.1.2.1.31.1.1.1.11.80|70|0 +1.3.6.1.2.1.31.1.1.1.11.96|70|0 +1.3.6.1.2.1.31.1.1.1.11.112|70|880356 +1.3.6.1.2.1.31.1.1.1.12.32|70|0 +1.3.6.1.2.1.31.1.1.1.12.48|70|0 +1.3.6.1.2.1.31.1.1.1.12.80|70|0 +1.3.6.1.2.1.31.1.1.1.12.96|70|0 +1.3.6.1.2.1.31.1.1.1.12.112|70|15146 +1.3.6.1.2.1.31.1.1.1.13.32|70|0 +1.3.6.1.2.1.31.1.1.1.13.48|70|0 +1.3.6.1.2.1.31.1.1.1.13.80|70|0 +1.3.6.1.2.1.31.1.1.1.13.96|70|0 +1.3.6.1.2.1.31.1.1.1.13.112|70|609 +1.3.6.1.2.1.31.1.1.1.14.32|2|1 +1.3.6.1.2.1.31.1.1.1.14.48|2|1 +1.3.6.1.2.1.31.1.1.1.14.80|2|2 +1.3.6.1.2.1.31.1.1.1.14.96|2|2 +1.3.6.1.2.1.31.1.1.1.14.112|2|2 +1.3.6.1.2.1.31.1.1.1.15.32|66|100 +1.3.6.1.2.1.31.1.1.1.15.48|66|10000 +1.3.6.1.2.1.31.1.1.1.15.80|66|0 +1.3.6.1.2.1.31.1.1.1.15.96|66|0 +1.3.6.1.2.1.31.1.1.1.15.112|66|10000 +1.3.6.1.2.1.31.1.1.1.16.32|2|2 +1.3.6.1.2.1.31.1.1.1.16.48|2|2 +1.3.6.1.2.1.31.1.1.1.16.80|2|2 +1.3.6.1.2.1.31.1.1.1.16.96|2|2 +1.3.6.1.2.1.31.1.1.1.16.112|2|2 +1.3.6.1.2.1.31.1.1.1.17.32|2|1 +1.3.6.1.2.1.31.1.1.1.17.48|2|1 +1.3.6.1.2.1.31.1.1.1.17.80|2|2 +1.3.6.1.2.1.31.1.1.1.17.96|2|2 +1.3.6.1.2.1.31.1.1.1.17.112|2|2 +1.3.6.1.2.1.31.1.1.1.18.32|4| +1.3.6.1.2.1.31.1.1.1.18.48|4| +1.3.6.1.2.1.31.1.1.1.18.80|4| +1.3.6.1.2.1.31.1.1.1.18.96|4| +1.3.6.1.2.1.31.1.1.1.18.112|4| +1.3.6.1.2.1.31.1.1.1.19.32|67|0 +1.3.6.1.2.1.31.1.1.1.19.48|67|0 +1.3.6.1.2.1.31.1.1.1.19.80|67|0 +1.3.6.1.2.1.31.1.1.1.19.96|67|0 +1.3.6.1.2.1.31.1.1.1.19.112|67|0 +1.3.6.1.2.1.92.1.1.1.0|66|1000 +1.3.6.1.2.1.92.1.1.2.0|66|1440 +1.3.6.1.2.1.92.1.2.1.0|65|0 +1.3.6.1.2.1.92.1.2.2.0|65|0 diff --git a/test/new-e2e/ndm/snmp/compose/data/isilon.snmprec b/test/new-e2e/ndm/snmp/compose/data/isilon.snmprec new file mode 100644 index 0000000000000..d2be07e8088d6 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/isilon.snmprec @@ -0,0 +1,283 @@ +1.3.6.1.2.1.1.1.0|4|device-name-3 263829375 Isilon OneFS v8.2.0.0 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.12325.1.1.2.1.1 +1.3.6.1.4.1.12124.1.1.1.0|4|testcluster1 +1.3.6.1.4.1.12124.1.1.2.0|2|2 +1.3.6.1.4.1.12124.1.1.3.0|4x|4a61646564204a61646564204a61646564207a6f6d62696573207a6f6d62696573206f78656e204a6164656420717561696e746c79 +1.3.6.1.4.1.12124.1.1.4.0|2|24 +1.3.6.1.4.1.12124.1.1.5.0|4x|62757420717561696e746c79206163746564207a6f6d62696573207a6f6d62696573206b65707420627574206b657074 +1.3.6.1.4.1.12124.1.1.6.0|4x|7468656972206f78656e206163746564 +1.3.6.1.4.1.12124.1.1.7.0|4x|7a6f6d6269657320666f72776172642062757420627574206275742062757420627574 +1.3.6.1.4.1.12124.1.2.1.1.0|70|14915978989122343125 +1.3.6.1.4.1.12124.1.2.1.2.0|70|5989494319893319288 +1.3.6.1.4.1.12124.1.2.1.3.0|70|1754593291386024149 +1.3.6.1.4.1.12124.1.3.1.0|70|8770442281780220975 +1.3.6.1.4.1.12124.1.3.2.0|70|9618541326343820131 +1.3.6.1.4.1.12124.1.12.1.1.1.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|4x|4a61646564207a6f6d626965732064726976696e67206f78656e206f78656e207a6f6d6269657320717561696e746c79 +1.3.6.1.4.1.12124.1.12.1.1.1.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|4x|6163746564206f78656e206b657074207a6f6d626965732061637465642064726976696e67206b657074206163746564 +1.3.6.1.4.1.12124.1.12.1.1.1.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|4x|616374656420717561696e746c79207a6f6d62696573206f78656e20717561696e746c79206163746564207468656972 +1.3.6.1.4.1.12124.1.12.1.1.1.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|4x|627574204a6164656420717561696e746c7920627574206b65707420627574206163746564206b657074207468656972 +1.3.6.1.4.1.12124.1.12.1.1.1.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|4x|666f7277617264204a616465642064726976696e67206f78656e2064726976696e672062757420627574204a61646564 +1.3.6.1.4.1.12124.1.12.1.1.1.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|4x|6b65707420627574207a6f6d62696573207a6f6d626965732062757420717561696e746c79206f78656e204a61646564 +1.3.6.1.4.1.12124.1.12.1.1.1.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|4x|6f78656e2064726976696e67204a6164656420666f7277617264207a6f6d6269657320616374656420666f7277617264 +1.3.6.1.4.1.12124.1.12.1.1.1.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|4x|6f78656e2064726976696e67206163746564206f78656e206f78656e20616374656420616374656420666f7277617264 +1.3.6.1.4.1.12124.1.12.1.1.1.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|4x|717561696e746c79207a6f6d62696573206b657074206f78656e207468656972206f78656e206f78656e204a61646564 +1.3.6.1.4.1.12124.1.12.1.1.1.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|4x|7a6f6d62696573206f78656e2064726976696e67206b657074204a61646564207468656972206163746564206f78656e +1.3.6.1.4.1.12124.1.12.1.1.2.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|0 +1.3.6.1.4.1.12124.1.12.1.1.2.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.2.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|4 +1.3.6.1.4.1.12124.1.12.1.1.2.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.12124.1.12.1.1.2.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.2.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|5 +1.3.6.1.4.1.12124.1.12.1.1.2.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.2.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|4 +1.3.6.1.4.1.12124.1.12.1.1.2.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|3 +1.3.6.1.4.1.12124.1.12.1.1.2.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|1 +1.3.6.1.4.1.12124.1.12.1.1.3.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|66|4245321451 +1.3.6.1.4.1.12124.1.12.1.1.3.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|66|1424325378 +1.3.6.1.4.1.12124.1.12.1.1.3.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|66|1198032230 +1.3.6.1.4.1.12124.1.12.1.1.3.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|66|1383990869 +1.3.6.1.4.1.12124.1.12.1.1.3.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|66|422978632 +1.3.6.1.4.1.12124.1.12.1.1.3.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|66|153533730 +1.3.6.1.4.1.12124.1.12.1.1.3.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|66|2328145711 +1.3.6.1.4.1.12124.1.12.1.1.3.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|66|3299369987 +1.3.6.1.4.1.12124.1.12.1.1.3.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|66|2149993012 +1.3.6.1.4.1.12124.1.12.1.1.3.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|66|1232918362 +1.3.6.1.4.1.12124.1.12.1.1.4.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|0 +1.3.6.1.4.1.12124.1.12.1.1.4.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.4.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.12124.1.12.1.1.4.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.12124.1.12.1.1.4.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.4.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.4.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.4.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.4.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.4.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|1 +1.3.6.1.4.1.12124.1.12.1.1.5.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|4x|4a61646564204a616465642064726976696e67207a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.12124.1.12.1.1.5.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|4x|666f72776172642064726976696e672062757420717561696e746c79207a6f6d6269657320717561696e746c7920666f72776172642064726976696e67 +1.3.6.1.4.1.12124.1.12.1.1.5.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|4x|4a6164656420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.12124.1.12.1.1.5.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|4x|746865697220627574 +1.3.6.1.4.1.12124.1.12.1.1.5.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|4|kept +1.3.6.1.4.1.12124.1.12.1.1.5.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|4x|717561696e746c7920666f7277617264207a6f6d62696573207a6f6d626965732064726976696e6720717561696e746c79204a6164656420627574206163746564 +1.3.6.1.4.1.12124.1.12.1.1.5.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|4x|666f7277617264207468656972206163746564207a6f6d62696573206b65707420666f727761726420717561696e746c79 +1.3.6.1.4.1.12124.1.12.1.1.5.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|4x|627574206163746564206163746564206f78656e20666f727761726420717561696e746c792064726976696e67206f78656e +1.3.6.1.4.1.12124.1.12.1.1.5.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|4x|666f72776172642064726976696e6720666f72776172642064726976696e6720666f7277617264 +1.3.6.1.4.1.12124.1.12.1.1.5.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|4x|4a616465642064726976696e67204a61646564 +1.3.6.1.4.1.12124.1.12.1.1.6.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|0 +1.3.6.1.4.1.12124.1.12.1.1.6.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.6.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|0 +1.3.6.1.4.1.12124.1.12.1.1.6.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|0 +1.3.6.1.4.1.12124.1.12.1.1.6.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.6.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.6.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.6.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.6.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.6.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|1 +1.3.6.1.4.1.12124.1.12.1.1.7.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|70|14068735141461358875 +1.3.6.1.4.1.12124.1.12.1.1.7.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|70|14141761287896411851 +1.3.6.1.4.1.12124.1.12.1.1.7.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|70|4396056103365993660 +1.3.6.1.4.1.12124.1.12.1.1.7.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|70|1371817059523693496 +1.3.6.1.4.1.12124.1.12.1.1.7.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|70|10171121418117998868 +1.3.6.1.4.1.12124.1.12.1.1.7.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|70|3398225771200639361 +1.3.6.1.4.1.12124.1.12.1.1.7.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|5898542388878010463 +1.3.6.1.4.1.12124.1.12.1.1.7.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|18330784183411284000 +1.3.6.1.4.1.12124.1.12.1.1.7.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|70|15891904626150790899 +1.3.6.1.4.1.12124.1.12.1.1.7.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|70|3964854350772733777 +1.3.6.1.4.1.12124.1.12.1.1.8.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|0 +1.3.6.1.4.1.12124.1.12.1.1.8.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.8.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|0 +1.3.6.1.4.1.12124.1.12.1.1.8.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.12124.1.12.1.1.8.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.8.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.8.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.8.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.8.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.8.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|1 +1.3.6.1.4.1.12124.1.12.1.1.9.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|70|10878510489985257555 +1.3.6.1.4.1.12124.1.12.1.1.9.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|70|17884829191702312333 +1.3.6.1.4.1.12124.1.12.1.1.9.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|70|17683458948031193496 +1.3.6.1.4.1.12124.1.12.1.1.9.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|70|1562680605879207291 +1.3.6.1.4.1.12124.1.12.1.1.9.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|70|2320996266713311448 +1.3.6.1.4.1.12124.1.12.1.1.9.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|70|6675308316651121892 +1.3.6.1.4.1.12124.1.12.1.1.9.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|9186412959534298702 +1.3.6.1.4.1.12124.1.12.1.1.9.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|17115911786314565708 +1.3.6.1.4.1.12124.1.12.1.1.9.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|70|16844145145026932773 +1.3.6.1.4.1.12124.1.12.1.1.9.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|70|15292439690659474411 +1.3.6.1.4.1.12124.1.12.1.1.10.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|0 +1.3.6.1.4.1.12124.1.12.1.1.10.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.10.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|0 +1.3.6.1.4.1.12124.1.12.1.1.10.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|0 +1.3.6.1.4.1.12124.1.12.1.1.10.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.10.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.10.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.10.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.10.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.10.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|1 +1.3.6.1.4.1.12124.1.12.1.1.11.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|70|2168519118019170047 +1.3.6.1.4.1.12124.1.12.1.1.11.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|70|6570751579969436010 +1.3.6.1.4.1.12124.1.12.1.1.11.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|70|11902954585507984496 +1.3.6.1.4.1.12124.1.12.1.1.11.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|70|11517712360320809523 +1.3.6.1.4.1.12124.1.12.1.1.11.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|70|14574172490728580351 +1.3.6.1.4.1.12124.1.12.1.1.11.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|70|3191226950406170185 +1.3.6.1.4.1.12124.1.12.1.1.11.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|415926289354243698 +1.3.6.1.4.1.12124.1.12.1.1.11.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|15699602191143923019 +1.3.6.1.4.1.12124.1.12.1.1.11.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|70|18150590286584755406 +1.3.6.1.4.1.12124.1.12.1.1.11.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|70|5073807639686004081 +1.3.6.1.4.1.12124.1.12.1.1.12.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|7 +1.3.6.1.4.1.12124.1.12.1.1.12.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|14 +1.3.6.1.4.1.12124.1.12.1.1.12.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|16 +1.3.6.1.4.1.12124.1.12.1.1.12.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|10 +1.3.6.1.4.1.12124.1.12.1.1.12.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.12.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|7 +1.3.6.1.4.1.12124.1.12.1.1.12.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|10 +1.3.6.1.4.1.12124.1.12.1.1.12.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.12.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.12.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|23 +1.3.6.1.4.1.12124.1.12.1.1.13.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|70|16658813196626137413 +1.3.6.1.4.1.12124.1.12.1.1.13.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|70|10579262605391229559 +1.3.6.1.4.1.12124.1.12.1.1.13.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|70|2895734051327977707 +1.3.6.1.4.1.12124.1.12.1.1.13.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|70|14132024138787183222 +1.3.6.1.4.1.12124.1.12.1.1.13.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|70|1355803849695214167 +1.3.6.1.4.1.12124.1.12.1.1.13.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|70|15083223700331535701 +1.3.6.1.4.1.12124.1.12.1.1.13.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|8404133733057700200 +1.3.6.1.4.1.12124.1.12.1.1.13.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|65584190702113825 +1.3.6.1.4.1.12124.1.12.1.1.13.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|70|8792403321736251647 +1.3.6.1.4.1.12124.1.12.1.1.13.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|70|6931490394265709371 +1.3.6.1.4.1.12124.1.12.1.1.14.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|70|6873213022946757334 +1.3.6.1.4.1.12124.1.12.1.1.14.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|70|11854883466118480434 +1.3.6.1.4.1.12124.1.12.1.1.14.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|70|14374798610186795374 +1.3.6.1.4.1.12124.1.12.1.1.14.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|70|8414299381585435100 +1.3.6.1.4.1.12124.1.12.1.1.14.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|70|14389144092639811440 +1.3.6.1.4.1.12124.1.12.1.1.14.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|70|11655278498430189886 +1.3.6.1.4.1.12124.1.12.1.1.14.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|2487786073619070642 +1.3.6.1.4.1.12124.1.12.1.1.14.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|697274845398117848 +1.3.6.1.4.1.12124.1.12.1.1.14.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|70|10325815763224778148 +1.3.6.1.4.1.12124.1.12.1.1.14.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|70|3137558558145556741 +1.3.6.1.4.1.12124.1.12.1.1.15.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|70|14208649948373965591 +1.3.6.1.4.1.12124.1.12.1.1.15.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|70|2520343364835162939 +1.3.6.1.4.1.12124.1.12.1.1.15.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|70|8238533666442885424 +1.3.6.1.4.1.12124.1.12.1.1.15.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|70|4544543621297054007 +1.3.6.1.4.1.12124.1.12.1.1.15.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|70|4617601726928202620 +1.3.6.1.4.1.12124.1.12.1.1.15.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|70|18188978664644708782 +1.3.6.1.4.1.12124.1.12.1.1.15.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|3050010041221971238 +1.3.6.1.4.1.12124.1.12.1.1.15.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|70|16039139242868212892 +1.3.6.1.4.1.12124.1.12.1.1.15.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|70|1164982365338428846 +1.3.6.1.4.1.12124.1.12.1.1.15.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|70|5877862756907244788 +1.3.6.1.4.1.12124.1.12.1.1.16.48.74.97.100.101.100.32.122.111.109.98.105.101.115.32.100.114.105.118.105.110.103.32.111.120.101.110.32.111.120.101.110.32.122.111.109.98.105.101.115.32.113.117.97.105.110.116.108.121|2|1 +1.3.6.1.4.1.12124.1.12.1.1.16.48.97.99.116.101.100.32.111.120.101.110.32.107.101.112.116.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.16.48.97.99.116.101.100.32.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.97.99.116.101.100.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.12124.1.12.1.1.16.48.98.117.116.32.74.97.100.101.100.32.113.117.97.105.110.116.108.121.32.98.117.116.32.107.101.112.116.32.98.117.116.32.97.99.116.101.100.32.107.101.112.116.32.116.104.101.105.114|2|0 +1.3.6.1.4.1.12124.1.12.1.1.16.48.102.111.114.119.97.114.100.32.74.97.100.101.100.32.100.114.105.118.105.110.103.32.111.120.101.110.32.100.114.105.118.105.110.103.32.98.117.116.32.98.117.116.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.16.48.107.101.112.116.32.98.117.116.32.122.111.109.98.105.101.115.32.122.111.109.98.105.101.115.32.98.117.116.32.113.117.97.105.110.116.108.121.32.111.120.101.110.32.74.97.100.101.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.16.48.111.120.101.110.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.16.48.111.120.101.110.32.100.114.105.118.105.110.103.32.97.99.116.101.100.32.111.120.101.110.32.111.120.101.110.32.97.99.116.101.100.32.97.99.116.101.100.32.102.111.114.119.97.114.100|2|0 +1.3.6.1.4.1.12124.1.12.1.1.16.48.113.117.97.105.110.116.108.121.32.122.111.109.98.105.101.115.32.107.101.112.116.32.111.120.101.110.32.116.104.101.105.114.32.111.120.101.110.32.111.120.101.110.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.12124.1.12.1.1.16.48.122.111.109.98.105.101.115.32.111.120.101.110.32.100.114.105.118.105.110.103.32.107.101.112.116.32.74.97.100.101.100.32.116.104.101.105.114.32.97.99.116.101.100.32.111.120.101.110|2|0 +1.3.6.1.4.1.12124.2.1.1.0|4|node1 +1.3.6.1.4.1.12124.2.1.2.0|2|3 +1.3.6.1.4.1.12124.2.1.3.0|2|1 +1.3.6.1.4.1.12124.2.2.1.1.0|70|10214025674005007309 +1.3.6.1.4.1.12124.2.2.1.2.0|70|5852609904331811105 +1.3.6.1.4.1.12124.2.2.1.3.0|70|4777469071568308184 +1.3.6.1.4.1.12124.2.2.10.1.1.98.117.116|4|testprotocol1 +1.3.6.1.4.1.12124.2.2.10.1.1.107.101.112.116|4|testprotocol2 +1.3.6.1.4.1.12124.2.2.10.1.1.111.120.101.110|4|testprotocol3 +1.3.6.1.4.1.12124.2.2.10.1.2.98.117.116|66|3551703331 +1.3.6.1.4.1.12124.2.2.10.1.2.107.101.112.116|66|1938763264 +1.3.6.1.4.1.12124.2.2.10.1.2.111.120.101.110|66|1442758574 +1.3.6.1.4.1.12124.2.2.10.1.3.98.117.116|66|142697340 +1.3.6.1.4.1.12124.2.2.10.1.3.107.101.112.116|66|2614873994 +1.3.6.1.4.1.12124.2.2.10.1.3.111.120.101.110|66|3156857036 +1.3.6.1.4.1.12124.2.2.10.1.4.98.117.116|66|2466447412 +1.3.6.1.4.1.12124.2.2.10.1.4.107.101.112.116|66|1829315851 +1.3.6.1.4.1.12124.2.2.10.1.4.111.120.101.110|66|2970586930 +1.3.6.1.4.1.12124.2.2.10.1.5.98.117.116|66|4016748651 +1.3.6.1.4.1.12124.2.2.10.1.5.107.101.112.116|66|3101244480 +1.3.6.1.4.1.12124.2.2.10.1.5.111.120.101.110|66|1353009103 +1.3.6.1.4.1.12124.2.2.10.1.6.98.117.116|66|273174898 +1.3.6.1.4.1.12124.2.2.10.1.6.107.101.112.116|66|2741571715 +1.3.6.1.4.1.12124.2.2.10.1.6.111.120.101.110|66|504374602 +1.3.6.1.4.1.12124.2.2.10.1.7.98.117.116|66|1908027462 +1.3.6.1.4.1.12124.2.2.10.1.7.107.101.112.116|66|1144308333 +1.3.6.1.4.1.12124.2.2.10.1.7.111.120.101.110|66|1703129581 +1.3.6.1.4.1.12124.2.2.10.1.8.98.117.116|70|8217880946653419538 +1.3.6.1.4.1.12124.2.2.10.1.8.107.101.112.116|70|11771153183005327732 +1.3.6.1.4.1.12124.2.2.10.1.8.111.120.101.110|70|17788181537717597525 +1.3.6.1.4.1.12124.2.2.10.1.9.98.117.116|66|998626442 +1.3.6.1.4.1.12124.2.2.10.1.9.107.101.112.116|66|1211116252 +1.3.6.1.4.1.12124.2.2.10.1.9.111.120.101.110|66|1711845175 +1.3.6.1.4.1.12124.2.2.10.1.10.98.117.116|66|2261694935 +1.3.6.1.4.1.12124.2.2.10.1.10.107.101.112.116|66|3236408506 +1.3.6.1.4.1.12124.2.2.10.1.10.111.120.101.110|66|334932961 +1.3.6.1.4.1.12124.2.2.10.1.11.98.117.116|66|1993235324 +1.3.6.1.4.1.12124.2.2.10.1.11.107.101.112.116|66|3999292325 +1.3.6.1.4.1.12124.2.2.10.1.11.111.120.101.110|66|2690928510 +1.3.6.1.4.1.12124.2.2.10.1.12.98.117.116|66|3538269492 +1.3.6.1.4.1.12124.2.2.10.1.12.107.101.112.116|66|736904324 +1.3.6.1.4.1.12124.2.2.10.1.12.111.120.101.110|66|253116863 +1.3.6.1.4.1.12124.2.2.10.1.13.98.117.116|70|985995245017295438 +1.3.6.1.4.1.12124.2.2.10.1.13.107.101.112.116|70|15372934104243170967 +1.3.6.1.4.1.12124.2.2.10.1.13.111.120.101.110|70|3827567253869289485 +1.3.6.1.4.1.12124.2.2.10.1.14.98.117.116|66|1247886357 +1.3.6.1.4.1.12124.2.2.10.1.14.107.101.112.116|66|2800987047 +1.3.6.1.4.1.12124.2.2.10.1.14.111.120.101.110|66|1266831756 +1.3.6.1.4.1.12124.2.2.10.1.15.98.117.116|66|1593641322 +1.3.6.1.4.1.12124.2.2.10.1.15.107.101.112.116|66|3442678644 +1.3.6.1.4.1.12124.2.2.10.1.15.111.120.101.110|66|1150963851 +1.3.6.1.4.1.12124.2.2.10.1.16.98.117.116|66|839559806 +1.3.6.1.4.1.12124.2.2.10.1.16.107.101.112.116|66|2774045199 +1.3.6.1.4.1.12124.2.2.10.1.16.111.120.101.110|66|2748542234 +1.3.6.1.4.1.12124.2.2.10.1.17.98.117.116|66|2258745481 +1.3.6.1.4.1.12124.2.2.10.1.17.107.101.112.116|66|3237597125 +1.3.6.1.4.1.12124.2.2.10.1.17.111.120.101.110|66|853869338 +1.3.6.1.4.1.12124.2.51.1.2.1|4|400-0049-03 +1.3.6.1.4.1.12124.2.51.1.3.1|4|SX410-251604-0122 +1.3.6.1.4.1.12124.2.51.1.4.1|4|X410-4U-Dual-64GB-2x1GE-2x10GE SFP+-34TB-800GB SSD +1.3.6.1.4.1.12124.2.52.1.1.1|2|1 +1.3.6.1.4.1.12124.2.52.1.1.2|2|2 +1.3.6.1.4.1.12124.2.52.1.1.3|2|3 +1.3.6.1.4.1.12124.2.52.1.5.1|4|SMARTFAIL +1.3.6.1.4.1.12124.2.52.1.5.2|4|HEALTHY +1.3.6.1.4.1.12124.2.52.1.5.3|4|DEAD +1.3.6.1.4.1.12124.2.52.1.9.1|70|13875364071017423041 +1.3.6.1.4.1.12124.2.52.1.9.2|70|16599833035174131388 +1.3.6.1.4.1.12124.2.52.1.9.3|70|10194238433266281818 +1.3.6.1.4.1.12124.2.53.1.1.4|2|4 +1.3.6.1.4.1.12124.2.53.1.1.6|2|6 +1.3.6.1.4.1.12124.2.53.1.1.10|2|10 +1.3.6.1.4.1.12124.2.53.1.1.11|2|11 +1.3.6.1.4.1.12124.2.53.1.1.14|2|14 +1.3.6.1.4.1.12124.2.53.1.1.21|2|21 +1.3.6.1.4.1.12124.2.53.1.1.22|2|22 +1.3.6.1.4.1.12124.2.53.1.1.23|2|23 +1.3.6.1.4.1.12124.2.53.1.1.25|2|25 +1.3.6.1.4.1.12124.2.53.1.1.30|2|30 +1.3.6.1.4.1.12124.2.53.1.2.4|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.6|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.10|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.11|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.14|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.21|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.22|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.23|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.25|4|testfan +1.3.6.1.4.1.12124.2.53.1.2.30|4|testfan +1.3.6.1.4.1.12124.2.53.1.3.4|4x|6f78656e2064726976696e67204a61646564206163746564 +1.3.6.1.4.1.12124.2.53.1.3.6|4x|4a61646564207468656972206163746564206f78656e206f78656e204a6164656420666f7277617264206b657074207468656972 +1.3.6.1.4.1.12124.2.53.1.3.10|4x|6b657074206b657074206f78656e20717561696e746c79 +1.3.6.1.4.1.12124.2.53.1.3.11|4x|717561696e746c792064726976696e67206163746564206f78656e206f78656e2064726976696e67 +1.3.6.1.4.1.12124.2.53.1.3.14|4x|746865697220717561696e746c79 +1.3.6.1.4.1.12124.2.53.1.3.21|4x|4a6164656420627574206b657074 +1.3.6.1.4.1.12124.2.53.1.3.22|4|kept +1.3.6.1.4.1.12124.2.53.1.3.23|4x|6163746564206163746564206b65707420717561696e746c79206f78656e +1.3.6.1.4.1.12124.2.53.1.3.25|4x|64726976696e67206163746564206163746564204a616465642062757420717561696e746c79207a6f6d62696573 +1.3.6.1.4.1.12124.2.53.1.3.30|4x|4a616465642064726976696e67206b657074206b6570742064726976696e6720627574207a6f6d62696573207a6f6d62696573207a6f6d62696573 +1.3.6.1.4.1.12124.2.53.1.4.4|2|3 +1.3.6.1.4.1.12124.2.53.1.4.6|2|27 +1.3.6.1.4.1.12124.2.53.1.4.10|2|29 +1.3.6.1.4.1.12124.2.53.1.4.11|2|0 +1.3.6.1.4.1.12124.2.53.1.4.14|2|22 +1.3.6.1.4.1.12124.2.53.1.4.21|2|23 +1.3.6.1.4.1.12124.2.53.1.4.22|2|1 +1.3.6.1.4.1.12124.2.53.1.4.23|2|7 +1.3.6.1.4.1.12124.2.53.1.4.25|2|12 +1.3.6.1.4.1.12124.2.53.1.4.30|2|22 diff --git a/test/new-e2e/ndm/snmp/compose/data/juniper-ex-variation.snmprec b/test/new-e2e/ndm/snmp/compose/data/juniper-ex-variation.snmprec new file mode 100644 index 0000000000000..5080ddd4e931f --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/juniper-ex-variation.snmprec @@ -0,0 +1,292 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.4.30.2 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 +1.3.6.1.2.1.31.1.1.1.1.83|4x|717561696e746c792064726976696e67206f78656e207468656972207a6f6d62696573206f78656e206163746564206163746564 +1.3.6.1.2.1.31.1.1.1.1.780|4x|62757420666f7277617264206b657074206275742074686569722064726976696e67206f78656e20717561696e746c79206163746564 +1.3.6.1.2.1.31.1.1.1.1.907|4x|6b65707420627574 +1.3.6.1.4.1.2636.3.5.2.1.1.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|74686569722064726976696e6720717561696e746c7920627574204a61646564206f78656e +1.3.6.1.4.1.2636.3.5.2.1.1.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6b657074206b65707420627574206f78656e204a6164656420666f7277617264206163746564 +1.3.6.1.4.1.2636.3.5.2.1.1.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|64726976696e67206b657074206163746564204a61646564207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.2636.3.5.2.1.2.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|4a61646564206f78656e206b6570742074686569722064726976696e6720627574206b657074 +1.3.6.1.4.1.2636.3.5.2.1.2.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6f78656e20666f7277617264204a61646564206b65707420627574204a61646564 +1.3.6.1.4.1.2636.3.5.2.1.2.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|6275742062757420627574207468656972207468656972207468656972206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2636.3.5.2.1.3.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.4.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|4454094099404974412 +1.3.6.1.4.1.2636.3.5.2.1.4.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|9206254963072680169 +1.3.6.1.4.1.2636.3.5.2.1.4.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|3696546830171348582 +1.3.6.1.4.1.2636.3.5.2.1.5.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|696736619041929696 +1.3.6.1.4.1.2636.3.5.2.1.5.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|16785242467789528990 +1.3.6.1.4.1.2636.3.5.2.1.5.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|17939108183311980476 +1.3.6.1.4.1.2636.3.5.2.1.6.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|717561696e746c792064726976696e6720666f727761726420666f7277617264206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.2636.3.5.2.1.6.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|666f7277617264206f78656e20717561696e746c79207a6f6d6269657320666f7277617264206f78656e206f78656e20746865697220627574 +1.3.6.1.4.1.2636.3.5.2.1.6.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|616374656420627574207468656972206f78656e204a61646564204a61646564207468656972 +1.3.6.1.4.1.2636.3.5.2.1.7.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4|driving +1.3.6.1.4.1.2636.3.5.2.1.7.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|717561696e746c792064726976696e67206f78656e20717561696e746c7920666f7277617264207a6f6d62696573206163746564 +1.3.6.1.4.1.2636.3.5.2.1.7.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|7a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.2636.3.5.2.1.8.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|1 +1.3.6.1.4.1.2636.3.5.2.1.8.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|2 +1.3.6.1.4.1.2636.3.5.2.1.8.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|2 +1.3.6.1.4.1.2636.3.6.2.1.1.83.1.5.116.104.101.105.114|2|83 +1.3.6.1.4.1.2636.3.6.2.1.1.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|780 +1.3.6.1.4.1.2636.3.6.2.1.1.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|907 +1.3.6.1.4.1.2636.3.6.2.1.2.83.1.5.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|2 +1.3.6.1.4.1.2636.3.6.2.1.3.83.1.5.116.104.101.105.114|4|their +1.3.6.1.4.1.2636.3.6.2.1.3.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|61637465642062757420666f7277617264206163746564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2636.3.6.2.1.3.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e204a61646564206f78656e204a6164656420666f7277617264206b65707420717561696e746c79 +1.3.6.1.4.1.2636.3.6.2.1.4.83.1.5.116.104.101.105.114|70|12317383665498203792 +1.3.6.1.4.1.2636.3.6.2.1.4.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|18298564239260252878 +1.3.6.1.4.1.2636.3.6.2.1.4.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|14296161882202174757 +1.3.6.1.4.1.2636.3.6.2.1.5.83.1.5.116.104.101.105.114|70|11494977799318547626 +1.3.6.1.4.1.2636.3.6.2.1.5.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|3147422798697337841 +1.3.6.1.4.1.2636.3.6.2.1.5.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|9179463037551089633 +1.3.6.1.4.1.2636.3.6.2.1.6.83.1.5.116.104.101.105.114|4|driving +1.3.6.1.4.1.2636.3.6.2.1.6.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|666f72776172642064726976696e67 +1.3.6.1.4.1.2636.3.6.2.1.6.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e206b657074207a6f6d62696573 +1.3.6.1.4.1.2636.3.15.9.1.1.170|2|11 +1.3.6.1.4.1.2636.3.15.9.1.1.243|2|919 +1.3.6.1.4.1.2636.3.15.9.1.1.463|2|981 +1.3.6.1.4.1.2636.3.15.9.1.2.170|4x|6163746564206f78656e206f78656e20666f727761726420717561696e746c79206b657074207a6f6d6269657320627574206f78656e +1.3.6.1.4.1.2636.3.15.9.1.2.243|4x|6163746564206b65707420717561696e746c79206163746564206f78656e206b657074 +1.3.6.1.4.1.2636.3.15.9.1.2.463|4|their +1.3.6.1.4.1.2636.3.15.10.1.1.170.25|2|170 +1.3.6.1.4.1.2636.3.15.10.1.1.243.50|2|243 +1.3.6.1.4.1.2636.3.15.10.1.1.463.15|2|463 +1.3.6.1.4.1.2636.3.15.10.1.2.170.25|2|25 +1.3.6.1.4.1.2636.3.15.10.1.2.243.50|2|50 +1.3.6.1.4.1.2636.3.15.10.1.2.463.15|2|15 +1.3.6.1.4.1.2636.3.15.10.1.3.170.25|70|12770856836917969245 +1.3.6.1.4.1.2636.3.15.10.1.3.243.50|70|9663869619250073385 +1.3.6.1.4.1.2636.3.15.10.1.3.463.15|70|4128978860610001207 +1.3.6.1.4.1.2636.3.15.10.1.4.170.25|70|1002399613905247533 +1.3.6.1.4.1.2636.3.15.10.1.4.243.50|70|996423942118251217 +1.3.6.1.4.1.2636.3.15.10.1.4.463.15|70|4764867759487322545 +1.3.6.1.4.1.2636.3.15.10.1.5.170.25|70|9232681433406374088 +1.3.6.1.4.1.2636.3.15.10.1.5.243.50|70|8035400151290454024 +1.3.6.1.4.1.2636.3.15.10.1.5.463.15|70|5990647624742140325 +1.3.6.1.4.1.2636.3.15.10.1.6.170.25|70|1065640835557330094 +1.3.6.1.4.1.2636.3.15.10.1.6.243.50|70|17558806293727990360 +1.3.6.1.4.1.2636.3.15.10.1.6.463.15|70|11908438181160168105 +1.3.6.1.4.1.2636.3.15.10.1.7.170.25|70|18273158544474451497 +1.3.6.1.4.1.2636.3.15.10.1.7.243.50|70|13777396596348831423 +1.3.6.1.4.1.2636.3.15.10.1.7.463.15|70|2487683329818536869 +1.3.6.1.4.1.2636.3.15.10.1.8.170.25|70|3466222661774951990 +1.3.6.1.4.1.2636.3.15.10.1.8.243.50|70|12670568689846152972 +1.3.6.1.4.1.2636.3.15.10.1.8.463.15|70|8075791252460836529 +1.3.6.1.4.1.2636.3.15.10.1.9.170.25|70|8020605155612723028 +1.3.6.1.4.1.2636.3.15.10.1.9.243.50|70|12997273506749046582 +1.3.6.1.4.1.2636.3.15.10.1.9.463.15|70|18231535980456700136 +1.3.6.1.4.1.2636.3.15.10.1.10.170.25|70|3314807028774900920 +1.3.6.1.4.1.2636.3.15.10.1.10.243.50|70|12384249738747780022 +1.3.6.1.4.1.2636.3.15.10.1.10.463.15|70|5706341066266616742 +1.3.6.1.4.1.2636.3.15.10.1.11.170.25|70|9543706072360554442 +1.3.6.1.4.1.2636.3.15.10.1.11.243.50|70|15353080467434378674 +1.3.6.1.4.1.2636.3.15.10.1.11.463.15|70|7000096561546418502 +1.3.6.1.4.1.2636.3.15.10.1.12.170.25|70|13553825566144951217 +1.3.6.1.4.1.2636.3.15.10.1.12.243.50|70|2884686421611507766 +1.3.6.1.4.1.2636.3.15.10.1.12.463.15|70|7950960221026326783 +1.3.6.1.4.1.2636.3.15.10.1.13.170.25|70|6461751168224122855 +1.3.6.1.4.1.2636.3.15.10.1.13.243.50|70|8626132824337957526 +1.3.6.1.4.1.2636.3.15.10.1.13.463.15|70|17731588095000145998 +1.3.6.1.4.1.2636.3.15.10.1.14.170.25|70|15619102596973248473 +1.3.6.1.4.1.2636.3.15.10.1.14.243.50|70|16692053855289491043 +1.3.6.1.4.1.2636.3.15.10.1.14.463.15|70|8456156210951462249 +1.3.6.1.4.1.2636.3.15.10.1.15.170.25|70|2299977202421036105 +1.3.6.1.4.1.2636.3.15.10.1.15.243.50|70|813117570951116201 +1.3.6.1.4.1.2636.3.15.10.1.15.463.15|70|1188478793913849482 +1.3.6.1.4.1.2636.3.15.10.1.16.170.25|70|2893929287389891965 +1.3.6.1.4.1.2636.3.15.10.1.16.243.50|70|16289010184593102625 +1.3.6.1.4.1.2636.3.15.10.1.16.463.15|70|14190997503223661814 +1.3.6.1.4.1.2636.3.15.10.1.17.170.25|70|14493484350074177035 +1.3.6.1.4.1.2636.3.15.10.1.17.243.50|70|13596150666639387175 +1.3.6.1.4.1.2636.3.15.10.1.17.463.15|70|14424565573160285076 +1.3.6.1.4.1.2636.3.15.10.1.18.170.25|70|10529534850679351483 +1.3.6.1.4.1.2636.3.15.10.1.18.243.50|70|2906176364604264292 +1.3.6.1.4.1.2636.3.15.10.1.18.463.15|70|8315217861465467611 +1.3.6.1.4.1.2636.3.15.10.1.19.170.25|70|8170434880350759573 +1.3.6.1.4.1.2636.3.15.10.1.19.243.50|70|887688327484631583 +1.3.6.1.4.1.2636.3.15.10.1.19.463.15|70|10060318579349968784 +1.3.6.1.4.1.2636.3.15.10.1.20.170.25|70|5815198282439278933 +1.3.6.1.4.1.2636.3.15.10.1.20.243.50|70|14749506163780204940 +1.3.6.1.4.1.2636.3.15.10.1.20.463.15|70|9286269907376035246 +1.3.6.1.4.1.2636.3.15.10.1.21.170.25|70|2825795754297694874 +1.3.6.1.4.1.2636.3.15.10.1.21.243.50|70|11285523882234093093 +1.3.6.1.4.1.2636.3.15.10.1.21.463.15|70|15090187984937318802 +1.3.6.1.4.1.2636.3.15.10.1.22.170.25|70|7863778897832470889 +1.3.6.1.4.1.2636.3.15.10.1.22.243.50|70|3553508407684051674 +1.3.6.1.4.1.2636.3.15.10.1.22.463.15|70|13931708594683902426 +1.3.6.1.4.1.2636.3.15.10.1.23.170.25|70|12906613682638875307 +1.3.6.1.4.1.2636.3.15.10.1.23.243.50|70|11949204969119103650 +1.3.6.1.4.1.2636.3.15.10.1.23.463.15|70|5956153079277958221 +1.3.6.1.4.1.2636.3.15.10.1.24.170.25|70|11477234301196000227 +1.3.6.1.4.1.2636.3.15.10.1.24.243.50|70|3314652739024033013 +1.3.6.1.4.1.2636.3.15.10.1.24.463.15|70|15017127765184020318 +1.3.6.1.4.1.2636.3.15.10.1.25.170.25|70|8424154835415081760 +1.3.6.1.4.1.2636.3.15.10.1.25.243.50|70|7471672866813717794 +1.3.6.1.4.1.2636.3.15.10.1.25.463.15|70|17857076078061565547 +1.3.6.1.4.1.2636.3.15.10.1.26.170.25|70|3793853525121104339 +1.3.6.1.4.1.2636.3.15.10.1.26.243.50|70|3989409530853199526 +1.3.6.1.4.1.2636.3.15.10.1.26.463.15|70|15735187836465138700 +1.3.6.1.4.1.2636.3.15.10.1.27.170.25|70|18213777320258743968 +1.3.6.1.4.1.2636.3.15.10.1.27.243.50|70|14971409743913453864 +1.3.6.1.4.1.2636.3.15.10.1.27.463.15|70|4036774420969319248 +1.3.6.1.4.1.2636.3.15.10.1.28.170.25|70|11024421017883614152 +1.3.6.1.4.1.2636.3.15.10.1.28.243.50|70|90364654298972704 +1.3.6.1.4.1.2636.3.15.10.1.28.463.15|70|8686770717862532224 +1.3.6.1.4.1.2636.3.15.10.1.29.170.25|70|12300319506603429604 +1.3.6.1.4.1.2636.3.15.10.1.29.243.50|70|1280552904131433006 +1.3.6.1.4.1.2636.3.15.10.1.29.463.15|70|1984703258989993414 +1.3.6.1.4.1.2636.3.15.10.1.30.170.25|70|14325491697305781346 +1.3.6.1.4.1.2636.3.15.10.1.30.243.50|70|9672229296991156990 +1.3.6.1.4.1.2636.3.15.10.1.30.463.15|70|17512343358386083614 +1.3.6.1.4.1.2636.3.15.10.1.31.170.25|70|5927227884246572881 +1.3.6.1.4.1.2636.3.15.10.1.31.243.50|70|9450776281406177093 +1.3.6.1.4.1.2636.3.15.10.1.31.463.15|70|17370561485432592141 +1.3.6.1.4.1.2636.3.15.10.1.32.170.25|70|7967882224524493134 +1.3.6.1.4.1.2636.3.15.10.1.32.243.50|70|3172465735716905246 +1.3.6.1.4.1.2636.3.15.10.1.32.463.15|70|11533409651162362033 +1.3.6.1.4.1.2636.3.15.10.1.33.170.25|70|16548575809615604796 +1.3.6.1.4.1.2636.3.15.10.1.33.243.50|70|6442873042770202449 +1.3.6.1.4.1.2636.3.15.10.1.33.463.15|70|1918875848098423600 +1.3.6.1.4.1.2636.3.15.10.1.34.170.25|70|12105898413641506478 +1.3.6.1.4.1.2636.3.15.10.1.34.243.50|70|5385799517301974188 +1.3.6.1.4.1.2636.3.15.10.1.34.463.15|70|9277777983354765895 +1.3.6.1.4.1.2636.3.15.10.1.35.170.25|70|786407073866759825 +1.3.6.1.4.1.2636.3.15.10.1.35.243.50|70|12567184007500140055 +1.3.6.1.4.1.2636.3.15.10.1.35.463.15|70|6530228175190559355 +1.3.6.1.4.1.2636.3.15.10.1.36.170.25|70|22369930787572654 +1.3.6.1.4.1.2636.3.15.10.1.36.243.50|70|2397774807429625982 +1.3.6.1.4.1.2636.3.15.10.1.36.463.15|70|15156373897980262200 +1.3.6.1.4.1.2636.3.15.10.1.37.170.25|70|5148517373031836367 +1.3.6.1.4.1.2636.3.15.10.1.37.243.50|70|7721607394473998281 +1.3.6.1.4.1.2636.3.15.10.1.37.463.15|70|8714575013162753417 +1.3.6.1.4.1.2636.3.15.10.1.38.170.25|70|10930247236210764218 +1.3.6.1.4.1.2636.3.15.10.1.38.243.50|70|5146652189836621240 +1.3.6.1.4.1.2636.3.15.10.1.38.463.15|70|8864307502844767136 +1.3.6.1.4.1.2636.3.15.10.1.39.170.25|70|17987422552752788069 +1.3.6.1.4.1.2636.3.15.10.1.39.243.50|70|7828400400494290544 +1.3.6.1.4.1.2636.3.15.10.1.39.463.15|70|10564281255194113941 +1.3.6.1.4.1.2636.3.15.10.1.40.170.25|70|4456908988229385506 +1.3.6.1.4.1.2636.3.15.10.1.40.243.50|70|4548509587568319054 +1.3.6.1.4.1.2636.3.15.10.1.40.463.15|70|12654679094639954721 +1.3.6.1.4.1.2636.3.15.10.1.41.170.25|70|319452186197743737 +1.3.6.1.4.1.2636.3.15.10.1.41.243.50|70|16364791724635672240 +1.3.6.1.4.1.2636.3.15.10.1.41.463.15|70|17828705365509861774 +1.3.6.1.4.1.2636.3.15.10.1.42.170.25|70|9913951142041236635 +1.3.6.1.4.1.2636.3.15.10.1.42.243.50|70|4590232569604987384 +1.3.6.1.4.1.2636.3.15.10.1.42.463.15|70|16879636922511149261 +1.3.6.1.4.1.2636.3.15.10.1.43.170.25|70|16128554786484754487 +1.3.6.1.4.1.2636.3.15.10.1.43.243.50|70|6720587125918748618 +1.3.6.1.4.1.2636.3.15.10.1.43.463.15|70|10982123962446739740 +1.3.6.1.4.1.2636.3.15.10.1.44.170.25|70|6625476741978175421 +1.3.6.1.4.1.2636.3.15.10.1.44.243.50|70|14758624194210778093 +1.3.6.1.4.1.2636.3.15.10.1.44.463.15|70|3510595354408991883 +1.3.6.1.4.1.2636.3.15.10.1.45.170.25|70|12193077799780761280 +1.3.6.1.4.1.2636.3.15.10.1.45.243.50|70|434156370935591348 +1.3.6.1.4.1.2636.3.15.10.1.45.463.15|70|14701761228332844190 +1.3.6.1.4.1.2636.3.15.10.1.46.170.25|70|4097961753211413825 +1.3.6.1.4.1.2636.3.15.10.1.46.243.50|70|14198283656685665373 +1.3.6.1.4.1.2636.3.15.10.1.46.463.15|70|9981844938014966456 +1.3.6.1.4.1.2636.3.15.10.1.47.170.25|70|4499862665732599823 +1.3.6.1.4.1.2636.3.15.10.1.47.243.50|70|7208392381338046179 +1.3.6.1.4.1.2636.3.15.10.1.47.463.15|70|6241021335515696595 +1.3.6.1.4.1.2636.3.15.10.1.48.170.25|70|4799882603978889044 +1.3.6.1.4.1.2636.3.15.10.1.48.243.50|70|11687294706629489122 +1.3.6.1.4.1.2636.3.15.10.1.48.463.15|70|8189775643826190503 +1.3.6.1.4.1.2636.3.15.10.1.49.170.25|70|14943326773818355422 +1.3.6.1.4.1.2636.3.15.10.1.49.243.50|70|3029491279441157558 +1.3.6.1.4.1.2636.3.15.10.1.49.463.15|70|14724608253725676036 +1.3.6.1.4.1.2636.3.15.10.1.50.170.25|70|8089079564874181657 +1.3.6.1.4.1.2636.3.15.10.1.50.243.50|70|3777655493494241512 +1.3.6.1.4.1.2636.3.15.10.1.50.463.15|70|9345336414379681585 +1.3.6.1.4.1.2636.3.15.10.1.51.170.25|70|1461276263793545759 +1.3.6.1.4.1.2636.3.15.10.1.51.243.50|70|12409543167456089371 +1.3.6.1.4.1.2636.3.15.10.1.51.463.15|70|4329004572229054293 +1.3.6.1.4.1.2636.3.15.10.1.52.170.25|70|6602329256452145238 +1.3.6.1.4.1.2636.3.15.10.1.52.243.50|70|6601473160297645100 +1.3.6.1.4.1.2636.3.15.10.1.52.463.15|70|16308867362923996690 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|11 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|22 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|24 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|4x|4a6164656420666f727761726420627574206f78656e20717561696e746c79207468656972207468656972 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|4x|666f727761726420666f72776172642064726976696e672064726976696e67204a61646564204a61646564 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|4x|6275742064726976696e6720627574 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|3 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|12189304536513319332 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7722656158153650831 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10603165628512588309 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3843980053062837517 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|12509302819583194366 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|3885376250889014561 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10352052349549821463 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7177674967410638136 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|5091222764852841190 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|13715573869517889886 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|10130509551224208352 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|2504343572792914641 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2938889684826768032 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11291252729780336384 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|1481668101793427313 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|6310274704585370658 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6789462645369539630 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|491028968499993270 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3608875038808074952 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|797075051605537720 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14085552435037248689 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5552625442655846107 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4454798770846396730 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|9088428039091030198 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10229778388752303226 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11069391749223800156 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|11894101190314294086 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5808123009872645909 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|3572737769193079165 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|6853689900557367040 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|8372358451243013065 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|2058660889925691752 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|15823042855195793586 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|11700083343423325868 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4448772641108495089 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|676318422458825171 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|15142294159964046333 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|18390833596244657351 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10182233820378904307 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2057784955673108988 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6276174311039281296 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14694007361821605096 +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.1|4|Mycroft Holmes +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.2|4|Jim Moriarty +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.1|4|brother +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.2|4|enemy +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.1|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.2|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.4.1|65|2048000 diff --git a/test/new-e2e/ndm/snmp/compose/data/juniper-ex.snmprec b/test/new-e2e/ndm/snmp/compose/data/juniper-ex.snmprec new file mode 100644 index 0000000000000..4dab0344bd09f --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/juniper-ex.snmprec @@ -0,0 +1,296 @@ +1.3.6.1.2.1.1.1.0|4|Juniper Networks, Inc. ex2200-24t-4g internet router, kernel JUNOS 10.2R1.8 #0: 2010-05-27 20:13:49 UTC +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.2.30 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 +1.3.6.1.2.1.31.1.1.1.1.83|4x|717561696e746c792064726976696e67206f78656e207468656972207a6f6d62696573206f78656e206163746564206163746564 +1.3.6.1.2.1.31.1.1.1.1.780|4x|62757420666f7277617264206b657074206275742074686569722064726976696e67206f78656e20717561696e746c79206163746564 +1.3.6.1.2.1.31.1.1.1.1.907|4x|6b65707420627574 +1.3.6.1.4.1.2636.3.1.2.0|4|EX2200 Ethernet Switch +1.3.6.1.4.1.2636.3.1.3.0|4|dXPEdPBE5yKtjW9xx3 +1.3.6.1.4.1.2636.3.1.4.0|4|version-1.0 +1.3.6.1.4.1.2636.3.5.2.1.1.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|74686569722064726976696e6720717561696e746c7920627574204a61646564206f78656e +1.3.6.1.4.1.2636.3.5.2.1.1.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6b657074206b65707420627574206f78656e204a6164656420666f7277617264206163746564 +1.3.6.1.4.1.2636.3.5.2.1.1.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|64726976696e67206b657074206163746564204a61646564207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.2636.3.5.2.1.2.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|4a61646564206f78656e206b6570742074686569722064726976696e6720627574206b657074 +1.3.6.1.4.1.2636.3.5.2.1.2.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6f78656e20666f7277617264204a61646564206b65707420627574204a61646564 +1.3.6.1.4.1.2636.3.5.2.1.2.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|6275742062757420627574207468656972207468656972207468656972206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2636.3.5.2.1.3.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.4.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|4454094099404974412 +1.3.6.1.4.1.2636.3.5.2.1.4.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|9206254963072680169 +1.3.6.1.4.1.2636.3.5.2.1.4.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|3696546830171348582 +1.3.6.1.4.1.2636.3.5.2.1.5.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|696736619041929696 +1.3.6.1.4.1.2636.3.5.2.1.5.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|16785242467789528990 +1.3.6.1.4.1.2636.3.5.2.1.5.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|17939108183311980476 +1.3.6.1.4.1.2636.3.5.2.1.6.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|717561696e746c792064726976696e6720666f727761726420666f7277617264206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.2636.3.5.2.1.6.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|666f7277617264206f78656e20717561696e746c79207a6f6d6269657320666f7277617264206f78656e206f78656e20746865697220627574 +1.3.6.1.4.1.2636.3.5.2.1.6.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|616374656420627574207468656972206f78656e204a61646564204a61646564207468656972 +1.3.6.1.4.1.2636.3.5.2.1.7.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4|driving +1.3.6.1.4.1.2636.3.5.2.1.7.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|717561696e746c792064726976696e67206f78656e20717561696e746c7920666f7277617264207a6f6d62696573206163746564 +1.3.6.1.4.1.2636.3.5.2.1.7.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|7a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.2636.3.5.2.1.8.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|1 +1.3.6.1.4.1.2636.3.5.2.1.8.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|2 +1.3.6.1.4.1.2636.3.5.2.1.8.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|2 +1.3.6.1.4.1.2636.3.6.2.1.1.83.1.5.116.104.101.105.114|2|83 +1.3.6.1.4.1.2636.3.6.2.1.1.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|780 +1.3.6.1.4.1.2636.3.6.2.1.1.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|907 +1.3.6.1.4.1.2636.3.6.2.1.2.83.1.5.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|2 +1.3.6.1.4.1.2636.3.6.2.1.3.83.1.5.116.104.101.105.114|4|their +1.3.6.1.4.1.2636.3.6.2.1.3.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|61637465642062757420666f7277617264206163746564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2636.3.6.2.1.3.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e204a61646564206f78656e204a6164656420666f7277617264206b65707420717561696e746c79 +1.3.6.1.4.1.2636.3.6.2.1.4.83.1.5.116.104.101.105.114|70|12317383665498203792 +1.3.6.1.4.1.2636.3.6.2.1.4.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|18298564239260252878 +1.3.6.1.4.1.2636.3.6.2.1.4.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|14296161882202174757 +1.3.6.1.4.1.2636.3.6.2.1.5.83.1.5.116.104.101.105.114|70|11494977799318547626 +1.3.6.1.4.1.2636.3.6.2.1.5.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|3147422798697337841 +1.3.6.1.4.1.2636.3.6.2.1.5.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|9179463037551089633 +1.3.6.1.4.1.2636.3.6.2.1.6.83.1.5.116.104.101.105.114|4|driving +1.3.6.1.4.1.2636.3.6.2.1.6.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|666f72776172642064726976696e67 +1.3.6.1.4.1.2636.3.6.2.1.6.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e206b657074207a6f6d62696573 +1.3.6.1.4.1.2636.3.15.9.1.1.170|2|11 +1.3.6.1.4.1.2636.3.15.9.1.1.243|2|919 +1.3.6.1.4.1.2636.3.15.9.1.1.463|2|981 +1.3.6.1.4.1.2636.3.15.9.1.2.170|4x|6163746564206f78656e206f78656e20666f727761726420717561696e746c79206b657074207a6f6d6269657320627574206f78656e +1.3.6.1.4.1.2636.3.15.9.1.2.243|4x|6163746564206b65707420717561696e746c79206163746564206f78656e206b657074 +1.3.6.1.4.1.2636.3.15.9.1.2.463|4|their +1.3.6.1.4.1.2636.3.15.10.1.1.170.25|2|170 +1.3.6.1.4.1.2636.3.15.10.1.1.243.50|2|243 +1.3.6.1.4.1.2636.3.15.10.1.1.463.15|2|463 +1.3.6.1.4.1.2636.3.15.10.1.2.170.25|2|25 +1.3.6.1.4.1.2636.3.15.10.1.2.243.50|2|50 +1.3.6.1.4.1.2636.3.15.10.1.2.463.15|2|15 +1.3.6.1.4.1.2636.3.15.10.1.3.170.25|70|12770856836917969245 +1.3.6.1.4.1.2636.3.15.10.1.3.243.50|70|9663869619250073385 +1.3.6.1.4.1.2636.3.15.10.1.3.463.15|70|4128978860610001207 +1.3.6.1.4.1.2636.3.15.10.1.4.170.25|70|1002399613905247533 +1.3.6.1.4.1.2636.3.15.10.1.4.243.50|70|996423942118251217 +1.3.6.1.4.1.2636.3.15.10.1.4.463.15|70|4764867759487322545 +1.3.6.1.4.1.2636.3.15.10.1.5.170.25|70|9232681433406374088 +1.3.6.1.4.1.2636.3.15.10.1.5.243.50|70|8035400151290454024 +1.3.6.1.4.1.2636.3.15.10.1.5.463.15|70|5990647624742140325 +1.3.6.1.4.1.2636.3.15.10.1.6.170.25|70|1065640835557330094 +1.3.6.1.4.1.2636.3.15.10.1.6.243.50|70|17558806293727990360 +1.3.6.1.4.1.2636.3.15.10.1.6.463.15|70|11908438181160168105 +1.3.6.1.4.1.2636.3.15.10.1.7.170.25|70|18273158544474451497 +1.3.6.1.4.1.2636.3.15.10.1.7.243.50|70|13777396596348831423 +1.3.6.1.4.1.2636.3.15.10.1.7.463.15|70|2487683329818536869 +1.3.6.1.4.1.2636.3.15.10.1.8.170.25|70|3466222661774951990 +1.3.6.1.4.1.2636.3.15.10.1.8.243.50|70|12670568689846152972 +1.3.6.1.4.1.2636.3.15.10.1.8.463.15|70|8075791252460836529 +1.3.6.1.4.1.2636.3.15.10.1.9.170.25|70|8020605155612723028 +1.3.6.1.4.1.2636.3.15.10.1.9.243.50|70|12997273506749046582 +1.3.6.1.4.1.2636.3.15.10.1.9.463.15|70|18231535980456700136 +1.3.6.1.4.1.2636.3.15.10.1.10.170.25|70|3314807028774900920 +1.3.6.1.4.1.2636.3.15.10.1.10.243.50|70|12384249738747780022 +1.3.6.1.4.1.2636.3.15.10.1.10.463.15|70|5706341066266616742 +1.3.6.1.4.1.2636.3.15.10.1.11.170.25|70|9543706072360554442 +1.3.6.1.4.1.2636.3.15.10.1.11.243.50|70|15353080467434378674 +1.3.6.1.4.1.2636.3.15.10.1.11.463.15|70|7000096561546418502 +1.3.6.1.4.1.2636.3.15.10.1.12.170.25|70|13553825566144951217 +1.3.6.1.4.1.2636.3.15.10.1.12.243.50|70|2884686421611507766 +1.3.6.1.4.1.2636.3.15.10.1.12.463.15|70|7950960221026326783 +1.3.6.1.4.1.2636.3.15.10.1.13.170.25|70|6461751168224122855 +1.3.6.1.4.1.2636.3.15.10.1.13.243.50|70|8626132824337957526 +1.3.6.1.4.1.2636.3.15.10.1.13.463.15|70|17731588095000145998 +1.3.6.1.4.1.2636.3.15.10.1.14.170.25|70|15619102596973248473 +1.3.6.1.4.1.2636.3.15.10.1.14.243.50|70|16692053855289491043 +1.3.6.1.4.1.2636.3.15.10.1.14.463.15|70|8456156210951462249 +1.3.6.1.4.1.2636.3.15.10.1.15.170.25|70|2299977202421036105 +1.3.6.1.4.1.2636.3.15.10.1.15.243.50|70|813117570951116201 +1.3.6.1.4.1.2636.3.15.10.1.15.463.15|70|1188478793913849482 +1.3.6.1.4.1.2636.3.15.10.1.16.170.25|70|2893929287389891965 +1.3.6.1.4.1.2636.3.15.10.1.16.243.50|70|16289010184593102625 +1.3.6.1.4.1.2636.3.15.10.1.16.463.15|70|14190997503223661814 +1.3.6.1.4.1.2636.3.15.10.1.17.170.25|70|14493484350074177035 +1.3.6.1.4.1.2636.3.15.10.1.17.243.50|70|13596150666639387175 +1.3.6.1.4.1.2636.3.15.10.1.17.463.15|70|14424565573160285076 +1.3.6.1.4.1.2636.3.15.10.1.18.170.25|70|10529534850679351483 +1.3.6.1.4.1.2636.3.15.10.1.18.243.50|70|2906176364604264292 +1.3.6.1.4.1.2636.3.15.10.1.18.463.15|70|8315217861465467611 +1.3.6.1.4.1.2636.3.15.10.1.19.170.25|70|8170434880350759573 +1.3.6.1.4.1.2636.3.15.10.1.19.243.50|70|887688327484631583 +1.3.6.1.4.1.2636.3.15.10.1.19.463.15|70|10060318579349968784 +1.3.6.1.4.1.2636.3.15.10.1.20.170.25|70|5815198282439278933 +1.3.6.1.4.1.2636.3.15.10.1.20.243.50|70|14749506163780204940 +1.3.6.1.4.1.2636.3.15.10.1.20.463.15|70|9286269907376035246 +1.3.6.1.4.1.2636.3.15.10.1.21.170.25|70|2825795754297694874 +1.3.6.1.4.1.2636.3.15.10.1.21.243.50|70|11285523882234093093 +1.3.6.1.4.1.2636.3.15.10.1.21.463.15|70|15090187984937318802 +1.3.6.1.4.1.2636.3.15.10.1.22.170.25|70|7863778897832470889 +1.3.6.1.4.1.2636.3.15.10.1.22.243.50|70|3553508407684051674 +1.3.6.1.4.1.2636.3.15.10.1.22.463.15|70|13931708594683902426 +1.3.6.1.4.1.2636.3.15.10.1.23.170.25|70|12906613682638875307 +1.3.6.1.4.1.2636.3.15.10.1.23.243.50|70|11949204969119103650 +1.3.6.1.4.1.2636.3.15.10.1.23.463.15|70|5956153079277958221 +1.3.6.1.4.1.2636.3.15.10.1.24.170.25|70|11477234301196000227 +1.3.6.1.4.1.2636.3.15.10.1.24.243.50|70|3314652739024033013 +1.3.6.1.4.1.2636.3.15.10.1.24.463.15|70|15017127765184020318 +1.3.6.1.4.1.2636.3.15.10.1.25.170.25|70|8424154835415081760 +1.3.6.1.4.1.2636.3.15.10.1.25.243.50|70|7471672866813717794 +1.3.6.1.4.1.2636.3.15.10.1.25.463.15|70|17857076078061565547 +1.3.6.1.4.1.2636.3.15.10.1.26.170.25|70|3793853525121104339 +1.3.6.1.4.1.2636.3.15.10.1.26.243.50|70|3989409530853199526 +1.3.6.1.4.1.2636.3.15.10.1.26.463.15|70|15735187836465138700 +1.3.6.1.4.1.2636.3.15.10.1.27.170.25|70|18213777320258743968 +1.3.6.1.4.1.2636.3.15.10.1.27.243.50|70|14971409743913453864 +1.3.6.1.4.1.2636.3.15.10.1.27.463.15|70|4036774420969319248 +1.3.6.1.4.1.2636.3.15.10.1.28.170.25|70|11024421017883614152 +1.3.6.1.4.1.2636.3.15.10.1.28.243.50|70|90364654298972704 +1.3.6.1.4.1.2636.3.15.10.1.28.463.15|70|8686770717862532224 +1.3.6.1.4.1.2636.3.15.10.1.29.170.25|70|12300319506603429604 +1.3.6.1.4.1.2636.3.15.10.1.29.243.50|70|1280552904131433006 +1.3.6.1.4.1.2636.3.15.10.1.29.463.15|70|1984703258989993414 +1.3.6.1.4.1.2636.3.15.10.1.30.170.25|70|14325491697305781346 +1.3.6.1.4.1.2636.3.15.10.1.30.243.50|70|9672229296991156990 +1.3.6.1.4.1.2636.3.15.10.1.30.463.15|70|17512343358386083614 +1.3.6.1.4.1.2636.3.15.10.1.31.170.25|70|5927227884246572881 +1.3.6.1.4.1.2636.3.15.10.1.31.243.50|70|9450776281406177093 +1.3.6.1.4.1.2636.3.15.10.1.31.463.15|70|17370561485432592141 +1.3.6.1.4.1.2636.3.15.10.1.32.170.25|70|7967882224524493134 +1.3.6.1.4.1.2636.3.15.10.1.32.243.50|70|3172465735716905246 +1.3.6.1.4.1.2636.3.15.10.1.32.463.15|70|11533409651162362033 +1.3.6.1.4.1.2636.3.15.10.1.33.170.25|70|16548575809615604796 +1.3.6.1.4.1.2636.3.15.10.1.33.243.50|70|6442873042770202449 +1.3.6.1.4.1.2636.3.15.10.1.33.463.15|70|1918875848098423600 +1.3.6.1.4.1.2636.3.15.10.1.34.170.25|70|12105898413641506478 +1.3.6.1.4.1.2636.3.15.10.1.34.243.50|70|5385799517301974188 +1.3.6.1.4.1.2636.3.15.10.1.34.463.15|70|9277777983354765895 +1.3.6.1.4.1.2636.3.15.10.1.35.170.25|70|786407073866759825 +1.3.6.1.4.1.2636.3.15.10.1.35.243.50|70|12567184007500140055 +1.3.6.1.4.1.2636.3.15.10.1.35.463.15|70|6530228175190559355 +1.3.6.1.4.1.2636.3.15.10.1.36.170.25|70|22369930787572654 +1.3.6.1.4.1.2636.3.15.10.1.36.243.50|70|2397774807429625982 +1.3.6.1.4.1.2636.3.15.10.1.36.463.15|70|15156373897980262200 +1.3.6.1.4.1.2636.3.15.10.1.37.170.25|70|5148517373031836367 +1.3.6.1.4.1.2636.3.15.10.1.37.243.50|70|7721607394473998281 +1.3.6.1.4.1.2636.3.15.10.1.37.463.15|70|8714575013162753417 +1.3.6.1.4.1.2636.3.15.10.1.38.170.25|70|10930247236210764218 +1.3.6.1.4.1.2636.3.15.10.1.38.243.50|70|5146652189836621240 +1.3.6.1.4.1.2636.3.15.10.1.38.463.15|70|8864307502844767136 +1.3.6.1.4.1.2636.3.15.10.1.39.170.25|70|17987422552752788069 +1.3.6.1.4.1.2636.3.15.10.1.39.243.50|70|7828400400494290544 +1.3.6.1.4.1.2636.3.15.10.1.39.463.15|70|10564281255194113941 +1.3.6.1.4.1.2636.3.15.10.1.40.170.25|70|4456908988229385506 +1.3.6.1.4.1.2636.3.15.10.1.40.243.50|70|4548509587568319054 +1.3.6.1.4.1.2636.3.15.10.1.40.463.15|70|12654679094639954721 +1.3.6.1.4.1.2636.3.15.10.1.41.170.25|70|319452186197743737 +1.3.6.1.4.1.2636.3.15.10.1.41.243.50|70|16364791724635672240 +1.3.6.1.4.1.2636.3.15.10.1.41.463.15|70|17828705365509861774 +1.3.6.1.4.1.2636.3.15.10.1.42.170.25|70|9913951142041236635 +1.3.6.1.4.1.2636.3.15.10.1.42.243.50|70|4590232569604987384 +1.3.6.1.4.1.2636.3.15.10.1.42.463.15|70|16879636922511149261 +1.3.6.1.4.1.2636.3.15.10.1.43.170.25|70|16128554786484754487 +1.3.6.1.4.1.2636.3.15.10.1.43.243.50|70|6720587125918748618 +1.3.6.1.4.1.2636.3.15.10.1.43.463.15|70|10982123962446739740 +1.3.6.1.4.1.2636.3.15.10.1.44.170.25|70|6625476741978175421 +1.3.6.1.4.1.2636.3.15.10.1.44.243.50|70|14758624194210778093 +1.3.6.1.4.1.2636.3.15.10.1.44.463.15|70|3510595354408991883 +1.3.6.1.4.1.2636.3.15.10.1.45.170.25|70|12193077799780761280 +1.3.6.1.4.1.2636.3.15.10.1.45.243.50|70|434156370935591348 +1.3.6.1.4.1.2636.3.15.10.1.45.463.15|70|14701761228332844190 +1.3.6.1.4.1.2636.3.15.10.1.46.170.25|70|4097961753211413825 +1.3.6.1.4.1.2636.3.15.10.1.46.243.50|70|14198283656685665373 +1.3.6.1.4.1.2636.3.15.10.1.46.463.15|70|9981844938014966456 +1.3.6.1.4.1.2636.3.15.10.1.47.170.25|70|4499862665732599823 +1.3.6.1.4.1.2636.3.15.10.1.47.243.50|70|7208392381338046179 +1.3.6.1.4.1.2636.3.15.10.1.47.463.15|70|6241021335515696595 +1.3.6.1.4.1.2636.3.15.10.1.48.170.25|70|4799882603978889044 +1.3.6.1.4.1.2636.3.15.10.1.48.243.50|70|11687294706629489122 +1.3.6.1.4.1.2636.3.15.10.1.48.463.15|70|8189775643826190503 +1.3.6.1.4.1.2636.3.15.10.1.49.170.25|70|14943326773818355422 +1.3.6.1.4.1.2636.3.15.10.1.49.243.50|70|3029491279441157558 +1.3.6.1.4.1.2636.3.15.10.1.49.463.15|70|14724608253725676036 +1.3.6.1.4.1.2636.3.15.10.1.50.170.25|70|8089079564874181657 +1.3.6.1.4.1.2636.3.15.10.1.50.243.50|70|3777655493494241512 +1.3.6.1.4.1.2636.3.15.10.1.50.463.15|70|9345336414379681585 +1.3.6.1.4.1.2636.3.15.10.1.51.170.25|70|1461276263793545759 +1.3.6.1.4.1.2636.3.15.10.1.51.243.50|70|12409543167456089371 +1.3.6.1.4.1.2636.3.15.10.1.51.463.15|70|4329004572229054293 +1.3.6.1.4.1.2636.3.15.10.1.52.170.25|70|6602329256452145238 +1.3.6.1.4.1.2636.3.15.10.1.52.243.50|70|6601473160297645100 +1.3.6.1.4.1.2636.3.15.10.1.52.463.15|70|16308867362923996690 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|11 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|22 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|24 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|4x|4a6164656420666f727761726420627574206f78656e20717561696e746c79207468656972207468656972 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|4x|666f727761726420666f72776172642064726976696e672064726976696e67204a61646564204a61646564 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|4x|6275742064726976696e6720627574 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|3 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|12189304536513319332 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7722656158153650831 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10603165628512588309 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3843980053062837517 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|12509302819583194366 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|3885376250889014561 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10352052349549821463 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7177674967410638136 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|5091222764852841190 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|13715573869517889886 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|10130509551224208352 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|2504343572792914641 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2938889684826768032 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11291252729780336384 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|1481668101793427313 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|6310274704585370658 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6789462645369539630 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|491028968499993270 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3608875038808074952 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|797075051605537720 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14085552435037248689 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5552625442655846107 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4454798770846396730 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|9088428039091030198 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10229778388752303226 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11069391749223800156 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|11894101190314294086 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5808123009872645909 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|3572737769193079165 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|6853689900557367040 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|8372358451243013065 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|2058660889925691752 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|15823042855195793586 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|11700083343423325868 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4448772641108495089 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|676318422458825171 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|15142294159964046333 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|18390833596244657351 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10182233820378904307 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2057784955673108988 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6276174311039281296 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14694007361821605096 +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.1|4|Mycroft Holmes +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.2|4|Jim Moriarty +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.1|4|brother +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.2|4|enemy +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.1|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.2|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.4.1|65|2048000 diff --git a/test/new-e2e/ndm/snmp/compose/data/juniper-mx-variation.snmprec b/test/new-e2e/ndm/snmp/compose/data/juniper-mx-variation.snmprec new file mode 100644 index 0000000000000..230453ef3880d --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/juniper-mx-variation.snmprec @@ -0,0 +1,105 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.4.25.1 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 +1.3.6.1.2.1.31.1.1.1.1.83|4x|717561696e746c792064726976696e67206f78656e207468656972207a6f6d62696573206f78656e206163746564206163746564 +1.3.6.1.2.1.31.1.1.1.1.780|4x|62757420666f7277617264206b657074206275742074686569722064726976696e67206f78656e20717561696e746c79206163746564 +1.3.6.1.2.1.31.1.1.1.1.907|4x|6b65707420627574 +1.3.6.1.4.1.2636.3.5.2.1.1.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|74686569722064726976696e6720717561696e746c7920627574204a61646564206f78656e +1.3.6.1.4.1.2636.3.5.2.1.1.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6b657074206b65707420627574206f78656e204a6164656420666f7277617264206163746564 +1.3.6.1.4.1.2636.3.5.2.1.1.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|64726976696e67206b657074206163746564204a61646564207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.2636.3.5.2.1.2.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|4a61646564206f78656e206b6570742074686569722064726976696e6720627574206b657074 +1.3.6.1.4.1.2636.3.5.2.1.2.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6f78656e20666f7277617264204a61646564206b65707420627574204a61646564 +1.3.6.1.4.1.2636.3.5.2.1.2.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|6275742062757420627574207468656972207468656972207468656972206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2636.3.5.2.1.3.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.4.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|4454094099404974412 +1.3.6.1.4.1.2636.3.5.2.1.4.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|9206254963072680169 +1.3.6.1.4.1.2636.3.5.2.1.4.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|3696546830171348582 +1.3.6.1.4.1.2636.3.5.2.1.5.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|696736619041929696 +1.3.6.1.4.1.2636.3.5.2.1.5.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|16785242467789528990 +1.3.6.1.4.1.2636.3.5.2.1.5.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|17939108183311980476 +1.3.6.1.4.1.2636.3.5.2.1.6.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|717561696e746c792064726976696e6720666f727761726420666f7277617264206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.2636.3.5.2.1.6.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|666f7277617264206f78656e20717561696e746c79207a6f6d6269657320666f7277617264206f78656e206f78656e20746865697220627574 +1.3.6.1.4.1.2636.3.5.2.1.6.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|616374656420627574207468656972206f78656e204a61646564204a61646564207468656972 +1.3.6.1.4.1.2636.3.5.2.1.7.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4|driving +1.3.6.1.4.1.2636.3.5.2.1.7.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|717561696e746c792064726976696e67206f78656e20717561696e746c7920666f7277617264207a6f6d62696573206163746564 +1.3.6.1.4.1.2636.3.5.2.1.7.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|7a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.2636.3.5.2.1.8.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|1 +1.3.6.1.4.1.2636.3.5.2.1.8.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|2 +1.3.6.1.4.1.2636.3.5.2.1.8.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|11 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|22 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|24 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|4x|4a6164656420666f727761726420627574206f78656e20717561696e746c79207468656972207468656972 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|4x|666f727761726420666f72776172642064726976696e672064726976696e67204a61646564204a61646564 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|4x|6275742064726976696e6720627574 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|3 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|12189304536513319332 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7722656158153650831 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10603165628512588309 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3843980053062837517 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|12509302819583194366 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|3885376250889014561 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10352052349549821463 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7177674967410638136 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|5091222764852841190 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|13715573869517889886 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|10130509551224208352 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|2504343572792914641 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2938889684826768032 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11291252729780336384 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|1481668101793427313 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|6310274704585370658 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6789462645369539630 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|491028968499993270 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3608875038808074952 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|797075051605537720 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14085552435037248689 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5552625442655846107 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4454798770846396730 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|9088428039091030198 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10229778388752303226 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11069391749223800156 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|11894101190314294086 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5808123009872645909 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|3572737769193079165 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|6853689900557367040 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|8372358451243013065 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|2058660889925691752 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|15823042855195793586 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|11700083343423325868 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4448772641108495089 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|676318422458825171 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|15142294159964046333 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|18390833596244657351 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10182233820378904307 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2057784955673108988 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6276174311039281296 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14694007361821605096 diff --git a/test/new-e2e/ndm/snmp/compose/data/juniper-mx.snmprec b/test/new-e2e/ndm/snmp/compose/data/juniper-mx.snmprec new file mode 100644 index 0000000000000..4eda0496a907c --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/juniper-mx.snmprec @@ -0,0 +1,109 @@ +1.3.6.1.2.1.1.1.0|4|Juniper Networks, Inc. mx480 internet router, kernel JUNOS 11.2R1.10 #0: 2011-07-29 07:15:34 UTC +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.2.25 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 +1.3.6.1.2.1.31.1.1.1.1.83|4x|717561696e746c792064726976696e67206f78656e207468656972207a6f6d62696573206f78656e206163746564206163746564 +1.3.6.1.2.1.31.1.1.1.1.780|4x|62757420666f7277617264206b657074206275742074686569722064726976696e67206f78656e20717561696e746c79206163746564 +1.3.6.1.2.1.31.1.1.1.1.907|4x|6b65707420627574 +1.3.6.1.4.1.2636.3.1.2.0|4|MX480 Router +1.3.6.1.4.1.2636.3.1.3.0|4|dXPEdPBE5yKtjW9xx4 +1.3.6.1.4.1.2636.3.1.4.0|4|version-1.1 +1.3.6.1.4.1.2636.3.5.2.1.1.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|74686569722064726976696e6720717561696e746c7920627574204a61646564206f78656e +1.3.6.1.4.1.2636.3.5.2.1.1.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6b657074206b65707420627574206f78656e204a6164656420666f7277617264206163746564 +1.3.6.1.4.1.2636.3.5.2.1.1.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|64726976696e67206b657074206163746564204a61646564207a6f6d62696573206b657074206163746564 +1.3.6.1.4.1.2636.3.5.2.1.2.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|4a61646564206f78656e206b6570742074686569722064726976696e6720627574206b657074 +1.3.6.1.4.1.2636.3.5.2.1.2.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|6f78656e20666f7277617264204a61646564206b65707420627574204a61646564 +1.3.6.1.4.1.2636.3.5.2.1.2.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|6275742062757420627574207468656972207468656972207468656972206b657074206b65707420666f7277617264 +1.3.6.1.4.1.2636.3.5.2.1.3.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.3.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|4 +1.3.6.1.4.1.2636.3.5.2.1.4.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|4454094099404974412 +1.3.6.1.4.1.2636.3.5.2.1.4.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|9206254963072680169 +1.3.6.1.4.1.2636.3.5.2.1.4.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|3696546830171348582 +1.3.6.1.4.1.2636.3.5.2.1.5.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|70|696736619041929696 +1.3.6.1.4.1.2636.3.5.2.1.5.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|70|16785242467789528990 +1.3.6.1.4.1.2636.3.5.2.1.5.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|70|17939108183311980476 +1.3.6.1.4.1.2636.3.5.2.1.6.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4x|717561696e746c792064726976696e6720666f727761726420666f7277617264206163746564207468656972207a6f6d62696573 +1.3.6.1.4.1.2636.3.5.2.1.6.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|666f7277617264206f78656e20717561696e746c79207a6f6d6269657320666f7277617264206f78656e206f78656e20746865697220627574 +1.3.6.1.4.1.2636.3.5.2.1.6.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|616374656420627574207468656972206f78656e204a61646564204a61646564207468656972 +1.3.6.1.4.1.2636.3.5.2.1.7.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|4|driving +1.3.6.1.4.1.2636.3.5.2.1.7.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|4x|717561696e746c792064726976696e67206f78656e20717561696e746c7920666f7277617264207a6f6d62696573206163746564 +1.3.6.1.4.1.2636.3.5.2.1.7.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|4x|7a6f6d62696573207a6f6d62696573206b657074 +1.3.6.1.4.1.2636.3.5.2.1.8.37.116.104.101.105.114.32.100.114.105.118.105.110.103.32.113.117.97.105.110.116.108.121.32.98.117.116.32.74.97.100.101.100.32.111.120.101.110.38.74.97.100.101.100.32.111.120.101.110.32.107.101.112.116.32.116.104.101.105.114.32.100.114.105.118.105.110.103.32.98.117.116.32.107.101.112.116.4|2|1 +1.3.6.1.4.1.2636.3.5.2.1.8.38.107.101.112.116.32.107.101.112.116.32.98.117.116.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.97.99.116.101.100.33.111.120.101.110.32.102.111.114.119.97.114.100.32.74.97.100.101.100.32.107.101.112.116.32.98.117.116.32.74.97.100.101.100.4|2|2 +1.3.6.1.4.1.2636.3.5.2.1.8.43.100.114.105.118.105.110.103.32.107.101.112.116.32.97.99.116.101.100.32.74.97.100.101.100.32.122.111.109.98.105.101.115.32.107.101.112.116.32.97.99.116.101.100.47.98.117.116.32.98.117.116.32.98.117.116.32.116.104.101.105.114.32.116.104.101.105.114.32.116.104.101.105.114.32.107.101.112.116.32.107.101.112.116.32.102.111.114.119.97.114.100.4|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|11 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|22 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.1.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|24 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|4x|4a6164656420666f727761726420627574206f78656e20717561696e746c79207468656972207468656972 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|4x|666f727761726420666f72776172642064726976696e672064726976696e67204a61646564204a61646564 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.2.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|4x|6275742064726976696e6720627574 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.3.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|2|2 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.4.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|2|3 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|12189304536513319332 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7722656158153650831 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.5.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10603165628512588309 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3843980053062837517 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|12509302819583194366 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.6.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|3885376250889014561 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10352052349549821463 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|7177674967410638136 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.7.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|5091222764852841190 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|13715573869517889886 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|10130509551224208352 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.8.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|2504343572792914641 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2938889684826768032 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11291252729780336384 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.9.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|1481668101793427313 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|6310274704585370658 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6789462645369539630 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.10.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|491028968499993270 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|3608875038808074952 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|797075051605537720 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.11.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14085552435037248689 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5552625442655846107 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4454798770846396730 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.12.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|9088428039091030198 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|10229778388752303226 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|11069391749223800156 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.13.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|11894101190314294086 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|5808123009872645909 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|3572737769193079165 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.14.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|6853689900557367040 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|8372358451243013065 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|2058660889925691752 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.15.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|15823042855195793586 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|11700083343423325868 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|4448772641108495089 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.16.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|676318422458825171 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|15142294159964046333 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|18390833596244657351 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.17.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|10182233820378904307 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.11.43.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.111.120.101.110.32.113.117.97.105.110.116.108.121.32.116.104.101.105.114.32.116.104.101.105.114|70|2057784955673108988 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.22.43.102.111.114.119.97.114.100.32.102.111.114.119.97.114.100.32.100.114.105.118.105.110.103.32.100.114.105.118.105.110.103.32.74.97.100.101.100.32.74.97.100.101.100|70|6276174311039281296 +1.3.6.1.4.1.2636.3.40.1.4.1.2.1.18.24.15.98.117.116.32.100.114.105.118.105.110.103.32.98.117.116|70|14694007361821605096 diff --git a/test/new-e2e/ndm/snmp/compose/data/juniper-srx-variation.snmprec b/test/new-e2e/ndm/snmp/compose/data/juniper-srx-variation.snmprec new file mode 100644 index 0000000000000..4f57710ec1845 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/juniper-srx-variation.snmprec @@ -0,0 +1,85 @@ +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.4.35.1 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 +1.3.6.1.2.1.31.1.1.1.1.83|4x|717561696e746c792064726976696e67206f78656e207468656972207a6f6d62696573206f78656e206163746564206163746564 +1.3.6.1.2.1.31.1.1.1.1.780|4x|62757420666f7277617264206b657074206275742074686569722064726976696e67206f78656e20717561696e746c79206163746564 +1.3.6.1.2.1.31.1.1.1.1.907|4x|6b65707420627574 +1.3.6.1.4.1.2636.3.6.2.1.1.83.1.5.116.104.101.105.114|2|83 +1.3.6.1.4.1.2636.3.6.2.1.1.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|780 +1.3.6.1.4.1.2636.3.6.2.1.1.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|907 +1.3.6.1.4.1.2636.3.6.2.1.2.83.1.5.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|2 +1.3.6.1.4.1.2636.3.6.2.1.3.83.1.5.116.104.101.105.114|4|their +1.3.6.1.4.1.2636.3.6.2.1.3.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|61637465642062757420666f7277617264206163746564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2636.3.6.2.1.3.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e204a61646564206f78656e204a6164656420666f7277617264206b65707420717561696e746c79 +1.3.6.1.4.1.2636.3.6.2.1.4.83.1.5.116.104.101.105.114|70|12317383665498203792 +1.3.6.1.4.1.2636.3.6.2.1.4.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|18298564239260252878 +1.3.6.1.4.1.2636.3.6.2.1.4.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|14296161882202174757 +1.3.6.1.4.1.2636.3.6.2.1.5.83.1.5.116.104.101.105.114|70|11494977799318547626 +1.3.6.1.4.1.2636.3.6.2.1.5.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|3147422798697337841 +1.3.6.1.4.1.2636.3.6.2.1.5.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|9179463037551089633 +1.3.6.1.4.1.2636.3.6.2.1.6.83.1.5.116.104.101.105.114|4|driving +1.3.6.1.4.1.2636.3.6.2.1.6.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|666f72776172642064726976696e67 +1.3.6.1.4.1.2636.3.6.2.1.6.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e206b657074207a6f6d62696573 +1.3.6.1.4.1.2636.3.16.1.1.1.1.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|2|116 +1.3.6.1.4.1.2636.3.16.1.1.1.1.780.1.5.97.99.116.101.100|2|403 +1.3.6.1.4.1.2636.3.16.1.1.1.1.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|2|796 +1.3.6.1.4.1.2636.3.16.1.1.1.2.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|2|1 +1.3.6.1.4.1.2636.3.16.1.1.1.2.780.1.5.97.99.116.101.100|2|1 +1.3.6.1.4.1.2636.3.16.1.1.1.2.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.2636.3.16.1.1.1.3.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|4x|717561696e746c79206f78656e2064726976696e67207a6f6d6269657320616374656420717561696e746c79 +1.3.6.1.4.1.2636.3.16.1.1.1.3.780.1.5.97.99.116.101.100|4|acted +1.3.6.1.4.1.2636.3.16.1.1.1.3.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|4x|6163746564207a6f6d62696573204a6164656420666f727761726420627574204a61646564 +1.3.6.1.4.1.2636.3.16.1.1.1.4.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|70|6160475318969358761 +1.3.6.1.4.1.2636.3.16.1.1.1.4.780.1.5.97.99.116.101.100|70|15152137479357665383 +1.3.6.1.4.1.2636.3.16.1.1.1.4.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|70|8362446845569884768 +1.3.6.1.4.1.2636.3.16.1.1.1.5.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|70|5039501432693393801 +1.3.6.1.4.1.2636.3.16.1.1.1.5.780.1.5.97.99.116.101.100|70|4992162073054637767 +1.3.6.1.4.1.2636.3.16.1.1.1.5.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|70|4746642765674161328 +1.3.6.1.4.1.2636.3.16.1.1.1.6.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|4x|64726976696e6720717561696e746c79206f78656e204a616465642062757420746865697220627574 +1.3.6.1.4.1.2636.3.16.1.1.1.6.780.1.5.97.99.116.101.100|4x|717561696e746c79204a61646564206275742061637465642061637465642064726976696e67204a61646564 +1.3.6.1.4.1.2636.3.16.1.1.1.6.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|4x|62757420717561696e746c7920627574206f78656e20666f7277617264 +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.1|4|Mycroft Holmes +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.2|4|Jim Moriarty +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.1|4|brother +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.2|4|enemy +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.1|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.2|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.4.1|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.4.2|65|2048000 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.21.165.122.212 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.105.107.123.14.187.39 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.106.82.171.151.194.140.17.11 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.181.44.102.54.128.164.245.225 +1.3.6.1.6.3.1.1.6.1.0|2|14 +1.3.6.1.6.3.1.1.6.1.0|2|172 +1.3.6.1.6.3.10.2.1.1.0|4x|6b657074206f78656e +1.3.6.1.6.3.10.2.1.1.0|4x|62757420717561696e746c79 +1.3.6.1.6.3.10.2.1.2.0|2|70 +1.3.6.1.6.3.10.2.1.2.0|2|406 +1.3.6.1.6.3.10.2.1.3.0|2|261 +1.3.6.1.6.3.10.2.1.3.0|2|492 +1.3.6.1.6.3.10.2.1.4.0|2|505 +1.3.6.1.6.3.10.2.1.4.0|2|565 diff --git a/test/new-e2e/ndm/snmp/compose/data/juniper-srx.snmprec b/test/new-e2e/ndm/snmp/compose/data/juniper-srx.snmprec new file mode 100644 index 0000000000000..ed25a1fc82c4d --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/juniper-srx.snmprec @@ -0,0 +1,89 @@ +1.3.6.1.2.1.1.1.0|4|Juniper Networks, Inc. srx3400 internet router, kernel JUNOS 10.4R3.4 #0: 2011-03-19 22:06:23 UTC +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.2636.1.1.1.2.35 +1.3.6.1.2.1.15.3.1.1.244.12.239.177|64x|47365042 +1.3.6.1.2.1.15.3.1.2.244.12.239.177|2|6 +1.3.6.1.2.1.15.3.1.3.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.4.244.12.239.177|2|21 +1.3.6.1.2.1.15.3.1.5.244.12.239.177|64x|56a51b1e +1.3.6.1.2.1.15.3.1.6.244.12.239.177|2|31 +1.3.6.1.2.1.15.3.1.7.244.12.239.177|64x|f40cefb1 +1.3.6.1.2.1.15.3.1.8.244.12.239.177|2|7 +1.3.6.1.2.1.15.3.1.9.244.12.239.177|2|26 +1.3.6.1.2.1.15.3.1.10.244.12.239.177|65|2016631572 +1.3.6.1.2.1.15.3.1.11.244.12.239.177|65|2128197531 +1.3.6.1.2.1.15.3.1.12.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.13.244.12.239.177|65|3947895592 +1.3.6.1.2.1.15.3.1.15.244.12.239.177|65|1040702836 +1.3.6.1.2.1.15.3.1.16.244.12.239.177|66|3947895592 +1.3.6.1.2.1.15.3.1.17.244.12.239.177|2|378 +1.3.6.1.2.1.15.3.1.18.244.12.239.177|2|124 +1.3.6.1.2.1.15.3.1.19.244.12.239.177|2|25342 +1.3.6.1.2.1.15.3.1.20.244.12.239.177|2|9203 +1.3.6.1.2.1.15.3.1.21.244.12.239.177|2|235634 +1.3.6.1.2.1.15.3.1.22.244.12.239.177|2|2 +1.3.6.1.2.1.15.3.1.23.244.12.239.177|2|4 +1.3.6.1.2.1.15.3.1.24.244.12.239.177|66|3947895592 +1.3.6.1.2.1.31.1.1.1.1.83|4x|717561696e746c792064726976696e67206f78656e207468656972207a6f6d62696573206f78656e206163746564206163746564 +1.3.6.1.2.1.31.1.1.1.1.780|4x|62757420666f7277617264206b657074206275742074686569722064726976696e67206f78656e20717561696e746c79206163746564 +1.3.6.1.2.1.31.1.1.1.1.907|4x|6b65707420627574 +1.3.6.1.4.1.2636.3.1.2.0|4|SRX 3400 Router +1.3.6.1.4.1.2636.3.1.3.0|4|dXPEdPBE5yKtjW9xx5 +1.3.6.1.4.1.2636.3.1.4.0|4|version-1.2 +1.3.6.1.4.1.2636.3.6.2.1.1.83.1.5.116.104.101.105.114|2|83 +1.3.6.1.4.1.2636.3.6.2.1.1.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|780 +1.3.6.1.4.1.2636.3.6.2.1.1.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|907 +1.3.6.1.4.1.2636.3.6.2.1.2.83.1.5.116.104.101.105.114|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|2|1 +1.3.6.1.4.1.2636.3.6.2.1.2.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|2|2 +1.3.6.1.4.1.2636.3.6.2.1.3.83.1.5.116.104.101.105.114|4|their +1.3.6.1.4.1.2636.3.6.2.1.3.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|61637465642062757420666f7277617264206163746564207a6f6d6269657320666f7277617264 +1.3.6.1.4.1.2636.3.6.2.1.3.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e204a61646564206f78656e204a6164656420666f7277617264206b65707420717561696e746c79 +1.3.6.1.4.1.2636.3.6.2.1.4.83.1.5.116.104.101.105.114|70|12317383665498203792 +1.3.6.1.4.1.2636.3.6.2.1.4.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|18298564239260252878 +1.3.6.1.4.1.2636.3.6.2.1.4.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|14296161882202174757 +1.3.6.1.4.1.2636.3.6.2.1.5.83.1.5.116.104.101.105.114|70|11494977799318547626 +1.3.6.1.4.1.2636.3.6.2.1.5.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|70|3147422798697337841 +1.3.6.1.4.1.2636.3.6.2.1.5.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|70|9179463037551089633 +1.3.6.1.4.1.2636.3.6.2.1.6.83.1.5.116.104.101.105.114|4|driving +1.3.6.1.4.1.2636.3.6.2.1.6.780.1.39.97.99.116.101.100.32.98.117.116.32.102.111.114.119.97.114.100.32.97.99.116.101.100.32.122.111.109.98.105.101.115.32.102.111.114.119.97.114.100|4x|666f72776172642064726976696e67 +1.3.6.1.4.1.2636.3.6.2.1.6.907.2.43.111.120.101.110.32.74.97.100.101.100.32.111.120.101.110.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.107.101.112.116.32.113.117.97.105.110.116.108.121|4x|6f78656e206b657074207a6f6d62696573 +1.3.6.1.4.1.2636.3.16.1.1.1.1.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|2|116 +1.3.6.1.4.1.2636.3.16.1.1.1.1.780.1.5.97.99.116.101.100|2|403 +1.3.6.1.4.1.2636.3.16.1.1.1.1.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|2|796 +1.3.6.1.4.1.2636.3.16.1.1.1.2.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|2|1 +1.3.6.1.4.1.2636.3.16.1.1.1.2.780.1.5.97.99.116.101.100|2|1 +1.3.6.1.4.1.2636.3.16.1.1.1.2.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|2|1 +1.3.6.1.4.1.2636.3.16.1.1.1.3.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|4x|717561696e746c79206f78656e2064726976696e67207a6f6d6269657320616374656420717561696e746c79 +1.3.6.1.4.1.2636.3.16.1.1.1.3.780.1.5.97.99.116.101.100|4|acted +1.3.6.1.4.1.2636.3.16.1.1.1.3.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|4x|6163746564207a6f6d62696573204a6164656420666f727761726420627574204a61646564 +1.3.6.1.4.1.2636.3.16.1.1.1.4.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|70|6160475318969358761 +1.3.6.1.4.1.2636.3.16.1.1.1.4.780.1.5.97.99.116.101.100|70|15152137479357665383 +1.3.6.1.4.1.2636.3.16.1.1.1.4.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|70|8362446845569884768 +1.3.6.1.4.1.2636.3.16.1.1.1.5.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|70|5039501432693393801 +1.3.6.1.4.1.2636.3.16.1.1.1.5.780.1.5.97.99.116.101.100|70|4992162073054637767 +1.3.6.1.4.1.2636.3.16.1.1.1.5.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|70|4746642765674161328 +1.3.6.1.4.1.2636.3.16.1.1.1.6.83.1.44.113.117.97.105.110.116.108.121.32.111.120.101.110.32.100.114.105.118.105.110.103.32.122.111.109.98.105.101.115.32.97.99.116.101.100.32.113.117.97.105.110.116.108.121|4x|64726976696e6720717561696e746c79206f78656e204a616465642062757420746865697220627574 +1.3.6.1.4.1.2636.3.16.1.1.1.6.780.1.5.97.99.116.101.100|4x|717561696e746c79204a61646564206275742061637465642061637465642064726976696e67204a61646564 +1.3.6.1.4.1.2636.3.16.1.1.1.6.907.1.37.97.99.116.101.100.32.122.111.109.98.105.101.115.32.74.97.100.101.100.32.102.111.114.119.97.114.100.32.98.117.116.32.74.97.100.101.100|4x|62757420717561696e746c7920627574206f78656e20666f7277617264 +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.1|4|Mycroft Holmes +1.3.6.1.4.1.2636.3.89.1.1.3.1.1.2|4|Jim Moriarty +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.1|4|brother +1.3.6.1.4.1.2636.3.89.1.1.3.1.2.2|4|enemy +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.1|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.3.2|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.4.1|65|2048000 +1.3.6.1.4.1.2636.3.89.1.1.3.1.4.2|65|2048000 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.21.165.122.212 +1.3.6.1.6.3.1.1.4.1.0|6|1.3.6.1.3.105.107.123.14.187.39 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.106.82.171.151.194.140.17.11 +1.3.6.1.6.3.1.1.4.3.0|6|1.3.6.1.3.181.44.102.54.128.164.245.225 +1.3.6.1.6.3.1.1.6.1.0|2|14 +1.3.6.1.6.3.1.1.6.1.0|2|172 +1.3.6.1.6.3.10.2.1.1.0|4x|6b657074206f78656e +1.3.6.1.6.3.10.2.1.1.0|4x|62757420717561696e746c79 +1.3.6.1.6.3.10.2.1.2.0|2|70 +1.3.6.1.6.3.10.2.1.2.0|2|406 +1.3.6.1.6.3.10.2.1.3.0|2|261 +1.3.6.1.6.3.10.2.1.3.0|2|492 +1.3.6.1.6.3.10.2.1.4.0|2|505 +1.3.6.1.6.3.10.2.1.4.0|2|565 diff --git a/test/new-e2e/ndm/snmp/compose/data/meraki-cloud-controller.snmprec b/test/new-e2e/ndm/snmp/compose/data/meraki-cloud-controller.snmprec new file mode 100644 index 0000000000000..7e30e577bcc1b --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/meraki-cloud-controller.snmprec @@ -0,0 +1,96 @@ +1.3.6.1.2.1.1.1.0|4|Cisco Meraki Cloud Controller +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.29671.1 +1.3.6.1.2.1.1.3.0|67|3046294100 +1.3.6.1.2.1.1.4.0|4|support@meraki.com +1.3.6.1.2.1.1.5.0|4|dashboard.meraki.com +1.3.6.1.2.1.1.6.0|4|123 Fake Blvd, San Francisco, CA 94158, USA +1.3.6.1.2.1.2.2.1.1.11|2|11 +1.3.6.1.2.1.2.2.1.2.11|4x|42010aa40033 +1.3.6.1.2.1.2.2.1.3.11|2|29 +1.3.6.1.2.1.2.2.1.4.11|2|10 +1.3.6.1.2.1.2.2.1.5.11|66|842689539 +1.3.6.1.2.1.2.2.1.6.11|4x|00 +1.3.6.1.2.1.2.2.1.7.11|2|2 +1.3.6.1.2.1.2.2.1.8.11|2|7 +1.3.6.1.2.1.2.2.1.9.11|67|4043941980 +1.3.6.1.2.1.2.2.1.10.11|65|2268799121 +1.3.6.1.2.1.2.2.1.11.11|65|1358081555 +1.3.6.1.2.1.2.2.1.12.11|65|2804916297 +1.3.6.1.2.1.2.2.1.13.11|65|1953269825 +1.3.6.1.2.1.2.2.1.14.11|65|3659465164 +1.3.6.1.2.1.2.2.1.15.11|65|3028473442 +1.3.6.1.2.1.2.2.1.16.11|65|2204618213 +1.3.6.1.2.1.2.2.1.17.11|65|3659357157 +1.3.6.1.2.1.2.2.1.18.11|65|1946069301 +1.3.6.1.2.1.2.2.1.19.11|65|1976763204 +1.3.6.1.2.1.2.2.1.20.11|65|1287028500 +1.3.6.1.2.1.2.2.1.21.11|66|3693484051 +1.3.6.1.2.1.31.1.1.1.1.11|4x|65746830 +1.3.6.1.2.1.31.1.1.1.2.11|65|3971642957 +1.3.6.1.2.1.31.1.1.1.3.11|65|3271801795 +1.3.6.1.2.1.31.1.1.1.4.11|65|3342364789 +1.3.6.1.2.1.31.1.1.1.5.11|65|3388467146 +1.3.6.1.2.1.31.1.1.1.6.11|70|14670660891743438939 +1.3.6.1.2.1.31.1.1.1.7.11|70|10886984631120028416 +1.3.6.1.2.1.31.1.1.1.8.11|70|17994136813414766052 +1.3.6.1.2.1.31.1.1.1.9.11|70|10439183159610289289 +1.3.6.1.2.1.31.1.1.1.10.11|70|2583386891169315520 +1.3.6.1.2.1.31.1.1.1.11.11|70|8885889412380302445 +1.3.6.1.2.1.31.1.1.1.12.11|70|10885548970511406028 +1.3.6.1.2.1.31.1.1.1.13.11|70|10028224865574503284 +1.3.6.1.2.1.31.1.1.1.15.11|66|31298329 +1.3.6.1.4.1.29671.1.1.1.0|4|user@example.com - Live Demo +1.3.6.1.4.1.29671.1.1.2.1.1.67.118.68.105.78.98.109.99|4|CvDiNbmc +1.3.6.1.4.1.29671.1.1.2.1.1.71.99.115.86.89.99.109.99|4|GcsVYcmc +1.3.6.1.4.1.29671.1.1.2.1.1.81.122.70.83.101.98.109.99|4|QzFSebmc +1.3.6.1.4.1.29671.1.1.2.1.1.115.53.82.71.74.97.109.99|4|s5RGJamc +1.3.6.1.4.1.29671.1.1.2.1.1.121.119.82.55.83.97.109.99|4|ywR7Samc +1.3.6.1.4.1.29671.1.1.2.1.2.67.118.68.105.78.98.109.99|4|Live Demo - Firewall +1.3.6.1.4.1.29671.1.1.2.1.2.71.99.115.86.89.99.109.99|4|Live Demo - University Wireless +1.3.6.1.4.1.29671.1.1.2.1.2.81.122.70.83.101.98.109.99|4|Live Demo - Switches +1.3.6.1.4.1.29671.1.1.2.1.2.115.53.82.71.74.97.109.99|4|Live Demo - Branch Firewall +1.3.6.1.4.1.29671.1.1.2.1.2.121.119.82.55.83.97.109.99|4|Live Demo - Branch Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.71.99.115.86.89.99.109.99.1|4|Live Demo - University Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.71.99.115.86.89.99.109.99.2|4|Live Demo - University Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.71.99.115.86.89.99.109.99.3|4|Live Demo - University Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.71.99.115.86.89.99.109.99.4|4|Live Demo - University Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.121.119.82.55.83.97.109.99.1|4|Live Demo - Branch Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.121.119.82.55.83.97.109.99.2|4|Live Demo - Branch Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.121.119.82.55.83.97.109.99.3|4|Live Demo - Branch Wireless +1.3.6.1.4.1.29671.1.1.3.1.1.121.119.82.55.83.97.109.99.4|4|Live Demo - Branch Wireless +1.3.6.1.4.1.29671.1.1.3.1.2.71.99.115.86.89.99.109.99.1|2|1 +1.3.6.1.4.1.29671.1.1.3.1.2.71.99.115.86.89.99.109.99.2|2|2 +1.3.6.1.4.1.29671.1.1.3.1.2.71.99.115.86.89.99.109.99.3|2|3 +1.3.6.1.4.1.29671.1.1.3.1.2.71.99.115.86.89.99.109.99.4|2|4 +1.3.6.1.4.1.29671.1.1.3.1.2.121.119.82.55.83.97.109.99.1|2|1 +1.3.6.1.4.1.29671.1.1.3.1.2.121.119.82.55.83.97.109.99.2|2|2 +1.3.6.1.4.1.29671.1.1.3.1.2.121.119.82.55.83.97.109.99.3|2|3 +1.3.6.1.4.1.29671.1.1.3.1.2.121.119.82.55.83.97.109.99.4|2|4 +1.3.6.1.4.1.29671.1.1.3.1.3.71.99.115.86.89.99.109.99.1|4|Private students +1.3.6.1.4.1.29671.1.1.3.1.3.71.99.115.86.89.99.109.99.2|4|Private faculty +1.3.6.1.4.1.29671.1.1.3.1.3.71.99.115.86.89.99.109.99.3|4|Public guest +1.3.6.1.4.1.29671.1.1.3.1.3.71.99.115.86.89.99.109.99.4|4|University IT +1.3.6.1.4.1.29671.1.1.3.1.3.121.119.82.55.83.97.109.99.1|4|Public guest +1.3.6.1.4.1.29671.1.1.3.1.3.121.119.82.55.83.97.109.99.2|4|Private employee +1.3.6.1.4.1.29671.1.1.3.1.3.121.119.82.55.83.97.109.99.3|4|VOIP +1.3.6.1.4.1.29671.1.1.3.1.3.121.119.82.55.83.97.109.99.4|4|Corporate IT +1.3.6.1.4.1.29671.1.1.4.1.1.2.2.0.102.245.127|4e|\x02\x02\x00f\xf5\x7f +1.3.6.1.4.1.29671.1.1.4.1.2.2.2.0.102.245.127|4|Gymnasium +1.3.6.1.4.1.29671.1.1.4.1.3.2.2.0.102.245.127|2|1 +1.3.6.1.4.1.29671.1.1.4.1.4.2.2.0.102.245.127|4e|\x07\xdb\x06\t\x14\x1b\x15\x00+\x00\x00 +1.3.6.1.4.1.29671.1.1.4.1.5.2.2.0.102.245.127|2|6 +1.3.6.1.4.1.29671.1.1.4.1.6.2.2.0.102.245.127|2|0 +1.3.6.1.4.1.29671.1.1.4.1.7.2.2.0.102.245.127|64e|b\xad\xd1\xd6 +1.3.6.1.4.1.29671.1.1.4.1.8.2.2.0.102.245.127|4|VRT-2207619937663 +1.3.6.1.4.1.29671.1.1.4.1.9.2.2.0.102.245.127|4|MR16-HW +1.3.6.1.4.1.29671.1.1.4.1.10.2.2.0.102.245.127|4|Meraki MR16 Cloud Managed AP +1.3.6.1.4.1.29671.1.1.4.1.11.2.2.0.102.245.127|4|L_NETWORK +1.3.6.1.4.1.29671.1.1.5.1.1.2.2.0.102.245.127|4e|\x02\x02\x00f\xf5\x00 +1.3.6.1.4.1.29671.1.1.5.1.2.2.2.0.102.245.127|65|4 +1.3.6.1.4.1.29671.1.1.5.1.3.2.2.0.102.245.127|4|wifi0 +1.3.6.1.4.1.29671.1.1.5.1.4.2.2.0.102.245.127|65|342858662 +1.3.6.1.4.1.29671.1.1.5.1.5.2.2.0.102.245.127|65|423658599 +1.3.6.1.4.1.29671.1.1.5.1.6.2.2.0.102.245.127|65|204966843 +1.3.6.1.4.1.29671.1.1.5.1.7.2.2.0.102.245.127|65|433234633 +1.3.6.1.4.1.29671.1.1.5.1.8.2.2.0.102.245.127|4|Model +1.3.6.1.4.1.29671.1.1.5.1.9.2.2.0.102.245.127|4|4332 diff --git a/test/new-e2e/ndm/snmp/compose/data/netapp.snmprec b/test/new-e2e/ndm/snmp/compose/data/netapp.snmprec new file mode 100644 index 0000000000000..10b128d052875 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/netapp.snmprec @@ -0,0 +1,676 @@ +1.3.6.1.2.1.1.1.0|4|NetApp Release 9.3P7: Wed Jul 25 10:11:10 UTC 2018 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.789.2.5 +1.3.6.1.2.1.1.3.0|67|4294967295 +1.3.6.1.2.1.1.4.0|4|admin@example.company +1.3.6.1.2.1.1.5.0|4|example-datacenter.company +1.3.6.1.2.1.1.6.0|4|France +1.3.6.1.2.1.1.7.0|2|72 +1.3.6.1.4.1.789.1.1.1.0|2|2 +1.3.6.1.4.1.789.1.1.2.0|4|NetApp Release 9.3P7: Wed Jul 25 10:11:10 UTC 2018 +1.3.6.1.4.1.789.1.1.3.0|4| +1.3.6.1.4.1.789.1.1.4.0|2|1 +1.3.6.1.4.1.789.1.1.5.0|4|example-model +1.3.6.1.4.1.789.1.1.6.0|4|11.1 +1.3.6.1.4.1.789.1.1.7.0|4|http://127.0.0.1/cem +1.3.6.1.4.1.789.1.1.8.0|4|http://127.0.0.1/servlets/netapp.servlets.admin.XMLrequest_filer +1.3.6.1.4.1.789.1.1.9.0|4|1-23-456789 +1.3.6.1.4.1.789.1.1.10.0|4|unknown +1.3.6.1.4.1.789.1.1.11.0|2|1 +1.3.6.1.4.1.789.1.1.12.0|4|Trap variable currrently unused. +1.3.6.1.4.1.789.1.1.13.0|4| +1.3.6.1.4.1.789.1.2.1.1.0|67|1403140598 +1.3.6.1.4.1.789.1.2.1.2.0|67|1014385684 +1.3.6.1.4.1.789.1.2.1.3.0|2|2 +1.3.6.1.4.1.789.1.2.1.4.0|67|388754933 +1.3.6.1.4.1.789.1.2.1.5.0|2|99 +1.3.6.1.4.1.789.1.2.1.6.0|2|6 +1.3.6.1.4.1.789.1.2.1.7.0|65|93010879 +1.3.6.1.4.1.789.1.2.1.8.0|65|55622093 +1.3.6.1.4.1.789.1.2.1.9.0|65|3104312523 +1.3.6.1.4.1.789.1.2.1.10.0|65|898238502 +1.3.6.1.4.1.789.1.2.1.11.0|2|0 +1.3.6.1.4.1.789.1.2.1.12.0|2|0 +1.3.6.1.4.1.789.1.2.1.13.0|65|487465628 +1.3.6.1.4.1.789.1.2.1.14.1.1.105.101.102.105.108.101.114.48.51.45.48.49|4|iefiler03-01 +1.3.6.1.4.1.789.1.2.1.14.1.1.105.101.102.105.108.101.114.48.51.45.48.50|4|iefiler03-02 +1.3.6.1.4.1.789.1.2.1.14.1.2.105.101.102.105.108.101.114.48.51.45.48.49|70|5698107992 +1.3.6.1.4.1.789.1.2.1.14.1.2.105.101.102.105.108.101.114.48.51.45.48.50|70|5698124708 +1.3.6.1.4.1.789.1.2.1.14.1.3.105.101.102.105.108.101.114.48.51.45.48.49|70|1014385688 +1.3.6.1.4.1.789.1.2.1.14.1.3.105.101.102.105.108.101.114.48.51.45.48.50|70|969565517 +1.3.6.1.4.1.789.1.2.1.14.1.4.105.101.102.105.108.101.114.48.51.45.48.49|2|2 +1.3.6.1.4.1.789.1.2.1.14.1.4.105.101.102.105.108.101.114.48.51.45.48.50|2|5 +1.3.6.1.4.1.789.1.2.1.14.1.5.105.101.102.105.108.101.114.48.51.45.48.49|70|4683722343 +1.3.6.1.4.1.789.1.2.1.14.1.5.105.101.102.105.108.101.114.48.51.45.48.50|70|4728559230 +1.3.6.1.4.1.789.1.2.1.14.1.6.105.101.102.105.108.101.114.48.51.45.48.49|2|98 +1.3.6.1.4.1.789.1.2.1.14.1.6.105.101.102.105.108.101.114.48.51.45.48.50|2|95 +1.3.6.1.4.1.789.1.2.1.14.1.7.105.101.102.105.108.101.114.48.51.45.48.49|2|6 +1.3.6.1.4.1.789.1.2.1.14.1.7.105.101.102.105.108.101.114.48.51.45.48.50|2|6 +1.3.6.1.4.1.789.1.2.1.14.1.8.105.101.102.105.108.101.114.48.51.45.48.49|70|93032618 +1.3.6.1.4.1.789.1.2.1.14.1.8.105.101.102.105.108.101.114.48.51.45.48.50|70|2112931330 +1.3.6.1.4.1.789.1.2.1.14.1.9.105.101.102.105.108.101.114.48.51.45.48.49|70|55644487 +1.3.6.1.4.1.789.1.2.1.14.1.9.105.101.102.105.108.101.114.48.51.45.48.50|70|1021079057 +1.3.6.1.4.1.789.1.2.1.14.1.10.105.101.102.105.108.101.114.48.51.45.48.49|70|3104313087 +1.3.6.1.4.1.789.1.2.1.14.1.10.105.101.102.105.108.101.114.48.51.45.48.50|70|3640609337 +1.3.6.1.4.1.789.1.2.1.14.1.11.105.101.102.105.108.101.114.48.51.45.48.49|70|898257319 +1.3.6.1.4.1.789.1.2.1.14.1.11.105.101.102.105.108.101.114.48.51.45.48.50|70|3708864711 +1.3.6.1.4.1.789.1.2.1.14.1.12.105.101.102.105.108.101.114.48.51.45.48.49|2|0 +1.3.6.1.4.1.789.1.2.1.14.1.12.105.101.102.105.108.101.114.48.51.45.48.50|2|0 +1.3.6.1.4.1.789.1.2.1.14.1.13.105.101.102.105.108.101.114.48.51.45.48.49|2|1 +1.3.6.1.4.1.789.1.2.1.14.1.13.105.101.102.105.108.101.114.48.51.45.48.50|2|1 +1.3.6.1.4.1.789.1.2.1.14.1.14.105.101.102.105.108.101.114.48.51.45.48.49|70|13372368618 +1.3.6.1.4.1.789.1.2.1.14.1.14.105.101.102.105.108.101.114.48.51.45.48.50|70|13957447734 +1.3.6.1.4.1.789.1.2.2.23.0|2|60 +1.3.6.1.4.1.789.1.2.3.8.0|2|4 +1.3.6.1.4.1.789.1.2.6.1.0|67|159088104 +1.3.6.1.4.1.789.1.2.6.2.0|65|8502459 +1.3.6.1.4.1.789.1.2.6.3.0|65|2174485 +1.3.6.1.4.1.789.1.2.6.4.0|65|0 +1.3.6.1.4.1.789.1.2.6.5.0|65|205975 +1.3.6.1.4.1.789.1.2.6.6.0|65|13773 +1.3.6.1.4.1.789.1.2.6.7.0|65|10581 +1.3.6.1.4.1.789.1.2.6.8.0|65|16294034 +1.3.6.1.4.1.789.1.2.6.9.0|65|0 +1.3.6.1.4.1.789.1.2.6.10.0|65|5350031 +1.3.6.1.4.1.789.1.2.6.12.0|65|0 +1.3.6.1.4.1.789.1.2.6.13.0|65|0 +1.3.6.1.4.1.789.1.2.6.14.0|65|0 +1.3.6.1.4.1.789.1.2.6.15.0|65|0 +1.3.6.1.4.1.789.1.2.6.16.1.2.105.101.102.105.108.101.114.48.51.45.48.49|70|159088112 +1.3.6.1.4.1.789.1.2.6.16.1.2.105.101.102.105.108.101.114.48.51.45.48.50|70|116996856 +1.3.6.1.4.1.789.1.2.6.16.1.3.105.101.102.105.108.101.114.48.51.45.48.49|70|8502460 +1.3.6.1.4.1.789.1.2.6.16.1.3.105.101.102.105.108.101.114.48.51.45.48.50|70|6840201 +1.3.6.1.4.1.789.1.2.6.16.1.4.105.101.102.105.108.101.114.48.51.45.48.49|70|2174485 +1.3.6.1.4.1.789.1.2.6.16.1.4.105.101.102.105.108.101.114.48.51.45.48.50|70|769275 +1.3.6.1.4.1.789.1.2.6.16.1.5.105.101.102.105.108.101.114.48.51.45.48.49|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.5.105.101.102.105.108.101.114.48.51.45.48.50|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.6.105.101.102.105.108.101.114.48.51.45.48.49|70|205975 +1.3.6.1.4.1.789.1.2.6.16.1.6.105.101.102.105.108.101.114.48.51.45.48.50|70|847063 +1.3.6.1.4.1.789.1.2.6.16.1.7.105.101.102.105.108.101.114.48.51.45.48.49|70|13773 +1.3.6.1.4.1.789.1.2.6.16.1.7.105.101.102.105.108.101.114.48.51.45.48.50|70|4487 +1.3.6.1.4.1.789.1.2.6.16.1.8.105.101.102.105.108.101.114.48.51.45.48.49|70|10581 +1.3.6.1.4.1.789.1.2.6.16.1.8.105.101.102.105.108.101.114.48.51.45.48.50|70|57843 +1.3.6.1.4.1.789.1.2.6.16.1.9.105.101.102.105.108.101.114.48.51.45.48.49|70|16294035 +1.3.6.1.4.1.789.1.2.6.16.1.9.105.101.102.105.108.101.114.48.51.45.48.50|70|12008505 +1.3.6.1.4.1.789.1.2.6.16.1.10.105.101.102.105.108.101.114.48.51.45.48.49|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.10.105.101.102.105.108.101.114.48.51.45.48.50|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.11.105.101.102.105.108.101.114.48.51.45.48.49|70|5350031 +1.3.6.1.4.1.789.1.2.6.16.1.11.105.101.102.105.108.101.114.48.51.45.48.50|70|3458213 +1.3.6.1.4.1.789.1.2.6.16.1.12.105.101.102.105.108.101.114.48.51.45.48.49|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.12.105.101.102.105.108.101.114.48.51.45.48.50|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.13.105.101.102.105.108.101.114.48.51.45.48.49|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.13.105.101.102.105.108.101.114.48.51.45.48.50|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.14.105.101.102.105.108.101.114.48.51.45.48.49|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.14.105.101.102.105.108.101.114.48.51.45.48.50|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.15.105.101.102.105.108.101.114.48.51.45.48.49|70|0 +1.3.6.1.4.1.789.1.2.6.16.1.15.105.101.102.105.108.101.114.48.51.45.48.50|70|0 +1.3.6.1.4.1.789.1.2.7.1.0|2|1 +1.3.6.1.4.1.789.1.2.7.2.0|4|The last AutoSupport message was sent successfully. +1.3.6.1.4.1.789.1.2.7.3.0|65|1242 +1.3.6.1.4.1.789.1.2.7.4.0|65|2 +1.3.6.1.4.1.789.1.4.4.1.1.1036|2|1036 +1.3.6.1.4.1.789.1.4.4.1.1.1038|2|1038 +1.3.6.1.4.1.789.1.4.4.1.1.1040|2|1040 +1.3.6.1.4.1.789.1.4.4.1.1.1042|2|1042 +1.3.6.1.4.1.789.1.4.4.1.1.1044|2|1044 +1.3.6.1.4.1.789.1.4.4.1.1.1046|2|1046 +1.3.6.1.4.1.789.1.4.4.1.1.1048|2|1048 +1.3.6.1.4.1.789.1.4.4.1.1.1050|2|1050 +1.3.6.1.4.1.789.1.4.4.1.1.1052|2|1052 +1.3.6.1.4.1.789.1.4.4.1.1.1054|2|1054 +1.3.6.1.4.1.789.1.4.4.1.1.1056|2|1056 +1.3.6.1.4.1.789.1.4.4.1.1.1058|2|1058 +1.3.6.1.4.1.789.1.4.4.1.1.1060|2|1060 +1.3.6.1.4.1.789.1.4.4.1.1.1062|2|1062 +1.3.6.1.4.1.789.1.4.4.1.1.1064|2|1064 +1.3.6.1.4.1.789.1.4.4.1.1.1066|2|1066 +1.3.6.1.4.1.789.1.4.4.1.1.1068|2|1068 +1.3.6.1.4.1.789.1.4.4.1.1.1070|2|1070 +1.3.6.1.4.1.789.1.4.4.1.1.1072|2|1072 +1.3.6.1.4.1.789.1.4.4.1.1.1074|2|1074 +1.3.6.1.4.1.789.1.4.4.1.1.1076|2|1076 +1.3.6.1.4.1.789.1.4.4.1.1.1078|2|1078 +1.3.6.1.4.1.789.1.4.4.1.1.1080|2|1080 +1.3.6.1.4.1.789.1.4.4.1.1.1082|2|1082 +1.3.6.1.4.1.789.1.4.4.1.1.1084|2|1084 +1.3.6.1.4.1.789.1.4.4.1.1.1086|2|1086 +1.3.6.1.4.1.789.1.4.4.1.1.1088|2|1088 +1.3.6.1.4.1.789.1.4.4.1.1.1092|2|1092 +1.3.6.1.4.1.789.1.4.4.1.1.1094|2|1094 +1.3.6.1.4.1.789.1.4.4.1.1.1096|2|1096 +1.3.6.1.4.1.789.1.4.4.1.1.1098|2|1098 +1.3.6.1.4.1.789.1.4.4.1.1.1100|2|1100 +1.3.6.1.4.1.789.1.4.4.1.1.1102|2|1102 +1.3.6.1.4.1.789.1.4.4.1.1.1104|2|1104 +1.3.6.1.4.1.789.1.4.4.1.1.1108|2|1108 +1.3.6.1.4.1.789.1.4.4.1.1.1114|2|1114 +1.3.6.1.4.1.789.1.4.4.1.1.1116|2|1116 +1.3.6.1.4.1.789.1.4.4.1.1.1118|2|1118 +1.3.6.1.4.1.789.1.4.4.1.2.1036|4|vol1 +1.3.6.1.4.1.789.1.4.4.1.2.1038|4|vol2 +1.3.6.1.4.1.789.1.4.4.1.2.1040|4|vol3 +1.3.6.1.4.1.789.1.4.4.1.2.1042|4|vol4 +1.3.6.1.4.1.789.1.4.4.1.2.1044|4|vol5 +1.3.6.1.4.1.789.1.4.4.1.2.1046|4|vol6 +1.3.6.1.4.1.789.1.4.4.1.2.1048|4|vol7 +1.3.6.1.4.1.789.1.4.4.1.2.1050|4|vol8 +1.3.6.1.4.1.789.1.4.4.1.2.1052|4|vol9 +1.3.6.1.4.1.789.1.4.4.1.2.1054|4|vol10 +1.3.6.1.4.1.789.1.4.4.1.2.1056|4|vol11 +1.3.6.1.4.1.789.1.4.4.1.2.1058|4|vol12 +1.3.6.1.4.1.789.1.4.4.1.2.1060|4|vol13 +1.3.6.1.4.1.789.1.4.4.1.2.1062|4|vol14 +1.3.6.1.4.1.789.1.4.4.1.2.1064|4|vol15 +1.3.6.1.4.1.789.1.4.4.1.2.1066|4|vol16 +1.3.6.1.4.1.789.1.4.4.1.2.1068|4|vol17 +1.3.6.1.4.1.789.1.4.4.1.2.1070|4|vol18 +1.3.6.1.4.1.789.1.4.4.1.2.1072|4|vol19 +1.3.6.1.4.1.789.1.4.4.1.2.1074|4|vol20 +1.3.6.1.4.1.789.1.4.4.1.2.1076|4|vol21 +1.3.6.1.4.1.789.1.4.4.1.2.1078|4|vol22 +1.3.6.1.4.1.789.1.4.4.1.2.1080|4|vol23 +1.3.6.1.4.1.789.1.4.4.1.2.1082|4|vol24 +1.3.6.1.4.1.789.1.4.4.1.2.1084|4|vol25 +1.3.6.1.4.1.789.1.4.4.1.2.1086|4|vol26 +1.3.6.1.4.1.789.1.4.4.1.2.1088|4|vol27 +1.3.6.1.4.1.789.1.4.4.1.2.1092|4|vol28 +1.3.6.1.4.1.789.1.4.4.1.2.1094|4|vol29 +1.3.6.1.4.1.789.1.4.4.1.2.1096|4|vol30 +1.3.6.1.4.1.789.1.4.4.1.2.1098|4|vol31 +1.3.6.1.4.1.789.1.4.4.1.2.1100|4|vol32 +1.3.6.1.4.1.789.1.4.4.1.2.1102|4|vol33 +1.3.6.1.4.1.789.1.4.4.1.2.1104|4|vol34 +1.3.6.1.4.1.789.1.4.4.1.2.1108|4|vol35 +1.3.6.1.4.1.789.1.4.4.1.2.1114|4|vol36 +1.3.6.1.4.1.789.1.4.4.1.2.1116|4|vol37 +1.3.6.1.4.1.789.1.4.4.1.2.1118|4|vol38 +1.3.6.1.4.1.789.1.4.4.1.3.1036|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1038|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1040|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1042|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1044|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1046|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1048|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1050|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1052|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1054|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1056|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1058|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1060|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1062|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1064|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1066|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1068|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1070|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1072|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1074|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1076|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1078|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1080|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1082|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1084|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1086|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1088|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1092|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1094|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1096|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1098|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1100|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1102|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1104|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1108|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1114|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1116|2|1 +1.3.6.1.4.1.789.1.4.4.1.3.1118|2|1 +1.3.6.1.4.1.789.1.4.4.1.4.1036|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1038|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1040|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1042|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1044|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1046|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1048|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1050|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1052|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1054|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1056|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1058|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1060|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1062|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1064|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1066|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1068|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1070|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1072|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1074|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1076|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1078|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1080|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1082|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1084|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1086|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1088|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1092|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1094|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1096|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1098|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1100|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1102|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1104|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1108|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1114|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1116|2|0 +1.3.6.1.4.1.789.1.4.4.1.4.1118|2|0 +1.3.6.1.4.1.789.1.4.4.1.5.1036|4|vserver1 +1.3.6.1.4.1.789.1.4.4.1.5.1038|4|vserver2 +1.3.6.1.4.1.789.1.4.4.1.5.1040|4|vserver3 +1.3.6.1.4.1.789.1.4.4.1.5.1042|4|vserver4 +1.3.6.1.4.1.789.1.4.4.1.5.1044|4|vserver5 +1.3.6.1.4.1.789.1.4.4.1.5.1046|4|vserver6 +1.3.6.1.4.1.789.1.4.4.1.5.1048|4|vserver7 +1.3.6.1.4.1.789.1.4.4.1.5.1050|4|vserver8 +1.3.6.1.4.1.789.1.4.4.1.5.1052|4|vserver9 +1.3.6.1.4.1.789.1.4.4.1.5.1054|4|vserver10 +1.3.6.1.4.1.789.1.4.4.1.5.1056|4|vserver11 +1.3.6.1.4.1.789.1.4.4.1.5.1058|4|vserver12 +1.3.6.1.4.1.789.1.4.4.1.5.1060|4|vserver13 +1.3.6.1.4.1.789.1.4.4.1.5.1062|4|vserver14 +1.3.6.1.4.1.789.1.4.4.1.5.1064|4|vserver15 +1.3.6.1.4.1.789.1.4.4.1.5.1066|4|vserver16 +1.3.6.1.4.1.789.1.4.4.1.5.1068|4|vserver17 +1.3.6.1.4.1.789.1.4.4.1.5.1070|4|vserver18 +1.3.6.1.4.1.789.1.4.4.1.5.1072|4|vserver19 +1.3.6.1.4.1.789.1.4.4.1.5.1074|4|vserver20 +1.3.6.1.4.1.789.1.4.4.1.5.1076|4|vserver21 +1.3.6.1.4.1.789.1.4.4.1.5.1078|4|vserver22 +1.3.6.1.4.1.789.1.4.4.1.5.1080|4|vserver23 +1.3.6.1.4.1.789.1.4.4.1.5.1082|4|vserver24 +1.3.6.1.4.1.789.1.4.4.1.5.1084|4|vserver25 +1.3.6.1.4.1.789.1.4.4.1.5.1086|4|vserver26 +1.3.6.1.4.1.789.1.4.4.1.5.1088|4|vserver27 +1.3.6.1.4.1.789.1.4.4.1.5.1092|4|vserver28 +1.3.6.1.4.1.789.1.4.4.1.5.1094|4|vserver29 +1.3.6.1.4.1.789.1.4.4.1.5.1096|4|vserver30 +1.3.6.1.4.1.789.1.4.4.1.5.1098|4|vserver31 +1.3.6.1.4.1.789.1.4.4.1.5.1100|4|vserver32 +1.3.6.1.4.1.789.1.4.4.1.5.1102|4|vserver33 +1.3.6.1.4.1.789.1.4.4.1.5.1104|4|vserver34 +1.3.6.1.4.1.789.1.4.4.1.5.1108|4|vserver35 +1.3.6.1.4.1.789.1.4.4.1.5.1114|4|vserver36 +1.3.6.1.4.1.789.1.4.4.1.5.1116|4|vserver37 +1.3.6.1.4.1.789.1.4.4.1.5.1118|4|vserver38 +1.3.6.1.4.1.789.1.5.4.1.1.1022|2|1022 +1.3.6.1.4.1.789.1.5.4.1.1.1023|2|1023 +1.3.6.1.4.1.789.1.5.4.1.1.1024|2|1024 +1.3.6.1.4.1.789.1.5.4.1.1.1025|2|1025 +1.3.6.1.4.1.789.1.5.4.1.1.1026|2|1026 +1.3.6.1.4.1.789.1.5.4.1.1.1027|2|1027 +1.3.6.1.4.1.789.1.5.4.1.1.1028|2|1028 +1.3.6.1.4.1.789.1.5.4.1.1.1029|2|1029 +1.3.6.1.4.1.789.1.5.4.1.1.1032|2|1032 +1.3.6.1.4.1.789.1.5.4.1.1.1033|2|1033 +1.3.6.1.4.1.789.1.5.4.1.2.1022|4|/vol/dir1 +1.3.6.1.4.1.789.1.5.4.1.2.1023|4|/vol/dir2 +1.3.6.1.4.1.789.1.5.4.1.2.1024|4|/vol/dir3 +1.3.6.1.4.1.789.1.5.4.1.2.1025|4|/vol/dir4 +1.3.6.1.4.1.789.1.5.4.1.2.1026|4|/vol/dir5 +1.3.6.1.4.1.789.1.5.4.1.2.1027|4|/vol/dir6 +1.3.6.1.4.1.789.1.5.4.1.2.1028|4|/vol/dir7 +1.3.6.1.4.1.789.1.5.4.1.2.1029|4|/vol/dir8 +1.3.6.1.4.1.789.1.5.4.1.2.1032|4|/vol/dir9 +1.3.6.1.4.1.789.1.5.4.1.2.1033|4|/vol/dir10 +1.3.6.1.4.1.789.1.5.4.1.3.1022|2|386319076 +1.3.6.1.4.1.789.1.5.4.1.3.1023|2|20332580 +1.3.6.1.4.1.789.1.5.4.1.3.1024|2|347278676 +1.3.6.1.4.1.789.1.5.4.1.3.1025|2|18277824 +1.3.6.1.4.1.789.1.5.4.1.3.1026|2|386319076 +1.3.6.1.4.1.789.1.5.4.1.3.1027|2|20332580 +1.3.6.1.4.1.789.1.5.4.1.3.1028|2|347278676 +1.3.6.1.4.1.789.1.5.4.1.3.1029|2|18277824 +1.3.6.1.4.1.789.1.5.4.1.3.1032|2|-1183973408 +1.3.6.1.4.1.789.1.5.4.1.3.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.4.1022|2|367601688 +1.3.6.1.4.1.789.1.5.4.1.4.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.4.1024|2|32601124 +1.3.6.1.4.1.789.1.5.4.1.4.1025|2|5088704 +1.3.6.1.4.1.789.1.5.4.1.4.1026|2|367601684 +1.3.6.1.4.1.789.1.5.4.1.4.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.4.1028|2|28785076 +1.3.6.1.4.1.789.1.5.4.1.4.1029|2|4367672 +1.3.6.1.4.1.789.1.5.4.1.4.1032|2|-1624663680 +1.3.6.1.4.1.789.1.5.4.1.4.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.5.1022|2|18717388 +1.3.6.1.4.1.789.1.5.4.1.5.1023|2|20332580 +1.3.6.1.4.1.789.1.5.4.1.5.1024|2|314677464 +1.3.6.1.4.1.789.1.5.4.1.5.1025|2|13189112 +1.3.6.1.4.1.789.1.5.4.1.5.1026|2|18717392 +1.3.6.1.4.1.789.1.5.4.1.5.1027|2|20332580 +1.3.6.1.4.1.789.1.5.4.1.5.1028|2|318493432 +1.3.6.1.4.1.789.1.5.4.1.5.1029|2|13910152 +1.3.6.1.4.1.789.1.5.4.1.5.1032|2|440690328 +1.3.6.1.4.1.789.1.5.4.1.5.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.6.1022|2|95 +1.3.6.1.4.1.789.1.5.4.1.6.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.6.1024|2|13 +1.3.6.1.4.1.789.1.5.4.1.6.1025|2|28 +1.3.6.1.4.1.789.1.5.4.1.6.1026|2|95 +1.3.6.1.4.1.789.1.5.4.1.6.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.6.1028|2|12 +1.3.6.1.4.1.789.1.5.4.1.6.1029|2|24 +1.3.6.1.4.1.789.1.5.4.1.6.1032|2|13 +1.3.6.1.4.1.789.1.5.4.1.6.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.7.1022|2|96 +1.3.6.1.4.1.789.1.5.4.1.7.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.7.1024|2|59971 +1.3.6.1.4.1.789.1.5.4.1.7.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.7.1026|2|96 +1.3.6.1.4.1.789.1.5.4.1.7.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.7.1028|2|59931 +1.3.6.1.4.1.789.1.5.4.1.7.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.7.1032|2|96 +1.3.6.1.4.1.789.1.5.4.1.7.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.8.1022|2|31040 +1.3.6.1.4.1.789.1.5.4.1.8.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.8.1024|2|10792484 +1.3.6.1.4.1.789.1.5.4.1.8.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.8.1026|2|31040 +1.3.6.1.4.1.789.1.5.4.1.8.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.8.1028|2|10792523 +1.3.6.1.4.1.789.1.5.4.1.8.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.8.1032|2|31040 +1.3.6.1.4.1.789.1.5.4.1.8.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1022|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1024|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1026|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1028|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1032|2|0 +1.3.6.1.4.1.789.1.5.4.1.9.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.10.1022|4|/dir1 +1.3.6.1.4.1.789.1.5.4.1.10.1023|4|/dir2 +1.3.6.1.4.1.789.1.5.4.1.10.1024|4|/dir3 +1.3.6.1.4.1.789.1.5.4.1.10.1025|4| +1.3.6.1.4.1.789.1.5.4.1.10.1026|4|/dir4 +1.3.6.1.4.1.789.1.5.4.1.10.1027|4|/dir5 +1.3.6.1.4.1.789.1.5.4.1.10.1028|4| +1.3.6.1.4.1.789.1.5.4.1.10.1029|4|/dir6 +1.3.6.1.4.1.789.1.5.4.1.10.1032|4|/dir7 +1.3.6.1.4.1.789.1.5.4.1.10.1033|4|/dir8 +1.3.6.1.4.1.789.1.5.4.1.11.1022|2|31136 +1.3.6.1.4.1.789.1.5.4.1.11.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.11.1024|2|10852455 +1.3.6.1.4.1.789.1.5.4.1.11.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.11.1026|2|31136 +1.3.6.1.4.1.789.1.5.4.1.11.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.11.1028|2|10852455 +1.3.6.1.4.1.789.1.5.4.1.11.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.11.1032|2|31136 +1.3.6.1.4.1.789.1.5.4.1.11.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.12.1022|2|96 +1.3.6.1.4.1.789.1.5.4.1.12.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.12.1024|2|59971 +1.3.6.1.4.1.789.1.5.4.1.12.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.12.1026|2|96 +1.3.6.1.4.1.789.1.5.4.1.12.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.12.1028|2|59934 +1.3.6.1.4.1.789.1.5.4.1.12.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.12.1032|2|96 +1.3.6.1.4.1.789.1.5.4.1.12.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.13.1022|2|107310838 +1.3.6.1.4.1.789.1.5.4.1.13.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.13.1024|2|86819661 +1.3.6.1.4.1.789.1.5.4.1.13.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.13.1026|2|107310838 +1.3.6.1.4.1.789.1.5.4.1.13.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.13.1028|2|86819661 +1.3.6.1.4.1.789.1.5.4.1.13.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.13.1032|2|2040109451 +1.3.6.1.4.1.789.1.5.4.1.13.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1022|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1023|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1024|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1025|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1026|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1027|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1028|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1029|2|0 +1.3.6.1.4.1.789.1.5.4.1.14.1032|2|4 +1.3.6.1.4.1.789.1.5.4.1.14.1033|2|0 +1.3.6.1.4.1.789.1.5.4.1.18.1022|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1023|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1024|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1025|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1026|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1027|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1028|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1029|2|1048576 +1.3.6.1.4.1.789.1.5.4.1.18.1032|2|1048572 +1.3.6.1.4.1.789.1.5.4.1.18.1033|2|1048576 +1.3.6.1.4.1.789.1.8.3.6.36.0|2|154 +1.3.6.1.4.1.789.1.9.20.1.1.6|2|6 +1.3.6.1.4.1.789.1.9.20.1.1.9|2|9 +1.3.6.1.4.1.789.1.9.20.1.1.29|2|29 +1.3.6.1.4.1.789.1.9.20.1.2.6|4x|666f7277617264207a6f6d62696573204a61646564206b657074 +1.3.6.1.4.1.789.1.9.20.1.2.9|4|driving +1.3.6.1.4.1.789.1.9.20.1.2.29|4x|627574207a6f6d6269657320627574 +1.3.6.1.4.1.789.1.9.20.1.3.6|4x|64726976696e6720627574207468656972 +1.3.6.1.4.1.789.1.9.20.1.3.9|4x|6f78656e207468656972207468656972204a61646564207a6f6d62696573206f78656e +1.3.6.1.4.1.789.1.9.20.1.3.29|4|but +1.3.6.1.4.1.789.1.9.20.1.4.6|2|5 +1.3.6.1.4.1.789.1.9.20.1.4.9|2|2 +1.3.6.1.4.1.789.1.9.20.1.4.29|2|3 +1.3.6.1.4.1.789.1.9.20.1.5.6|2|1 +1.3.6.1.4.1.789.1.9.20.1.5.9|2|5 +1.3.6.1.4.1.789.1.9.20.1.5.29|2|1 +1.3.6.1.4.1.789.1.9.20.1.6.6|67|2148500168 +1.3.6.1.4.1.789.1.9.20.1.6.9|67|33376617 +1.3.6.1.4.1.789.1.9.20.1.6.29|67|1327130653 +1.3.6.1.4.1.789.1.9.20.1.7.6|65|233195524 +1.3.6.1.4.1.789.1.9.20.1.7.9|65|3434682106 +1.3.6.1.4.1.789.1.9.20.1.7.29|65|937699975 +1.3.6.1.4.1.789.1.9.20.1.8.6|65|1094865962 +1.3.6.1.4.1.789.1.9.20.1.8.9|65|3958931918 +1.3.6.1.4.1.789.1.9.20.1.8.29|65|2504427016 +1.3.6.1.4.1.789.1.9.20.1.9.6|65|1938298517 +1.3.6.1.4.1.789.1.9.20.1.9.9|65|1808088975 +1.3.6.1.4.1.789.1.9.20.1.9.29|65|902364095 +1.3.6.1.4.1.789.1.9.20.1.10.6|65|197651960 +1.3.6.1.4.1.789.1.9.20.1.10.9|65|3818953017 +1.3.6.1.4.1.789.1.9.20.1.10.29|65|3933690275 +1.3.6.1.4.1.789.1.9.20.1.11.6|65|3180232593 +1.3.6.1.4.1.789.1.9.20.1.11.9|65|3636823181 +1.3.6.1.4.1.789.1.9.20.1.11.29|65|1239606740 +1.3.6.1.4.1.789.1.9.20.1.12.6|65|3093739540 +1.3.6.1.4.1.789.1.9.20.1.12.9|65|2043249196 +1.3.6.1.4.1.789.1.9.20.1.12.29|65|3301153675 +1.3.6.1.4.1.789.1.9.20.1.13.6|2|27 +1.3.6.1.4.1.789.1.9.20.1.13.9|2|21 +1.3.6.1.4.1.789.1.9.20.1.13.29|2|2 +1.3.6.1.4.1.789.1.9.20.1.14.6|4x|64726976696e67204a61646564206163746564204a61646564207468656972 +1.3.6.1.4.1.789.1.9.20.1.14.9|4|quaintly +1.3.6.1.4.1.789.1.9.20.1.14.29|4x|4a616465642064726976696e67207a6f6d626965732074686569722064726976696e67 +1.3.6.1.4.1.789.1.9.20.1.15.6|4x|6f78656e20746865697220717561696e746c7920627574206b65707420666f7277617264 +1.3.6.1.4.1.789.1.9.20.1.15.9|4x|7a6f6d62696573204a61646564 +1.3.6.1.4.1.789.1.9.20.1.15.29|4x|6163746564206f78656e206163746564 +1.3.6.1.4.1.789.1.9.20.1.16.6|4x|62757420666f7277617264 +1.3.6.1.4.1.789.1.9.20.1.16.9|4x|64726976696e67207468656972207468656972 +1.3.6.1.4.1.789.1.9.20.1.16.29|4x|6f78656e20717561696e746c7920627574 +1.3.6.1.4.1.789.1.9.20.1.17.6|65|1097711823 +1.3.6.1.4.1.789.1.9.20.1.17.9|65|3430555101 +1.3.6.1.4.1.789.1.9.20.1.17.29|65|940834027 +1.3.6.1.4.1.789.1.9.20.1.18.6|65|351320996 +1.3.6.1.4.1.789.1.9.20.1.18.9|65|3966637341 +1.3.6.1.4.1.789.1.9.20.1.18.29|65|2322123930 +1.3.6.1.4.1.789.1.9.20.1.19.6|4x|6f78656e207468656972204a6164656420616374656420627574204a61646564 +1.3.6.1.4.1.789.1.9.20.1.19.9|4x|6b657074206f78656e +1.3.6.1.4.1.789.1.9.20.1.19.29|4x|666f727761726420717561696e746c79204a6164656420746865697220746865697220717561696e746c7920717561696e746c79 +1.3.6.1.4.1.789.1.9.20.1.20.6|4x|717561696e746c792064726976696e67206163746564206f78656e206163746564204a61646564207a6f6d62696573206163746564206b657074 +1.3.6.1.4.1.789.1.9.20.1.20.9|4x|7468656972206f78656e207468656972206b6570742064726976696e67 +1.3.6.1.4.1.789.1.9.20.1.20.29|4x|64726976696e67207a6f6d626965732074686569722062757420666f7277617264 +1.3.6.1.4.1.789.1.9.20.1.21.6|4x|6163746564207468656972 +1.3.6.1.4.1.789.1.9.20.1.21.9|4x|7468656972207a6f6d6269657320627574206f78656e204a61646564207a6f6d6269657320666f7277617264204a61646564 +1.3.6.1.4.1.789.1.9.20.1.21.29|4x|4a616465642064726976696e67207a6f6d62696573207a6f6d62696573204a6164656420666f7277617264 +1.3.6.1.4.1.789.1.9.20.1.22.6|65|1836206239 +1.3.6.1.4.1.789.1.9.20.1.22.9|65|3330980271 +1.3.6.1.4.1.789.1.9.20.1.22.29|65|2038416243 +1.3.6.1.4.1.789.1.19.11.1.1.5|2|5 +1.3.6.1.4.1.789.1.19.11.1.1.6|2|6 +1.3.6.1.4.1.789.1.19.11.1.1.18|2|18 +1.3.6.1.4.1.789.1.19.11.1.2.5|4x|717561696e746c792062757420666f7277617264207a6f6d62696573206f78656e206163746564 +1.3.6.1.4.1.789.1.19.11.1.2.6|4|driving +1.3.6.1.4.1.789.1.19.11.1.2.18|4x|6163746564204a6164656420627574206163746564207a6f6d6269657320666f7277617264204a61646564206b65707420666f7277617264 +1.3.6.1.4.1.789.1.19.11.1.3.5|4|/vol/dir1 +1.3.6.1.4.1.789.1.19.11.1.3.6|4|/vol/dir3 +1.3.6.1.4.1.789.1.19.11.1.3.18|4|/vol/dir9 +1.3.6.1.4.1.789.1.19.11.1.4.5|2|2 +1.3.6.1.4.1.789.1.19.11.1.4.6|2|3 +1.3.6.1.4.1.789.1.19.11.1.4.18|2|2 +1.3.6.1.4.1.789.1.19.11.1.5.5|2|5 +1.3.6.1.4.1.789.1.19.11.1.5.6|2|2 +1.3.6.1.4.1.789.1.19.11.1.5.18|2|4 +1.3.6.1.4.1.789.1.19.11.1.6.5|67|2858127266 +1.3.6.1.4.1.789.1.19.11.1.6.6|67|2252180442 +1.3.6.1.4.1.789.1.19.11.1.6.18|67|1889602529 +1.3.6.1.4.1.789.1.19.11.1.7.5|65|2140650761 +1.3.6.1.4.1.789.1.19.11.1.7.6|65|2775153215 +1.3.6.1.4.1.789.1.19.11.1.7.18|65|2765758867 +1.3.6.1.4.1.789.1.19.11.1.8.5|65|3314928275 +1.3.6.1.4.1.789.1.19.11.1.8.6|65|2593737561 +1.3.6.1.4.1.789.1.19.11.1.8.18|65|1966401782 +1.3.6.1.4.1.789.1.19.11.1.9.5|65|1485004649 +1.3.6.1.4.1.789.1.19.11.1.9.6|65|1162900248 +1.3.6.1.4.1.789.1.19.11.1.9.18|65|3841004544 +1.3.6.1.4.1.789.1.19.11.1.10.5|65|4265174678 +1.3.6.1.4.1.789.1.19.11.1.10.6|65|398446661 +1.3.6.1.4.1.789.1.19.11.1.10.18|65|3276252538 +1.3.6.1.4.1.789.1.19.11.1.11.5|65|2921590899 +1.3.6.1.4.1.789.1.19.11.1.11.6|65|2934781544 +1.3.6.1.4.1.789.1.19.11.1.11.18|65|241301562 +1.3.6.1.4.1.789.1.19.11.1.12.5|65|2238761078 +1.3.6.1.4.1.789.1.19.11.1.12.6|65|3323601747 +1.3.6.1.4.1.789.1.19.11.1.12.18|65|2090674196 +1.3.6.1.4.1.789.1.19.11.1.13.5|2|29 +1.3.6.1.4.1.789.1.19.11.1.13.6|2|29 +1.3.6.1.4.1.789.1.19.11.1.13.18|2|2 +1.3.6.1.4.1.789.1.19.11.1.14.5|2|16 +1.3.6.1.4.1.789.1.19.11.1.14.6|2|18 +1.3.6.1.4.1.789.1.19.11.1.14.18|2|24 +1.3.6.1.4.1.789.1.19.11.1.15.5|4x|6f78656e207468656972206b657074204a6164656420627574 +1.3.6.1.4.1.789.1.19.11.1.15.6|4x|6275742064726976696e67206275742062757420627574206f78656e206163746564204a6164656420666f7277617264 +1.3.6.1.4.1.789.1.19.11.1.15.18|4|acted +1.3.6.1.4.1.789.1.19.11.1.16.5|4x|4a61646564206275742062757420666f727761726420627574 +1.3.6.1.4.1.789.1.19.11.1.16.6|4x|666f7277617264207a6f6d6269657320616374656420717561696e746c792064726976696e6720717561696e746c79206b657074 +1.3.6.1.4.1.789.1.19.11.1.16.18|4x|6f78656e20717561696e746c79207a6f6d62696573204a61646564206b657074207a6f6d62696573207a6f6d62696573207468656972 +1.3.6.1.4.1.789.1.19.11.1.17.5|2|20 +1.3.6.1.4.1.789.1.19.11.1.17.6|2|7 +1.3.6.1.4.1.789.1.19.11.1.17.18|2|18 +1.3.6.1.4.1.789.1.19.11.1.18.5|2|12 +1.3.6.1.4.1.789.1.19.11.1.18.6|2|0 +1.3.6.1.4.1.789.1.19.11.1.18.18|2|24 +1.3.6.1.4.1.789.1.22.1.2.1.1.6|2|6 +1.3.6.1.4.1.789.1.22.1.2.1.1.7|2|7 +1.3.6.1.4.1.789.1.22.1.2.1.1.23|2|23 +1.3.6.1.4.1.789.1.22.1.2.1.2.6|4|netgear ifX300 v1 +1.3.6.1.4.1.789.1.22.1.2.1.2.7|4|junyper proto12 12.3 +1.3.6.1.4.1.789.1.22.1.2.1.2.23|4|malabar yz42 10.2020 +1.3.6.1.4.1.789.1.22.1.2.1.3.6|65|4023387039 +1.3.6.1.4.1.789.1.22.1.2.1.3.7|65|2924545773 +1.3.6.1.4.1.789.1.22.1.2.1.3.23|65|42748770 +1.3.6.1.4.1.789.1.22.1.2.1.4.6|65|2027435892 +1.3.6.1.4.1.789.1.22.1.2.1.4.7|65|2130571275 +1.3.6.1.4.1.789.1.22.1.2.1.4.23|65|3471790003 +1.3.6.1.4.1.789.1.22.1.2.1.5.6|65|2590514276 +1.3.6.1.4.1.789.1.22.1.2.1.5.7|65|1858882606 +1.3.6.1.4.1.789.1.22.1.2.1.5.23|65|4237386340 +1.3.6.1.4.1.789.1.22.1.2.1.6.6|65|3451729845 +1.3.6.1.4.1.789.1.22.1.2.1.6.7|65|2057183875 +1.3.6.1.4.1.789.1.22.1.2.1.6.23|65|3178876314 +1.3.6.1.4.1.789.1.22.1.2.1.7.6|65|1743887402 +1.3.6.1.4.1.789.1.22.1.2.1.7.7|65|3604020808 +1.3.6.1.4.1.789.1.22.1.2.1.7.23|65|1171772028 +1.3.6.1.4.1.789.1.22.1.2.1.8.6|65|1299615212 +1.3.6.1.4.1.789.1.22.1.2.1.8.7|65|2967566972 +1.3.6.1.4.1.789.1.22.1.2.1.8.23|65|892674277 +1.3.6.1.4.1.789.1.22.1.2.1.9.6|65|2731453710 +1.3.6.1.4.1.789.1.22.1.2.1.9.7|65|359492341 +1.3.6.1.4.1.789.1.22.1.2.1.9.23|65|1346518799 +1.3.6.1.4.1.789.1.22.1.2.1.10.6|65|377846011 +1.3.6.1.4.1.789.1.22.1.2.1.10.7|65|3248795595 +1.3.6.1.4.1.789.1.22.1.2.1.10.23|65|4079228536 +1.3.6.1.4.1.789.1.22.1.2.1.11.6|65|1164507255 +1.3.6.1.4.1.789.1.22.1.2.1.11.7|65|3380817615 +1.3.6.1.4.1.789.1.22.1.2.1.11.23|65|4279166533 +1.3.6.1.4.1.789.1.22.1.2.1.12.6|65|941334646 +1.3.6.1.4.1.789.1.22.1.2.1.12.7|65|2976253990 +1.3.6.1.4.1.789.1.22.1.2.1.12.23|65|1891892810 +1.3.6.1.4.1.789.1.22.1.2.1.13.6|65|818749376 +1.3.6.1.4.1.789.1.22.1.2.1.13.7|65|503301418 +1.3.6.1.4.1.789.1.22.1.2.1.13.23|65|2823687843 +1.3.6.1.4.1.789.1.22.1.2.1.14.6|65|152198430 +1.3.6.1.4.1.789.1.22.1.2.1.14.7|65|2718551226 +1.3.6.1.4.1.789.1.22.1.2.1.14.23|65|3299378579 +1.3.6.1.4.1.789.1.22.1.2.1.15.6|65|1177485339 +1.3.6.1.4.1.789.1.22.1.2.1.15.7|65|2922571527 +1.3.6.1.4.1.789.1.22.1.2.1.15.23|65|2100046585 +1.3.6.1.4.1.789.1.22.1.2.1.16.6|65|3266952106 +1.3.6.1.4.1.789.1.22.1.2.1.16.7|65|2189576905 +1.3.6.1.4.1.789.1.22.1.2.1.16.23|65|1034177319 +1.3.6.1.4.1.789.1.22.1.2.1.17.6|65|3093752857 +1.3.6.1.4.1.789.1.22.1.2.1.17.7|65|458296967 +1.3.6.1.4.1.789.1.22.1.2.1.17.23|65|3389342656 +1.3.6.1.4.1.789.1.22.1.2.1.18.6|65|739742743 +1.3.6.1.4.1.789.1.22.1.2.1.18.7|65|4200543391 +1.3.6.1.4.1.789.1.22.1.2.1.18.23|65|3411406602 +1.3.6.1.4.1.789.1.22.1.2.1.19.6|65|360676744 +1.3.6.1.4.1.789.1.22.1.2.1.19.7|65|3658872739 +1.3.6.1.4.1.789.1.22.1.2.1.19.23|65|54377685 +1.3.6.1.4.1.789.1.22.1.2.1.20.6|65|3644592433 +1.3.6.1.4.1.789.1.22.1.2.1.20.7|65|1391241708 +1.3.6.1.4.1.789.1.22.1.2.1.20.23|65|3529999812 +1.3.6.1.4.1.789.1.22.1.2.1.21.6|65|3653574409 +1.3.6.1.4.1.789.1.22.1.2.1.21.7|65|3268436993 +1.3.6.1.4.1.789.1.22.1.2.1.21.23|65|1387022878 +1.3.6.1.4.1.789.1.22.1.2.1.22.6|65|3533491998 +1.3.6.1.4.1.789.1.22.1.2.1.22.7|65|73119879 +1.3.6.1.4.1.789.1.22.1.2.1.22.23|65|2717921276 +1.3.6.1.4.1.789.1.22.1.2.1.23.6|65|1177645447 +1.3.6.1.4.1.789.1.22.1.2.1.23.7|65|2991246072 +1.3.6.1.4.1.789.1.22.1.2.1.23.23|65|2069363319 +1.3.6.1.4.1.789.1.22.1.2.1.24.6|65|1936905453 +1.3.6.1.4.1.789.1.22.1.2.1.24.7|65|97158952 +1.3.6.1.4.1.789.1.22.1.2.1.24.23|65|4146332775 +1.3.6.1.4.1.789.1.22.1.2.1.25.6|70|6630960446522266569 +1.3.6.1.4.1.789.1.22.1.2.1.25.7|70|1394129750971589677 +1.3.6.1.4.1.789.1.22.1.2.1.25.23|70|4789803936209880467 +1.3.6.1.4.1.789.1.22.1.2.1.26.6|70|13226236270429990957 +1.3.6.1.4.1.789.1.22.1.2.1.26.7|70|8545501372360309798 +1.3.6.1.4.1.789.1.22.1.2.1.26.23|70|7836676582086537424 +1.3.6.1.4.1.789.1.22.1.2.1.27.6|70|17511108149895206912 +1.3.6.1.4.1.789.1.22.1.2.1.27.7|70|10683333357754696498 +1.3.6.1.4.1.789.1.22.1.2.1.27.23|70|12155690821542598356 +1.3.6.1.4.1.789.1.22.1.2.1.28.6|70|3629438078831663450 +1.3.6.1.4.1.789.1.22.1.2.1.28.7|70|13381337974009196480 +1.3.6.1.4.1.789.1.22.1.2.1.28.23|70|8506716347061908357 +1.3.6.1.4.1.789.1.22.1.2.1.29.6|70|1355115279229469243 +1.3.6.1.4.1.789.1.22.1.2.1.29.7|70|1289878761605610146 +1.3.6.1.4.1.789.1.22.1.2.1.29.23|70|8981517187502032224 +1.3.6.1.4.1.789.1.22.1.2.1.30.6|70|13019202706001305434 +1.3.6.1.4.1.789.1.22.1.2.1.30.7|70|12675834093042246636 +1.3.6.1.4.1.789.1.22.1.2.1.30.23|70|4729822938835614081 +1.3.6.1.4.1.789.1.22.1.2.1.31.6|70|8699335681328777303 +1.3.6.1.4.1.789.1.22.1.2.1.31.7|70|422713175730114923 +1.3.6.1.4.1.789.1.22.1.2.1.31.23|70|4711699423531515905 +1.3.6.1.4.1.789.1.22.1.2.1.32.6|70|13527122655220392462 +1.3.6.1.4.1.789.1.22.1.2.1.32.7|70|8676245860628856359 +1.3.6.1.4.1.789.1.22.1.2.1.32.23|70|13210951846639192082 +1.3.6.1.4.1.789.1.22.1.2.1.33.6|70|4596248993055945907 +1.3.6.1.4.1.789.1.22.1.2.1.33.7|70|3504432763097441473 +1.3.6.1.4.1.789.1.22.1.2.1.33.23|70|926332403044254414 +1.3.6.1.4.1.789.1.22.1.2.1.34.6|70|4391895979905654502 +1.3.6.1.4.1.789.1.22.1.2.1.34.7|70|12955473091591107964 +1.3.6.1.4.1.789.1.22.1.2.1.34.23|70|599362475845011369 +1.3.6.1.4.1.789.1.22.1.2.1.35.6|70|15496255435321981616 +1.3.6.1.4.1.789.1.22.1.2.1.35.7|70|1722656829636789191 +1.3.6.1.4.1.789.1.22.1.2.1.35.23|70|1764720109889350137 +1.3.6.1.4.1.789.1.26.8.0|70|453656 diff --git a/test/new-e2e/ndm/snmp/compose/data/palo-alto.snmprec b/test/new-e2e/ndm/snmp/compose/data/palo-alto.snmprec new file mode 100644 index 0000000000000..08ea4b4b070ab --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/palo-alto.snmprec @@ -0,0 +1,78 @@ +1.3.6.1.2.1.1.1.0|4|Palo Alto Networks PA-3000 series firewall +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.25461.2.3.18 +1.3.6.1.2.1.47.1.1.1.1.1.1|2|1 +1.3.6.1.2.1.47.1.1.1.1.2.1|4|PA-3020 +1.3.6.1.2.1.47.1.1.1.1.3.1|6|1.3.6.1.4.1.25461.2.3.18 +1.3.6.1.2.1.47.1.1.1.1.4.1|2|0 +1.3.6.1.2.1.47.1.1.1.1.5.1|2|3 +1.3.6.1.2.1.47.1.1.1.1.6.1|2|-1 +1.3.6.1.2.1.47.1.1.1.1.7.1|4|PA-3020 +1.3.6.1.2.1.47.1.1.1.1.8.1|4|1.1 +1.3.6.1.2.1.47.1.1.1.1.9.1|4| +1.3.6.1.2.1.47.1.1.1.1.10.1|4|9.0.5 +1.3.6.1.2.1.47.1.1.1.1.11.1|4| +1.3.6.1.2.1.47.1.1.1.1.12.1|4|Palo Alto Networks +1.3.6.1.2.1.47.1.1.1.1.13.1|4|PA-3020 +1.3.6.1.2.1.47.1.1.1.1.14.1|4| +1.3.6.1.2.1.47.1.1.1.1.15.1|4| +1.3.6.1.2.1.47.1.1.1.1.16.1|2|2 +1.3.6.1.2.1.47.1.1.1.1.17.1|4|0000000000000000 +1.3.6.1.2.1.47.1.1.1.1.18.1|4| +1.3.6.1.4.1.25461.1.1.7.1.1.1.0|2|23 +1.3.6.1.4.1.25461.1.1.7.1.1.2.0|2|29 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.8|2|19 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.11|2|26 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.13|2|5 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.15|2|18 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.17|2|26 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.20|2|10 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.21|2|0 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.24|2|0 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.1.25|2|10 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.8|2|22 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.11|2|26 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.13|2|7 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.15|2|26 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.17|2|26 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.20|2|27 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.21|2|9 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.24|2|16 +1.3.6.1.4.1.25461.1.1.7.1.2.1.1.2.25|2|26 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.2|2|0 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.4|2|13 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.14|2|21 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.18|2|23 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.20|2|3 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.21|2|13 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.22|2|16 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.29|2|6 +1.3.6.1.4.1.25461.1.1.7.1.3.1.1.1.31|2|5 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.3|2|30 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.11|2|23 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.13|2|15 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.15|2|2 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.16|2|8 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.19|2|24 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.27|2|10 +1.3.6.1.4.1.25461.1.1.7.1.4.1.1.1.29|2|11 +1.3.6.1.4.1.25461.2.1.2.1.1.0|4|9.0.5 +1.3.6.1.4.1.25461.2.1.2.1.3.0|4|015351000009999 +1.3.6.1.4.1.25461.2.1.2.1.11.0|4|active +1.3.6.1.4.1.25461.2.1.2.1.12.0|4|passive +1.3.6.1.4.1.25461.2.1.2.1.13.0|4|active-passive +1.3.6.1.4.1.25461.2.1.2.2.1.0|4|PA-3020 +1.3.6.1.4.1.25461.2.1.2.3.1.0|2|16 +1.3.6.1.4.1.25461.2.1.2.3.2.0|2|1 +1.3.6.1.4.1.25461.2.1.2.3.3.0|2|13 +1.3.6.1.4.1.25461.2.1.2.3.4.0|2|4 +1.3.6.1.4.1.25461.2.1.2.3.5.0|2|18 +1.3.6.1.4.1.25461.2.1.2.3.6.0|2|8 +1.3.6.1.4.1.25461.2.1.2.3.7.0|2|12 +1.3.6.1.4.1.25461.2.1.2.3.8.0|2|21 +1.3.6.1.4.1.25461.2.1.2.5.1.1.0|2|6 +1.3.6.1.4.1.25461.2.1.2.5.1.2.0|2|28 +1.3.6.1.4.1.25461.2.1.2.5.1.3.0|2|5 +1.3.6.1.6.3.10.2.1.1.0|4x|7a6f6d62696573206b657074206163746564 +1.3.6.1.6.3.10.2.1.2.0|2|9 +1.3.6.1.6.3.10.2.1.3.0|2|17 +1.3.6.1.6.3.10.2.1.4.0|2|2147483647 diff --git a/test/new-e2e/ndm/snmp/compose/data/public.snmprec b/test/new-e2e/ndm/snmp/compose/data/public.snmprec new file mode 100644 index 0000000000000..484771fe27cd0 --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/public.snmprec @@ -0,0 +1,3988 @@ +1.3.6.1.2.1.1.1.0|4x|4c696e75782034316261393438393131623920342e392e38372d6c696e75786b69742d6175667320233120534d5020576564204d61722031342031353a31323a3136205554432032303138207838365f3634 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.8072.3.2.10 +1.3.6.1.2.1.1.3.0|67|4226041 +1.3.6.1.2.1.1.4.0|4x|726f6f74406c6f63616c686f7374 +1.3.6.1.2.1.1.5.0|4|41ba948911b9 +1.3.6.1.2.1.1.6.0|4|Unknown +1.3.6.1.2.1.1.8.0|67|9 +1.3.6.1.2.1.1.9.1.2.1|6|1.3.6.1.6.3.11.3.1.1 +1.3.6.1.2.1.1.9.1.2.2|6|1.3.6.1.6.3.15.2.1.1 +1.3.6.1.2.1.1.9.1.2.3|6|1.3.6.1.6.3.10.3.1.1 +1.3.6.1.2.1.1.9.1.2.4|6|1.3.6.1.6.3.1 +1.3.6.1.2.1.1.9.1.2.5|6|1.3.6.1.2.1.49 +1.3.6.1.2.1.1.9.1.2.6|6|1.3.6.1.2.1.4 +1.3.6.1.2.1.1.9.1.2.7|6|1.3.6.1.2.1.50 +1.3.6.1.2.1.1.9.1.2.8|6|1.3.6.1.6.3.16.2.2.1 +1.3.6.1.2.1.1.9.1.2.9|6|1.3.6.1.6.3.13.3.1.3 +1.3.6.1.2.1.1.9.1.2.10|6|1.3.6.1.2.1.92 +1.3.6.1.2.1.1.9.1.3.1|4x|546865204d494220666f72204d6573736167652050726f63657373696e6720616e64204469737061746368696e672e +1.3.6.1.2.1.1.9.1.3.2|4x|546865206d616e6167656d656e7420696e666f726d6174696f6e20646566696e6974696f6e7320666f722074686520534e4d5020557365722d6261736564205365637572697479204d6f64656c2e +1.3.6.1.2.1.1.9.1.3.3|4x|54686520534e4d50204d616e6167656d656e7420417263686974656374757265204d49422e +1.3.6.1.2.1.1.9.1.3.4|4x|546865204d4942206d6f64756c6520666f7220534e4d50763220656e746974696573 +1.3.6.1.2.1.1.9.1.3.5|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e672054435020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.3.6|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e6720495020616e642049434d5020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.3.7|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e672055445020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.3.8|4x|566965772d62617365642041636365737320436f6e74726f6c204d6f64656c20666f7220534e4d502e +1.3.6.1.2.1.1.9.1.3.9|4x|546865204d4942206d6f64756c657320666f72206d616e6167696e6720534e4d50204e6f74696669636174696f6e2c20706c75732066696c746572696e672e +1.3.6.1.2.1.1.9.1.3.10|4x|546865204d4942206d6f64756c6520666f72206c6f6767696e6720534e4d50204e6f74696669636174696f6e732e +1.3.6.1.2.1.1.9.1.4.1|67|9 +1.3.6.1.2.1.1.9.1.4.2|67|9 +1.3.6.1.2.1.1.9.1.4.3|67|9 +1.3.6.1.2.1.1.9.1.4.4|67|9 +1.3.6.1.2.1.1.9.1.4.5|67|9 +1.3.6.1.2.1.1.9.1.4.6|67|9 +1.3.6.1.2.1.1.9.1.4.7|67|9 +1.3.6.1.2.1.1.9.1.4.8|67|9 +1.3.6.1.2.1.1.9.1.4.9|67|9 +1.3.6.1.2.1.1.9.1.4.10|67|9 +1.3.6.1.2.1.2.1.0|2|4 +1.3.6.1.2.1.2.2.1.1.1|2|1 +1.3.6.1.2.1.2.2.1.1.2|2|2 +1.3.6.1.2.1.2.2.1.1.3|2|3 +1.3.6.1.2.1.2.2.1.1.90|2|90 +1.3.6.1.2.1.2.2.1.2.1|4|lo +1.3.6.1.2.1.2.2.1.2.2|4|tunl0 +1.3.6.1.2.1.2.2.1.2.3|4|ip6tnl0 +1.3.6.1.2.1.2.2.1.2.90|4|eth0 +1.3.6.1.2.1.2.2.1.3.1|2|24 +1.3.6.1.2.1.2.2.1.3.2|2|131 +1.3.6.1.2.1.2.2.1.3.3|2|131 +1.3.6.1.2.1.2.2.1.3.90|2|6 +1.3.6.1.2.1.2.2.1.4.1|2|65536 +1.3.6.1.2.1.2.2.1.4.2|2|1480 +1.3.6.1.2.1.2.2.1.4.3|2|1452 +1.3.6.1.2.1.2.2.1.4.90|2|1500 +1.3.6.1.2.1.2.2.1.5.1|66|10000000 +1.3.6.1.2.1.2.2.1.5.2|66|0 +1.3.6.1.2.1.2.2.1.5.3|66|0 +1.3.6.1.2.1.2.2.1.5.90|66|4294967295 +1.3.6.1.2.1.2.2.1.6.1|4| +1.3.6.1.2.1.2.2.1.6.2|4| +1.3.6.1.2.1.2.2.1.6.3|4| +1.3.6.1.2.1.2.2.1.6.90|4x|0242ac110002 +1.3.6.1.2.1.2.2.1.7.1|2|1 +1.3.6.1.2.1.2.2.1.7.2|2|2 +1.3.6.1.2.1.2.2.1.7.3|2|2 +1.3.6.1.2.1.2.2.1.7.90|2|1 +1.3.6.1.2.1.2.2.1.8.1|2|1 +1.3.6.1.2.1.2.2.1.8.2|2|2 +1.3.6.1.2.1.2.2.1.8.3|2|2 +1.3.6.1.2.1.2.2.1.8.90|2|1 +1.3.6.1.2.1.2.2.1.9.1|67|0 +1.3.6.1.2.1.2.2.1.9.2|67|0 +1.3.6.1.2.1.2.2.1.9.3|67|0 +1.3.6.1.2.1.2.2.1.9.90|67|0 +1.3.6.1.2.1.2.2.1.10.1|65|5300203 +1.3.6.1.2.1.2.2.1.10.2|65|0 +1.3.6.1.2.1.2.2.1.10.3|65|0 +1.3.6.1.2.1.2.2.1.10.90|65|2928 +1.3.6.1.2.1.2.2.1.11.1|65|63808 +1.3.6.1.2.1.2.2.1.11.2|65|0 +1.3.6.1.2.1.2.2.1.11.3|65|0 +1.3.6.1.2.1.2.2.1.11.90|65|40 +1.3.6.1.2.1.2.2.1.12.1|65|0 +1.3.6.1.2.1.2.2.1.12.2|65|0 +1.3.6.1.2.1.2.2.1.12.3|65|0 +1.3.6.1.2.1.2.2.1.12.90|65|0 +1.3.6.1.2.1.2.2.1.13.1|65|0 +1.3.6.1.2.1.2.2.1.13.2|65|0 +1.3.6.1.2.1.2.2.1.13.3|65|0 +1.3.6.1.2.1.2.2.1.13.90|65|0 +1.3.6.1.2.1.2.2.1.14.1|65|0 +1.3.6.1.2.1.2.2.1.14.2|65|0 +1.3.6.1.2.1.2.2.1.14.3|65|0 +1.3.6.1.2.1.2.2.1.14.90|65|0 +1.3.6.1.2.1.2.2.1.15.1|65|0 +1.3.6.1.2.1.2.2.1.15.2|65|0 +1.3.6.1.2.1.2.2.1.15.3|65|0 +1.3.6.1.2.1.2.2.1.15.90|65|0 +1.3.6.1.2.1.2.2.1.16.1|65|5300203 +1.3.6.1.2.1.2.2.1.16.2|65|0 +1.3.6.1.2.1.2.2.1.16.3|65|0 +1.3.6.1.2.1.2.2.1.16.90|65|0 +1.3.6.1.2.1.2.2.1.17.1|65|63808 +1.3.6.1.2.1.2.2.1.17.2|65|0 +1.3.6.1.2.1.2.2.1.17.3|65|0 +1.3.6.1.2.1.2.2.1.17.90|65|0 +1.3.6.1.2.1.2.2.1.18.1|65|0 +1.3.6.1.2.1.2.2.1.18.2|65|0 +1.3.6.1.2.1.2.2.1.18.3|65|0 +1.3.6.1.2.1.2.2.1.18.90|65|0 +1.3.6.1.2.1.2.2.1.19.1|65|0 +1.3.6.1.2.1.2.2.1.19.2|65|0 +1.3.6.1.2.1.2.2.1.19.3|65|0 +1.3.6.1.2.1.2.2.1.19.90|65|0 +1.3.6.1.2.1.2.2.1.20.1|65|0 +1.3.6.1.2.1.2.2.1.20.2|65|0 +1.3.6.1.2.1.2.2.1.20.3|65|0 +1.3.6.1.2.1.2.2.1.20.90|65|0 +1.3.6.1.2.1.2.2.1.21.1|66|0 +1.3.6.1.2.1.2.2.1.21.2|66|0 +1.3.6.1.2.1.2.2.1.21.3|66|0 +1.3.6.1.2.1.2.2.1.21.90|66|0 +1.3.6.1.2.1.2.2.1.22.1|6|0.0 +1.3.6.1.2.1.2.2.1.22.2|6|0.0 +1.3.6.1.2.1.2.2.1.22.3|6|0.0 +1.3.6.1.2.1.2.2.1.22.90|6|0.0 +1.3.6.1.2.1.4.1.0|2|1 +1.3.6.1.2.1.4.2.0|2|64 +1.3.6.1.2.1.4.3.0|65|64061 +1.3.6.1.2.1.4.4.0|65|0 +1.3.6.1.2.1.4.5.0|65|0 +1.3.6.1.2.1.4.6.0|65|0 +1.3.6.1.2.1.4.7.0|65|0 +1.3.6.1.2.1.4.8.0|65|0 +1.3.6.1.2.1.4.9.0|65|64061 +1.3.6.1.2.1.4.10.0|65|64061 +1.3.6.1.2.1.4.11.0|65|0 +1.3.6.1.2.1.4.12.0|65|0 +1.3.6.1.2.1.4.13.0|2|30 +1.3.6.1.2.1.4.14.0|65|0 +1.3.6.1.2.1.4.15.0|65|0 +1.3.6.1.2.1.4.16.0|65|0 +1.3.6.1.2.1.4.17.0|65|0 +1.3.6.1.2.1.4.18.0|65|0 +1.3.6.1.2.1.4.19.0|65|0 +1.3.6.1.2.1.4.20.1.1.127.0.0.1|64x|7f000001 +1.3.6.1.2.1.4.20.1.1.172.17.0.2|64x|ac110002 +1.3.6.1.2.1.4.20.1.2.127.0.0.1|2|1 +1.3.6.1.2.1.4.20.1.2.172.17.0.2|2|90 +1.3.6.1.2.1.4.20.1.3.127.0.0.1|64x|ff000000 +1.3.6.1.2.1.4.20.1.3.172.17.0.2|64x|ffff0000 +1.3.6.1.2.1.4.20.1.4.127.0.0.1|2|0 +1.3.6.1.2.1.4.20.1.4.172.17.0.2|2|1 +1.3.6.1.2.1.4.21.1.1.0.0.0.0|64x|00000000 +1.3.6.1.2.1.4.21.1.1.172.17.0.0|64x|ac110000 +1.3.6.1.2.1.4.21.1.2.0.0.0.0|2|90 +1.3.6.1.2.1.4.21.1.2.172.17.0.0|2|90 +1.3.6.1.2.1.4.21.1.3.0.0.0.0|2|1 +1.3.6.1.2.1.4.21.1.3.172.17.0.0|2|0 +1.3.6.1.2.1.4.21.1.7.0.0.0.0|64x|ac110001 +1.3.6.1.2.1.4.21.1.7.172.17.0.0|64x|00000000 +1.3.6.1.2.1.4.21.1.8.0.0.0.0|2|4 +1.3.6.1.2.1.4.21.1.8.172.17.0.0|2|3 +1.3.6.1.2.1.4.21.1.9.0.0.0.0|2|2 +1.3.6.1.2.1.4.21.1.9.172.17.0.0|2|2 +1.3.6.1.2.1.4.21.1.11.0.0.0.0|64x|00000000 +1.3.6.1.2.1.4.21.1.11.172.17.0.0|64x|ffff0000 +1.3.6.1.2.1.4.21.1.13.0.0.0.0|6|0.0 +1.3.6.1.2.1.4.21.1.13.172.17.0.0|6|0.0 +1.3.6.1.2.1.4.23.0|65|0 +1.3.6.1.2.1.4.24.4.1.1.0.0.0.0.0.0.0.0.0.172.17.0.1|64x|00000000 +1.3.6.1.2.1.4.24.4.1.1.172.17.0.0.255.255.0.0.0.0.0.0.0|64x|ac110000 +1.3.6.1.2.1.4.24.4.1.2.0.0.0.0.0.0.0.0.0.172.17.0.1|64x|00000000 +1.3.6.1.2.1.4.24.4.1.2.172.17.0.0.255.255.0.0.0.0.0.0.0|64x|ffff0000 +1.3.6.1.2.1.4.24.4.1.3.0.0.0.0.0.0.0.0.0.172.17.0.1|2|0 +1.3.6.1.2.1.4.24.4.1.3.172.17.0.0.255.255.0.0.0.0.0.0.0|2|0 +1.3.6.1.2.1.4.24.4.1.4.0.0.0.0.0.0.0.0.0.172.17.0.1|64x|ac110001 +1.3.6.1.2.1.4.24.4.1.4.172.17.0.0.255.255.0.0.0.0.0.0.0|64x|00000000 +1.3.6.1.2.1.4.24.4.1.5.0.0.0.0.0.0.0.0.0.172.17.0.1|2|90 +1.3.6.1.2.1.4.24.4.1.5.172.17.0.0.255.255.0.0.0.0.0.0.0|2|90 +1.3.6.1.2.1.4.24.4.1.6.0.0.0.0.0.0.0.0.0.172.17.0.1|2|4 +1.3.6.1.2.1.4.24.4.1.6.172.17.0.0.255.255.0.0.0.0.0.0.0|2|3 +1.3.6.1.2.1.4.24.4.1.7.0.0.0.0.0.0.0.0.0.172.17.0.1|2|2 +1.3.6.1.2.1.4.24.4.1.7.172.17.0.0.255.255.0.0.0.0.0.0.0|2|2 +1.3.6.1.2.1.4.24.4.1.9.0.0.0.0.0.0.0.0.0.172.17.0.1|6|0.0 +1.3.6.1.2.1.4.24.4.1.9.172.17.0.0.255.255.0.0.0.0.0.0.0|6|0.0 +1.3.6.1.2.1.4.24.4.1.10.0.0.0.0.0.0.0.0.0.172.17.0.1|2|0 +1.3.6.1.2.1.4.24.4.1.10.172.17.0.0.255.255.0.0.0.0.0.0.0|2|0 +1.3.6.1.2.1.4.24.4.1.11.0.0.0.0.0.0.0.0.0.172.17.0.1|2|0 +1.3.6.1.2.1.4.24.4.1.11.172.17.0.0.255.255.0.0.0.0.0.0.0|2|0 +1.3.6.1.2.1.4.24.4.1.12.0.0.0.0.0.0.0.0.0.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.4.1.12.172.17.0.0.255.255.0.0.0.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.4.1.13.0.0.0.0.0.0.0.0.0.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.4.1.13.172.17.0.0.255.255.0.0.0.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.4.1.14.0.0.0.0.0.0.0.0.0.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.4.1.14.172.17.0.0.255.255.0.0.0.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.4.1.15.0.0.0.0.0.0.0.0.0.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.4.1.15.172.17.0.0.255.255.0.0.0.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.4.1.16.0.0.0.0.0.0.0.0.0.172.17.0.1|2|1 +1.3.6.1.2.1.4.24.4.1.16.172.17.0.0.255.255.0.0.0.0.0.0.0|2|1 +1.3.6.1.2.1.4.24.6.0|66|2 +1.3.6.1.2.1.4.24.7.1.7.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|90 +1.3.6.1.2.1.4.24.7.1.7.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|90 +1.3.6.1.2.1.4.24.7.1.8.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|4 +1.3.6.1.2.1.4.24.7.1.8.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|3 +1.3.6.1.2.1.4.24.7.1.9.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|2 +1.3.6.1.2.1.4.24.7.1.9.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|2 +1.3.6.1.2.1.4.24.7.1.10.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|66|0 +1.3.6.1.2.1.4.24.7.1.10.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|66|0 +1.3.6.1.2.1.4.24.7.1.11.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|66|0 +1.3.6.1.2.1.4.24.7.1.11.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|66|0 +1.3.6.1.2.1.4.24.7.1.12.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|0 +1.3.6.1.2.1.4.24.7.1.12.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|0 +1.3.6.1.2.1.4.24.7.1.13.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.7.1.13.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.7.1.14.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.7.1.14.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.7.1.15.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.7.1.15.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.7.1.16.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|-1 +1.3.6.1.2.1.4.24.7.1.16.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|-1 +1.3.6.1.2.1.4.24.7.1.17.1.4.0.0.0.0.0.2.0.0.1.4.172.17.0.1|2|1 +1.3.6.1.2.1.4.24.7.1.17.1.4.172.17.0.0.16.3.0.0.90.1.4.0.0.0.0|2|1 +1.3.6.1.2.1.4.25.0|2|2 +1.3.6.1.2.1.4.26.0|2|64 +1.3.6.1.2.1.4.27.0|67|0 +1.3.6.1.2.1.4.28.1.2.1|2|65535 +1.3.6.1.2.1.4.28.1.2.90|2|65535 +1.3.6.1.2.1.4.28.1.3.1|2|1 +1.3.6.1.2.1.4.28.1.3.90|2|1 +1.3.6.1.2.1.4.28.1.4.1|66|1000 +1.3.6.1.2.1.4.28.1.4.90|66|1000 +1.3.6.1.2.1.4.29.0|67|0 +1.3.6.1.2.1.4.31.1.1.3.1|65|63808 +1.3.6.1.2.1.4.31.1.1.3.2|65|40 +1.3.6.1.2.1.4.31.1.1.4.1|70|63808 +1.3.6.1.2.1.4.31.1.1.4.2|70|40 +1.3.6.1.2.1.4.31.1.1.5.1|65|5300203 +1.3.6.1.2.1.4.31.1.1.5.2|65|2368 +1.3.6.1.2.1.4.31.1.1.6.1|70|5300203 +1.3.6.1.2.1.4.31.1.1.6.2|70|2368 +1.3.6.1.2.1.4.31.1.1.7.1|65|0 +1.3.6.1.2.1.4.31.1.1.7.2|65|0 +1.3.6.1.2.1.4.31.1.1.8.1|65|0 +1.3.6.1.2.1.4.31.1.1.8.2|65|0 +1.3.6.1.2.1.4.31.1.1.9.1|65|0 +1.3.6.1.2.1.4.31.1.1.9.2|65|0 +1.3.6.1.2.1.4.31.1.1.10.1|65|0 +1.3.6.1.2.1.4.31.1.1.10.2|65|0 +1.3.6.1.2.1.4.31.1.1.11.1|65|0 +1.3.6.1.2.1.4.31.1.1.11.2|65|0 +1.3.6.1.2.1.4.31.1.1.12.1|65|0 +1.3.6.1.2.1.4.31.1.1.12.2|65|0 +1.3.6.1.2.1.4.31.1.1.13.1|70|0 +1.3.6.1.2.1.4.31.1.1.13.2|70|0 +1.3.6.1.2.1.4.31.1.1.14.1|65|0 +1.3.6.1.2.1.4.31.1.1.14.2|65|0 +1.3.6.1.2.1.4.31.1.1.15.1|65|0 +1.3.6.1.2.1.4.31.1.1.15.2|65|0 +1.3.6.1.2.1.4.31.1.1.16.1|65|0 +1.3.6.1.2.1.4.31.1.1.16.2|65|0 +1.3.6.1.2.1.4.31.1.1.17.1|65|0 +1.3.6.1.2.1.4.31.1.1.17.2|65|40 +1.3.6.1.2.1.4.31.1.1.18.1|65|63808 +1.3.6.1.2.1.4.31.1.1.18.2|65|0 +1.3.6.1.2.1.4.31.1.1.19.1|70|63808 +1.3.6.1.2.1.4.31.1.1.19.2|70|0 +1.3.6.1.2.1.4.31.1.1.20.1|65|63808 +1.3.6.1.2.1.4.31.1.1.20.2|65|0 +1.3.6.1.2.1.4.31.1.1.21.1|70|63808 +1.3.6.1.2.1.4.31.1.1.21.2|70|0 +1.3.6.1.2.1.4.31.1.1.22.1|65|0 +1.3.6.1.2.1.4.31.1.1.22.2|65|0 +1.3.6.1.2.1.4.31.1.1.23.1|65|0 +1.3.6.1.2.1.4.31.1.1.23.2|65|0 +1.3.6.1.2.1.4.31.1.1.24.1|70|0 +1.3.6.1.2.1.4.31.1.1.24.2|70|0 +1.3.6.1.2.1.4.31.1.1.25.1|65|0 +1.3.6.1.2.1.4.31.1.1.25.2|65|0 +1.3.6.1.2.1.4.31.1.1.26.1|65|0 +1.3.6.1.2.1.4.31.1.1.26.2|65|0 +1.3.6.1.2.1.4.31.1.1.27.1|65|0 +1.3.6.1.2.1.4.31.1.1.27.2|65|0 +1.3.6.1.2.1.4.31.1.1.28.1|65|0 +1.3.6.1.2.1.4.31.1.1.28.2|65|0 +1.3.6.1.2.1.4.31.1.1.29.1|65|0 +1.3.6.1.2.1.4.31.1.1.29.2|65|0 +1.3.6.1.2.1.4.31.1.1.30.1|65|63808 +1.3.6.1.2.1.4.31.1.1.30.2|65|0 +1.3.6.1.2.1.4.31.1.1.31.1|70|63808 +1.3.6.1.2.1.4.31.1.1.31.2|70|0 +1.3.6.1.2.1.4.31.1.1.32.1|65|5300203 +1.3.6.1.2.1.4.31.1.1.32.2|65|0 +1.3.6.1.2.1.4.31.1.1.33.1|70|5300203 +1.3.6.1.2.1.4.31.1.1.33.2|70|0 +1.3.6.1.2.1.4.31.1.1.34.1|65|0 +1.3.6.1.2.1.4.31.1.1.34.2|65|0 +1.3.6.1.2.1.4.31.1.1.35.1|70|0 +1.3.6.1.2.1.4.31.1.1.35.2|70|0 +1.3.6.1.2.1.4.31.1.1.36.1|65|0 +1.3.6.1.2.1.4.31.1.1.36.2|65|0 +1.3.6.1.2.1.4.31.1.1.37.1|70|0 +1.3.6.1.2.1.4.31.1.1.37.2|70|0 +1.3.6.1.2.1.4.31.1.1.38.1|65|0 +1.3.6.1.2.1.4.31.1.1.38.2|65|0 +1.3.6.1.2.1.4.31.1.1.39.1|70|0 +1.3.6.1.2.1.4.31.1.1.39.2|70|0 +1.3.6.1.2.1.4.31.1.1.40.1|65|0 +1.3.6.1.2.1.4.31.1.1.40.2|65|0 +1.3.6.1.2.1.4.31.1.1.41.1|70|0 +1.3.6.1.2.1.4.31.1.1.41.2|70|0 +1.3.6.1.2.1.4.31.1.1.42.1|65|0 +1.3.6.1.2.1.4.31.1.1.43.1|70|0 +1.3.6.1.2.1.4.31.1.1.44.1|65|0 +1.3.6.1.2.1.4.31.1.1.45.1|70|0 +1.3.6.1.2.1.4.31.1.1.46.1|67|0 +1.3.6.1.2.1.4.31.1.1.46.2|67|0 +1.3.6.1.2.1.4.31.1.1.47.1|66|60000 +1.3.6.1.2.1.4.31.1.1.47.2|66|60000 +1.3.6.1.2.1.4.31.2.0|67|0 +1.3.6.1.2.1.4.31.3.1.3.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.3.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.3.2.90|65|40 +1.3.6.1.2.1.4.31.3.1.4.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.4.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.4.2.90|70|40 +1.3.6.1.2.1.4.31.3.1.5.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.5.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.5.2.90|65|2368 +1.3.6.1.2.1.4.31.3.1.6.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.6.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.6.2.90|70|2368 +1.3.6.1.2.1.4.31.3.1.7.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.7.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.7.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.8.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.8.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.8.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.9.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.9.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.9.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.10.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.10.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.10.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.11.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.11.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.11.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.12.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.12.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.12.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.13.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.13.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.13.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.14.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.14.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.14.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.15.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.15.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.15.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.16.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.16.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.16.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.17.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.17.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.17.2.90|65|40 +1.3.6.1.2.1.4.31.3.1.18.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.18.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.18.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.19.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.19.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.19.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.20.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.20.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.20.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.21.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.21.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.21.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.23.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.23.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.23.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.24.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.24.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.24.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.25.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.25.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.25.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.26.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.26.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.26.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.27.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.27.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.27.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.28.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.28.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.28.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.29.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.29.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.29.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.30.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.30.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.30.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.31.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.31.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.31.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.32.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.32.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.32.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.33.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.33.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.33.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.34.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.34.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.34.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.35.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.35.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.35.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.36.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.36.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.36.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.37.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.37.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.37.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.38.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.38.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.38.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.39.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.39.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.39.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.40.2.1|65|0 +1.3.6.1.2.1.4.31.3.1.40.2.3|65|0 +1.3.6.1.2.1.4.31.3.1.40.2.90|65|0 +1.3.6.1.2.1.4.31.3.1.41.2.1|70|0 +1.3.6.1.2.1.4.31.3.1.41.2.3|70|0 +1.3.6.1.2.1.4.31.3.1.41.2.90|70|0 +1.3.6.1.2.1.4.31.3.1.46.2.1|67|0 +1.3.6.1.2.1.4.31.3.1.46.2.3|67|0 +1.3.6.1.2.1.4.31.3.1.46.2.90|67|0 +1.3.6.1.2.1.4.31.3.1.47.2.1|66|60000 +1.3.6.1.2.1.4.31.3.1.47.2.3|66|60000 +1.3.6.1.2.1.4.31.3.1.47.2.90|66|60000 +1.3.6.1.2.1.4.32.1.5.1.1.4.127.0.0.0.8|2|2 +1.3.6.1.2.1.4.32.1.5.90.1.4.172.17.0.0.16|2|2 +1.3.6.1.2.1.4.32.1.6.1.1.4.127.0.0.0.8|2|1 +1.3.6.1.2.1.4.32.1.6.90.1.4.172.17.0.0.16|2|1 +1.3.6.1.2.1.4.32.1.7.1.1.4.127.0.0.0.8|2|2 +1.3.6.1.2.1.4.32.1.7.90.1.4.172.17.0.0.16|2|2 +1.3.6.1.2.1.4.32.1.8.1.1.4.127.0.0.0.8|66|4294967295 +1.3.6.1.2.1.4.32.1.8.90.1.4.172.17.0.0.16|66|4294967295 +1.3.6.1.2.1.4.32.1.9.1.1.4.127.0.0.0.8|66|4294967295 +1.3.6.1.2.1.4.32.1.9.90.1.4.172.17.0.0.16|66|4294967295 +1.3.6.1.2.1.4.33.0|2|1640220749 +1.3.6.1.2.1.4.34.1.3.1.4.127.0.0.1|2|1 +1.3.6.1.2.1.4.34.1.3.1.4.172.17.0.2|2|90 +1.3.6.1.2.1.4.34.1.3.1.4.172.17.255.255|2|90 +1.3.6.1.2.1.4.34.1.4.1.4.127.0.0.1|2|1 +1.3.6.1.2.1.4.34.1.4.1.4.172.17.0.2|2|1 +1.3.6.1.2.1.4.34.1.4.1.4.172.17.255.255|2|3 +1.3.6.1.2.1.4.34.1.5.1.4.127.0.0.1|6|1.3.6.1.2.1.4.32.1.5.1.1.4.127.0.0.0.8 +1.3.6.1.2.1.4.34.1.5.1.4.172.17.0.2|6|1.3.6.1.2.1.4.32.1.5.90.1.4.172.17.0.0.16 +1.3.6.1.2.1.4.34.1.5.1.4.172.17.255.255|6|1.3.6.1.2.1.4.32.1.5.90.1.4.172.17.0.0.16 +1.3.6.1.2.1.4.34.1.6.1.4.127.0.0.1|2|2 +1.3.6.1.2.1.4.34.1.6.1.4.172.17.0.2|2|2 +1.3.6.1.2.1.4.34.1.6.1.4.172.17.255.255|2|2 +1.3.6.1.2.1.4.34.1.7.1.4.127.0.0.1|2|1 +1.3.6.1.2.1.4.34.1.7.1.4.172.17.0.2|2|1 +1.3.6.1.2.1.4.34.1.7.1.4.172.17.255.255|2|1 +1.3.6.1.2.1.4.34.1.8.1.4.127.0.0.1|67|0 +1.3.6.1.2.1.4.34.1.8.1.4.172.17.0.2|67|0 +1.3.6.1.2.1.4.34.1.8.1.4.172.17.255.255|67|0 +1.3.6.1.2.1.4.34.1.9.1.4.127.0.0.1|67|0 +1.3.6.1.2.1.4.34.1.9.1.4.172.17.0.2|67|0 +1.3.6.1.2.1.4.34.1.9.1.4.172.17.255.255|67|0 +1.3.6.1.2.1.4.34.1.10.1.4.127.0.0.1|2|1 +1.3.6.1.2.1.4.34.1.10.1.4.172.17.0.2|2|1 +1.3.6.1.2.1.4.34.1.10.1.4.172.17.255.255|2|1 +1.3.6.1.2.1.4.34.1.11.1.4.127.0.0.1|2|2 +1.3.6.1.2.1.4.34.1.11.1.4.172.17.0.2|2|2 +1.3.6.1.2.1.4.34.1.11.1.4.172.17.255.255|2|2 +1.3.6.1.2.1.4.37.1.4.1.4.172.17.0.1.90|66|4294967295 +1.3.6.1.2.1.4.37.1.5.1.4.172.17.0.1.90|2|0 +1.3.6.1.2.1.5.1.0|65|0 +1.3.6.1.2.1.5.2.0|65|0 +1.3.6.1.2.1.5.3.0|65|0 +1.3.6.1.2.1.5.4.0|65|0 +1.3.6.1.2.1.5.5.0|65|0 +1.3.6.1.2.1.5.6.0|65|0 +1.3.6.1.2.1.5.7.0|65|0 +1.3.6.1.2.1.5.8.0|65|0 +1.3.6.1.2.1.5.9.0|65|0 +1.3.6.1.2.1.5.10.0|65|0 +1.3.6.1.2.1.5.11.0|65|0 +1.3.6.1.2.1.5.12.0|65|0 +1.3.6.1.2.1.5.13.0|65|0 +1.3.6.1.2.1.5.14.0|65|0 +1.3.6.1.2.1.5.15.0|65|0 +1.3.6.1.2.1.5.16.0|65|0 +1.3.6.1.2.1.5.17.0|65|0 +1.3.6.1.2.1.5.18.0|65|0 +1.3.6.1.2.1.5.19.0|65|0 +1.3.6.1.2.1.5.20.0|65|0 +1.3.6.1.2.1.5.21.0|65|0 +1.3.6.1.2.1.5.22.0|65|0 +1.3.6.1.2.1.5.23.0|65|0 +1.3.6.1.2.1.5.24.0|65|0 +1.3.6.1.2.1.5.25.0|65|0 +1.3.6.1.2.1.5.26.0|65|0 +1.3.6.1.2.1.5.29.1.2.1|65|0 +1.3.6.1.2.1.5.29.1.2.2|65|0 +1.3.6.1.2.1.5.29.1.3.1|65|0 +1.3.6.1.2.1.5.29.1.3.2|65|0 +1.3.6.1.2.1.5.29.1.4.1|65|0 +1.3.6.1.2.1.5.29.1.4.2|65|0 +1.3.6.1.2.1.5.29.1.5.1|65|0 +1.3.6.1.2.1.5.29.1.5.2|65|0 +1.3.6.1.2.1.5.30.1.3.1.0|65|0 +1.3.6.1.2.1.5.30.1.3.1.1|65|0 +1.3.6.1.2.1.5.30.1.3.1.2|65|0 +1.3.6.1.2.1.5.30.1.3.1.3|65|0 +1.3.6.1.2.1.5.30.1.3.1.4|65|0 +1.3.6.1.2.1.5.30.1.3.1.5|65|0 +1.3.6.1.2.1.5.30.1.3.1.8|65|0 +1.3.6.1.2.1.5.30.1.3.1.11|65|0 +1.3.6.1.2.1.5.30.1.3.1.12|65|0 +1.3.6.1.2.1.5.30.1.3.1.13|65|0 +1.3.6.1.2.1.5.30.1.3.1.14|65|0 +1.3.6.1.2.1.5.30.1.3.1.17|65|0 +1.3.6.1.2.1.5.30.1.3.1.18|65|0 +1.3.6.1.2.1.5.30.1.3.1.128|65|0 +1.3.6.1.2.1.5.30.1.3.1.129|65|0 +1.3.6.1.2.1.5.30.1.3.1.130|65|0 +1.3.6.1.2.1.5.30.1.3.1.131|65|0 +1.3.6.1.2.1.5.30.1.3.1.132|65|0 +1.3.6.1.2.1.5.30.1.3.1.133|65|0 +1.3.6.1.2.1.5.30.1.3.1.134|65|0 +1.3.6.1.2.1.5.30.1.3.1.135|65|0 +1.3.6.1.2.1.5.30.1.3.1.136|65|0 +1.3.6.1.2.1.5.30.1.3.1.137|65|0 +1.3.6.1.2.1.5.30.1.3.2.0|65|0 +1.3.6.1.2.1.5.30.1.4.1.0|65|0 +1.3.6.1.2.1.5.30.1.4.1.1|65|0 +1.3.6.1.2.1.5.30.1.4.1.2|65|0 +1.3.6.1.2.1.5.30.1.4.1.3|65|0 +1.3.6.1.2.1.5.30.1.4.1.4|65|0 +1.3.6.1.2.1.5.30.1.4.1.5|65|0 +1.3.6.1.2.1.5.30.1.4.1.8|65|0 +1.3.6.1.2.1.5.30.1.4.1.11|65|0 +1.3.6.1.2.1.5.30.1.4.1.12|65|0 +1.3.6.1.2.1.5.30.1.4.1.13|65|0 +1.3.6.1.2.1.5.30.1.4.1.14|65|0 +1.3.6.1.2.1.5.30.1.4.1.17|65|0 +1.3.6.1.2.1.5.30.1.4.1.18|65|0 +1.3.6.1.2.1.5.30.1.4.1.129|65|0 +1.3.6.1.2.1.5.30.1.4.1.131|65|0 +1.3.6.1.2.1.5.30.1.4.1.132|65|0 +1.3.6.1.2.1.5.30.1.4.1.133|65|0 +1.3.6.1.2.1.5.30.1.4.1.135|65|0 +1.3.6.1.2.1.5.30.1.4.1.136|65|0 +1.3.6.1.2.1.5.30.1.4.1.137|65|0 +1.3.6.1.2.1.5.30.1.4.2.0|65|0 +1.3.6.1.2.1.6.1.0|2|1 +1.3.6.1.2.1.6.2.0|2|200 +1.3.6.1.2.1.6.3.0|2|120000 +1.3.6.1.2.1.6.4.0|2|-1 +1.3.6.1.2.1.6.5.0|65|0 +1.3.6.1.2.1.6.6.0|65|0 +1.3.6.1.2.1.6.7.0|65|0 +1.3.6.1.2.1.6.8.0|65|0 +1.3.6.1.2.1.6.9.0|66|0 +1.3.6.1.2.1.6.10.0|65|0 +1.3.6.1.2.1.6.11.0|65|0 +1.3.6.1.2.1.6.12.0|65|0 +1.3.6.1.2.1.6.13.1.1.127.0.0.1.199.0.0.0.0.0|2|2 +1.3.6.1.2.1.6.13.1.2.127.0.0.1.199.0.0.0.0.0|64x|7f000001 +1.3.6.1.2.1.6.13.1.3.127.0.0.1.199.0.0.0.0.0|2|199 +1.3.6.1.2.1.6.13.1.4.127.0.0.1.199.0.0.0.0.0|64x|00000000 +1.3.6.1.2.1.6.13.1.5.127.0.0.1.199.0.0.0.0.0|2|0 +1.3.6.1.2.1.6.14.0|65|0 +1.3.6.1.2.1.6.15.0|65|0 +1.3.6.1.2.1.6.20.1.4.1.4.127.0.0.1.199|66|6 +1.3.6.1.2.1.7.1.0|65|64967 +1.3.6.1.2.1.7.2.0|65|0 +1.3.6.1.2.1.7.3.0|65|0 +1.3.6.1.2.1.7.4.0|65|64967 +1.3.6.1.2.1.7.5.1.1.0.0.0.0.161|64x|00000000 +1.3.6.1.2.1.7.5.1.1.0.0.0.0.59208|64x|00000000 +1.3.6.1.2.1.7.5.1.2.0.0.0.0.161|2|161 +1.3.6.1.2.1.7.5.1.2.0.0.0.0.59208|2|59208 +1.3.6.1.2.1.7.7.1.8.1.4.0.0.0.0.161.1.4.0.0.0.0.0.136817|66|6 +1.3.6.1.2.1.7.7.1.8.1.4.0.0.0.0.59208.1.4.0.0.0.0.0.314197|66|64 +1.3.6.1.2.1.10.7.2.1.1.90|2|90 +1.3.6.1.2.1.10.7.2.1.3.90|65|0 +1.3.6.1.2.1.10.7.2.1.7.90|65|0 +1.3.6.1.2.1.10.7.2.1.10.90|65|0 +1.3.6.1.2.1.10.7.2.1.11.90|65|0 +1.3.6.1.2.1.10.7.2.1.13.90|65|0 +1.3.6.1.2.1.10.7.2.1.16.90|65|0 +1.3.6.1.2.1.10.7.2.1.19.90|2|3 +1.3.6.1.2.1.11.1.0|65|32502 +1.3.6.1.2.1.11.2.0|65|32502 +1.3.6.1.2.1.11.3.0|65|0 +1.3.6.1.2.1.11.4.0|65|0 +1.3.6.1.2.1.11.5.0|65|0 +1.3.6.1.2.1.11.6.0|65|0 +1.3.6.1.2.1.11.8.0|65|0 +1.3.6.1.2.1.11.9.0|65|0 +1.3.6.1.2.1.11.10.0|65|0 +1.3.6.1.2.1.11.11.0|65|0 +1.3.6.1.2.1.11.12.0|65|0 +1.3.6.1.2.1.11.13.0|65|32512 +1.3.6.1.2.1.11.14.0|65|0 +1.3.6.1.2.1.11.15.0|65|0 +1.3.6.1.2.1.11.16.0|65|32516 +1.3.6.1.2.1.11.17.0|65|0 +1.3.6.1.2.1.11.18.0|65|0 +1.3.6.1.2.1.11.19.0|65|0 +1.3.6.1.2.1.11.20.0|65|0 +1.3.6.1.2.1.11.21.0|65|0 +1.3.6.1.2.1.11.22.0|65|0 +1.3.6.1.2.1.11.24.0|65|0 +1.3.6.1.2.1.11.25.0|65|0 +1.3.6.1.2.1.11.26.0|65|0 +1.3.6.1.2.1.11.27.0|65|0 +1.3.6.1.2.1.11.28.0|65|32526 +1.3.6.1.2.1.11.29.0|65|0 +1.3.6.1.2.1.11.30.0|2|2 +1.3.6.1.2.1.11.31.0|65|0 +1.3.6.1.2.1.11.32.0|65|0 +1.3.6.1.2.1.16.1.1.1.1.90|2|90 +1.3.6.1.2.1.25.1.1.0|67|83761247 +1.3.6.1.2.1.25.1.2.0|4x|323031382d31302d312c393a35373a32352e302c2b303a30 +1.3.6.1.2.1.25.1.3.0|2|393216 +1.3.6.1.2.1.25.1.4.0|4x|22424f4f545f494d4147453d2f626f6f742f6b65726e656c20636f6e736f6c653d747479533020706167655f706f69736f6e3d31206e74703d67617465776179207673797363616c6c3d656d756c6174652070616e69633d3120726f6f743d2f6465762f7372302074657874 +1.3.6.1.2.1.25.1.5.0|66|0 +1.3.6.1.2.1.25.1.6.0|66|4 +1.3.6.1.2.1.25.1.7.0|2|0 +1.3.6.1.2.1.25.2.2.0|2|2046940 +1.3.6.1.2.1.25.2.3.1.1.1|2|1 +1.3.6.1.2.1.25.2.3.1.1.3|2|3 +1.3.6.1.2.1.25.2.3.1.1.6|2|6 +1.3.6.1.2.1.25.2.3.1.1.7|2|7 +1.3.6.1.2.1.25.2.3.1.1.8|2|8 +1.3.6.1.2.1.25.2.3.1.1.10|2|10 +1.3.6.1.2.1.25.2.3.1.1.33|2|33 +1.3.6.1.2.1.25.2.3.1.1.36|2|36 +1.3.6.1.2.1.25.2.3.1.1.52|2|52 +1.3.6.1.2.1.25.2.3.1.1.53|2|53 +1.3.6.1.2.1.25.2.3.1.1.54|2|54 +1.3.6.1.2.1.25.2.3.1.1.55|2|55 +1.3.6.1.2.1.25.2.3.1.1.61|2|61 +1.3.6.1.2.1.25.2.3.1.1.62|2|62 +1.3.6.1.2.1.25.2.3.1.1.63|2|63 +1.3.6.1.2.1.25.2.3.1.1.64|2|64 +1.3.6.1.2.1.25.2.3.1.1.65|2|65 +1.3.6.1.2.1.25.2.3.1.2.1|6|1.3.6.1.2.1.25.2.1.2 +1.3.6.1.2.1.25.2.3.1.2.3|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.6|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.7|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.8|6|1.3.6.1.2.1.25.2.1.1 +1.3.6.1.2.1.25.2.3.1.2.10|6|1.3.6.1.2.1.25.2.1.3 +1.3.6.1.2.1.25.2.3.1.2.33|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.36|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.52|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.53|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.54|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.55|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.61|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.62|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.63|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.64|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.2.65|6|1.3.6.1.2.1.25.2.1.4 +1.3.6.1.2.1.25.2.3.1.3.1|4x|506879736963616c206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.3|4x|5669727475616c206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.6|4x|4d656d6f72792062756666657273 +1.3.6.1.2.1.25.2.3.1.3.7|4x|436163686564206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.8|4x|536861726564206d656d6f7279 +1.3.6.1.2.1.25.2.3.1.3.10|4x|53776170207370616365 +1.3.6.1.2.1.25.2.3.1.3.33|4x|2f646576 +1.3.6.1.2.1.25.2.3.1.3.36|4x|2f7379732f66732f6367726f7570 +1.3.6.1.2.1.25.2.3.1.3.52|4x|2f6574632f7265736f6c762e636f6e66 +1.3.6.1.2.1.25.2.3.1.3.53|4x|2f6574632f686f73746e616d65 +1.3.6.1.2.1.25.2.3.1.3.54|4x|2f6574632f686f737473 +1.3.6.1.2.1.25.2.3.1.3.55|4x|2f6465762f73686d +1.3.6.1.2.1.25.2.3.1.3.61|4x|2f70726f632f6b636f7265 +1.3.6.1.2.1.25.2.3.1.3.62|4x|2f70726f632f6b657973 +1.3.6.1.2.1.25.2.3.1.3.63|4x|2f70726f632f74696d65725f6c697374 +1.3.6.1.2.1.25.2.3.1.3.64|4x|2f70726f632f73636865645f6465627567 +1.3.6.1.2.1.25.2.3.1.3.65|4x|2f7379732f6669726d77617265 +1.3.6.1.2.1.25.2.3.1.4.1|2|1024 +1.3.6.1.2.1.25.2.3.1.4.3|2|1024 +1.3.6.1.2.1.25.2.3.1.4.6|2|1024 +1.3.6.1.2.1.25.2.3.1.4.7|2|1024 +1.3.6.1.2.1.25.2.3.1.4.8|2|1024 +1.3.6.1.2.1.25.2.3.1.4.10|2|1024 +1.3.6.1.2.1.25.2.3.1.4.33|2|4096 +1.3.6.1.2.1.25.2.3.1.4.36|2|4096 +1.3.6.1.2.1.25.2.3.1.4.52|2|4096 +1.3.6.1.2.1.25.2.3.1.4.53|2|4096 +1.3.6.1.2.1.25.2.3.1.4.54|2|4096 +1.3.6.1.2.1.25.2.3.1.4.55|2|4096 +1.3.6.1.2.1.25.2.3.1.4.61|2|4096 +1.3.6.1.2.1.25.2.3.1.4.62|2|4096 +1.3.6.1.2.1.25.2.3.1.4.63|2|4096 +1.3.6.1.2.1.25.2.3.1.4.64|2|4096 +1.3.6.1.2.1.25.2.3.1.4.65|2|4096 +1.3.6.1.2.1.25.2.3.1.5.1|2|2046940 +1.3.6.1.2.1.25.2.3.1.5.3|2|3095512 +1.3.6.1.2.1.25.2.3.1.5.6|2|2046940 +1.3.6.1.2.1.25.2.3.1.5.7|2|1577648 +1.3.6.1.2.1.25.2.3.1.5.8|2|2940 +1.3.6.1.2.1.25.2.3.1.5.10|2|1048572 +1.3.6.1.2.1.25.2.3.1.5.33|2|16384 +1.3.6.1.2.1.25.2.3.1.5.36|2|255867 +1.3.6.1.2.1.25.2.3.1.5.52|2|16448139 +1.3.6.1.2.1.25.2.3.1.5.53|2|16448139 +1.3.6.1.2.1.25.2.3.1.5.54|2|16448139 +1.3.6.1.2.1.25.2.3.1.5.55|2|16384 +1.3.6.1.2.1.25.2.3.1.5.61|2|16384 +1.3.6.1.2.1.25.2.3.1.5.62|2|16384 +1.3.6.1.2.1.25.2.3.1.5.63|2|16384 +1.3.6.1.2.1.25.2.3.1.5.64|2|16384 +1.3.6.1.2.1.25.2.3.1.5.65|2|255867 +1.3.6.1.2.1.25.2.3.1.6.1|2|1969964 +1.3.6.1.2.1.25.2.3.1.6.3|2|1969964 +1.3.6.1.2.1.25.2.3.1.6.6|2|73580 +1.3.6.1.2.1.25.2.3.1.6.7|2|1577648 +1.3.6.1.2.1.25.2.3.1.6.8|2|2940 +1.3.6.1.2.1.25.2.3.1.6.10|2|0 +1.3.6.1.2.1.25.2.3.1.6.33|2|0 +1.3.6.1.2.1.25.2.3.1.6.36|2|0 +1.3.6.1.2.1.25.2.3.1.6.52|2|6493059 +1.3.6.1.2.1.25.2.3.1.6.53|2|6493059 +1.3.6.1.2.1.25.2.3.1.6.54|2|6493059 +1.3.6.1.2.1.25.2.3.1.6.55|2|0 +1.3.6.1.2.1.25.2.3.1.6.61|2|0 +1.3.6.1.2.1.25.2.3.1.6.62|2|0 +1.3.6.1.2.1.25.2.3.1.6.63|2|0 +1.3.6.1.2.1.25.2.3.1.6.64|2|0 +1.3.6.1.2.1.25.2.3.1.6.65|2|0 +1.3.6.1.2.1.25.3.2.1.1.196608|2|196608 +1.3.6.1.2.1.25.3.2.1.1.196609|2|196609 +1.3.6.1.2.1.25.3.2.1.1.262145|2|262145 +1.3.6.1.2.1.25.3.2.1.1.262146|2|262146 +1.3.6.1.2.1.25.3.2.1.1.262147|2|262147 +1.3.6.1.2.1.25.3.2.1.1.262234|2|262234 +1.3.6.1.2.1.25.3.2.1.1.786432|2|786432 +1.3.6.1.2.1.25.3.2.1.2.196608|6|1.3.6.1.2.1.25.3.1.3 +1.3.6.1.2.1.25.3.2.1.2.196609|6|1.3.6.1.2.1.25.3.1.3 +1.3.6.1.2.1.25.3.2.1.2.262145|6|1.3.6.1.2.1.25.3.1.4 +1.3.6.1.2.1.25.3.2.1.2.262146|6|1.3.6.1.2.1.25.3.1.4 +1.3.6.1.2.1.25.3.2.1.2.262147|6|1.3.6.1.2.1.25.3.1.4 +1.3.6.1.2.1.25.3.2.1.2.262234|6|1.3.6.1.2.1.25.3.1.4 +1.3.6.1.2.1.25.3.2.1.2.786432|6|1.3.6.1.2.1.25.3.1.12 +1.3.6.1.2.1.25.3.2.1.3.196608|4x|47656e75696e65496e74656c3a20496e74656c28522920436f726528544d292069372d343537385520435055204020332e303047487a +1.3.6.1.2.1.25.3.2.1.3.196609|4x|47656e75696e65496e74656c3a20496e74656c28522920436f726528544d292069372d343537385520435055204020332e303047487a +1.3.6.1.2.1.25.3.2.1.3.262145|4x|6e6574776f726b20696e74657266616365206c6f +1.3.6.1.2.1.25.3.2.1.3.262146|4x|6e6574776f726b20696e746572666163652074756e6c30 +1.3.6.1.2.1.25.3.2.1.3.262147|4x|6e6574776f726b20696e7465726661636520697036746e6c30 +1.3.6.1.2.1.25.3.2.1.3.262234|4x|6e6574776f726b20696e746572666163652065746830 +1.3.6.1.2.1.25.3.2.1.3.786432|4x|4775657373696e6720746861742074686572652773206120666c6f6174696e6720706f696e7420636f2d70726f636573736f72 +1.3.6.1.2.1.25.3.2.1.4.196608|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.196609|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.262145|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.262146|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.262147|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.262234|6|0.0 +1.3.6.1.2.1.25.3.2.1.4.786432|6|0.0 +1.3.6.1.2.1.25.3.2.1.5.196608|2|2 +1.3.6.1.2.1.25.3.2.1.5.196609|2|2 +1.3.6.1.2.1.25.3.2.1.5.262145|2|2 +1.3.6.1.2.1.25.3.2.1.5.262146|2|5 +1.3.6.1.2.1.25.3.2.1.5.262147|2|5 +1.3.6.1.2.1.25.3.2.1.5.262234|2|2 +1.3.6.1.2.1.25.3.2.1.6.262145|65|0 +1.3.6.1.2.1.25.3.2.1.6.262146|65|0 +1.3.6.1.2.1.25.3.2.1.6.262147|65|0 +1.3.6.1.2.1.25.3.2.1.6.262234|65|0 +1.3.6.1.2.1.25.3.3.1.1.196608|6|0.0 +1.3.6.1.2.1.25.3.3.1.1.196609|6|0.0 +1.3.6.1.2.1.25.3.3.1.2.196608|2|1 +1.3.6.1.2.1.25.3.3.1.2.196609|2|1 +1.3.6.1.2.1.25.3.4.1.1.262145|2|1 +1.3.6.1.2.1.25.3.4.1.1.262146|2|2 +1.3.6.1.2.1.25.3.4.1.1.262147|2|3 +1.3.6.1.2.1.25.3.4.1.1.262234|2|90 +1.3.6.1.2.1.25.3.8.1.1.3|2|3 +1.3.6.1.2.1.25.3.8.1.1.6|2|6 +1.3.6.1.2.1.25.3.8.1.1.22|2|22 +1.3.6.1.2.1.25.3.8.1.1.23|2|23 +1.3.6.1.2.1.25.3.8.1.1.24|2|24 +1.3.6.1.2.1.25.3.8.1.1.25|2|25 +1.3.6.1.2.1.25.3.8.1.1.31|2|31 +1.3.6.1.2.1.25.3.8.1.1.32|2|32 +1.3.6.1.2.1.25.3.8.1.1.33|2|33 +1.3.6.1.2.1.25.3.8.1.1.34|2|34 +1.3.6.1.2.1.25.3.8.1.1.35|2|35 +1.3.6.1.2.1.25.3.8.1.2.3|4x|2f646576 +1.3.6.1.2.1.25.3.8.1.2.6|4x|2f7379732f66732f6367726f7570 +1.3.6.1.2.1.25.3.8.1.2.22|4x|2f6574632f7265736f6c762e636f6e66 +1.3.6.1.2.1.25.3.8.1.2.23|4x|2f6574632f686f73746e616d65 +1.3.6.1.2.1.25.3.8.1.2.24|4x|2f6574632f686f737473 +1.3.6.1.2.1.25.3.8.1.2.25|4x|2f6465762f73686d +1.3.6.1.2.1.25.3.8.1.2.31|4x|2f70726f632f6b636f7265 +1.3.6.1.2.1.25.3.8.1.2.32|4x|2f70726f632f6b657973 +1.3.6.1.2.1.25.3.8.1.2.33|4x|2f70726f632f74696d65725f6c697374 +1.3.6.1.2.1.25.3.8.1.2.34|4x|2f70726f632f73636865645f6465627567 +1.3.6.1.2.1.25.3.8.1.2.35|4x|2f7379732f6669726d77617265 +1.3.6.1.2.1.25.3.8.1.3.3|4| +1.3.6.1.2.1.25.3.8.1.3.6|4| +1.3.6.1.2.1.25.3.8.1.3.22|4| +1.3.6.1.2.1.25.3.8.1.3.23|4| +1.3.6.1.2.1.25.3.8.1.3.24|4| +1.3.6.1.2.1.25.3.8.1.3.25|4| +1.3.6.1.2.1.25.3.8.1.3.31|4| +1.3.6.1.2.1.25.3.8.1.3.32|4| +1.3.6.1.2.1.25.3.8.1.3.33|4| +1.3.6.1.2.1.25.3.8.1.3.34|4| +1.3.6.1.2.1.25.3.8.1.3.35|4| +1.3.6.1.2.1.25.3.8.1.4.3|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.6|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.22|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.23|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.24|6|1.3.6.1.2.1.25.3.9.23 +1.3.6.1.2.1.25.3.8.1.4.25|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.31|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.32|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.33|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.34|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.4.35|6|1.3.6.1.2.1.25.3.9.1 +1.3.6.1.2.1.25.3.8.1.5.3|2|1 +1.3.6.1.2.1.25.3.8.1.5.6|2|2 +1.3.6.1.2.1.25.3.8.1.5.22|2|1 +1.3.6.1.2.1.25.3.8.1.5.23|2|1 +1.3.6.1.2.1.25.3.8.1.5.24|2|1 +1.3.6.1.2.1.25.3.8.1.5.25|2|1 +1.3.6.1.2.1.25.3.8.1.5.31|2|1 +1.3.6.1.2.1.25.3.8.1.5.32|2|1 +1.3.6.1.2.1.25.3.8.1.5.33|2|1 +1.3.6.1.2.1.25.3.8.1.5.34|2|1 +1.3.6.1.2.1.25.3.8.1.5.35|2|2 +1.3.6.1.2.1.25.3.8.1.6.3|2|2 +1.3.6.1.2.1.25.3.8.1.6.6|2|2 +1.3.6.1.2.1.25.3.8.1.6.22|2|2 +1.3.6.1.2.1.25.3.8.1.6.23|2|2 +1.3.6.1.2.1.25.3.8.1.6.24|2|2 +1.3.6.1.2.1.25.3.8.1.6.25|2|2 +1.3.6.1.2.1.25.3.8.1.6.31|2|2 +1.3.6.1.2.1.25.3.8.1.6.32|2|2 +1.3.6.1.2.1.25.3.8.1.6.33|2|2 +1.3.6.1.2.1.25.3.8.1.6.34|2|2 +1.3.6.1.2.1.25.3.8.1.6.35|2|2 +1.3.6.1.2.1.25.3.8.1.7.3|2|33 +1.3.6.1.2.1.25.3.8.1.7.6|2|36 +1.3.6.1.2.1.25.3.8.1.7.22|2|52 +1.3.6.1.2.1.25.3.8.1.7.23|2|53 +1.3.6.1.2.1.25.3.8.1.7.24|2|54 +1.3.6.1.2.1.25.3.8.1.7.25|2|55 +1.3.6.1.2.1.25.3.8.1.7.31|2|61 +1.3.6.1.2.1.25.3.8.1.7.32|2|62 +1.3.6.1.2.1.25.3.8.1.7.33|2|63 +1.3.6.1.2.1.25.3.8.1.7.34|2|64 +1.3.6.1.2.1.25.3.8.1.7.35|2|65 +1.3.6.1.2.1.25.3.8.1.8.3|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.6|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.22|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.23|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.24|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.25|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.31|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.32|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.33|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.34|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.8.35|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.3|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.6|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.22|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.23|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.24|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.25|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.31|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.32|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.33|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.34|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.3.8.1.9.35|4x|302d312d312c303a303a302e30 +1.3.6.1.2.1.25.4.2.1.1.1|2|1 +1.3.6.1.2.1.25.4.2.1.1.6|2|6 +1.3.6.1.2.1.25.4.2.1.1.26|2|26 +1.3.6.1.2.1.25.4.2.1.1.64|2|64 +1.3.6.1.2.1.25.4.2.1.2.1|4x|626f6f7473747261702e7368 +1.3.6.1.2.1.25.4.2.1.2.6|4|snmpd +1.3.6.1.2.1.25.4.2.1.2.26|4|bash +1.3.6.1.2.1.25.4.2.1.2.64|4|snmpwalk +1.3.6.1.2.1.25.4.2.1.3.1|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.6|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.26|6|0.0 +1.3.6.1.2.1.25.4.2.1.3.64|6|0.0 +1.3.6.1.2.1.25.4.2.1.4.1|4x|2f62696e2f7368 +1.3.6.1.2.1.25.4.2.1.4.6|4|snmpd +1.3.6.1.2.1.25.4.2.1.4.26|4|bash +1.3.6.1.2.1.25.4.2.1.4.64|4|snmpwalk +1.3.6.1.2.1.25.4.2.1.5.1|4x|2f626f6f7473747261702e7368202d64202d56202d63202f6574632f736e6d702f736e6d70642e636f6e66 +1.3.6.1.2.1.25.4.2.1.5.6|4x|2d66202d64202d56202d63202f6574632f736e6d702f736e6d70642e636f6e66 +1.3.6.1.2.1.25.4.2.1.5.26|4| +1.3.6.1.2.1.25.4.2.1.5.64|4x|2d763263202d63 +1.3.6.1.2.1.25.4.2.1.6.1|2|4 +1.3.6.1.2.1.25.4.2.1.6.6|2|4 +1.3.6.1.2.1.25.4.2.1.6.26|2|4 +1.3.6.1.2.1.25.4.2.1.6.64|2|4 +1.3.6.1.2.1.25.4.2.1.7.1|2|2 +1.3.6.1.2.1.25.4.2.1.7.6|2|1 +1.3.6.1.2.1.25.4.2.1.7.26|2|2 +1.3.6.1.2.1.25.4.2.1.7.64|2|2 +1.3.6.1.2.1.25.5.1.1.1.1|2|3 +1.3.6.1.2.1.25.5.1.1.1.6|2|2636 +1.3.6.1.2.1.25.5.1.1.1.26|2|12 +1.3.6.1.2.1.25.5.1.1.1.64|2|5 +1.3.6.1.2.1.25.5.1.1.2.1|2|2672 +1.3.6.1.2.1.25.5.1.1.2.6|2|17500 +1.3.6.1.2.1.25.5.1.1.2.26|2|3500 +1.3.6.1.2.1.25.5.1.1.2.64|2|7664 +1.3.6.1.2.1.25.6.3.1.1.1|2|1 +1.3.6.1.2.1.25.6.3.1.1.2|2|2 +1.3.6.1.2.1.25.6.3.1.1.3|2|3 +1.3.6.1.2.1.25.6.3.1.1.4|2|4 +1.3.6.1.2.1.25.6.3.1.1.5|2|5 +1.3.6.1.2.1.25.6.3.1.1.6|2|6 +1.3.6.1.2.1.25.6.3.1.1.7|2|7 +1.3.6.1.2.1.25.6.3.1.1.8|2|8 +1.3.6.1.2.1.25.6.3.1.1.9|2|9 +1.3.6.1.2.1.25.6.3.1.1.10|2|10 +1.3.6.1.2.1.25.6.3.1.1.11|2|11 +1.3.6.1.2.1.25.6.3.1.1.12|2|12 +1.3.6.1.2.1.25.6.3.1.1.13|2|13 +1.3.6.1.2.1.25.6.3.1.1.14|2|14 +1.3.6.1.2.1.25.6.3.1.1.15|2|15 +1.3.6.1.2.1.25.6.3.1.1.16|2|16 +1.3.6.1.2.1.25.6.3.1.1.17|2|17 +1.3.6.1.2.1.25.6.3.1.1.18|2|18 +1.3.6.1.2.1.25.6.3.1.1.19|2|19 +1.3.6.1.2.1.25.6.3.1.1.20|2|20 +1.3.6.1.2.1.25.6.3.1.1.21|2|21 +1.3.6.1.2.1.25.6.3.1.1.22|2|22 +1.3.6.1.2.1.25.6.3.1.1.23|2|23 +1.3.6.1.2.1.25.6.3.1.1.24|2|24 +1.3.6.1.2.1.25.6.3.1.1.25|2|25 +1.3.6.1.2.1.25.6.3.1.1.26|2|26 +1.3.6.1.2.1.25.6.3.1.1.27|2|27 +1.3.6.1.2.1.25.6.3.1.1.28|2|28 +1.3.6.1.2.1.25.6.3.1.1.29|2|29 +1.3.6.1.2.1.25.6.3.1.1.30|2|30 +1.3.6.1.2.1.25.6.3.1.1.31|2|31 +1.3.6.1.2.1.25.6.3.1.1.32|2|32 +1.3.6.1.2.1.25.6.3.1.1.33|2|33 +1.3.6.1.2.1.25.6.3.1.1.34|2|34 +1.3.6.1.2.1.25.6.3.1.1.35|2|35 +1.3.6.1.2.1.25.6.3.1.1.36|2|36 +1.3.6.1.2.1.25.6.3.1.1.37|2|37 +1.3.6.1.2.1.25.6.3.1.1.38|2|38 +1.3.6.1.2.1.25.6.3.1.1.39|2|39 +1.3.6.1.2.1.25.6.3.1.1.40|2|40 +1.3.6.1.2.1.25.6.3.1.1.41|2|41 +1.3.6.1.2.1.25.6.3.1.1.42|2|42 +1.3.6.1.2.1.25.6.3.1.1.43|2|43 +1.3.6.1.2.1.25.6.3.1.1.44|2|44 +1.3.6.1.2.1.25.6.3.1.1.45|2|45 +1.3.6.1.2.1.25.6.3.1.1.46|2|46 +1.3.6.1.2.1.25.6.3.1.1.47|2|47 +1.3.6.1.2.1.25.6.3.1.1.48|2|48 +1.3.6.1.2.1.25.6.3.1.1.49|2|49 +1.3.6.1.2.1.25.6.3.1.1.50|2|50 +1.3.6.1.2.1.25.6.3.1.1.51|2|51 +1.3.6.1.2.1.25.6.3.1.1.52|2|52 +1.3.6.1.2.1.25.6.3.1.1.53|2|53 +1.3.6.1.2.1.25.6.3.1.1.54|2|54 +1.3.6.1.2.1.25.6.3.1.1.55|2|55 +1.3.6.1.2.1.25.6.3.1.1.56|2|56 +1.3.6.1.2.1.25.6.3.1.1.57|2|57 +1.3.6.1.2.1.25.6.3.1.1.58|2|58 +1.3.6.1.2.1.25.6.3.1.1.59|2|59 +1.3.6.1.2.1.25.6.3.1.1.60|2|60 +1.3.6.1.2.1.25.6.3.1.1.61|2|61 +1.3.6.1.2.1.25.6.3.1.1.62|2|62 +1.3.6.1.2.1.25.6.3.1.1.63|2|63 +1.3.6.1.2.1.25.6.3.1.1.64|2|64 +1.3.6.1.2.1.25.6.3.1.1.65|2|65 +1.3.6.1.2.1.25.6.3.1.1.66|2|66 +1.3.6.1.2.1.25.6.3.1.1.67|2|67 +1.3.6.1.2.1.25.6.3.1.1.68|2|68 +1.3.6.1.2.1.25.6.3.1.1.69|2|69 +1.3.6.1.2.1.25.6.3.1.1.70|2|70 +1.3.6.1.2.1.25.6.3.1.1.71|2|71 +1.3.6.1.2.1.25.6.3.1.1.72|2|72 +1.3.6.1.2.1.25.6.3.1.1.73|2|73 +1.3.6.1.2.1.25.6.3.1.1.74|2|74 +1.3.6.1.2.1.25.6.3.1.1.75|2|75 +1.3.6.1.2.1.25.6.3.1.1.76|2|76 +1.3.6.1.2.1.25.6.3.1.1.77|2|77 +1.3.6.1.2.1.25.6.3.1.1.78|2|78 +1.3.6.1.2.1.25.6.3.1.1.79|2|79 +1.3.6.1.2.1.25.6.3.1.1.80|2|80 +1.3.6.1.2.1.25.6.3.1.1.81|2|81 +1.3.6.1.2.1.25.6.3.1.1.82|2|82 +1.3.6.1.2.1.25.6.3.1.1.83|2|83 +1.3.6.1.2.1.25.6.3.1.1.84|2|84 +1.3.6.1.2.1.25.6.3.1.1.85|2|85 +1.3.6.1.2.1.25.6.3.1.1.86|2|86 +1.3.6.1.2.1.25.6.3.1.1.87|2|87 +1.3.6.1.2.1.25.6.3.1.1.88|2|88 +1.3.6.1.2.1.25.6.3.1.1.89|2|89 +1.3.6.1.2.1.25.6.3.1.1.90|2|90 +1.3.6.1.2.1.25.6.3.1.1.91|2|91 +1.3.6.1.2.1.25.6.3.1.1.92|2|92 +1.3.6.1.2.1.25.6.3.1.1.93|2|93 +1.3.6.1.2.1.25.6.3.1.1.94|2|94 +1.3.6.1.2.1.25.6.3.1.1.95|2|95 +1.3.6.1.2.1.25.6.3.1.1.96|2|96 +1.3.6.1.2.1.25.6.3.1.1.97|2|97 +1.3.6.1.2.1.25.6.3.1.1.98|2|98 +1.3.6.1.2.1.25.6.3.1.1.99|2|99 +1.3.6.1.2.1.25.6.3.1.1.100|2|100 +1.3.6.1.2.1.25.6.3.1.1.101|2|101 +1.3.6.1.2.1.25.6.3.1.1.102|2|102 +1.3.6.1.2.1.25.6.3.1.1.103|2|103 +1.3.6.1.2.1.25.6.3.1.1.104|2|104 +1.3.6.1.2.1.25.6.3.1.1.105|2|105 +1.3.6.1.2.1.25.6.3.1.1.106|2|106 +1.3.6.1.2.1.25.6.3.1.1.107|2|107 +1.3.6.1.2.1.25.6.3.1.1.108|2|108 +1.3.6.1.2.1.25.6.3.1.1.109|2|109 +1.3.6.1.2.1.25.6.3.1.1.110|2|110 +1.3.6.1.2.1.25.6.3.1.1.111|2|111 +1.3.6.1.2.1.25.6.3.1.1.112|2|112 +1.3.6.1.2.1.25.6.3.1.1.113|2|113 +1.3.6.1.2.1.25.6.3.1.1.114|2|114 +1.3.6.1.2.1.25.6.3.1.1.115|2|115 +1.3.6.1.2.1.25.6.3.1.1.116|2|116 +1.3.6.1.2.1.25.6.3.1.1.117|2|117 +1.3.6.1.2.1.25.6.3.1.1.118|2|118 +1.3.6.1.2.1.25.6.3.1.1.119|2|119 +1.3.6.1.2.1.25.6.3.1.1.120|2|120 +1.3.6.1.2.1.25.6.3.1.1.121|2|121 +1.3.6.1.2.1.25.6.3.1.1.122|2|122 +1.3.6.1.2.1.25.6.3.1.1.123|2|123 +1.3.6.1.2.1.25.6.3.1.1.124|2|124 +1.3.6.1.2.1.25.6.3.1.1.125|2|125 +1.3.6.1.2.1.25.6.3.1.1.126|2|126 +1.3.6.1.2.1.25.6.3.1.1.127|2|127 +1.3.6.1.2.1.25.6.3.1.1.128|2|128 +1.3.6.1.2.1.25.6.3.1.1.129|2|129 +1.3.6.1.2.1.25.6.3.1.1.130|2|130 +1.3.6.1.2.1.25.6.3.1.1.131|2|131 +1.3.6.1.2.1.25.6.3.1.1.132|2|132 +1.3.6.1.2.1.25.6.3.1.1.133|2|133 +1.3.6.1.2.1.25.6.3.1.1.134|2|134 +1.3.6.1.2.1.25.6.3.1.1.135|2|135 +1.3.6.1.2.1.25.6.3.1.1.136|2|136 +1.3.6.1.2.1.25.6.3.1.1.137|2|137 +1.3.6.1.2.1.25.6.3.1.1.138|2|138 +1.3.6.1.2.1.25.6.3.1.1.139|2|139 +1.3.6.1.2.1.25.6.3.1.1.140|2|140 +1.3.6.1.2.1.25.6.3.1.1.141|2|141 +1.3.6.1.2.1.25.6.3.1.1.142|2|142 +1.3.6.1.2.1.25.6.3.1.1.143|2|143 +1.3.6.1.2.1.25.6.3.1.1.144|2|144 +1.3.6.1.2.1.25.6.3.1.1.145|2|145 +1.3.6.1.2.1.25.6.3.1.1.146|2|146 +1.3.6.1.2.1.25.6.3.1.1.147|2|147 +1.3.6.1.2.1.25.6.3.1.1.148|2|148 +1.3.6.1.2.1.25.6.3.1.1.149|2|149 +1.3.6.1.2.1.25.6.3.1.1.150|2|150 +1.3.6.1.2.1.25.6.3.1.1.151|2|151 +1.3.6.1.2.1.25.6.3.1.1.152|2|152 +1.3.6.1.2.1.25.6.3.1.1.153|2|153 +1.3.6.1.2.1.25.6.3.1.1.154|2|154 +1.3.6.1.2.1.25.6.3.1.1.155|2|155 +1.3.6.1.2.1.25.6.3.1.1.156|2|156 +1.3.6.1.2.1.25.6.3.1.1.157|2|157 +1.3.6.1.2.1.25.6.3.1.1.158|2|158 +1.3.6.1.2.1.25.6.3.1.1.159|2|159 +1.3.6.1.2.1.25.6.3.1.1.160|2|160 +1.3.6.1.2.1.25.6.3.1.1.161|2|161 +1.3.6.1.2.1.25.6.3.1.1.162|2|162 +1.3.6.1.2.1.25.6.3.1.1.163|2|163 +1.3.6.1.2.1.25.6.3.1.1.164|2|164 +1.3.6.1.2.1.25.6.3.1.1.165|2|165 +1.3.6.1.2.1.25.6.3.1.1.166|2|166 +1.3.6.1.2.1.25.6.3.1.1.167|2|167 +1.3.6.1.2.1.25.6.3.1.1.168|2|168 +1.3.6.1.2.1.25.6.3.1.1.169|2|169 +1.3.6.1.2.1.25.6.3.1.1.170|2|170 +1.3.6.1.2.1.25.6.3.1.1.171|2|171 +1.3.6.1.2.1.25.6.3.1.1.172|2|172 +1.3.6.1.2.1.25.6.3.1.1.173|2|173 +1.3.6.1.2.1.25.6.3.1.1.174|2|174 +1.3.6.1.2.1.25.6.3.1.1.175|2|175 +1.3.6.1.2.1.25.6.3.1.1.176|2|176 +1.3.6.1.2.1.25.6.3.1.1.177|2|177 +1.3.6.1.2.1.25.6.3.1.1.178|2|178 +1.3.6.1.2.1.25.6.3.1.1.179|2|179 +1.3.6.1.2.1.25.6.3.1.1.180|2|180 +1.3.6.1.2.1.25.6.3.1.1.181|2|181 +1.3.6.1.2.1.25.6.3.1.1.182|2|182 +1.3.6.1.2.1.25.6.3.1.1.183|2|183 +1.3.6.1.2.1.25.6.3.1.1.184|2|184 +1.3.6.1.2.1.25.6.3.1.1.185|2|185 +1.3.6.1.2.1.25.6.3.1.1.186|2|186 +1.3.6.1.2.1.25.6.3.1.1.187|2|187 +1.3.6.1.2.1.25.6.3.1.1.188|2|188 +1.3.6.1.2.1.25.6.3.1.2.1|4x|63656e746f732d72656c656173652d372d342e313730382e656c372e63656e746f73 +1.3.6.1.2.1.25.6.3.1.2.2|4x|66696c6573797374656d2d332e322d32312e656c37 +1.3.6.1.2.1.25.6.3.1.2.3|4x|6e6375727365732d626173652d352e392d31342e32303133303531312e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.4|4x|62696e642d6c6963656e73652d392e392e342d35312e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.5|4x|6e73732d736f66746f6b6e2d66726565626c2d332e32382e332d382e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.6|4x|676c6962632d322e31372d3139362e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.7|4x|6c6962737464632b2b2d342e382e352d31362e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.8|4x|626173682d342e322e34362d32392e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.9|4x|706372652d382e33322d31372e656c37 +1.3.6.1.2.1.25.6.3.1.2.10|4x|7a6c69622d312e322e372d31372e656c37 +1.3.6.1.2.1.25.6.3.1.2.11|4x|787a2d6c6962732d352e322e322d312e656c37 +1.3.6.1.2.1.25.6.3.1.2.12|4x|706f70742d312e31332d31362e656c37 +1.3.6.1.2.1.25.6.3.1.2.13|4x|63686b636f6e6669672d312e372e342d312e656c37 +1.3.6.1.2.1.25.6.3.1.2.14|4x|7365642d342e322e322d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.15|4x|6c69626666692d332e302e31332d31382e656c37 +1.3.6.1.2.1.25.6.3.1.2.16|4x|6c6962617474722d322e342e34362d31322e656c37 +1.3.6.1.2.1.25.6.3.1.2.17|4x|6c69626361702d322e32322d392e656c37 +1.3.6.1.2.1.25.6.3.1.2.18|4x|6c6962636f6d5f6572722d312e34322e392d31302e656c37 +1.3.6.1.2.1.25.6.3.1.2.19|4x|726561646c696e652d362e322d31302e656c37 +1.3.6.1.2.1.25.6.3.1.2.20|4x|677265702d322e32302d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.21|4x|6c6962757569642d322e32332e322d34332e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.22|4x|6c696269646e2d312e32382d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.23|4x|66696e647574696c732d342e352e31312d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.24|4x|646275732d6c6962732d312e362e31322d31372e656c37 +1.3.6.1.2.1.25.6.3.1.2.25|4x|61756469742d6c6962732d322e372e362d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.26|4x|6c696261737375616e2d322e312e302d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.27|4x|787a2d352e322e322d312e656c37 +1.3.6.1.2.1.25.6.3.1.2.28|4x|6b65797574696c732d6c6962732d312e352e382d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.29|4x|61636c2d322e322e35312d31322e656c37 +1.3.6.1.2.1.25.6.3.1.2.30|4x|63797275732d7361736c2d6c69622d322e312e32362d32312e656c37 +1.3.6.1.2.1.25.6.3.1.2.31|4x|6b6d6f642d6c6962732d32302d31352e656c375f342e37 +1.3.6.1.2.1.25.6.3.1.2.32|4x|656c667574696c732d64656661756c742d79616d612d73636f70652d302e3136382d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.33|4x|6e6375727365732d352e392d31342e32303133303531312e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.34|4x|6c696273656d616e6167652d322e352d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.35|4x|6c69627461736e312d342e31302d312e656c37 +1.3.6.1.2.1.25.6.3.1.2.36|4x|63612d6365727469666963617465732d323031372e322e31342d37312e656c37 +1.3.6.1.2.1.25.6.3.1.2.37|4x|6f70656e73736c2d6c6962732d312e302e326b2d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.38|4x|736861646f772d7574696c732d342e312e352e312d32342e656c37 +1.3.6.1.2.1.25.6.3.1.2.39|4x|6c69626d6f756e742d322e32332e322d34332e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.40|4x|7368617265642d6d696d652d696e666f2d312e382d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.41|4x|637261636b6c69622d322e392e302d31312e656c37 +1.3.6.1.2.1.25.6.3.1.2.42|4x|6c696270777175616c6974792d312e322e332d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.43|4x|73797374656d642d6c6962732d3231392d34322e656c375f342e3130 +1.3.6.1.2.1.25.6.3.1.2.44|4x|706b67636f6e6669672d302e32372e312d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.45|4x|646275732d676c69622d302e3130302d372e656c37 +1.3.6.1.2.1.25.6.3.1.2.46|4x|6c69627574656d707465722d312e312e362d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.47|4x|6e73732d332e32382e342d31352e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.48|4x|6e73732d746f6f6c732d332e32382e342d31352e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.49|4x|6c69626375726c2d372e32392e302d34322e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.50|4x|72706d2d6c6962732d342e31312e332d32352e656c37 +1.3.6.1.2.1.25.6.3.1.2.51|4x|6f70656e6c6461702d322e342e34342d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.52|4x|7574696c2d6c696e75782d322e32332e322d34332e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.53|4x|7172656e636f64652d6c6962732d332e342e312d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.54|4x|6465766963652d6d61707065722d312e30322e3134302d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.55|4x|637279707473657475702d6c6962732d312e372e342d332e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.56|4x|6b6d6f642d32302d31352e656c375f342e37 +1.3.6.1.2.1.25.6.3.1.2.57|4x|646275732d312e362e31322d31372e656c37 +1.3.6.1.2.1.25.6.3.1.2.58|4x|69707574696c732d32303136303330382d31302e656c37 +1.3.6.1.2.1.25.6.3.1.2.59|4x|707974686f6e2d6c6962732d322e372e352d35382e656c37 +1.3.6.1.2.1.25.6.3.1.2.60|4x|707974686f6e2d696e6970617273652d302e342d392e656c37 +1.3.6.1.2.1.25.6.3.1.2.61|4x|79756d2d6d657461646174612d7061727365722d312e312e342d31302e656c37 +1.3.6.1.2.1.25.6.3.1.2.62|4x|707974686f6e2d70796375726c2d372e31392e302d31392e656c37 +1.3.6.1.2.1.25.6.3.1.2.63|4x|6c6962786d6c322d707974686f6e2d322e392e312d362e656c375f322e33 +1.3.6.1.2.1.25.6.3.1.2.64|4x|707974686f6e2d636861726465742d322e322e312d312e656c375f31 +1.3.6.1.2.1.25.6.3.1.2.65|4x|686f73746e616d652d332e31332d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.66|4x|7074682d322e302e372d32332e656c37 +1.3.6.1.2.1.25.6.3.1.2.67|4x|6770676d652d312e332e322d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.68|4x|72706d2d6275696c642d6c6962732d342e31312e332d32352e656c37 +1.3.6.1.2.1.25.6.3.1.2.69|4x|79756d2d706c7567696e2d666173746573746d6972726f722d312e312e33312d34322e656c37 +1.3.6.1.2.1.25.6.3.1.2.70|4x|79756d2d706c7567696e2d6f766c2d312e312e33312d34322e656c37 +1.3.6.1.2.1.25.6.3.1.2.71|4x|7061737377642d302e37392d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.72|4x|726f6f7466696c65732d382e312d31312e656c37 +1.3.6.1.2.1.25.6.3.1.2.73|4x|6e65742d736e6d702d6c6962732d352e372e322d32382e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.74|4x|6c69626e666e65746c696e6b2d312e302e312d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.75|4x|6c69626d6e6c2d312e302e332d372e656c37 +1.3.6.1.2.1.25.6.3.1.2.76|4x|69707461626c65732d312e342e32312d31382e332e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.77|4x|6d6172696164622d6c6962732d352e352e35362d322e656c37 +1.3.6.1.2.1.25.6.3.1.2.78|4x|73797376696e69742d746f6f6c732d322e38382d31342e6473662e656c37 +1.3.6.1.2.1.25.6.3.1.2.79|4x|67726f66662d626173652d312e32322e322d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.80|4x|7065726c2d485454502d54696e792d302e3033332d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.81|4x|7065726c2d506f642d5065726c646f632d332e32302d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.82|4x|7065726c2d546578742d5061727365576f7264732d332e32392d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.83|4x|7065726c2d506f642d55736167652d312e36332d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.84|4x|7065726c2d6c6962732d352e31362e332d3239322e656c37 +1.3.6.1.2.1.25.6.3.1.2.85|4x|7065726c2d4578706f727465722d352e36382d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.86|4x|7065726c2d46696c7465722d312e34392d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.87|4x|7065726c2d536f636b65742d322e3031302d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.88|4x|7065726c2d53746f7261626c652d322e34352d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.89|4x|7065726c2d5363616c61722d4c6973742d5574696c732d312e32372d3234382e656c37 +1.3.6.1.2.1.25.6.3.1.2.90|4x|7065726c2d746872656164732d312e38372d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.91|4x|7065726c2d46696c652d506174682d322e30392d322e656c37 +1.3.6.1.2.1.25.6.3.1.2.92|4x|7065726c2d4765746f70742d4c6f6e672d322e34302d322e656c37 +1.3.6.1.2.1.25.6.3.1.2.93|4x|7065726c2d446174612d44756d7065722d322e3134352d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.94|4x|6e65742d736e6d702d352e372e322d32382e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.95|4x|6c69626763632d342e382e352d31362e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.96|4x|73657475702d322e382e37312d372e656c37 +1.3.6.1.2.1.25.6.3.1.2.97|4x|6261736573797374656d2d31302e302d372e656c372e63656e746f73 +1.3.6.1.2.1.25.6.3.1.2.98|4x|747a646174612d32303138642d312e656c37 +1.3.6.1.2.1.25.6.3.1.2.99|4x|676c6962632d636f6d6d6f6e2d322e31372d3139362e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.100|4x|6e7370722d342e31332e312d312e302e656c375f33 +1.3.6.1.2.1.25.6.3.1.2.101|4x|6e6375727365732d6c6962732d352e392d31342e32303133303531312e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.102|4x|6c69627365706f6c2d322e352d362e656c37 +1.3.6.1.2.1.25.6.3.1.2.103|4x|6c696273656c696e75782d322e352d31312e656c37 +1.3.6.1.2.1.25.6.3.1.2.104|4x|696e666f2d352e312d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.105|4x|627a6970322d6c6962732d312e302e362d31332e656c37 +1.3.6.1.2.1.25.6.3.1.2.106|4x|6c696264622d352e332e32312d32312e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.107|4x|6e73732d7574696c2d332e32382e342d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.108|4x|656c667574696c732d6c6962656c662d302e3136382d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.109|4x|6c69626770672d6572726f722d312e31322d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.110|4x|6c696261636c2d322e322e35312d31322e656c37 +1.3.6.1.2.1.25.6.3.1.2.111|4x|6c6962786d6c322d322e392e312d362e656c375f322e33 +1.3.6.1.2.1.25.6.3.1.2.112|4x|6c69626763727970742d312e352e332d31342e656c37 +1.3.6.1.2.1.25.6.3.1.2.113|4x|6c75612d352e312e342d31352e656c37 +1.3.6.1.2.1.25.6.3.1.2.114|4x|6370696f2d322e31312d32352e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.115|4x|73716c6974652d332e372e31372d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.116|4x|6761776b2d342e302e322d342e656c375f332e31 +1.3.6.1.2.1.25.6.3.1.2.117|4x|646966667574696c732d332e332d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.118|4x|65787061742d322e312e302d31302e656c375f33 +1.3.6.1.2.1.25.6.3.1.2.119|4x|6c69626361702d6e672d302e372e352d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.120|4x|6e73732d736f66746f6b6e2d332e32382e332d382e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.121|4x|7031312d6b69742d302e32332e352d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.122|4x|66696c652d6c6962732d352e31312d33332e656c37 +1.3.6.1.2.1.25.6.3.1.2.123|4x|7461722d312e32362d33322e656c37 +1.3.6.1.2.1.25.6.3.1.2.124|4x|70696e656e7472792d302e382e312d31372e656c37 +1.3.6.1.2.1.25.6.3.1.2.125|4x|6c696264622d7574696c732d352e332e32312d32312e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.126|4x|656c667574696c732d6c6962732d302e3136382d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.127|4x|676d702d362e302e302d31352e656c37 +1.3.6.1.2.1.25.6.3.1.2.128|4x|757374722d312e302e342d31362e656c37 +1.3.6.1.2.1.25.6.3.1.2.129|4x|6c6962766572746f2d302e322e352d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.130|4x|7031312d6b69742d74727573742d302e32332e352d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.131|4x|6b7262352d6c6962732d312e31352e312d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.132|4x|636f72657574696c732d382e32322d31382e656c37 +1.3.6.1.2.1.25.6.3.1.2.133|4x|6c6962626c6b69642d322e32332e322d34332e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.134|4x|676c6962322d322e35302e332d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.135|4x|677a69702d312e352d392e656c37 +1.3.6.1.2.1.25.6.3.1.2.136|4x|637261636b6c69622d64696374732d322e392e302d31312e656c37 +1.3.6.1.2.1.25.6.3.1.2.137|4x|70616d2d312e312e382d31382e656c37 +1.3.6.1.2.1.25.6.3.1.2.138|4x|70726f6370732d6e672d332e332e31302d31362e656c37 +1.3.6.1.2.1.25.6.3.1.2.139|4x|676f626a6563742d696e74726f7370656374696f6e2d312e35302e302d312e656c37 +1.3.6.1.2.1.25.6.3.1.2.140|4x|6e73732d70656d2d312e302e332d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.141|4x|6e73732d737973696e69742d332e32382e342d31352e656c375f34 +1.3.6.1.2.1.25.6.3.1.2.142|4x|62696e7574696c732d322e32352e312d33322e626173652e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.143|4x|6c6962737368322d312e342e332d31302e656c375f322e31 +1.3.6.1.2.1.25.6.3.1.2.144|4x|6375726c2d372e32392e302d34322e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.145|4x|72706d2d342e31312e332d32352e656c37 +1.3.6.1.2.1.25.6.3.1.2.146|4x|6c6962757365722d302e36302d372e656c375f31 +1.3.6.1.2.1.25.6.3.1.2.147|4x|686172646c696e6b2d312e302d31392e656c37 +1.3.6.1.2.1.25.6.3.1.2.148|4x|6b70617274782d302e342e392d3131312e656c375f342e32 +1.3.6.1.2.1.25.6.3.1.2.149|4x|6465766963652d6d61707065722d6c6962732d312e30322e3134302d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.150|4x|6472616375742d3033332d3530322e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.151|4x|73797374656d642d3231392d34322e656c375f342e3130 +1.3.6.1.2.1.25.6.3.1.2.152|4x|6764626d2d312e31302d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.153|4x|707974686f6e2d322e372e352d35382e656c37 +1.3.6.1.2.1.25.6.3.1.2.154|4x|646275732d707974686f6e2d312e312e312d392e656c37 +1.3.6.1.2.1.25.6.3.1.2.155|4x|707974686f6e2d676f626a6563742d626173652d332e32322e302d312e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.156|4x|70796c69626c7a6d612d302e352e332d31312e656c37 +1.3.6.1.2.1.25.6.3.1.2.157|4x|707974686f6e2d75726c677261626265722d332e31302d382e656c37 +1.3.6.1.2.1.25.6.3.1.2.158|4x|707978617474722d302e352e312d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.159|4x|707974686f6e2d6b69746368656e2d312e312e312d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.160|4x|676e757067322d322e302e32322d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.161|4x|70796770676d652d302e332d392e656c37 +1.3.6.1.2.1.25.6.3.1.2.162|4x|72706d2d707974686f6e2d342e31312e332d32352e656c37 +1.3.6.1.2.1.25.6.3.1.2.163|4x|79756d2d332e342e332d3135342e656c372e63656e746f732e31 +1.3.6.1.2.1.25.6.3.1.2.164|4x|79756d2d7574696c732d312e312e33312d34322e656c37 +1.3.6.1.2.1.25.6.3.1.2.165|4x|76696d2d6d696e696d616c2d372e342e3136302d322e656c37 +1.3.6.1.2.1.25.6.3.1.2.166|4x|6770672d7075626b65792d66346138306562352d3533613766663462 +1.3.6.1.2.1.25.6.3.1.2.167|4x|7463705f77726170706572732d6c6962732d372e362d37372e656c37 +1.3.6.1.2.1.25.6.3.1.2.168|4x|6c6d5f73656e736f72732d6c6962732d332e342e302d342e3230313630363031676974663931383565352e656c37 +1.3.6.1.2.1.25.6.3.1.2.169|4x|6c69626e657466696c7465725f636f6e6e747261636b2d312e302e362d312e656c375f33 +1.3.6.1.2.1.25.6.3.1.2.170|4x|6970726f7574652d332e31302e302d38372e656c37 +1.3.6.1.2.1.25.6.3.1.2.171|4x|73797374656d642d737973762d3231392d34322e656c375f342e3130 +1.3.6.1.2.1.25.6.3.1.2.172|4x|696e6974736372697074732d392e34392e33392d312e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.173|4x|7065726c2d706172656e742d302e3232352d3234342e656c37 +1.3.6.1.2.1.25.6.3.1.2.174|4x|7065726c2d706f646c61746f72732d322e352e312d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.175|4x|7065726c2d506f642d457363617065732d312e30342d3239322e656c37 +1.3.6.1.2.1.25.6.3.1.2.176|4x|7065726c2d456e636f64652d322e35312d372e656c37 +1.3.6.1.2.1.25.6.3.1.2.177|4x|7065726c2d6d6163726f732d352e31362e332d3239322e656c37 +1.3.6.1.2.1.25.6.3.1.2.178|4x|7065726c2d54696d652d48695265732d312e393732352d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.179|4x|7065726c2d636f6e7374616e742d312e32372d322e656c37 +1.3.6.1.2.1.25.6.3.1.2.180|4x|7065726c2d54696d652d4c6f63616c2d312e323330302d322e656c37 +1.3.6.1.2.1.25.6.3.1.2.181|4x|7065726c2d436172702d312e32362d3234342e656c37 +1.3.6.1.2.1.25.6.3.1.2.182|4x|7065726c2d50617468546f6f6c732d332e34302d352e656c37 +1.3.6.1.2.1.25.6.3.1.2.183|4x|7065726c2d746872656164732d7368617265642d312e34332d362e656c37 +1.3.6.1.2.1.25.6.3.1.2.184|4x|7065726c2d46696c652d54656d702d302e32332e30312d332e656c37 +1.3.6.1.2.1.25.6.3.1.2.185|4x|7065726c2d506f642d53696d706c652d332e32382d342e656c37 +1.3.6.1.2.1.25.6.3.1.2.186|4x|7065726c2d352e31362e332d3239322e656c37 +1.3.6.1.2.1.25.6.3.1.2.187|4x|6e65742d736e6d702d6167656e742d6c6962732d352e372e322d32382e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.2.188|4x|6e65742d736e6d702d7574696c732d352e372e322d32382e656c375f342e31 +1.3.6.1.2.1.25.6.3.1.3.1|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.2|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.3|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.4|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.5|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.6|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.7|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.8|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.9|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.10|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.11|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.12|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.13|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.14|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.15|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.16|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.17|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.18|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.19|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.20|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.21|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.22|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.23|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.24|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.25|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.26|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.27|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.28|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.29|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.30|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.31|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.32|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.33|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.34|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.35|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.36|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.37|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.38|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.39|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.40|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.41|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.42|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.43|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.44|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.45|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.46|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.47|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.48|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.49|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.50|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.51|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.52|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.53|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.54|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.55|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.56|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.57|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.58|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.59|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.60|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.61|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.62|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.63|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.64|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.65|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.66|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.67|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.68|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.69|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.70|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.71|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.72|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.73|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.74|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.75|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.76|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.77|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.78|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.79|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.80|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.81|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.82|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.83|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.84|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.85|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.86|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.87|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.88|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.89|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.90|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.91|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.92|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.93|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.94|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.95|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.96|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.97|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.98|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.99|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.100|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.101|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.102|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.103|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.104|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.105|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.106|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.107|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.108|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.109|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.110|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.111|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.112|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.113|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.114|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.115|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.116|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.117|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.118|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.119|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.120|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.121|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.122|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.123|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.124|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.125|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.126|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.127|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.128|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.129|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.130|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.131|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.132|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.133|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.134|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.135|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.136|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.137|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.138|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.139|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.140|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.141|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.142|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.143|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.144|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.145|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.146|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.147|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.148|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.149|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.150|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.151|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.152|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.153|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.154|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.155|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.156|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.157|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.158|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.159|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.160|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.161|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.162|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.163|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.164|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.165|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.166|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.167|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.168|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.169|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.170|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.171|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.172|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.173|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.174|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.175|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.176|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.177|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.178|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.179|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.180|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.181|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.182|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.183|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.184|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.185|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.186|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.187|6|0.0 +1.3.6.1.2.1.25.6.3.1.3.188|6|0.0 +1.3.6.1.2.1.25.6.3.1.4.1|2|2 +1.3.6.1.2.1.25.6.3.1.4.2|2|2 +1.3.6.1.2.1.25.6.3.1.4.3|2|2 +1.3.6.1.2.1.25.6.3.1.4.4|2|4 +1.3.6.1.2.1.25.6.3.1.4.5|2|2 +1.3.6.1.2.1.25.6.3.1.4.6|2|2 +1.3.6.1.2.1.25.6.3.1.4.7|2|2 +1.3.6.1.2.1.25.6.3.1.4.8|2|2 +1.3.6.1.2.1.25.6.3.1.4.9|2|2 +1.3.6.1.2.1.25.6.3.1.4.10|2|2 +1.3.6.1.2.1.25.6.3.1.4.11|2|2 +1.3.6.1.2.1.25.6.3.1.4.12|2|2 +1.3.6.1.2.1.25.6.3.1.4.13|2|2 +1.3.6.1.2.1.25.6.3.1.4.14|2|4 +1.3.6.1.2.1.25.6.3.1.4.15|2|2 +1.3.6.1.2.1.25.6.3.1.4.16|2|2 +1.3.6.1.2.1.25.6.3.1.4.17|2|2 +1.3.6.1.2.1.25.6.3.1.4.18|2|4 +1.3.6.1.2.1.25.6.3.1.4.19|2|2 +1.3.6.1.2.1.25.6.3.1.4.20|2|4 +1.3.6.1.2.1.25.6.3.1.4.21|2|4 +1.3.6.1.2.1.25.6.3.1.4.22|2|2 +1.3.6.1.2.1.25.6.3.1.4.23|2|4 +1.3.6.1.2.1.25.6.3.1.4.24|2|4 +1.3.6.1.2.1.25.6.3.1.4.25|2|4 +1.3.6.1.2.1.25.6.3.1.4.26|2|2 +1.3.6.1.2.1.25.6.3.1.4.27|2|4 +1.3.6.1.2.1.25.6.3.1.4.28|2|2 +1.3.6.1.2.1.25.6.3.1.4.29|2|2 +1.3.6.1.2.1.25.6.3.1.4.30|2|2 +1.3.6.1.2.1.25.6.3.1.4.31|2|2 +1.3.6.1.2.1.25.6.3.1.4.32|2|4 +1.3.6.1.2.1.25.6.3.1.4.33|2|2 +1.3.6.1.2.1.25.6.3.1.4.34|2|2 +1.3.6.1.2.1.25.6.3.1.4.35|2|2 +1.3.6.1.2.1.25.6.3.1.4.36|2|2 +1.3.6.1.2.1.25.6.3.1.4.37|2|2 +1.3.6.1.2.1.25.6.3.1.4.38|2|2 +1.3.6.1.2.1.25.6.3.1.4.39|2|4 +1.3.6.1.2.1.25.6.3.1.4.40|2|2 +1.3.6.1.2.1.25.6.3.1.4.41|2|2 +1.3.6.1.2.1.25.6.3.1.4.42|2|2 +1.3.6.1.2.1.25.6.3.1.4.43|2|4 +1.3.6.1.2.1.25.6.3.1.4.44|2|4 +1.3.6.1.2.1.25.6.3.1.4.45|2|2 +1.3.6.1.2.1.25.6.3.1.4.46|2|2 +1.3.6.1.2.1.25.6.3.1.4.47|2|2 +1.3.6.1.2.1.25.6.3.1.4.48|2|2 +1.3.6.1.2.1.25.6.3.1.4.49|2|4 +1.3.6.1.2.1.25.6.3.1.4.50|2|4 +1.3.6.1.2.1.25.6.3.1.4.51|2|2 +1.3.6.1.2.1.25.6.3.1.4.52|2|2 +1.3.6.1.2.1.25.6.3.1.4.53|2|4 +1.3.6.1.2.1.25.6.3.1.4.54|2|2 +1.3.6.1.2.1.25.6.3.1.4.55|2|2 +1.3.6.1.2.1.25.6.3.1.4.56|2|2 +1.3.6.1.2.1.25.6.3.1.4.57|2|2 +1.3.6.1.2.1.25.6.3.1.4.58|2|2 +1.3.6.1.2.1.25.6.3.1.4.59|2|4 +1.3.6.1.2.1.25.6.3.1.4.60|2|4 +1.3.6.1.2.1.25.6.3.1.4.61|2|4 +1.3.6.1.2.1.25.6.3.1.4.62|2|4 +1.3.6.1.2.1.25.6.3.1.4.63|2|4 +1.3.6.1.2.1.25.6.3.1.4.64|2|4 +1.3.6.1.2.1.25.6.3.1.4.65|2|2 +1.3.6.1.2.1.25.6.3.1.4.66|2|2 +1.3.6.1.2.1.25.6.3.1.4.67|2|4 +1.3.6.1.2.1.25.6.3.1.4.68|2|4 +1.3.6.1.2.1.25.6.3.1.4.69|2|2 +1.3.6.1.2.1.25.6.3.1.4.70|2|2 +1.3.6.1.2.1.25.6.3.1.4.71|2|2 +1.3.6.1.2.1.25.6.3.1.4.72|2|2 +1.3.6.1.2.1.25.6.3.1.4.73|2|4 +1.3.6.1.2.1.25.6.3.1.4.74|2|2 +1.3.6.1.2.1.25.6.3.1.4.75|2|2 +1.3.6.1.2.1.25.6.3.1.4.76|2|2 +1.3.6.1.2.1.25.6.3.1.4.77|2|4 +1.3.6.1.2.1.25.6.3.1.4.78|2|2 +1.3.6.1.2.1.25.6.3.1.4.79|2|4 +1.3.6.1.2.1.25.6.3.1.4.80|2|4 +1.3.6.1.2.1.25.6.3.1.4.81|2|4 +1.3.6.1.2.1.25.6.3.1.4.82|2|4 +1.3.6.1.2.1.25.6.3.1.4.83|2|4 +1.3.6.1.2.1.25.6.3.1.4.84|2|4 +1.3.6.1.2.1.25.6.3.1.4.85|2|4 +1.3.6.1.2.1.25.6.3.1.4.86|2|4 +1.3.6.1.2.1.25.6.3.1.4.87|2|4 +1.3.6.1.2.1.25.6.3.1.4.88|2|4 +1.3.6.1.2.1.25.6.3.1.4.89|2|4 +1.3.6.1.2.1.25.6.3.1.4.90|2|4 +1.3.6.1.2.1.25.6.3.1.4.91|2|4 +1.3.6.1.2.1.25.6.3.1.4.92|2|4 +1.3.6.1.2.1.25.6.3.1.4.93|2|4 +1.3.6.1.2.1.25.6.3.1.4.94|2|2 +1.3.6.1.2.1.25.6.3.1.4.95|2|2 +1.3.6.1.2.1.25.6.3.1.4.96|2|2 +1.3.6.1.2.1.25.6.3.1.4.97|2|2 +1.3.6.1.2.1.25.6.3.1.4.98|2|2 +1.3.6.1.2.1.25.6.3.1.4.99|2|2 +1.3.6.1.2.1.25.6.3.1.4.100|2|2 +1.3.6.1.2.1.25.6.3.1.4.101|2|2 +1.3.6.1.2.1.25.6.3.1.4.102|2|2 +1.3.6.1.2.1.25.6.3.1.4.103|2|2 +1.3.6.1.2.1.25.6.3.1.4.104|2|2 +1.3.6.1.2.1.25.6.3.1.4.105|2|2 +1.3.6.1.2.1.25.6.3.1.4.106|2|2 +1.3.6.1.2.1.25.6.3.1.4.107|2|2 +1.3.6.1.2.1.25.6.3.1.4.108|2|4 +1.3.6.1.2.1.25.6.3.1.4.109|2|2 +1.3.6.1.2.1.25.6.3.1.4.110|2|2 +1.3.6.1.2.1.25.6.3.1.4.111|2|4 +1.3.6.1.2.1.25.6.3.1.4.112|2|2 +1.3.6.1.2.1.25.6.3.1.4.113|2|4 +1.3.6.1.2.1.25.6.3.1.4.114|2|4 +1.3.6.1.2.1.25.6.3.1.4.115|2|4 +1.3.6.1.2.1.25.6.3.1.4.116|2|4 +1.3.6.1.2.1.25.6.3.1.4.117|2|4 +1.3.6.1.2.1.25.6.3.1.4.118|2|2 +1.3.6.1.2.1.25.6.3.1.4.119|2|2 +1.3.6.1.2.1.25.6.3.1.4.120|2|2 +1.3.6.1.2.1.25.6.3.1.4.121|2|4 +1.3.6.1.2.1.25.6.3.1.4.122|2|4 +1.3.6.1.2.1.25.6.3.1.4.123|2|4 +1.3.6.1.2.1.25.6.3.1.4.124|2|4 +1.3.6.1.2.1.25.6.3.1.4.125|2|4 +1.3.6.1.2.1.25.6.3.1.4.126|2|4 +1.3.6.1.2.1.25.6.3.1.4.127|2|2 +1.3.6.1.2.1.25.6.3.1.4.128|2|2 +1.3.6.1.2.1.25.6.3.1.4.129|2|4 +1.3.6.1.2.1.25.6.3.1.4.130|2|4 +1.3.6.1.2.1.25.6.3.1.4.131|2|2 +1.3.6.1.2.1.25.6.3.1.4.132|2|2 +1.3.6.1.2.1.25.6.3.1.4.133|2|4 +1.3.6.1.2.1.25.6.3.1.4.134|2|4 +1.3.6.1.2.1.25.6.3.1.4.135|2|4 +1.3.6.1.2.1.25.6.3.1.4.136|2|2 +1.3.6.1.2.1.25.6.3.1.4.137|2|2 +1.3.6.1.2.1.25.6.3.1.4.138|2|4 +1.3.6.1.2.1.25.6.3.1.4.139|2|4 +1.3.6.1.2.1.25.6.3.1.4.140|2|4 +1.3.6.1.2.1.25.6.3.1.4.141|2|2 +1.3.6.1.2.1.25.6.3.1.4.142|2|4 +1.3.6.1.2.1.25.6.3.1.4.143|2|2 +1.3.6.1.2.1.25.6.3.1.4.144|2|4 +1.3.6.1.2.1.25.6.3.1.4.145|2|2 +1.3.6.1.2.1.25.6.3.1.4.146|2|2 +1.3.6.1.2.1.25.6.3.1.4.147|2|2 +1.3.6.1.2.1.25.6.3.1.4.148|2|2 +1.3.6.1.2.1.25.6.3.1.4.149|2|2 +1.3.6.1.2.1.25.6.3.1.4.150|2|2 +1.3.6.1.2.1.25.6.3.1.4.151|2|4 +1.3.6.1.2.1.25.6.3.1.4.152|2|2 +1.3.6.1.2.1.25.6.3.1.4.153|2|4 +1.3.6.1.2.1.25.6.3.1.4.154|2|4 +1.3.6.1.2.1.25.6.3.1.4.155|2|4 +1.3.6.1.2.1.25.6.3.1.4.156|2|4 +1.3.6.1.2.1.25.6.3.1.4.157|2|4 +1.3.6.1.2.1.25.6.3.1.4.158|2|4 +1.3.6.1.2.1.25.6.3.1.4.159|2|4 +1.3.6.1.2.1.25.6.3.1.4.160|2|4 +1.3.6.1.2.1.25.6.3.1.4.161|2|4 +1.3.6.1.2.1.25.6.3.1.4.162|2|4 +1.3.6.1.2.1.25.6.3.1.4.163|2|2 +1.3.6.1.2.1.25.6.3.1.4.164|2|4 +1.3.6.1.2.1.25.6.3.1.4.165|2|4 +1.3.6.1.2.1.25.6.3.1.4.166|2|4 +1.3.6.1.2.1.25.6.3.1.4.167|2|2 +1.3.6.1.2.1.25.6.3.1.4.168|2|2 +1.3.6.1.2.1.25.6.3.1.4.169|2|2 +1.3.6.1.2.1.25.6.3.1.4.170|2|4 +1.3.6.1.2.1.25.6.3.1.4.171|2|4 +1.3.6.1.2.1.25.6.3.1.4.172|2|2 +1.3.6.1.2.1.25.6.3.1.4.173|2|4 +1.3.6.1.2.1.25.6.3.1.4.174|2|4 +1.3.6.1.2.1.25.6.3.1.4.175|2|4 +1.3.6.1.2.1.25.6.3.1.4.176|2|4 +1.3.6.1.2.1.25.6.3.1.4.177|2|4 +1.3.6.1.2.1.25.6.3.1.4.178|2|4 +1.3.6.1.2.1.25.6.3.1.4.179|2|4 +1.3.6.1.2.1.25.6.3.1.4.180|2|4 +1.3.6.1.2.1.25.6.3.1.4.181|2|4 +1.3.6.1.2.1.25.6.3.1.4.182|2|4 +1.3.6.1.2.1.25.6.3.1.4.183|2|4 +1.3.6.1.2.1.25.6.3.1.4.184|2|4 +1.3.6.1.2.1.25.6.3.1.4.185|2|4 +1.3.6.1.2.1.25.6.3.1.4.186|2|4 +1.3.6.1.2.1.25.6.3.1.4.187|2|4 +1.3.6.1.2.1.25.6.3.1.4.188|2|4 +1.3.6.1.2.1.25.6.3.1.5.1|4x|323031382d342d322c31383a33383a32352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.2|4x|323031382d342d322c31383a33383a32352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.3|4x|323031382d342d322c31383a33383a32362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.4|4x|323031382d342d322c31383a33383a32362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.5|4x|323031382d342d322c31383a33383a32362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.6|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.7|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.8|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.9|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.10|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.11|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.12|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.13|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.14|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.15|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.16|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.17|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.18|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.19|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.20|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.21|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.22|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.23|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.24|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.25|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.26|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.27|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.28|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.29|4x|323031382d342d322c31383a33383a33332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.30|4x|323031382d342d322c31383a33383a33332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.31|4x|323031382d342d322c31383a33383a33332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.32|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.33|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.34|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.35|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.36|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.37|4x|323031382d342d322c31383a33383a34302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.38|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.39|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.40|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.41|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.42|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.43|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.44|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.45|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.46|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.47|4x|323031382d342d322c31383a33383a34342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.48|4x|323031382d342d322c31383a33383a34342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.49|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.50|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.51|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.52|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.53|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.54|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.55|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.56|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.57|4x|323031382d342d322c31383a33383a34372e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.58|4x|323031382d342d322c31383a33383a34372e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.59|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.60|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.61|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.62|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.63|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.64|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.65|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.66|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.67|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.68|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.69|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.70|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.71|4x|323031382d342d322c31383a33383a35342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.72|4x|323031382d342d322c31383a33383a35342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.73|4x|323031382d342d31332c32303a35313a34322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.74|4x|323031382d342d31332c32303a35313a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.75|4x|323031382d342d31332c32303a35313a34342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.76|4x|323031382d342d31332c32303a35313a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.77|4x|323031382d342d31332c32303a35313a34372e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.78|4x|323031382d342d31332c32303a35313a34382e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.79|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.80|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.81|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.82|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.83|4x|323031382d342d31332c32303a35313a35312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.84|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.85|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.86|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.87|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.88|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.89|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.90|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.91|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.92|4x|323031382d342d31332c32303a35313a35332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.93|4x|323031382d342d31332c32303a35313a35352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.94|4x|323031382d342d31332c32303a35313a35362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.95|4x|323031382d342d322c31383a33383a32352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.96|4x|323031382d342d322c31383a33383a32352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.97|4x|323031382d342d322c31383a33383a32362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.98|4x|323031382d342d322c31383a33383a32362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.99|4x|323031382d342d322c31383a33383a32392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.100|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.101|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.102|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.103|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.104|4x|323031382d342d322c31383a33383a33302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.105|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.106|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.107|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.108|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.109|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.110|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.111|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.112|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.113|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.114|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.115|4x|323031382d342d322c31383a33383a33312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.116|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.117|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.118|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.119|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.120|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.121|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.122|4x|323031382d342d322c31383a33383a33322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.123|4x|323031382d342d322c31383a33383a33332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.124|4x|323031382d342d322c31383a33383a33332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.125|4x|323031382d342d322c31383a33383a33332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.126|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.127|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.128|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.129|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.130|4x|323031382d342d322c31383a33383a33392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.131|4x|323031382d342d322c31383a33383a34302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.132|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.133|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.134|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.135|4x|323031382d342d322c31383a33383a34312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.136|4x|323031382d342d322c31383a33383a34322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.137|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.138|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.139|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.140|4x|323031382d342d322c31383a33383a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.141|4x|323031382d342d322c31383a33383a34342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.142|4x|323031382d342d322c31383a33383a34342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.143|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.144|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.145|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.146|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.147|4x|323031382d342d322c31383a33383a34352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.148|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.149|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.150|4x|323031382d342d322c31383a33383a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.151|4x|323031382d342d322c31383a33383a34372e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.152|4x|323031382d342d322c31383a33383a34372e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.153|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.154|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.155|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.156|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.157|4x|323031382d342d322c31383a33383a34392e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.158|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.159|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.160|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.161|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.162|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.163|4x|323031382d342d322c31383a33383a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.164|4x|323031382d342d322c31383a33383a35312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.165|4x|323031382d342d322c31383a33383a35342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.166|4x|323031382d342d31332c32303a35313a34302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.167|4x|323031382d342d31332c32303a35313a34322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.168|4x|323031382d342d31332c32303a35313a34332e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.169|4x|323031382d342d31332c32303a35313a34342e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.170|4x|323031382d342d31332c32303a35313a34362e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.171|4x|323031382d342d31332c32303a35313a34382e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.172|4x|323031382d342d31332c32303a35313a34382e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.173|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.174|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.175|4x|323031382d342d31332c32303a35313a35302e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.176|4x|323031382d342d31332c32303a35313a35312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.177|4x|323031382d342d31332c32303a35313a35312e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.178|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.179|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.180|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.181|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.182|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.183|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.184|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.185|4x|323031382d342d31332c32303a35313a35322e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.186|4x|323031382d342d31332c32303a35313a35352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.187|4x|323031382d342d31332c32303a35313a35352e302c2b303a30 +1.3.6.1.2.1.25.6.3.1.5.188|4x|323031382d342d31332c32303a35313a35372e302c2b303a30 +1.3.6.1.2.1.28.1.1.2.1|66|0 +1.3.6.1.2.1.28.1.1.5.1|66|0 +1.3.6.1.2.1.28.2.1.4.1.26|66|0 +1.3.6.1.2.1.28.2.1.7.1.26|66|0 +1.3.6.1.2.1.28.2.1.31.1.1|2|-1 +1.3.6.1.2.1.28.2.1.31.1.2|2|-1 +1.3.6.1.2.1.28.2.1.31.1.3|2|-1 +1.3.6.1.2.1.28.2.1.31.1.4|2|-1 +1.3.6.1.2.1.28.2.1.31.1.5|2|-1 +1.3.6.1.2.1.28.2.1.31.1.6|2|-1 +1.3.6.1.2.1.28.2.1.31.1.7|2|-1 +1.3.6.1.2.1.28.2.1.31.1.8|2|-1 +1.3.6.1.2.1.28.2.1.31.1.9|2|-1 +1.3.6.1.2.1.28.2.1.31.1.10|2|-1 +1.3.6.1.2.1.28.2.1.31.1.11|2|-1 +1.3.6.1.2.1.28.2.1.31.1.12|2|-1 +1.3.6.1.2.1.28.2.1.31.1.13|2|-1 +1.3.6.1.2.1.28.2.1.31.1.14|2|-1 +1.3.6.1.2.1.28.2.1.31.1.15|2|-1 +1.3.6.1.2.1.28.2.1.31.1.16|2|-1 +1.3.6.1.2.1.28.2.1.31.1.17|2|-1 +1.3.6.1.2.1.28.2.1.31.1.18|2|-1 +1.3.6.1.2.1.28.2.1.31.1.19|2|-1 +1.3.6.1.2.1.28.2.1.31.1.20|2|-1 +1.3.6.1.2.1.28.2.1.31.1.21|2|-1 +1.3.6.1.2.1.28.2.1.31.1.22|2|-1 +1.3.6.1.2.1.28.2.1.31.1.23|2|-1 +1.3.6.1.2.1.28.2.1.31.1.24|2|-1 +1.3.6.1.2.1.28.2.1.31.1.25|2|-1 +1.3.6.1.2.1.31.1.1.1.1.1|4|lo +1.3.6.1.2.1.31.1.1.1.1.2|4|tunl0 +1.3.6.1.2.1.31.1.1.1.1.3|4|ip6tnl0 +1.3.6.1.2.1.31.1.1.1.1.90|4|eth0 +1.3.6.1.2.1.31.1.1.1.2.1|65|0 +1.3.6.1.2.1.31.1.1.1.2.2|65|0 +1.3.6.1.2.1.31.1.1.1.2.3|65|0 +1.3.6.1.2.1.31.1.1.1.2.90|65|0 +1.3.6.1.2.1.31.1.1.1.3.1|65|0 +1.3.6.1.2.1.31.1.1.1.3.2|65|0 +1.3.6.1.2.1.31.1.1.1.3.3|65|0 +1.3.6.1.2.1.31.1.1.1.3.90|65|0 +1.3.6.1.2.1.31.1.1.1.4.1|65|0 +1.3.6.1.2.1.31.1.1.1.4.2|65|0 +1.3.6.1.2.1.31.1.1.1.4.3|65|0 +1.3.6.1.2.1.31.1.1.1.4.90|65|0 +1.3.6.1.2.1.31.1.1.1.5.1|65|0 +1.3.6.1.2.1.31.1.1.1.5.2|65|0 +1.3.6.1.2.1.31.1.1.1.5.3|65|0 +1.3.6.1.2.1.31.1.1.1.5.90|65|0 +1.3.6.1.2.1.31.1.1.1.6.1|70|5300203 +1.3.6.1.2.1.31.1.1.1.6.2|70|0 +1.3.6.1.2.1.31.1.1.1.6.3|70|0 +1.3.6.1.2.1.31.1.1.1.6.90|70|2928 +1.3.6.1.2.1.31.1.1.1.7.1|70|63808 +1.3.6.1.2.1.31.1.1.1.7.2|70|0 +1.3.6.1.2.1.31.1.1.1.7.3|70|0 +1.3.6.1.2.1.31.1.1.1.7.90|70|40 +1.3.6.1.2.1.31.1.1.1.8.1|70|0 +1.3.6.1.2.1.31.1.1.1.8.2|70|0 +1.3.6.1.2.1.31.1.1.1.8.3|70|0 +1.3.6.1.2.1.31.1.1.1.8.90|70|0 +1.3.6.1.2.1.31.1.1.1.9.1|70|0 +1.3.6.1.2.1.31.1.1.1.9.2|70|0 +1.3.6.1.2.1.31.1.1.1.9.3|70|0 +1.3.6.1.2.1.31.1.1.1.9.90|70|0 +1.3.6.1.2.1.31.1.1.1.10.1|70|5300203 +1.3.6.1.2.1.31.1.1.1.10.2|70|0 +1.3.6.1.2.1.31.1.1.1.10.3|70|0 +1.3.6.1.2.1.31.1.1.1.10.90|70|0 +1.3.6.1.2.1.31.1.1.1.11.1|70|63808 +1.3.6.1.2.1.31.1.1.1.11.2|70|0 +1.3.6.1.2.1.31.1.1.1.11.3|70|0 +1.3.6.1.2.1.31.1.1.1.11.90|70|0 +1.3.6.1.2.1.31.1.1.1.12.1|70|0 +1.3.6.1.2.1.31.1.1.1.12.2|70|0 +1.3.6.1.2.1.31.1.1.1.12.3|70|0 +1.3.6.1.2.1.31.1.1.1.12.90|70|0 +1.3.6.1.2.1.31.1.1.1.13.1|70|0 +1.3.6.1.2.1.31.1.1.1.13.2|70|0 +1.3.6.1.2.1.31.1.1.1.13.3|70|0 +1.3.6.1.2.1.31.1.1.1.13.90|70|0 +1.3.6.1.2.1.31.1.1.1.15.1|66|10 +1.3.6.1.2.1.31.1.1.1.15.2|66|0 +1.3.6.1.2.1.31.1.1.1.15.3|66|0 +1.3.6.1.2.1.31.1.1.1.15.90|66|10000 +1.3.6.1.2.1.31.1.1.1.16.1|2|2 +1.3.6.1.2.1.31.1.1.1.16.2|2|2 +1.3.6.1.2.1.31.1.1.1.16.3|2|2 +1.3.6.1.2.1.31.1.1.1.16.90|2|2 +1.3.6.1.2.1.31.1.1.1.17.1|2|2 +1.3.6.1.2.1.31.1.1.1.17.2|2|1 +1.3.6.1.2.1.31.1.1.1.17.3|2|1 +1.3.6.1.2.1.31.1.1.1.17.90|2|1 +1.3.6.1.2.1.31.1.1.1.18.1|4| +1.3.6.1.2.1.31.1.1.1.18.2|4| +1.3.6.1.2.1.31.1.1.1.18.3|4| +1.3.6.1.2.1.31.1.1.1.18.90|4| +1.3.6.1.2.1.31.1.1.1.19.1|67|0 +1.3.6.1.2.1.31.1.1.1.19.2|67|0 +1.3.6.1.2.1.31.1.1.1.19.3|67|0 +1.3.6.1.2.1.31.1.1.1.19.90|67|0 +1.3.6.1.2.1.31.1.5.0|67|0 +1.3.6.1.2.1.55.1.1.0|2|2 +1.3.6.1.2.1.55.1.2.0|2|64 +1.3.6.1.2.1.88.1.1.1.0|2|1 +1.3.6.1.2.1.88.1.1.2.0|66|0 +1.3.6.1.2.1.88.1.1.3.0|66|0 +1.3.6.1.2.1.88.1.1.4.0|66|0 +1.3.6.1.2.1.88.1.1.5.0|65|0 +1.3.6.1.2.1.88.1.2.1.0|65|0 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.1|6|1.3.6.1.2.1.2.2.1.1 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.2|6|1.3.6.1.2.1.2.2.1.7 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.3|6|1.3.6.1.2.1.2.2.1.8 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.1|6|1.3.6.1.2.1.88.2.1.1 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.2|6|1.3.6.1.2.1.88.2.1.2 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.3|6|1.3.6.1.2.1.88.2.1.3 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.4|6|1.3.6.1.2.1.88.2.1.4 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.5|6|1.3.6.1.2.1.88.2.1.6 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.1|6|1.3.6.1.2.1.88.2.1.1 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.2|6|1.3.6.1.2.1.88.2.1.2 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.3|6|1.3.6.1.2.1.88.2.1.3 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.4|6|1.3.6.1.2.1.88.2.1.4 +1.3.6.1.2.1.88.1.3.1.1.3.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.5|6|1.3.6.1.2.1.88.2.1.5 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.1|2|1 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.2|2|1 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.3|2|1 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.1|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.2|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.3|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.4|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.5|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.1|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.2|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.3|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.4|2|2 +1.3.6.1.2.1.88.1.3.1.1.4.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.5|2|2 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.1|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.2|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.11.95.108.105.110.107.85.112.68.111.119.110.3|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.1|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.2|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.3|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.4|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.97.105.108.5|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.1|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.2|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.3|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.4|2|1 +1.3.6.1.2.1.88.1.3.1.1.5.6.95.115.110.109.112.100.12.95.116.114.105.103.103.101.114.70.105.114.101.5|2|1 +1.3.6.1.2.1.88.1.4.2.1.2.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|4| +1.3.6.1.2.1.88.1.4.2.1.2.6.95.115.110.109.112.100.95.108.105.110.107.85.112|4| +1.3.6.1.2.1.88.1.4.2.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|4| +1.3.6.1.2.1.88.1.4.2.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|4| +1.3.6.1.2.1.88.1.4.2.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|4| +1.3.6.1.2.1.88.1.4.2.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|4| +1.3.6.1.2.1.88.1.4.2.1.3.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|4x|8000 +1.3.6.1.2.1.88.1.4.2.1.3.6.95.115.110.109.112.100.95.108.105.110.107.85.112|4x|8000 +1.3.6.1.2.1.88.1.4.2.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|4x|8000 +1.3.6.1.2.1.88.1.4.2.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|4x|8000 +1.3.6.1.2.1.88.1.4.2.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|4x|8000 +1.3.6.1.2.1.88.1.4.2.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|4x|8000 +1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|2|1 +1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.108.105.110.107.85.112|2|1 +1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|2|1 +1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|2|1 +1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|2|1 +1.3.6.1.2.1.88.1.4.2.1.4.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|2|1 +1.3.6.1.2.1.88.1.4.2.1.5.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|2|1 +1.3.6.1.2.1.88.1.4.2.1.5.6.95.115.110.109.112.100.95.108.105.110.107.85.112|2|1 +1.3.6.1.2.1.88.1.4.2.1.5.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|2|1 +1.3.6.1.2.1.88.1.4.2.1.5.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|2|1 +1.3.6.1.2.1.88.1.4.2.1.5.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|2|1 +1.3.6.1.2.1.88.1.4.2.1.5.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|2|1 +1.3.6.1.2.1.88.1.4.3.1.1.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|6|1.3.6.1.6.3.1.1.5.3 +1.3.6.1.2.1.88.1.4.3.1.1.6.95.115.110.109.112.100.95.108.105.110.107.85.112|6|1.3.6.1.6.3.1.1.5.4 +1.3.6.1.2.1.88.1.4.3.1.1.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|6|1.3.6.1.2.1.88.2.0.4 +1.3.6.1.2.1.88.1.4.3.1.1.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|6|1.3.6.1.2.1.88.2.0.3 +1.3.6.1.2.1.88.1.4.3.1.1.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|6|1.3.6.1.2.1.88.2.0.1 +1.3.6.1.2.1.88.1.4.3.1.1.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|6|1.3.6.1.2.1.88.2.0.2 +1.3.6.1.2.1.88.1.4.3.1.2.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|4x|5f736e6d7064 +1.3.6.1.2.1.88.1.4.3.1.2.6.95.115.110.109.112.100.95.108.105.110.107.85.112|4x|5f736e6d7064 +1.3.6.1.2.1.88.1.4.3.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|4x|5f736e6d7064 +1.3.6.1.2.1.88.1.4.3.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|4x|5f736e6d7064 +1.3.6.1.2.1.88.1.4.3.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|4x|5f736e6d7064 +1.3.6.1.2.1.88.1.4.3.1.2.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|4x|5f736e6d7064 +1.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.108.105.110.107.68.111.119.110|4x|5f6c696e6b5570446f776e +1.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.108.105.110.107.85.112|4x|5f6c696e6b5570446f776e +1.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.105.108.117.114.101|4x|5f747269676765724661696c +1.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.97.108.108.105.110.103|4x|5f7472696767657246697265 +1.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.70.105.114.101.100|4x|5f7472696767657246697265 +1.3.6.1.2.1.88.1.4.3.1.3.6.95.115.110.109.112.100.95.109.116.101.84.114.105.103.103.101.114.82.105.115.105.110.103|4x|5f7472696767657246697265 +1.3.6.1.2.1.92.1.1.1.0|66|1000 +1.3.6.1.2.1.92.1.1.2.0|66|1440 +1.3.6.1.2.1.92.1.2.1.0|65|0 +1.3.6.1.2.1.92.1.2.2.0|65|0 +1.3.6.1.2.1.104.1.1.1.0|66|0 +1.3.6.1.2.1.104.1.1.2.0|65|0 +1.3.6.1.2.1.104.1.1.3.0|65|0 +1.3.6.1.2.1.104.1.1.4.0|65|0 +1.3.6.1.2.1.104.1.1.5.0|65|0 +1.3.6.1.2.1.104.1.1.6.0|65|0 +1.3.6.1.2.1.104.1.1.7.0|65|0 +1.3.6.1.2.1.104.1.1.8.0|70|0 +1.3.6.1.2.1.104.1.1.9.0|70|0 +1.3.6.1.2.1.104.1.1.10.0|70|0 +1.3.6.1.2.1.104.1.1.11.0|70|0 +1.3.6.1.2.1.104.1.1.12.0|70|0 +1.3.6.1.2.1.104.1.1.13.0|70|0 +1.3.6.1.2.1.104.1.1.14.0|70|0 +1.3.6.1.2.1.104.1.1.15.0|70|0 +1.3.6.1.2.1.104.1.1.16.0|70|0 +1.3.6.1.2.1.104.1.1.17.0|70|0 +1.3.6.1.2.1.104.1.1.18.0|67|0 +1.3.6.1.2.1.104.1.2.1.0|2|0 +1.3.6.1.2.1.104.1.2.2.0|66|0 +1.3.6.1.2.1.104.1.2.3.0|66|0 +1.3.6.1.2.1.104.1.2.4.0|66|0 +1.3.6.1.2.1.104.1.2.5.0|2|0 +1.3.6.1.2.1.104.1.2.6.0|66|0 +1.3.6.1.2.1.104.1.2.7.0|66|0 +1.3.6.1.4.1.2021.4.1.0|2|0 +1.3.6.1.4.1.2021.4.2.0|4|swap +1.3.6.1.4.1.2021.4.3.0|2|1048572 +1.3.6.1.4.1.2021.4.4.0|2|1048572 +1.3.6.1.4.1.2021.4.5.0|2|2046940 +1.3.6.1.4.1.2021.4.6.0|2|76976 +1.3.6.1.4.1.2021.4.11.0|2|1125548 +1.3.6.1.4.1.2021.4.12.0|2|16000 +1.3.6.1.4.1.2021.4.13.0|2|2940 +1.3.6.1.4.1.2021.4.14.0|2|73580 +1.3.6.1.4.1.2021.4.15.0|2|1577648 +1.3.6.1.4.1.2021.4.100.0|2|0 +1.3.6.1.4.1.2021.4.101.0|4| +1.3.6.1.4.1.2021.10.1.1.1|2|1 +1.3.6.1.4.1.2021.10.1.1.2|2|2 +1.3.6.1.4.1.2021.10.1.1.3|2|3 +1.3.6.1.4.1.2021.10.1.2.1|4x|4c6f61642d31 +1.3.6.1.4.1.2021.10.1.2.2|4x|4c6f61642d35 +1.3.6.1.4.1.2021.10.1.2.3|4x|4c6f61642d3135 +1.3.6.1.4.1.2021.10.1.3.1|4x|302e3036 +1.3.6.1.4.1.2021.10.1.3.2|4x|302e3036 +1.3.6.1.4.1.2021.10.1.3.3|4x|302e3032 +1.3.6.1.4.1.2021.10.1.4.1|4x|31322e3030 +1.3.6.1.4.1.2021.10.1.4.2|4x|31322e3030 +1.3.6.1.4.1.2021.10.1.4.3|4x|31322e3030 +1.3.6.1.4.1.2021.10.1.5.1|2|6 +1.3.6.1.4.1.2021.10.1.5.2|2|6 +1.3.6.1.4.1.2021.10.1.5.3|2|2 +1.3.6.1.4.1.2021.10.1.6.1|68x|09050336452d32 +1.3.6.1.4.1.2021.10.1.6.2|68x|09050336452d32 +1.3.6.1.4.1.2021.10.1.6.3|68x|09050332452d32 +1.3.6.1.4.1.2021.10.1.100.1|2|0 +1.3.6.1.4.1.2021.10.1.100.2|2|0 +1.3.6.1.4.1.2021.10.1.100.3|2|0 +1.3.6.1.4.1.2021.10.1.101.1|4| +1.3.6.1.4.1.2021.10.1.101.2|4| +1.3.6.1.4.1.2021.10.1.101.3|4| +1.3.6.1.4.1.2021.11.1.0|2|1 +1.3.6.1.4.1.2021.11.2.0|4|systemStats +1.3.6.1.4.1.2021.11.3.0|2|0 +1.3.6.1.4.1.2021.11.4.0|2|0 +1.3.6.1.4.1.2021.11.5.0|2|10 +1.3.6.1.4.1.2021.11.6.0|2|0 +1.3.6.1.4.1.2021.11.7.0|2|142 +1.3.6.1.4.1.2021.11.8.0|2|314 +1.3.6.1.4.1.2021.11.9.0|2|0 +1.3.6.1.4.1.2021.11.10.0|2|0 +1.3.6.1.4.1.2021.11.11.0|2|99 +1.3.6.1.4.1.2021.11.50.0|65|162999 +1.3.6.1.4.1.2021.11.51.0|65|0 +1.3.6.1.4.1.2021.11.52.0|65|240292 +1.3.6.1.4.1.2021.11.53.0|65|166758712 +1.3.6.1.4.1.2021.11.54.0|65|2046 +1.3.6.1.4.1.2021.11.55.0|65|0 +1.3.6.1.4.1.2021.11.56.0|65|0 +1.3.6.1.4.1.2021.11.57.0|65|4713272 +1.3.6.1.4.1.2021.11.58.0|65|3330562 +1.3.6.1.4.1.2021.11.59.0|65|52242132 +1.3.6.1.4.1.2021.11.60.0|65|111026511 +1.3.6.1.4.1.2021.11.61.0|65|2442 +1.3.6.1.4.1.2021.11.62.0|65|0 +1.3.6.1.4.1.2021.11.63.0|65|0 +1.3.6.1.4.1.2021.11.64.0|65|0 +1.3.6.1.4.1.2021.11.65.0|65|0 +1.3.6.1.4.1.2021.11.66.0|65|0 +1.3.6.1.4.1.2021.13.14.1.0|2|1 +1.3.6.1.4.1.2021.13.15.1.1.1.1|2|1 +1.3.6.1.4.1.2021.13.15.1.1.1.2|2|2 +1.3.6.1.4.1.2021.13.15.1.1.1.3|2|3 +1.3.6.1.4.1.2021.13.15.1.1.1.4|2|4 +1.3.6.1.4.1.2021.13.15.1.1.1.5|2|5 +1.3.6.1.4.1.2021.13.15.1.1.1.6|2|6 +1.3.6.1.4.1.2021.13.15.1.1.1.7|2|7 +1.3.6.1.4.1.2021.13.15.1.1.1.8|2|8 +1.3.6.1.4.1.2021.13.15.1.1.1.9|2|9 +1.3.6.1.4.1.2021.13.15.1.1.1.10|2|10 +1.3.6.1.4.1.2021.13.15.1.1.1.11|2|11 +1.3.6.1.4.1.2021.13.15.1.1.1.12|2|12 +1.3.6.1.4.1.2021.13.15.1.1.1.13|2|13 +1.3.6.1.4.1.2021.13.15.1.1.1.14|2|14 +1.3.6.1.4.1.2021.13.15.1.1.1.15|2|15 +1.3.6.1.4.1.2021.13.15.1.1.1.16|2|16 +1.3.6.1.4.1.2021.13.15.1.1.1.17|2|17 +1.3.6.1.4.1.2021.13.15.1.1.1.18|2|18 +1.3.6.1.4.1.2021.13.15.1.1.1.19|2|19 +1.3.6.1.4.1.2021.13.15.1.1.1.20|2|20 +1.3.6.1.4.1.2021.13.15.1.1.1.21|2|21 +1.3.6.1.4.1.2021.13.15.1.1.1.22|2|22 +1.3.6.1.4.1.2021.13.15.1.1.1.23|2|23 +1.3.6.1.4.1.2021.13.15.1.1.1.24|2|24 +1.3.6.1.4.1.2021.13.15.1.1.1.25|2|25 +1.3.6.1.4.1.2021.13.15.1.1.1.26|2|26 +1.3.6.1.4.1.2021.13.15.1.1.1.27|2|27 +1.3.6.1.4.1.2021.13.15.1.1.1.28|2|28 +1.3.6.1.4.1.2021.13.15.1.1.2.1|4|loop0 +1.3.6.1.4.1.2021.13.15.1.1.2.2|4|loop1 +1.3.6.1.4.1.2021.13.15.1.1.2.3|4|loop2 +1.3.6.1.4.1.2021.13.15.1.1.2.4|4|loop3 +1.3.6.1.4.1.2021.13.15.1.1.2.5|4|loop4 +1.3.6.1.4.1.2021.13.15.1.1.2.6|4|loop5 +1.3.6.1.4.1.2021.13.15.1.1.2.7|4|loop6 +1.3.6.1.4.1.2021.13.15.1.1.2.8|4|loop7 +1.3.6.1.4.1.2021.13.15.1.1.2.9|4|nbd0 +1.3.6.1.4.1.2021.13.15.1.1.2.10|4|nbd1 +1.3.6.1.4.1.2021.13.15.1.1.2.11|4|nbd2 +1.3.6.1.4.1.2021.13.15.1.1.2.12|4|nbd3 +1.3.6.1.4.1.2021.13.15.1.1.2.13|4|nbd4 +1.3.6.1.4.1.2021.13.15.1.1.2.14|4|nbd5 +1.3.6.1.4.1.2021.13.15.1.1.2.15|4|nbd6 +1.3.6.1.4.1.2021.13.15.1.1.2.16|4|nbd7 +1.3.6.1.4.1.2021.13.15.1.1.2.17|4|nbd8 +1.3.6.1.4.1.2021.13.15.1.1.2.18|4|nbd9 +1.3.6.1.4.1.2021.13.15.1.1.2.19|4|nbd10 +1.3.6.1.4.1.2021.13.15.1.1.2.20|4|nbd11 +1.3.6.1.4.1.2021.13.15.1.1.2.21|4|nbd12 +1.3.6.1.4.1.2021.13.15.1.1.2.22|4|nbd13 +1.3.6.1.4.1.2021.13.15.1.1.2.23|4|nbd14 +1.3.6.1.4.1.2021.13.15.1.1.2.24|4|nbd15 +1.3.6.1.4.1.2021.13.15.1.1.2.25|4|sda +1.3.6.1.4.1.2021.13.15.1.1.2.26|4|sda1 +1.3.6.1.4.1.2021.13.15.1.1.2.27|4|sr0 +1.3.6.1.4.1.2021.13.15.1.1.2.28|4|sr1 +1.3.6.1.4.1.2021.13.15.1.1.3.1|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.2|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.3|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.4|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.5|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.6|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.7|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.8|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.9|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.10|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.11|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.12|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.13|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.14|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.15|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.16|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.17|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.18|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.19|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.20|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.21|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.22|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.23|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.24|65|0 +1.3.6.1.4.1.2021.13.15.1.1.3.25|65|1519135744 +1.3.6.1.4.1.2021.13.15.1.1.3.26|65|169962496 +1.3.6.1.4.1.2021.13.15.1.1.3.27|65|185944064 +1.3.6.1.4.1.2021.13.15.1.1.3.28|65|167936 +1.3.6.1.4.1.2021.13.15.1.1.4.1|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.2|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.3|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.4|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.5|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.6|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.7|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.8|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.9|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.10|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.11|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.12|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.13|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.14|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.15|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.16|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.17|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.18|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.19|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.20|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.21|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.22|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.23|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.24|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.25|65|2413195264 +1.3.6.1.4.1.2021.13.15.1.1.4.26|65|2412113920 +1.3.6.1.4.1.2021.13.15.1.1.4.27|65|0 +1.3.6.1.4.1.2021.13.15.1.1.4.28|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.1|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.2|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.3|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.4|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.5|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.6|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.7|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.8|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.9|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.10|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.11|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.12|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.13|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.14|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.15|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.16|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.17|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.18|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.19|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.20|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.21|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.22|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.23|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.24|65|0 +1.3.6.1.4.1.2021.13.15.1.1.5.25|65|40466 +1.3.6.1.4.1.2021.13.15.1.1.5.26|65|19699 +1.3.6.1.4.1.2021.13.15.1.1.5.27|65|2865 +1.3.6.1.4.1.2021.13.15.1.1.5.28|65|7 +1.3.6.1.4.1.2021.13.15.1.1.6.1|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.2|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.3|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.4|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.5|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.6|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.7|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.8|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.9|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.10|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.11|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.12|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.13|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.14|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.15|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.16|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.17|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.18|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.19|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.20|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.21|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.22|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.23|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.24|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.25|65|44353 +1.3.6.1.4.1.2021.13.15.1.1.6.26|65|31819 +1.3.6.1.4.1.2021.13.15.1.1.6.27|65|0 +1.3.6.1.4.1.2021.13.15.1.1.6.28|65|0 +1.3.6.1.4.1.2021.13.15.1.1.9.1|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.2|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.3|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.4|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.5|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.6|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.7|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.8|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.9|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.10|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.11|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.12|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.13|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.14|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.15|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.16|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.17|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.18|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.19|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.20|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.21|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.22|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.23|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.24|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.25|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.26|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.27|2|0 +1.3.6.1.4.1.2021.13.15.1.1.9.28|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.1|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.2|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.3|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.4|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.5|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.6|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.7|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.8|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.9|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.10|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.11|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.12|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.13|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.14|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.15|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.16|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.17|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.18|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.19|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.20|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.21|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.22|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.23|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.24|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.25|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.26|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.27|2|0 +1.3.6.1.4.1.2021.13.15.1.1.10.28|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.1|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.2|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.3|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.4|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.5|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.6|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.7|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.8|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.9|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.10|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.11|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.12|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.13|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.14|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.15|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.16|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.17|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.18|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.19|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.20|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.21|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.22|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.23|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.24|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.25|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.26|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.27|2|0 +1.3.6.1.4.1.2021.13.15.1.1.11.28|2|0 +1.3.6.1.4.1.2021.13.15.1.1.12.1|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.2|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.3|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.4|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.5|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.6|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.7|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.8|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.9|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.10|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.11|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.12|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.13|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.14|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.15|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.16|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.17|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.18|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.19|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.20|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.21|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.22|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.23|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.24|70|0 +1.3.6.1.4.1.2021.13.15.1.1.12.25|70|1519135744 +1.3.6.1.4.1.2021.13.15.1.1.12.26|70|169962496 +1.3.6.1.4.1.2021.13.15.1.1.12.27|70|185944064 +1.3.6.1.4.1.2021.13.15.1.1.12.28|70|167936 +1.3.6.1.4.1.2021.13.15.1.1.13.1|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.2|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.3|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.4|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.5|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.6|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.7|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.8|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.9|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.10|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.11|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.12|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.13|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.14|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.15|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.16|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.17|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.18|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.19|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.20|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.21|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.22|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.23|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.24|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.25|70|2413195264 +1.3.6.1.4.1.2021.13.15.1.1.13.26|70|2412113920 +1.3.6.1.4.1.2021.13.15.1.1.13.27|70|0 +1.3.6.1.4.1.2021.13.15.1.1.13.28|70|0 +1.3.6.1.4.1.2021.16.1.0|2|250 +1.3.6.1.4.1.2021.100.1.0|2|1 +1.3.6.1.4.1.2021.100.2.0|4x|352e372e32 +1.3.6.1.4.1.2021.100.3.0|4x|244461746524 +1.3.6.1.4.1.2021.100.4.0|4x|4d6f6e204f63742020312030393a35373a32352032303138 +1.3.6.1.4.1.2021.100.5.0|4x|24496424 +1.3.6.1.4.1.2021.100.6.0|4x|272d2d6275696c643d7838365f36342d7265646861742d6c696e75782d676e752720272d2d686f73743d7838365f36342d7265646861742d6c696e75782d676e752720272d2d70726f6772616d2d7072656669783d2720272d2d64697361626c652d646570656e64656e63792d747261636b696e672720272d2d7072656669783d2f7573722720272d2d657865632d7072656669783d2f7573722720272d2d62696e6469723d2f7573722f62696e2720272d2d7362696e6469723d2f7573722f7362696e2720272d2d646174616469723d2f7573722f73686172652720272d2d696e636c7564656469723d2f7573722f696e636c7564652720272d2d6c69626469723d2f7573722f6c696236342720272d2d6c6962657865636469723d2f7573722f6c6962657865632720272d2d6c6f63616c73746174656469723d2f7661722720272d2d73686172656473746174656469723d2f7661722f6c69622720272d2d6d616e6469723d2f7573722f73686172652f6d616e2720272d2d696e666f6469723d2f7573722f73686172652f696e666f2720272d2d64697361626c652d7374617469632720272d2d656e61626c652d7368617265642720272d2d776974682d63666c6167733d2d4f32202d67202d70697065202d57616c6c202d57702c2d445f464f52544946595f534f555243453d32202d66657863657074696f6e73202d66737461636b2d70726f746563746f722d7374726f6e67202d2d706172616d3d7373702d6275666665722d73697a653d34202d677265636f72642d6763632d73776974636865732020202d6d3634202d6d74756e653d67656e65726963202d445f52504d5f345f345f434f4d5041542720272d2d776974682d6c64666c6167733d2d576c2c2d7a2c72656c726f202d576c2c2d7a2c6e6f772720272d2d776974682d7379732d6c6f636174696f6e3d556e6b6e6f776e2720272d2d776974682d6c6f6766696c653d2f7661722f6c6f672f736e6d70642e6c6f672720272d2d776974682d70657273697374656e742d6469726563746f72793d2f7661722f6c69622f6e65742d736e6d702720272d2d776974682d6d69622d6d6f64756c65733d686f7374206167656e747820736d75782020202020207563642d736e6d702f6469736b696f207463702d6d6962207564702d6d6962206d696249492f6d74615f73656e646d61696c20202020202069702d6d69622f69707634496e746572666163655461626c652069702d6d69622f69707636496e746572666163655461626c6520202020202069702d6d69622f6970416464726573735072656669785461626c652f6970416464726573735072656669785461626c6520202020202069702d6d69622f697044656661756c74526f757465725461626c652f6970446566 +1.3.6.1.4.1.2021.100.10.0|2|0 +1.3.6.1.4.1.2021.100.11.0|2|0 +1.3.6.1.4.1.2021.100.12.0|2|0 +1.3.6.1.4.1.2021.100.13.0|2|0 +1.3.6.1.4.1.2021.100.20.0|2|0 +1.3.6.1.4.1.2021.101.1.0|2|0 +1.3.6.1.4.1.2021.101.2.0|4|snmp +1.3.6.1.4.1.2021.101.100.0|2|0 +1.3.6.1.4.1.2021.101.101.0|4| +1.3.6.1.4.1.8072.1.2.1.1.4.0.1.0.0|4| +1.3.6.1.4.1.8072.1.2.1.1.4.0.1.1.0|4| +1.3.6.1.4.1.8072.1.2.1.1.4.0.1.2.0|4| +1.3.6.1.4.1.8072.1.2.1.1.4.0.7.1.3.6.1.2.1.4.127|4|ip +1.3.6.1.4.1.8072.1.2.1.1.4.0.7.1.3.6.1.2.1.5.127|4|icmp +1.3.6.1.4.1.8072.1.2.1.1.4.0.7.1.3.6.1.2.1.6.127|4|tcp +1.3.6.1.4.1.8072.1.2.1.1.4.0.7.1.3.6.1.2.1.7.127|4|udp +1.3.6.1.4.1.8072.1.2.1.1.4.0.7.1.3.6.1.2.1.11.127|4x|6d696249492f736e6d70 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.1.127|4x|6d696249492f7379734465736372 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.2.127|4x|6d696249492f7379734f626a6563744944 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.3.127|4x|6d696249492f737973557054696d65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.4.127|4x|6d696249492f737973436f6e74616374 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.5.127|4x|6d696249492f7379734e616d65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.6.127|4x|6d696249492f7379734c6f636174696f6e +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.7.127|4x|6d696249492f7379735365727669636573 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.8.127|4x|6d696249492f7379734f524c6173744368616e6765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.1.9.127|4x|6d696249492f7379734f525461626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.2.1.127|4x|6966206e756d626572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.2.2.127|4|ifTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.1.127|4|ipForwarding +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.25.127|4|ipv6IpForwarding +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.27.127|4|ipv4TableLastChanged +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.28.127|4|ipv4InterfaceTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.29.127|4|ipv6TableLastChanged +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.30.127|4|ipv6InterfaceTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.32.127|4|ipAddressPrefixTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.33.127|4|ipAddressSpinLock +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.34.127|4|ipAddressTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.35.127|4|inetNetToMediaTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.36.127|4|ipv6ScopeZoneIndexTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.4.37.127|4|ipDefaultRouterTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.5.29.127|4|icmpStatsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.5.30.127|4|icmpMsgStatsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.6.13.127|4|tcpTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.6.19.127|4|tcpConnectionTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.6.20.127|4|tcpListenerTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.7.5.127|4|udpTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.2.1.7.7.127|4|udpEndpointTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.4.1.2021.4.127|4|memory +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.4.1.2021.11.127|4|vmstat +1.3.6.1.4.1.8072.1.2.1.1.4.0.8.1.3.6.1.6.3.12.1.127|4x|7461726765745f636f756e74657273 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.2.0.127|4|ipDefaultTTL +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.13.0.127|4|ipReasmTimeout +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.24.4.127|4|ipCidrRouteTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.24.7.127|4|inetCidrRouteTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.26.0.127|4|ipv6IpDefaultHopLimit +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.31.1.127|4|ipSystemStatsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.31.2.127|4|ipIfStatsTableLastChanged +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.4.31.3.127|4|ipIfStatsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.10.7.2.127|4|dot3StatsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.11.30.0.127|4x|6d696249492f736e6d70456e61626c6541757468656e5472617073 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.16.1.1.127|4|etherStatsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.1.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.2.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.3.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.4.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.5.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.6.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.1.7.127|4x|686f73742f68725f73797374656d +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.2.2.127|4x|686f73742f68724d656d6f727953697a65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.4.2.127|4|hrSWRunTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.5.1.127|4|hrSWRunPerfTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.25.6.3.127|4|hrSWInstalledTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.31.1.1.127|4|ifXTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.31.1.5.127|4|ifTableLastChanged +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.55.1.1.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.55.1.2.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.55.1.3.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.55.1.4.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.63.1.2.127|4|schedTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.88.1.1.127|4|mteResource +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.1.127|4|sctpStats +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.2.127|4|sctpParams +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.3.127|4|sctpAssocTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.4.127|4|sctpAssocLocalAddrTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.5.127|4|sctpAssocRemAddrTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.6.127|4|sctpLookupLocalPortTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.7.127|4|sctpLookupRemPortTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.8.127|4|sctpLookupRemHostNameTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.9.127|4|sctpLookupRemPrimIPAddrTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.2.1.104.1.10.127|4|sctpLookupRemIPAddrTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.4.100.127|4|memSwapError +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.4.101.127|4|memSwapErrMsg +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.16.1.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.1.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.2.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.3.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.4.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.5.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.6.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.10.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.11.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.12.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.13.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.100.20.127|4x|7563642d736e6d702f76657273696f6e696e666f +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.101.1.127|4x|7563642d736e6d702f6572726f726d6962 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.101.2.127|4x|7563642d736e6d702f6572726f726d6962 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.101.100.127|4x|7563642d736e6d702f6572726f726d6962 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.4.1.2021.101.101.127|4x|7563642d736e6d702f6572726f726d6962 +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.6.3.11.2.1.127|4|snmpMPDStats +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.6.3.12.1.1.127|4x|7461726765742f736e6d705461726765745370696e4c6f636b +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.6.3.13.1.3.127|4|snmpNotifyFilterTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.6.3.15.1.1.127|4|usmStats +1.3.6.1.4.1.8072.1.2.1.1.4.0.9.1.3.6.1.6.3.16.1.1.127|4x|7661636d5f636f6e74657874 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.3.1.1.1.127|4x|6d696249492f6174 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.3.1.1.2.127|4x|6d696249492f6174 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.3.1.1.3.127|4x|6d696249492f6174 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.20.1.1.127|4x|6d696249492f697061646472 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.20.1.2.127|4x|6d696249492f697061646472 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.20.1.3.127|4x|6d696249492f697061646472 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.20.1.4.127|4x|6d696249492f697061646472 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.20.1.5.127|4x|6d696249492f697061646472 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.1.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.2.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.3.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.4.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.5.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.6.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.7.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.8.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.9.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.10.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.11.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.12.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.21.1.13.127|4x|6d696249492f6970726f757465 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.22.1.1.127|4x|6d696249492f69706d65646961 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.22.1.2.127|4x|6d696249492f69706d65646961 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.22.1.3.127|4x|6d696249492f69706d65646961 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.22.1.4.127|4x|6d696249492f69706d65646961 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.4.24.6.0.127|4x|726f757465206e756d626572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.6.16.1.6.127|4x|6d696249492f69707636746370 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.7.6.1.3.127|4x|6d696249492f69707636756470 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.1.1.1.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.1.1.2.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.1.1.3.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.1.1.4.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.1.1.5.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.1.1.6.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.2.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.3.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.4.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.5.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.6.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.7.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.8.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.25.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.28.2.1.31.127|4x|6d696249492f6d74615f73656e646d61696c +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.2.1.127|4|mteTriggerFailures +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.2.2.127|4|mteTriggerTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.2.3.127|4|mteTriggerDeltaTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.2.4.127|4|mteTriggerExistenceTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.2.5.127|4|mteTriggerBooleanTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.2.6.127|4|mteTriggerThresholdTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.3.1.127|4|mteObjectsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.4.2.127|4|mteEventTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.4.3.127|4|mteEventNotificationTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.88.1.4.4.127|4|mteEventSetTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.92.1.3.1.127|4|nlmLogTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.2.1.92.1.3.2.127|4|nlmLogVariableTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.1.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.2.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.3.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.4.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.5.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.100.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.101.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.102.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.2.1.103.127|4x|7563642d736e6d702f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.1.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.2.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.3.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.100.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.101.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.102.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.8.1.103.127|4x|7563642d657874656e7369626c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.1.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.2.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.3.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.4.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.5.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.6.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.7.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.8.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.9.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.10.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.11.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.12.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.13.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.14.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.15.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.16.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.100.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.9.1.101.127|4x|7563642d736e6d702f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.1.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.2.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.3.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.4.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.5.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.6.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.100.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.10.1.101.127|4x|7563642d736e6d702f6c6f6164617665 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.13.14.1.127|4|dlmod +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.13.16.2.127|4|lmTempSensorsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.13.16.3.127|4|lmFanSensorsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.13.16.4.127|4|lmVoltSensorsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.13.16.5.127|4|lmMiscSensorsTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.15.1.1.127|4x|7563642d736e6d702f66696c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.15.1.2.127|4x|7563642d736e6d702f66696c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.15.1.3.127|4x|7563642d736e6d702f66696c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.15.1.4.127|4x|7563642d736e6d702f66696c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.15.1.100.127|4x|7563642d736e6d702f66696c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.2021.15.1.101.127|4x|7563642d736e6d702f66696c65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.8072.1.2.1.127|4|nsModuleTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.8072.1.5.1.127|4|nsCacheTimeout +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.8072.1.5.2.127|4|nsCacheEnabled +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.8072.1.5.3.127|4|tzCacheTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.8072.1.8.1.127|4|nsTransactionTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.4.1.8072.1.9.1.127|4|nsVacmAccessTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.1.1.6.1.127|4|snmpSetSerialNo +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.10.2.1.1.127|4x|736e6d7076332f736e6d70456e67696e65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.10.2.1.2.127|4x|736e6d7076332f736e6d70456e67696e65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.10.2.1.3.127|4x|736e6d7076332f736e6d70456e67696e65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.10.2.1.4.127|4x|736e6d7076332f736e6d70456e67696e65 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.15.1.2.1.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.10.1.3.6.1.6.3.16.1.5.1.127|4x|6d696249492f7661636d3a76696577 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.1.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.2.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.3.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.4.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.5.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.6.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.2.3.1.7.127|4x|686f73742f68725f73746f72616765 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.2.1.1.127|4x|686f73742f68725f646576696365 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.2.1.2.127|4x|686f73742f68725f646576696365 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.2.1.3.127|4x|686f73742f68725f646576696365 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.2.1.4.127|4x|686f73742f68725f646576696365 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.2.1.5.127|4x|686f73742f68725f646576696365 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.2.1.6.127|4x|686f73742f68725f646576696365 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.3.1.1.127|4x|686f73742f68725f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.3.1.2.127|4x|686f73742f68725f70726f63 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.4.1.1.127|4x|686f73742f68725f6e6574776f726b +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.5.1.1.127|4x|686f73742f68725f7072696e74 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.5.1.2.127|4x|686f73742f68725f7072696e74 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.6.1.1.127|4x|686f73742f68725f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.6.1.2.127|4x|686f73742f68725f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.6.1.3.127|4x|686f73742f68725f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.6.1.4.127|4x|686f73742f68725f6469736b +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.7.1.1.127|4x|686f73742f68725f706172746974696f6e +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.7.1.2.127|4x|686f73742f68725f706172746974696f6e +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.7.1.3.127|4x|686f73742f68725f706172746974696f6e +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.7.1.4.127|4x|686f73742f68725f706172746974696f6e +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.7.1.5.127|4x|686f73742f68725f706172746974696f6e +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.1.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.2.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.3.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.4.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.5.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.6.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.7.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.8.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.25.3.8.1.9.127|4x|686f73742f68725f66696c65737973 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.2.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.3.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.4.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.5.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.6.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.7.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.8.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.9.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.10.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.5.1.11.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.1.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.2.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.3.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.4.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.5.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.6.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.7.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.8.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.9.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.10.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.11.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.12.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.13.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.14.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.15.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.16.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.17.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.18.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.19.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.55.1.6.1.20.127|4x|6d696249492f69707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.1.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.2.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.3.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.4.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.5.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.6.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.7.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.8.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.9.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.10.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.11.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.12.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.13.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.14.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.15.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.16.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.17.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.18.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.19.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.20.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.21.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.22.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.23.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.24.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.25.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.26.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.27.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.28.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.29.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.30.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.31.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.32.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.33.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.56.1.1.1.34.127|4x|6d696249492f69636d707636 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.92.1.1.1.0.127|4|nlmConfigGlobalEntryLimit +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.92.1.1.2.0.127|4|nlmConfigGlobalAgeOut +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.92.1.2.1.0.127|4|nlmStatsGlobalNotificationsLogged +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.2.1.92.1.2.2.0.127|4|nlmStatsGlobalNotificationsBumped +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.1.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.2.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.3.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.4.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.5.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.6.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.7.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.8.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.9.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.10.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.11.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.100.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.2021.16.2.1.101.127|4x|7563642d736e6d702f6c6f676d61746368 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.3.2.1.127|4|nsExtendNumEntries +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.3.2.2.127|4|nsExtendConfigTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.3.2.3.127|4|nsExtendOut1Table +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.3.2.4.127|4|nsExtendOut2Table +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.7.1.1.127|4|nsDebugEnabled +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.7.1.2.127|4|nsDebugOutputAll +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.7.1.3.127|4|nsDebugDumpPdu +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.7.1.4.127|4|tzDebugTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.4.1.8072.1.7.2.1.127|4|tzLoggingTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.2.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.3.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.4.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.5.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.6.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.7.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.8.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.2.1.9.127|4x|7461726765742f736e6d7054617267657441646472456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.3.1.2.127|4x|7461726765742f736e6d70546172676574506172616d73456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.3.1.3.127|4x|7461726765742f736e6d70546172676574506172616d73456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.3.1.4.127|4x|7461726765742f736e6d70546172676574506172616d73456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.3.1.5.127|4x|7461726765742f736e6d70546172676574506172616d73456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.3.1.6.127|4x|7461726765742f736e6d70546172676574506172616d73456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.12.1.3.1.7.127|4x|7461726765742f736e6d70546172676574506172616d73456e747279 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.1.1.2.127|4|snmpNotifyTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.1.1.3.127|4|snmpNotifyTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.1.1.4.127|4|snmpNotifyTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.1.1.5.127|4|snmpNotifyTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.2.1.1.127|4|snmpNotifyFilterProfileTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.2.1.2.127|4|snmpNotifyFilterProfileTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.13.1.2.1.3.127|4|snmpNotifyFilterProfileTable +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.2.1.3.127|4x|6d696249492f7661636d3a7365633267726f7570 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.2.1.4.127|4x|6d696249492f7661636d3a7365633267726f7570 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.2.1.5.127|4x|6d696249492f7661636d3a7365633267726f7570 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.4.1.4.127|4x|6d696249492f7661636d3a616363657373 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.4.1.5.127|4x|6d696249492f7661636d3a616363657373 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.4.1.6.127|4x|6d696249492f7661636d3a616363657373 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.4.1.7.127|4x|6d696249492f7661636d3a616363657373 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.4.1.8.127|4x|6d696249492f7661636d3a616363657373 +1.3.6.1.4.1.8072.1.2.1.1.4.0.11.1.3.6.1.6.3.16.1.4.1.9.127|4x|6d696249492f7661636d3a616363657373 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.14.2.1.2.127|4|dlmod +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.14.2.1.3.127|4|dlmod +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.14.2.1.4.127|4|dlmod +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.14.2.1.5.127|4|dlmod +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.1.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.2.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.3.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.4.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.5.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.6.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.9.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.10.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.11.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.12.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.4.1.2021.13.15.1.1.13.127|4|diskio +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.3.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.4.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.5.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.6.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.7.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.8.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.9.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.10.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.11.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.12.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.15.1.2.2.1.13.127|4x|736e6d7076332f75736d55736572 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.16.1.5.2.1.3.127|4x|6d696249492f7661636d3a76696577 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.16.1.5.2.1.4.127|4x|6d696249492f7661636d3a76696577 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.16.1.5.2.1.5.127|4x|6d696249492f7661636d3a76696577 +1.3.6.1.4.1.8072.1.2.1.1.4.0.12.1.3.6.1.6.3.16.1.5.2.1.6.127|4x|6d696249492f7661636d3a76696577 +1.3.6.1.4.1.8072.1.2.1.1.5.0.1.0.0|4x|a00002 +1.3.6.1.4.1.8072.1.2.1.1.5.0.1.1.0|4x|a00002 +1.3.6.1.4.1.8072.1.2.1.1.5.0.1.2.0|4x|a00002 +1.3.6.1.4.1.8072.1.2.1.1.5.0.7.1.3.6.1.2.1.4.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.7.1.3.6.1.2.1.5.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.7.1.3.6.1.2.1.6.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.7.1.3.6.1.2.1.7.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.7.1.3.6.1.2.1.11.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.3.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.7.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.8.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.1.9.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.2.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.2.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.25.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.27.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.28.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.29.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.30.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.32.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.33.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.34.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.35.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.36.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.4.37.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.5.29.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.5.30.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.6.13.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.6.19.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.6.20.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.7.5.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.2.1.7.7.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.4.1.2021.4.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.4.1.2021.11.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.8.1.3.6.1.6.3.12.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.2.0.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.13.0.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.24.4.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.24.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.26.0.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.31.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.31.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.4.31.3.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.10.7.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.11.30.0.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.16.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.2.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.4.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.5.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.25.6.3.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.31.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.31.1.5.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.55.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.55.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.55.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.55.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.63.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.88.1.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.4.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.5.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.6.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.7.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.8.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.9.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.2.1.104.1.10.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.4.100.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.4.101.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.16.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.100.20.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.101.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.101.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.101.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.4.1.2021.101.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.6.3.11.2.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.6.3.12.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.6.3.13.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.6.3.15.1.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.9.1.3.6.1.6.3.16.1.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.3.1.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.3.1.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.3.1.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.20.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.20.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.20.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.20.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.20.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.21.1.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.22.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.22.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.22.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.22.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.4.24.6.0.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.6.16.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.7.6.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.1.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.1.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.1.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.1.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.1.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.1.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.25.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.28.2.1.31.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.2.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.2.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.2.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.2.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.2.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.2.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.3.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.4.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.4.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.88.1.4.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.92.1.3.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.2.1.92.1.3.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.102.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.2.1.103.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.102.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.8.1.103.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.14.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.15.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.16.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.9.1.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.10.1.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.13.14.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.13.16.2.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.13.16.3.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.13.16.4.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.13.16.5.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.15.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.15.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.15.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.15.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.15.1.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.2021.15.1.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.8072.1.2.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.8072.1.5.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.8072.1.5.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.8072.1.5.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.8072.1.8.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.4.1.8072.1.9.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.1.1.6.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.10.2.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.10.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.10.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.10.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.15.1.2.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.10.1.3.6.1.6.3.16.1.5.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.2.3.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.2.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.2.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.3.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.3.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.4.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.5.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.5.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.6.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.6.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.6.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.6.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.7.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.7.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.7.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.7.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.7.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.25.3.8.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.5.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.14.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.15.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.16.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.17.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.18.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.19.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.55.1.6.1.20.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.14.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.15.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.16.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.17.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.18.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.19.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.20.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.21.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.22.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.23.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.24.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.25.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.26.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.27.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.28.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.29.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.30.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.31.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.32.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.33.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.56.1.1.1.34.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.92.1.1.1.0.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.92.1.1.2.0.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.92.1.2.1.0.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.2.1.92.1.2.2.0.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.100.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.2021.16.2.1.101.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.3.2.1.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.3.2.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.3.2.3.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.3.2.4.127|4x|8000 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.7.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.7.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.7.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.7.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.4.1.8072.1.7.2.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.2.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.3.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.3.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.3.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.3.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.3.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.12.1.3.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.1.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.1.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.1.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.1.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.2.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.13.1.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.4.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.4.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.4.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.4.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.4.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.11.1.3.6.1.6.3.16.1.4.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.14.2.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.14.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.14.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.14.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.1.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.2.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.4.1.2021.13.15.1.1.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.7.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.8.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.9.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.10.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.11.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.12.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.15.1.2.2.1.13.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.16.1.5.2.1.3.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.16.1.5.2.1.4.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.16.1.5.2.1.5.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.5.0.12.1.3.6.1.6.3.16.1.5.2.1.6.127|4x|c00001 +1.3.6.1.4.1.8072.1.2.1.1.6.0.1.0.0|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.1.1.0|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.1.2.0|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.7.1.3.6.1.2.1.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.7.1.3.6.1.2.1.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.7.1.3.6.1.2.1.6.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.7.1.3.6.1.2.1.7.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.7.1.3.6.1.2.1.11.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.6.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.7.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.8.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.1.9.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.2.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.2.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.25.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.27.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.28.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.29.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.30.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.32.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.33.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.34.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.35.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.36.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.4.37.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.5.29.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.5.30.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.6.13.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.6.19.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.6.20.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.7.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.2.1.7.7.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.4.1.2021.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.4.1.2021.11.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.8.1.3.6.1.6.3.12.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.2.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.13.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.24.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.24.7.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.26.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.31.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.31.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.4.31.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.10.7.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.11.30.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.16.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.2.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.4.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.5.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.25.6.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.31.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.31.1.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.55.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.55.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.55.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.55.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.63.1.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.88.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.6.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.7.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.8.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.9.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.2.1.104.1.10.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.4.100.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.4.101.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.16.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.100.20.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.101.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.101.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.101.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.4.1.2021.101.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.6.3.11.2.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.6.3.12.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.6.3.13.1.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.6.3.15.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.9.1.3.6.1.6.3.16.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.3.1.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.3.1.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.3.1.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.20.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.20.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.20.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.20.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.20.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.21.1.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.22.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.22.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.22.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.22.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.4.24.6.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.6.16.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.7.6.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.1.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.1.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.1.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.1.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.1.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.1.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.25.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.28.2.1.31.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.2.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.2.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.2.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.2.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.2.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.2.6.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.3.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.4.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.4.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.88.1.4.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.92.1.3.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.2.1.92.1.3.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.102.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.2.1.103.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.102.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.8.1.103.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.14.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.15.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.16.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.9.1.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.10.1.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.13.14.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.13.16.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.13.16.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.13.16.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.13.16.5.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.15.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.15.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.15.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.15.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.15.1.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.2021.15.1.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.8072.1.2.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.8072.1.5.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.8072.1.5.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.8072.1.5.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.8072.1.8.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.4.1.8072.1.9.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.1.1.6.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.10.2.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.10.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.10.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.10.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.15.1.2.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.10.1.3.6.1.6.3.16.1.5.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.2.3.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.2.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.2.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.3.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.3.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.4.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.5.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.5.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.6.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.6.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.6.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.6.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.7.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.7.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.7.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.7.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.7.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.25.3.8.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.5.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.14.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.15.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.16.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.17.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.18.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.19.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.55.1.6.1.20.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.14.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.15.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.16.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.17.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.18.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.19.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.20.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.21.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.22.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.23.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.24.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.25.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.26.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.27.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.28.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.29.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.30.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.31.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.32.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.33.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.56.1.1.1.34.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.92.1.1.1.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.92.1.1.2.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.92.1.2.1.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.2.1.92.1.2.2.0.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.100.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.2021.16.2.1.101.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.3.2.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.3.2.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.3.2.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.3.2.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.7.1.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.7.1.2.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.7.1.3.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.7.1.4.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.4.1.8072.1.7.2.1.127|2|0 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.2.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.3.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.3.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.3.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.3.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.3.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.12.1.3.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.1.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.1.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.1.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.1.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.2.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.13.1.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.4.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.4.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.4.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.4.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.4.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.11.1.3.6.1.6.3.16.1.4.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.14.2.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.14.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.14.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.14.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.1.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.2.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.4.1.2021.13.15.1.1.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.7.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.8.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.9.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.10.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.11.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.12.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.15.1.2.2.1.13.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.16.1.5.2.1.3.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.16.1.5.2.1.4.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.16.1.5.2.1.5.127|2|-1 +1.3.6.1.4.1.8072.1.2.1.1.6.0.12.1.3.6.1.6.3.16.1.5.2.1.6.127|2|-1 +1.3.6.1.4.1.8072.1.3.2.1.0|2|0 +1.3.6.1.4.1.8072.1.5.1.0|2|5 +1.3.6.1.4.1.8072.1.5.2.0|2|2 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.2.2|2|3 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.24.4|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.24.7|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.31.1|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.31.3|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.32|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.34|2|30 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.35|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.36|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4.37|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.4|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.5.29|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.5.30|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.5|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.6.13|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.6.19|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.6.20|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.6|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.7.5|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.7.7|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.7|2|5 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.10.7.2|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.16.1.1|2|60 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.25.4.2|2|30 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.25.6.3|2|30 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.104.1.1|2|30 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.2.1.104.1.3|2|30 +1.3.6.1.4.1.8072.1.5.3.1.2.1.3.6.1.4.1.8072.1.31|2|5 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.2.2|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.24.4|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.24.7|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.31.1|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.31.3|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.32|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.34|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.35|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.36|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4.37|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.4|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.5.29|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.5.30|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.5|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.6.13|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.6.19|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.6.20|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.6|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.7.5|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.7.7|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.7|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.10.7.2|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.16.1.1|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.25.4.2|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.25.6.3|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.104.1.1|2|3 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.2.1.104.1.3|2|4 +1.3.6.1.4.1.8072.1.5.3.1.3.1.3.6.1.4.1.8072.1.31|2|4 +1.3.6.1.4.1.8072.1.7.1.1.0|2|2 +1.3.6.1.4.1.8072.1.7.1.2.0|2|2 +1.3.6.1.4.1.8072.1.7.1.3.0|2|1 +1.3.6.1.4.1.8072.1.7.2.1.1.3.7.47.118.97.114.47.108.111.103.47.115.110.109.112.100.46.108.111.103|2|3 +1.3.6.1.4.1.8072.1.7.2.1.1.4.7.47.118.97.114.47.108.111.103.47.115.110.109.112.100.46.108.111.103|2|0 +1.3.6.1.4.1.8072.1.7.2.1.1.5.7.47.118.97.114.47.108.111.103.47.115.110.109.112.100.46.108.111.103|2|1 +1.3.6.1.4.1.8072.1.9.1.1.2.8.103.114.112.99.111.109.109.53.0.0.1.4.114.101.97.100|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.8.103.114.112.99.111.109.109.53.0.0.1.5.119.114.105.116.101|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.8.103.114.112.99.111.109.109.53.0.0.1.6.110.111.116.105.102.121|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.9.103.114.112.99.111.109.109.49.48.0.0.1.4.114.101.97.100|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.9.103.114.112.99.111.109.109.49.48.0.0.1.5.119.114.105.116.101|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.9.103.114.112.99.111.109.109.49.48.0.0.1.6.110.111.116.105.102.121|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.4.114.101.97.100|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.5.119.114.105.116.101|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.6.110.111.116.105.102.121|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.4.114.101.97.100|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.5.119.114.105.116.101|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.6.110.111.116.105.102.121|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.4.114.101.97.100|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.5.119.114.105.116.101|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.6.110.111.116.105.102.121|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.4.114.101.97.100|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.5.119.114.105.116.101|2|2 +1.3.6.1.4.1.8072.1.9.1.1.2.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.6.110.111.116.105.102.121|2|2 +1.3.6.1.4.1.8072.1.9.1.1.3.8.103.114.112.99.111.109.109.53.0.0.1.4.114.101.97.100|4x|5f616c6c5f +1.3.6.1.4.1.8072.1.9.1.1.3.8.103.114.112.99.111.109.109.53.0.0.1.5.119.114.105.116.101|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.8.103.114.112.99.111.109.109.53.0.0.1.6.110.111.116.105.102.121|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.9.103.114.112.99.111.109.109.49.48.0.0.1.4.114.101.97.100|4x|5f616c6c5f +1.3.6.1.4.1.8072.1.9.1.1.3.9.103.114.112.99.111.109.109.49.48.0.0.1.5.119.114.105.116.101|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.9.103.114.112.99.111.109.109.49.48.0.0.1.6.110.111.116.105.102.121|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.4.114.101.97.100|4x|5f616c6c5f +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.5.119.114.105.116.101|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.6.110.111.116.105.102.121|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.4.114.101.97.100|4x|5f616c6c5f +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.5.119.114.105.116.101|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.6.110.111.116.105.102.121|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.4.114.101.97.100|4x|5f616c6c5f +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.5.119.114.105.116.101|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.6.110.111.116.105.102.121|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.4.114.101.97.100|4x|5f616c6c5f +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.5.119.114.105.116.101|4|none +1.3.6.1.4.1.8072.1.9.1.1.3.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.6.110.111.116.105.102.121|4|none +1.3.6.1.4.1.8072.1.9.1.1.4.8.103.114.112.99.111.109.109.53.0.0.1.4.114.101.97.100|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.8.103.114.112.99.111.109.109.53.0.0.1.5.119.114.105.116.101|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.8.103.114.112.99.111.109.109.53.0.0.1.6.110.111.116.105.102.121|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.9.103.114.112.99.111.109.109.49.48.0.0.1.4.114.101.97.100|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.9.103.114.112.99.111.109.109.49.48.0.0.1.5.119.114.105.116.101|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.9.103.114.112.99.111.109.109.49.48.0.0.1.6.110.111.116.105.102.121|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.4.114.101.97.100|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.5.119.114.105.116.101|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.6.110.111.116.105.102.121|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.4.114.101.97.100|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.5.119.114.105.116.101|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.6.110.111.116.105.102.121|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.4.114.101.97.100|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.5.119.114.105.116.101|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.6.110.111.116.105.102.121|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.4.114.101.97.100|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.5.119.114.105.116.101|2|4 +1.3.6.1.4.1.8072.1.9.1.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.6.110.111.116.105.102.121|2|4 +1.3.6.1.4.1.8072.1.9.1.1.5.8.103.114.112.99.111.109.109.53.0.0.1.4.114.101.97.100|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.8.103.114.112.99.111.109.109.53.0.0.1.5.119.114.105.116.101|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.8.103.114.112.99.111.109.109.53.0.0.1.6.110.111.116.105.102.121|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.9.103.114.112.99.111.109.109.49.48.0.0.1.4.114.101.97.100|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.9.103.114.112.99.111.109.109.49.48.0.0.1.5.119.114.105.116.101|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.9.103.114.112.99.111.109.109.49.48.0.0.1.6.110.111.116.105.102.121|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.4.114.101.97.100|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.5.119.114.105.116.101|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3.6.110.111.116.105.102.121|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.4.114.101.97.100|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.5.119.114.105.116.101|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3.6.110.111.116.105.102.121|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.4.114.101.97.100|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.5.119.114.105.116.101|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3.6.110.111.116.105.102.121|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.4.114.101.97.100|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.5.119.114.105.116.101|2|1 +1.3.6.1.4.1.8072.1.9.1.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3.6.110.111.116.105.102.121|2|1 +1.3.6.1.4.1.123456789.1.0|4x|332e3134313500 +1.3.6.1.6.3.1.1.6.1.0|2|1980930474 +1.3.6.1.6.3.10.2.1.1.0|4x|80001f8880d66e3d477a46ad5b000000 +1.3.6.1.6.3.10.2.1.2.0|2|1 +1.3.6.1.6.3.10.2.1.3.0|2|42261 +1.3.6.1.6.3.10.2.1.4.0|2|1500 +1.3.6.1.6.3.11.2.1.1.0|65|0 +1.3.6.1.6.3.11.2.1.2.0|65|0 +1.3.6.1.6.3.11.2.1.3.0|65|0 +1.3.6.1.6.3.12.1.1.0|2|0 +1.3.6.1.6.3.12.1.4.0|65|0 +1.3.6.1.6.3.12.1.5.0|65|0 +1.3.6.1.6.3.15.1.1.1.0|65|0 +1.3.6.1.6.3.15.1.1.2.0|65|0 +1.3.6.1.6.3.15.1.1.3.0|65|0 +1.3.6.1.6.3.15.1.1.4.0|65|0 +1.3.6.1.6.3.15.1.1.5.0|65|0 +1.3.6.1.6.3.15.1.1.6.0|65|0 +1.3.6.1.6.3.15.1.2.1.0|2|0 +1.3.6.1.6.3.15.1.2.2.1.3.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4|datadogMD5AES +1.3.6.1.6.3.15.1.2.2.1.3.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4|datadogMD5DES +1.3.6.1.6.3.15.1.2.2.1.3.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4|datadogSHAAES +1.3.6.1.6.3.15.1.2.2.1.3.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4|datadogSHADES +1.3.6.1.6.3.15.1.2.2.1.4.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|6|0.0 +1.3.6.1.6.3.15.1.2.2.1.4.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|6|0.0 +1.3.6.1.6.3.15.1.2.2.1.4.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|6|0.0 +1.3.6.1.6.3.15.1.2.2.1.4.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|6|0.0 +1.3.6.1.6.3.15.1.2.2.1.5.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|6|1.3.6.1.6.3.10.1.1.2 +1.3.6.1.6.3.15.1.2.2.1.5.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|6|1.3.6.1.6.3.10.1.1.2 +1.3.6.1.6.3.15.1.2.2.1.5.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|6|1.3.6.1.6.3.10.1.1.3 +1.3.6.1.6.3.15.1.2.2.1.5.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|6|1.3.6.1.6.3.10.1.1.3 +1.3.6.1.6.3.15.1.2.2.1.6.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.6.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.6.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.6.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.7.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.7.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.7.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.7.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.8.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|6|1.3.6.1.6.3.10.1.2.4 +1.3.6.1.6.3.15.1.2.2.1.8.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|6|1.3.6.1.6.3.10.1.2.2 +1.3.6.1.6.3.15.1.2.2.1.8.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|6|1.3.6.1.6.3.10.1.2.4 +1.3.6.1.6.3.15.1.2.2.1.8.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|6|1.3.6.1.6.3.10.1.2.2 +1.3.6.1.6.3.15.1.2.2.1.9.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.9.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.9.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.9.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.10.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.10.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.10.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.10.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.11.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.11.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.11.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.11.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4| +1.3.6.1.6.3.15.1.2.2.1.12.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|2|3 +1.3.6.1.6.3.15.1.2.2.1.12.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|2|3 +1.3.6.1.6.3.15.1.2.2.1.12.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|2|3 +1.3.6.1.6.3.15.1.2.2.1.12.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|2|3 +1.3.6.1.6.3.15.1.2.2.1.13.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.65.69.83|2|1 +1.3.6.1.6.3.15.1.2.2.1.13.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.77.68.53.68.69.83|2|1 +1.3.6.1.6.3.15.1.2.2.1.13.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.65.69.83|2|1 +1.3.6.1.6.3.15.1.2.2.1.13.17.128.0.31.136.128.214.110.61.71.122.70.173.91.0.0.0.0.13.100.97.116.97.100.111.103.83.72.65.68.69.83|2|1 +1.3.6.1.6.3.16.1.1.1.1.0|4| +1.3.6.1.6.3.16.1.2.1.3.1.5.99.111.109.109.53|4|grpcomm5 +1.3.6.1.6.3.16.1.2.1.3.1.6.99.111.109.109.49.48|4|grpcomm10 +1.3.6.1.6.3.16.1.2.1.3.2.5.99.111.109.109.53|4|grpcomm5 +1.3.6.1.6.3.16.1.2.1.3.2.6.99.111.109.109.49.48|4|grpcomm10 +1.3.6.1.6.3.16.1.2.1.3.3.13.100.97.116.97.100.111.103.77.68.53.65.69.83|4|grpdatadogMD5AES +1.3.6.1.6.3.16.1.2.1.3.3.13.100.97.116.97.100.111.103.77.68.53.68.69.83|4|grpdatadogMD5DES +1.3.6.1.6.3.16.1.2.1.3.3.13.100.97.116.97.100.111.103.83.72.65.65.69.83|4|grpdatadogSHAAES +1.3.6.1.6.3.16.1.2.1.3.3.13.100.97.116.97.100.111.103.83.72.65.68.69.83|4|grpdatadogSHADES +1.3.6.1.6.3.16.1.2.1.4.1.5.99.111.109.109.53|2|4 +1.3.6.1.6.3.16.1.2.1.4.1.6.99.111.109.109.49.48|2|4 +1.3.6.1.6.3.16.1.2.1.4.2.5.99.111.109.109.53|2|4 +1.3.6.1.6.3.16.1.2.1.4.2.6.99.111.109.109.49.48|2|4 +1.3.6.1.6.3.16.1.2.1.4.3.13.100.97.116.97.100.111.103.77.68.53.65.69.83|2|4 +1.3.6.1.6.3.16.1.2.1.4.3.13.100.97.116.97.100.111.103.77.68.53.68.69.83|2|4 +1.3.6.1.6.3.16.1.2.1.4.3.13.100.97.116.97.100.111.103.83.72.65.65.69.83|2|4 +1.3.6.1.6.3.16.1.2.1.4.3.13.100.97.116.97.100.111.103.83.72.65.68.69.83|2|4 +1.3.6.1.6.3.16.1.2.1.5.1.5.99.111.109.109.53|2|1 +1.3.6.1.6.3.16.1.2.1.5.1.6.99.111.109.109.49.48|2|1 +1.3.6.1.6.3.16.1.2.1.5.2.5.99.111.109.109.53|2|1 +1.3.6.1.6.3.16.1.2.1.5.2.6.99.111.109.109.49.48|2|1 +1.3.6.1.6.3.16.1.2.1.5.3.13.100.97.116.97.100.111.103.77.68.53.65.69.83|2|1 +1.3.6.1.6.3.16.1.2.1.5.3.13.100.97.116.97.100.111.103.77.68.53.68.69.83|2|1 +1.3.6.1.6.3.16.1.2.1.5.3.13.100.97.116.97.100.111.103.83.72.65.65.69.83|2|1 +1.3.6.1.6.3.16.1.2.1.5.3.13.100.97.116.97.100.111.103.83.72.65.68.69.83|2|1 +1.3.6.1.6.3.16.1.4.1.4.8.103.114.112.99.111.109.109.53.0.0.1|2|2 +1.3.6.1.6.3.16.1.4.1.4.9.103.114.112.99.111.109.109.49.48.0.0.1|2|2 +1.3.6.1.6.3.16.1.4.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3|2|2 +1.3.6.1.6.3.16.1.4.1.4.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3|2|2 +1.3.6.1.6.3.16.1.4.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3|2|2 +1.3.6.1.6.3.16.1.4.1.4.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3|2|2 +1.3.6.1.6.3.16.1.4.1.5.8.103.114.112.99.111.109.109.53.0.0.1|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.5.9.103.114.112.99.111.109.109.49.48.0.0.1|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.5.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.5.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3|4x|5f616c6c5f +1.3.6.1.6.3.16.1.4.1.6.8.103.114.112.99.111.109.109.53.0.0.1|4|none +1.3.6.1.6.3.16.1.4.1.6.9.103.114.112.99.111.109.109.49.48.0.0.1|4|none +1.3.6.1.6.3.16.1.4.1.6.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.6.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.6.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.6.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.7.8.103.114.112.99.111.109.109.53.0.0.1|4|none +1.3.6.1.6.3.16.1.4.1.7.9.103.114.112.99.111.109.109.49.48.0.0.1|4|none +1.3.6.1.6.3.16.1.4.1.7.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.7.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.7.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.7.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3|4|none +1.3.6.1.6.3.16.1.4.1.8.8.103.114.112.99.111.109.109.53.0.0.1|2|4 +1.3.6.1.6.3.16.1.4.1.8.9.103.114.112.99.111.109.109.49.48.0.0.1|2|4 +1.3.6.1.6.3.16.1.4.1.8.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3|2|4 +1.3.6.1.6.3.16.1.4.1.8.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3|2|4 +1.3.6.1.6.3.16.1.4.1.8.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3|2|4 +1.3.6.1.6.3.16.1.4.1.8.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3|2|4 +1.3.6.1.6.3.16.1.4.1.9.8.103.114.112.99.111.109.109.53.0.0.1|2|1 +1.3.6.1.6.3.16.1.4.1.9.9.103.114.112.99.111.109.109.49.48.0.0.1|2|1 +1.3.6.1.6.3.16.1.4.1.9.16.103.114.112.100.97.116.97.100.111.103.77.68.53.65.69.83.0.3.3|2|1 +1.3.6.1.6.3.16.1.4.1.9.16.103.114.112.100.97.116.97.100.111.103.77.68.53.68.69.83.0.3.3|2|1 +1.3.6.1.6.3.16.1.4.1.9.16.103.114.112.100.97.116.97.100.111.103.83.72.65.65.69.83.0.3.3|2|1 +1.3.6.1.6.3.16.1.4.1.9.16.103.114.112.100.97.116.97.100.111.103.83.72.65.68.69.83.0.3.3|2|1 +1.3.6.1.6.3.16.1.5.1.0|2|0 +1.3.6.1.6.3.16.1.5.2.1.3.5.95.97.108.108.95.1.0|4| +1.3.6.1.6.3.16.1.5.2.1.3.5.95.97.108.108.95.1.1|4| +1.3.6.1.6.3.16.1.5.2.1.3.5.95.97.108.108.95.1.2|4| +1.3.6.1.6.3.16.1.5.2.1.3.6.95.110.111.110.101.95.1.0|4| +1.3.6.1.6.3.16.1.5.2.1.3.6.95.110.111.110.101.95.1.1|4| +1.3.6.1.6.3.16.1.5.2.1.3.6.95.110.111.110.101.95.1.2|4| +1.3.6.1.6.3.16.1.5.2.1.4.5.95.97.108.108.95.1.0|2|1 +1.3.6.1.6.3.16.1.5.2.1.4.5.95.97.108.108.95.1.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.4.5.95.97.108.108.95.1.2|2|1 +1.3.6.1.6.3.16.1.5.2.1.4.6.95.110.111.110.101.95.1.0|2|2 +1.3.6.1.6.3.16.1.5.2.1.4.6.95.110.111.110.101.95.1.1|2|2 +1.3.6.1.6.3.16.1.5.2.1.4.6.95.110.111.110.101.95.1.2|2|2 +1.3.6.1.6.3.16.1.5.2.1.5.5.95.97.108.108.95.1.0|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.5.95.97.108.108.95.1.1|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.5.95.97.108.108.95.1.2|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.6.95.110.111.110.101.95.1.0|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.6.95.110.111.110.101.95.1.1|2|4 +1.3.6.1.6.3.16.1.5.2.1.5.6.95.110.111.110.101.95.1.2|2|4 +1.3.6.1.6.3.16.1.5.2.1.6.5.95.97.108.108.95.1.0|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.5.95.97.108.108.95.1.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.5.95.97.108.108.95.1.2|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.0|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.1|2|1 +1.3.6.1.6.3.16.1.5.2.1.6.6.95.110.111.110.101.95.1.2|2|1 diff --git a/test/new-e2e/ndm/snmp/compose/data/public_delay.snmprec b/test/new-e2e/ndm/snmp/compose/data/public_delay.snmprec new file mode 100644 index 0000000000000..d93f6d6ad69dd --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/data/public_delay.snmprec @@ -0,0 +1,126 @@ +1.3.6.1.2.1.1.1.0|4x|4c696e75782034316261393438393131623920342e392e38372d6c696e75786b69742d6175667320233120534d5020576564204d61722031342031353a31323a3136205554432032303138207838365f3634 +1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.8072.3.2.10 +1.3.6.1.2.1.1.3.0|67|4226041 +1.3.6.1.2.1.1.4.0|4x|726f6f74406c6f63616c686f7374 +1.3.6.1.2.1.1.5.0|4|41ba948911b9 +1.3.6.1.2.1.1.6.0|4|Unknown +1.3.6.1.2.1.1.8.0|67|9 +1.3.6.1.2.1.1.9.1.2.1|6|1.3.6.1.6.3.11.3.1.1 +1.3.6.1.2.1.1.9.1.2.2|6|1.3.6.1.6.3.15.2.1.1 +1.3.6.1.2.1.1.9.1.2.3|6|1.3.6.1.6.3.10.3.1.1 +1.3.6.1.2.1.1.9.1.2.4|6|1.3.6.1.6.3.1 +1.3.6.1.2.1.1.9.1.2.5|6|1.3.6.1.2.1.49 +1.3.6.1.2.1.1.9.1.2.6|6|1.3.6.1.2.1.4 +1.3.6.1.2.1.1.9.1.2.7|6|1.3.6.1.2.1.50 +1.3.6.1.2.1.1.9.1.2.8|6|1.3.6.1.6.3.16.2.2.1 +1.3.6.1.2.1.1.9.1.2.9|6|1.3.6.1.6.3.13.3.1.3 +1.3.6.1.2.1.1.9.1.2.10|6|1.3.6.1.2.1.92 +1.3.6.1.2.1.1.9.1.3.1|4x|546865204d494220666f72204d6573736167652050726f63657373696e6720616e64204469737061746368696e672e +1.3.6.1.2.1.1.9.1.3.2|4x|546865206d616e6167656d656e7420696e666f726d6174696f6e20646566696e6974696f6e7320666f722074686520534e4d5020557365722d6261736564205365637572697479204d6f64656c2e +1.3.6.1.2.1.1.9.1.3.3|4x|54686520534e4d50204d616e6167656d656e7420417263686974656374757265204d49422e +1.3.6.1.2.1.1.9.1.3.4|4x|546865204d4942206d6f64756c6520666f7220534e4d50763220656e746974696573 +1.3.6.1.2.1.1.9.1.3.5|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e672054435020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.3.6|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e6720495020616e642049434d5020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.3.7|4x|546865204d4942206d6f64756c6520666f72206d616e6167696e672055445020696d706c656d656e746174696f6e73 +1.3.6.1.2.1.1.9.1.3.8|4x|566965772d62617365642041636365737320436f6e74726f6c204d6f64656c20666f7220534e4d502e +1.3.6.1.2.1.1.9.1.3.9|4x|546865204d4942206d6f64756c657320666f72206d616e6167696e6720534e4d50204e6f74696669636174696f6e2c20706c75732066696c746572696e672e +1.3.6.1.2.1.1.9.1.3.10|4x|546865204d4942206d6f64756c6520666f72206c6f6767696e6720534e4d50204e6f74696669636174696f6e732e +1.3.6.1.2.1.1.9.1.4.1|67|9 +1.3.6.1.2.1.1.9.1.4.2|67|9 +1.3.6.1.2.1.1.9.1.4.3|67|9 +1.3.6.1.2.1.1.9.1.4.4|67|9 +1.3.6.1.2.1.1.9.1.4.5|67|9 +1.3.6.1.2.1.1.9.1.4.6|67|9 +1.3.6.1.2.1.1.9.1.4.7|67|9 +1.3.6.1.2.1.1.9.1.4.8|67|9 +1.3.6.1.2.1.1.9.1.4.9|67|9 +1.3.6.1.2.1.1.9.1.4.10|67|9 +1.3.6.1.2.1.2.1.0|2|4 +1.3.6.1.2.1.2.2.1.1.1|2|1 +1.3.6.1.2.1.2.2.1.1.2|2|2 +1.3.6.1.2.1.2.2.1.1.3|2|3 +1.3.6.1.2.1.2.2.1.1.90|2|90 +1.3.6.1.2.1.2.2.1.2.1|4|lo +1.3.6.1.2.1.2.2.1.2.2|4|tunl0 +1.3.6.1.2.1.2.2.1.2.3|4|ip6tnl0 +1.3.6.1.2.1.2.2.1.2.90|4|eth0 +1.3.6.1.2.1.2.2.1.3.1|2|24 +1.3.6.1.2.1.2.2.1.3.2|2|131 +1.3.6.1.2.1.2.2.1.3.3|2|131 +1.3.6.1.2.1.2.2.1.3.90|2|6 +1.3.6.1.2.1.2.2.1.4.1|2|65536 +1.3.6.1.2.1.2.2.1.4.2|2|1480 +1.3.6.1.2.1.2.2.1.4.3|2|1452 +1.3.6.1.2.1.2.2.1.4.90|2|1500 +1.3.6.1.2.1.2.2.1.5.1|66|10000000 +1.3.6.1.2.1.2.2.1.5.2|66|0 +1.3.6.1.2.1.2.2.1.5.3|66|0 +1.3.6.1.2.1.2.2.1.5.90|66|4294967295 +1.3.6.1.2.1.2.2.1.6.1|4| +1.3.6.1.2.1.2.2.1.6.2|4| +1.3.6.1.2.1.2.2.1.6.3|4| +1.3.6.1.2.1.2.2.1.6.90|4x|0242ac110002 +1.3.6.1.2.1.2.2.1.7.1|2:delay|value=1,wait=10000 +1.3.6.1.2.1.2.2.1.7.2|2|2 +1.3.6.1.2.1.2.2.1.7.3|2|2 +1.3.6.1.2.1.2.2.1.7.90|2|1 +1.3.6.1.2.1.2.2.1.8.1|2|1 +1.3.6.1.2.1.2.2.1.8.2|2|2 +1.3.6.1.2.1.2.2.1.8.3|2|2 +1.3.6.1.2.1.2.2.1.8.90|2|1 +1.3.6.1.2.1.2.2.1.9.1|67|0 +1.3.6.1.2.1.2.2.1.9.2|67|0 +1.3.6.1.2.1.2.2.1.9.3|67|0 +1.3.6.1.2.1.2.2.1.9.90|67|0 +1.3.6.1.2.1.2.2.1.10.1|65|5300203 +1.3.6.1.2.1.2.2.1.10.2|65|0 +1.3.6.1.2.1.2.2.1.10.3|65|0 +1.3.6.1.2.1.2.2.1.10.90|65|2928 +1.3.6.1.2.1.2.2.1.11.1|65|63808 +1.3.6.1.2.1.2.2.1.11.2|65|0 +1.3.6.1.2.1.2.2.1.11.3|65|0 +1.3.6.1.2.1.2.2.1.11.90|65|40 +1.3.6.1.2.1.2.2.1.12.1|65|0 +1.3.6.1.2.1.2.2.1.12.2|65|0 +1.3.6.1.2.1.2.2.1.12.3|65|0 +1.3.6.1.2.1.2.2.1.12.90|65|0 +1.3.6.1.2.1.2.2.1.13.1|65|0 +1.3.6.1.2.1.2.2.1.13.2|65|0 +1.3.6.1.2.1.2.2.1.13.3|65|0 +1.3.6.1.2.1.2.2.1.13.90|65|0 +1.3.6.1.2.1.2.2.1.14.1|65|0 +1.3.6.1.2.1.2.2.1.14.2|65|0 +1.3.6.1.2.1.2.2.1.14.3|65|0 +1.3.6.1.2.1.2.2.1.14.90|65|0 +1.3.6.1.2.1.2.2.1.15.1|65|0 +1.3.6.1.2.1.2.2.1.15.2|65|0 +1.3.6.1.2.1.2.2.1.15.3|65|0 +1.3.6.1.2.1.2.2.1.15.90|65|0 +1.3.6.1.2.1.2.2.1.16.1|65|5300203 +1.3.6.1.2.1.2.2.1.16.2|65|0 +1.3.6.1.2.1.2.2.1.16.3|65|0 +1.3.6.1.2.1.2.2.1.16.90|65|0 +1.3.6.1.2.1.2.2.1.17.1|65|63808 +1.3.6.1.2.1.2.2.1.17.2|65|0 +1.3.6.1.2.1.2.2.1.17.3|65|0 +1.3.6.1.2.1.2.2.1.17.90|65|0 +1.3.6.1.2.1.2.2.1.18.1|65|0 +1.3.6.1.2.1.2.2.1.18.2|65|0 +1.3.6.1.2.1.2.2.1.18.3|65|0 +1.3.6.1.2.1.2.2.1.18.90|65|0 +1.3.6.1.2.1.2.2.1.19.1|65|0 +1.3.6.1.2.1.2.2.1.19.2|65|0 +1.3.6.1.2.1.2.2.1.19.3|65|0 +1.3.6.1.2.1.2.2.1.19.90|65|0 +1.3.6.1.2.1.2.2.1.20.1|65|0 +1.3.6.1.2.1.2.2.1.20.2|65|0 +1.3.6.1.2.1.2.2.1.20.3|65|0 +1.3.6.1.2.1.2.2.1.20.90|65|0 +1.3.6.1.2.1.2.2.1.21.1|66|0 +1.3.6.1.2.1.2.2.1.21.2|66|0 +1.3.6.1.2.1.2.2.1.21.3|66|0 +1.3.6.1.2.1.2.2.1.21.90|66|0 +1.3.6.1.2.1.2.2.1.22.1|6|0.0 +1.3.6.1.2.1.2.2.1.22.2|6|0.0 +1.3.6.1.2.1.2.2.1.22.3|6|0.0 +1.3.6.1.2.1.2.2.1.22.90|6|0.0 diff --git a/test/new-e2e/ndm/snmp/compose/snmpCompose.yaml b/test/new-e2e/ndm/snmp/compose/snmpCompose.yaml new file mode 100644 index 0000000000000..07aca8b4aaf1a --- /dev/null +++ b/test/new-e2e/ndm/snmp/compose/snmpCompose.yaml @@ -0,0 +1,15 @@ +version: "3.9" +services: + snmp: + image: "datadog/docker-library:snmp" + ports: + - "1161:1161/udp" + command: --args-from-file=/usr/snmpsim/data/args_list.txt --variation-modules-dir=/usr/local/snmpsim/variation + volumes: + - ${DATA_DIR}:/usr/snmpsim/data/ + container_name: dd-snmp + agent: + volumes: + - ${CONFIG_DIR}/snmp.yaml:/etc/datadog-agent/conf.d/snmp.d/snmp.yaml + container_name: dd-agent + diff --git a/test/new-e2e/ndm/snmp/config/public.yaml b/test/new-e2e/ndm/snmp/config/public.yaml new file mode 100644 index 0000000000000..ddf947f636e04 --- /dev/null +++ b/test/new-e2e/ndm/snmp/config/public.yaml @@ -0,0 +1,7 @@ +init_config: + loader: core + use_device_id_as_hostname: true +instances: + - ip_address: dd-snmp + port: 1161 + community_string: "public" diff --git a/test/new-e2e/ndm/snmp/snmpTestEnv.go b/test/new-e2e/ndm/snmp/snmpTestEnv.go new file mode 100644 index 0000000000000..e546f7b3aecad --- /dev/null +++ b/test/new-e2e/ndm/snmp/snmpTestEnv.go @@ -0,0 +1,139 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package snmp + +import ( + "context" + "embed" + "errors" + "fmt" + "path" + + "github.com/DataDog/datadog-agent/test/new-e2e/utils/infra" + "github.com/DataDog/test-infra-definitions/aws/ec2/ec2" + "github.com/DataDog/test-infra-definitions/datadog/agent" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + + "github.com/pulumi/pulumi/sdk/v3/go/auto" +) + +type TestEnv struct { + context context.Context + envName string + name string + + InstanceIP string + StackOutput auto.UpResult +} + +//go:embed compose/snmpCompose.yaml +var snmpCompose string + +//go:embed config/public.yaml +var snmpConfig string + +const ( + composeDataPath = "compose/data" +) + +func NewTestEnv(name, keyPairName, ddAPIKey, ddAPPKey string) (*TestEnv, error) { + snmpTestEnv := &TestEnv{ + context: context.Background(), + envName: "aws/sandbox", + name: fmt.Sprintf("snmp-agent-%s", name), + } + + stackManager := infra.GetStackManager() + + config := auto.ConfigMap{ + "ddagent:apiKey": auto.ConfigValue{Value: ddAPIKey, Secret: true}, + "ddinfra:aws/defaultKeyPairName": auto.ConfigValue{Value: keyPairName}, + } + + upResult, err := stackManager.GetStack(snmpTestEnv.context, snmpTestEnv.envName, snmpTestEnv.name, config, func(ctx *pulumi.Context) error { + // setup VM + vm, err := ec2.NewVM(ctx) + if err != nil { + return err + } + + // upload snmpsim data files + createDataDirCommand, dataPath, err := vm.FileManager.TempDirectory("data") + if err != nil { + return err + } + dataFiles, err := loadDataFileNames() + if err != nil { + return err + } + fileCommands := []pulumi.Resource{} + for _, fileName := range dataFiles { + fileContent, err := dataFolder.ReadFile(path.Join(composeDataPath, fileName)) + if err != nil { + return err + } + dontUseSudo := false + fileCommand, err := vm.FileManager.CopyInlineFile(fileName, pulumi.String(fileContent), path.Join(dataPath, fileName), dontUseSudo, + pulumi.DependsOn([]pulumi.Resource{createDataDirCommand})) + if err != nil { + return err + } + fileCommands = append(fileCommands, fileCommand) + } + + createConfigDirCommand, configPath, err := vm.FileManager.TempDirectory("config") + if err != nil { + return err + } + // edit snmp config file + dontUseSudo := false + configCommand, err := vm.FileManager.CopyInlineFile("snmp.yaml", pulumi.String(snmpConfig), path.Join(configPath, "snmp.yaml"), dontUseSudo, + pulumi.DependsOn([]pulumi.Resource{createConfigDirCommand})) + if err != nil { + return err + } + + // install agent and snmpsim on docker + envVars := pulumi.StringMap{"DATA_DIR": pulumi.String(dataPath), "CONFIG_DIR": pulumi.String(configPath)} + composeDependencies := []pulumi.Resource{createDataDirCommand, configCommand} + composeDependencies = append(composeDependencies, fileCommands...) + _, err = agent.NewDockerAgentInstallation(vm.CommonEnvironment, vm.DockerManager, snmpCompose, envVars, pulumi.DependsOn(composeDependencies)) + return err + }) + + if err != nil { + return nil, err + } + + snmpTestEnv.StackOutput = upResult + + output, found := upResult.Outputs["instance-ip"] + + if !found { + return nil, errors.New("unable to find host ip") + } + snmpTestEnv.InstanceIP = output.Value.(string) + + return snmpTestEnv, nil +} + +func (testEnv *TestEnv) Destroy() error { + return infra.GetStackManager().DeleteStack(testEnv.context, testEnv.envName, testEnv.name) +} + +//go:embed compose/data +var dataFolder embed.FS + +func loadDataFileNames() (out []string, err error) { + fileEntries, err := dataFolder.ReadDir(composeDataPath) + if err != nil { + return nil, err + } + for _, f := range fileEntries { + out = append(out, f.Name()) + } + return out, nil +} diff --git a/test/new-e2e/scenarios/ndm/main.go b/test/new-e2e/scenarios/ndm/main.go new file mode 100644 index 0000000000000..6a5d8e1a4c8ce --- /dev/null +++ b/test/new-e2e/scenarios/ndm/main.go @@ -0,0 +1,38 @@ +// Unless explicitly stated otherwise all files in this repository are licensed +// under the Apache License Version 2.0. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2016-present Datadog, Inc. + +package main + +import ( + "flag" + "fmt" + + "github.com/DataDog/datadog-agent/test/new-e2e/ndm/snmp" +) + +func main() { + envNamePtr := flag.String("name", "snmp", "environment name") + destroyPtr := flag.Bool("destroy", false, "[optional] should destroy the environment") + keyPairNamePtr := flag.String("keyPairName", "", "ssh key pair name. Should be uploaded on the cloud provider") + apiKeyPtr := flag.String("apiKey", "", "Datadog API key") + appKeyPtr := flag.String("appKey", "", "Datadog APP key") + + flag.Parse() + + snmpEnv, err := snmp.NewTestEnv(*envNamePtr, *keyPairNamePtr, *apiKeyPtr, *appKeyPtr) + if err != nil { + panic(err) + } + + if *destroyPtr { + err = snmpEnv.Destroy() + if err != nil { + panic(err) + } + return + } + + fmt.Println(snmpEnv.InstanceIP) +} diff --git a/test/new-e2e/utils/credentials/store-aws.go b/test/new-e2e/utils/credentials/store-aws.go index 39d386c3b9831..221d4a864e113 100644 --- a/test/new-e2e/utils/credentials/store-aws.go +++ b/test/new-e2e/utils/credentials/store-aws.go @@ -21,7 +21,8 @@ func (s *awsStore) get(key string) (string, error) { return "", err } - output, err := ssmClient.GetParameter(context.Background(), &ssm.GetParameterInput{Name: &key, WithDecryption: true}) + withDecription := true + output, err := ssmClient.GetParameter(context.Background(), &ssm.GetParameterInput{Name: &key, WithDecryption: &withDecription}) if err != nil { return "", fmt.Errorf("failed to get SSM parameter '%s', err: %w", key, err) } diff --git a/tools/ebpf/Dockerfiles/Dockerfile-process-agent-dev b/tools/ebpf/Dockerfiles/Dockerfile-process-agent-dev index a5a5edf14a4a4..896508b99443e 100644 --- a/tools/ebpf/Dockerfiles/Dockerfile-process-agent-dev +++ b/tools/ebpf/Dockerfiles/Dockerfile-process-agent-dev @@ -22,3 +22,4 @@ COPY agent $CORE_AGENT_DEST COPY *.o /opt/datadog-agent/embedded/share/system-probe/ebpf/ COPY *.c /opt/datadog-agent/embedded/share/system-probe/ebpf/runtime/ +COPY agent-usm.jar /opt/datadog-agent/embedded/share/system-probe/java/ diff --git a/tools/gdb/Dockerfile b/tools/gdb/Dockerfile index 8f89b9118fa7a..c75c2c3ecbba1 100644 --- a/tools/gdb/Dockerfile +++ b/tools/gdb/Dockerfile @@ -6,7 +6,7 @@ RUN rm -vf /etc/ssl/openssl.cnf RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get install -y gdb build-essential strace less vim # Install go -RUN curl -fSL -o golang.tgz https://go.dev/dl/go1.18.9.linux-amd64.tar.gz +RUN curl -fSL -o golang.tgz https://go.dev/dl/go1.19.5.linux-amd64.tar.gz RUN tar xzvf golang.tgz RUN ln -s /go /goroot diff --git a/tools/windows/DatadogAgentInstaller/CustomActions.Tests/APM/ApmConfigTests.cs b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/APM/ApmConfigTests.cs new file mode 100644 index 0000000000000..43138fe924ddc --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/APM/ApmConfigTests.cs @@ -0,0 +1,84 @@ +using AutoFixture.Xunit2; +using CustomActions.Tests.Helpers; +using Datadog.CustomActions; +using Moq; +using Xunit; + +namespace CustomActions.Tests.APM +{ + /// + /// APM Config specific tests + /// + public class ApmConfigTests + { + [Theory] + [InlineAutoData] + public void Should_Always_Set_apm_dd_url(Mock sessionMock, string traceDdUrl) + { + var datadogYaml = @" +# apm_config: + + # enabled: false + + # apm_dd_url: : +"; + sessionMock.Setup(session => session["TRACE_DD_URL"]).Returns(traceDdUrl); + var resultingYaml = ConfigCustomActions.ReplaceProperties(datadogYaml, sessionMock.Object) + .ToYaml(); + resultingYaml + .Should() + .HaveKey("apm_config.apm_dd_url") + .And.HaveValue(traceDdUrl); + resultingYaml + .Should() + .NotHaveKey("apm_config.enabled"); + } + + [Theory] + [InlineAutoData] + public void Should_Correctly_Replace_When_Trace_Url_Set_And_Apm_Enabled(Mock sessionMock, string traceDdUrl, string apmEnabled) + { + var datadogYaml = @" +# apm_config: + + # enabled: false + + # apm_dd_url: : +"; + sessionMock.Setup(session => session["TRACE_DD_URL"]).Returns(traceDdUrl); + sessionMock.Setup(session => session["APM_ENABLED"]).Returns(apmEnabled); + var r = ConfigCustomActions.ReplaceProperties(datadogYaml, sessionMock.Object); + var resultingYaml = r.ToYaml(); + resultingYaml + .Should() + .HaveKey("apm_config.apm_dd_url") + .And.HaveValue(traceDdUrl); + resultingYaml + .Should() + .HaveKey("apm_config.enabled") + .And.HaveValue(apmEnabled); + } + + [Theory] + [InlineAutoData] + public void Should_Correctly_Replace_When_Trace_Url_Unset_And_Apm_Enabled_Is_True(Mock sessionMock, string apmEnabled) + { + var datadogYaml = @" +# apm_config: + + # enabled: false + + # apm_dd_url: : +"; + sessionMock.Setup(session => session["APM_ENABLED"]).Returns(apmEnabled); + var resultingYaml = ConfigCustomActions.ReplaceProperties(datadogYaml, sessionMock.Object).ToYaml(); + resultingYaml + .Should() + .NotHaveKey("apm_config.apm_dd_url"); + resultingYaml + .Should() + .HaveKey("apm_config.enabled") + .And.HaveValue(apmEnabled); + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions.Tests/CustomActions.Tests.csproj b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/CustomActions.Tests.csproj new file mode 100644 index 0000000000000..8e6ddbfcfc0fd --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/CustomActions.Tests.csproj @@ -0,0 +1,197 @@ + + + + + + + Debug + AnyCPU + {848B3918-CCFC-47CA-92EF-763C75EFD16D} + Library + Properties + CustomActions.Tests + CustomActions.Tests + v4.7.2 + 512 + true + + + + + true + full + false + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + TRACE + prompt + 4 + + + true + DEBUG;TRACE + full + x64 + 7.3 + prompt + + + true + TRACE + true + pdbonly + x64 + 7.3 + prompt + + + false + + + + $(NuGetPackagesDir)\AutoFixture.4.17.0\lib\net452\AutoFixture.dll + + + $(NuGetPackagesDir)\AutoFixture.Xunit2.4.17.0\lib\net452\AutoFixture.Xunit2.dll + + + $(NuGetPackagesDir)\WixSharp.bin.1.20.2\lib\BootstrapperCore.dll + + + $(NuGetPackagesDir)\Castle.Core.5.1.0\lib\net462\Castle.Core.dll + + + $(NuGetPackagesDir)\Fare.2.1.1\lib\net35\Fare.dll + + + $(NuGetPackagesDir)\FluentAssertions.6.7.0\lib\net47\FluentAssertions.dll + + + $(NuGetPackagesDir)\WixSharp.bin.1.20.2\lib\Microsoft.Deployment.WindowsInstaller.dll + + + $(NuGetPackagesDir)\Moq.4.18.2\lib\net462\Moq.dll + + + + + + + + $(NuGetPackagesDir)\System.IO.4.3.0\lib\net462\System.IO.dll + True + True + + + $(NuGetPackagesDir)\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll + True + True + + + $(NuGetPackagesDir)\System.Runtime.4.3.0\lib\net462\System.Runtime.dll + True + True + + + $(NuGetPackagesDir)\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + $(NuGetPackagesDir)\System.Security.Cryptography.Algorithms.4.3.0\lib\net463\System.Security.Cryptography.Algorithms.dll + True + True + + + $(NuGetPackagesDir)\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll + True + True + + + $(NuGetPackagesDir)\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll + True + True + + + $(NuGetPackagesDir)\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll + True + True + + + $(NuGetPackagesDir)\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + + + + + + + + $(NuGetPackagesDir)\WixSharp.bin.1.20.2\lib\WixSharp.dll + + + $(NuGetPackagesDir)\WixSharp.bin.1.20.2\lib\WixSharp.Msi.dll + + + $(NuGetPackagesDir)\WixSharp.bin.1.20.2\lib\WixSharp.UI.dll + + + $(NuGetPackagesDir)\xunit.abstractions.2.0.3\lib\net35\xunit.abstractions.dll + + + $(NuGetPackagesDir)\xunit.assert.2.4.2\lib\netstandard1.1\xunit.assert.dll + + + $(NuGetPackagesDir)\xunit.extensibility.core.2.4.2\lib\net452\xunit.core.dll + + + $(NuGetPackagesDir)\xunit.extensibility.execution.2.4.2\lib\net452\xunit.execution.desktop.dll + + + $(NuGetPackagesDir)\YamlDotNet.12.0.1\lib\net47\YamlDotNet.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + {461CE844-4B07-47BA-B2D2-5415ABD36792} + CustomActions + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + + + \ No newline at end of file diff --git a/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Helpers/YamlAssertions.cs b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Helpers/YamlAssertions.cs new file mode 100644 index 0000000000000..8063a6960cb1a --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Helpers/YamlAssertions.cs @@ -0,0 +1,129 @@ +using System.Collections.Generic; +using System.Linq; +using FluentAssertions; +using FluentAssertions.Execution; +using FluentAssertions.Primitives; +using YamlDotNet.RepresentationModel; + +namespace CustomActions.Tests.Helpers +{ + public class YamlAssertions : ReferenceTypeAssertions + { + public YamlAssertions(YamlNode instance) + : base(instance) + { + } + + protected override string Identifier => "yaml"; + + private YamlMappingNode FindLastParentNode(YamlMappingNode currentNode, string[] keys) + { + foreach (var key in keys) + { + if (currentNode.Children.ContainsKey(key)) + { + if (currentNode.Children[key] is YamlMappingNode) + { + currentNode = (YamlMappingNode)currentNode.Children[key]; + continue; + } + } + + break; + } + + return currentNode; + } + + public AndConstraint HaveKey( + string key, string because = "", params object[] becauseArgs) + { + var keys = key.Split('.'); + var mappingNode = (YamlMappingNode)Subject; + if (keys.Length > 1) + { + // For nested keys, find the last parent node. + mappingNode = FindLastParentNode(mappingNode, keys); + } + + Execute.Assertion + .BecauseOf(because, becauseArgs) + .Given(() => mappingNode.Children) + .ForCondition(nodes => nodes.ContainsKey(keys.Last())) + .FailWith("Expected {context:YAML} to contain key {0}{reason}.", key); + + var child = mappingNode.Children[keys.Last()]; + // Change assertion scope to child node + return new AndConstraint(new YamlAssertions(child)); + } + + public AndConstraint NotHaveKey( + string key, string because = "", params object[] becauseArgs) + { + var keys = key.Split('.'); + var mappingNode = (YamlMappingNode)Subject; + if (keys.Length > 1) + { + // For nested keys, find the last parent node. + mappingNode = FindLastParentNode(mappingNode, keys); + } + + Execute.Assertion + .BecauseOf(because, becauseArgs) + .Given(() => mappingNode.Children) + .ForCondition(nodes => !nodes.ContainsKey(keys.Last())) + .FailWith("Expected {context:YAML} to NOT contain key {0}{reason}.", key); + + // Don't change assertion scope + return new AndConstraint(this); + } + + public AndConstraint HaveValue( + string value, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .Given(() => ((YamlScalarNode)Subject).Value) + .ForCondition(subjectValue => subjectValue == value) + .FailWith("Expected {context} to equal {0}{reason} but was {1}", value, ((YamlScalarNode)Subject).Value); + + return new AndConstraint(this); + } + + public AndConstraint NotHaveValue( + string value, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .Given(() => ((YamlScalarNode)Subject).Value) + .ForCondition(nodes => nodes != value) + .FailWith("Expected {context} to NOT be equal to {0}{reason}.", value); + + return new AndConstraint(this); + } + + public AndConstraint NoValue( + string because = "", params object[] becauseArgs) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .Given(() => (YamlScalarNode)Subject) + .ForCondition(node => string.IsNullOrEmpty(node.Value)) + .FailWith("Expected {context} to not have a value {reason}."); + + return new AndConstraint(this); + } + + public AndConstraint HaveValues( + IList values, string because = "", params object[] becauseArgs) + { + Execute.Assertion + .BecauseOf(because, becauseArgs) + .Given(() => ((YamlSequenceNode)Subject)) + .ForCondition(subject => subject.Children.Cast().Select(k => k.Value).SequenceEqual(values)) + .FailWith("Expected {context} to equal {0}{reason}", values); + + return new AndConstraint(this); + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Helpers/YamlAssertionsExtensions.cs b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Helpers/YamlAssertionsExtensions.cs new file mode 100644 index 0000000000000..223b2dcb05dea --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Helpers/YamlAssertionsExtensions.cs @@ -0,0 +1,24 @@ +using System.Linq; +using YamlDotNet.RepresentationModel; + +namespace CustomActions.Tests.Helpers +{ + /// + /// Helper class to convert a YAML stream into a YAML assertion object. + /// + public static class YamlAssertionsExtensions + { + /// + /// Converts a into a object. + /// This allows running assertions on a YAML stream. + /// + /// The instance to convert. + /// A object. + public static YamlAssertions Should(this YamlStream instance) + { + // If the doc is empty, don't fail but return an assertion over an empty doc. + var doc = instance.Documents.FirstOrDefault() ?? new YamlDocument(new YamlMappingNode()); + return new YamlAssertions(doc.RootNode); + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Helpers/YamlExpectationsExtensions.cs b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Helpers/YamlExpectationsExtensions.cs new file mode 100644 index 0000000000000..0ae0d16844284 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Helpers/YamlExpectationsExtensions.cs @@ -0,0 +1,38 @@ +using YamlDotNet.RepresentationModel; + +namespace CustomActions.Tests.Helpers +{ + /// + /// Helper class to make some tests more legible. + /// It mimics Ruby Spec language. + /// + public static class YamlExpectationsExtensions + { + public static void HasApmEnabled(this YamlStream yaml) + { + yaml + .Should() + .HaveKey("apm_config.enabled") + .And.HaveValue("true"); + } + + public static void HasLogsEnabled(this YamlStream yaml) + { + yaml + .Should() + .HaveKey("logs_config"); + yaml + .Should() + .HaveKey("logs_enabled") + .And.HaveValue("true"); + } + + public static void HasProcessEnabled(this YamlStream yaml) + { + yaml + .Should() + .HaveKey("process_config.process_collection.enabled") + .And.HaveValue("true"); + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Helpers/YamlExtensions.cs b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Helpers/YamlExtensions.cs new file mode 100644 index 0000000000000..e754ac96f50d1 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Helpers/YamlExtensions.cs @@ -0,0 +1,23 @@ +using System.IO; +using YamlDotNet.RepresentationModel; + +namespace CustomActions.Tests.Helpers +{ + /// + /// Extension class to load a from a . + /// + public static class YamlExtensions + { + /// + /// Converts a into a . + /// + /// The string to convert. + /// A + public static YamlStream ToYaml(this string value) + { + var resultYaml = new YamlStream(); + resultYaml.Load(new StringReader(value)); + return resultYaml; + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions.Tests/IntegrationTests/TestConfig.cs b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/IntegrationTests/TestConfig.cs new file mode 100644 index 0000000000000..d612544dd729d --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/IntegrationTests/TestConfig.cs @@ -0,0 +1,124 @@ +using System.Collections.Generic; +using System.IO; +using AutoFixture.Xunit2; +using CustomActions.Tests.Helpers; +using Datadog.CustomActions; +using Moq; +using Xunit; + +namespace CustomActions.Tests.IntegrationTests +{ + /// + /// Kitchen-sink tests. + /// + /// These tests expects a valid config to be found in the same folder as where the unit + /// tests run. The CI takes care of generating a valid configuration that will be placed + /// at the right location using the generate-config invoke task. + public class TestConfig + { + /// + /// Base on win-installopts kitchen test + /// + [Theory] + [InlineAutoData] + public void Should_Correctly_Replace_Properties_For_win_installopts(Mock sessionMock) + { + foreach (var keyValuePair in new Dictionary() + { + { "APIKEY", "testapikey" }, + { "TAGS", "k1:v1,k2:v2" }, + { "CMD_PORT", "4999" }, + { "PROXY_HOST", "proxy.foo.com" }, + { "PROXY_PORT", "1234" }, + { "PROXY_USER", "puser" }, + { "PROXY_PASSWORD", "ppass" }, + { "SITE", "eu" }, + { "DD_URL", "https://someurl.datadoghq.com" }, + { "LOGS_DD_URL", "https://logs.someurl.datadoghq.com" }, + { "PROCESS_DD_URL", "https://process.someurl.datadoghq.com" }, + { "TRACE_DD_URL", "https://trace.someurl.datadoghq.com" }, + }) + { + sessionMock.Setup(session => session[keyValuePair.Key]).Returns(keyValuePair.Value); + } + + var datadogYaml = File.ReadAllText(@"datadog.yaml"); + var newConfig = ConfigCustomActions.ReplaceProperties(datadogYaml, sessionMock.Object); + var resultingYaml = newConfig.ToYaml(); + resultingYaml + .Should() + .HaveKey("api_key") + .And.HaveValue("testapikey"); + resultingYaml + .Should() + .HaveKey("tags") + .And.HaveValues(new[] + { + "k1:v1", + "k2:v2" + }); + resultingYaml + .Should() + .HaveKey("cmd_port") + .And.HaveValue("4999"); + resultingYaml + .Should() + .HaveKey("proxy.http") + .And.HaveValue("http://puser:ppass@proxy.foo.com:1234/"); + resultingYaml + .Should() + .HaveKey("proxy.https") + .And.HaveValue("http://puser:ppass@proxy.foo.com:1234/"); + resultingYaml + .Should() + .HaveKey("site") + .And.HaveValue("eu"); + resultingYaml + .Should() + .HaveKey("dd_url") + .And.HaveValue("https://someurl.datadoghq.com"); + resultingYaml + .Should() + .HaveKey("logs_config.logs_dd_url") + .And.HaveValue("https://logs.someurl.datadoghq.com"); + resultingYaml + .Should() + .HaveKey("process_config.process_dd_url") + .And.HaveValue("https://process.someurl.datadoghq.com"); + resultingYaml + .Should() + .HaveKey("apm_config.apm_dd_url") + .And.HaveValue("https://trace.someurl.datadoghq.com"); + } + + /// + /// Base on win-all-subservices kitchen test + /// + [Theory] + [InlineAutoData] + public void Should_Correctly_Replace_Properties_For_win_all_subservices(Mock sessionMock) + { + foreach (var keyValuePair in new Dictionary() + { + { "APIKEY", "testapikey" }, + { "LOGS_ENABLED", "true" }, + { "PROCESS_ENABLED", "true" }, + { "APM_ENABLED", "true" }, + }) + { + sessionMock.Setup(session => session[keyValuePair.Key]).Returns(keyValuePair.Value); + } + + var datadogYaml = File.ReadAllText(@"datadog.yaml"); + var newConfig = ConfigCustomActions.ReplaceProperties(datadogYaml, sessionMock.Object); + var resultingYaml = newConfig.ToYaml(); + resultingYaml + .Should() + .HaveKey("api_key") + .And.HaveValue("testapikey"); + resultingYaml.HasLogsEnabled(); + resultingYaml.HasProcessEnabled(); + resultingYaml.HasApmEnabled(); + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Logs/ProcessConfigTests.cs b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Logs/ProcessConfigTests.cs new file mode 100644 index 0000000000000..aaad23c205809 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Logs/ProcessConfigTests.cs @@ -0,0 +1,36 @@ +using AutoFixture.Xunit2; +using CustomActions.Tests.Helpers; +using Datadog.CustomActions; +using Moq; +using Xunit; + +namespace CustomActions.Tests.Logs +{ + /// + /// Logs specific tests. + /// + public class LogsConfigTests + { + [Theory] + [InlineAutoData] + public void Should_Correctly_Replace_When_Dd_Logs_Url_Specified(Mock sessionMock, string ddLogsUrl) + { + var datadogYaml = @" +# logs_enabled: false + +# logs_config: + + # logs_dd_url: : +"; + sessionMock.Setup(session => session["LOGS_DD_URL"]).Returns(ddLogsUrl); + var resultingYaml = ConfigCustomActions.ReplaceProperties(datadogYaml, sessionMock.Object).ToYaml(); + resultingYaml + .Should() + .HaveKey("logs_config.logs_dd_url") + .And.HaveValue(ddLogsUrl); + resultingYaml + .Should() + .NotHaveKey("logs_enabled"); + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Process/ProcessConfigTests.cs b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Process/ProcessConfigTests.cs new file mode 100644 index 0000000000000..9d2464124fc19 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Process/ProcessConfigTests.cs @@ -0,0 +1,139 @@ +using AutoFixture.Xunit2; +using CustomActions.Tests.Helpers; +using Datadog.CustomActions; +using Moq; +using Xunit; + +namespace CustomActions.Tests.Process +{ + /// + /// Process specific tests. + /// + public class ProcessConfigTests + { + [Theory] + [InlineAutoData] + public void Should_Correctly_Replace_When_Process_Enabled( + Mock sessionMock, + string processEnabled) + { + var datadogYaml = @" +# process_config: + + # process_collection: + # enabled: false + + # container_collection: + # enabled: true + + ## Deprecated - use `process_collection.enabled` and `container_collection.enabled` instead + # enabled: ""true"" +"; + sessionMock.Setup(session => session["PROCESS_ENABLED"]).Returns(processEnabled); + var resultingYaml = ConfigCustomActions.ReplaceProperties(datadogYaml, sessionMock.Object).ToYaml(); + resultingYaml + .Should() + .HaveKey("process_config.process_collection.enabled") + .And.HaveValue(processEnabled); + resultingYaml + .Should() + .NotHaveKey("process_config.enabled"); + } + + [Theory] + [InlineAutoData] + public void Should_Always_Set_process_dd_url( + Mock sessionMock, + string processDdUrl) + { + var datadogYaml = @" +# process_config: + + # process_collection: + # enabled: false + + # container_collection: + # enabled: true + + ## Deprecated - use `process_collection.enabled` and `container_collection.enabled` instead + # enabled: ""true"" +"; + sessionMock.Setup(session => session["PROCESS_DD_URL"]).Returns(processDdUrl); + var r = ConfigCustomActions.ReplaceProperties(datadogYaml, sessionMock.Object); + var resultingYaml = r.ToYaml(); + resultingYaml + .Should() + .HaveKey("process_config.process_dd_url") + .And.HaveValue(processDdUrl); + } + + [Theory] + [InlineAutoData] + public void Should_Correctly_Replace_When_Process_Url_Set_And_Process_Enabled( + Mock sessionMock, + string processEnabled, + string processDdUrl) + { + var datadogYaml = @" +# process_config: + + ## @param process_collection - custom object - optional + ## Specifies settings for collecting processes. + # process_collection: + ## @param enabled - boolean - optional - default: false + ## Enables collection of information about running processes. + # enabled: false + + ## @param container_collection - custom object - optional + ## Specifies settings for collecting containers. + # container_collection: + ## @param enabled - boolean - optional - default: true + ## Enables collection of information about running containers. + # enabled: true + + ## Deprecated - use `process_collection.enabled` and `container_collection.enabled` instead + ## @param enabled - string - optional - default: ""false"" + ## @env DD_PROCESS_CONFIG_ENABLED - string - optional - default: ""false"" + ## A string indicating the enabled state of the Process Agent: + ## * ""false"" : The Agent collects only containers information. + ## * ""true"" : The Agent collects containers and processes information. + ## * ""disabled"" : The Agent process collection is disabled. + # + # enabled: ""true"" +"; + sessionMock.Setup(session => session["PROCESS_ENABLED"]).Returns(processEnabled); + sessionMock.Setup(session => session["PROCESS_DD_URL"]).Returns(processDdUrl); + var resultingYaml = ConfigCustomActions.ReplaceProperties(datadogYaml, sessionMock.Object).ToYaml(); + resultingYaml + .Should() + .HaveKey("process_config.process_collection.enabled") + .And.HaveValue(processEnabled); + resultingYaml + .Should() + .HaveKey("process_config.process_dd_url") + .And.HaveValue(processDdUrl); + } + + [Theory] + [InlineAutoData] + public void Should_Correctly_Replace_When_Process_Discovery_Enabled( + Mock sessionMock, + string processDiscovery) + { + var datadogYaml = @" +# process_config: + + # enabled: ""disabled"" + + # process_discovery: + # enabled: false +"; + sessionMock.Setup(session => session["PROCESS_DISCOVERY_ENABLED"]).Returns(processDiscovery); + var resultingYaml = ConfigCustomActions.ReplaceProperties(datadogYaml, sessionMock.Object).ToYaml(); + resultingYaml + .Should() + .HaveKey("process_config.process_discovery.enabled") + .And.HaveValue(processDiscovery); + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Properties/AssemblyInfo.cs b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000000..4f1888694faa3 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("CustomActions.Tests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("CustomActions.Tests")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("848b3918-ccfc-47ca-92ef-763c75efd16d")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Proxy/ProcessConfigTests.cs b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Proxy/ProcessConfigTests.cs new file mode 100644 index 0000000000000..399e6656a4a05 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/Proxy/ProcessConfigTests.cs @@ -0,0 +1,120 @@ +using AutoFixture.Xunit2; +using CustomActions.Tests.Helpers; +using Datadog.CustomActions; +using Moq; +using Xunit; + +namespace CustomActions.Tests.Proxy +{ + /// + /// Proxy specific tests. + /// + public class ProxyTests + { + /// + /// Verifies that the replacer doesn't do anything when PROXY_HOST is missing. + /// + /// The mocked session. + /// The generated proxy port. + /// The generated proxy user. + /// The generated proxy password. + [Theory] + [InlineAutoData] + public void Dont_Do_Anything_When_Only_Optional_Proxy_Values_Present( + Mock sessionMock, + int proxyPort, + string proxyUser, + string proxyPassword) + { + var datadogYaml = @" +# proxy: +# https: http://:@: +# http: http://:@: +# no_proxy: +# - +# - +"; + sessionMock.Setup(session => session["PROXY_PORT"]).Returns(proxyPort.ToString); + sessionMock.Setup(session => session["PROXY_USER"]).Returns(proxyUser); + sessionMock.Setup(session => session["PROXY_PASSWORD"]).Returns(proxyPassword); + var resultingYaml = ConfigCustomActions.ReplaceProperties(datadogYaml, sessionMock.Object).ToYaml(); + resultingYaml + .Should() + .NotHaveKey("proxy.https"); + resultingYaml + .Should() + .NotHaveKey("proxy.https"); + resultingYaml + .Should() + .NotHaveKey("proxy.no_proxy"); + } + + /// + /// Verifies that the replacer will insert the correct default values. + /// + /// The mocked session. + /// The generated proxy host. + [Theory] + [InlineAutoData] + public void Should_Correctly_Replace_When_Only_PROXY_HOST_Present( + Mock sessionMock, + string proxyHost) + { + var datadogYaml = @" +# proxy: +# https: http://:@: +# http: http://:@: +# no_proxy: +# - +# - +"; + sessionMock.Setup(session => session["PROXY_HOST"]).Returns(proxyHost); + var r = ConfigCustomActions.ReplaceProperties(datadogYaml, sessionMock.Object); + var resultingYaml = r.ToYaml(); + resultingYaml + .Should() + .HaveKey("proxy.https") + .And.HaveValue($"http://{proxyHost.ToLower()}:80/"); + resultingYaml + .Should() + .HaveKey("proxy.http") + .And.HaveValue($"http://{proxyHost.ToLower()}:80/"); + } + + [Theory] + [InlineAutoData] + public void Should_Correctly_Replace_When_Proxy_Values_Specified( + Mock sessionMock, + string proxyScheme, + string proxyHost, + int proxyPort, + string proxyUser, + string proxyPassword) + { + var datadogYaml = @" +# proxy: +# https: http://:@: +# http: http://:@: +# no_proxy: +# - +# - +"; + sessionMock.Setup(session => session["PROXY_HOST"]).Returns($"{proxyScheme}://{proxyHost}"); + sessionMock.Setup(session => session["PROXY_PORT"]).Returns(proxyPort.ToString); + sessionMock.Setup(session => session["PROXY_USER"]).Returns(proxyUser); + sessionMock.Setup(session => session["PROXY_PASSWORD"]).Returns(proxyPassword); + var r = ConfigCustomActions.ReplaceProperties(datadogYaml, sessionMock.Object); + var resultingYaml = r.ToYaml(); + var expectedUri = + $"{proxyScheme.ToLower()}://{proxyUser}:{proxyPassword}@{proxyHost.ToLower()}:{proxyPort}/"; + resultingYaml + .Should() + .HaveKey("proxy.https") + .And.HaveValue(expectedUri); + resultingYaml + .Should() + .HaveKey("proxy.http") + .And.HaveValue(expectedUri); + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions.Tests/WriteConfigUnitTests.cs b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/WriteConfigUnitTests.cs new file mode 100644 index 0000000000000..97617921d82af --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/WriteConfigUnitTests.cs @@ -0,0 +1,82 @@ +using AutoFixture.Xunit2; +using CustomActions.Tests.Helpers; +using Datadog.CustomActions; +using Moq; +using Xunit; +using YamlDotNet.RepresentationModel; +using ISession = Datadog.CustomActions.ISession; + +namespace CustomActions.Tests +{ + public class WriteConfigUnitTests + { + [Theory] + [InlineAutoData("APIKEY", "api_key")] + [InlineAutoData("SITE", "site")] + [InlineAutoData("HOSTNAME", "hostname")] + [InlineAutoData("LOGS_ENABLED", "logs_enabled")] + [InlineAutoData("CMD_PORT", "cmd_port")] + [InlineAutoData("DD_URL", "dd_url")] + [InlineAutoData("PYVER", "python_version")] + [InlineAutoData("HOSTNAME_FQDN_ENABLED", "hostname_fqdn")] + [InlineAutoData("EC2_USE_WINDOWS_PREFIX_DETECTION", "ec2_use_windows_prefix_detection")] + public void ScalarProperties_Should_Be_Replaced_Given_They_Match(Mock sessionMock, string property, string key, string value) + { + var datadogYaml = $@" +# Some comments +# {key}:"; + sessionMock.Setup(session => session[property]).Returns(value); + ConfigCustomActions.ReplaceProperties(datadogYaml, sessionMock.Object) + .ToYaml() + .Should().HaveKey(key) + .And.BeOfType(typeof(YamlScalarNode)) + .And.HaveValue(value); + } + + [Theory] + [InlineAutoData("APIKEY", "api_key")] + [InlineAutoData("SITE", "site")] + [InlineAutoData("HOSTNAME", "hostname")] + [InlineAutoData("LOGS_ENABLED", "logs_enabled")] + [InlineAutoData("LOGS_DD_URL", "logs_dd_url")] + [InlineAutoData("PROCESS_ENABLED", "process_config")] + [InlineAutoData("PROCESS_DD_URL", "process_config")] + [InlineAutoData("PROCESS_DISCOVERY_ENABLED", "process_discovery")] + [InlineAutoData("APM_ENABLED", "apm_config")] + [InlineAutoData("TRACE_DD_URL", "apm_config")] + [InlineAutoData("PROXY_HOST", "proxy")] + [InlineAutoData("TAGS", "tags")] + [InlineAutoData("CMD_PORT", "cmd_port")] + [InlineAutoData("DD_URL", "dd_url")] + [InlineAutoData("PYVER", "python_version")] + [InlineAutoData("HOSTNAME_FQDN_ENABLED", "hostname_fqdn")] + public void Properties_Should_Not_Be_Replaced_Given_A_Property_Does_Not_Match(Mock sessionMock, string property, string key, string value) + { + var datadogYaml = $@" +# This is a random yaml document. +# Define a single property so that the YAML loader doesn't +# consider the document empty. +random_property: test +"; + sessionMock.Setup(session => session[property]).Returns(value); + + ConfigCustomActions.ReplaceProperties(datadogYaml, sessionMock.Object) + .ToYaml() + .Should() + .NotHaveKey(key); + } + + [Theory] + [InlineAutoData("EC2_USE_WINDOWS_PREFIX_DETECTION", "ec2_use_windows_prefix_detection")] + public void Missing_Properties_Should_Be_Appended(Mock sessionMock, string property, string key, string value) + { + var datadogYaml = ""; + sessionMock.Setup(session => session[property]).Returns(value); + ConfigCustomActions.ReplaceProperties(datadogYaml, sessionMock.Object) + .ToYaml() + .Should() + .HaveKey(key) + .And.HaveValue(value); + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions.Tests/YamlAssertions/YamlAssertionsTests.cs b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/YamlAssertions/YamlAssertionsTests.cs new file mode 100644 index 0000000000000..03d74d1ebb6f5 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/YamlAssertions/YamlAssertionsTests.cs @@ -0,0 +1,64 @@ +using CustomActions.Tests.Helpers; +using Xunit; + +namespace CustomActions.Tests.YamlAssertions +{ + /// + /// Tests for the custom YAML assertions + /// + public class YamlAssertionsTests + { + [Fact] + public void Should_Succeed_With_NonNestedKey() + { + "not_nested_at_all:".ToYaml().Should().HaveKey("not_nested_at_all"); + } + + [Fact] + public void Should_Succeed_With_NestedKey() + { + var yaml = @" +deeply: + nested: + property: + test: 42 + ".ToYaml(); + + yaml.Should() + .HaveKey("deeply.nested.property.test") + .And.HaveValue("42"); + + // The above is equivalent to + yaml.Should() + .HaveKey("deeply") + .And.HaveKey("nested") + .And.HaveKey("property") + .And.HaveKey("test") + .And.HaveValue("42"); + } + + [Fact] + public void Should_Not_HaveValue() + { + "no_value:".ToYaml().Should().HaveKey("no_value").And.NoValue(); + } + + [Fact] + public void Should_Not_HaveKey() + { + "test: 42".ToYaml().Should().HaveKey("test").And.NotHaveValue("32"); + } + + [Fact] + public void Should_HaveValues_Correctly_Evaluate_List() + { + @"test_list: + - elementA + - anotherElementCalledB" + .ToYaml() + .Should() + .HaveKey("test_list") + .And.HaveValues(new []{"elementA", "anotherElementCalledB"}); + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions.Tests/app.config b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/app.config new file mode 100644 index 0000000000000..fb12ff15d29fc --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/app.config @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/windows/DatadogAgentInstaller/CustomActions.Tests/packages.config b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/packages.config new file mode 100644 index 0000000000000..ef777f2c059f3 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions.Tests/packages.config @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/windows/DatadogAgentInstaller/CustomActions/App.config b/tools/windows/DatadogAgentInstaller/CustomActions/App.config new file mode 100644 index 0000000000000..d7d96b0b647c0 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions/App.config @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/tools/windows/DatadogAgentInstaller/CustomActions/CleanUpFilesCustomAction.cs b/tools/windows/DatadogAgentInstaller/CustomActions/CleanUpFilesCustomAction.cs new file mode 100644 index 0000000000000..a7c07f43cb6dd --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions/CleanUpFilesCustomAction.cs @@ -0,0 +1,73 @@ +using Datadog.CustomActions.Extensions; +using Microsoft.Deployment.WindowsInstaller; +using System.Collections.Generic; +using System.IO; +using System; + +namespace Datadog.CustomActions +{ + public class CleanUpFilesCustomAction + { + private static void RemovePythonDistributions(string projectLocation, ISession session) + { + var embeddedFolders = new List + { + Path.Combine(projectLocation, "embedded2"), + Path.Combine(projectLocation, "embedded3") + }; + try + { + foreach (var embeddedDist in embeddedFolders) + { + if (Directory.Exists(embeddedDist)) + { + session.Log($"{embeddedDist} found, deleting."); + Directory.Delete(embeddedDist, true); + } + else + { + session.Log($"{embeddedDist} not found, skip deletion."); + } + } + } + catch (Exception e) + { + session.Log($"Error while deleting embedded distribution: {e}"); + } + } + + private static ActionResult CleanupFiles(ISession session) + { + var projectLocation = session.Property("PROJECTLOCATION"); + var applicationDataLocation = session.Property("APPLICATIONDATADIRECTORY"); + RemovePythonDistributions(projectLocation, session); + try + { + var authToken = Path.Combine(applicationDataLocation, "auth_token"); + + if (File.Exists(authToken)) + { + session.Log($"{authToken} found, deleting."); + File.Delete(authToken); + } + else + { + session.Log($"{authToken} not found exists, skip deletion."); + } + } + catch (Exception e) + { + session.Log($"Error while deleting file: {e}"); + return ActionResult.Failure; + } + + return ActionResult.Success; + } + + [CustomAction] + public static ActionResult CleanupFiles(Session session) + { + return CleanupFiles(new SessionWrapper(session)); + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions/CompilerExtensions.cs b/tools/windows/DatadogAgentInstaller/CustomActions/CompilerExtensions.cs new file mode 100644 index 0000000000000..88172120e60c6 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions/CompilerExtensions.cs @@ -0,0 +1,22 @@ + + +// ReSharper disable once CheckNamespace so that we can trick the .Net compiler +// into using newer C# attributes in programs targeting earlier versions of the +// .Net framework. This is fine, since those attributes are compile-time attributes. +namespace System.Runtime.CompilerServices +{ + [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] + public class CallerMemberNameAttribute : Attribute + { + } + + [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] + public class CallerFilePathAttribute : Attribute + { + } + + [AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] + public class CallerLineNumberAttribute : Attribute + { + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions/ConfigCustomActions.cs b/tools/windows/DatadogAgentInstaller/CustomActions/ConfigCustomActions.cs new file mode 100644 index 0000000000000..eb64a755de9ef --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions/ConfigCustomActions.cs @@ -0,0 +1,380 @@ +using System; +using System.IO; +using Datadog.CustomActions.Extensions; +using Microsoft.Deployment.WindowsInstaller; +using YamlDotNet.Serialization.NamingConventions; +using YamlDotNet.Serialization; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using System.Text; + +namespace Datadog.CustomActions +{ + public class ConfigCustomActions + { + /// + /// Subset of the Datadog config file that we are going to read. + /// + // ReSharper disable once ArrangeTypeMemberModifiers + class DatadogConfig + { + // ReSharper disable once UnusedAutoPropertyAccessor.Local + public string ApiKey { get; set; } + // ReSharper disable once UnusedAutoPropertyAccessor.Local + public string Site { get; set; } + } + + private static ActionResult ReadConfig(ISession session) + { + var configFolder = session.Property("APPLICATIONDATADIRECTORY"); + var configFilePath = Path.Combine(configFolder, "datadog.yaml"); + if (!File.Exists(configFilePath)) + { + session.Log($"No user config found in {configFilePath}, continuing."); + return ActionResult.Success; + } + try + { + using (var input = new StreamReader(configFilePath)) + { + var deserializer = new DeserializerBuilder() + .IgnoreUnmatchedProperties() + .WithNamingConvention(UnderscoredNamingConvention.Instance) + .Build(); + + var datadogConfig = deserializer.Deserialize(input); + if (string.IsNullOrEmpty(session["APIKEY"])) + { + session["APIKEY"] = datadogConfig.ApiKey; + } + + if (string.IsNullOrEmpty(session["SITE"])) + { + session["SITE"] = datadogConfig.Site; + } + } + } + catch (Exception e) + { + session.Log($"User config could not be read: {e}"); + } + + return ActionResult.Success; + } + + [CustomAction] + public static ActionResult ReadConfig(Session session) + { + return ReadConfig(new SessionWrapper(session)); + } + + /// + /// Class to help do search and replace in a configuration file. + /// + /// Given a property name, it matches a pattern and replaces it with some text. + public class PropertyReplacer + { + /// + /// Internal helper class that simply groups a Regex with a replacement function. + /// + /// Necessary because tuples are not available in .Net 3.5. + class RegexWithReplacer + { + public Regex Regex { get; set; } + public Func Replacer { get; set; } + } + + /// + /// A list of regex+replacer in the order they are to be searched (first to last). + /// + private readonly List _regexReplacersInOrder = new List(); + + /// + /// Create a new + /// + /// The property name. + /// A + public static PropertyReplacer For(string property) + { + return new PropertyReplacer(property); + } + + /// + /// Adds a pattern to match for the given . + /// + /// The regex pattern to match. + /// This object. + public PropertyReplacer Match(string pattern) + { + _regexReplacersInOrder.Add(new RegexWithReplacer + { + Regex = new Regex(pattern, RegexOptions.Multiline) + }); + return this; + } + + /// + /// Adds a replacer function for the *last* pattern recorded. + /// + /// The replacer function takes in the property value, as evaluated + /// at runtime, and returns a string that will be substituted in the source text. + /// The replacer function. + /// This object. + /// Throws an exception if there are no patterns to associate + /// with this replacer. + public PropertyReplacer ReplaceWith(Func replacer) + { + if (_regexReplacersInOrder.Count == 0) + { + throw new Exception("Cannot use ReplaceWith without a Match"); + } + _regexReplacersInOrder.Last().Replacer = replacer; + return this; + } + + private PropertyReplacer(string propertyName) + { + PropertyName = propertyName; + } + + /// + /// The property associated with this object. + /// + public string PropertyName { get; } + + /// + /// Check if *all* the regex match, in order. + /// + /// This function starts with the first pattern and tries to match it + /// against the . If it matches, it saves the + /// index where it found the match, and and tries to match the next + /// pattern starting at the index of the previous match. + /// It continues until all the patterns have been matched. + /// If a pattern didn't match, the function returns false. + /// The input to match with. + /// True if all patterns match. + public bool IsMatch(string input) + { + int matchIndex = 0; + foreach (var r in _regexReplacersInOrder) + { + var match = r.Regex.Match(input, matchIndex); + if (!match.Success) + { + return false; + } + + matchIndex = match.Index; + } + return true; + } + + /// + /// Replaces text from the string with the replacer functions. + /// + /// This function starts with the first pattern and tries to match it + /// against the . If it matches, it will call the replacer function + /// associated with this pattern to replace the text in the input and save the index where + /// the match occurred. + /// It then tries to match the next pattern starting at the index of the previous match, and + /// replace the text from the with the text from its associated + /// replacer function. + /// If the pattern doesn't have an associated replacer function, it simply saves the index + /// of the match and move to the next pattern. + /// If a pattern fails to match, an exception is thrown. + /// The input string from where to replace the text. + /// The value of the that will be passed + /// to the replacer function. + /// The string with the text replaced in it. + /// Throws an exception if any pattern fails to match. + public string DoReplace(string input, string propertyValue) + { + int matchIndex = 0; + foreach (var r in _regexReplacersInOrder) + { + var match = r.Regex.Match(input, matchIndex); + if (!match.Success) + { + throw new Exception($"Could not find a match for {r}"); + } + if (r.Replacer != null) + { + input = r.Regex.Replace(input, r.Replacer(propertyValue), count: 1, matchIndex); + } + matchIndex = match.Index; + } + + return input; + } + } + + static string FormatProxy(string value, ISession session) + { + var hostUri = new UriBuilder(value); + var proxyConfiguration = new StringBuilder(); + + if (!string.IsNullOrEmpty(session.Property("PROXY_USER"))) + { + hostUri.UserName = session.Property("PROXY_USER"); + if (!string.IsNullOrEmpty(session.Property("PROXY_PASSWORD"))) + { + hostUri.Password = session.Property("PROXY_PASSWORD"); + } + } + + if (!string.IsNullOrEmpty(session.Property("PROXY_PORT"))) + { + if (!int.TryParse(session.Property("PROXY_PORT"), out var port)) + { + throw new Exception("Invalid PROXY_PORT"); + } + hostUri.Port = port; + } + + proxyConfiguration.AppendLine("proxy:"); + proxyConfiguration.AppendLine($" https: {hostUri}"); + proxyConfiguration.AppendLine($" http: {hostUri}"); + + return proxyConfiguration.ToString(); + } + + static string FormatTags(string value) + { + const string newTagLine = "\n - "; + var tagsConfiguration = new StringBuilder(); + tagsConfiguration.Append("tags: "); + tagsConfiguration.Append(newTagLine); + tagsConfiguration.Append(string.Join(newTagLine, value.Split(','))); + return tagsConfiguration.ToString(); + } + + public static string ReplaceProperties(string yaml, ISession session) + { + var replacers = new List + { + PropertyReplacer.For("APIKEY") + .Match("^[ #]*api_key:.*").ReplaceWith(value => $"api_key: {value}"), + + PropertyReplacer.For("SITE") + .Match("^[ #]*site:.*").ReplaceWith(value => $"site: {value}"), + + PropertyReplacer.For("HOSTNAME") + .Match("^[ #]*hostname:.*").ReplaceWith(value => $"hostname: {value}"), + + // When LOGS_ENABLED is specified, it's expected to uncomment logs_config as well + // even if we don't modify the object. + PropertyReplacer.For("LOGS_ENABLED") + .Match("^[ #]*logs_config:.*").ReplaceWith(_ => "logs_config:"), + + PropertyReplacer.For("LOGS_ENABLED") + .Match("^[ #]*logs_enabled:.*").ReplaceWith(value => $"logs_enabled: {value}"), + + PropertyReplacer.For("LOGS_DD_URL") + .Match("^[ #]*logs_config:.*").ReplaceWith(value => "logs_config:") + .Match("^[ #]*logs_dd_url:.*").ReplaceWith(value => $" logs_dd_url: {value}"), + + PropertyReplacer.For("PROCESS_ENABLED") + .Match("^[ #]*process_config:").ReplaceWith(_ => "process_config:") + .Match("^[ #]*process_collection:").ReplaceWith(_ => " process_collection:") + .Match("^[ #]*enabled:.*").ReplaceWith(value => $" enabled: {value}"), + + // PROCESS_DD_URL does not replace but appends a new key to process_config + PropertyReplacer.For("PROCESS_DD_URL") + .Match("^[ #]*process_config:").ReplaceWith(value => $"process_config:\n process_dd_url: {value}"), + + PropertyReplacer.For("PROCESS_DISCOVERY_ENABLED") + .Match("^[ #]*process_config:").ReplaceWith(_ => "process_config:") + .Match("^[ #]*process_discovery:").ReplaceWith(_ => " process_discovery:") + .Match("^[ #]*enabled:.*").ReplaceWith(value => $" enabled: {value}"), + + PropertyReplacer.For("APM_ENABLED") + .Match("^[ #]*apm_config:").ReplaceWith(_ => "apm_config:") + .Match("^[ #]*enabled:.*").ReplaceWith(value => $" enabled: {value}"), + + PropertyReplacer.For("TRACE_DD_URL") + .Match("^[ #]*apm_config:").ReplaceWith(_ => "apm_config:") + .Match("^[ #]*apm_dd_url:.*").ReplaceWith(value => $" apm_dd_url: {value}"), + + // There are multiple cmd_port entry in the config, so we need + // to match the top level one explicitly. + PropertyReplacer.For("CMD_PORT") + .Match("^[# ]?[ ]*cmd_port:.*").ReplaceWith(value => $"cmd_port: {value}"), + + PropertyReplacer.For("DD_URL") + .Match("^[ #]*dd_url:.*").ReplaceWith(value => $"dd_url: {value}"), + + PropertyReplacer.For("PYVER") + .Match("^[ #]*python_version:.*").ReplaceWith(value => $"python_version: {value}"), + + PropertyReplacer.For("PROXY_HOST") + .Match("^[ #]*proxy:.*").ReplaceWith(value => FormatProxy(value, session)), + + PropertyReplacer.For("HOSTNAME_FQDN_ENABLED") + .Match("^[ #]*hostname_fqdn:.*").ReplaceWith(value => $"hostname_fqdn: {value}"), + + PropertyReplacer.For("TAGS") + .Match("^[ #]*tags:(?:(?:.|\n)*?)^[ #]*- :").ReplaceWith(FormatTags), + + PropertyReplacer.For("EC2_USE_WINDOWS_PREFIX_DETECTION") + .Match("(^[ #]*ec2_use_windows_prefix_detection:.*|\\Z)").ReplaceWith(value => $"ec2_use_windows_prefix_detection: {value}") + }; + + foreach (var replacer in replacers) + { + if (!string.IsNullOrEmpty(session.Property(replacer.PropertyName))) + { + if (!replacer.IsMatch(yaml)) + { + session.Log($"{replacer.PropertyName} did not match"); + continue; + } + yaml = replacer.DoReplace(yaml, session.Property(replacer.PropertyName)); + } + } + + return yaml; + } + + private static ActionResult WriteConfig(ISession session) + { + var configFolder = session.Property("APPLICATIONDATADIRECTORY"); + var datadogYaml = Path.Combine(configFolder, "datadog.yaml"); + + try + { + if (File.Exists(datadogYaml)) + { + session.Log($"{datadogYaml} exists, not modifying it."); + return ActionResult.Success; + } + string yaml; + using (var input = new StreamReader(Path.Combine(configFolder, "datadog.yaml.example"))) + { + yaml = input.ReadToEnd(); + } + + yaml = ReplaceProperties(yaml, session); + + using (var output = new StreamWriter(datadogYaml)) + { + output.Write(yaml); + } + + } + catch (Exception e) + { + session.Log($"User config could not be written: {e}"); + return ActionResult.Failure; + } + + return ActionResult.Success; + } + + [CustomAction] + public static ActionResult WriteConfig(Session session) + { + return WriteConfig(new SessionWrapper(session)); + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions/CustomActions.csproj b/tools/windows/DatadogAgentInstaller/CustomActions/CustomActions.csproj new file mode 100644 index 0000000000000..98de765a73cc8 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions/CustomActions.csproj @@ -0,0 +1,92 @@ + + + + + Debug + AnyCPU + {461CE844-4B07-47BA-B2D2-5415ABD36792} + Library + Properties + Datadog.CustomActions + CustomActions + v3.5 + 512 + true + + + Client + + + true + full + false + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + TRACE + prompt + 4 + false + + + true + DEBUG;TRACE + full + x64 + 7.3 + prompt + + + TRACE + true + pdbonly + x64 + 7.3 + prompt + + + + + + + + + + + + + + + + + + + + + $(NuGetPackagesDir)\Cave.Compression.2.1.0\lib\net35\Cave.Compression.dll + + + $(NuGetPackagesDir)\Cave.Extensions.2.1.4\lib\net35\Cave.Extensions.dll + + + + $(NuGetPackagesDir)\LZMA-SDK.19.0.0\lib\net20\SevenZip.dll + + + + + + + + + $(NuGetPackagesDir)\YamlDotNet.12.0.0\lib\net35\YamlDotNet.dll + + + + + \ No newline at end of file diff --git a/tools/windows/DatadogAgentInstaller/CustomActions/Extensions/SessionExtensions.cs b/tools/windows/DatadogAgentInstaller/CustomActions/Extensions/SessionExtensions.cs new file mode 100644 index 0000000000000..e1b27f86053fe --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions/Extensions/SessionExtensions.cs @@ -0,0 +1,53 @@ +namespace Datadog.CustomActions.Extensions +{ + /// + /// Taken from WixSharp since we need it in .Net 3.5 + /// + public static class SessionExtensions + { + /// + /// Determines whether the specified is active. + /// + /// It is useful for checking if the session is terminated (e.g. in deferred custom actions). + /// + /// + /// The session. + /// + public static bool IsActive(this ISession session) + { + //if (!session.IsClosed) //unfortunately isClosed is always false even for the deferred actions + try + { + var test = session.Components; //it will throw for the deferred action + var text = session["INSTALLDIR"]; + return true; + } + catch + { + return false; + } + } + + /// + /// Returns the value of the named property of the specified object. + /// + /// It can be uses as a generic way of accessing the properties as it redirects + /// (transparently) access to the if the session + /// is terminated (e.g. in deferred custom actions). + /// + /// + /// The session. + /// The name. + /// + public static string Property(this ISession session, string name) + { + if (session.IsActive()) + return session[name]; + else + return (session.CustomActionData.ContainsKey(name) ? session.CustomActionData[name] : ""); + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions/ISession.cs b/tools/windows/DatadogAgentInstaller/CustomActions/ISession.cs new file mode 100644 index 0000000000000..212e939819d50 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions/ISession.cs @@ -0,0 +1,55 @@ +using System.Runtime.CompilerServices; +using Microsoft.Deployment.WindowsInstaller; + +namespace Datadog.CustomActions +{ + public interface ISession + { + /// + /// see + /// + string this[string property] + { + get; + set; + } + + /// + /// see + /// + MessageResult Message(InstallMessage messageType, Record record); + + /// + /// see + /// + void Log( + string msg, + [CallerMemberName] string memberName = null, + [CallerFilePath] string filePath = null, + [CallerLineNumber] int lineNumber = 0); + + /// + /// see + /// + ComponentInfoCollection Components + { + get; + } + + /// + /// see + /// + FeatureInfoCollection Features + { + get; + } + + /// + /// see + /// + CustomActionData CustomActionData + { + get; + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions/Native/NativeMethods.cs b/tools/windows/DatadogAgentInstaller/CustomActions/Native/NativeMethods.cs new file mode 100644 index 0000000000000..7d4b00e12f310 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions/Native/NativeMethods.cs @@ -0,0 +1,470 @@ +using System; +using System.ComponentModel; +using System.Runtime.InteropServices; +using System.Security.Cryptography; +using System.Security.Principal; +using System.Text; +using static Datadog.CustomActions.Native.NativeMethods; + +namespace Datadog.CustomActions.Native +{ + /// + /// See https://learn.microsoft.com/en-us/windows/win32/secauthz/account-rights-constants + /// + public enum AccountRightsConstants + { + SeDenyInteractiveLogonRight, + SeDenyNetworkLogonRight, + SeDenyRemoteInteractiveLogonRight, + SeServiceLogonRight + } + + public static class NativeMethods + { + public enum ReturnCodes + { + NO_ERROR = 0, + ERROR_ACCESS_DENIED = 5, + ERROR_INVALID_PARAMETER = 87, + ERROR_INSUFFICIENT_BUFFER = 122, + ERROR_BAD_ARGUMENTS = 160, + ERROR_INVALID_FLAGS = 1004, + ERROR_NOT_FOUND = 1168, + ERROR_CANCELLED = 1223, + ERROR_NO_SUCH_LOGON_SESSION = 1312, + + ERROR_INVALID_ACCOUNT_NAME = 1315, + ERROR_NONE_MAPPED = 1332, + + // One or more of the members specified were already members of the local group. No new members were added. + ERROR_MEMBER_IN_ALIAS = 1378, + + // One or more of the members specified do not exist. Therefore, no new members were added. + ERROR_NO_SUCH_MEMBER = 1387, + + // One or more of the members cannot be added because their account type is invalid. No new members were added. + ERROR_INVALID_MEMBER = 1388, + + //The local group specified by the groupname parameter does not exist. + NERR_GROUP_NOT_FOUND = 2220, + } + + [DllImport("credui.dll", EntryPoint = "CredUIParseUserNameW", CharSet = CharSet.Unicode)] + private static extern ReturnCodes CredUIParseUserName( + string userName, + StringBuilder user, + int userMaxChars, + StringBuilder domain, + int domainMaxChars); + + /// + /// Extracts the domain and user account name from a fully qualified user name. + /// + /// A that contains the user name to be parsed. The name must be in UPN or down-level format, or a certificate. + /// A that receives the user account name. + /// A that receives the domain name. If specifies a certificate, pszDomain will be . + /// + /// if the contains a domain and a user-name; otherwise, . + /// + public static bool ParseUserName(string userName, out string user, out string domain) + { + if (string.IsNullOrEmpty(userName)) + { + throw new ArgumentNullException(nameof(userName)); + } + + StringBuilder userBuilder = new StringBuilder(); + StringBuilder domainBuilder = new StringBuilder(); + + ReturnCodes returnCode = CredUIParseUserName(userName, userBuilder, int.MaxValue, domainBuilder, int.MaxValue); + switch (returnCode) + { + case ReturnCodes.NO_ERROR: // The username is valid. + user = userBuilder.ToString(); + domain = domainBuilder.ToString(); + return true; + + case ReturnCodes.ERROR_INVALID_ACCOUNT_NAME: // The username is not valid. + user = userName; + domain = null; + return false; + + // Impossible to reach this state + //case ReturnCodes.ERROR_INSUFFICIENT_BUFFER: // One of the buffers is too small. + // throw new OutOfMemoryException(); + + case ReturnCodes.ERROR_INVALID_PARAMETER: // ulUserMaxChars or ulDomainMaxChars is zero OR userName, user, or domain is NULL. + throw new ArgumentNullException("userName"); + + default: + user = null; + domain = null; + return false; + } + } + + public enum NtStatus : uint + { + Success = 0x00000000 + } + + [DllImport("logoncli.dll", EntryPoint = "NetIsServiceAccount", CharSet = CharSet.Unicode)] + public static extern NtStatus NetIsServiceAccount( + string serverName, + string accountName, + out bool isService); + + public enum SID_NAME_USE + { + SidTypeUser = 1, + SidTypeGroup, + SidTypeDomain, + SidTypeAlias, + SidTypeWellKnownGroup, + SidTypeDeletedAccount, + SidTypeInvalid, + SidTypeUnknown, + SidTypeComputer + } + + [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern bool LookupAccountName( + string lpSystemName, + string lpAccountName, + [MarshalAs(UnmanagedType.LPArray)] byte[] sid, + ref uint cbSid, + StringBuilder referencedDomainName, + ref uint cchReferencedDomainName, + out SID_NAME_USE peUse); + + [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern bool LookupAccountSid( + string lpSystemName, + [MarshalAs(UnmanagedType.LPArray)] byte[] sid, + StringBuilder lpName, + ref uint cchName, + StringBuilder referencedDomainName, + ref uint cchReferencedDomainName, + out SID_NAME_USE peUse); + + public static bool LookupAccountName(string accountName, out string user, out string domain, out SecurityIdentifier securityIdentifier, out SID_NAME_USE sidNameUse) + { + user = null; + domain = null; + byte[] sid = null; + securityIdentifier = null; + uint cbSid = 0; + uint cchName = 0; + var name = new StringBuilder(); + uint cchReferencedDomainName = 0; + var referencedDomainName = new StringBuilder(); + ReturnCodes err; + if (!LookupAccountName(null, accountName, null, ref cbSid, referencedDomainName, ref cchReferencedDomainName, out sidNameUse)) + { + err = (ReturnCodes)Marshal.GetLastWin32Error(); + if (err == ReturnCodes.ERROR_INSUFFICIENT_BUFFER || err == ReturnCodes.ERROR_INVALID_FLAGS) + { + sid = new byte[cbSid]; + err = ReturnCodes.NO_ERROR; + if (!LookupAccountName(null, accountName, sid, ref cbSid, referencedDomainName, ref cchReferencedDomainName, out sidNameUse)) + { + err = (ReturnCodes)Marshal.GetLastWin32Error(); + } + else + { + securityIdentifier = new SecurityIdentifier(sid, 0); + } + } + } + else + { + throw new Exception("could not call LookupAccountName"); + } + + if (err == ReturnCodes.NO_ERROR) + { + if (!LookupAccountSid(null, sid, name, ref cchName, referencedDomainName, ref cchReferencedDomainName, out sidNameUse)) + { + err = (ReturnCodes)Marshal.GetLastWin32Error(); + if (err == ReturnCodes.ERROR_INSUFFICIENT_BUFFER) + { + name.EnsureCapacity((int)cchName); + referencedDomainName.EnsureCapacity((int)cchReferencedDomainName); + err = ReturnCodes.NO_ERROR; + if (!LookupAccountSid(null, sid, name, ref cchName, referencedDomainName, ref cchReferencedDomainName, out sidNameUse)) + { + err = (ReturnCodes)Marshal.GetLastWin32Error(); + } + } + } + } + + if (err == ReturnCodes.NO_ERROR) + { + domain = referencedDomainName.ToString(); + user = name.ToString(); + return true; + } + + if (err == ReturnCodes.ERROR_NONE_MAPPED) + { + return false; + } + + throw new Exception("unexpected error while looking account name"); + } + + [StructLayout(LayoutKind.Sequential)] + private struct LOCALGROUP_MEMBERS_INFO_0 + { + [MarshalAs(UnmanagedType.SysInt)] + public IntPtr pSID; + } + + [DllImport("NetApi32.dll", CharSet = CharSet.Auto, SetLastError = true)] + private static extern int NetLocalGroupAddMembers( + string servername, //server name + string groupname, //group name + uint level, //info level + ref LOCALGROUP_MEMBERS_INFO_0 buf, //Group info structure + uint totalentries //number of entries + ); + + public static void AddToGroup(this SecurityIdentifier securityIdentifier, WellKnownSidType groupSid) + { + AddToGroup(securityIdentifier, new SecurityIdentifier(groupSid, null)); + } + + public static void AddToGroup(this SecurityIdentifier securityIdentifier, SecurityIdentifier groupIdentifier) + { + var groupSid = new byte[groupIdentifier.BinaryLength]; + groupIdentifier.GetBinaryForm(groupSid, 0); + uint cchName = 0; + var name = new StringBuilder(); + uint cchReferencedDomainName = 0; + var referencedDomainName = new StringBuilder(); + ReturnCodes err = ReturnCodes.ERROR_NONE_MAPPED; + if (!LookupAccountSid(null, groupSid, name, ref cchName, referencedDomainName, ref cchReferencedDomainName, out _)) + { + err = (ReturnCodes)Marshal.GetLastWin32Error(); + if (err == ReturnCodes.ERROR_INSUFFICIENT_BUFFER) + { + name.EnsureCapacity((int)cchName); + referencedDomainName.EnsureCapacity((int)cchReferencedDomainName); + err = ReturnCodes.NO_ERROR; + if (!LookupAccountSid(null, groupSid, name, ref cchName, referencedDomainName, ref cchReferencedDomainName, out _)) + { + err = (ReturnCodes)Marshal.GetLastWin32Error(); + } + } + } + if (err == ReturnCodes.NO_ERROR) + { + AddToGroup(securityIdentifier, name.ToString()); + return; + } + + throw new Exception($"Could not add user to group, failure to lookup group name: {err}"); + } + + public static void AddToGroup(this SecurityIdentifier securityIdentifier, string groupName) + { + ReturnCodes err; + var sid = new byte[securityIdentifier.BinaryLength]; + securityIdentifier.GetBinaryForm(sid, 0); + var info = new LOCALGROUP_MEMBERS_INFO_0 + { + pSID = Marshal.AllocHGlobal(sid.Length) + }; + + try + { + Marshal.Copy(sid, 0, info.pSID, sid.Length); + + err = (ReturnCodes)NetLocalGroupAddMembers(null, groupName, 0, ref info, 1); + if (err == ReturnCodes.NO_ERROR || err == ReturnCodes.ERROR_MEMBER_IN_ALIAS) + { + return; + } + } + finally + { + Marshal.FreeHGlobal(info.pSID); + } + throw new Exception($"Could not add user to group {groupName}: {err}"); + } + + [Flags] + public enum ServerTypes : uint + { + DomainCtrl= 0x00000008, + BackupDomainCtrl= 0x00000010, + }; + + public enum ServerPlatform + { + } + + [StructLayout(LayoutKind.Sequential)] + public struct SERVER_INFO_101 + { + public ServerPlatform PlatformId; + [MarshalAs(UnmanagedType.LPWStr)] + public string Name; + public int VersionMajor; + public int VersionMinor; + public ServerTypes Type; + [MarshalAs(UnmanagedType.LPWStr)] + public string Comment; + } + + [DllImport("Netapi32", CharSet = CharSet.Auto, SetLastError = true)] + private static extern int NetServerGetInfo(string serverName, int level, out IntPtr pSERVER_INFO_XXX); + [DllImport("Netapi32", CharSet = CharSet.Auto, SetLastError = true)] + private static extern int NetApiBufferFree(IntPtr Buffer); + + // Wrapper function to allow passing of structure and auto-find of level if structure contains it. + public static T NetServerGetInfo(string serverName = null, int level = 0) where T : struct + { + if (level == 0) + { + level = int.Parse(System.Text.RegularExpressions.Regex.Replace(typeof(T).Name, @"[^\d]", "")); + } + var ptr = IntPtr.Zero; + try + { + var ret = NetServerGetInfo(serverName, level, out ptr); + if (ret != 0) + { + throw new System.ComponentModel.Win32Exception(ret); + } + return (T)Marshal.PtrToStructure(ptr, typeof(T)); + } + finally + { + if (ptr != IntPtr.Zero) + { + NetApiBufferFree(ptr); + } + } + } + + #region Add/Remove privileges + [DllImport("advapi32.dll", PreserveSig = true)] + private static extern uint LsaOpenPolicy( + ref LSA_UNICODE_STRING SystemName, + ref LSA_OBJECT_ATTRIBUTES ObjectAttributes, + int DesiredAccess, + out IntPtr PolicyHandle); + + [DllImport("advapi32.dll", SetLastError = true, PreserveSig = true)] + private static extern uint LsaAddAccountRights( + IntPtr PolicyHandle, IntPtr AccountSid, + LSA_UNICODE_STRING[] UserRights, + long CountOfRights); + + [StructLayout(LayoutKind.Sequential)] + private struct LSA_UNICODE_STRING + { + public ushort Length; + public ushort MaximumLength; + public IntPtr Buffer; + } + + [StructLayout(LayoutKind.Sequential)] + private struct LSA_OBJECT_ATTRIBUTES + { + public int Length; + public IntPtr RootDirectory; + public readonly LSA_UNICODE_STRING ObjectName; + public uint Attributes; + public IntPtr SecurityDescriptor; + public IntPtr SecurityQualityOfService; + } + + [Flags] + private enum LSA_AccessPolicy : long + { + POLICY_VIEW_LOCAL_INFORMATION = 0x00000001L, + POLICY_VIEW_AUDIT_INFORMATION = 0x00000002L, + POLICY_GET_PRIVATE_INFORMATION = 0x00000004L, + POLICY_TRUST_ADMIN = 0x00000008L, + POLICY_CREATE_ACCOUNT = 0x00000010L, + POLICY_CREATE_SECRET = 0x00000020L, + POLICY_CREATE_PRIVILEGE = 0x00000040L, + POLICY_SET_DEFAULT_QUOTA_LIMITS = 0x00000080L, + POLICY_SET_AUDIT_REQUIREMENTS = 0x00000100L, + POLICY_AUDIT_LOG_ADMIN = 0x00000200L, + POLICY_SERVER_ADMIN = 0x00000400L, + POLICY_LOOKUP_NAMES = 0x00000800L, + POLICY_NOTIFICATION = 0x00001000L + } + + //POLICY_ALL_ACCESS mask + private const int POLICY_ALL_ACCESS = (int)( + LSA_AccessPolicy.POLICY_AUDIT_LOG_ADMIN | + LSA_AccessPolicy.POLICY_CREATE_ACCOUNT | + LSA_AccessPolicy.POLICY_CREATE_PRIVILEGE | + LSA_AccessPolicy.POLICY_CREATE_SECRET | + LSA_AccessPolicy.POLICY_GET_PRIVATE_INFORMATION | + LSA_AccessPolicy.POLICY_LOOKUP_NAMES | + LSA_AccessPolicy.POLICY_NOTIFICATION | + LSA_AccessPolicy.POLICY_SERVER_ADMIN | + LSA_AccessPolicy.POLICY_SET_AUDIT_REQUIREMENTS | + LSA_AccessPolicy.POLICY_SET_DEFAULT_QUOTA_LIMITS | + LSA_AccessPolicy.POLICY_TRUST_ADMIN | + LSA_AccessPolicy.POLICY_VIEW_AUDIT_INFORMATION | + LSA_AccessPolicy.POLICY_VIEW_LOCAL_INFORMATION + ); + + [DllImport("advapi32.dll")] + private static extern long LsaClose(IntPtr objectHandle); + + [DllImport("advapi32.dll")] + private static extern long LsaNtStatusToWinError(long status); + + public static void AddPrivilege(this SecurityIdentifier securityIdentifier, AccountRightsConstants accountRights) + { + var privilegeName = accountRights.ToString(); + var sid = new byte[securityIdentifier.BinaryLength]; + securityIdentifier.GetBinaryForm(sid, 0); + var userRights = new[] + { + new LSA_UNICODE_STRING + { + Buffer = Marshal.StringToHGlobalUni(privilegeName), + Length = (ushort)(privilegeName.Length * UnicodeEncoding.CharSize), + MaximumLength = (ushort)((privilegeName.Length + 1) * UnicodeEncoding.CharSize) + } + }; + var systemName = new LSA_UNICODE_STRING(); + var objectAttributes = new LSA_OBJECT_ATTRIBUTES(); + var status = LsaOpenPolicy(ref systemName, ref objectAttributes, POLICY_ALL_ACCESS, out var policyHandle); + var winErrorCode = LsaNtStatusToWinError(status); + if (winErrorCode != 0) + { + throw new Exception("LsaOpenPolicy failed", new Win32Exception((int)winErrorCode)); + } + + var pSid = Marshal.AllocHGlobal(sid.Length); + try + { + + Marshal.Copy(sid, 0, pSid, sid.Length); + status = LsaAddAccountRights(policyHandle, pSid, userRights, userRights.Length); + winErrorCode = LsaNtStatusToWinError(status); + if (winErrorCode != 0) + { + throw new Exception("LsaAddAccountRights failed", new Win32Exception((int)winErrorCode)); + } + } + finally + { + Marshal.FreeHGlobal(pSid); + Marshal.FreeHGlobal(userRights[0].Buffer); + LsaClose(policyHandle); + } + } + #endregion + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions/Properties/AssemblyInfo.cs b/tools/windows/DatadogAgentInstaller/CustomActions/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000000..d49ca443ccfda --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Datadog.Agent.Installer.CustomActions")] +[assembly: AssemblyDescription("Custom Actions for the Datadog Agent installer")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Datadog")] +[assembly: AssemblyProduct("Datadog Agent")] +[assembly: AssemblyCopyright("Copyright © Datadog")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("461ce844-4b07-47ba-b2d2-5415abd36792")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/tools/windows/DatadogAgentInstaller/CustomActions/PythonDistributionCustomAction.cs b/tools/windows/DatadogAgentInstaller/CustomActions/PythonDistributionCustomAction.cs new file mode 100644 index 0000000000000..9001e9572db6f --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions/PythonDistributionCustomAction.cs @@ -0,0 +1,87 @@ +using Microsoft.Deployment.WindowsInstaller; +using System; +using System.Collections.Generic; +using System.IO; +using Cave.Compression.Tar; +using Datadog.CustomActions.Extensions; +using System.Text; + +namespace Datadog.CustomActions +{ + public class PythonDistributionCustomAction + { + static void Decompress(string compressedFileName) + { + var decoder = new SevenZip.Compression.LZMA.Decoder(); + using (var inStream = File.OpenRead(compressedFileName)) + { + using (var outStream = File.Create($"{compressedFileName}.tar")) + { + var reader = new BinaryReader(inStream, Encoding.UTF8); + // Properties of the stream are encoded on 5 bytes + var props = reader.ReadBytes(5); + decoder.SetDecoderProperties(props); + var length = reader.ReadInt64(); + decoder.Code(inStream, outStream, inStream.Length, length, null); + outStream.Flush(); + } + } + + + var outputPath = Path.GetDirectoryName(Path.GetFullPath(compressedFileName)); + using (var inStream = File.OpenRead($"{compressedFileName}.tar")) + using (var tarInStream = new TarReader(inStream, false)) + { + tarInStream.UnpackTo(outputPath, null, null); + } + File.Delete($"{compressedFileName}.tar"); + File.Delete($"{compressedFileName}"); + } + + private static ActionResult DecompressPythonDistribution(ISession session, string compressedDisitributionFile) + { + var projectLocation = session.Property("PROJECTLOCATION"); + + try + { + var embedded = Path.Combine(projectLocation, compressedDisitributionFile); + if (File.Exists(embedded)) + { + Decompress(embedded); + } + else + { + if (embedded.Contains("embedded3")) + { + throw new InvalidOperationException($"The file {embedded} doesn't exist, but it should"); + + } + session.Log($"{embedded} not found, skipping decompression."); + } + } + catch (Exception e) + { + session.Log($"Error while decompressing {compressedDisitributionFile}: {e}"); + return ActionResult.Failure; + } + + return ActionResult.Success; + } + + private static ActionResult DecompressPythonDistributions(ISession session) + { + var actionResult = DecompressPythonDistribution(session, "embedded2.COMPRESSED"); + if (actionResult != ActionResult.Success) + { + return actionResult; + } + return DecompressPythonDistribution(session, "embedded3.COMPRESSED"); + } + + [CustomAction] + public static ActionResult DecompressPythonDistributions(Session session) + { + return DecompressPythonDistributions(new SessionWrapper(session)); + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions/SessionWrapper.cs b/tools/windows/DatadogAgentInstaller/CustomActions/SessionWrapper.cs new file mode 100644 index 0000000000000..2129c7a6af728 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions/SessionWrapper.cs @@ -0,0 +1,43 @@ +using Microsoft.Deployment.WindowsInstaller; +using System; + +namespace Datadog.CustomActions +{ + /// + /// Wraps the from the Windows installer. + /// + /// This allows the session object to be mocked for unit testing + /// and also to modify the logging behavior to inject timestamps + /// and other useful information. + public class SessionWrapper : ISession + { + private readonly Session _session; + + public SessionWrapper(Session session) + { + _session = session; + } + + public string this[string property] + { + get => _session[property]; + set => _session[property] = value; + } + + public MessageResult Message(InstallMessage messageType, Record record) + { + return _session.Message(messageType, record); + } + + public void Log(string msg, string memberName, string filePath, int lineNumber) + { + _session.Log($"CA: {DateTime.Now:HH:mm:ss}: {memberName}. {msg}"); + } + + public ComponentInfoCollection Components => _session.Components; + + public FeatureInfoCollection Features => _session.Features; + + public CustomActionData CustomActionData => _session.CustomActionData; + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions/UserCustomActions.cs b/tools/windows/DatadogAgentInstaller/CustomActions/UserCustomActions.cs new file mode 100644 index 0000000000000..89de7237b24f0 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions/UserCustomActions.cs @@ -0,0 +1,491 @@ +using System; +using System.Collections.Generic; +using System.DirectoryServices.ActiveDirectory; +using System.IO; +using System.Security.AccessControl; +using System.Security.Cryptography; +using System.Security.Principal; +using System.Windows.Forms; +using Datadog.CustomActions.Extensions; +using Datadog.CustomActions.Native; +using Microsoft.Deployment.WindowsInstaller; +using Microsoft.Win32; +using static Datadog.CustomActions.Native.NativeMethods; + +namespace Datadog.CustomActions +{ + // Fetch and process registry value(s) and return a string to be assigned to a WIX property. + using GetRegistryPropertyHandler = Func; + + public class UserCustomActions + { + public static string GetRandomPassword(int length) + { + var rgb = new byte[length]; + var rngCrypt = new RNGCryptoServiceProvider(); + rngCrypt.GetBytes(rgb); + return Convert.ToBase64String(rgb); + } + + /// + /// Determine the default 'domain' part of a user account name when one is not provided by the user. + /// + /// + /// + /// We default to creating a local account if the domain + /// part is not specified in DDAGENTUSER_NAME. + /// However, domain controllers do not have local accounts, so we must + /// default to a domain account. + /// We still want to default to local accounts for domain clients + /// though, so it is not enough to check if the computer is domain joined, + /// we must specifically check if this computer is a domain controller. + /// + private static string GetDefaultDomainPart() + { + try + { + var serverInfo = NetServerGetInfo(); + if ((serverInfo.Type & ServerTypes.DomainCtrl) == ServerTypes.DomainCtrl + || (serverInfo.Type & ServerTypes.BackupDomainCtrl) == ServerTypes.BackupDomainCtrl) + { + // Computer is a DC, default to domain name + var joinedDomain = Domain.GetComputerDomain(); + return joinedDomain.Name; + } + // Computer is not a DC, default to machine name + } + catch (ActiveDirectoryObjectNotFoundException) + { + // not joined to a domain, use the machine name + } + return Environment.MachineName; + } + + /// + /// If the WIX property propertyName does not have a value, assign it the value returned by handler. + /// This gives precedence to properties provided on the command line over the registry values. + /// + private static void RegistryProperty(ISession session, string propertyName, GetRegistryPropertyHandler handler) + { + if (string.IsNullOrEmpty(session[propertyName])) + { + try + { + var propertyVal = handler(session); + if (!string.IsNullOrEmpty(propertyVal)) + { + session[propertyName] = propertyVal; + session.Log($"Found {propertyName} in registry {session[propertyName]}"); + } + } + catch (Exception e) + { + session.Log($"Exception processing registry value for {propertyName}: {e}"); + } + } + else + { + session.Log($"User provided {propertyName} {session[propertyName]}"); + } + } + + /// + /// Convenience wrapper of RegistryProperty for properties that have an exact 1:1 mapping to a registry value + /// and don't require additional processing. + /// + private static void RegistryValueProperty(ISession session, string propertyName, RegistryKey registryKey, string registryValue) + { + RegistryProperty(session, propertyName, + GetRegistryPropertyHandler => registryKey.GetValue(registryValue)?.ToString()); + } + + /// + /// Assigns WIX properties that were not provided by the user to their registry values. + /// + /// + /// Custom Action that runs (only once) in either the InstallUISequence or the InstallExecuteSequence. + /// + private static ActionResult ReadRegistryProperties(ISession session) + { + try + { + using (var subkey = Registry.LocalMachine.OpenSubKey(@"Software\Datadog\Datadog Agent")) + { + if (subkey != null) + { + // DDAGENTUSER_NAME + // + // The user account can be provided to the installer by + // * The registry + // * The command line + // * The agent user dialog + // The user account domain and name are stored separately in the registry + // but are passed together on the command line and the agent user dialog. + // This function will combine the registry properties if they exist. + // Preference is given to creds provided on the command line and the agent user dialog. + // For UI installs it ensures that the agent user dialog is pre-populated. + RegistryProperty(session, "DDAGENTUSER_NAME", + GetRegistryPropertyHandler => + { + var domain = subkey.GetValue("installedDomain").ToString(); + var user = subkey.GetValue("installedUser").ToString(); + if (!string.IsNullOrEmpty(domain) && !string.IsNullOrEmpty(user)) + { + return $"{domain}\\{user}"; + } + return string.Empty; + }); + + // PROJECTLOCATION + RegistryValueProperty(session, "PROJECTLOCATION", subkey, "InstallPath"); + + // APPLICATIONDATADIRECTORY + RegistryValueProperty(session, "APPLICATIONDATADIRECTORY", subkey, "ConfigRoot"); + } + } + } + catch (Exception e) + { + session.Log($"Error processing registry properties: {e}"); + return ActionResult.Failure; + } + return ActionResult.Success; + } + + [CustomAction] + public static ActionResult ReadRegistryProperties(Session session) + { + return ReadRegistryProperties(new SessionWrapper(session)); + } + + private static ActionResult ProcessDdAgentUserCredentials(ISession session) + { + try + { + if (!string.IsNullOrEmpty(session["DDAGENTUSER_PROCESSED_FQ_NAME"])) + { + // This function has already executed successfully + return ActionResult.Success; + } + + var ddAgentUserName = session["DDAGENTUSER_NAME"]; + + if (string.IsNullOrEmpty(ddAgentUserName)) + { + // Creds are not in registry and user did not pass a value, use default account name + ddAgentUserName = $"{GetDefaultDomainPart()}\\ddagentuser"; + session.Log($"No creds provided, using default {ddAgentUserName}"); + } + + // Check if user exists, and parse the full account name + var userFound = LookupAccountName(ddAgentUserName, + out var userName, + out var domain, + out var securityIdentifier, + out var nameUse); + var isServiceAccount = false; + if (userFound) + { + session["DDAGENTUSER_FOUND"] = "true"; + session["DDAGENTUSER_SID"] = securityIdentifier.ToString(); + session.Log($"Found {userName} in {domain} as {nameUse}"); + NetIsServiceAccount(null, ddAgentUserName, out isServiceAccount); + session.Log($"Is {userName} in {domain} a service account: {isServiceAccount}"); + } + else + { + session["DDAGENTUSER_FOUND"] = "false"; + session.Log($"User {ddAgentUserName} doesn't exist."); + ParseUserName(ddAgentUserName, out userName, out domain); + } + + if (string.IsNullOrEmpty(domain)) + { + domain = GetDefaultDomainPart(); + } + session.Log($"Installing with DDAGENTUSER_PROCESSED_NAME={userName} and DDAGENTUSER_PROCESSED_DOMAIN={domain}"); + // Create new DDAGENTUSER_PROCESSED_NAME property so we don't modify the property containing + // the user provided value DDAGENTUSER_NAME + session["DDAGENTUSER_PROCESSED_NAME"] = userName; + session["DDAGENTUSER_PROCESSED_DOMAIN"] = domain; + session["DDAGENTUSER_PROCESSED_FQ_NAME"] = $"{domain}\\{userName}"; + + var ddAgentUserPassword = session["DDAGENTUSER_PASSWORD"]; + + if (!isServiceAccount && string.IsNullOrEmpty(ddAgentUserPassword)) + { + ddAgentUserPassword = GetRandomPassword(128); + } + + if (!string.IsNullOrEmpty(ddAgentUserPassword) && isServiceAccount) + { + ddAgentUserPassword = null; + } + + session["DDAGENTUSER_PROCESSED_PASSWORD"] = ddAgentUserPassword; + } + catch (Exception e) + { + session.Log($"Error processing ddAgentUser credentials: {e}"); + return ActionResult.Failure; + } + return ActionResult.Success; + } + + [CustomAction] + public static ActionResult ProcessDdAgentUserCredentials(Session session) + { + return ProcessDdAgentUserCredentials(new SessionWrapper(session)); + } + + private static ActionResult ConfigureUser(ISession session) + { + try + { + SecurityIdentifier securityIdentifier; + if (string.IsNullOrEmpty(session.Property("DDAGENTUSER_SID"))) + { + var ddAgentUserName = $"{session.Property("DDAGENTUSER_PROCESSED_FQ_NAME")}"; + var userFound = LookupAccountName(ddAgentUserName, + out _, + out _, + out securityIdentifier, + out _); + if (!userFound) + { + session.Log($"Could not find user {ddAgentUserName}."); + return ActionResult.Failure; + } + } + else + { + securityIdentifier = new SecurityIdentifier(session.Property("DDAGENTUSER_SID")); + } + + securityIdentifier.AddToGroup(WellKnownSidType.BuiltinPerformanceMonitoringUsersSid); + securityIdentifier.AddToGroup(new SecurityIdentifier("S-1-5-32-573")); // Builtin\Event Log Readers + + securityIdentifier.AddPrivilege(AccountRightsConstants.SeDenyInteractiveLogonRight); + securityIdentifier.AddPrivilege(AccountRightsConstants.SeDenyNetworkLogonRight); + securityIdentifier.AddPrivilege(AccountRightsConstants.SeDenyRemoteInteractiveLogonRight); + securityIdentifier.AddPrivilege(AccountRightsConstants.SeServiceLogonRight); + + // Necessary to allow the ddagentuser to read the registry + var key = Registry.LocalMachine.CreateSubKey("SOFTWARE\\Datadog\\Datadog Agent"); + if (key != null) + { + var registrySecurity = new RegistrySecurity(); + registrySecurity.AddAccessRule(new RegistryAccessRule( + new SecurityIdentifier("SY"), + RegistryRights.FullControl, + AccessControlType.Allow)); + registrySecurity.AddAccessRule(new RegistryAccessRule( + new SecurityIdentifier("BA"), + RegistryRights.FullControl, + AccessControlType.Allow)); + registrySecurity.AddAccessRule(new RegistryAccessRule( + securityIdentifier, + RegistryRights.FullControl, + AccessControlType.Allow)); + registrySecurity.SetAccessRuleProtection(false, true); + key.SetAccessControl(registrySecurity); + } + else + { + session.Log($"{nameof(ConfigureUser)}: Could not set registry ACLs."); + return ActionResult.Failure; + } + + var files = new List + { + session.Property("APPLICATIONDATADIRECTORY"), + Path.Combine(session.Property("APPLICATIONDATADIRECTORY"), "logs"), + Path.Combine(session.Property("APPLICATIONDATADIRECTORY"), "logs\\agent.log"), + Path.Combine(session.Property("APPLICATIONDATADIRECTORY"), "conf.d"), + Path.Combine(session.Property("APPLICATIONDATADIRECTORY"), "auth_token"), + Path.Combine(session.Property("APPLICATIONDATADIRECTORY"), "datadog.yaml"), + + Path.Combine(session.Property("PROJECTLOCATION"), "embedded2"), + Path.Combine(session.Property("PROJECTLOCATION"), "embedded3"), + + }; + foreach (var filePath in files) + { + if (!Directory.Exists(filePath) && !File.Exists(filePath)) + { + if (filePath.Contains("embedded3")) + { + throw new InvalidOperationException($"The file {filePath} doesn't exist, but it should"); + } + session.Log($"{filePath} does not exists, skipping changing ACLs."); + continue; + } + + FileSystemSecurity fileSystemSecurity; + string sddl; + try + { + if (Directory.Exists(filePath)) + { + fileSystemSecurity = Directory.GetAccessControl(filePath, AccessControlSections.All); + sddl = $"D:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;WD;;;BU)(A;OICI;FA;;;{securityIdentifier.Value})"; + } + else + { + fileSystemSecurity = File.GetAccessControl(filePath, AccessControlSections.All); + sddl = $"D:PAI(A;;FA;;;SY)(A;;FA;;;BA)(A;;WD;;;BU)(A;;FA;;;{securityIdentifier.Value})"; + } + } + catch (Exception e) + { + session.Log($"Failed to get ACLs on {filePath}: {e}"); + throw; + } + + session.Log($"{filePath} current ACLs: {fileSystemSecurity.GetSecurityDescriptorSddlForm(AccessControlSections.All)}"); + + // Set owner and group only if necessary + if (fileSystemSecurity.GetSecurityDescriptorSddlForm(AccessControlSections.Owner) != "O:SY" || + fileSystemSecurity.GetSecurityDescriptorSddlForm(AccessControlSections.Group) != "G:SY") + { + fileSystemSecurity.SetSecurityDescriptorSddlForm($"O:SYG:SY{sddl}"); + } + else + { + fileSystemSecurity.SetSecurityDescriptorSddlForm(sddl); + } + + try + { + if (Directory.Exists(filePath)) + { + Directory.SetAccessControl(filePath, (DirectorySecurity)fileSystemSecurity); + } + else + { + File.SetAccessControl(filePath, (FileSecurity)fileSystemSecurity); + } + } + catch (Exception e) + { + try + { + // Try again but without owner/group + fileSystemSecurity.SetSecurityDescriptorSddlForm(sddl); + if (Directory.Exists(filePath)) + { + Directory.SetAccessControl(filePath, (DirectorySecurity)fileSystemSecurity); + } + else + { + File.SetAccessControl(filePath, (FileSecurity)fileSystemSecurity); + } + } + catch (Exception) + { + session.Log($"Failed to set ACLs on {filePath}: {e}"); + throw; + } + } + + try + { + if (Directory.Exists(filePath)) + { + fileSystemSecurity = Directory.GetAccessControl(filePath); + } + else + { + fileSystemSecurity = File.GetAccessControl(filePath); + } + + session.Log($"{filePath} new ACLs: {fileSystemSecurity.GetSecurityDescriptorSddlForm(AccessControlSections.All)}"); + } + catch (Exception e) + { + session.Log($"Failed to get ACLs on {filePath}: {e}"); + } + } + + return ActionResult.Success; + } + catch (Exception e) + { + session.Log($"Failed to configure user: {e}"); + return ActionResult.Failure; + } + } + + [CustomAction] + public static ActionResult ConfigureUser(Session session) + { + return ConfigureUser(new SessionWrapper(session)); + } + + private static ActionResult OpenMsiLog(ISession session) + { + // The MessageBoxs are unlikely to ever show. + // In testing I couldn't hit the "failed" ones. For permissions errors, + // Notepad still opens, and Notepad shows its own error dialog box. + // The log file should always exist because we set the MsiLogging + // property, so unless that changes we won't see the "no log file" + // MessageBoxs either. + // The log file can't be deleted/renamed while the installer is running + // because the installer has a handle to it. + // We use MessageBoxIcon.Warning rather than MessageBoxIcon.Error + // to match the WiX built-in error dialogs. + var wixLogLocation = string.Empty; + var messageBoxTitle = "Datadog Agent Setup"; + try + { + wixLogLocation = session["MsiLogFileLocation"]; + if (!string.IsNullOrEmpty(wixLogLocation)) + { + var proc = System.Diagnostics.Process.Start(wixLogLocation); + if (proc == null) + { + // Did not start a process + MessageBox.Show($"Failed to open log file: {wixLogLocation}", + messageBoxTitle, + MessageBoxButtons.OK, + MessageBoxIcon.Warning); + } + } + else + { + // Log file path property is empty + MessageBox.Show("There is no log file. Please pass the /l or /log options to the installer to create a log file.", + messageBoxTitle, + MessageBoxButtons.OK, + MessageBoxIcon.Warning); + } + } + catch (Exception e) + { + if (!string.IsNullOrEmpty(wixLogLocation)) + { + MessageBox.Show($"Failed to open log file: {wixLogLocation}\n{e.Message}", + messageBoxTitle, + MessageBoxButtons.OK, + MessageBoxIcon.Warning); + } + else + { + // Log file path property is empty + MessageBox.Show("There is no log file. Please pass the /l or /log options to the installer to create a log file.", + messageBoxTitle, + MessageBoxButtons.OK, + MessageBoxIcon.Warning); + } + return ActionResult.Failure; + } + return ActionResult.Success; + } + + [CustomAction] + public static ActionResult OpenMsiLog(Session session) + { + return OpenMsiLog(new SessionWrapper(session)); + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/CustomActions/packages.config b/tools/windows/DatadogAgentInstaller/CustomActions/packages.config new file mode 100644 index 0000000000000..7a43d5802cdcc --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/CustomActions/packages.config @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/tools/windows/DatadogAgentInstaller/DatadogAgentInstaller.sln b/tools/windows/DatadogAgentInstaller/DatadogAgentInstaller.sln new file mode 100644 index 0000000000000..724e75a000931 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/DatadogAgentInstaller.sln @@ -0,0 +1,43 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.32014.148 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixSetup", "WixSetup\WixSetup.csproj", "{168321DA-C4C0-4361-94C6-105346EC0FC5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustomActions", "CustomActions\CustomActions.csproj", "{461CE844-4B07-47BA-B2D2-5415ABD36792}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustomActions.Tests", "CustomActions.Tests\CustomActions.Tests.csproj", "{848B3918-CCFC-47CA-92EF-763C75EFD16D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixSetup.Tests", "WixSetup.Tests\WixSetup.Tests.csproj", "{5D344B27-0E3F-41DF-A284-C811EB9F8748}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {168321DA-C4C0-4361-94C6-105346EC0FC5}.Debug|x64.ActiveCfg = Debug|x64 + {168321DA-C4C0-4361-94C6-105346EC0FC5}.Debug|x64.Build.0 = Debug|x64 + {168321DA-C4C0-4361-94C6-105346EC0FC5}.Release|x64.ActiveCfg = Release|x64 + {168321DA-C4C0-4361-94C6-105346EC0FC5}.Release|x64.Build.0 = Release|x64 + {461CE844-4B07-47BA-B2D2-5415ABD36792}.Debug|x64.ActiveCfg = Debug|x64 + {461CE844-4B07-47BA-B2D2-5415ABD36792}.Debug|x64.Build.0 = Debug|x64 + {461CE844-4B07-47BA-B2D2-5415ABD36792}.Release|x64.ActiveCfg = Release|x64 + {461CE844-4B07-47BA-B2D2-5415ABD36792}.Release|x64.Build.0 = Release|x64 + {848B3918-CCFC-47CA-92EF-763C75EFD16D}.Debug|x64.ActiveCfg = Debug|x64 + {848B3918-CCFC-47CA-92EF-763C75EFD16D}.Debug|x64.Build.0 = Debug|x64 + {848B3918-CCFC-47CA-92EF-763C75EFD16D}.Release|x64.ActiveCfg = Release|x64 + {848B3918-CCFC-47CA-92EF-763C75EFD16D}.Release|x64.Build.0 = Release|x64 + {5D344B27-0E3F-41DF-A284-C811EB9F8748}.Debug|x64.ActiveCfg = Debug|x64 + {5D344B27-0E3F-41DF-A284-C811EB9F8748}.Debug|x64.Build.0 = Debug|x64 + {5D344B27-0E3F-41DF-A284-C811EB9F8748}.Release|x64.ActiveCfg = Release|x64 + {5D344B27-0E3F-41DF-A284-C811EB9F8748}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {85D3AD3F-7C15-4BCA-BC30-822989F3EE40} + EndGlobalSection +EndGlobal diff --git a/tools/windows/DatadogAgentInstaller/Directory.Build.props b/tools/windows/DatadogAgentInstaller/Directory.Build.props new file mode 100644 index 0000000000000..c70bad18e8a35 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/Directory.Build.props @@ -0,0 +1,19 @@ + + + + + + $(AGENT_INSTALLER_OUTPUT_DIR)\bin\ + $(AGENT_INSTALLER_OUTPUT_DIR)\obj\$(Platform)\$(MSBuildProjectName)\ + $(NUGET_PACKAGES_DIR) + + + + + $(SolutionDir)\bin\ + $(SolutionDir)\obj\$(Platform)\$(MSBuildProjectName) + $(SolutionDir)\packages\ + + diff --git a/tools/windows/DatadogAgentInstaller/WixSetup.Tests/AgentVersionTests.cs b/tools/windows/DatadogAgentInstaller/WixSetup.Tests/AgentVersionTests.cs new file mode 100644 index 0000000000000..4949bc22e4433 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup.Tests/AgentVersionTests.cs @@ -0,0 +1,33 @@ +using FluentAssertions; +using Xunit; + +namespace WixSetup.Tests +{ + public class AgentVersionTests + { + [Fact] + public void Should_Version_Be_7_99_0_2_By_Default() + { + // Explicit null to avoid env var influence. + var version = new Datadog.AgentVersion(null); + version.PackageVersion.Should().Be("7.99.0"); + version.Version.Major.Should().Be(7); + version.Version.Minor.Should().Be(99); + version.Version.Build.Should().Be(0); + version.Version.Revision.Should().Be(2); + } + + [Fact] + public void Should_Parse_Nightly_Version_Correctly() + { + // Output of inv -e agent.version --omnibus-format on a nightly + string packageVersion = "7.40.0~rc.2+git.309.1240df2"; + var version = new Datadog.AgentVersion(packageVersion); + version.PackageVersion.Should().Be(packageVersion); + version.Version.Major.Should().Be(7); + version.Version.Minor.Should().Be(40); + version.Version.Build.Should().Be(0); + version.Version.Revision.Should().Be(2); + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/WixSetup.Tests/Properties/AssemblyInfo.cs b/tools/windows/DatadogAgentInstaller/WixSetup.Tests/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000000..dba1b09d5a0f7 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup.Tests/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WixSetup.Tests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("WixSetup.Tests")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("5d344b27-0e3f-41df-a284-c811eb9f8748")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/tools/windows/DatadogAgentInstaller/WixSetup.Tests/WixSetup.Tests.csproj b/tools/windows/DatadogAgentInstaller/WixSetup.Tests/WixSetup.Tests.csproj new file mode 100644 index 0000000000000..095b8bcd35f39 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup.Tests/WixSetup.Tests.csproj @@ -0,0 +1,157 @@ + + + + + + + Debug + AnyCPU + {5D344B27-0E3F-41DF-A284-C811EB9F8748} + Library + Properties + WixSetup.Tests + WixSetup.Tests + v4.7.2 + 512 + true + + + + + true + full + false + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + TRACE + prompt + 4 + + + true + DEBUG;TRACE + full + x64 + 7.3 + prompt + + + true + TRACE + true + pdbonly + x64 + 7.3 + prompt + + + + $(NuGetPackagesDir)\AutoFixture.4.17.0\lib\net452\AutoFixture.dll + + + $(NuGetPackagesDir)\AutoFixture.Xunit2.4.17.0\lib\net452\AutoFixture.Xunit2.dll + + + $(NuGetPackagesDir)\Fare.2.1.1\lib\net35\Fare.dll + + + $(NuGetPackagesDir)\FluentAssertions.6.8.0\lib\net47\FluentAssertions.dll + + + + + + + + $(NuGetPackagesDir)\System.IO.4.3.0\lib\net462\System.IO.dll + True + True + + + $(NuGetPackagesDir)\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll + True + True + + + $(NuGetPackagesDir)\System.Runtime.4.3.0\lib\net462\System.Runtime.dll + True + True + + + $(NuGetPackagesDir)\System.Runtime.CompilerServices.Unsafe.4.5.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + + + $(NuGetPackagesDir)\System.Security.Cryptography.Algorithms.4.3.0\lib\net463\System.Security.Cryptography.Algorithms.dll + True + True + + + $(NuGetPackagesDir)\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll + True + True + + + $(NuGetPackagesDir)\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll + True + True + + + $(NuGetPackagesDir)\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll + True + True + + + $(NuGetPackagesDir)\System.Threading.Tasks.Extensions.4.5.0\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll + + + + + + + + $(NuGetPackagesDir)\xunit.abstractions.2.0.3\lib\net35\xunit.abstractions.dll + + + $(NuGetPackagesDir)\xunit.assert.2.4.2\lib\netstandard1.1\xunit.assert.dll + + + $(NuGetPackagesDir)\xunit.extensibility.core.2.4.2\lib\net452\xunit.core.dll + + + $(NuGetPackagesDir)\xunit.extensibility.execution.2.4.2\lib\net452\xunit.execution.desktop.dll + + + + + + + + + + + + + + + + + {168321da-c4c0-4361-94c6-105346ec0fc5} + WixSetup + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + diff --git a/tools/windows/DatadogAgentInstaller/WixSetup.Tests/app.config b/tools/windows/DatadogAgentInstaller/WixSetup.Tests/app.config new file mode 100644 index 0000000000000..873e7fe5e82f6 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup.Tests/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/tools/windows/DatadogAgentInstaller/WixSetup.Tests/packages.config b/tools/windows/DatadogAgentInstaller/WixSetup.Tests/packages.config new file mode 100644 index 0000000000000..1dac7268e60ba --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup.Tests/packages.config @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/App.config b/tools/windows/DatadogAgentInstaller/WixSetup/App.config new file mode 100644 index 0000000000000..a2056b80e930c --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/App.config @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/AssemblyExtensions.cs b/tools/windows/DatadogAgentInstaller/WixSetup/AssemblyExtensions.cs new file mode 100644 index 0000000000000..5262897919d02 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/AssemblyExtensions.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Reflection; + +namespace WixSetup +{ + public static class AssemblyExtensions + { + public static IEnumerable GetReferencesAssembliesPaths(this Type type) + { + yield return type.Assembly.Location; + + foreach (AssemblyName assemblyName in type.Assembly.GetReferencedAssemblies()) + { + yield return Assembly.ReflectionOnlyLoad(assemblyName.FullName).Location; + } + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/CompressedDir.cs b/tools/windows/DatadogAgentInstaller/WixSetup/CompressedDir.cs new file mode 100644 index 0000000000000..dcb39ded30a49 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/CompressedDir.cs @@ -0,0 +1,72 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Xml.Linq; +using Cave.Compression.Tar; +using SevenZip; +using File = System.IO.File; + +namespace WixSetup +{ + public class CompressedDir : WixSharp.File + { + private readonly string _sourceDir; + + public CompressedDir(IWixProjectEvents wixProjectEvents, string targetPath, string sourceDir) + : base($"{targetPath}.COMPRESSED") + { + wixProjectEvents.WixSourceGenerated += OnWixSourceGenerated; + _sourceDir = sourceDir; + } + + public void OnWixSourceGenerated(XDocument document) + { +#if DEBUG + // In debug mode, skip generating the file if it + // already exists. Delete the file to regenerate it. + if (File.Exists(Name)) + { + return; + } +#endif + var tar = $"{Name}.tar"; + + using (var outStream = File.Create(tar)) + { + using (var tarOutStream = new TarWriter(outStream, false)) + { + tarOutStream.AddDirectory(Path.GetFileName(_sourceDir), _sourceDir); + } + } + + using (var inStream = File.Open(tar, FileMode.Open)) + using (var outStream = File.Create(Name)) + { + Compress(inStream, outStream); + } + File.Delete(tar); + } + + static void Compress(Stream inStream, Stream outStream) + { + var encoder = new SevenZip.Compression.LZMA.Encoder(); + var encodingProps = new Dictionary + { + {CoderPropID.DictionarySize, 32 * 1024 * 1024}, + {CoderPropID.PosStateBits, 2}, + {CoderPropID.LitContextBits, 3}, + {CoderPropID.LitPosBits, 0}, + {CoderPropID.Algorithm, 2}, + {CoderPropID.NumFastBytes, 64}, + {CoderPropID.MatchFinder, "bt4"} + }; + + encoder.SetCoderProperties(encodingProps.Keys.ToArray(), encodingProps.Values.ToArray()); + encoder.WriteCoderProperties(outStream); + var writer = new BinaryWriter(outStream, Encoding.UTF8); + writer.Write(inStream.Length - inStream.Position); + encoder.Code(inStream, outStream, -1, -1, null); + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/Conditions.cs b/tools/windows/DatadogAgentInstaller/WixSetup/Conditions.cs new file mode 100644 index 0000000000000..419bbc1ad869c --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/Conditions.cs @@ -0,0 +1,11 @@ +using WixSharp; + +namespace WixSetup +{ + public static class Conditions + { + public static readonly Condition LicenseAccepted = Condition.Create("LicenseAccepted = \"1\""); + public static readonly Condition Installed_AND_NOT_PATCH = Condition.Installed & Condition.NOT(Condition.Create("PATCH")); + public static readonly Condition Installed_AND_PATCH = Condition.Installed & Condition.Create("PATCH"); + } +} diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/CustomAction.cs b/tools/windows/DatadogAgentInstaller/WixSetup/CustomAction.cs new file mode 100644 index 0000000000000..35481ee38602f --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/CustomAction.cs @@ -0,0 +1,99 @@ +using System.Collections.Generic; +using System.Linq; +using WixSharp; + +namespace WixSetup +{ + public class CustomAction : ManagedAction where T : new () + { + public CustomAction( + Id id, + CustomActionMethod method) + : base(id, method, typeof(T).Assembly.Location) + { + RefAssemblies = typeof(T).GetReferencesAssembliesPaths().ToArray(); + } + + public CustomAction( + CustomActionMethod method) + : base(method, typeof(T).Assembly.Location) + { + RefAssemblies = typeof(T).GetReferencesAssembliesPaths().ToArray(); + } + + public CustomAction( + CustomActionMethod action, + Return returnType, + When when, + Step step) + : base(action, typeof(T).Assembly.Location, returnType, when, step, Condition.Always) + { + RefAssemblies = typeof(T).GetReferencesAssembliesPaths().ToArray(); + } + + public CustomAction( + Id id, + CustomActionMethod action, + Return returnType, + When when, + Step step, + Condition condition) + : base(id, action, typeof(T).Assembly.Location, returnType, when, step, condition) + { + RefAssemblies = typeof(T).GetReferencesAssembliesPaths().ToArray(); + } + + public CustomAction( + Id id, + CustomActionMethod action, + Return returnType, + When when, + Step step, + Condition condition, + Sequence sequence) + : base(id, action, typeof(T).Assembly.Location, returnType, when, step, condition, sequence) + { + RefAssemblies = typeof(T).GetReferencesAssembliesPaths().ToArray(); + } + + public CustomAction( + Id id, + CustomActionMethod action, + Return returnType, + When when, + Step step) + : base(id, action, typeof(T).Assembly.Location, returnType, when, step, Condition.Always) + { + RefAssemblies = typeof(T).GetReferencesAssembliesPaths().ToArray(); + } + + public CustomAction( + CustomActionMethod action, + Return returnType, + When when, + Step step, + Condition condition, + CustomActionMethod rollback) + : base(action, typeof(T).Assembly.Location, returnType, when, step, condition, rollback) + { + RefAssemblies = typeof(T).GetReferencesAssembliesPaths().ToArray(); + } + + public CustomAction HideTarget(bool hideTarget) + { + if (Attributes == null) + { + Attributes = new Dictionary(); + } + + Attributes["HideTarget"] = hideTarget ? "yes" : "no"; + return this; + } + + public CustomAction SetProperties(string properties) + { + UsesProperties = properties; + return this; + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentBinaries.cs b/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentBinaries.cs new file mode 100644 index 0000000000000..b75f8c4c88704 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentBinaries.cs @@ -0,0 +1,36 @@ +namespace WixSetup.Datadog +{ + public class AgentBinaries + { + private readonly string _binSource; + public string Agent => $@"{_binSource}\agent\agent.exe"; + public string Tray => $@"{_binSource}\agent\ddtray.exe"; + public string ProcessAgent => $@"{_binSource}\agent\process-agent.exe"; + public string SystemProbe => $@"{_binSource}\agent\system-probe.exe"; + public string TraceAgent => $@"{_binSource}\agent\trace-agent.exe"; + public string LibDatadogAgentThree => $@"{_binSource}\agent\libdatadog-agent-three.dll"; + + public string[] PythonThreeBinaries; + public string[] PythonTwoBinaries; + + public string LibDatadogAgentTwo => $@"{_binSource}\agent\libdatadog-agent-two.dll"; + + public AgentBinaries(string binSource, string installerSource) + { + _binSource = binSource; + PythonThreeBinaries = new[] + { + $@"{installerSource}\embedded3\python.exe", + $@"{installerSource}\embedded3\python3.dll", + $@"{installerSource}\embedded3\python38.dll", + $@"{installerSource}\embedded3\pythonw.exe" + }; + PythonTwoBinaries = new[] + { + $@"{installerSource}\embedded2\python.exe", + $@"{installerSource}\embedded2\python27.dll", + $@"{installerSource}\embedded2\pythonw.exe" + }; + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentCustomActions.cs b/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentCustomActions.cs new file mode 100644 index 0000000000000..e87886386ac1c --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentCustomActions.cs @@ -0,0 +1,196 @@ +using System.Diagnostics.CodeAnalysis; +using Datadog.CustomActions; +using WixSharp; + +namespace WixSetup.Datadog +{ + public class AgentCustomActions + { + [SuppressMessage("ReSharper", "InconsistentNaming")] + private static readonly Condition Being_Reinstalled = Condition.Create("(REINSTALL<>\"\")"); + + [SuppressMessage("ReSharper", "InconsistentNaming")] + private static readonly Condition NOT_Being_Reinstalled = Condition.NOT(Being_Reinstalled); + + public ManagedAction ReadConfig { get; } + + public ManagedAction WriteConfig { get; } + + public ManagedAction ReadRegistryProperties { get; } + + public ManagedAction ProcessDdAgentUserCredentials { get; } + + public ManagedAction DecompressPythonDistributions { get; } + + public ManagedAction CleanupOnRollback { get; } + + public ManagedAction CleanupOnUninstall { get; } + + public ManagedAction ConfigureUser { get; } + + public ManagedAction OpenMsiLog { get; } + + public AgentCustomActions() + { + ReadRegistryProperties = new CustomAction( + new Id(nameof(ReadRegistryProperties)), + UserCustomActions.ReadRegistryProperties, + Return.ignore, + // AppSearch is when RegistrySearch is run, so that will overwrite + // any command line values. + // Prefer using our CA over RegistrySearch. + // It is executed on the Welcome screen of the installer. + When.After, + Step.AppSearch, + Condition.NOT_BeingRemoved, + // Run in either sequence so our CA is also run in non-UI installs + Sequence.InstallExecuteSequence | Sequence.InstallUISequence + ) + { + // Ensure we only run in one sequence + Execute = Execute.firstSequence + }; + + // We need to explicitly set the ID since that we are going to reference before the Build* call. + // See for more information. + ReadConfig = new CustomAction( + new Id(nameof(ReadConfig)), + ConfigCustomActions.ReadConfig, + Return.ignore, + When.After, + // Must execute after CostFinalize since we depend + // on APPLICATIONDATADIRECTORY being set. + Step.CostFinalize, + Condition.NOT_BeingRemoved, + // Run in either sequence so our CA is also run in non-UI installs + Sequence.InstallExecuteSequence | Sequence.InstallUISequence + ) + { + // Ensure we only run in one sequence + Execute = Execute.firstSequence + } + .SetProperties("APPLICATIONDATADIRECTORY=[APPLICATIONDATADIRECTORY]"); + + WriteConfig = new CustomAction( + new Id(nameof(WriteConfig)), + ConfigCustomActions.WriteConfig, + Return.check, + When.Before, + Step.StartServices, + Condition.NOT_BeingRemoved & NOT_Being_Reinstalled + ) + { + Execute = Execute.deferred + } + .SetProperties( + "APPLICATIONDATADIRECTORY=[APPLICATIONDATADIRECTORY], " + + "PROJECTLOCATION=[PROJECTLOCATION], " + + "SYSPROBE_PRESENT=[SYSPROBE_PRESENT], " + + "ADDLOCAL=[ADDLOCAL], " + + "APIKEY=[APIKEY], " + + "TAGS=[TAGS], " + + "HOSTNAME=[HOSTNAME], " + + "PROXY_HOST=[PROXY_HOST], " + + "PROXY_PORT=[PROXY_PORT], " + + "PROXY_USER=[PROXY_USER], " + + "PROXY_PASSWORD=[PROXY_PASSWORD], " + + "LOGS_ENABLED=[LOGS_ENABLED], " + + "APM_ENABLED=[APM_ENABLED], " + + "PROCESS_ENABLED=[PROCESS_ENABLED], " + + "PROCESS_DISCOVERY_ENABLED=[PROCESS_DISCOVERY_ENABLED], " + + "CMD_PORT=[CMD_PORT], " + + "SITE=[SITE], " + + "DD_URL=[DD_URL], " + + "LOGS_DD_URL=[LOGS_DD_URL], " + + "PROCESS_DD_URL=[PROCESS_DD_URL], " + + "TRACE_DD_URL=[TRACE_DD_URL], " + + "PYVER=[PYVER], " + + "HOSTNAME_FQDN_ENABLED=[HOSTNAME_FQDN_ENABLED], " + + "NPM=[NPM], " + + "EC2_USE_WINDOWS_PREFIX_DETECTION=[EC2_USE_WINDOWS_PREFIX_DETECTION], " + + "OVERRIDE_INSTALLATION_METHOD=[OVERRIDE_INSTALLATION_METHOD]") + .HideTarget(true); + + // Cleanup leftover files on rollback + // must be before the DecompressPythonDistributions custom action. + // That way, if DecompressPythonDistributions fails, this will get executed. + CleanupOnRollback = new CustomAction( + new Id(nameof(CleanupOnRollback)), + CleanUpFilesCustomAction.CleanupFiles, + Return.check, + When.After, + new Step(WriteConfig.Id), + (Condition.NOT_Installed & Condition.NOT_BeingRemoved) | Being_Reinstalled + ) + { + Execute = Execute.rollback + } + .SetProperties("PROJECTLOCATION=[PROJECTLOCATION], APPLICATIONDATADIRECTORY=[APPLICATIONDATADIRECTORY]"); + + DecompressPythonDistributions = new CustomAction( + new Id(nameof(DecompressPythonDistributions)), + PythonDistributionCustomAction.DecompressPythonDistributions, + Return.check, + When.After, + new Step(CleanupOnRollback.Id), + (Condition.NOT_Installed & Condition.NOT_BeingRemoved) | Being_Reinstalled + ) + { + Execute = Execute.deferred + } + .SetProperties("PROJECTLOCATION=[PROJECTLOCATION]"); + + // Cleanup leftover files on uninstall + CleanupOnUninstall = new CustomAction( + new Id(nameof(CleanupOnUninstall)), + CleanUpFilesCustomAction.CleanupFiles, + Return.check, + When.Before, + Step.RemoveFiles, + Condition.Installed + ) + { + Execute = Execute.deferred + } + .SetProperties("PROJECTLOCATION=[PROJECTLOCATION], APPLICATIONDATADIRECTORY=[APPLICATIONDATADIRECTORY]"); + + ConfigureUser = new CustomAction( + new Id(nameof(ConfigureUser)), + UserCustomActions.ConfigureUser, + Return.check, + When.After, + new Step(DecompressPythonDistributions.Id), + Condition.NOT_Installed & Condition.NOT_BeingRemoved + ) + { + Execute = Execute.deferred + } + .SetProperties("APPLICATIONDATADIRECTORY=[APPLICATIONDATADIRECTORY], " + + "PROJECTLOCATION=[PROJECTLOCATION], " + + "DDAGENTUSER_PROCESSED_FQ_NAME=[DDAGENTUSER_PROCESSED_FQ_NAME], " + + "DDAGENTUSER_SID=[DDAGENTUSER_SID]"); + + ProcessDdAgentUserCredentials = new CustomAction( + new Id(nameof(ProcessDdAgentUserCredentials)), + UserCustomActions.ProcessDdAgentUserCredentials, + Return.check, + // Run at end of "config phase", right before the "make changes" phase. + When.Before, + Step.InstallInitialize, + // Run unless we are being uninstalled. + // This CA produces properties used for services, accounts, and permissions. + Condition.NOT_BeingRemoved + ) + .SetProperties("DDAGENTUSER_NAME=[DDAGENTUSER_NAME], DDAGENTUSER_PASSWORD=[DDAGENTUSER_PASSWORD]") + .HideTarget(true); + + OpenMsiLog = new CustomAction( + new Id(nameof(OpenMsiLog)), + UserCustomActions.OpenMsiLog + ) + { + Sequence = Sequence.NotInSequence + }; + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentCustomActionsProjectExtensions.cs b/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentCustomActionsProjectExtensions.cs new file mode 100644 index 0000000000000..7b25b31cede81 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentCustomActionsProjectExtensions.cs @@ -0,0 +1,28 @@ +using System.Linq; +using WixSharp; + +namespace WixSetup.Datadog +{ + public static class AgentCustomActionsProjectExtensions + { + /// + /// Helper method that will list all the properties deriving from + /// in and add them to the . + /// That way, no action is omitted by accident. + /// + /// The project to add the custom actions to. + /// The instance of the Agent custom action to inject. + /// The project, for chaining. + public static Project SetCustomActions(this Project project, AgentCustomActions agentCustomActions) + { + project.Actions = project.Actions.Combine( + agentCustomActions.GetType() + .GetProperties() + .Where(p => p.PropertyType.IsAssignableFrom(typeof(ManagedAction))) + .Select(p => (Action)p.GetValue(agentCustomActions, null)) + .ToArray() + ); + return project; + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentFeatures.cs b/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentFeatures.cs new file mode 100644 index 0000000000000..6019e9976fc80 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentFeatures.cs @@ -0,0 +1,18 @@ +using WixSharp; + +namespace WixSetup.Datadog +{ + public class AgentFeatures + { + public Feature MainApplication { get; } + + public Feature Npm { get; } + + public AgentFeatures() + { + Npm = new Feature("NPM", description: "Network Performance Monitoring", isEnabled: false, allowChange: true, configurableDir: "PROJECTLOCATION"); + MainApplication = new Feature("MainApplication", description: "Datadog Agent", isEnabled: true, allowChange: false, configurableDir: "PROJECTLOCATION"); + MainApplication.Children.Add(Npm); + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentInstaller.cs b/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentInstaller.cs new file mode 100644 index 0000000000000..701c68ec35477 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentInstaller.cs @@ -0,0 +1,378 @@ +using System; +using System.IO; +using System.Linq; +using System.Xml.Linq; +using NineDigit.WixSharpExtensions; +using WixSharp; +using WixSharp.CommonTasks; + +namespace WixSetup.Datadog +{ + public class AgentInstaller : IWixProjectEvents + { + // Company + private const string CompanyFullName = "Datadog, inc."; + + // Product + private const string ProductFullName = "Datadog Agent"; + private const string ProductDescription = "Datadog helps you monitor your infrastructure and application"; + private const string ProductHelpUrl = @"https://help.datadoghq.com/hc/en-us"; + private const string ProductAboutUrl = @"https://www.datadoghq.com/about/"; + private const string ProductComment = @"Copyright 2015 - Present Datadog"; + private const string ProductContact = @"https://www.datadoghq.com/about/contact/"; + + // same value for all versions; must not be changed + private static readonly Guid ProductUpgradeCode = new Guid("0c50421b-aefb-4f15-a809-7af256d608a5"); + private static readonly string ProductLicenceRtfFilePath = Path.Combine("assets", "LICENSE.rtf"); + private static readonly string ProductIconFilePath = Path.Combine("assets", "project.ico"); + private static readonly string InstallerBackgroundImagePath = Path.Combine("assets", "dialog_background.bmp"); + private static readonly string InstallerBannerImagePath = Path.Combine("assets", "banner_background.bmp"); + + // Source directories + private const string InstallerSource = @"C:\opt\datadog-agent"; + private const string BinSource = @"C:\omnibus-ruby\src\datadog-agent\src\github.com\DataDog\datadog-agent\bin"; + private const string EtcSource = @"C:\omnibus-ruby\src\etc\datadog-agent"; + + private readonly AgentBinaries _agentBinaries; + private readonly AgentFeatures _agentFeatures = new AgentFeatures(); + private readonly AgentPython _agentPython = new AgentPython(); + private readonly AgentVersion _agentVersion = new AgentVersion(); + private readonly AgentSignature _agentSignature; + private readonly AgentCustomActions _agentCustomActions = new AgentCustomActions(); + private readonly AgentInstallerUI _agentInstallerUi; + + public AgentInstaller() + { + _agentBinaries = new AgentBinaries(BinSource, InstallerSource); + _agentSignature = new AgentSignature(this, _agentPython, _agentBinaries); + _agentInstallerUi = new AgentInstallerUI(this, _agentCustomActions); + } + + public Project ConfigureProject() + { + var project = new Project("Datadog Agent", + new User + { + // CreateUser fails with ERROR_BAD_USERNAME if Name is a fully qualified user name + Name = "[DDAGENTUSER_PROCESSED_NAME]", + Domain = "[DDAGENTUSER_PROCESSED_DOMAIN]", + Password = "[DDAGENTUSER_PROCESSED_PASSWORD]", + PasswordNeverExpires = true, + RemoveOnUninstall = true, + FailIfExists = false, + UpdateIfExists = true, + CreateUser = true + }, + new Property("MsiLogging", "iwearucmop!"), + new Property("APIKEY") + { + AttributesDefinition = "Hidden=yes;Secure=yes" + }, + // User provided password property + new Property("DDAGENTUSER_PASSWORD") + { + AttributesDefinition = "Hidden=yes;Secure=yes" + }, + // ProcessDDAgentUserCredentials CustomAction processed password property + new Property("DDAGENTUSER_PROCESSED_PASSWORD") + { + AttributesDefinition = "Hidden=yes;Secure=yes" + }, + new Property("PROJECTLOCATION") + { + AttributesDefinition = "Secure=yes", + }, + new Property("APPLICATIONDATADIRECTORY") + { + AttributesDefinition = "Secure=yes", + }, + new CloseApplication(new Id("CloseTrayApp"), + Path.GetFileName(_agentBinaries.Tray), + closeMessage: true, + rebootPrompt: false + ) + { + Timeout = 1 + }, + new RegKey( + _agentFeatures.MainApplication, + RegistryHive.LocalMachine, @"Software\Datadog\Datadog Agent", + // Store these properties in the registry for retrieval by future + // installer runs via the ReadRegistryProperties CA. + new RegValue("InstallPath", "[PROJECTLOCATION]") { Win64 = true }, + new RegValue("ConfigRoot", "[APPLICATIONDATADIRECTORY]") { Win64 = true }, + new RegValue("installedDomain", "[DDAGENTUSER_PROCESSED_DOMAIN]") { Win64 = true }, + new RegValue("installedUser", "[DDAGENTUSER_PROCESSED_NAME]") { Win64 = true } + ) + { + Win64 = true + }, + new RemoveRegistryKey(_agentFeatures.MainApplication, @"Software\Datadog\Datadog Agent") + ) + .SetCustomActions(_agentCustomActions) + .SetProjectInfo( + upgradeCode: ProductUpgradeCode, + name: ProductFullName, + description: ProductDescription, + // SetProjectInfo throws an Exception is Revision is != 0 + // we use Revision = 2 for the next gen installer while it's still a prototype + version: new Version(_agentVersion.Version.Major, _agentVersion.Version.Minor, + _agentVersion.Version.Build, 0) + ) + .SetControlPanelInfo( + name: ProductFullName, + manufacturer: CompanyFullName, + readme: ProductHelpUrl, + comment: ProductComment, + contact: ProductContact, + helpUrl: new Uri(ProductHelpUrl), + aboutUrl: new Uri(ProductAboutUrl), + productIconFilePath: new FileInfo(ProductIconFilePath) + ) + .DisableDowngradeToPreviousVersion() + .SetMinimalUI( + backgroundImage: new FileInfo(InstallerBackgroundImagePath), + bannerImage: new FileInfo(InstallerBannerImagePath), + // $@"{installerSource}\LICENSE" is not RTF and Compiler.AllowNonRtfLicense = true doesn't help. + licenceRtfFile: new FileInfo(ProductLicenceRtfFilePath) + ) + .AddDirectories( + CreateProgramFilesFolder(), + CreateAppDataFolder(), + new Dir(@"%ProgramMenu%\Datadog", + new ExeFileShortcut + { + Name = "Datadog Agent Manager", + Target = "[AGENT]ddtray.exe", + Arguments = "\"-launch-gui\"", + WorkingDirectory = "AGENT", + } + ), + new Dir("logs") + ) + // enable the ability to repair the installation even when the original MSI is no longer available. + //.EnableResilientPackage() // Resilient package requires a .Net version newer than what is installed on 2008 R2 + ; + + // Set this explicitly to false so that we're not tempted to set it to true + // in the future. This flag causes Wix to ignore the fourth product version, + // so 1.0.0.1 will be considered equal to 1.0.0.2998. + project.MajorUpgrade.AllowSameVersionUpgrades = false; + project.MajorUpgrade.Schedule = UpgradeSchedule.afterInstallInitialize; + project.ReinstallMode = "amus"; + project.Platform = Platform.x64; + // MSI 4.0+ required + project.InstallerVersion = 400; + project.DefaultFeature = _agentFeatures.MainApplication; + project.Codepage = "1252"; + project.InstallPrivileges = InstallPrivileges.elevated; + project.LocalizationFile = "localization-en-us.wxl"; + project.OutFileName = $"datadog-agent-{_agentVersion.PackageVersion}-{_agentVersion.Version.Revision}-x86_64"; + project.DigitalSignature = _agentSignature.Signature; + + // clear default media as we will add it via MediaTemplate + project.Media.Clear(); + project.WixSourceGenerated += document => + { + WixSourceGenerated?.Invoke(document); + document + .Select("Wix/Product") + .AddElement("MediaTemplate", "CabinetTemplate=cab{0}.cab; CompressionLevel=high; EmbedCab=yes; MaximumUncompressedMediaSize=2"); + document + .FindAll("RemoveFolder") + .Where(x => x.HasAttribute("Id", + value => value.StartsWith("APPLICATIONDATADIRECTORY") || + value.StartsWith("EXAMPLECONFSLOCATION"))) + .Remove(); + document + .FindAll("Component") + .Where(x => x.Parent.HasAttribute("Id", + value => value.StartsWith("APPLICATIONDATADIRECTORY") || + value.StartsWith("EXAMPLECONFSLOCATION"))) + .ForEach(c => c.SetAttributeValue("KeyPath", "yes")); + document + .Select("Wix/Product") + .AddElement("CustomActionRef", "Id=WixFailWhenDeferred"); + }; + project.WixSourceFormated += (ref string content) => WixSourceFormated?.Invoke(content); + project.WixSourceSaved += name => WixSourceSaved?.Invoke(name); + + project.UI = WUI.WixUI_Common; + project.CustomUI = _agentInstallerUi; + + project.ResolveWildCards(pruneEmptyDirectories: true); + + return project; + } + + private Dir CreateProgramFilesFolder() + { + var targetBinFolder = CreateBinFolder(); + var binFolder = + new Dir(new Id("PROJECTLOCATION"), "%ProgramFiles%\\Datadog\\Datadog Agent", + targetBinFolder, + new Dir("LICENSES", + new Files($@"{InstallerSource}\LICENSES\*") + ), + new DirFiles($@"{InstallerSource}\*.json"), + new DirFiles($@"{InstallerSource}\*.txt"), + new CompressedDir(this, "embedded3", $@"{InstallerSource}\embedded3") + ); + if (_agentPython.IncludePython2) + { + binFolder.AddFile(new CompressedDir(this, "embedded2", $@"{InstallerSource}\embedded3")); + } + return binFolder; + } + + private static PermissionEx DefaultPermissions() + { + return new PermissionEx + { + User = "Everyone", + ServicePauseContinue = true, + ServiceQueryStatus = true, + ServiceStart = true, + ServiceStop = true, + ServiceUserDefinedControl = true + }; + } + + private static ServiceInstaller GenerateServiceInstaller(string name, string displayName, string description) + { + return new ServiceInstaller + { + Id = new Id("ddagentservice"), + Name = name, + DisplayName = displayName, + Description = description, + StartOn = SvcEvent.Install_Wait, + Start = SvcStartType.auto, + DelayedAutoStart = false, + RemoveOn = SvcEvent.Uninstall_Wait, + ServiceSid = ServiceSid.none, + FirstFailureActionType = FailureActionType.restart, + SecondFailureActionType = FailureActionType.restart, + ThirdFailureActionType = FailureActionType.restart, + RestartServiceDelayInSeconds = 60, + ResetPeriodInDays = 0, + PreShutdownDelay = 1000 * 60 * 3, + PermissionEx = DefaultPermissions(), + // Account must be a fully qualified name. + Account = "[DDAGENTUSER_PROCESSED_FQ_NAME]", + Password = "[DDAGENTUSER_PROCESSED_PASSWORD]" + }; + } + + private static ServiceInstaller GenerateDependentServiceInstaller(Id id, string name, string displayName, string description, string account, string password = null) + { + return new ServiceInstaller + { + Id = id, + Name = name, + DisplayName = displayName, + Description = description, + StartOn = null, + Start = SvcStartType.demand, + RemoveOn = SvcEvent.Uninstall_Wait, + ServiceSid = ServiceSid.none, + FirstFailureActionType = FailureActionType.restart, + SecondFailureActionType = FailureActionType.restart, + ThirdFailureActionType = FailureActionType.restart, + RestartServiceDelayInSeconds = 60, + ResetPeriodInDays = 0, + PreShutdownDelay = 1000 * 60 * 3, + PermissionEx = DefaultPermissions(), + Interactive = false, + Type = SvcType.ownProcess, + // Account must be a fully qualified name. + Account = account, + Password = password, + DependsOn = new[] + { + new ServiceDependency("datadogagent") + } + }; + } + + private Dir CreateBinFolder() + { + var agentService = GenerateServiceInstaller("datadogagent", "Datadog Agent", "Send metrics to Datadog"); + var processAgentService = GenerateDependentServiceInstaller(new Id("ddagentprocessservice"), "datadog-process-agent", "Datadog Process Agent", "Send process metrics to Datadog", "LocalSystem"); + var traceAgentService = GenerateDependentServiceInstaller(new Id("ddagenttraceservice"), "datadog-trace-agent", "Datadog Trace Agent", "Send tracing metrics to Datadog", "[DDAGENTUSER_PROCESSED_FQ_NAME]", "[DDAGENTUSER_PROCESSED_PASSWORD]"); + var systemProbeService = GenerateDependentServiceInstaller(new Id("ddagentsysprobeservice"), "datadog-system-probe", "Datadog System Probe", "Send network metrics to Datadog", "LocalSystem"); + + var targetBinFolder = new Dir(new Id("BIN"), "bin", + new WixSharp.File(_agentBinaries.Agent, agentService), + new EventSource + { + Name = "DatadogAgent", + Log = "Application", + EventMessageFile = $"[BIN]{Path.GetFileName(_agentBinaries.Agent)}", + AttributesDefinition = "SupportsErrors=yes; SupportsInformationals=yes; SupportsWarnings=yes" + }, + new WixSharp.File(_agentBinaries.LibDatadogAgentThree), + new Dir(new Id("AGENT"), "agent", + new Dir("dist", + new Files($@"{InstallerSource}\bin\agent\dist\*") + ), + new Dir("driver", + new Merge(_agentFeatures.Npm, $@"{BinSource}\agent\DDNPM.msm") + { + Feature = _agentFeatures.Npm + } + ), + new WixSharp.File(_agentBinaries.Tray), + new WixSharp.File(_agentBinaries.ProcessAgent, processAgentService), + new EventSource + { + Name = "datadog-process-agent", + Log = "Application", + EventMessageFile = $"[AGENT]{Path.GetFileName(_agentBinaries.ProcessAgent)}", + AttributesDefinition = "SupportsErrors=yes; SupportsInformationals=yes; SupportsWarnings=yes" + }, + new WixSharp.File(_agentBinaries.SystemProbe, systemProbeService), + new EventSource + { + Name = "datadog-system-probe", + Log = "Application", + EventMessageFile = $"[AGENT]{Path.GetFileName(_agentBinaries.SystemProbe)}", + AttributesDefinition = "SupportsErrors=yes; SupportsInformationals=yes; SupportsWarnings=yes" + }, + new WixSharp.File(_agentBinaries.TraceAgent, traceAgentService), + new EventSource + { + Name = "datadog-trace-agent", + Log = "Application", + EventMessageFile = $"[AGENT]{Path.GetFileName(_agentBinaries.TraceAgent)}", + AttributesDefinition = "SupportsErrors=yes; SupportsInformationals=yes; SupportsWarnings=yes" + } + ) + ); + if (_agentPython.IncludePython2) + { + targetBinFolder.AddFile(new WixSharp.File(_agentBinaries.LibDatadogAgentTwo)); + }; + return targetBinFolder; + } + + private Dir CreateAppDataFolder() + { + var appData = new Dir(new Id("APPLICATIONDATADIRECTORY"), "Datadog", + new DirFiles($@"{EtcSource}\*.yaml.example"), + new Dir("checks.d"), + new Dir(new Id("EXAMPLECONFSLOCATION"), "conf.d", + new Files($@"{EtcSource}\extra_package_files\EXAMPLECONFSLOCATION\*") + )); + + return new Dir(new Id("%CommonAppData%"), appData) + { + Attributes = { { "Name", "CommonAppData" } } + }; + } + + public event XDocumentGeneratedDlgt WixSourceGenerated; + public event XDocumentSavedDlgt WixSourceSaved; + public event XDocumentFormatedDlgt WixSourceFormated; + } +} diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentInstallerUI.cs b/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentInstallerUI.cs new file mode 100644 index 0000000000000..0157c96b6834b --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentInstallerUI.cs @@ -0,0 +1,81 @@ +using System.Collections.Generic; +using System.Drawing; +using System.Xml.Linq; +using WixSharp; +using WixSharp.Controls; + +namespace WixSetup.Datadog +{ + // ReSharper disable once InconsistentNaming + public class AgentInstallerUI : CustomUI + { + public AgentInstallerUI(IWixProjectEvents wixProjectEvents, AgentCustomActions agentCustomActions) + { + wixProjectEvents.WixSourceGenerated += OnWixSourceGenerated; + DialogRefs = new List + { + CommonDialogs.BrowseDlg, + CommonDialogs.DiskCostDlg, + CommonDialogs.ErrorDlg, + CommonDialogs.FilesInUse, + CommonDialogs.MsiRMFilesInUse, + CommonDialogs.PrepareDlg, + CommonDialogs.ProgressDlg, + CommonDialogs.ResumeDlg, + CommonDialogs.UserExit + }; + + this.AddXmlInclude("dialogs/apikeydlg.wxi") + .AddXmlInclude("dialogs/sitedlg.wxi") + .AddXmlInclude("dialogs/fatalError.wxi") + .AddXmlInclude("dialogs/ddagentuserdlg.wxi"); + + // NOTE: CustomActions called from dialog Controls will not be able to add messages to the log. + // If possible, prefer adding the custom action to an install sequence. + // https://learn.microsoft.com/en-us/windows/win32/msi/doaction-controlevent + + On(NativeDialogs.WelcomeDlg, Buttons.Next, new ShowDialog(NativeDialogs.LicenseAgreementDlg, Condition.NOT_Installed)); + On(NativeDialogs.WelcomeDlg, Buttons.Next, new ShowDialog(NativeDialogs.VerifyReadyDlg, Conditions.Installed_AND_PATCH)); + + On(NativeDialogs.LicenseAgreementDlg, Buttons.Back, new ShowDialog(NativeDialogs.WelcomeDlg)); + On(NativeDialogs.LicenseAgreementDlg, Buttons.Next, new ShowDialog(NativeDialogs.CustomizeDlg, Conditions.LicenseAccepted)); + + On(NativeDialogs.CustomizeDlg, Buttons.Back, new ShowDialog(NativeDialogs.MaintenanceTypeDlg, Condition.Installed) { Order = 1 }); + On(NativeDialogs.CustomizeDlg, Buttons.Back, new ShowDialog(NativeDialogs.LicenseAgreementDlg, Condition.NOT_Installed) { Order = 2 }); + On(NativeDialogs.CustomizeDlg, Buttons.Next, new ShowDialog(Dialogs.ApiKeyDialog) { Order = 1 }); + + On(Dialogs.ApiKeyDialog, Buttons.Next, new ShowDialog(Dialogs.SiteSelectionDialog)); + On(Dialogs.ApiKeyDialog, Buttons.Back, new ShowDialog(NativeDialogs.CustomizeDlg, Condition.NOT_Installed)); + On(Dialogs.ApiKeyDialog, Buttons.Back, new ShowDialog(NativeDialogs.MaintenanceTypeDlg, Conditions.Installed_AND_NOT_PATCH)); + On(Dialogs.SiteSelectionDialog, Buttons.Next, new ShowDialog(Dialogs.AgentUserDialog)); + On(Dialogs.SiteSelectionDialog, Buttons.Back, new ShowDialog(Dialogs.ApiKeyDialog)); + + On(Dialogs.AgentUserDialog, Buttons.Next, new ShowDialog(NativeDialogs.VerifyReadyDlg)); + On(Dialogs.AgentUserDialog, Buttons.Back, new ShowDialog(Dialogs.SiteSelectionDialog)); + + On(NativeDialogs.VerifyReadyDlg, Buttons.Back, new ShowDialog(Dialogs.AgentUserDialog, Condition.NOT_Installed | Condition.Create("WixUI_InstallMode = \"Change\"")) { Order = 1 }); + On(NativeDialogs.VerifyReadyDlg, Buttons.Back, new ShowDialog(NativeDialogs.MaintenanceTypeDlg, Conditions.Installed_AND_NOT_PATCH) { Order = 2 }); + On(NativeDialogs.VerifyReadyDlg, Buttons.Next, new ShowDialog(NativeDialogs.WelcomeDlg, Conditions.Installed_AND_PATCH) { Order = 3 }); + + On(NativeDialogs.MaintenanceWelcomeDlg, Buttons.Next, new ShowDialog(NativeDialogs.MaintenanceTypeDlg)); + + On(NativeDialogs.MaintenanceTypeDlg, "ChangeButton", new ShowDialog(NativeDialogs.CustomizeDlg)); + On(NativeDialogs.MaintenanceTypeDlg, Buttons.Repair, new ShowDialog(NativeDialogs.VerifyReadyDlg)); + On(NativeDialogs.MaintenanceTypeDlg, Buttons.Remove, new ShowDialog(NativeDialogs.VerifyReadyDlg)); + On(NativeDialogs.MaintenanceTypeDlg, Buttons.Back, new ShowDialog(NativeDialogs.MaintenanceWelcomeDlg)); + + On(NativeDialogs.ExitDialog, Buttons.Finish, new CloseDialog { Order = 9999 }); + + On(Dialogs.FatalErrorDialog, "OpenMsiLog", new ExecuteCustomAction(agentCustomActions.OpenMsiLog)); + } + + public void OnWixSourceGenerated(XDocument document) + { + var ui = document.Root.Select("Product/UI"); + // Need to customize here since color is not supported with standard methods + ui.AddTextStyle("WixUI_Font_Normal_White", new Font("Tahoma", 8), Color.White); + ui.AddTextStyle("WixUI_Font_Bigger_White", new Font("Tahoma", 12), Color.White); + ui.AddTextStyle("WixUI_Font_Title_White", new Font("Tahoma", 9, FontStyle.Bold), Color.White); + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentPython.cs b/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentPython.cs new file mode 100644 index 0000000000000..963bc5e1357b5 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentPython.cs @@ -0,0 +1,26 @@ +using System; +using System.Linq; + +namespace WixSetup.Datadog +{ + public class AgentPython + { + public string[] Runtimes { get; } + + public bool IncludePython2 { get; } + + public AgentPython() + { + Runtimes = new[] { "3" }; + var pyRuntimesEnv = Environment.GetEnvironmentVariable("PY_RUNTIMES"); + if (pyRuntimesEnv != null) + { + Runtimes = pyRuntimesEnv.Split(); + if (Runtimes.Any(runtime => runtime == "2")) + { + IncludePython2 = true; + } + } + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentSignature.cs b/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentSignature.cs new file mode 100644 index 0000000000000..46a0d31d8c27d --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentSignature.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.Xml.Linq; +using WixSharp; + +namespace WixSetup.Datadog +{ + public class AgentSignature + { + private readonly AgentPython _agentPython; + private readonly AgentBinaries _agentBinaries; + + public DigitalSignature Signature { get; } + + public AgentSignature(IWixProjectEvents wixProjectEvents, AgentPython agentPython, AgentBinaries agentBinaries) + { + wixProjectEvents.WixSourceGenerated += OnWixSourceGenerated; + _agentPython = agentPython; + _agentBinaries = agentBinaries; + var pfxFilePath = Environment.GetEnvironmentVariable("SIGN_PFX"); + var pfxFilePassword = Environment.GetEnvironmentVariable("SIGN_PFX_PW"); + + if (pfxFilePath != null && pfxFilePassword != null) + { + Signature = new DigitalSignature + { + PfxFilePath = pfxFilePath, + Password = pfxFilePassword, + HashAlgorithm = HashAlgorithmType.sha256, + // Only use timestamp servers from Microsoft-approved authenticode providers + // See https://docs.microsoft.com/en-us/windows/win32/seccrypto/time-stamping-authenticode-signatures + TimeUrls = new List + { + new Uri("http://timestamp.digicert.com"), + new Uri("http://timestamp.globalsign.com/scripts/timstamp.dll"), + new Uri("http://timestamp.comodoca.com/authenticode"), + new Uri("http://www.startssl.com/timestamp"), + new Uri("http://timestamp.sectigo.com"), + } + }; + } + } + + public void OnWixSourceGenerated(XDocument document) + { + if (Signature != null) + { + var filesToSign = new List + { + _agentBinaries.Agent, + _agentBinaries.Tray, + _agentBinaries.ProcessAgent, + _agentBinaries.SystemProbe, + _agentBinaries.TraceAgent, + _agentBinaries.LibDatadogAgentThree + }; + filesToSign.AddRange(_agentBinaries.PythonThreeBinaries); + if (_agentPython.IncludePython2) + { + filesToSign.Add(_agentBinaries.LibDatadogAgentTwo); + filesToSign.AddRange(_agentBinaries.PythonTwoBinaries); + } + + foreach (var file in filesToSign) + { + Signature.Apply(file); + } + } + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentVersion.cs b/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentVersion.cs new file mode 100644 index 0000000000000..33d10eb8908d6 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/Datadog/AgentVersion.cs @@ -0,0 +1,40 @@ +using System; +using System.Text.RegularExpressions; +using WixSharp; + +namespace WixSetup.Datadog +{ + public class AgentVersion + { + public Version Version { get; } + + public string PackageVersion { get; } + + public AgentVersion() + : this(Environment.GetEnvironmentVariable("PACKAGE_VERSION")) + { + + } + + public AgentVersion(string packageVersion) + { + PackageVersion = packageVersion; + Version = new Version(7, 99, 0, 2); + if (PackageVersion != null) + { + var versionRegex = new Regex(@"(?\d+)[.](?\d+)[.](?\d+)"); + var versionMatch = versionRegex.Match(PackageVersion); + Version = new Version( + major: versionMatch.Groups["major"].Value.ToInt(), + minor: versionMatch.Groups["minor"].Value.ToInt(), + build: versionMatch.Groups["build"].Value.ToInt(), + revision: 2 // Use 1 once we replace the main installer with this one. + ); + } + else + { + PackageVersion = $"{Version.Major}.{Version.Minor}.{Version.Build}"; + } + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/Dialogs.cs b/tools/windows/DatadogAgentInstaller/WixSetup/Dialogs.cs new file mode 100644 index 0000000000000..614d0c797680f --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/Dialogs.cs @@ -0,0 +1,10 @@ +namespace WixSetup +{ + public static class Dialogs + { + public const string ApiKeyDialog = "ApiKeyDlg"; + public const string SiteSelectionDialog = "SiteDlg"; + public const string AgentUserDialog = "DDAgentUserDlg"; + public const string FatalErrorDialog = "Custom_FatalError"; + } +} diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/IWixProjectEvents.cs b/tools/windows/DatadogAgentInstaller/WixSetup/IWixProjectEvents.cs new file mode 100644 index 0000000000000..35bfb361b586c --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/IWixProjectEvents.cs @@ -0,0 +1,24 @@ +using WixSharp; + +namespace WixSetup +{ + public interface IWixProjectEvents + { + /// + /// Occurs when WiX source code generated. Use this event if you need to modify generated XML (XDocument) + /// before it is compiled into MSI. + /// + event XDocumentGeneratedDlgt WixSourceGenerated; + + /// + /// Occurs when WiX source file is saved. Use this event if you need to do any post-processing of the generated/saved file. + /// + event XDocumentSavedDlgt WixSourceSaved; + + /// + /// Occurs when WiX source file is formatted and ready to be saved. Use this event if you need to do any custom formatting + /// of the XML content before it is saved by the compiler. + /// + event XDocumentFormatedDlgt WixSourceFormated; + } +} diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/Program.cs b/tools/windows/DatadogAgentInstaller/WixSetup/Program.cs new file mode 100644 index 0000000000000..f7b8034781ab6 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/Program.cs @@ -0,0 +1,18 @@ +using WixSharp; +using WixSetup.Datadog; + +namespace WixSetup +{ + internal class Program + { + private static void Main() + { + var installer = new AgentInstaller(); + Compiler.LightOptions += "-sval -reusecab -cc \"cabcache\""; + // ServiceConfig functionality is documented in the Windows Installer SDK to "not [work] as expected." Consider replacing ServiceConfig with the WixUtilExtension ServiceConfig element. + Compiler.CandleOptions += "-sw1150"; + installer.ConfigureProject().BuildMsi(); + } + } + +} diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/TextStylesExtensions.cs b/tools/windows/DatadogAgentInstaller/WixSetup/TextStylesExtensions.cs new file mode 100644 index 0000000000000..3ceb4be81f4a1 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/TextStylesExtensions.cs @@ -0,0 +1,28 @@ +using System.Drawing; +using System.Xml.Linq; + +namespace WixSetup +{ + public static class TextStylesExtensions + { + public static XElement AddTextStyle(this XElement ui, string id, Font font, Color color) + { + ui.Add(new XElement("TextStyle", + new XAttribute("Id", id), + // font.FontFamily.Name may be substituted by OS with the compatible font name + // this can happen when we build in a container. + // See: https://github.com/oleg-shilo/wixsharp/commit/7bdbfa30ed13d1f2c319ee4c42d374f7ac2c9134 + new XAttribute("FaceName", font.OriginalFontName), + new XAttribute("Size", font.Size), + new XAttribute("Red", color.R), + new XAttribute("Green", color.G), + new XAttribute("Blue", color.B), + new XAttribute("Bold", font.Bold ? "yes" : "no"), + new XAttribute("Italic", font.Italic ? "yes" : "no"), + new XAttribute("Strike", font.Strikeout ? "yes" : "no"), + new XAttribute("Underline", font.Underline ? "yes" : "no") + )); + return ui; + } + } +} diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/WixSetup.csproj b/tools/windows/DatadogAgentInstaller/WixSetup/WixSetup.csproj new file mode 100644 index 0000000000000..04ed9cfd3749d --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/WixSetup.csproj @@ -0,0 +1,35 @@ + + + + WinExe + net472 + x64 + $(MSBuildProjectName.Replace(" ", "_").Replace("-", "_")) + x64 + + + false + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/WixSetup.csproj.user b/tools/windows/DatadogAgentInstaller/WixSetup/WixSetup.csproj.user new file mode 100644 index 0000000000000..88a550947edbc --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/WixSetup.csproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/assets/LICENSE.rtf b/tools/windows/DatadogAgentInstaller/WixSetup/assets/LICENSE.rtf new file mode 100644 index 0000000000000..aa861659fe55e --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/assets/LICENSE.rtf @@ -0,0 +1,15 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1671\cocoasubrtf100 +{\fonttbl\f0\fmodern\fcharset0 CourierNewPSMT;} +{\colortbl;\red255\green255\blue255;} +{\*\expandedcolortbl;;} +\vieww12000\viewh15840\viewkind0 +\deftab720 +\pard\pardeftab720\sl276\slmult1\sa200\partightenfactor0 + +\f0\fs20 \cf0 Copyright 2016-present Datadog, Inc.\ +Licensed under the Apache License, Version 2.0 (the "License");you may not use this file except in compliance with the License.You may obtain a copy of the License at\ + {\field{\*\fldinst{HYPERLINK "http://www.apache.org/licenses/LICENSE-2.0"}}{\fldrslt http://www.apache.org/licenses/LICENSE-2.0}}\ +\ +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions and limitations under the License.\ +\ +} \ No newline at end of file diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/assets/banner_background.bmp b/tools/windows/DatadogAgentInstaller/WixSetup/assets/banner_background.bmp new file mode 100644 index 0000000000000..92bf7660fece1 Binary files /dev/null and b/tools/windows/DatadogAgentInstaller/WixSetup/assets/banner_background.bmp differ diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/assets/dialog_background.bmp b/tools/windows/DatadogAgentInstaller/WixSetup/assets/dialog_background.bmp new file mode 100644 index 0000000000000..8a7c2ada4953c Binary files /dev/null and b/tools/windows/DatadogAgentInstaller/WixSetup/assets/dialog_background.bmp differ diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/assets/project.ico b/tools/windows/DatadogAgentInstaller/WixSetup/assets/project.ico new file mode 100644 index 0000000000000..5fdf36b0d64c2 Binary files /dev/null and b/tools/windows/DatadogAgentInstaller/WixSetup/assets/project.ico differ diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/dialogs/apikeydlg.wxi b/tools/windows/DatadogAgentInstaller/WixSetup/dialogs/apikeydlg.wxi new file mode 100644 index 0000000000000..359523a6ccba6 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/dialogs/apikeydlg.wxi @@ -0,0 +1,31 @@ + + + + + + WixUI_InstallMode = "Repair" + NOT INSTALLED + NOT INSTALLED + + + + + 1 + + + + + + + + + + + diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/dialogs/ddagentuserdlg.wxi b/tools/windows/DatadogAgentInstaller/WixSetup/dialogs/ddagentuserdlg.wxi new file mode 100644 index 0000000000000..f41045725326a --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/dialogs/ddagentuserdlg.wxi @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/dialogs/fatalError.wxi b/tools/windows/DatadogAgentInstaller/WixSetup/dialogs/fatalError.wxi new file mode 100644 index 0000000000000..a011833c3f20b --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/dialogs/fatalError.wxi @@ -0,0 +1,24 @@ + + + + 1 + + + + + + + + + + + + + + + + + + + + diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/dialogs/sitedlg.wxi b/tools/windows/DatadogAgentInstaller/WixSetup/dialogs/sitedlg.wxi new file mode 100644 index 0000000000000..1bfb0fd3ae906 --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/dialogs/sitedlg.wxi @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + diff --git a/tools/windows/DatadogAgentInstaller/WixSetup/localization-en-us.wxl b/tools/windows/DatadogAgentInstaller/WixSetup/localization-en-us.wxl new file mode 100644 index 0000000000000..287e162e97c1d --- /dev/null +++ b/tools/windows/DatadogAgentInstaller/WixSetup/localization-en-us.wxl @@ -0,0 +1,61 @@ + + + {\WixUI_Font_Bigger}Welcome to the [ProductName] Setup Wizard + {\WixUI_Font_Normal}The Setup Wizard will install [ProductName] on your computer. Click Next to continue or Cancel to exit the Setup Wizard + + + {\WixUI_Font_Title_White}Change destination folder + {\WixUI_Font_Normal_White}Browse to the destination folder + {\WixUI_Font_Title_White}Custom Setup + {\WixUI_Font_Normal_White}Select the way you want features to be installed. + {\WixUI_Font_Title_White}Disk Space Requirements + {\WixUI_Font_Normal_White}The disk space required for the installation of the selected features. + {\WixUI_Font_Title_White}Destination Folder + {\WixUI_Font_Normal_White}Click Next to install to the default folder or click Change to choose another. + {\WixUI_Font_Title_White}End-User License Agreement + {\WixUI_Font_Normal_White}Please read the following license agreement carefully + {\WixUI_Font_Title_White}Change, repair, or remove installation + {\WixUI_Font_Normal_White}Select the operation you wish to perform. + {\WixUI_Font_Title_White}Installing [ProductName] + {\WixUI_Font_Title_White}Repairing [ProductName] + {\WixUI_Font_Title_White}Removing [ProductName] + {\WixUI_Font_Title_White}Ready to change [ProductName] + {\WixUI_Font_Title_White}Ready to install [ProductName] + {\WixUI_Font_Title_White}Ready to repair [ProductName] + {\WixUI_Font_Title_White}Ready to remove [ProductName] + + Agent + Launch Datadog Agent Manager + + + [ProductName] Setup + {\WixUI_Font_Normal_White}Enter the API Key + {\WixUI_Font_Title_White}[ShortCompanyName] API Key + Please enter the [ShortCompanyName] API Key: + + + + [ProductName] Setup + {\WixUI_Font_Normal_White}Select the [ShortCompanyName] Region + {\WixUI_Font_Title_White}[ShortCompanyName] Region + Which [ShortCompanyName] region do you want the Agent to send data to? + + + + [ProductName] Setup + {\WixUI_Font_Normal_White}Enter the agent user account + {\WixUI_Font_Title_White}[ShortCompanyName] Agent User Account + Please enter the username (leave blank to use ddagentuser): + Please enter the password (leave blank to use random password): + + + View Log + Detailed information on the error can be found in the installation log file. Click the View Log button to view the installation log. + + [ProductName] Setup + E&xit + WixUI_Bmp_Banner + The following applications are using files that need to be updated by this setup. Close these applications and then click &Retry to continue setup or Exit to exit it. + {\WixUI_Font_Normal_White}Some files that need to be updated are currently in use. + {\WixUI_Font_Title_White}Files in Use + diff --git a/tools/windows/install-help/cal/strings.cpp b/tools/windows/install-help/cal/strings.cpp index cba133a6a8c79..a7c606cf489a1 100644 --- a/tools/windows/install-help/cal/strings.cpp +++ b/tools/windows/install-help/cal/strings.cpp @@ -174,7 +174,7 @@ void getOsStrings() agent_exe = L"\"" + installdir + L"bin\\agent.exe\""; process_exe = - L"\"" + installdir + L"bin\\agent\\process-agent.exe\" --config=\"" + programdataroot + L"datadog.yaml\""; + L"\"" + installdir + L"bin\\agent\\process-agent.exe\" --cfgpath=\"" + programdataroot + L"datadog.yaml\""; trace_exe = L"\"" + installdir + L"bin\\agent\\trace-agent.exe\" --config=\"" + programdataroot + L"datadog.yaml\""; sysprobe_exe = L"\"" + installdir + L"bin\\agent\\system-probe.exe\""; embedded2Dir = installdir + L"embedded2";